Giter Site home page Giter Site logo

plotly / falcon Goto Github PK

View Code? Open in Web Editor NEW
5.1K 112.0 278.0 14.06 MB

Free, open-source SQL client for Windows and Mac ๐Ÿฆ…

Home Page: https://plot.ly/free-sql-client-download/

License: MIT License

JavaScript 93.94% CSS 2.75% HTML 1.08% Shell 1.45% Python 0.20% Dockerfile 0.58%
electron visualization plotly sql mysql-client postgresql falcon redshift

falcon's Introduction

Falcon logo

Falcon is a free, open-source SQL editor with inline data visualization. It currently supports connecting to RedShift, MySQL, PostgreSQL, IBM DB2, Impala, MS SQL, Oracle, SQLite and more (for connecting to Oracle, please, see here the instructions to install the required free Oracle Instant Client).

Heads up! Falcon is open source and works without an internet connection or a Plotly Chart Studio account. The software works well and we hope you find it useful. FYI, as a company we are spending most of our development effort on Dash Open Source & Dash Enterprise. Truth be told, we found that most companies we worked with preferred to own the analytical backend. With Dash, we provide the visualization and application primitives so that you can build your own tailor-made dashboards, analytical apps, or yes, even, SQL editors. If you are wondering what we're up to lately, check out our latest post on our Dash vision: Dash is bringing React to Python, R, and Julia.

Visit plot.ly to learn more or visit the Plotly forum.

Follow @plotlygraphs on Twitter for Falcon announcements.

โžก Download Falcon for Mac OS

โžก Download Falcon for Windows

โžก Download Falcon for Linux

Screencast of falcon sql client

Documentation

If you want to read more about connecting Falcon to your data warehouse, help.plot.ly is free and available online. You can also contribute to this documentation through GitHub.

Contributing

See CONTRIBUTING.md. You can also contact us if you would like a specific feature added.

We want to encourage a warm, welcoming, and safe environment for contributing to this project. See the code of conduct for more information.

Contact

Maintainers

Github Twitter
Chris Parmer @chriddyp
Tarun Gaba @tarzzz
Shannon Lal @shannonlal
Kinuthia Ndung'u @kndungu

Credit

This app is built with Electron, React, Redux, and Sequelize. Originally forked from electron-react-boilerplate.

License

Code released under the MIT ยฉ License.

falcon's People

Contributors

alexandresobolevski avatar alvaroabascar avatar bpostlethwaite avatar briandennis avatar chriddyp avatar cldougl avatar jackparmer avatar jakedex avatar kndungu avatar mfix22 avatar mperreux avatar n-riesco avatar nicolaskruchten avatar richardlitt avatar rmoestl avatar scjody avatar shannonlal avatar tarzzz avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

falcon's Issues

do not need `.spread` for preset queries

By default, the function will return two arguments: an array of results, and a metadata object, containing number of affected rows etc. Use .spread to access the results.

If you are running a type of query where you don't need the metadata, for example a SELECT query, you can pass in a query type to make sequelize format the results:

