From 2e849991160891b512014b180abe8fad23beaac6 Mon Sep 17 00:00:00 2001 From: Julian Hyde Date: Thu, 14 Aug 2014 21:21:29 -0700 Subject: [PATCH] HIVE-6361 : Un-fork Sqlline First, copy https://github.com/julianhyde/sqlline as new module, hive-sqlline. Next, refactor SqlLine into org.apache.hive.sqlline package, in a format that can be compared with org.apache.hive.beeline. Make BeeLine a derived class from SqlLine, and remove the duplicate functionality. Last, apply to SqlLine commits made to BeeLine in trunk over the past few months. Commits are: * d8643de - HIVE-7390 : Make quote character optional and configurable in BeeLine CSV/TSV output (Ferdinand Xu via Szehon) * a2a2f5a - HIVE-7345 : Beeline changes its prompt to reflect successful database connection even after failing to connect (Ashish Kumar Singh via Navis) * 44e5aa6 - HIVE-6928: Beeline should not chop off 'describe extended' results by default (Chinna via Xuefu) * a66c6af - HIVE-6694: Beeline should provide a way to execute shell command as Hive CLI does (reviewed by Brock) * 9170a69 - HIVE-6561: Beeline should accept -i option to Initializing a SQL file (Navis via Xuefu) * a9a4477 - Rename TestBeelineArgParsing to SqlLineArgParsingTest. * b1104ff - HIVE-7200: Beeline output displays column heading even if --showHeader=false is set (Naveen Gangam via Xuefu) * 780bf9a - HIVE-7176 : FileInputStream is not closed in Commands#properties() (Navis via Ashutosh Chauhan) * 41a4a58 - HIVE-6684: Beeline does not accept comments that are preceded by spaces (Jeremy Beard via Xuefu) * 2d5f921 - Beeline throws ArrayIndexOutOfBoundsException for mismatched arguments (Szehon via Xuefu) * 148a80d - HIVE-5768 Beeline connection cannot be closed with not close command (Navis Ryu via Brock Noland) * d29e011 - HIVE-6652 : Beeline gives evasive error message for any unrecognized command line arguement (Xuefu Zhang via Ashutosh Chauhan) * 65d2dfb - HIVE-5155 : Support secure proxy user access to HiveServer2 (Prasad Mujumdar via Thejas Nair) * 402a782 - Copy some test cases from TestBeeLineWithArgs to SqlLineTest, using hsqldb instead of HiveServer2. * 40c6f1c - HIVE-6359 : sqlline -f fails on scripts with tabs in them. (Navis, reviewed by Xuefu Zhang, Thejas Nair) * e4fbf1f - HIVE-6173: Beeline doesn't accept --hiveconf option as Hive CLI does (reviewed by Prasad) * 57d2e88 - HIVE-6217: Refactor Beeline's JDBC connection to use property map instead of long url (reviewed by Prasad) * afc162b - HIVE-6045: Beeline hivevars is broken for more than one hivevar (Szehon via Xuefu) * 8581f98 - HIVE-6036: A test case for embedded sqlline - with URL jdbc:hive2:///default (Anandha L Ranganathan via Prasad Mujumdar) * 7e0ee81 - HIVE-5641 - SqlLineOpts ignores Throwable (Brock Noland reviewed by Prasad and Thejas) * f158581 - HIVE-4485 : sqlline prints null as empty strings (Thejas Nair reviewed by Ashutosh Chauhan) * b975200 - NPE printing banner "sqlline version xxx" when not running from a jar. Re-assign output. * 5dc437d - Test case for HIVE-5765. * ad51fb2 - Remove the Hive-specific list of SQL keywords. SqlLine's generic list is sufficient. Hive's driver can provide the rest. * 5662264 - HIVE-5082 : Beeline usage is printed twice when sqlline --help is executed (Xuefu Zhang via Ashutosh Chauhan) * a967297 - HIVE-5301 : Add a schema tool for offline metastore schema upgrade (Prasad Mujumdar via Ashutosh Chauhan) * b6e327f - BeeLine inherits resources from SqlLine. * a5f4be2 - HIVE-4568 - Beeline needs to support resolving variables (Xuefu Zhang reviewed by Thejas M Nair) * 530c994 - HIVE-5131: JDBC client's hive variables are not passed to HS2 (Xuefu Zhang via Thejas Nair) * b0d8336 - HIVE-4876: Beeling help text do not contain -f and -e parameters (Jarek Jarcec Cecho via Brock Noland) * f93918a - HIVE-4566 : NullPointerException if typeinfo and nativesql commands are executed at beeline before a DB connection is established (Xuefu Zhang via Ashutosh Chauhan) * 71e22c7 - HIVE-4364 : beeline always exits with 0 status, should exit with non-zero status on error (Rob Weltman via Ashutosh Chauhan) * 768fa78 - HIVE-4268 : Beeline should support the -f option (Rob Weltman via cws) Also, upgrade CLI to jline-2.1, so beeline and CLI use the same version of jline. --- beeline/pom.xml | 18 +- .../hive/beeline/AbstractCommandHandler.java | 104 - .../apache/hive/beeline/AbstractOutputFormat.java | 50 - .../src/java/org/apache/hive/beeline/BeeLine.java | 1921 ++------------ .../hive/beeline/BeeLineCommandCompletor.java | 51 - .../org/apache/hive/beeline/BeeLineCompletor.java | 57 - .../java/org/apache/hive/beeline/BeeLineOpts.java | 480 +--- .../apache/hive/beeline/BeeLineSignalHandler.java | 35 - .../org/apache/hive/beeline/BooleanCompletor.java | 36 - .../java/org/apache/hive/beeline/BufferedRows.java | 77 - .../java/org/apache/hive/beeline/ColorBuffer.java | 239 -- .../org/apache/hive/beeline/CommandHandler.java | 77 - .../src/java/org/apache/hive/beeline/Commands.java | 1333 ---------- .../apache/hive/beeline/DatabaseConnection.java | 304 --- .../apache/hive/beeline/DatabaseConnections.java | 76 - .../java/org/apache/hive/beeline/DriverInfo.java | 43 - .../org/apache/hive/beeline/HiveSchemaHelper.java | 21 - .../org/apache/hive/beeline/HiveSchemaTool.java | 24 +- .../org/apache/hive/beeline/IncrementalRows.java | 107 - .../java/org/apache/hive/beeline/OutputFile.java | 59 - .../java/org/apache/hive/beeline/OutputFormat.java | 27 - .../hive/beeline/ReflectiveCommandHandler.java | 53 - .../java/org/apache/hive/beeline/Reflector.java | 135 - beeline/src/java/org/apache/hive/beeline/Rows.java | 173 -- .../java/org/apache/hive/beeline/SQLCompletor.java | 91 - .../hive/beeline/SeparatedValuesOutputFormat.java | 90 - .../org/apache/hive/beeline/SunSignalHandler.java | 53 - .../apache/hive/beeline/TableNameCompletor.java | 47 - .../org/apache/hive/beeline/TableOutputFormat.java | 146 -- .../apache/hive/beeline/VerticalOutputFormat.java | 66 - .../hive/beeline/XMLAttributeOutputFormat.java | 66 - .../hive/beeline/XMLElementOutputFormat.java | 58 - .../org/apache/hive/beeline/util/QFileClient.java | 76 +- beeline/src/main/resources/BeeLine.properties | 177 -- .../org/apache/hive/beeline/BeeLine.properties | 48 + beeline/src/main/resources/sql-keywords.properties | 1 - .../apache/hive/beeline/TestBeelineArgParsing.java | 41 +- .../java/org/apache/hadoop/hive/cli/CliDriver.java | 80 +- .../apache/hadoop/hive/cli/SimpleCompleter.java | 66 + .../hadoop/hive/cli/TestCliDriverMethods.java | 22 +- .../apache/hive/beeline/TestBeeLineWithArgs.java | 10 +- pom.xml | 8 +- sqlline/HISTORY.md | 33 + sqlline/README.md | 95 + sqlline/doc/html.xsl | 58 + sqlline/doc/manual.xml | 2759 ++++++++++++++++++++ sqlline/doc/styles.css | 317 +++ sqlline/pom.xml | 107 + .../hive/sqlline/AbstractCommandHandler.java | 96 + .../apache/hive/sqlline/AbstractOutputFormat.java | 48 + .../org/apache/hive/sqlline/BooleanCompleter.java | 29 + .../java/org/apache/hive/sqlline/BufferedRows.java | 71 + .../apache/hive/sqlline/ClassNameCompleter.java | 163 ++ .../java/org/apache/hive/sqlline/ColorBuffer.java | 238 ++ .../org/apache/hive/sqlline/CommandHandler.java | 66 + .../src/java/org/apache/hive/sqlline/Commands.java | 1578 +++++++++++ .../apache/hive/sqlline/DatabaseConnection.java | 374 +++ .../apache/hive/sqlline/DatabaseConnections.java | 74 + .../org/apache/hive/sqlline/DispatchCallback.java | 108 + .../java/org/apache/hive/sqlline/DriverInfo.java | 39 + .../org/apache/hive/sqlline/IncrementalRows.java | 104 + .../java/org/apache/hive/sqlline/OutputFile.java | 55 + .../java/org/apache/hive/sqlline/OutputFormat.java | 23 + .../src/java/org/apache/hive/sqlline/Quoting.java | 35 + .../hive/sqlline/ReflectiveCommandHandler.java | 42 + .../java/org/apache/hive/sqlline/Reflector.java | 130 + sqlline/src/java/org/apache/hive/sqlline/Rows.java | 189 ++ .../hive/sqlline/SeparatedValuesOutputFormat.java | 70 + .../java/org/apache/hive/sqlline/SqlCompleter.java | 91 + .../src/java/org/apache/hive/sqlline/SqlLine.java | 2236 ++++++++++++++++ .../hive/sqlline/SqlLineCommandCompleter.java | 47 + .../org/apache/hive/sqlline/SqlLineCompleter.java | 56 + .../java/org/apache/hive/sqlline/SqlLineOpts.java | 519 ++++ .../apache/hive/sqlline/SqlLineSignalHandler.java | 35 + .../org/apache/hive/sqlline/SunSignalHandler.java | 59 + .../apache/hive/sqlline/TableNameCompleter.java | 42 + .../org/apache/hive/sqlline/TableOutputFormat.java | 148 ++ .../apache/hive/sqlline/VerticalOutputFormat.java | 61 + .../hive/sqlline/XmlAttributeOutputFormat.java | 49 + .../hive/sqlline/XmlElementOutputFormat.java | 54 + .../java/org/apache/hive/sqlline/package-info.java | 24 + sqlline/src/main/config/checkstyle/checker.xml | 282 ++ sqlline/src/main/config/checkstyle/header.txt | 17 + .../src/main/config/checkstyle/suppressions.xml | 28 + .../org/apache/hive/sqlline/SqlLine.properties | 177 ++ .../resources/org/apache/hive/sqlline/drivers.list | 60 + .../COM.FirstSQL.Dbcp.DbcpDriver.properties | 1 + .../COM.cloudscape.core.JDBCDriver.properties | 1 + .../COM.cloudscape.core.RmiJdbcDriver.properties | 1 + .../COM.ibm.db2.jdbc.app.DB2Driver.properties | 1 + .../COM.ibm.db2.jdbc.net.DB2Driver.properties | 1 + .../centura.java.sqlbase.SqlbaseDriver.properties | 1 + .../com.ddtek.jdbc.db2.DB2Driver.properties | 1 + ...m.ddtek.jdbc.informix.InformixDriver.properties | 1 + .../com.ddtek.jdbc.oracle.OracleDriver.properties | 1 + ...ddtek.jdbc.sqlserver.SQLServerDriver.properties | 1 + .../com.ddtek.jdbc.sybase.SybaseDriver.properties | 1 + ...com.ibm.as400.access.AS400JDBCDriver.properties | 1 + .../drivers/com.ibm.db2.jcc.DB2Driver.properties | 1 + .../com.imaginary.sql.msql.MsqlDriver.properties | 1 + .../drivers/com.inet.tds.TdsDriver.properties | 1 + .../drivers/com.informix.jdbc.IfxDriver.properties | 1 + .../com.internetcds.jdbc.tds.Driver.properties | 1 + ...om.internetcds.jdbc.tds.SybaseDriver.properties | 1 + .../com.jnetdirect.jsql.JSQLDriver.properties | 1 + .../com.lucidera.jdbc.LucidDbRmiDriver.properties | 1 + .../drivers/com.mckoi.JDBCDriver.properties | 1 + ...merant.datadirect.jdbc.db2.DB2Driver.properties | 1 + ...adirect.jdbc.informix.InformixDriver.properties | 1 + ....datadirect.jdbc.oracle.OracleDriver.properties | 1 + ...irect.jdbc.sqlserver.SQLServerDriver.properties | 1 + ....datadirect.jdbc.sybase.SybaseDriver.properties | 1 + ...osoft.jdbc.sqlserver.SQLServerDriver.properties | 1 + .../com.mysql.jdbc.DatabaseMetaData.properties | 1 + .../drivers/com.mysql.jdbc.Driver.properties | 1 + .../com.mysql.jdbc.NonRegisteringDriver.properties | 1 + .../com.pointbase.jdbc.jdbcDriver.properties | 1 + ...om.pointbase.jdbc.jdbcEmbeddedDriver.properties | 1 + ...m.pointbase.jdbc.jdbcUniversalDriver.properties | 1 + .../com.sap.dbtech.jdbc.DriverSapDB.properties | 1 + .../drivers/com.sybase.jdbc.SybDriver.properties | 1 + .../com.sybase.jdbc2.jdbc.SybDriver.properties | 1 + .../drivers/com.thinweb.tds.Driver.properties | 1 + ...co.daffodil.db.jdbc.DaffodilDBDriver.properties | 1 + .../interbase.interclient.Driver.properties | 1 + ...rsolv.jdbc.sequelink.SequeLinkDriver.properties | 1 + .../net.sourceforge.jtds.jdbc.Driver.properties | 1 + .../drivers/openlink.jdbc2.Driver.properties | 1 + .../drivers/oracle.jdbc.OracleDriver.properties | 1 + .../oracle.jdbc.driver.OracleDriver.properties | 1 + .../oracle.jdbc.pool.OracleDataSource.properties | 1 + .../org.axiondb.jdbc.AxionDriver.properties | 1 + ...org.enhydra.instantdb.jdbc.idbDriver.properties | 1 + .../drivers/org.gjt.mm.mysql.Driver.properties | 1 + .../sqlline/drivers/org.hsql.jdbcDriver.properties | 1 + .../drivers/org.hsqldb.jdbcDriver.properties | 1 + .../drivers/org.postgresql.Driver.properties | 1 + ...rg.sourceforge.jxdbcon.JXDBConDriver.properties | 1 + .../sqlline/drivers/postgres95.PGDriver.properties | 1 + .../sqlline/drivers/postgresql.Driver.properties | 1 + .../drivers/solid.jdbc.SolidDriver.properties | 1 + .../sun.jdbc.odbc.JdbcOdbcDriver.properties | 1 + .../weblogic.jdbc.mssqlserver4.Driver.properties | 1 + .../drivers/weblogic.jdbc.pool.Driver.properties | 1 + .../resources/org/apache/hive/sqlline/manual.txt | 2144 +++++++++++++++ .../apache/hive/sqlline/sql-keywords.properties | 1 + .../apache/hive/sqlline/SqlLineArgParsingTest.java | 138 + .../test/org/apache/hive/sqlline/SqlLineTest.java | 814 ++++++ 148 files changed, 14502 insertions(+), 6185 deletions(-) delete mode 100644 beeline/src/java/org/apache/hive/beeline/AbstractCommandHandler.java delete mode 100644 beeline/src/java/org/apache/hive/beeline/AbstractOutputFormat.java delete mode 100644 beeline/src/java/org/apache/hive/beeline/BeeLineCommandCompletor.java delete mode 100644 beeline/src/java/org/apache/hive/beeline/BeeLineCompletor.java delete mode 100644 beeline/src/java/org/apache/hive/beeline/BeeLineSignalHandler.java delete mode 100644 beeline/src/java/org/apache/hive/beeline/BooleanCompletor.java delete mode 100644 beeline/src/java/org/apache/hive/beeline/BufferedRows.java delete mode 100644 beeline/src/java/org/apache/hive/beeline/ColorBuffer.java delete mode 100644 beeline/src/java/org/apache/hive/beeline/CommandHandler.java delete mode 100644 beeline/src/java/org/apache/hive/beeline/Commands.java delete mode 100644 beeline/src/java/org/apache/hive/beeline/DatabaseConnection.java delete mode 100644 beeline/src/java/org/apache/hive/beeline/DatabaseConnections.java delete mode 100644 beeline/src/java/org/apache/hive/beeline/DriverInfo.java delete mode 100644 beeline/src/java/org/apache/hive/beeline/IncrementalRows.java delete mode 100644 beeline/src/java/org/apache/hive/beeline/OutputFile.java delete mode 100644 beeline/src/java/org/apache/hive/beeline/OutputFormat.java delete mode 100644 beeline/src/java/org/apache/hive/beeline/ReflectiveCommandHandler.java delete mode 100644 beeline/src/java/org/apache/hive/beeline/Reflector.java delete mode 100644 beeline/src/java/org/apache/hive/beeline/Rows.java delete mode 100644 beeline/src/java/org/apache/hive/beeline/SQLCompletor.java delete mode 100644 beeline/src/java/org/apache/hive/beeline/SeparatedValuesOutputFormat.java delete mode 100644 beeline/src/java/org/apache/hive/beeline/SunSignalHandler.java delete mode 100644 beeline/src/java/org/apache/hive/beeline/TableNameCompletor.java delete mode 100644 beeline/src/java/org/apache/hive/beeline/TableOutputFormat.java delete mode 100644 beeline/src/java/org/apache/hive/beeline/VerticalOutputFormat.java delete mode 100644 beeline/src/java/org/apache/hive/beeline/XMLAttributeOutputFormat.java delete mode 100644 beeline/src/java/org/apache/hive/beeline/XMLElementOutputFormat.java delete mode 100644 beeline/src/main/resources/BeeLine.properties create mode 100644 beeline/src/main/resources/org/apache/hive/beeline/BeeLine.properties delete mode 100644 beeline/src/main/resources/sql-keywords.properties create mode 100644 cli/src/java/org/apache/hadoop/hive/cli/SimpleCompleter.java create mode 100644 sqlline/HISTORY.md create mode 100644 sqlline/README.md create mode 100644 sqlline/doc/html.xsl create mode 100644 sqlline/doc/manual.xml create mode 100644 sqlline/doc/styles.css create mode 100644 sqlline/pom.xml create mode 100644 sqlline/src/java/org/apache/hive/sqlline/AbstractCommandHandler.java create mode 100644 sqlline/src/java/org/apache/hive/sqlline/AbstractOutputFormat.java create mode 100644 sqlline/src/java/org/apache/hive/sqlline/BooleanCompleter.java create mode 100644 sqlline/src/java/org/apache/hive/sqlline/BufferedRows.java create mode 100644 sqlline/src/java/org/apache/hive/sqlline/ClassNameCompleter.java create mode 100644 sqlline/src/java/org/apache/hive/sqlline/ColorBuffer.java create mode 100644 sqlline/src/java/org/apache/hive/sqlline/CommandHandler.java create mode 100644 sqlline/src/java/org/apache/hive/sqlline/Commands.java create mode 100644 sqlline/src/java/org/apache/hive/sqlline/DatabaseConnection.java create mode 100644 sqlline/src/java/org/apache/hive/sqlline/DatabaseConnections.java create mode 100644 sqlline/src/java/org/apache/hive/sqlline/DispatchCallback.java create mode 100644 sqlline/src/java/org/apache/hive/sqlline/DriverInfo.java create mode 100644 sqlline/src/java/org/apache/hive/sqlline/IncrementalRows.java create mode 100644 sqlline/src/java/org/apache/hive/sqlline/OutputFile.java create mode 100644 sqlline/src/java/org/apache/hive/sqlline/OutputFormat.java create mode 100644 sqlline/src/java/org/apache/hive/sqlline/Quoting.java create mode 100644 sqlline/src/java/org/apache/hive/sqlline/ReflectiveCommandHandler.java create mode 100644 sqlline/src/java/org/apache/hive/sqlline/Reflector.java create mode 100644 sqlline/src/java/org/apache/hive/sqlline/Rows.java create mode 100644 sqlline/src/java/org/apache/hive/sqlline/SeparatedValuesOutputFormat.java create mode 100644 sqlline/src/java/org/apache/hive/sqlline/SqlCompleter.java create mode 100644 sqlline/src/java/org/apache/hive/sqlline/SqlLine.java create mode 100644 sqlline/src/java/org/apache/hive/sqlline/SqlLineCommandCompleter.java create mode 100644 sqlline/src/java/org/apache/hive/sqlline/SqlLineCompleter.java create mode 100644 sqlline/src/java/org/apache/hive/sqlline/SqlLineOpts.java create mode 100644 sqlline/src/java/org/apache/hive/sqlline/SqlLineSignalHandler.java create mode 100644 sqlline/src/java/org/apache/hive/sqlline/SunSignalHandler.java create mode 100644 sqlline/src/java/org/apache/hive/sqlline/TableNameCompleter.java create mode 100644 sqlline/src/java/org/apache/hive/sqlline/TableOutputFormat.java create mode 100644 sqlline/src/java/org/apache/hive/sqlline/VerticalOutputFormat.java create mode 100644 sqlline/src/java/org/apache/hive/sqlline/XmlAttributeOutputFormat.java create mode 100644 sqlline/src/java/org/apache/hive/sqlline/XmlElementOutputFormat.java create mode 100644 sqlline/src/java/org/apache/hive/sqlline/package-info.java create mode 100644 sqlline/src/main/config/checkstyle/checker.xml create mode 100644 sqlline/src/main/config/checkstyle/header.txt create mode 100644 sqlline/src/main/config/checkstyle/suppressions.xml create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/SqlLine.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers.list create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/COM.FirstSQL.Dbcp.DbcpDriver.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/COM.cloudscape.core.JDBCDriver.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/COM.cloudscape.core.RmiJdbcDriver.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/COM.ibm.db2.jdbc.app.DB2Driver.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/COM.ibm.db2.jdbc.net.DB2Driver.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/centura.java.sqlbase.SqlbaseDriver.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/com.ddtek.jdbc.db2.DB2Driver.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/com.ddtek.jdbc.informix.InformixDriver.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/com.ddtek.jdbc.oracle.OracleDriver.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/com.ddtek.jdbc.sqlserver.SQLServerDriver.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/com.ddtek.jdbc.sybase.SybaseDriver.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/com.ibm.as400.access.AS400JDBCDriver.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/com.ibm.db2.jcc.DB2Driver.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/com.imaginary.sql.msql.MsqlDriver.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/com.inet.tds.TdsDriver.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/com.informix.jdbc.IfxDriver.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/com.internetcds.jdbc.tds.Driver.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/com.internetcds.jdbc.tds.SybaseDriver.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/com.jnetdirect.jsql.JSQLDriver.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/com.lucidera.jdbc.LucidDbRmiDriver.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/com.mckoi.JDBCDriver.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/com.merant.datadirect.jdbc.db2.DB2Driver.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/com.merant.datadirect.jdbc.informix.InformixDriver.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/com.merant.datadirect.jdbc.oracle.OracleDriver.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/com.merant.datadirect.jdbc.sqlserver.SQLServerDriver.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/com.merant.datadirect.jdbc.sybase.SybaseDriver.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/com.microsoft.jdbc.sqlserver.SQLServerDriver.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/com.mysql.jdbc.DatabaseMetaData.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/com.mysql.jdbc.Driver.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/com.mysql.jdbc.NonRegisteringDriver.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/com.pointbase.jdbc.jdbcDriver.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/com.pointbase.jdbc.jdbcEmbeddedDriver.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/com.pointbase.jdbc.jdbcUniversalDriver.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/com.sap.dbtech.jdbc.DriverSapDB.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/com.sybase.jdbc.SybDriver.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/com.sybase.jdbc2.jdbc.SybDriver.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/com.thinweb.tds.Driver.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/in.co.daffodil.db.jdbc.DaffodilDBDriver.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/interbase.interclient.Driver.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/intersolv.jdbc.sequelink.SequeLinkDriver.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/net.sourceforge.jtds.jdbc.Driver.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/openlink.jdbc2.Driver.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/oracle.jdbc.OracleDriver.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/oracle.jdbc.driver.OracleDriver.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/oracle.jdbc.pool.OracleDataSource.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/org.axiondb.jdbc.AxionDriver.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/org.enhydra.instantdb.jdbc.idbDriver.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/org.gjt.mm.mysql.Driver.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/org.hsql.jdbcDriver.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/org.hsqldb.jdbcDriver.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/org.postgresql.Driver.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/org.sourceforge.jxdbcon.JXDBConDriver.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/postgres95.PGDriver.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/postgresql.Driver.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/solid.jdbc.SolidDriver.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/sun.jdbc.odbc.JdbcOdbcDriver.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/weblogic.jdbc.mssqlserver4.Driver.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/drivers/weblogic.jdbc.pool.Driver.properties create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/manual.txt create mode 100644 sqlline/src/main/resources/org/apache/hive/sqlline/sql-keywords.properties create mode 100644 sqlline/src/test/org/apache/hive/sqlline/SqlLineArgParsingTest.java create mode 100644 sqlline/src/test/org/apache/hive/sqlline/SqlLineTest.java diff --git a/beeline/pom.xml b/beeline/pom.xml index 45fa02b..ddb283a 100644 --- a/beeline/pom.xml +++ b/beeline/pom.xml @@ -32,7 +32,7 @@ - + org.apache.hive @@ -48,6 +48,12 @@ org.apache.hive hive-shims ${project.version} + runtime + + + org.apache.hive + hive-sqlline + ${project.version} @@ -71,20 +77,10 @@ ${commons-io.version} - jline - jline - ${jline.version} - - org.apache.thrift libthrift ${libthrift.version} - - net.sf.supercsv - super-csv - ${super-csv.version} - org.apache.hive diff --git a/beeline/src/java/org/apache/hive/beeline/AbstractCommandHandler.java b/beeline/src/java/org/apache/hive/beeline/AbstractCommandHandler.java deleted file mode 100644 index c762096..0000000 --- a/beeline/src/java/org/apache/hive/beeline/AbstractCommandHandler.java +++ /dev/null @@ -1,104 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * This source file is based on code taken from SQLLine 1.0.2 - * See SQLLine notice in LICENSE - */ -package org.apache.hive.beeline; - -import java.util.Arrays; -import java.util.LinkedList; -import java.util.List; - -import jline.Completor; -import jline.NullCompletor; - -/** - * An abstract implementation of CommandHandler. - * - */ -public abstract class AbstractCommandHandler implements CommandHandler { - private final BeeLine beeLine; - private final String name; - private final String[] names; - private final String helpText; - private Completor[] parameterCompletors = new Completor[0]; - - - public AbstractCommandHandler(BeeLine beeLine, String[] names, String helpText, - Completor[] completors) { - this.beeLine = beeLine; - name = names[0]; - this.names = names; - this.helpText = helpText; - if (completors == null || completors.length == 0) { - parameterCompletors = new Completor[] { new NullCompletor() }; - } else { - List c = new LinkedList(Arrays.asList(completors)); - c.add(new NullCompletor()); - parameterCompletors = c.toArray(new Completor[0]); - } - } - - @Override - public String getHelpText() { - return helpText; - } - - - @Override - public String getName() { - return name; - } - - - @Override - public String[] getNames() { - return names; - } - - - @Override - public String matches(String line) { - if (line == null || line.length() == 0) { - return null; - } - - String[] parts = beeLine.split(line); - if (parts == null || parts.length == 0) { - return null; - } - - for (String name2 : names) { - if (name2.startsWith(parts[0])) { - return name2; - } - } - return null; - } - - public void setParameterCompletors(Completor[] parameterCompletors) { - this.parameterCompletors = parameterCompletors; - } - - @Override - public Completor[] getParameterCompletors() { - return parameterCompletors; - } -} diff --git a/beeline/src/java/org/apache/hive/beeline/AbstractOutputFormat.java b/beeline/src/java/org/apache/hive/beeline/AbstractOutputFormat.java deleted file mode 100644 index 97d27eb..0000000 --- a/beeline/src/java/org/apache/hive/beeline/AbstractOutputFormat.java +++ /dev/null @@ -1,50 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * This source file is based on code taken from SQLLine 1.0.2 - * See SQLLine notice in LICENSE - */ -package org.apache.hive.beeline; - -/** - * Abstract OutputFormat. - * - */ -abstract class AbstractOutputFormat implements OutputFormat { - - public int print(Rows rows) { - int count = 0; - Rows.Row header = (Rows.Row) rows.next(); - printHeader(header); - - while (rows.hasNext()) { - printRow(rows, header, (Rows.Row) rows.next()); - count++; - } - printFooter(header); - return count; - } - - - abstract void printHeader(Rows.Row header); - - abstract void printFooter(Rows.Row header); - - abstract void printRow(Rows rows, Rows.Row header, Rows.Row row); -} \ No newline at end of file diff --git a/beeline/src/java/org/apache/hive/beeline/BeeLine.java b/beeline/src/java/org/apache/hive/beeline/BeeLine.java index 57cb1c0..cfab8ca 100644 --- a/beeline/src/java/org/apache/hive/beeline/BeeLine.java +++ b/beeline/src/java/org/apache/hive/beeline/BeeLine.java @@ -15,632 +15,201 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - -/* - * This source file is based on code taken from SQLLine 1.0.2 - * See SQLLine notice in LICENSE - */ package org.apache.hive.beeline; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.Closeable; -import java.io.EOFException; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileWriter; +import org.apache.commons.cli.CommandLine; +import org.apache.commons.cli.OptionBuilder; +import org.apache.commons.cli.Options; + +import org.apache.hive.sqlline.SqlLine; +import org.apache.hive.sqlline.SqlLineOpts; + import java.io.IOException; import java.io.InputStream; -import java.io.PrintStream; -import java.io.PrintWriter; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; -import java.net.JarURLConnection; -import java.net.URL; -import java.net.URLConnection; -import java.sql.Connection; -import java.sql.DatabaseMetaData; -import java.sql.Driver; -import java.sql.DriverManager; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.SQLWarning; -import java.sql.Statement; -import java.text.ChoiceFormat; -import java.text.MessageFormat; import java.util.Arrays; import java.util.Collection; -import java.util.Collections; -import java.util.Date; import java.util.Enumeration; -import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; -import java.util.LinkedList; import java.util.List; -import java.util.ListIterator; import java.util.Map; +import java.util.MissingResourceException; import java.util.Properties; import java.util.ResourceBundle; import java.util.Set; import java.util.SortedSet; -import java.util.StringTokenizer; -import java.util.TreeMap; import java.util.TreeSet; -import java.util.jar.Attributes; -import java.util.jar.Manifest; -import java.util.zip.ZipEntry; -import java.util.zip.ZipFile; - -import jline.ClassNameCompletor; -import jline.Completor; -import jline.ConsoleReader; -import jline.FileNameCompletor; -import jline.History; -import jline.SimpleCompletor; - -import org.apache.commons.cli.CommandLine; -import org.apache.commons.cli.GnuParser; -import org.apache.commons.cli.OptionBuilder; -import org.apache.commons.cli.Options; -import org.apache.commons.cli.ParseException; -import org.apache.hadoop.io.IOUtils; - /** - * A console SQL shell with command completion. - *