sequelize.query('SELECT...').spread(function (results, metadata) { // Raw query - use spread });

sequelize.query('SELECT...', { type: sequelize.QueryTypes.SELECT }).then(function (results) { // SELECT query - use then })

mssql connection should have `encrypt = true`

example of mssql Sequelize connection instance to an MS Azure database

this.connection = new Sequelize(database, username, password, {
            dialect: engine,
            port: portNumber,
            storage: databasePath,
            host: 'mssqltest.database.windows.net',
            dialectOptions: {
                encrypt: true
            }
});

SSL support for windows

  • make openssl work or find an alternative for windows
  • shell scripts createKeyes and redirectConnector won't work on windows due to the paths inside them
  • when calling sudo commands, the paths should be built using the nodejs path library, use path.dirname to convert directory paths and path.sep for separators

Multiple connections

Support multiple connections:

  • add session by clicking on a plus button
  • render settings page only when at least one conneciton exists
  • newly created session is created with the INITIAL_STATE props
  • keeps databases and tables information for several sessions such that the user get's back to exactly where he/she left off
  • supported by the API
  • UI revamp to use tabs
  • delete session by clicking on a minus button
  • session index is a user@host, use tooltip to show when cut because too long

Send port number via ipc channel to front end at startup

#74 needs this to work. https setup pings at https://connector.plot.ly:5000 but we want to keep the port possibly setup by the user from the command line. Simply importing OPTIONS object from backend/args.js does not work.

If a user starts up the app on another port the secure connection will not work since pings will be sent to the wrong port.

Affects:

  • Mac OS users that started the app from the command line and gave a port argument !== 5000

catch & log more errors

  • when query statement is not defined at /query endpoint
  • when connection takes too long (setup a timeout for sequelize?)

Request & use an official port

This tool should use an official port assigned by IANA before it's released to the public. See https://tools.ietf.org/html/rfc6335#section-8.1.1 for the process to request one.

Some notes:

  • Assignee & contact should be a global address like [email protected].
  • Port number: anything from the user port range is fine; let's let them pick one.
  • We should multiplex things so we can work with one port for all uses: getting data via the connector (securely and not), and controlling the connector remotely (if needed).

Let me know if you have any โ“โ” s

@chriddyp FYI

SSL Support

Plotly 2.0 runs over HTTPS but the connector server is running on HTTP. To connect Plotly 2.0 to the SQL connector the user needs to update their web browser settings to allow for insecure HTTP connections.

Here is the setting in Chrome:
image

Once this is enabled, Plotly 2.0 can connect to the connector but the connection is un-encrypted over HTTP. If you are running this locally, then this connection is just between your web browser and localhost, data isn't traveling over any other network.

To make these connections secure over a network (e.g. running the connector as a server) this app should use an SSL certificate and run over HTTPS.

Not working with Sqlite?

On Fedora 24 I enter the path to an sqlite db file, press connect and get the error popup below. sqlite3 is of course installed on the system.

Uncaught Exception:
Error: Please install sqlite3 package manually
    at new ConnectionManager (/home/scb/code/plotly/Plotly Database Connector-linux-x64/resources/app/node_modules/sequelize/lib/dialects/sqlite/connection-manager.js:25:13)
    at new SqliteDialect (/home/scb/code/plotly/Plotly Database Connector-linux-x64/resources/app/node_modules/sequelize/lib/dialects/sqlite/index.js:12:28)
    at new Sequelize (/home/scb/code/plotly/Plotly Database Connector-linux-x64/resources/app/node_modules/sequelize/lib/sequelize.js:233:18)
    at e.value (/home/scb/code/plotly/Plotly Database Connector-linux-x64/resources/app/backend/webpack:/backend/sequelizeManager.js:101:27)
    at e.value (/home/scb/code/plotly/Plotly Database Connector-linux-x64/resources/app/backend/webpack:/backend/sequelizeManager.js:128:18)
    at u (/home/scb/code/plotly/Plotly Database Connector-linux-x64/resources/app/backend/webpack:/backend/messageHandler.js:276:21)
    at EventEmitter.<anonymous> (/home/scb/code/plotly/Plotly Database Connector-linux-x64/resources/app/backend/webpack:/backend/messageHandler.js:114:3)
    at emitTwo (events.js:106:13)
    at EventEmitter.emit (events.js:191:7)
    at WebContents.<anonymous> (/home/scb/code/plotly/Plotly Database Connector-linux-x64/resources/electron.asar/browser/api/web-contents.js:209:13)
    at emitTwo (events.js:106:13)
    at WebContents.emit (events.js:191:7)

windows i32 and x62 package fails

{ [Error: spawn wine ENOENT]
  code: 'ENOENT',
  errno: 'ENOENT',
  syscall: 'spawn wine',
  path: 'wine',
  spawnargs:
   [ '/Users/Alexandre/Documents/workstation/repos/plotly-database-connector/node_modules/rcedit/bin/rcedit.exe',
     '/var/folders/br/36z88hys2cz7kcy97lkrc5c40000gn/T/electron-packager/win32-x64/Plotly Desktop Connector-win32-x64/Plotly Desktop Connector.exe' ] }

Redshift support

The Postgresql driver returns the following error when trying to connect to a Redshift server. Some Postgresql clients are able to work with Redshift. If that's not workable, any plans to add support for Redshift?

$11:22:53 GMT-0700 (PDT) - $[object Object]
$11:22:53 GMT-0700 (PDT) - $[object Object]
$11:22:53 GMT-0700 (PDT) - $Querying: SELECT datname AS database FROM pg_database WHERE datistemplate = false;
$11:22:53 GMT-0700 (PDT) - $Creating a connection for user dudleycarr

[FEATURE] SSL checkbox for database connection

Redshift connection object requires a dialectOptions: {ssl: Bool}
Other databases may support ssl as well.
Here an ssl checkbox is proposed.
The default value is currently undefined by sequelize which the app will set to false.

update README

talk about local-test-e2e set_creds.sh that is gitignored

API v1: modularize backend messageHandler and sequelizeManager

endpoints that should exist

  • /connect
    action: establish connection via config file when headless or ipc payload when not
    returns: connection state object
  • /authenticate
    action: checks for existing valid connection
    returns: connection state object
  • /databases :
    action: authenticate, queries databases
    returns: databases list
  • /tables?database=name :
    action: authenticate, queries tables
    returns: tables list
  • /preview?table=name :
    action: authenticate, queries top 5 rows of a table
    return: table preview of 5 rows
  • /query?statement=query
    action: authenticate, query
    return: rows received from the database
  • /disconnect
    action: disconnect, authenticate
    return: connection state object

Promise sequelize login message to the IPC main channel

On ipcMain.on('connect'), sequelizeManager.login should return a promised confirmation or error message of the connection established with a given database. Otherwise, login state is may not be updated when event.sender executes.

This requires:

  • rewrite sequelizeManager.js to have initialize send back a promise
  • update main.development.js to use the above promise

Use the UI to input connection credentials instead of hard code

Currently connection credentials are hard-coded inside main.development.js. They should be sent via the currently unused payload.

This requires:

  • add user input tags
  • update config with credentials
  • set credentials sent via the ipc channel using payload

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.