- * TODO: - *

    - *
  • User-friendly connection prompts
  • - *
  • Page results
  • - *
  • Handle binary data (blob fields)
  • - *
  • Implement command aliases
  • - *
  • Stored procedure execution
  • - *
  • Binding parameters to prepared statements
  • - *
  • Scripting language
  • - *
  • XA transactions
  • - *
- * + * A console SQL shell for Hive, with command completion. */ -public class BeeLine implements Closeable { - private static final ResourceBundle resourceBundle = - ResourceBundle.getBundle(BeeLine.class.getSimpleName()); - private final BeeLineSignalHandler signalHandler = null; - private static final String separator = System.getProperty("line.separator"); - private boolean exit = false; - private final DatabaseConnections connections = new DatabaseConnections(); - public static final String COMMAND_PREFIX = "!"; - private final Completor beeLineCommandCompletor; - private Collection drivers = null; - private final BeeLineOpts opts = new BeeLineOpts(this, System.getProperties()); - private String lastProgress = null; - private final Map seenWarnings = new HashMap(); - private final Commands commands = new Commands(this); - private OutputFile scriptOutputFile = null; - private OutputFile recordOutputFile = null; - private PrintStream outputStream = new PrintStream(System.out, true); - private PrintStream errorStream = new PrintStream(System.err, true); - private ConsoleReader consoleReader; - private List batch = null; - private final Reflector reflector; - - private History history; - - private static final Options options = new Options(); +public class BeeLine extends SqlLine { + public static final int DEFAULT_MAX_WIDTH = 80; + public static final int DEFAULT_MAX_HEIGHT = 80; - public static final String BEELINE_DEFAULT_JDBC_DRIVER = "org.apache.hive.jdbc.HiveDriver"; + public static final String BEELINE_DEFAULT_JDBC_DRIVER = + "org.apache.hive.jdbc.HiveDriver"; public static final String BEELINE_DEFAULT_JDBC_URL = "jdbc:hive2://"; private static final String SCRIPT_OUTPUT_PREFIX = ">>>"; private static final int SCRIPT_OUTPUT_PAD_SIZE = 5; - private static final int ERRNO_OK = 0; - private static final int ERRNO_ARGS = 1; - private static final int ERRNO_OTHER = 2; - - private static final String HIVE_VAR_PREFIX = "--hivevar"; - private static final String HIVE_CONF_PREFIX = "--hiveconf"; - - private final Map formats = map(new Object[] { - "vertical", new VerticalOutputFormat(this), - "table", new TableOutputFormat(this), - "csv", new SeparatedValuesOutputFormat(this, ','), - "tsv", new SeparatedValuesOutputFormat(this, '\t'), - "dsv", new SeparatedValuesOutputFormat(this, BeeLineOpts.DEFAULT_DELIMITER_FOR_DSV), - "xmlattr", new XMLAttributeOutputFormat(this), - "xmlelements", new XMLElementOutputFormat(this), - }); - - - final CommandHandler[] commandHandlers = new CommandHandler[] { - new ReflectiveCommandHandler(this, new String[] {"quit", "done", "exit"}, - null), - new ReflectiveCommandHandler(this, new String[] {"connect", "open"}, - new Completor[] {new SimpleCompletor(getConnectionURLExamples())}), - new ReflectiveCommandHandler(this, new String[] {"describe"}, - new Completor[] {new TableNameCompletor(this)}), - new ReflectiveCommandHandler(this, new String[] {"indexes"}, - new Completor[] {new TableNameCompletor(this)}), - new ReflectiveCommandHandler(this, new String[] {"primarykeys"}, - new Completor[] {new TableNameCompletor(this)}), - new ReflectiveCommandHandler(this, new String[] {"exportedkeys"}, - new Completor[] {new TableNameCompletor(this)}), - new ReflectiveCommandHandler(this, new String[] {"manual"}, - null), - new ReflectiveCommandHandler(this, new String[] {"importedkeys"}, - new Completor[] {new TableNameCompletor(this)}), - new ReflectiveCommandHandler(this, new String[] {"procedures"}, - null), - new ReflectiveCommandHandler(this, new String[] {"tables"}, - null), - new ReflectiveCommandHandler(this, new String[] {"typeinfo"}, - null), - new ReflectiveCommandHandler(this, new String[] {"columns"}, - new Completor[] {new TableNameCompletor(this)}), - new ReflectiveCommandHandler(this, new String[] {"reconnect"}, - null), - new ReflectiveCommandHandler(this, new String[] {"dropall"}, - new Completor[] {new TableNameCompletor(this)}), - new ReflectiveCommandHandler(this, new String[] {"history"}, - null), - new ReflectiveCommandHandler(this, new String[] {"metadata"}, - new Completor[] { - new SimpleCompletor(getMetadataMethodNames())}), - new ReflectiveCommandHandler(this, new String[] {"nativesql"}, - null), - new ReflectiveCommandHandler(this, new String[] {"dbinfo"}, - null), - new ReflectiveCommandHandler(this, new String[] {"rehash"}, - null), - new ReflectiveCommandHandler(this, new String[] {"verbose"}, - null), - new ReflectiveCommandHandler(this, new String[] {"run"}, - new Completor[] {new FileNameCompletor()}), - new ReflectiveCommandHandler(this, new String[] {"batch"}, - null), - new ReflectiveCommandHandler(this, new String[] {"list"}, - null), - new ReflectiveCommandHandler(this, new String[] {"all"}, - null), - new ReflectiveCommandHandler(this, new String[] {"go", "#"}, - null), - new ReflectiveCommandHandler(this, new String[] {"script"}, - new Completor[] {new FileNameCompletor()}), - new ReflectiveCommandHandler(this, new String[] {"record"}, - new Completor[] {new FileNameCompletor()}), - new ReflectiveCommandHandler(this, new String[] {"brief"}, - null), - new ReflectiveCommandHandler(this, new String[] {"close"}, - null), - new ReflectiveCommandHandler(this, new String[] {"closeall"}, - null), - new ReflectiveCommandHandler(this, new String[] {"isolation"}, - new Completor[] {new SimpleCompletor(getIsolationLevels())}), - new ReflectiveCommandHandler(this, new String[] {"outputformat"}, - new Completor[] {new SimpleCompletor( - formats.keySet().toArray(new String[0]))}), - new ReflectiveCommandHandler(this, new String[] {"autocommit"}, - null), - new ReflectiveCommandHandler(this, new String[] {"commit"}, - null), - new ReflectiveCommandHandler(this, new String[] {"properties"}, - new Completor[] {new FileNameCompletor()}), - new ReflectiveCommandHandler(this, new String[] {"rollback"}, - null), - new ReflectiveCommandHandler(this, new String[] {"help", "?"}, - null), - new ReflectiveCommandHandler(this, new String[] {"set"}, - getOpts().optionCompletors()), - new ReflectiveCommandHandler(this, new String[] {"save"}, - null), - new ReflectiveCommandHandler(this, new String[] {"scan"}, - null), - new ReflectiveCommandHandler(this, new String[] {"sql"}, - null), - new ReflectiveCommandHandler(this, new String[] {"sh"}, - null), - new ReflectiveCommandHandler(this, new String[] {"call"}, - null), - new ReflectiveCommandHandler(this, new String[] {"nullemptystring"}, - new Completor[] {new BooleanCompletor()}), - }; - - - static final SortedSet KNOWN_DRIVERS = new TreeSet(Arrays.asList( - new String[] { + static final SortedSet HIVE_DRIVERS = + new TreeSet(Arrays.asList( "org.apache.hive.jdbc.HiveDriver", - "org.apache.hadoop.hive.jdbc.HiveDriver", - })); - - - static { - try { - Class.forName("jline.ConsoleReader"); - } catch (Throwable t) { - throw new ExceptionInInitializerError("jline-missing"); - } + "com.mysql.jdbc.DatabaseMetaData")); + + /** Prefix to the name of properties (passed to getConnection) that specify + * Hive variables. */ + private static final String HIVE_VAR_PREFIX = "hivevar:"; + + /** Prefix to the name of properties (passed to getConnection) that specify + * Hive configuration variables. */ + private static final String HIVE_CONF_PREFIX = "hiveconf:"; + + /** Combined resource bundle that first looks in BeeLine.properties, then in + * SqlLine.properties. */ + private static final ResourceBundle BEE_LINE_RESOURCE_BUNDLE = + new ChainResourceBundle( + Arrays.asList(ResourceBundle.getBundle(BeeLine.class.getName()), + SqlLine.RESOURCE_BUNDLE)); + + private static final Options COMMAND_LINE_OPTIONS = createBeeLineOptions(); + + @SuppressWarnings("AccessStaticViaInstance") + protected static Options createBeeLineOptions() { + // BeeLine options are an extension to SqlLine. + final Options options = createSqlLineOptions(); + + // Synchronized prevents other threads building options using the same + // static workspace in OptionBuilder. + synchronized (OptionBuilder.class) { + // -a + options.addOption(OptionBuilder + .hasArg() + .withArgName("authType") + .withDescription("the authentication type") + .create('a')); + + // Substitution option --hivevar + options.addOption(OptionBuilder + .withValueSeparator() + .hasArgs(2) + .withArgName("key=value") + .withLongOpt("hivevar") + .withDescription("hive variable name and value") + .create()); + + //hive conf option --hiveconf + options.addOption(OptionBuilder + .withValueSeparator() + .hasArgs(2) + .withArgName("property=value") + .withLongOpt("hiveconf") + .withDescription("Use value for given property") + .create()); + } + return options; } - static { - // -d - options.addOption(OptionBuilder - .hasArg() - .withArgName("driver class") - .withDescription("the driver class to use") - .create('d')); - - // -u - options.addOption(OptionBuilder - .hasArg() - .withArgName("database url") - .withDescription("the JDBC URL to connect to") - .create('u')); - - // -n - options.addOption(OptionBuilder - .hasArg() - .withArgName("username") - .withDescription("the username to connect as") - .create('n')); - - // -p - options.addOption(OptionBuilder - .hasArg() - .withArgName("password") - .withDescription("the password to connect as") - .create('p')); - - // -a - options.addOption(OptionBuilder - .hasArg() - .withArgName("authType") - .withDescription("the authentication type") - .create('a')); - - // -i - options.addOption(OptionBuilder - .hasArg() - .withArgName("init") - .withDescription("script file for initialization") - .create('i')); - - // -e - options.addOption(OptionBuilder - .hasArgs() - .withArgName("query") - .withDescription("query that should be executed") - .create('e')); - - // -f