diff --git bin/ext/hplsql.sh bin/ext/hplsql.sh new file mode 100644 index 0000000..ddaf324 --- /dev/null +++ bin/ext/hplsql.sh @@ -0,0 +1,37 @@ +# 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. + +THISSERVICE=hplsql +export SERVICE_LIST="${SERVICE_LIST}${THISSERVICE} " + +hplsql () { + CLASS=org.apache.hive.hplsql.Hplsql; + + # include only the HPL/SQL jar and its dependencies + hplsqlJarPath=`ls ${HIVE_LIB}/hive-hplsql-*.jar` + antlrJarPath="${HIVE_LIB}/antlr-runtime-4.5.jar" + hadoopClasspath="" + if [[ -n "${HADOOP_CLASSPATH}" ]] + then + hadoopClasspath="${HADOOP_CLASSPATH}:" + fi + export HADOOP_CLASSPATH="${hadoopClasspath}${HIVE_CONF_DIR}:${hplsqlJarPath}:${antlrJarPath}" + + exec $HADOOP jar ${hplsqlJarPath} $CLASS $HIVE_OPTS "$@" +} + +hplsql_help () { + hplsql "--help" +} diff --git bin/hplsql bin/hplsql new file mode 100755 index 0000000..6a5da7e --- /dev/null +++ bin/hplsql @@ -0,0 +1,25 @@ +#!/usr/bin/env bash + +# 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. + +bin=`dirname "$0"` +bin=`cd "$bin"; pwd` + +# Set Hadoop User classpath to true so that httpclient jars are taken from +# hive lib instead of hadoop lib. +export HADOOP_USER_CLASSPATH_FIRST=true + +. "$bin"/hive --service hplsql "$@" diff --git bin/hplsql.cmd bin/hplsql.cmd new file mode 100644 index 0000000..9148cfa --- /dev/null +++ bin/hplsql.cmd @@ -0,0 +1,58 @@ +@echo off +@rem Licensed to the Apache Software Foundation (ASF) under one or more +@rem contributor license agreements. See the NOTICE file distributed with +@rem this work for additional information regarding copyright ownership. +@rem The ASF licenses this file to You under the Apache License, Version 2.0 +@rem (the "License"); you may not use this file except in compliance with +@rem the License. You may obtain a copy of the License at +@rem +@rem http://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +SetLocal EnableDelayedExpansion + +pushd %CD%\.. +if not defined HIVE_HOME ( + set HIVE_HOME=%CD% +) +popd + +if "%HADOOP_BIN_PATH:~-1%" == "\" ( + set HADOOP_BIN_PATH=%HADOOP_BIN_PATH:~0,-1% +) + +if not defined JAVA_HOME ( + echo Error: JAVA_HOME is not set. + goto :eof +) + +@rem get the hadoop envrionment +if not exist %HADOOP_HOME%\libexec\hadoop-config.cmd ( + @echo +================================================================+ + @echo ^| Error: HADOOP_HOME is not set correctly ^| + @echo +----------------------------------------------------------------+ + @echo ^| Please set your HADOOP_HOME variable to the absolute path of ^| + @echo ^| the directory that contains \libexec\hadoop-config.cmd ^| + @echo +================================================================+ + exit /b 1 +) +@rem supress the HADOOP_HOME warnings in 1.x.x +set HADOOP_HOME_WARN_SUPPRESS=true + +@rem include only the HPL/SQL jar and its dependencies +pushd %HIVE_HOME%\lib +for /f %%a IN ('dir /b hive-hplsql-**.jar') do ( + set HADOOP_CLASSPATH=%HADOOP_CLASSPATH%;%HIVE_HOME%\lib\%%a +) +set HADOOP_CLASSPATH=%HADOOP_CLASSPATH%;%HIVE_HOME%\lib\antlr-runtime-4.5.jar +popd +set HADOOP_USER_CLASSPATH_FIRST=true +call %HADOOP_HOME%\libexec\hadoop-config.cmd + +call "%JAVA_HOME%\bin\java" %JAVA_HEAP_MAX% %HADOOP_OPTS% -classpath %HADOOP_CLASSPATH% org.apache.hive.hplsql.Hplsql %* + +endlocal diff --git hplsql/pom.xml hplsql/pom.xml new file mode 100644 index 0000000..c4b41cf --- /dev/null +++ hplsql/pom.xml @@ -0,0 +1,103 @@ + + + + 4.0.0 + + org.apache.hive + hive + 2.0.0-SNAPSHOT + ../pom.xml + + + hive-hplsql + jar + Hive HPL/SQL + + + .. + false + + + + + com.google.guava + guava + ${guava.version} + + + commons-collections + commons-collections + 3.2.1 + + + commons-cli + commons-cli + ${commons-cli.version} + + + commons-lang + commons-lang + ${commons-lang.version} + + + commons-logging + commons-logging + ${commons-logging.version} + + + + commons-io + commons-io + ${commons-io.version} + + + org.apache.hive + hive-exec + ${project.version} + + + org.antlr + antlr4-runtime + 4.5 + + + + + + hadoop-1 + + + org.apache.hadoop + hadoop-core + ${hadoop-20S.version} + true + + + + + hadoop-2 + + + org.apache.hadoop + hadoop-common + ${hadoop-23.version} + true + + + + + diff --git hplsql/src/main/java/org/apache/hive/hplsql/Arguments.java hplsql/src/main/java/org/apache/hive/hplsql/Arguments.java new file mode 100644 index 0000000..604d9a7 --- /dev/null +++ hplsql/src/main/java/org/apache/hive/hplsql/Arguments.java @@ -0,0 +1,206 @@ +/** + * 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. + */ + +package org.apache.hive.hplsql; + +import java.util.HashMap; +import java.util.Map; +import java.util.Properties; +import org.apache.commons.cli.CommandLine; +import org.apache.commons.cli.GnuParser; +import org.apache.commons.cli.HelpFormatter; +import org.apache.commons.cli.Option; +import org.apache.commons.cli.Options; +import org.apache.commons.cli.OptionBuilder; +import org.apache.commons.cli.ParseException; + +public class Arguments { + private CommandLine commandLine; + private Options options = new Options(); + + String execString; + String fileName; + String main; + Map vars = new HashMap(); + + @SuppressWarnings("static-access") + Arguments() { + // -e 'query' + options.addOption(OptionBuilder + .hasArg() + .withArgName("quoted-query-string") + .withDescription("HPL/SQL from command line") + .create('e')); + + // -f + options.addOption(OptionBuilder + .hasArg() + .withArgName("filename") + .withDescription("HPL/SQL from a file") + .create('f')); + + // -main entry_point_name + options.addOption(OptionBuilder + .hasArg() + .withArgName("procname") + .withDescription("Entry point (procedure or function name)") + .create("main")); + + // -hiveconf x=y + options.addOption(OptionBuilder + .withValueSeparator() + .hasArgs(2) + .withArgName("property=value") + .withLongOpt("hiveconf") + .withDescription("Value for given property") + .create()); + + // Substitution option -d, --define + options.addOption(OptionBuilder + .withValueSeparator() + .hasArgs(2) + .withArgName("key=value") + .withLongOpt("define") + .withDescription("Variable subsitution e.g. -d A=B or --define A=B") + .create('d')); + + // Substitution option --hivevar + options.addOption(OptionBuilder + .withValueSeparator() + .hasArgs(2) + .withArgName("key=value") + .withLongOpt("hivevar") + .withDescription("Variable subsitution e.g. --hivevar A=B") + .create()); + + // [-version|--version] + options.addOption(new Option("version", "version", false, "Print HPL/SQL version")); + + // [-trace|--trace] + options.addOption(new Option("trace", "trace", false, "Print debug information")); + + // [-offline|--offline] + options.addOption(new Option("offline", "offline", false, "Offline mode - skip SQL execution")); + + // [-H|--help] + options.addOption(new Option("H", "help", false, "Print help information")); + } + + /** + * Parse the command line arguments + */ + public boolean parse(String[] args) { + try { + commandLine = new GnuParser().parse(options, args); + execString = commandLine.getOptionValue('e'); + fileName = commandLine.getOptionValue('f'); + main = commandLine.getOptionValue("main"); + Properties p = commandLine.getOptionProperties("hiveconf"); + for(String key : p.stringPropertyNames()) { + vars.put(key, p.getProperty(key)); + } + p = commandLine.getOptionProperties("hivevar"); + for(String key : p.stringPropertyNames()) { + vars.put(key, p.getProperty(key)); + } + p = commandLine.getOptionProperties("define"); + for(String key : p.stringPropertyNames()) { + vars.put(key, p.getProperty(key)); + } + } catch (ParseException e) { + System.err.println(e.getMessage()); + return false; + } + return true; + } + + /** + * Get the value of execution option -e + */ + public String getExecString() { + return execString; + } + + /** + * Get the value of file option -f + */ + public String getFileName() { + return fileName; + } + + /** + * Get the value of -main option + */ + public String getMain() { + return main; + } + + /** + * Get the variables + */ + public Map getVars() { + return vars; + } + + /** + * Test whether version option is set + */ + public boolean hasVersionOption() { + if(commandLine.hasOption("version")) { + return true; + } + return false; + } + + /** + * Test whether debug option is set + */ + public boolean hasTraceOption() { + if(commandLine.hasOption("trace")) { + return true; + } + return false; + } + + /** + * Test whether offline option is set + */ + public boolean hasOfflineOption() { + if(commandLine.hasOption("offline")) { + return true; + } + return false; + } + + /** + * Test whether help option is set + */ + public boolean hasHelpOption() { + if(commandLine.hasOption('H')) { + return true; + } + return false; + } + + /** + * Print help information + */ + public void printHelp() { + new HelpFormatter().printHelp("hplsql", options); + } +} diff --git hplsql/src/main/java/org/apache/hive/hplsql/Conf.java hplsql/src/main/java/org/apache/hive/hplsql/Conf.java new file mode 100644 index 0000000..88afbb5 --- /dev/null +++ hplsql/src/main/java/org/apache/hive/hplsql/Conf.java @@ -0,0 +1,175 @@ +/** + * 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. + */ + +package org.apache.hive.hplsql; + +import java.net.URL; +import java.util.HashMap; + +import org.apache.hadoop.conf.Configuration; +import org.apache.hive.hplsql.Exec.OnError; + +/** + * HPL/SQL run-time configuration + */ +public class Conf extends Configuration { + + public static final String SITE_XML = "hplsql-site.xml"; + public static final String DOT_HPLSQLRC = ".hplsqlrc"; + public static final String HPLSQLRC = "hplsqlrc"; + public static final String HPLSQL_LOCALS_SQL = "hplsql_locals.sql"; + + public static final String CONN_CONVERT = "hplsql.conn.convert."; + public static final String CONN_DEFAULT = "hplsql.conn.default"; + public static final String DUAL_TABLE = "hplsql.dual.table"; + public static final String INSERT_VALUES = "hplsql.insert.values"; + public static final String ONERROR = "hplsql.onerror"; + public static final String TEMP_TABLES = "hplsql.temp.tables"; + public static final String TEMP_TABLES_SCHEMA = "hplsql.temp.tables.schema"; + public static final String TEMP_TABLES_LOCATION = "hplsql.temp.tables.location"; + + public static final String TRUE = "true"; + public static final String FALSE = "false"; + public static final String YES = "yes"; + public static final String NO = "no"; + + public enum InsertValues {NATIVE, SELECT}; + public enum TempTables {NATIVE, MANAGED}; + + public String defaultConnection; + + OnError onError = OnError.EXCEPTION; + InsertValues insertValues = InsertValues.NATIVE; + TempTables tempTables = TempTables.NATIVE; + + String dualTable = "default.dual"; + + String tempTablesSchema = ""; + String tempTablesLocation = "/tmp/hplsql"; + + HashMap connConvert = new HashMap(); + + /** + * Set an option + */ + public void setOption(String key, String value) { + if (key.startsWith(CONN_CONVERT)) { + setConnectionConvert(key.substring(19), value); + } + else if (key.compareToIgnoreCase(CONN_DEFAULT) == 0) { + defaultConnection = value; + } + else if (key.compareToIgnoreCase(DUAL_TABLE) == 0) { + dualTable = value; + } + else if (key.compareToIgnoreCase(INSERT_VALUES) == 0) { + setInsertValues(value); + } + else if (key.compareToIgnoreCase(ONERROR) == 0) { + setOnError(value); + } + else if (key.compareToIgnoreCase(TEMP_TABLES) == 0) { + setTempTables(value); + } + else if (key.compareToIgnoreCase(TEMP_TABLES_SCHEMA) == 0) { + tempTablesSchema = value; + } + else if (key.compareToIgnoreCase(TEMP_TABLES_LOCATION) == 0) { + tempTablesLocation = value; + } + } + + /** + * Set hplsql.insert.values option + */ + private void setInsertValues(String value) { + if (value.compareToIgnoreCase("NATIVE") == 0) { + insertValues = InsertValues.NATIVE; + } + else if (value.compareToIgnoreCase("SELECT") == 0) { + insertValues = InsertValues.SELECT; + } + } + + /** + * Set hplsql.temp.tables option + */ + private void setTempTables(String value) { + if (value.compareToIgnoreCase("NATIVE") == 0) { + tempTables = TempTables.NATIVE; + } + else if (value.compareToIgnoreCase("MANAGED") == 0) { + tempTables = TempTables.MANAGED; + } + } + + /** + * Set error handling approach + */ + private void setOnError(String value) { + if (value.compareToIgnoreCase("EXCEPTION") == 0) { + onError = OnError.EXCEPTION; + } + else if (value.compareToIgnoreCase("SETERROR") == 0) { + onError = OnError.SETERROR; + } + if (value.compareToIgnoreCase("STOP") == 0) { + onError = OnError.STOP; + } + } + + /** + * Set whether convert or not SQL for the specified connection profile + */ + void setConnectionConvert(String name, String value) { + boolean convert = false; + if (value.compareToIgnoreCase(TRUE) == 0 || value.compareToIgnoreCase(YES) == 0) { + convert = true; + } + connConvert.put(name, convert); + } + + /** + * Get whether convert or not SQL for the specified connection profile + */ + boolean getConnectionConvert(String name) { + Boolean convert = connConvert.get(name); + if (convert != null) { + return convert.booleanValue(); + } + return false; + } + + /** + * Load parameters + */ + public void init() { + addResource(SITE_XML); + } + + /** + * Get the location of the configuration file + */ + public String getLocation() { + URL url = getResource(SITE_XML); + if (url != null) { + return url.toString(); + } + return ""; + } +} diff --git hplsql/src/main/java/org/apache/hive/hplsql/Conn.java hplsql/src/main/java/org/apache/hive/hplsql/Conn.java new file mode 100644 index 0000000..828fbc3 --- /dev/null +++ hplsql/src/main/java/org/apache/hive/hplsql/Conn.java @@ -0,0 +1,243 @@ +/** + * 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. + */ + +package org.apache.hive.hplsql; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Stack; +import java.sql.DriverManager; +import java.sql.Connection; +import java.sql.SQLException; +import java.sql.Statement; +import java.sql.ResultSet; + +public class Conn { + + public enum Type {DB2, HIVE, MYSQL, TERADATA}; + + HashMap> connections = new HashMap>(); + HashMap connStrings = new HashMap(); + HashMap connTypes = new HashMap(); + + HashMap> connInits = new HashMap>(); + HashMap> preSql = new HashMap>(); + + Exec exec; + Timer timer = new Timer(); + boolean trace = false; + + Conn(Exec e) { + exec = e; + trace = exec.getTrace(); + } + + /** + * Execute a SQL query + */ + public Query executeQuery(Query query, String connName) { + try { + Connection conn = getConnection(connName); + runPreSql(connName, conn); + Statement stmt = conn.createStatement(); + timer.start(); + ResultSet rs = stmt.executeQuery(query.sql); + timer.stop(); + query.set(conn, stmt, rs); + if (trace) { + exec.trace(null, "Query executed successfully (" + timer.format() + ")"); + } + } catch (Exception e) { + query.setError(e); + } + return query; + } + + public Query executeQuery(String sql, String connName) { + return executeQuery(new Query(sql), connName); + } + + /** + * Execute a SQL statement + */ + public Query executeSql(String sql, String connName) { + Query query = new Query(sql); + try { + Connection conn = getConnection(connName); + runPreSql(connName, conn); + Statement stmt = conn.createStatement(); + ResultSet rs = null; + if (stmt.execute(sql)) { + rs = stmt.getResultSet(); + } + query.set(conn, stmt, rs); + } catch (Exception e) { + query.setError(e); + } + return query; + } + + /** + * Close the query object + */ + public void closeQuery(Query query, String connName) { + query.closeStatement(); + returnConnection(connName, query.getConnection()); + } + + /** + * Run pre-SQL statements + * @throws SQLException + */ + void runPreSql(String connName, Connection conn) throws SQLException { + ArrayList sqls = preSql.get(connName); + if (sqls != null) { + Statement s = conn.createStatement(); + for (String sql : sqls) { + s.execute(sql); + } + s.close(); + preSql.remove(connName); + } + } + + /** + * Get a connection + * @throws Exception + */ + synchronized Connection getConnection(String connName) throws Exception { + Stack connStack = connections.get(connName); + String connStr = connStrings.get(connName); + if (connStr == null) { + throw new Exception("Unknown connection profile: " + connName); + } + if (connStack != null && !connStack.empty()) { // Reuse an existing connection + return connStack.pop(); + } + Connection c = openConnection(connStr); + ArrayList sqls = connInits.get(connName); // Run initialization statements on the connection + if (sqls != null) { + Statement s = c.createStatement(); + for (String sql : sqls) { + s.execute(sql); + } + s.close(); + } + return c; + } + + /** + * Open a new connection + * @throws Exception + */ + Connection openConnection(String connStr) throws Exception { + String driver = "org.apache.hadoop.hive.jdbc.HiveDriver"; + String url = "jdbc:hive://"; + String usr = ""; + String pwd = ""; + if (connStr != null) { + String[] c = connStr.split(";"); + if (c.length >= 1) { + driver = c[0]; + } + if (c.length >= 2) { + url = c[1]; + } + if (c.length >= 3) { + usr = c[2]; + } + if (c.length >= 4) { + pwd = c[3]; + } + } + Class.forName(driver); + timer.start(); + Connection conn = DriverManager.getConnection(url, usr, pwd); + timer.stop(); + if (trace) { + exec.trace(null, "Open connection: " + url + " (" + timer.format() + ")"); + } + return conn; + } + + /** + * Get the database type by profile name + */ + Conn.Type getTypeByProfile(String name) { + return connTypes.get(name); + } + + /** + * Get the database type by connection string + */ + Conn.Type getType(String connStr) { + if (connStr.contains("hive.")) { + return Type.HIVE; + } + else if (connStr.contains("db2.")) { + return Type.DB2; + } + else if (connStr.contains("mysql.")) { + return Type.MYSQL; + } + else if (connStr.contains("teradata.")) { + return Type.TERADATA; + } + return Type.HIVE; + } + + /** + * Return the connection to the pool + */ + void returnConnection(String name, Connection conn) { + if (conn != null) { + connections.get(name).push(conn); + } + } + + /** + * Add a new connection string + */ + public void addConnection(String name, String connStr) { + connections.put(name, new Stack()); + connStrings.put(name, connStr); + connTypes.put(name, getType(connStr)); + } + + /** + * Add initialization statements for the specified connection + */ + public void addConnectionInit(String name, String connInit) { + ArrayList a = new ArrayList(); + String[] sa = connInit.split(";"); + for (String s : sa) { + s = s.trim(); + if (!s.isEmpty()) { + a.add(s); + } + } + connInits.put(name, a); + } + + /** + * Add SQL statements to be executed before executing the next SQL statement (pre-SQL) + */ + public void addPreSql(String name, ArrayList sql) { + preSql.put(name, sql); + } +} diff --git hplsql/src/main/java/org/apache/hive/hplsql/Converter.java hplsql/src/main/java/org/apache/hive/hplsql/Converter.java new file mode 100644 index 0000000..46f98a9 --- /dev/null +++ hplsql/src/main/java/org/apache/hive/hplsql/Converter.java @@ -0,0 +1,56 @@ +/** + * 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. + */ + +package org.apache.hive.hplsql; + +/** + * On-the-fly SQL Converter + */ +public class Converter { + + Exec exec; + boolean trace = false; + + Converter(Exec e) { + exec = e; + trace = exec.getTrace(); + } + + /** + * Convert a data type + */ + String dataType(HplsqlParser.DtypeContext type, HplsqlParser.Dtype_lenContext len) { + String d = null; + if (type.T_VARCHAR2() != null) { + d = "STRING"; + } + else if (type.T_NUMBER() != null) { + d = "DECIMAL"; + if (len != null) { + d += exec.getText(len); + } + } + if (d != null) { + return d; + } + else if (len != null) { + return exec.getText(type, type.getStart(), len.getStop()); + } + return exec.getText(type, type.getStart(), type.getStop()); + } +} diff --git hplsql/src/main/java/org/apache/hive/hplsql/Copy.java hplsql/src/main/java/org/apache/hive/hplsql/Copy.java new file mode 100644 index 0000000..6415573 --- /dev/null +++ hplsql/src/main/java/org/apache/hive/hplsql/Copy.java @@ -0,0 +1,425 @@ +/** + * 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. + */ + +package org.apache.hive.hplsql; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.ResultSetMetaData; +import java.util.HashMap; +import java.util.Map; +import java.util.List; +import java.io.FileOutputStream; +import java.io.IOException; + +import org.apache.hadoop.fs.FileSystem; +import org.apache.hadoop.fs.Path; +import org.antlr.v4.runtime.ParserRuleContext; +import org.apache.commons.lang.StringEscapeUtils; +import org.apache.commons.lang3.tuple.Pair; + +public class Copy { + + Exec exec; + Timer timer = new Timer(); + boolean trace = false; + boolean info = false; + + long srcSizeInBytes = 0; + + String delimiter = "\t"; + boolean sqlInsert = false; + String sqlInsertName; + String targetConn; + int batchSize = 1000; + + boolean overwrite = false; + boolean delete = false; + boolean ignore = false; + + Copy(Exec e) { + exec = e; + trace = exec.getTrace(); + info = exec.getInfo(); + } + + /** + * Run COPY command + */ + Integer run(HplsqlParser.Copy_stmtContext ctx) { + trace(ctx, "COPY"); + initOptions(ctx); + StringBuilder sql = new StringBuilder(); + String conn = null; + if (ctx.table_name() != null) { + String table = evalPop(ctx.table_name()).toString(); + conn = exec.getObjectConnection(ctx.table_name().getText()); + sql.append("SELECT * FROM "); + sql.append(table); + } + else { + sql.append(evalPop(ctx.select_stmt()).toString()); + conn = exec.getStatementConnection(); + if (trace) { + trace(ctx, "Statement:\n" + sql); + } + } + Query query = exec.executeQuery(ctx, sql.toString(), conn); + if (query.error()) { + exec.signal(query); + return 1; + } + exec.setSqlSuccess(); + try { + if (targetConn != null) { + copyToTable(ctx, query); + } + else { + copyToFile(ctx, query); + } + } + catch (Exception e) { + exec.signal(e); + return 1; + } + finally { + exec.closeQuery(query, conn); + } + return 0; + } + + /** + * Copy the query results to another table + * @throws Exception + */ + void copyToTable(HplsqlParser.Copy_stmtContext ctx, Query query) throws Exception { + ResultSet rs = query.getResultSet(); + if (rs == null) { + return; + } + ResultSetMetaData rm = rs.getMetaData(); + int cols = rm.getColumnCount(); + int rows = 0; + if (trace) { + trace(ctx, "SELECT executed: " + cols + " columns"); + } + Connection conn = exec.getConnection(targetConn); + StringBuilder sql = new StringBuilder(); + sql.append("INSERT INTO " + sqlInsertName + " VALUES ("); + for (int i = 0; i < cols; i++) { + sql.append("?"); + if (i + 1 < cols) { + sql.append(","); + } + } + sql.append(")"); + PreparedStatement ps = conn.prepareStatement(sql.toString()); + long start = timer.start(); + long prev = start; + boolean batchOpen = false; + while (rs.next()) { + for (int i = 1; i <= cols; i++) { + ps.setObject(i, rs.getObject(i)); + } + rows++; + if (batchSize > 1) { + ps.addBatch(); + batchOpen = true; + if (rows % batchSize == 0) { + ps.executeBatch(); + batchOpen = false; + } + } + else { + ps.executeUpdate(); + } + if (trace && rows % 100 == 0) { + long cur = timer.current(); + if (cur - prev > 10000) { + trace(ctx, "Copying rows: " + rows + " (" + rows/((cur - start)/1000) + " rows/sec)"); + prev = cur; + } + } + } + if (batchOpen) { + ps.executeBatch(); + } + ps.close(); + exec.returnConnection(targetConn, conn); + exec.setRowCount(rows); + long elapsed = timer.stop(); + if (trace) { + trace(ctx, "COPY completed: " + rows + " row(s), " + timer.format() + ", " + rows/(elapsed/1000) + " rows/sec"); + } + } + + /** + * Copy the query results to a file + * @throws Exception + */ + void copyToFile(HplsqlParser.Copy_stmtContext ctx, Query query) throws Exception { + ResultSet rs = query.getResultSet(); + if (rs == null) { + return; + } + ResultSetMetaData rm = rs.getMetaData(); + String filename = null; + if (ctx.copy_target().expr() != null) { + filename = evalPop(ctx.copy_target().expr()).toString(); + } + else { + filename = ctx.copy_target().getText(); + } + byte[] del = delimiter.getBytes(); + byte[] rowdel = "\n".getBytes(); + byte[] nullstr = "NULL".getBytes(); + int cols = rm.getColumnCount(); + int rows = 0; + if (trace) { + trace(ctx, "SELECT executed: " + cols + " columns, output file: " + filename); + } + java.io.File file = new java.io.File(filename); + FileOutputStream out = null; + try { + if (!file.exists()) { + file.createNewFile(); + } + out = new FileOutputStream(file, false /*append*/); + String col; + String sql = ""; + if (sqlInsert) { + sql = "INSERT INTO " + sqlInsertName + " VALUES ("; + rowdel = ");\n".getBytes(); + } + while (rs.next()) { + if (sqlInsert) { + out.write(sql.getBytes()); + } + for (int i = 1; i <= cols; i++) { + if (i > 1) { + out.write(del); + } + col = rs.getString(i); + if (col != null) { + if (sqlInsert) { + col = Utils.quoteString(col); + } + out.write(col.getBytes()); + } + else if (sqlInsert) { + out.write(nullstr); + } + } + out.write(rowdel); + rows++; + } + exec.setRowCount(rows); + } + finally { + if (out != null) { + out.close(); + } + } + if (trace) { + trace(ctx, "COPY rows: " + rows); + } + } + + /** + * Run COPY FROM LOCAL statement + */ + public Integer runFromLocal(HplsqlParser.Copy_from_local_stmtContext ctx) { + trace(ctx, "COPY FROM LOCAL"); + initFileOptions(ctx.copy_file_option()); + HashMap> src = new HashMap>(); + int cnt = ctx.copy_source().size(); + for (int i = 0; i < cnt; i++) { + createLocalFileList(src, evalPop(ctx.copy_source(i)).toString(), null); + } + String dest = evalPop(ctx.copy_target()).toString(); + if (info) { + info(ctx, "Files to copy: " + src.size() + " (" + Utils.formatSizeInBytes(srcSizeInBytes) + ")"); + } + timer.start(); + File file = new File(); + FileSystem fs = null; + int succeed = 0; + int failed = 0; + long copiedSize = 0; + try { + fs = file.createFs(); + boolean multi = false; + if (src.size() > 1) { + multi = true; + } + for (Map.Entry> i : src.entrySet()) { + try { + Path s = new Path(i.getKey()); + Path d = null; + if (multi) { + String relativePath = i.getValue().getLeft(); + if (relativePath == null) { + d = new Path(dest, s.getName()); + } + else { + d = new Path(dest, relativePath + java.io.File.separator + s.getName()); + } + } + else { + d = new Path(dest); + } + fs.copyFromLocalFile(delete, overwrite, s, d); + succeed++; + long size = i.getValue().getRight(); + copiedSize += size; + if (info) { + info(ctx, "Copied: " + fs.resolvePath(d) + " (" + Utils.formatSizeInBytes(size) + ")"); + } + } + catch(IOException e) { + failed++; + if (!ignore) { + throw e; + } + } + } + } + catch(IOException e) { + exec.signal(e); + exec.setHostCode(1); + return 1; + } + finally { + long elapsed = timer.stop(); + if (info) { + info(ctx, "COPY completed: " + succeed + " succeed, " + failed + " failed, " + + timer.format() + ", " + Utils.formatSizeInBytes(copiedSize) + ", " + + Utils.formatBytesPerSec(copiedSize, elapsed)); + } + if (failed == 0) { + exec.setHostCode(0); + } + else { + exec.setHostCode(1); + } + file.close(); + } + return 0; + } + + /** + * Create the list of local files for the specified path (including subdirectories) + */ + void createLocalFileList(HashMap> list, String path, String relativePath) { + java.io.File file = new java.io.File(path); + if (file.exists()) { + if (file.isDirectory()) { + for (java.io.File i : file.listFiles()) { + if (i.isDirectory()) { + String rel = null; + if (relativePath == null) { + rel = i.getName(); + } + else { + rel = relativePath + java.io.File.separator + i.getName(); + } + createLocalFileList(list, i.getAbsolutePath(), rel); + } + else { + long size = i.length(); + list.put(i.getAbsolutePath(), Pair.of(relativePath, size)); + srcSizeInBytes += size; + } + } + } + else { + long size = file.length(); + list.put(file.getAbsolutePath(), Pair.of(relativePath, size)); + srcSizeInBytes += size; + } + } + } + + /** + * Initialize COPY command options + */ + void initOptions(HplsqlParser.Copy_stmtContext ctx) { + int cnt = ctx.copy_option().size(); + for (int i = 0; i < cnt; i++) { + HplsqlParser.Copy_optionContext option = ctx.copy_option(i); + if (option.T_DELIMITER() != null) { + delimiter = StringEscapeUtils.unescapeJava(evalPop(option.expr()).toString()); + } + else if (option.T_SQLINSERT() != null) { + sqlInsert = true; + delimiter = ", "; + if (option.ident() != null) { + sqlInsertName = option.ident().getText(); + } + } + else if (option.T_AT() != null) { + targetConn = option.ident().getText(); + sqlInsertName = ctx.copy_target().ident().getText(); + } + else if (option.T_BATCHSIZE() != null) { + batchSize = evalPop(option.expr()).intValue(); + } + } + } + + /** + * Initialize COPY FILE options + */ + void initFileOptions(List options) { + srcSizeInBytes = 0; + for (HplsqlParser.Copy_file_optionContext i : options) { + if (i.T_OVERWRITE() != null) { + overwrite = true; + } + else if (i.T_DELETE() != null) { + delete = true; + } + else if (i.T_IGNORE() != null) { + ignore = true; + } + } + } + + /** + * Evaluate the expression and pop value from the stack + */ + Var evalPop(ParserRuleContext ctx) { + exec.visit(ctx); + if (!exec.stack.isEmpty()) { + return exec.stackPop(); + } + return Var.Empty; + } + + /** + * Trace and information + */ + public void trace(ParserRuleContext ctx, String message) { + exec.trace(ctx, message); + } + + public void info(ParserRuleContext ctx, String message) { + exec.info(ctx, message); + } +} diff --git hplsql/src/main/java/org/apache/hive/hplsql/Exec.java hplsql/src/main/java/org/apache/hive/hplsql/Exec.java new file mode 100644 index 0000000..9ec8959 --- /dev/null +++ hplsql/src/main/java/org/apache/hive/hplsql/Exec.java @@ -0,0 +1,1950 @@ +/** + * 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. + */ + +package org.apache.hive.hplsql; + +import java.math.BigDecimal; +import java.io.ByteArrayInputStream; +import java.io.FileInputStream; +import java.io.InputStream; +import java.io.PrintWriter; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Stack; +import java.util.Iterator; +import java.sql.Connection; +import java.sql.SQLException; + +import org.antlr.v4.runtime.ANTLRInputStream; +import org.antlr.v4.runtime.CommonTokenStream; +import org.antlr.v4.runtime.ParserRuleContext; +import org.antlr.v4.runtime.Token; +import org.antlr.v4.runtime.misc.NotNull; +import org.antlr.v4.runtime.tree.ParseTree; +import org.apache.commons.io.FileUtils; +import org.apache.hive.hplsql.functions.*; + +/** + * HPL/SQL script executor + * + */ +public class Exec extends HplsqlBaseVisitor { + + public static final String VERSION = "HPL/SQL 0.3.11"; + public static final String SQLCODE = "SQLCODE"; + public static final String SQLSTATE = "SQLSTATE"; + public static final String HOSTCODE = "HOSTCODE"; + + Exec exec = null; + ParseTree tree = null; + + public enum OnError {EXCEPTION, SETERROR, STOP}; + + // Scopes of execution (code blocks) with own local variables, parameters and exception handlers + Stack scopes = new Stack(); + Scope currentScope; + + Stack stack = new Stack(); + Stack labels = new Stack(); + + Stack signals = new Stack(); + Signal currentSignal; + Scope currentHandlerScope; + boolean resignal = false; + + HashMap managedTables = new HashMap(); + HashMap objectMap = new HashMap(); + HashMap objectConnMap = new HashMap(); + + public ArrayList stmtConnList = new ArrayList(); + + Arguments arguments = new Arguments(); + public Conf conf; + Expression expr; + Function function; + Converter converter; + Select select; + Stmt stmt; + Conn conn; + + int rowCount = 0; + + String execString; + String execFile; + String execMain; + StringBuilder localUdf = new StringBuilder(); + boolean initRoutines = false; + public boolean buildSql = false; + boolean udfRegistered = false; + boolean udfRun = false; + + boolean dotHplsqlrcExists = false; + boolean hplsqlrcExists = false; + + boolean trace = false; + boolean info = true; + boolean offline = false; + + Exec() { + exec = this; + } + + Exec(Exec exec) { + this.exec = exec; + } + + /** + * Set a variable using a value from the parameter or the stack + */ + public Var setVariable(String name, Var value) { + if (value == null || value == Var.Empty) { + if (exec.stack.empty()) { + return Var.Empty; + } + value = exec.stack.pop(); + } + if (name.startsWith("hplsql.")) { + exec.conf.setOption(name, value.toString()); + return Var.Empty; + } + Var var = findVariable(name); + if (var != null) { + var.cast(value); + } + else { + var = new Var(value); + var.setName(name); + exec.currentScope.addVariable(var); + } + return var; + } + + public Var setVariable(String name) { + return setVariable(name, Var.Empty); + } + + public Var setVariable(String name, String value) { + return setVariable(name, new Var(value)); + } + + public Var setVariable(String name, int value) { + return setVariable(name, new Var(new Long(value))); + } + + /** + * Set variable to NULL + */ + public Var setVariableToNull(String name) { + Var var = findVariable(name); + if (var != null) { + var.removeValue(); + } + else { + var = new Var(); + var.setName(name); + exec.currentScope.addVariable(var); + } + return var; + } + + /** + * Add a local variable to the current scope + */ + public void addVariable(Var var) { + if (exec.currentScope != null) { + exec.currentScope.addVariable(var); + } + } + + /** + * Add a condition handler to the current scope + */ + public void addHandler(Handler handler) { + if (exec.currentScope != null) { + exec.currentScope.addHandler(handler); + } + } + + /** + * Push a value to the stack + */ + public void stackPush(Var var) { + exec.stack.push(var); + } + + /** + * Push a string value to the stack + */ + public void stackPush(String val) { + exec.stack.push(new Var(val)); + } + + public void stackPush(StringBuilder val) { + stackPush(val.toString()); + } + + /** + * Push a boolean value to the stack + */ + public void stackPush(boolean val) { + exec.stack.push(new Var(val)); + } + + /** + * Select a value from the stack, but not remove + */ + public Var stackPeek() { + return exec.stack.peek(); + } + + /** + * Pop a value from the stack + */ + public Var stackPop() { + if (!exec.stack.isEmpty()) { + return exec.stack.pop(); + } + return null; + } + + /** + * Find an existing variable by name + */ + public Var findVariable(String name) { + Scope cur = exec.currentScope; + String name2 = null; + if (name.startsWith(":")) { + name2 = name.substring(1); + } + while (cur != null) { + for (Var v : cur.vars) { + if (name.equalsIgnoreCase(v.getName()) || + (name2 != null && name2.equalsIgnoreCase(v.getName()))) { + return v; + } + } + cur = cur.parent; + } + return null; + } + + public Var findVariable(Var name) { + return findVariable(name.getName()); + } + + /** + * Enter a new scope + */ + public void enterScope(Scope.Type type) { + exec.currentScope = new Scope(exec.currentScope, type); + exec.scopes.push(exec.currentScope); + } + + /** + * Leave the current scope + */ + public void leaveScope() { + if (!exec.signals.empty()) { + Scope scope = exec.scopes.peek(); + Signal signal = exec.signals.peek(); + if (exec.conf.onError != OnError.SETERROR) { + runExitHandler(); + } + if (signal.type == Signal.Type.LEAVE_ROUTINE && scope.type == Scope.Type.ROUTINE) { + exec.signals.pop(); + } + } + exec.currentScope = exec.scopes.pop().getParent(); + } + + /** + * Send a signal + */ + public void signal(Signal signal) { + exec.signals.push(signal); + } + + public void signal(Signal.Type type, String value, Exception exception) { + signal(new Signal(type, value, exception)); + } + + public void signal(Signal.Type type, String value) { + signal(type, value, null); + } + + public void signal(Signal.Type type) { + signal(type, null, null); + } + + public void signal(Query query) { + setSqlCode(query.getException()); + signal(Signal.Type.SQLEXCEPTION, query.errorText(), query.getException()); + } + + public void signal(Exception exception) { + setSqlCode(exception); + signal(Signal.Type.SQLEXCEPTION, exception.getMessage(), exception); + } + + /** + * Resignal the condition + */ + public void resignal() { + resignal(exec.currentSignal); + } + + public void resignal(Signal signal) { + if (signal != null) { + exec.resignal = true; + signal(signal); + } + } + + /** + * Run CONTINUE handlers + */ + boolean runContinueHandler() { + Scope cur = exec.currentScope; + exec.currentSignal = exec.signals.pop(); + while (cur != null) { + for (Handler h : cur.handlers) { + if (h.execType != Handler.ExecType.CONTINUE) { + continue; + } + if ((h.type != Signal.Type.USERDEFINED && h.type == exec.currentSignal.type) || + (h.type == Signal.Type.USERDEFINED && h.type == exec.currentSignal.type && + h.value.equalsIgnoreCase(exec.currentSignal.value))) { + trace(h.ctx, "CONTINUE HANDLER"); + enterScope(Scope.Type.HANDLER); + exec.currentHandlerScope = h.scope; + visit(h.ctx.single_block_stmt()); + leaveScope(); + exec.currentSignal = null; + return true; + } + } + cur = cur.parent; + } + exec.signals.push(exec.currentSignal); + exec.currentSignal = null; + return false; + } + + /** + * Run EXIT handler defined for the current scope + */ + boolean runExitHandler() { + exec.currentSignal = exec.signals.pop(); + for (Handler h : currentScope.handlers) { + if (h.execType != Handler.ExecType.EXIT) { + continue; + } + if ((h.type != Signal.Type.USERDEFINED && h.type == exec.currentSignal.type) || + (h.type == Signal.Type.USERDEFINED && h.type == exec.currentSignal.type && + h.value.equalsIgnoreCase(currentSignal.value))) { + trace(h.ctx, "EXIT HANDLER"); + enterScope(Scope.Type.HANDLER); + exec.currentHandlerScope = h.scope; + visit(h.ctx.single_block_stmt()); + leaveScope(); + exec.currentSignal = null; + return true; + } + } + exec.signals.push(exec.currentSignal); + exec.currentSignal = null; + return false; + } + + /** + * Pop the last signal + */ + public Signal signalPop() { + if (!exec.signals.empty()) { + return exec.signals.pop(); + } + return null; + } + + /** + * Peek the last signal + */ + public Signal signalPeek() { + if (!exec.signals.empty()) { + return exec.signals.peek(); + } + return null; + } + + /** + * Pop the current label + */ + public String labelPop() { + if(!exec.labels.empty()) { + return exec.labels.pop(); + } + return ""; + } + + /** + * Execute a SQL query (SELECT) + */ + public Query executeQuery(ParserRuleContext ctx, Query query, String connProfile) { + if (!exec.offline) { + exec.rowCount = 0; + exec.conn.executeQuery(query, connProfile); + return query; + } + setSqlNoData(); + trace(ctx, "Not executed - offline mode set"); + return query; + } + + public Query executeQuery(ParserRuleContext ctx, String sql, String connProfile) { + return executeQuery(ctx, new Query(sql), connProfile); + } + + /** + * Execute a SQL statement + */ + public Query executeSql(ParserRuleContext ctx, String sql, String connProfile) { + if (!exec.offline) { + exec.rowCount = 0; + Query query = conn.executeSql(sql, connProfile); + exec.rowCount = query.getRowCount(); + return query; + } + trace(ctx, "Not executed - offline mode set"); + return new Query(""); + } + + /** + * Close the query object + */ + public void closeQuery(Query query, String conn) { + if(!exec.offline) { + exec.conn.closeQuery(query, conn); + } + } + + /** + * Register JARs, FILEs and CREATE TEMPORARY FUNCTION for UDF call + */ + public void registerUdf() { + if (udfRegistered) { + return; + } + ArrayList sql = new ArrayList(); + String dir = Utils.getExecDir(); + sql.add("ADD JAR " + dir + "hplsql.jar"); + sql.add("ADD JAR " + dir + "antlr-runtime-4.5.jar"); + sql.add("ADD FILE " + dir + Conf.SITE_XML); + if (dotHplsqlrcExists) { + sql.add("ADD FILE " + dir + Conf.DOT_HPLSQLRC); + } + if (hplsqlrcExists) { + sql.add("ADD FILE " + dir + Conf.HPLSQLRC); + } + String lu = createLocalUdf(); + if (lu != null) { + sql.add("ADD FILE " + lu); + } + sql.add("CREATE TEMPORARY FUNCTION hplsql AS 'org.apache.hive.hplsql.Udf'"); + exec.conn.addPreSql(exec.conf.defaultConnection, sql); + udfRegistered = true; + } + + /** + * Initialize options + */ + void initOptions() { + Iterator> i = exec.conf.iterator(); + while (i.hasNext()) { + Entry item = (Entry)i.next(); + String key = (String)item.getKey(); + String value = (String)item.getValue(); + if (key == null || value == null) { + continue; + } + else if (key.compareToIgnoreCase(Conf.CONN_DEFAULT) == 0) { + exec.conf.defaultConnection = value; + } + else if (key.startsWith("hplsql.conn.init.")) { + exec.conn.addConnectionInit(key.substring(16), value); + } + else if (key.startsWith(Conf.CONN_CONVERT)) { + exec.conf.setConnectionConvert(key.substring(19), value); + } + else if (key.startsWith("hplsql.conn.")) { + exec.conn.addConnection(key.substring(11), value); + } + else if (key.startsWith("hplsql.")) { + exec.conf.setOption(key, value); + } + } + } + + /** + * Set SQLCODE + */ + public void setSqlCode(int sqlcode) { + Var var = findVariable(SQLCODE); + if (var != null) { + var.setValue(new Long(sqlcode)); + } + } + + public void setSqlCode(Exception exception) { + if (exception instanceof SQLException) { + setSqlCode(((SQLException)exception).getErrorCode()); + setSqlState(((SQLException)exception).getSQLState()); + } + else { + setSqlCode(-1); + setSqlState("02000"); + } + } + + /** + * Set SQLSTATE + */ + public void setSqlState(String sqlstate) { + Var var = findVariable(SQLSTATE); + if (var != null) { + var.setValue(sqlstate); + } + } + + /** + * Set HOSTCODE + */ + public void setHostCode(int code) { + Var var = findVariable(HOSTCODE); + if (var != null) { + var.setValue(new Long(code)); + } + } + + /** + * Set successful execution for SQL + */ + public void setSqlSuccess() { + setSqlCode(0); + setSqlState("00000"); + } + + /** + * Set SQL_NO_DATA as the result of SQL execution + */ + public void setSqlNoData() { + setSqlCode(100); + setSqlState("01000"); + } + + /** + * Compile and run PL/HQL script + */ + public Integer run(String[] args) throws Exception { + if (init(args) != 0) { + return 1; + } + Var result = run(); + if (result != null) { + System.out.println(result.toString()); + } + cleanup(); + printExceptions(); + return getProgramReturnCode(); + } + + /** + * Run already compiled PL/HQL script (also used from Hive UDF) + */ + public Var run() { + if (tree == null) { + return null; + } + if (execMain != null) { + initRoutines = true; + visit(tree); + initRoutines = false; + exec.function.execProc(execMain); + } + else { + visit(tree); + } + return stackPop(); + } + + /** + * Initialize PL/HQL + */ + Integer init(String[] args) throws Exception { + if (!parseArguments(args)) { + return 1; + } + conf = new Conf(); + conf.init(); + conn = new Conn(this); + initOptions(); + + expr = new Expression(this); + select = new Select(this); + stmt = new Stmt(this); + converter = new Converter(this); + + function = new Function(this); + new FunctionDatetime(this).register(function); + new FunctionMisc(this).register(function); + new FunctionString(this).register(function); + new FunctionOra(this).register(function); + + enterScope(Scope.Type.FILE); + addVariable(new Var(SQLCODE, Var.Type.BIGINT, 0L)); + addVariable(new Var(SQLSTATE, Var.Type.STRING, "00000")); + addVariable(new Var(HOSTCODE, Var.Type.BIGINT, 0L)); + + for (Map.Entry v : arguments.getVars().entrySet()) { + addVariable(new Var(v.getKey(), Var.Type.STRING, v.getValue())); + } + InputStream input = null; + if (execString != null) { + input = new ByteArrayInputStream(execString.getBytes("UTF-8")); + } + else { + input = new FileInputStream(execFile); + } + HplsqlLexer lexer = new HplsqlLexer(new ANTLRInputStream(input)); + CommonTokenStream tokens = new CommonTokenStream(lexer); + HplsqlParser parser = new HplsqlParser(tokens); + tree = parser.program(); + if (trace) { + System.err.println("Configuration file: " + conf.getLocation()); + System.err.println("Parser tree: " + tree.toStringTree(parser)); + } + includeRcFile(); + return 0; + } + + /** + * Parse command line arguments + */ + boolean parseArguments(String[] args) { + boolean parsed = arguments.parse(args); + if (parsed && arguments.hasVersionOption()) { + System.err.println(VERSION); + return false; + } + if (!parsed || arguments.hasHelpOption() || + (arguments.getExecString() == null && arguments.getFileName() == null)) { + arguments.printHelp(); + return false; + } + execString = arguments.getExecString(); + execFile = arguments.getFileName(); + execMain = arguments.getMain(); + if (arguments.hasTraceOption()) { + trace = true; + } + if (arguments.hasOfflineOption()) { + offline = true; + } + if (execString != null && execFile != null) { + System.err.println("The '-e' and '-f' options cannot be specified simultaneously."); + return false; + } + return true; + } + + /** + * Include statements from .hplsqlrc and hplsql rc files + */ + void includeRcFile() { + if (includeFile(Conf.DOT_HPLSQLRC)) { + dotHplsqlrcExists = true; + } + else { + if (includeFile(Conf.HPLSQLRC)) { + hplsqlrcExists = true; + } + } + if (udfRun) { + includeFile(Conf.HPLSQL_LOCALS_SQL); + } + } + + /** + * Include statements from a file + */ + boolean includeFile(String file) { + try { + String content = FileUtils.readFileToString(new java.io.File(file), "UTF-8"); + if (content != null && !content.isEmpty()) { + if (trace) { + trace(null, "INLCUDE CONTENT " + file + " (non-empty)"); + } + new Exec(this).include(content); + return true; + } + } + catch (Exception e) {} + return false; + } + + /** + * Execute statements from an include file + */ + void include(String content) throws Exception { + InputStream input = new ByteArrayInputStream(content.getBytes("UTF-8")); + HplsqlLexer lexer = new HplsqlLexer(new ANTLRInputStream(input)); + CommonTokenStream tokens = new CommonTokenStream(lexer); + HplsqlParser parser = new HplsqlParser(tokens); + ParseTree tree = parser.program(); + visit(tree); + } + + /** + * Start executing PL/HQL script + */ + @Override + public Integer visitProgram(HplsqlParser.ProgramContext ctx) { + enterScope(Scope.Type.FILE); + Integer rc = visitChildren(ctx); + leaveScope(); + return rc; + } + + /** + * Enter BEGIN-END block + */ + @Override + public Integer visitBegin_end_block(HplsqlParser.Begin_end_blockContext ctx) { + enterScope(Scope.Type.BEGIN_END); + Integer rc = visitChildren(ctx); + leaveScope(); + return rc; + } + + /** + * Free resources before exit + */ + void cleanup() { + for (Map.Entry i : managedTables.entrySet()) { + String sql = "DROP TABLE IF EXISTS " + i.getValue(); + Query query = executeSql(null, sql, exec.conf.defaultConnection); + closeQuery(query, exec.conf.defaultConnection); + if (trace) { + trace(null, sql); + } + } + } + + /** + * Output information about unhandled exceptions + */ + void printExceptions() { + while (!signals.empty()) { + Signal sig = signals.pop(); + if (sig.type == Signal.Type.SQLEXCEPTION) { + System.err.println("Unhandled exception in PL/HQL"); + } + if (sig.exception != null) { + sig.exception.printStackTrace(); + } + else if (sig.value != null) { + System.err.println(sig.value); + } + } + } + + /** + * Get the program return code + */ + Integer getProgramReturnCode() { + Integer rc = 0; + if(!signals.empty()) { + Signal sig = signals.pop(); + if(sig.type == Signal.Type.LEAVE_ROUTINE && sig.value != null) { + try { + rc = Integer.parseInt(sig.value); + } + catch(NumberFormatException e) { + rc = 1; + } + } + } + return rc; + } + + /** + * Executing a statement + */ + @Override + public Integer visitStmt(HplsqlParser.StmtContext ctx) { + if (ctx.semicolon_stmt() != null) { + return 0; + } + if (initRoutines && ctx.create_procedure_stmt() == null && ctx.create_function_stmt() == null) { + return 0; + } + if (exec.resignal) { + if (exec.currentScope != exec.currentHandlerScope.parent) { + return 0; + } + exec.resignal = false; + } + if (!exec.signals.empty() && exec.conf.onError != OnError.SETERROR) { + if (!runContinueHandler()) { + return 0; + } + } + Var prevResult = stackPop(); + if (prevResult != null) { + System.out.println(prevResult.toString()); + } + return visitChildren(ctx); + } + + /** + * Executing or building SELECT statement + */ + @Override + public Integer visitSelect_stmt(HplsqlParser.Select_stmtContext ctx) { + return exec.select.select(ctx); + } + + @Override + public Integer visitCte_select_stmt(HplsqlParser.Cte_select_stmtContext ctx) { + return exec.select.cte(ctx); + } + + @Override + public Integer visitFullselect_stmt(HplsqlParser.Fullselect_stmtContext ctx) { + return exec.select.fullselect(ctx); + } + + @Override + public Integer visitSubselect_stmt(HplsqlParser.Subselect_stmtContext ctx) { + return exec.select.subselect(ctx); + } + + @Override + public Integer visitSelect_list(HplsqlParser.Select_listContext ctx) { + return exec.select.selectList(ctx); + } + + @Override + public Integer visitFrom_clause(HplsqlParser.From_clauseContext ctx) { + return exec.select.from(ctx); + } + + @Override + public Integer visitFrom_table_name_clause(HplsqlParser.From_table_name_clauseContext ctx) { + return exec.select.fromTable(ctx); + } + + @Override + public Integer visitFrom_join_clause(HplsqlParser.From_join_clauseContext ctx) { + return exec.select.fromJoin(ctx); + } + + @Override + public Integer visitFrom_table_values_clause(HplsqlParser.From_table_values_clauseContext ctx) { + return exec.select.fromTableValues(ctx); + } + + @Override + public Integer visitWhere_clause(HplsqlParser.Where_clauseContext ctx) { + return exec.select.where(ctx); + } + + @Override + public Integer visitSelect_options_item(HplsqlParser.Select_options_itemContext ctx) { + return exec.select.option(ctx); + } + + /** + * Table name + */ + @Override + public Integer visitTable_name(HplsqlParser.Table_nameContext ctx) { + String name = ctx.getText().toUpperCase(); + String actualName = exec.managedTables.get(name); + String conn = exec.objectConnMap.get(name); + if (conn == null) { + conn = conf.defaultConnection; + } + stmtConnList.add(conn); + if (actualName != null) { + stackPush(actualName); + return 0; + } + actualName = exec.objectMap.get(name); + if (actualName != null) { + stackPush(actualName); + return 0; + } + stackPush(ctx.getText()); + return 0; + } + + /** + * SQL INSERT statement + */ + @Override + public Integer visitInsert_stmt(HplsqlParser.Insert_stmtContext ctx) { + return exec.stmt.insert(ctx); + } + + /** + * EXCEPTION block + */ + @Override + public Integer visitException_block_item(HplsqlParser.Exception_block_itemContext ctx) { + if (exec.signals.empty()) { + return 0; + } + if (exec.conf.onError == OnError.SETERROR || exec.conf.onError == OnError.STOP) { + exec.signals.pop(); + return 0; + } + if (ctx.L_ID().toString().equalsIgnoreCase("OTHERS")) { + trace(ctx, "EXCEPTION HANDLER"); + exec.signals.pop(); + enterScope(Scope.Type.HANDLER); + visit(ctx.block()); + leaveScope(); + } + return 0; + } + + /** + * DECLARE variable statement + */ + @Override + public Integer visitDeclare_var_item(HplsqlParser.Declare_var_itemContext ctx) { + String type = ctx.dtype().getText(); + String len = null; + String scale = null; + Var default_ = null; + if (ctx.dtype_len() != null) { + len = ctx.dtype_len().L_INT(0).getText(); + if (ctx.dtype_len().L_INT(1) != null) { + scale = ctx.dtype_len().L_INT(1).getText(); + } + } + if (ctx.dtype_default() != null) { + default_ = evalPop(ctx.dtype_default()); + } + int cnt = ctx.ident().size(); // Number of variables declared with the same data type and default + for (int i = 0; i < cnt; i++) { + String name = ctx.ident(i).getText(); + Var var = new Var(name, type, len, scale, default_); + addVariable(var); + if (trace) { + if (default_ != null) { + trace(ctx, "DECLARE " + name + " " + type + " = " + var.toSqlString()); + } + else { + trace(ctx, "DECLARE " + name + " " + type); + } + } + } + return 0; + } + + /** + * DECLARE cursor statement + */ + @Override + public Integer visitDeclare_cursor_item(HplsqlParser.Declare_cursor_itemContext ctx) { + return exec.stmt.declareCursor(ctx); + } + + /** + * DROP statement + */ + @Override + public Integer visitDrop_stmt(HplsqlParser.Drop_stmtContext ctx) { + return exec.stmt.drop(ctx); + } + + /** + * OPEN cursor statement + */ + @Override + public Integer visitOpen_stmt(HplsqlParser.Open_stmtContext ctx) { + return exec.stmt.open(ctx); + } + + /** + * FETCH cursor statement + */ + @Override + public Integer visitFetch_stmt(HplsqlParser.Fetch_stmtContext ctx) { + return exec.stmt.fetch(ctx); + } + + /** + * CLOSE cursor statement + */ + @Override + public Integer visitClose_stmt(HplsqlParser.Close_stmtContext ctx) { + return exec.stmt.close(ctx); + } + + /** + * COPY statement + */ + @Override + public Integer visitCopy_stmt(HplsqlParser.Copy_stmtContext ctx) { + return new Copy(exec).run(ctx); + } + + /** + * COPY FROM LOCAL statement + */ + @Override + public Integer visitCopy_from_local_stmt(HplsqlParser.Copy_from_local_stmtContext ctx) { + return new Copy(exec).runFromLocal(ctx); + } + + /** + * DECLARE HANDLER statement + */ + @Override + public Integer visitDeclare_handler_item(HplsqlParser.Declare_handler_itemContext ctx) { + trace(ctx, "DECLARE HANDLER"); + Handler.ExecType execType = Handler.ExecType.EXIT; + Signal.Type type = Signal.Type.SQLEXCEPTION; + String value = null; + if (ctx.T_CONTINUE() != null) { + execType = Handler.ExecType.CONTINUE; + } + if (ctx.ident() != null) { + type = Signal.Type.USERDEFINED; + value = ctx.ident().getText(); + } + else if (ctx.T_NOT() != null && ctx.T_FOUND() != null) { + type = Signal.Type.NOTFOUND; + } + addHandler(new Handler(execType, type, value, exec.currentScope, ctx)); + return 0; + } + + /** + * DECLARE CONDITION + */ + @Override + public Integer visitDeclare_condition_item(HplsqlParser.Declare_condition_itemContext ctx) { + return 0; + } + + /** + * DECLARE TEMPORARY TABLE statement + */ + @Override + public Integer visitDeclare_temporary_table_item(HplsqlParser.Declare_temporary_table_itemContext ctx) { + return exec.stmt.declareTemporaryTable(ctx); + } + + /** + * CREATE TABLE statement + */ + @Override + public Integer visitCreate_table_stmt(HplsqlParser.Create_table_stmtContext ctx) { + return exec.stmt.createTable(ctx); + } + + @Override + public Integer visitCreate_table_options_hive_item(HplsqlParser.Create_table_options_hive_itemContext ctx) { + return exec.stmt.createTableHiveOptions(ctx); + } + + /** + * CREATE LOCAL TEMPORARY | VOLATILE TABLE statement + */ + @Override + public Integer visitCreate_local_temp_table_stmt(HplsqlParser.Create_local_temp_table_stmtContext ctx) { + return exec.stmt.createLocalTemporaryTable(ctx); + } + + /** + * CREATE FUNCTION statement + */ + @Override + public Integer visitCreate_function_stmt(HplsqlParser.Create_function_stmtContext ctx) { + exec.function.addUserFunction(ctx); + addLocalUdf(ctx); + return 0; + } + + /** + * CREATE PROCEDURE statement + */ + @Override + public Integer visitCreate_procedure_stmt(HplsqlParser.Create_procedure_stmtContext ctx) { + exec.function.addUserProcedure(ctx); + addLocalUdf(ctx); // Add procedures as they can be invoked by functions + return 0; + } + + /** + * CREATE INDEX statement + */ + @Override + public Integer visitCreate_index_stmt(HplsqlParser.Create_index_stmtContext ctx) { + return 0; + } + + /** + * Add functions and procedures defined in the current script + */ + void addLocalUdf(ParserRuleContext ctx) { + if (exec == this) { + localUdf.append(exec.getFormattedText(ctx)); + localUdf.append("\n"); + } + } + + /** + * Save local functions and procedures to a file (will be added to the distributed cache) + */ + String createLocalUdf() { + if(localUdf.length() == 0) { + return null; + } + try { + String file = System.getProperty("user.dir") + "/" + Conf.HPLSQL_LOCALS_SQL; + PrintWriter writer = new PrintWriter(file, "UTF-8"); + writer.print(localUdf); + writer.close(); + return file; + } + catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + /** + * Assignment statement for single value + */ + @Override + public Integer visitAssignment_stmt_single_item(HplsqlParser.Assignment_stmt_single_itemContext ctx) { + String name = ctx.ident().getText(); + visit(ctx.expr()); + Var var = setVariable(name); + if (trace) { + trace(ctx, "SET " + name + " = " + var.toSqlString()); + } + return 0; + } + + /** + * Assignment statement for multiple values + */ + @Override + public Integer visitAssignment_stmt_multiple_item(HplsqlParser.Assignment_stmt_multiple_itemContext ctx) { + int cnt = ctx.ident().size(); + int ecnt = ctx.expr().size(); + for (int i = 0; i < cnt; i++) { + String name = ctx.ident(i).getText(); + if (i < ecnt) { + visit(ctx.expr(i)); + Var var = setVariable(name); + if (trace) { + trace(ctx, "SET " + name + " = " + var.toString()); + } + } + } + return 0; + } + + /** + * Assignment from SELECT statement + */ + @Override + public Integer visitAssignment_stmt_select_item(HplsqlParser.Assignment_stmt_select_itemContext ctx) { + return stmt.assignFromSelect(ctx); + } + + /** + * Evaluate an expression + */ + @Override + public Integer visitExpr(HplsqlParser.ExprContext ctx) { + if (exec.buildSql) { + exec.expr.execSql(ctx); + } + else { + exec.expr.exec(ctx); + } + return 0; + } + + /** + * Evaluate a boolean expression + */ + @Override + public Integer visitBool_expr(HplsqlParser.Bool_exprContext ctx) { + if (exec.buildSql) { + exec.expr.execBoolSql(ctx); + } + else { + exec.expr.execBool(ctx); + } + return 0; + } + + @Override + public Integer visitBool_expr_binary(HplsqlParser.Bool_expr_binaryContext ctx) { + if (exec.buildSql) { + exec.expr.execBoolBinarySql(ctx); + } + else { + exec.expr.execBoolBinary(ctx); + } + return 0; + } + + @Override + public Integer visitBool_expr_unary(HplsqlParser.Bool_expr_unaryContext ctx) { + if (exec.buildSql) { + exec.expr.execBoolUnarySql(ctx); + } + else { + exec.expr.execBoolUnary(ctx); + } + return 0; + } + + /** + * Function call + */ + @Override + public Integer visitExpr_func(HplsqlParser.Expr_funcContext ctx) { + String name = ctx.ident().getText(); + if (exec.buildSql) { + exec.function.execSql(name, ctx.expr_func_params()); + } + else { + exec.function.exec(name, ctx.expr_func_params()); + } + return 0; + } + + /** + * Aggregate or window function call + */ + @Override + public Integer visitExpr_agg_window_func(HplsqlParser.Expr_agg_window_funcContext ctx) { + exec.function.execAggWindowSql(ctx); + return 0; + } + + /** + * Function with specific syntax + */ + @Override + public Integer visitExpr_spec_func(HplsqlParser.Expr_spec_funcContext ctx) { + if (exec.buildSql) { + exec.function.specExecSql(ctx); + } + else { + exec.function.specExec(ctx); + } + return 0; + } + + /** + * INCLUDE statement + */ + @Override + public Integer visitInclude_stmt(@NotNull HplsqlParser.Include_stmtContext ctx) { + return exec.stmt.include(ctx); + } + + /** + * IF statement (PL/SQL syntax) + */ + @Override + public Integer visitIf_plsql_stmt(HplsqlParser.If_plsql_stmtContext ctx) { + return exec.stmt.ifPlsql(ctx); + } + + /** + * IF statement (Transact-SQL syntax) + */ + @Override + public Integer visitIf_tsql_stmt(HplsqlParser.If_tsql_stmtContext ctx) { + return exec.stmt.ifTsql(ctx); + } + + /** + * USE statement + */ + @Override + public Integer visitUse_stmt(HplsqlParser.Use_stmtContext ctx) { + return exec.stmt.use(ctx); + } + + /** + * VALUES statement + */ + @Override + public Integer visitValues_into_stmt(HplsqlParser.Values_into_stmtContext ctx) { + return exec.stmt.values(ctx); + } + + /** + * WHILE statement + */ + @Override + public Integer visitWhile_stmt(HplsqlParser.While_stmtContext ctx) { + return exec.stmt.while_(ctx); + } + + /** + * FOR cursor statement + */ + @Override + public Integer visitFor_cursor_stmt(HplsqlParser.For_cursor_stmtContext ctx) { + return exec.stmt.forCursor(ctx); + } + + /** + * FOR (integer range) statement + */ + @Override + public Integer visitFor_range_stmt(HplsqlParser.For_range_stmtContext ctx) { + return exec.stmt.forRange(ctx); + } + + /** + * EXEC, EXECUTE and EXECUTE IMMEDIATE statement to execute dynamic SQL + */ + @Override + public Integer visitExec_stmt(HplsqlParser.Exec_stmtContext ctx) { + return exec.stmt.exec(ctx); + } + + /** + * CALL statement + */ + @Override + public Integer visitCall_stmt(HplsqlParser.Call_stmtContext ctx) { + if (exec.function.execProc(ctx.expr_func_params(), ctx.ident().getText())) { + return 0; + } + return -1; + } + + /** + * EXIT statement (leave the specified loop with a condition) + */ + @Override + public Integer visitExit_stmt(HplsqlParser.Exit_stmtContext ctx) { + return exec.stmt.exit(ctx); + } + + /** + * BREAK statement (leave the innermost loop unconditionally) + */ + @Override + public Integer visitBreak_stmt(HplsqlParser.Break_stmtContext ctx) { + return exec.stmt.break_(ctx); + } + + /** + * LEAVE statement (leave the specified loop unconditionally) + */ + @Override + public Integer visitLeave_stmt(HplsqlParser.Leave_stmtContext ctx) { + return exec.stmt.leave(ctx); + } + + /** + * PRINT statement + */ + @Override + public Integer visitPrint_stmt(HplsqlParser.Print_stmtContext ctx) { + return exec.stmt.print(ctx); + } + + /** + * SIGNAL statement + */ + @Override + public Integer visitSignal_stmt(HplsqlParser.Signal_stmtContext ctx) { + return exec.stmt.signal(ctx); + } + + /** + * RESIGNAL statement + */ + @Override + public Integer visitResignal_stmt(HplsqlParser.Resignal_stmtContext ctx) { + return exec.stmt.resignal(ctx); + } + + /** + * RETURN statement + */ + @Override + public Integer visitReturn_stmt(HplsqlParser.Return_stmtContext ctx) { + return exec.stmt.return_(ctx); + } + + /** + * MAP OBJECT statement + */ + @Override + public Integer visitMap_object_stmt(HplsqlParser.Map_object_stmtContext ctx) { + String source = evalPop(ctx.expr(0)).toString(); + String target = null; + String conn = null; + if (ctx.T_TO() != null) { + target = evalPop(ctx.expr(1)).toString(); + exec.objectMap.put(source.toUpperCase(), target); + } + if (ctx.T_AT() != null) { + if (ctx.T_TO() == null) { + conn = evalPop(ctx.expr(1)).toString(); + } + else { + conn = evalPop(ctx.expr(2)).toString(); + } + exec.objectConnMap.put(source.toUpperCase(), conn); + } + if (trace) { + String log = "MAP OBJECT " + source; + if (target != null) { + log += " AS " + target; + } + if (conn != null) { + log += " AT " + conn; + } + trace(ctx, log); + } + return 0; + } + + /** + * UPDATE statement + */ + @Override + public Integer visitUpdate_stmt(HplsqlParser.Update_stmtContext ctx) { + return stmt.update(ctx); + } + + /** + * DELETE statement + */ + @Override + public Integer visitDelete_stmt(HplsqlParser.Delete_stmtContext ctx) { + return stmt.delete(ctx); + } + + /** + * MERGE statement + */ + @Override + public Integer visitMerge_stmt(HplsqlParser.Merge_stmtContext ctx) { + return stmt.merge(ctx); + } + + /** + * Run a Hive command line + */ + @Override + public Integer visitHive(@NotNull HplsqlParser.HiveContext ctx) { + trace(ctx, "HIVE"); + ArrayList cmd = new ArrayList(); + cmd.add("hive"); + Var params = new Var(Var.Type.STRINGLIST, cmd); + stackPush(params); + visitChildren(ctx); + stackPop(); + try { + String[] cmdarr = new String[cmd.size()]; + cmd.toArray(cmdarr); + if(trace) { + trace(ctx, "HIVE Parameters: " + Utils.toString(cmdarr, ' ')); + } + if (!offline) { + Process p = Runtime.getRuntime().exec(cmdarr); + new StreamGobbler(p.getInputStream()).start(); + new StreamGobbler(p.getErrorStream()).start(); + int rc = p.waitFor(); + if (trace) { + trace(ctx, "HIVE Process exit code: " + rc); + } + } + } catch (Exception e) { + setSqlCode(-1); + signal(Signal.Type.SQLEXCEPTION, e.getMessage(), e); + return -1; + } + return 0; + } + + @Override + @SuppressWarnings("unchecked") + public Integer visitHive_item(HplsqlParser.Hive_itemContext ctx) { + Var params = stackPeek(); + ArrayList a = (ArrayList)params.value; + if(ctx.P_e() != null) { + a.add("-e"); + a.add(evalPop(ctx.expr()).toString()); + } + else if(ctx.P_f() != null) { + a.add("-f"); + a.add(evalPop(ctx.expr()).toString()); + } + else if(ctx.P_hiveconf() != null) { + a.add("-hiveconf"); + a.add(ctx.L_ID().toString() + "=" + evalPop(ctx.expr()).toString()); + } + return 0; + } + + /** + * Executing OS command + */ + @Override + public Integer visitHost_cmd(HplsqlParser.Host_cmdContext ctx) { + trace(ctx, "HOST"); + execHost(ctx, ctx.start.getInputStream().getText( + new org.antlr.v4.runtime.misc.Interval(ctx.start.getStartIndex(), ctx.stop.getStopIndex()))); + return 0; + } + + @Override + public Integer visitHost_stmt(HplsqlParser.Host_stmtContext ctx) { + trace(ctx, "HOST"); + execHost(ctx, evalPop(ctx.expr()).toString()); + return 0; + } + + public void execHost(ParserRuleContext ctx, String cmd) { + try { + if (trace) { + trace(ctx, "HOST Command: " + cmd); + } + Process p = Runtime.getRuntime().exec(cmd); + new StreamGobbler(p.getInputStream()).start(); + new StreamGobbler(p.getErrorStream()).start(); + int rc = p.waitFor(); + if (trace) { + trace(ctx, "HOST Process exit code: " + rc); + } + setHostCode(rc); + } catch (Exception e) { + setHostCode(1); + signal(Signal.Type.SQLEXCEPTION); + } + } + + /** + * Standalone expression (as a statement) + */ + @Override + public Integer visitExpr_stmt(HplsqlParser.Expr_stmtContext ctx) { + visitChildren(ctx); + return 0; + } + + /** + * String concatenation operator + */ + @Override + public Integer visitExpr_concat(HplsqlParser.Expr_concatContext ctx) { + if (exec.buildSql) { + exec.expr.operatorConcatSql(ctx); + } + else { + exec.expr.operatorConcat(ctx); + } + return 0; + } + + /** + * Simple CASE expression + */ + @Override + public Integer visitExpr_case_simple(HplsqlParser.Expr_case_simpleContext ctx) { + if (exec.buildSql) { + exec.expr.execSimpleCaseSql(ctx); + } + else { + exec.expr.execSimpleCase(ctx); + } + return 0; + } + + /** + * Searched CASE expression + */ + @Override + public Integer visitExpr_case_searched(HplsqlParser.Expr_case_searchedContext ctx) { + if (exec.buildSql) { + exec.expr.execSearchedCaseSql(ctx); + } + else { + exec.expr.execSearchedCase(ctx); + } + return 0; + } + + /** + * GET DIAGNOSTICS EXCEPTION statement + */ + @Override + public Integer visitGet_diag_stmt_exception_item(HplsqlParser.Get_diag_stmt_exception_itemContext ctx) { + return exec.stmt.getDiagnosticsException(ctx); + } + + /** + * GET DIAGNOSTICS ROW_COUNT statement + */ + @Override + public Integer visitGet_diag_stmt_rowcount_item(HplsqlParser.Get_diag_stmt_rowcount_itemContext ctx) { + return exec.stmt.getDiagnosticsRowCount(ctx); + } + + /** + * GRANT statement + */ + @Override + public Integer visitGrant_stmt(HplsqlParser.Grant_stmtContext ctx) { + trace(ctx, "GRANT"); + return 0; + } + + /** + * Label + */ + @Override + public Integer visitLabel(HplsqlParser.LabelContext ctx) { + exec.labels.push(ctx.L_ID().toString()); + return 0; + } + + /** + * Identifier + */ + @Override + public Integer visitIdent(HplsqlParser.IdentContext ctx) { + String ident = ctx.getText(); + Var var = findVariable(ident); + if (var != null) { + if (!exec.buildSql) { + exec.stackPush(var); + } + else { + exec.stackPush(new Var(ident, Var.Type.STRING, var.toSqlString())); + } + } + else { + exec.stackPush(new Var(Var.Type.IDENT, ident)); + } + return 0; + } + + /** + * Single quoted string literal + */ + @Override + public Integer visitSingle_quotedString(HplsqlParser.Single_quotedStringContext ctx) { + if (exec.buildSql) { + exec.stackPush(ctx.getText()); + } + else { + exec.stackPush(Utils.unquoteString(ctx.getText())); + } + return 0; + } + + /** + * Integer literal, signed or unsigned + */ + @Override + public Integer visitInt_number(HplsqlParser.Int_numberContext ctx) { + exec.stack.push(new Var(new Long(ctx.getText()))); + return 0; + } + + /** + * Interval number (1 DAYS i.e) + */ + @Override + public Integer visitInterval_number(HplsqlParser.Interval_numberContext ctx) { + int num = evalPop(ctx.int_number()).intValue(); + Interval interval = new Interval().set(num, ctx.interval_item().getText()); + stackPush(new Var(interval)); + return 0; + } + + /** + * Decimal literal, signed or unsigned + */ + @Override + public Integer visitDec_number(HplsqlParser.Dec_numberContext ctx) { + stackPush(new Var(new BigDecimal(ctx.getText()))); + return 0; + } + + /** + * NULL constant + */ + @Override + public Integer visitNull_const(HplsqlParser.Null_constContext ctx) { + stackPush(new Var()); + return 0; + } + + /** + * DATE 'YYYY-MM-DD' literal + */ + @Override + public Integer visitDate_literal(HplsqlParser.Date_literalContext ctx) { + String str = evalPop(ctx.string()).toString(); + stackPush(new Var(Var.Type.DATE, Utils.toDate(str))); + return 0; + } + + /** + * TIMESTAMP 'YYYY-MM-DD HH:MI:SS.FFF' literal + */ + @Override + public Integer visitTimestamp_literal(HplsqlParser.Timestamp_literalContext ctx) { + String str = evalPop(ctx.string()).toString(); + int len = str.length(); + int precision = 0; + if (len > 19 && len <= 29) { + precision = len - 20; + if (precision > 3) { + precision = 3; + } + } + stackPush(new Var(Utils.toTimestamp(str), precision)); + return 0; + } + + /** + * Define the connection profile to execute the current statement + */ + String getStatementConnection() { + if (exec.stmtConnList.contains(exec.conf.defaultConnection)) { + return exec.conf.defaultConnection; + } + else if (!exec.stmtConnList.isEmpty()) { + return exec.stmtConnList.get(0); + } + return exec.conf.defaultConnection; + } + + /** + * Define the connection profile for the specified object + * @return + */ + String getObjectConnection(String name) { + String conn = exec.objectConnMap.get(name.toUpperCase()); + if (conn != null) { + return conn; + } + return exec.conf.defaultConnection; + } + + /** + * Get the connection (open the new connection if not available) + * @throws Exception + */ + Connection getConnection(String conn) throws Exception { + return exec.conn.getConnection(conn); + } + + /** + * Return the connection to the pool + */ + void returnConnection(String name, Connection conn) { + exec.conn.returnConnection(name, conn); + } + + /** + * Define the database type by profile name + */ + Conn.Type getConnectionType(String conn) { + return exec.conn.getType(conn); + } + + /** + * Get the current database type + */ + public Conn.Type getConnectionType() { + return getConnectionType(exec.conf.defaultConnection); + } + + /** + * Add managed temporary table + */ + public void addManagedTable(String name, String managedName) { + exec.managedTables.put(name, managedName); + } + + /** + * Get node text including spaces + */ + String getText(ParserRuleContext ctx) { + return ctx.start.getInputStream().getText(new org.antlr.v4.runtime.misc.Interval(ctx.start.getStartIndex(), ctx.stop.getStopIndex())); + } + + String getText(ParserRuleContext ctx, Token start, Token stop) { + return ctx.start.getInputStream().getText(new org.antlr.v4.runtime.misc.Interval(start.getStartIndex(), stop.getStopIndex())); + } + + /** + * Evaluate the expression and pop value from the stack + */ + Var evalPop(ParserRuleContext ctx) { + visit(ctx); + if (!exec.stack.isEmpty()) { + return exec.stackPop(); + } + return Var.Empty; + } + + Var evalPop(ParserRuleContext ctx, long def) { + visit(ctx); + if (!exec.stack.isEmpty()) { + return stackPop(); + } + return new Var(def); + } + + /** + * Evaluate the data type and length + * + */ + String evalPop(HplsqlParser.DtypeContext type, HplsqlParser.Dtype_lenContext len) { + if (isConvert(exec.conf.defaultConnection)) { + return exec.converter.dataType(type, len); + } + return getText(type, type.getStart(), len.getStop()); + } + + /** + * Evaluate the expression to NULL + */ + void evalNull() { + stackPush(Var.Null); + } + + /** + * Get formatted text between 2 tokens + */ + public String getFormattedText(ParserRuleContext ctx) { + return ctx.start.getInputStream().getText( + new org.antlr.v4.runtime.misc.Interval(ctx.start.getStartIndex(), ctx.stop.getStopIndex())); + } + + /** + * Flag whether executed from UDF or not + */ + void setUdfRun(boolean udfRun) { + this.udfRun = udfRun; + } + + /** + * Whether on-the-fly SQL conversion is required for the connection + */ + boolean isConvert(String connName) { + return exec.conf.getConnectionConvert(connName); + } + + /** + * Increment the row count + */ + public int incRowCount() { + return exec.rowCount++; + } + + /** + * Set the row count + */ + public void setRowCount(int rowCount) { + exec.rowCount = rowCount; + } + + /** + * Trace information + */ + public void trace(ParserRuleContext ctx, String message) { + if (!trace) { + return; + } + if (ctx != null) { + System.out.println("Ln:" + ctx.getStart().getLine() + " " + message); + } + else { + System.out.println(message); + } + } + + /** + * Informational messages + */ + public void info(ParserRuleContext ctx, String message) { + if (!info) { + return; + } + if (ctx != null) { + System.err.println("Ln:" + ctx.getStart().getLine() + " " + message); + } + else { + System.err.println(message); + } + } + + public Stack getStack() { + return exec.stack; + } + + public int getRowCount() { + return exec.rowCount; + } + + public Conf getConf() { + return exec.conf; + } + + public boolean getTrace() { + return exec.trace; + } + + public boolean getInfo() { + return exec.info; + } + + public boolean getOffline() { + return exec.offline; + } +} diff --git hplsql/src/main/java/org/apache/hive/hplsql/Expression.java hplsql/src/main/java/org/apache/hive/hplsql/Expression.java new file mode 100644 index 0000000..f8b01e1 --- /dev/null +++ hplsql/src/main/java/org/apache/hive/hplsql/Expression.java @@ -0,0 +1,574 @@ +/** + * 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. + */ + +package org.apache.hive.hplsql; + +import java.sql.Date; +import java.sql.Timestamp; +import java.util.Calendar; + +import org.antlr.v4.runtime.ParserRuleContext; +import org.apache.hive.hplsql.Var.Type; + +/** + * Expressions + */ +public class Expression { + + Exec exec; + boolean trace = false; + + Expression(Exec e) { + exec = e; + trace = exec.getTrace(); + } + + /** + * Evaluate an expression + */ + public void exec(HplsqlParser.ExprContext ctx) { + if (ctx.T_ADD() != null) { + operatorAdd(ctx); + } + else if (ctx.T_SUB() != null) { + operatorSub(ctx); + } + else if (ctx.interval_item() != null) { + createInterval(ctx); + } + else { + visitChildren(ctx); + } + } + + /** + * Evaluate an expression in executable SQL statement + */ + public void execSql(HplsqlParser.ExprContext ctx) { + StringBuilder sql = new StringBuilder(); + if (ctx.T_OPEN_P() != null) { + sql.append("("); + sql.append(evalPop(ctx.expr(0)).toString()); + sql.append(")"); + } + else if (ctx.T_ADD() != null) { + sql.append(evalPop(ctx.expr(0)).toString()); + sql.append(" + "); + sql.append(evalPop(ctx.expr(1)).toString()); + } + else if (ctx.T_SUB() != null) { + sql.append(evalPop(ctx.expr(0)).toString()); + sql.append(" - "); + sql.append(evalPop(ctx.expr(1)).toString()); + } + else if (ctx.interval_item() != null) { + sql.append(exec.getFormattedText(ctx)); + } + else { + visitChildren(ctx); + sql.append(exec.stackPop().toString()); + } + exec.stackPush(sql); + } + + /** + * Evaluate a boolean expression + */ + public void execBool(HplsqlParser.Bool_exprContext ctx) { + if (ctx.T_OPEN_P() != null) { + eval(ctx.bool_expr(0)); + return; + } + else if (ctx.bool_expr_atom() != null) { + eval(ctx.bool_expr_atom()); + return; + } + Var result = evalPop(ctx.bool_expr(0)); + if (ctx.bool_expr_logical_operator() != null) { + if (ctx.bool_expr_logical_operator().T_AND() != null) { + if (result.isTrue()) { + result = evalPop(ctx.bool_expr(1)); + } + } + else if (ctx.bool_expr_logical_operator().T_OR() != null) { + if (!result.isTrue()) { + result = evalPop(ctx.bool_expr(1)); + } + } + } + exec.stackPush(result); + } + + /** + * Evaluate a boolean expression in executable SQL statement + */ + public void execBoolSql(HplsqlParser.Bool_exprContext ctx) { + StringBuilder sql = new StringBuilder(); + if (ctx.T_OPEN_P() != null) { + sql.append("("); + sql.append(evalPop(ctx.bool_expr(0)).toString()); + sql.append(")"); + } + else if (ctx.bool_expr_atom() != null) { + sql.append(evalPop(ctx.bool_expr_atom()).toString()); + } + else if (ctx.bool_expr_logical_operator() != null) { + sql.append(evalPop(ctx.bool_expr(0)).toString()); + sql.append(" " + ctx.bool_expr_logical_operator().getText() + " "); + sql.append(evalPop(ctx.bool_expr(1)).toString()); + } + exec.stackPush(sql); + } + + /** + * Binary boolean expression + */ + public Integer execBoolBinary(HplsqlParser.Bool_expr_binaryContext ctx) { + HplsqlParser.Bool_expr_binary_operatorContext op = ctx.bool_expr_binary_operator(); + if (op.T_EQUAL() != null || op.T_EQUAL2() != null) { + operatorEqual(ctx, true); + } + else if (op.T_NOTEQUAL() != null || op.T_NOTEQUAL2() != null) { + operatorEqual(ctx, false); + } + else if (op.T_GREATER() != null || op.T_LESS() != null || op.T_GREATEREQUAL() != null || op.T_LESSEQUAL() != null) { + operatorCompare(ctx, op); + } + else { + exec.stackPush(false); + } + return 0; + } + + /** + * Binary boolean expression in executable SQL statement + */ + public Integer execBoolBinarySql(HplsqlParser.Bool_expr_binaryContext ctx) { + StringBuilder sql = new StringBuilder(); + sql.append(evalPop(ctx.expr(0)).toString()); + sql.append(" " + exec.getFormattedText(ctx.bool_expr_binary_operator()) + " "); + sql.append(evalPop(ctx.expr(1)).toString()); + exec.stackPush(sql); + return 0; + } + + /** + * Unary boolean expression + */ + public Integer execBoolUnary(HplsqlParser.Bool_expr_unaryContext ctx) { + boolean val = false; + if (ctx.T_IS() != null) { + val = evalPop(ctx.expr(0)).isNull(); + if (ctx.T_NOT() != null) { + val = !val; + } + } + else if (ctx.T_BETWEEN() != null) { + Var v = evalPop(ctx.expr(0)); + Var v1 = evalPop(ctx.expr(1)); + int cmp = v.compareTo(v1); + if (cmp >= 0) { + Var v2 = evalPop(ctx.expr(2)); + cmp = v.compareTo(v2); + if (cmp <= 0) { + val = true; + } + } + } + exec.stackPush(val); + return 0; + } + + /** + * Unary boolean expression in executable SQL statement + */ + public Integer execBoolUnarySql(HplsqlParser.Bool_expr_unaryContext ctx) { + StringBuilder sql = new StringBuilder(); + if (ctx.T_IS() != null) { + sql.append(evalPop(ctx.expr(0)).toString()); + sql.append(" " + exec.getText(ctx, ctx.T_IS().getSymbol(), ctx.T_NULL().getSymbol())); + } + else if (ctx.T_BETWEEN() != null) { + sql.append(evalPop(ctx.expr(0)).toString()); + sql.append(" " + ctx.T_BETWEEN().getText() + " "); + sql.append(evalPop(ctx.expr(1)).toString()); + sql.append(" " + ctx.T_AND().getText() + " "); + sql.append(evalPop(ctx.expr(2)).toString()); + } + else if (ctx.bool_expr_single_in() != null) { + singleInClauseSql(ctx.bool_expr_single_in(), sql); + } + else if (ctx.bool_expr_multi_in() != null) { + multiInClauseSql(ctx.bool_expr_multi_in(), sql); + } + exec.stackPush(sql); + return 0; + } + + /** + * Single value IN clause in executable SQL statement + */ + public void singleInClauseSql(HplsqlParser.Bool_expr_single_inContext ctx, StringBuilder sql) { + sql.append(evalPop(ctx.expr(0)).toString()); + if (ctx.T_NOT() != null) { + sql.append(" " + ctx.T_NOT().getText()); + } + sql.append(" " + ctx.T_IN().getText() + " ("); + if (ctx.select_stmt() != null) { + sql.append(evalPop(ctx.select_stmt())); + } + else { + int cnt = ctx.expr().size(); + for (int i = 1; i < cnt; i++) { + sql.append(evalPop(ctx.expr(i)).toString()); + if (i + 1 < cnt) { + sql.append(", "); + } + } + } + sql.append(")"); + } + + /** + * Multi-value IN clause in executable SQL statement + */ + public void multiInClauseSql(HplsqlParser.Bool_expr_multi_inContext ctx, StringBuilder sql) { + int cnt = ctx.expr().size(); + sql.append("("); + for (int i = 0; i < cnt; i++) { + sql.append(evalPop(ctx.expr(i)).toString()); + if (i + 1 < cnt) { + sql.append(", "); + } + } + sql.append(")"); + if (ctx.T_NOT() != null) { + sql.append(" " + ctx.T_NOT().getText()); + } + sql.append(" " + ctx.T_IN().getText() + " ("); + if (ctx.select_stmt() != null) { + sql.append(evalPop(ctx.select_stmt())); + } + sql.append(")"); + } + + /** + * Addition operator + */ + public void operatorAdd(HplsqlParser.ExprContext ctx) { + Var v1 = evalPop(ctx.expr(0)); + Var v2 = evalPop(ctx.expr(1)); + if (v1.value == null || v2.value == null) { + evalNull(); + } + else if (v1.type == Type.BIGINT && v2.type == Type.BIGINT) { + exec.stackPush(new Var((Long)v1.value + (Long)v2.value)); + } + else if (v1.type == Type.BIGINT && v2.type == Type.DATE) { + exec.stackPush(changeDateByInt((Date)v2.value, (Long)v1.value, true /*add*/)); + } + else if (v1.type == Type.DATE && v2.type == Type.BIGINT) { + exec.stackPush(changeDateByInt((Date)v1.value, (Long)v2.value, true /*add*/)); + } + else if (v1.type == Type.DATE && v2.type == Type.INTERVAL) { + exec.stackPush(new Var(((Interval)v2.value).dateChange((Date)v1.value, true /*add*/))); + } + else if (v1.type == Type.TIMESTAMP && v2.type == Type.INTERVAL) { + exec.stackPush(new Var(((Interval)v2.value).timestampChange((Timestamp)v1.value, true /*add*/), v1.scale)); + } + } + + /** + * Subtraction operator + */ + public void operatorSub(HplsqlParser.ExprContext ctx) { + Var v1 = evalPop(ctx.expr(0)); + Var v2 = evalPop(ctx.expr(1)); + if (v1.value == null || v2.value == null) { + evalNull(); + } + else if (v1.type == Type.BIGINT && v2.type == Type.BIGINT) { + exec.stackPush(new Var((Long)v1.value - (Long)v2.value)); + } + else if (v1.type == Type.DATE && v2.type == Type.BIGINT) { + exec.stackPush(changeDateByInt((Date)v1.value, (Long)v2.value, false /*subtract*/)); + } + else if (v1.type == Type.DATE && v2.type == Type.INTERVAL) { + exec.stackPush(new Var(((Interval)v2.value).dateChange((Date)v1.value, false /*subtract*/))); + } + else if (v1.type == Type.TIMESTAMP && v2.type == Type.INTERVAL) { + exec.stackPush(new Var(((Interval)v2.value).timestampChange((Timestamp)v1.value, false /*subtract*/), v1.scale)); + } + } + + /** + * Add or subtract the specified number of days from DATE + */ + public Var changeDateByInt(Date d, Long i, boolean add) { + Calendar c = Calendar.getInstance(); + c.setTimeInMillis(d.getTime()); + int days = i.intValue(); + if(!add) { + days *= -1; + } + c.add(Calendar.DAY_OF_MONTH, days); + return new Var(new Date(c.getTimeInMillis())); + } + + /** + * Equality operator + */ + public void operatorEqual(HplsqlParser.Bool_expr_binaryContext ctx, boolean equal) { + Var v1 = evalPop(ctx.expr(0)); + Var v2 = evalPop(ctx.expr(1)); + boolean eq = v1.equals(v2); + if (!equal) { + eq = !eq; + } + exec.stackPush(eq); + } + + /** + * Comparison operator + */ + public void operatorCompare(HplsqlParser.Bool_expr_binaryContext ctx, HplsqlParser.Bool_expr_binary_operatorContext op) { + Var v1 = evalPop(ctx.expr(0)); + Var v2 = evalPop(ctx.expr(1)); + int cmp = v1.compareTo(v2); + boolean bool = false; + if (op.T_GREATER() != null) { + if (cmp > 0) { + bool = true; + } + } + else if (op.T_GREATEREQUAL() != null) { + if (cmp >= 0) { + bool = true; + } + } + if (op.T_LESS() != null) { + if (cmp < 0) { + bool = true; + } + } + else if (op.T_LESSEQUAL() != null) { + if (cmp <= 0) { + bool = true; + } + } + exec.stackPush(bool); + } + + /** + * String concatenation operator + */ + public void operatorConcat(HplsqlParser.Expr_concatContext ctx) { + StringBuilder val = new StringBuilder(); + int cnt = ctx.expr_concat_item().size(); + boolean nulls = true; + for (int i = 0; i < cnt; i++) { + Var c = evalPop(ctx.expr_concat_item(i)); + if (!c.isNull()) { + val.append(c.toString()); + nulls = false; + } + } + if (nulls) { + evalNull(); + } + else { + evalString(val); + } + } + + /** + * String concatenation operator in executable SQL statement + */ + public void operatorConcatSql(HplsqlParser.Expr_concatContext ctx) { + StringBuilder sql = new StringBuilder(); + sql.append("CONCAT("); + int cnt = ctx.expr_concat_item().size(); + for (int i = 0; i < cnt; i++) { + sql.append(evalPop(ctx.expr_concat_item(i)).toString()); + if (i + 1 < cnt) { + sql.append(", "); + } + } + sql.append(")"); + exec.stackPush(sql); + } + + /** + * Simple CASE expression + */ + public void execSimpleCase(HplsqlParser.Expr_case_simpleContext ctx) { + int i = 1; + int cnt = ctx.expr().size(); + boolean found = false; + Var val = evalPop(ctx.expr(0)); + while(i < cnt) { + Var when = evalPop(ctx.expr(i)); + if(val.compareTo(when) == 0) { + visit(ctx.expr(i + 1)); + found = true; + break; + } + i += 2; + } + if(!found) { + if(ctx.T_ELSE() != null) { + visit(ctx.expr(cnt - 1)); + } + else { + evalNull(); + } + } + } + + /** + * Simple CASE expression in executable SQL statement + */ + public void execSimpleCaseSql(HplsqlParser.Expr_case_simpleContext ctx) { + StringBuilder sql = new StringBuilder(); + sql.append("CASE "); + sql.append(evalPop(ctx.expr(0)).toString()); + int cnt = ctx.T_WHEN().size(); + for (int i = 0; i < cnt; i++) { + sql.append(" WHEN "); + sql.append(evalPop(ctx.expr(i * 2 + 1)).toString()); + sql.append(" THEN "); + sql.append(evalPop(ctx.expr(i * 2 + 2)).toString()); + } + if (ctx.T_ELSE() != null) { + sql.append(" ELSE "); + sql.append(evalPop(ctx.expr(cnt * 2 + 1)).toString()); + } + sql.append(" END"); + exec.stackPush(sql); + } + + /** + * Searched CASE expression + */ + public void execSearchedCase(HplsqlParser.Expr_case_searchedContext ctx) { + int cnt = ctx.bool_expr().size(); + boolean found = false; + for(int i = 0; i < cnt; i++) { + if(evalPop(ctx.bool_expr(i)).isTrue()) { + visit(ctx.expr(i)); + found = true; + break; + } + } + if(!found) { + if(ctx.T_ELSE() != null) { + visit(ctx.expr(cnt)); + } + else { + evalNull(); + } + } + } + + /** + * Searched CASE expression in executable SQL statement + */ + public void execSearchedCaseSql(HplsqlParser.Expr_case_searchedContext ctx) { + StringBuilder sql = new StringBuilder(); + sql.append("CASE"); + int cnt = ctx.T_WHEN().size(); + for (int i = 0; i < cnt; i++) { + sql.append(" WHEN "); + sql.append(evalPop(ctx.bool_expr(i)).toString()); + sql.append(" THEN "); + sql.append(evalPop(ctx.expr(i)).toString()); + } + if (ctx.T_ELSE() != null) { + sql.append(" ELSE "); + sql.append(evalPop(ctx.expr(cnt)).toString()); + } + sql.append(" END"); + exec.stackPush(sql); + } + + /** + * Create an interval variable + */ + public void createInterval(HplsqlParser.ExprContext ctx) { + int num = evalPop(ctx.expr(0)).intValue(); + Interval interval = new Interval().set(num, ctx.interval_item().getText()); + exec.stackPush(new Var(interval)); + } + + /** + * Evaluate the expression and push the value to the stack + */ + void eval(ParserRuleContext ctx) { + visit(ctx); + } + + /** + * Evaluate the expression and pop value from the stack + */ + Var evalPop(ParserRuleContext ctx) { + visit(ctx); + if (!exec.stack.isEmpty()) { + return exec.stackPop(); + } + return Var.Empty; + } + + /** + * Evaluate the expression to specified String value + */ + void evalString(String string) { + exec.stackPush(new Var(string)); + } + + void evalString(StringBuilder string) { + evalString(string.toString()); + } + + /** + * Evaluate the expression to NULL + */ + void evalNull() { + exec.stackPush(Var.Null); + } + + /** + * Execute rules + */ + Integer visit(ParserRuleContext ctx) { + return exec.visit(ctx); + } + + /** + * Execute children rules + */ + Integer visitChildren(ParserRuleContext ctx) { + return exec.visitChildren(ctx); + } + + /** + * Trace information + */ + public void trace(ParserRuleContext ctx, String message) { + exec.trace(ctx, message); + } +} diff --git hplsql/src/main/java/org/apache/hive/hplsql/File.java hplsql/src/main/java/org/apache/hive/hplsql/File.java new file mode 100644 index 0000000..a00d0ba --- /dev/null +++ hplsql/src/main/java/org/apache/hive/hplsql/File.java @@ -0,0 +1,123 @@ +/** + * 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. + */ + +package org.apache.hive.hplsql; + +import java.io.IOException; + +import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.fs.FileSystem; +import org.apache.hadoop.fs.FSDataInputStream; +import org.apache.hadoop.fs.FSDataOutputStream; +import org.apache.hadoop.fs.Path; + +/** + * HDFS file operations + */ +public class File { + Path path; + FileSystem fs; + FSDataInputStream in; + FSDataOutputStream out; + + /** + * Create FileSystem object + */ + public FileSystem createFs() throws IOException { + fs = FileSystem.get(new Configuration()); + return fs; + } + + /** + * Create a file + */ + public void create(String dir, String file, boolean overwrite) { + path = new Path(dir, file); + try { + if (fs == null) { + fs = FileSystem.get(new Configuration()); + } + out = fs.create(path, overwrite); + } + catch (IOException e) { + e.printStackTrace(); + } + } + + /** + * Open an existing file + */ + public void open(String dir, String file) { + path = new Path(dir, file); + try { + if (fs == null) { + fs = FileSystem.get(new Configuration()); + } + in = fs.open(path); + } catch (IOException e) { + e.printStackTrace(); + } + } + + /** + * Read a character from input + * @throws IOException + */ + public char readChar() throws IOException { + return in.readChar(); + } + + /** + * Write string to file + */ + public void writeString(String str) { + try { + out.writeChars(str); + } catch (IOException e) { + e.printStackTrace(); + } + } + + /** + * Close a file + */ + public void close() { + try { + if (in != null) { + in.close(); + } + if (out != null) { + out.close(); + } + in = null; + out = null; + path = null; + fs = null; + } catch (IOException e) { + e.printStackTrace(); + } + } + + @Override + public String toString() { + if (path != null) { + return "FILE <" + path.toString() + ">"; + } + return "FILE "; + } +} diff --git hplsql/src/main/java/org/apache/hive/hplsql/Handler.java hplsql/src/main/java/org/apache/hive/hplsql/Handler.java new file mode 100644 index 0000000..6c292ef --- /dev/null +++ hplsql/src/main/java/org/apache/hive/hplsql/Handler.java @@ -0,0 +1,41 @@ +/** + * 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. + */ + +package org.apache.hive.hplsql; + +import org.apache.hive.hplsql.Signal.Type; + +/** + * HPL/SQL condition and exception handler + */ +public class Handler { + public enum ExecType { CONTINUE, EXIT }; + ExecType execType; + Type type; + String value; + Scope scope; + HplsqlParser.Declare_handler_itemContext ctx; + + Handler(ExecType execType, Type type, String value, Scope scope, HplsqlParser.Declare_handler_itemContext ctx) { + this.execType = execType; + this.type = type; + this.value = value; + this.scope = scope; + this.ctx = ctx; + } +} diff --git hplsql/src/main/java/org/apache/hive/hplsql/Hplsql.java hplsql/src/main/java/org/apache/hive/hplsql/Hplsql.java new file mode 100644 index 0000000..c2545f7 --- /dev/null +++ hplsql/src/main/java/org/apache/hive/hplsql/Hplsql.java @@ -0,0 +1,25 @@ +/** + * 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. + */ + +package org.apache.hive.hplsql; + +public class Hplsql { + public static void main(String[] args) throws Exception { + System.exit(new Exec().run(args)); + } +} diff --git hplsql/src/main/java/org/apache/hive/hplsql/Hplsql.q hplsql/src/main/java/org/apache/hive/hplsql/Hplsql.q new file mode 100644 index 0000000..edd6391 --- /dev/null +++ hplsql/src/main/java/org/apache/hive/hplsql/Hplsql.q @@ -0,0 +1,1430 @@ +/** + 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. +*/ + +// HPL/SQL Procedural SQL Extension Grammar +grammar Hplsql; + +@header { +package org.apache.hive.hplsql; +} + +program : block ; + +block : (begin_end_block | stmt)+ ; // Multiple consecutive blocks/statements + +begin_end_block : + declare_block? T_BEGIN block exception_block? T_END + ; + +single_block_stmt : // Single BEGIN END block (but nested blocks are possible) or single statement + T_BEGIN block T_END + | stmt T_SEMICOLON? + ; + +stmt : + assignment_stmt + | break_stmt + | call_stmt + | close_stmt + | copy_from_local_stmt + | copy_stmt + | commit_stmt + | create_function_stmt + | create_index_stmt + | create_local_temp_table_stmt + | create_procedure_stmt + | create_table_stmt + | declare_stmt + | delete_stmt + | drop_stmt + | exec_stmt + | exit_stmt + | fetch_stmt + | for_cursor_stmt + | for_range_stmt + | if_stmt + | include_stmt + | insert_stmt + | get_diag_stmt + | grant_stmt + | leave_stmt + | map_object_stmt + | merge_stmt + | open_stmt + | print_stmt + | resignal_stmt + | return_stmt + | rollback_stmt + | select_stmt + | signal_stmt + | update_stmt + | use_stmt + | values_into_stmt + | while_stmt + | label + | hive + | host + | expr_stmt + | semicolon_stmt // Placed here to allow null statements ;;... + ; + +semicolon_stmt : + T_SEMICOLON + | '@' | '#' | '/' + ; + +exception_block : // Exception block + T_EXCEPTION exception_block_item+ + ; + +exception_block_item : + T_WHEN L_ID T_THEN block ~(T_WHEN | T_END) + ; + +expr_stmt : // Standalone expression + expr + ; + +assignment_stmt : // Assignment statement + T_SET? assignment_stmt_item (T_COMMA assignment_stmt_item)* + ; + +assignment_stmt_item : + assignment_stmt_single_item + | assignment_stmt_multiple_item + | assignment_stmt_select_item + ; + +assignment_stmt_single_item : + ident T_COLON? T_EQUAL expr + ; + +assignment_stmt_multiple_item : + T_OPEN_P ident (T_COMMA ident)* T_CLOSE_P T_COLON? T_EQUAL T_OPEN_P expr (T_COMMA expr)* T_CLOSE_P + ; + +assignment_stmt_select_item : + (ident | (T_OPEN_P ident (T_COMMA ident)* T_CLOSE_P)) T_COLON? T_EQUAL T_OPEN_P select_stmt T_CLOSE_P + ; + +break_stmt : + T_BREAK + ; + +call_stmt : + T_CALL ident expr_func_params? + ; + +declare_stmt : // Declaration statement + T_DECLARE declare_stmt_item (T_COMMA declare_stmt_item)* + ; + +declare_block : // Declaration block + T_DECLARE declare_stmt_item T_SEMICOLON (declare_stmt_item T_SEMICOLON)* + ; + + +declare_stmt_item : + declare_var_item + | declare_condition_item + | declare_cursor_item + | declare_handler_item + | declare_temporary_table_item + ; + +declare_var_item : + ident (T_COMMA ident)* T_AS? dtype dtype_len? dtype_attr* dtype_default? + ; + +declare_condition_item : // Condition declaration + ident T_CONDITION + ; + +declare_cursor_item : // Cursor declaration + (T_CURSOR ident | ident T_CURSOR) declare_cursor_return? (T_IS | T_AS | T_FOR) (select_stmt | expr ) + ; + +declare_cursor_return : + T_WITHOUT T_RETURN + | T_WITH T_RETURN T_ONLY? (T_TO (T_CALLER | T_CLIENT))? + ; + +declare_handler_item : // Condition handler declaration + (T_CONTINUE | T_EXIT) T_HANDLER T_FOR (T_SQLEXCEPTION | T_SQLWARNING | T_NOT T_FOUND | ident) single_block_stmt + ; + +declare_temporary_table_item : // DECLARE TEMPORARY TABLE statement + T_GLOBAL? T_TEMPORARY T_TABLE ident T_OPEN_P create_table_columns T_CLOSE_P create_table_options? + ; + +create_table_stmt : + T_CREATE T_TABLE (T_IF T_NOT T_EXISTS)? ident T_OPEN_P create_table_columns T_CLOSE_P create_table_options? + ; + +create_local_temp_table_stmt : + T_CREATE (T_LOCAL T_TEMPORARY | (T_SET | T_MULTISET)? T_VOLATILE) T_TABLE ident T_OPEN_P create_table_columns T_CLOSE_P create_table_options? + ; + +create_table_columns : + create_table_columns_item (T_COMMA create_table_columns_item)* + ; + +create_table_columns_item : + ident dtype dtype_len? dtype_attr* create_table_column_inline_cons? + | T_CONSTRAINT ident create_table_column_cons + ; + +create_table_column_inline_cons : + dtype_default + | T_NOT? T_NULL + | T_PRIMARY T_KEY + ; + +create_table_column_cons : + T_PRIMARY T_KEY T_OPEN_P ident (T_COMMA ident)* T_CLOSE_P + ; + +create_table_options : + create_table_options_item+ + ; + +create_table_options_item : + T_ON T_COMMIT (T_DELETE | T_PRESERVE) T_ROWS + | create_table_options_db2_item + | create_table_options_hive_item + ; + +create_table_options_db2_item : + T_IN ident + | T_WITH T_REPLACE + | T_DISTRIBUTE T_BY T_HASH T_OPEN_P ident (T_COMMA ident)* T_CLOSE_P + | T_LOGGED + | T_NOT T_LOGGED + ; + +create_table_options_hive_item : + create_table_hive_row_format + ; + +create_table_hive_row_format : + T_ROW T_FORMAT T_DELIMITED create_table_hive_row_format_fields* + ; + +create_table_hive_row_format_fields : + T_FIELDS T_TERMINATED T_BY expr (T_ESCAPED T_BY expr)? + | T_COLLECTION T_ITEMS T_TERMINATED T_BY expr + | T_MAP T_KEYS T_TERMINATED T_BY expr + | T_LINES T_TERMINATED T_BY expr + | T_NULL T_DEFINED T_AS expr + ; + +dtype : // Data types + T_CHAR + | T_BIGINT + | T_DATE + | T_DEC + | T_DECIMAL + | T_FLOAT + | T_INT + | T_INTEGER + | T_NUMBER + | T_SMALLINT + | T_STRING + | T_TIMESTAMP + | T_VARCHAR + | T_VARCHAR2 + | L_ID // User-defined data type + ; + +dtype_len : // Data type length or size specification + T_OPEN_P L_INT (T_COMMA L_INT)? T_CLOSE_P + ; + +dtype_attr : + T_CHARACTER T_SET ident + | T_NOT? (T_CASESPECIFIC | T_CS) + ; + +dtype_default : // Default clause in variable declaration + T_COLON? T_EQUAL expr + | T_DEFAULT expr + ; + +create_function_stmt : + (T_ALTER | T_CREATE (T_OR T_REPLACE)? | T_REPLACE) T_FUNCTION ident create_routine_params create_function_return (T_AS | T_IS)? single_block_stmt + ; + +create_function_return : + (T_RETURN | T_RETURNS) dtype dtype_len? + ; + +create_procedure_stmt : + (T_ALTER | T_CREATE (T_OR T_REPLACE)? | T_REPLACE) (T_PROCEDURE | T_PROC) ident create_routine_params create_routine_options? (T_AS | T_IS)? label? single_block_stmt (ident T_SEMICOLON)? + ; + +create_routine_params : + T_OPEN_P (create_routine_param_item (T_COMMA create_routine_param_item)*)? T_CLOSE_P + ; + +create_routine_param_item : + (T_IN | T_OUT | T_INOUT | T_IN T_OUT)? ident dtype dtype_len? dtype_attr* dtype_default? + | ident (T_IN | T_OUT | T_INOUT | T_IN T_OUT)? dtype dtype_len? dtype_attr* dtype_default? + ; + +create_routine_options : + create_routine_option+ + ; +create_routine_option : + T_LANGUAGE T_SQL + | T_SQL T_SECURITY (T_CREATOR | T_DEFINER | T_INVOKER | T_OWNER) + | T_DYNAMIC T_RESULT T_SETS L_INT + ; + +drop_stmt : // DROP statement + T_DROP T_TABLE (T_IF T_EXISTS)? table_name + ; + +exec_stmt : // EXEC, EXECUTE IMMEDIATE statement + (T_EXEC | T_EXECUTE) T_IMMEDIATE? expr (T_INTO L_ID (T_COMMA L_ID)*)? using_clause? + ; + +if_stmt : // IF statement + if_plsql_stmt + | if_tsql_stmt + ; + +if_plsql_stmt : + T_IF bool_expr T_THEN block elseif_block* else_block? T_END T_IF + ; + +if_tsql_stmt : + T_IF bool_expr single_block_stmt (T_ELSE single_block_stmt)? + ; + +elseif_block : + (T_ELSIF | T_ELSEIF) bool_expr T_THEN block + ; + +else_block : + T_ELSE block + ; + +include_stmt : // INCLUDE statement + T_INCLUDE file_name + ; + +insert_stmt : // INSERT statement + T_INSERT (T_OVERWRITE T_TABLE | T_INTO T_TABLE?) table_name insert_stmt_cols? (select_stmt | insert_stmt_rows) + ; + +insert_stmt_cols : + T_OPEN_P ident (T_COMMA ident)* T_CLOSE_P + ; + +insert_stmt_rows : + T_VALUES insert_stmt_row (T_COMMA insert_stmt_row)* + ; + +insert_stmt_row: + T_OPEN_P expr (T_COMMA expr)* T_CLOSE_P + ; + +exit_stmt : + T_EXIT L_ID? (T_WHEN bool_expr)? + ; + +get_diag_stmt : // GET DIAGNOSTICS statement + T_GET T_DIAGNOSTICS get_diag_stmt_item + ; + +get_diag_stmt_item : + get_diag_stmt_exception_item + | get_diag_stmt_rowcount_item + ; + +get_diag_stmt_exception_item : + T_EXCEPTION L_INT ident T_EQUAL T_MESSAGE_TEXT + ; + +get_diag_stmt_rowcount_item : + ident T_EQUAL T_ROW_COUNT + ; + +grant_stmt : + T_GRANT grant_stmt_item (T_COMMA grant_stmt_item)* T_TO ident + ; + +grant_stmt_item : + T_EXECUTE T_ON T_PROCEDURE ident + ; + +leave_stmt : + T_LEAVE L_ID? + ; + +map_object_stmt : + T_MAP T_OBJECT expr (T_TO expr)? (T_AT expr)? + ; + +open_stmt : // OPEN cursor statement + T_OPEN L_ID (T_FOR (expr | select_stmt))? + ; + +fetch_stmt : // FETCH cursor statement + T_FETCH T_FROM? L_ID T_INTO L_ID (T_COMMA L_ID)* + ; + +close_stmt : // CLOSE cursor statement + T_CLOSE L_ID + ; + +copy_from_local_stmt : // COPY FROM LOCAL statement + T_COPY T_FROM T_LOCAL copy_source (T_COMMA copy_source)* T_TO copy_target copy_file_option* + ; + +copy_stmt : // COPY statement + T_COPY (table_name | T_OPEN_P select_stmt T_CLOSE_P) T_TO copy_target copy_option* + ; + +copy_source : + (ident | expr | L_FILE) + ; + +copy_target : + (ident | expr | L_FILE) + ; + +copy_option : + T_AT ident + | T_BATCHSIZE expr + | T_DELIMITER expr + | T_SQLINSERT ident + ; + +copy_file_option : + T_DELETE + | T_IGNORE + | T_OVERWRITE + ; + +commit_stmt : // COMMIT statement + T_COMMIT T_WORK? + ; + +create_index_stmt : // CREATE INDEX statement + T_CREATE T_UNIQUE? T_INDEX ident T_ON table_name T_OPEN_P create_index_col (T_COMMA create_index_col)* T_CLOSE_P + ; + +create_index_col : + ident (T_ASC | T_DESC)? + ; + +print_stmt : // PRINT statement + T_PRINT expr + | T_PRINT T_OPEN_P expr T_CLOSE_P + ; + +resignal_stmt : // RESIGNAL statement + T_RESIGNAL (T_SQLSTATE T_VALUE? expr (T_SET T_MESSAGE_TEXT T_EQUAL expr)? )? + ; + +return_stmt : // RETURN statement + T_RETURN expr? + ; + +rollback_stmt : // ROLLBACK statement + T_ROLLBACK T_WORK? + ; + +signal_stmt : // SIGNAL statement + T_SIGNAL ident + ; + +use_stmt : // USE statement + T_USE expr + ; + +values_into_stmt : // VALUES INTO statement + T_VALUES T_OPEN_P? expr (T_COMMA expr)* T_CLOSE_P? T_INTO T_OPEN_P? ident (T_COMMA ident)* T_CLOSE_P? + ; + +while_stmt : // WHILE loop statement + T_WHILE bool_expr (T_DO | T_LOOP | T_THEN | T_BEGIN) block T_END (T_WHILE | T_LOOP)? + ; + +for_cursor_stmt : // FOR (cursor) statement + T_FOR L_ID T_IN T_OPEN_P? select_stmt T_CLOSE_P? T_LOOP block T_END T_LOOP + ; + +for_range_stmt : // FOR (Integer range) statement + T_FOR L_ID T_IN T_REVERSE? expr T_DOT2 expr ((T_BY | T_STEP) expr)? T_LOOP block T_END T_LOOP + ; + +label : + L_LABEL + | T_LESS T_LESS L_ID T_GREATER T_GREATER + ; + +using_clause : // USING var,... clause + T_USING expr (T_COMMA expr)* + ; + +select_stmt : // SELECT statement + cte_select_stmt? fullselect_stmt + ; + +cte_select_stmt : + T_WITH cte_select_stmt_item (T_COMMA cte_select_stmt_item)* + ; + +cte_select_stmt_item : + ident cte_select_cols? T_AS T_OPEN_P fullselect_stmt T_CLOSE_P + ; + +cte_select_cols : + T_OPEN_P ident (T_COMMA ident)* T_CLOSE_P + ; + +fullselect_stmt : + fullselect_stmt_item (fullselect_set_clause fullselect_stmt_item)* + ; + +fullselect_stmt_item : + subselect_stmt + | T_OPEN_P fullselect_stmt T_CLOSE_P + ; + +fullselect_set_clause : + T_UNION T_ALL? + | T_EXCEPT T_ALL? + | T_INTERSECT T_ALL? + ; + +subselect_stmt : + (T_SELECT | T_SEL) select_list into_clause? from_clause? where_clause? group_by_clause? having_clause? order_by_clause? select_options? + ; + +select_list : + select_list_set? select_list_limit? select_list_item (T_COMMA select_list_item)* + ; + +select_list_set : + T_ALL + | T_DISTINCT + ; + +select_list_limit : + T_TOP expr + ; + +select_list_item : + (expr select_list_alias? | select_list_asterisk) + ; + +select_list_alias : + T_AS? L_ID + | T_OPEN_P T_TITLE L_S_STRING T_CLOSE_P + ; + +select_list_asterisk : + (L_ID '.')? '*' + ; + +into_clause : + T_INTO ident (T_COMMA ident)* + ; + +from_clause : + T_FROM from_table_clause (from_join_clause)* + ; + +from_table_clause : + from_table_name_clause + | from_subselect_clause + | from_table_values_clause + ; + +from_table_name_clause : + table_name from_alias_clause? + ; + +from_subselect_clause : + T_OPEN_P subselect_stmt T_CLOSE_P from_alias_clause? + ; + +from_join_clause : + T_COMMA from_table_clause + | from_join_type_clause from_table_clause T_ON bool_expr + ; + +from_join_type_clause : + T_INNER T_JOIN + | (T_LEFT | T_RIGHT | T_FULL) T_OUTER? T_JOIN + ; + +from_table_values_clause: + T_TABLE T_OPEN_P T_VALUES from_table_values_row (T_COMMA from_table_values_row)* T_CLOSE_P from_alias_clause? + ; + +from_table_values_row: + expr + | T_OPEN_P expr (T_COMMA expr)* T_CLOSE_P + ; + +from_alias_clause : + {!_input.LT(1).getText().equalsIgnoreCase("GROUP") && + !_input.LT(1).getText().equalsIgnoreCase("ORDER") && + !_input.LT(1).getText().equalsIgnoreCase("LIMIT")}? + T_AS? ident (T_OPEN_P L_ID (T_COMMA L_ID)* T_CLOSE_P)? + ; + +table_name : + ident + ; + +where_clause : + T_WHERE bool_expr + ; + +group_by_clause : + T_GROUP T_BY expr (T_COMMA expr)* + ; + +having_clause : + T_HAVING bool_expr + ; + +order_by_clause : + T_ORDER T_BY expr (T_ASC | T_DESC)? (T_COMMA expr (T_ASC | T_DESC)?)* + ; + +select_options : + select_options_item+ + ; + +select_options_item : + T_LIMIT expr + | T_WITH (T_RR | T_RS | T_CS | T_UR) + ; + +update_stmt : // UPDATE statement + T_UPDATE update_table T_SET assignment_stmt_item (T_COMMA assignment_stmt_item)* where_clause? update_upsert? + ; + +update_table : + (table_name | (T_OPEN_P select_stmt T_CLOSE_P)) (T_AS? ident)? + ; + +update_upsert : + T_ELSE insert_stmt + ; + +merge_stmt : // MERGE statement + T_MERGE T_INTO merge_table T_USING merge_table T_ON bool_expr merge_condition+ + ; + +merge_table : + (table_name | (T_OPEN_P select_stmt T_CLOSE_P)) (T_AS? ident)? + ; + +merge_condition : + T_WHEN T_NOT? T_MATCHED (T_AND bool_expr)? T_THEN merge_action + | T_ELSE T_IGNORE + ; + +merge_action : + T_INSERT insert_stmt_cols? T_VALUES insert_stmt_row + | T_UPDATE T_SET assignment_stmt_item (T_COMMA assignment_stmt_item)* + | T_DELETE + ; + +delete_stmt : // DELETE statement + T_DELETE T_FROM? table_name (T_AS? ident)? where_clause? + ; + +bool_expr : // Boolean condition + T_OPEN_P bool_expr T_CLOSE_P + | bool_expr bool_expr_logical_operator bool_expr + | bool_expr_atom + ; + +bool_expr_atom : + bool_expr_unary + | bool_expr_binary + ; + +bool_expr_unary : + expr T_IS T_NOT? T_NULL + | expr T_BETWEEN expr T_AND expr + | bool_expr_single_in + | bool_expr_multi_in + ; + +bool_expr_single_in : + expr T_NOT? T_IN T_OPEN_P ((expr (T_COMMA expr)*) | select_stmt) T_CLOSE_P + ; + +bool_expr_multi_in : + T_OPEN_P expr (T_COMMA expr)* T_CLOSE_P T_NOT? T_IN T_OPEN_P select_stmt T_CLOSE_P + ; + +bool_expr_binary : + expr bool_expr_binary_operator expr + ; + +bool_expr_logical_operator : + T_AND + | T_OR + ; + +bool_expr_binary_operator : + T_EQUAL + | T_EQUAL2 + | T_NOTEQUAL + | T_NOTEQUAL2 + | T_LESS + | T_LESSEQUAL + | T_GREATER + | T_GREATEREQUAL + | T_NOT? (T_LIKE | T_RLIKE | T_REGEXP) + ; + +expr : + expr interval_item + | expr T_MUL expr + | expr T_DIV expr + | expr T_ADD expr + | expr T_SUB expr + | T_OPEN_P expr T_CLOSE_P + | expr_concat + | expr_case + | expr_agg_window_func + | expr_spec_func + | expr_func + | expr_atom + ; + + +expr_atom : + date_literal + | timestamp_literal + | ident + | string + | dec_number + | interval_number + | int_number + | null_const + ; + +interval_item : + T_DAY + | T_DAYS + | T_MICROSECOND + | T_MICROSECONDS + ; + +interval_number : + int_number interval_item + ; + +expr_concat : // String concatenation operator + expr_concat_item (T_PIPE | T_CONCAT) expr_concat_item ((T_PIPE | T_CONCAT) expr_concat_item)* + ; + +expr_concat_item : + T_OPEN_P expr T_CLOSE_P + | expr_case + | expr_agg_window_func + | expr_spec_func + | expr_func + | expr_atom + ; + +expr_case : // CASE expression + expr_case_simple + | expr_case_searched + ; + +expr_case_simple : + T_CASE expr (T_WHEN expr T_THEN expr)+ (T_ELSE expr)? T_END + ; + +expr_case_searched : + T_CASE (T_WHEN bool_expr T_THEN expr)+ (T_ELSE expr)? T_END + ; + +expr_agg_window_func : + T_AVG T_OPEN_P expr_func_all_distinct? expr T_CLOSE_P expr_func_over_clause? + | T_COUNT T_OPEN_P ((expr_func_all_distinct? expr) | '*') T_CLOSE_P expr_func_over_clause? + | T_COUNT_BIG T_OPEN_P ((expr_func_all_distinct? expr) | '*') T_CLOSE_P expr_func_over_clause? + | T_DENSE_RANK T_OPEN_P T_CLOSE_P expr_func_over_clause + | T_FIRST_VALUE T_OPEN_P expr T_CLOSE_P expr_func_over_clause + | T_LAG T_OPEN_P expr (T_COMMA expr (T_COMMA expr)?)? T_CLOSE_P expr_func_over_clause + | T_LAST_VALUE T_OPEN_P expr T_CLOSE_P expr_func_over_clause + | T_LEAD T_OPEN_P expr (T_COMMA expr (T_COMMA expr)?)? T_CLOSE_P expr_func_over_clause + | T_MAX T_OPEN_P expr_func_all_distinct? expr T_CLOSE_P expr_func_over_clause? + | T_MIN T_OPEN_P expr_func_all_distinct? expr T_CLOSE_P expr_func_over_clause? + | T_RANK T_OPEN_P T_CLOSE_P expr_func_over_clause + | T_ROW_NUMBER T_OPEN_P T_CLOSE_P expr_func_over_clause + | T_STDEV T_OPEN_P expr_func_all_distinct? expr T_CLOSE_P expr_func_over_clause? + | T_SUM T_OPEN_P expr_func_all_distinct? expr T_CLOSE_P expr_func_over_clause? + | T_VAR T_OPEN_P expr_func_all_distinct? expr T_CLOSE_P expr_func_over_clause? + | T_VARIANCE T_OPEN_P expr_func_all_distinct? expr T_CLOSE_P expr_func_over_clause? + ; + +expr_func_all_distinct : + T_ALL + | T_DISTINCT + ; + +expr_func_over_clause : + T_OVER T_OPEN_P expr_func_partition_by_clause? order_by_clause? T_CLOSE_P + ; + +expr_func_partition_by_clause : + T_PARTITION T_BY ident (T_COMMA ident)* + ; + +expr_spec_func : + T_ACTIVITY_COUNT + | T_CAST T_OPEN_P expr T_AS dtype dtype_len? T_CLOSE_P + | T_COUNT T_OPEN_P (expr | '*') T_CLOSE_P + | T_CURRENT_DATE | T_CURRENT T_DATE + | (T_CURRENT_TIMESTAMP | T_CURRENT T_TIMESTAMP) (T_OPEN_P expr T_CLOSE_P)? + | T_CURRENT_USER | T_CURRENT T_USER + | T_MAX_PART_STRING T_OPEN_P expr (T_COMMA expr (T_COMMA expr T_EQUAL expr)*)? T_CLOSE_P + | T_MIN_PART_STRING T_OPEN_P expr (T_COMMA expr (T_COMMA expr T_EQUAL expr)*)? T_CLOSE_P + | T_MAX_PART_INT T_OPEN_P expr (T_COMMA expr (T_COMMA expr T_EQUAL expr)*)? T_CLOSE_P + | T_MIN_PART_INT T_OPEN_P expr (T_COMMA expr (T_COMMA expr T_EQUAL expr)*)? T_CLOSE_P + | T_MAX_PART_DATE T_OPEN_P expr (T_COMMA expr (T_COMMA expr T_EQUAL expr)*)? T_CLOSE_P + | T_MIN_PART_DATE T_OPEN_P expr (T_COMMA expr (T_COMMA expr T_EQUAL expr)*)? T_CLOSE_P + | T_PART_LOC T_OPEN_P expr (T_COMMA expr T_EQUAL expr)+ (T_COMMA expr)? T_CLOSE_P + | T_TRIM T_OPEN_P expr T_CLOSE_P + | T_SUBSTRING T_OPEN_P expr T_FROM expr (T_FOR expr)? T_CLOSE_P + | T_SYSDATE + | T_USER + ; + +expr_func : + ident expr_func_params + ; + +expr_func_params : + T_OPEN_P (expr (T_COMMA expr)*)? T_CLOSE_P + ; + +hive : + T_HIVE hive_item* + ; + +hive_item : + P_e expr + | P_f expr + | P_hiveconf L_ID T_EQUAL expr + | P_i expr + | P_S + | P_h + ; + +host : + '!' host_cmd ';' // OS command + | host_stmt + ; + +host_cmd : + .*? + ; + +host_stmt : + T_HOST expr + ; + +file_name : + L_ID | L_FILE + ; + +date_literal : // DATE 'YYYY-MM-DD' literal + T_DATE string + ; + +timestamp_literal : // TIMESTAMP 'YYYY-MM-DD HH:MI:SS.FFF' literal + T_TIMESTAMP string + ; + +ident : + L_ID + | non_reserved_words + ; + +string : // String literal (single or double quoted) + L_S_STRING # single_quotedString + | L_D_STRING # double_quotedString + ; + +int_number : // Integer (positive or negative) + ('-' | '+')? L_INT + ; + +dec_number : // Decimal number (positive or negative) + ('-' | '+')? L_DEC + ; + +null_const : // NULL constant + T_NULL + ; + +non_reserved_words : // Tokens that are not reserved words and can be used as identifiers + T_ACTIVITY_COUNT + | T_ALL + | T_ALTER + | T_AND + | T_AS + | T_ASC + | T_AT + | T_AVG + | T_BATCHSIZE + | T_BEGIN + | T_BETWEEN + | T_BIGINT + | T_BREAK + | T_BY + | T_CALL + | T_CALLER + | T_CASE + | T_CASESPECIFIC + | T_CAST + | T_CHAR + | T_CHARACTER + | T_CLIENT + | T_CLOSE + | T_COLLECTION + | T_COPY + | T_COMMIT + | T_CONCAT + | T_CONDITION + | T_CONSTRAINT + | T_CONTINUE + | T_COUNT + | T_COUNT_BIG + | T_CREATE + | T_CREATOR + | T_CS + | T_CURRENT + | T_CURRENT_DATE + | T_CURRENT_TIMESTAMP + | T_CURRENT_USER + | T_CURSOR + | T_DATE + | T_DAY + | T_DAYS + | T_DEC + | T_DECIMAL + | T_DECLARE + | T_DEFAULT + | T_DEFINED + | T_DEFINER + | T_DELETE + | T_DELIMITED + | T_DELIMITER + | T_DENSE_RANK + | T_DESC + | T_DIAGNOSTICS + | T_DISTINCT + | T_DISTRIBUTE + | T_DO + | T_DROP + | T_DYNAMIC + // T_ELSE reserved word + // T_ELSEIF reserved word + // T_ELSIF reserved word + // T_END reserved word + | T_ESCAPED + | T_EXCEPT + | T_EXEC + | T_EXECUTE + | T_EXCEPTION + | T_EXISTS + | T_EXIT + | T_FETCH + | T_FIELDS + | T_FILE + | T_FIRST_VALUE + | T_FLOAT + | T_FOR + | T_FORMAT + | T_FOUND + | T_FROM + | T_FULL + | T_FUNCTION + | T_GET + | T_GLOBAL + | T_GRANT + | T_GROUP + | T_HANDLER + | T_HASH + | T_HAVING + | T_HIVE + | T_HOST + | T_IF + | T_IGNORE + | T_IMMEDIATE + | T_IN + | T_INCLUDE + | T_INDEX + | T_INNER + | T_INOUT + | T_INSERT + | T_INT + | T_INTEGER + | T_INTERSECT + | T_INTO + | T_INVOKER + | T_ITEMS + | T_IS + | T_JOIN + | T_KEY + | T_KEYS + | T_LAG + | T_LANGUAGE + | T_LAST_VALUE + | T_LEAD + | T_LEAVE + | T_LEFT + | T_LIKE + | T_LIMIT + | T_LINES + | T_LOCAL + | T_LOGGED + | T_LOOP + | T_MAP + | T_MATCHED + | T_MAX + | T_MERGE + | T_MESSAGE_TEXT + | T_MICROSECOND + | T_MICROSECONDS + | T_MIN + | T_MULTISET + | T_NOT + // T_NULL reserved word + | T_NUMBER + | T_OBJECT + | T_ON + | T_ONLY + | T_OPEN + | T_OR + | T_ORDER + | T_OUT + | T_OUTER + | T_OVER + | T_OVERWRITE + | T_OWNER + | T_PART_LOC + | T_PARTITION + | T_PRESERVE + | T_PRIMARY + | T_PRINT + | T_PROC + | T_PROCEDURE + | T_RANK + | T_REGEXP + | T_RR + | T_REPLACE + | T_RESIGNAL + | T_RESULT + | T_RETURN + | T_RETURNS + | T_REVERSE + | T_RIGHT + | T_RLIKE + | T_RS + | T_ROLLBACK + | T_ROW + | T_ROWS + | T_ROW_COUNT + | T_ROW_NUMBER + | T_SECURITY + | T_SEL + | T_SELECT + | T_SET + | T_SETS + | T_SIGNAL + | T_SMALLINT + | T_SQL + | T_SQLEXCEPTION + | T_SQLINSERT + | T_SQLSTATE + | T_SQLWARNING + | T_STEP + | T_STDEV + | T_STRING + | T_SUBSTRING + | T_SUM + | T_SYSDATE + | T_TABLE + | T_TEMPORARY + | T_TERMINATED + | T_THEN + | T_TIMESTAMP + | T_TITLE + | T_TO + | T_TOP + | T_TRIM + // T_UNION reserved word + | T_UNIQUE + | T_UPDATE + | T_UR + | T_USE + | T_USER + | T_USING + | T_VALUE + | T_VALUES + | T_VAR + | T_VARCHAR + | T_VARCHAR2 + | T_VARIANCE + | T_VOLATILE + // T_WHEN reserved word + // T_WHERE reserved word + | T_WHILE + | T_WITH + | T_WITHOUT + | T_WORK + ; + +// Lexer rules +T_ALL : A L L ; +T_ALTER : A L T E R ; +T_AND : A N D ; +T_AS : A S ; +T_ASC : A S C ; +T_AT : A T ; +T_AVG : A V G ; +T_BATCHSIZE : B A T C H S I Z E ; +T_BEGIN : B E G I N ; +T_BETWEEN : B E T W E E N ; +T_BIGINT : B I G I N T ; +T_BREAK : B R E A K ; +T_BY : B Y ; +T_CALL : C A L L ; +T_CALLER : C A L L E R ; +T_CASE : C A S E ; +T_CASESPECIFIC : C A S E S P E C I F I C ; +T_CAST : C A S T ; +T_CHAR : C H A R ; +T_CHARACTER : C H A R A C T E R ; +T_CLIENT : C L I E N T ; +T_CLOSE : C L O S E ; +T_COLLECTION : C O L L E C T I O N ; +T_COPY : C O P Y ; +T_COMMIT : C O M M I T ; +T_CONCAT : C O N C A T; +T_CONDITION : C O N D I T I O N ; +T_CONSTRAINT : C O N S T R A I N T ; +T_CONTINUE : C O N T I N U E ; +T_COUNT : C O U N T ; +T_COUNT_BIG : C O U N T '_' B I G; +T_CREATE : C R E A T E ; +T_CREATOR : C R E A T O R ; +T_CS : C S; +T_CURRENT : C U R R E N T ; +T_CURSOR : C U R S O R ; +T_DATE : D A T E ; +T_DAY : D A Y ; +T_DAYS : D A Y S ; +T_DEC : D E C ; +T_DECIMAL : D E C I M A L ; +T_DECLARE : D E C L A R E ; +T_DEFAULT : D E F A U L T ; +T_DEFINED : D E F I N E D ; +T_DEFINER : D E F I N E R ; +T_DELETE : D E L E T E ; +T_DELIMITED : D E L I M I T E D ; +T_DELIMITER : D E L I M I T E R ; +T_DESC : D E S C ; +T_DIAGNOSTICS : D I A G N O S T I C S ; +T_DISTINCT : D I S T I N C T ; +T_DISTRIBUTE : D I S T R I B U T E ; +T_DO : D O ; +T_DROP : D R O P ; +T_DYNAMIC : D Y N A M I C ; +T_ELSE : E L S E ; +T_ELSEIF : E L S E I F ; +T_ELSIF : E L S I F ; +T_END : E N D ; +T_ESCAPED : E S C A P E D ; +T_EXCEPT : E X C E P T ; +T_EXEC : E X E C ; +T_EXECUTE : E X E C U T E ; +T_EXCEPTION : E X C E P T I O N ; +T_EXISTS : E X I S T S ; +T_EXIT : E X I T ; +T_FETCH : F E T C H ; +T_FIELDS : F I E L D S ; +T_FILE : F I L E ; +T_FLOAT : F L O A T ; +T_FOR : F O R ; +T_FORMAT : F O R M A T ; +T_FOUND : F O U N D ; +T_FROM : F R O M ; +T_FULL : F U L L ; +T_FUNCTION : F U N C T I O N ; +T_GET : G E T ; +T_GLOBAL : G L O B A L ; +T_GRANT : G R A N T ; +T_GROUP : G R O U P ; +T_HANDLER : H A N D L E R ; +T_HASH : H A S H ; +T_HAVING : H A V I N G ; +T_HIVE : H I V E ; +T_HOST : H O S T ; +T_IF : I F ; +T_IGNORE : I G N O R E ; +T_IMMEDIATE : I M M E D I A T E ; +T_IN : I N ; +T_INCLUDE : I N C L U D E ; +T_INDEX : I N D E X ; +T_INNER : I N N E R ; +T_INOUT : I N O U T; +T_INSERT : I N S E R T ; +T_INT : I N T ; +T_INTEGER : I N T E G E R ; +T_INTERSECT : I N T E R S E C T ; +T_INTO : I N T O ; +T_INVOKER : I N V O K E R ; +T_IS : I S ; +T_ITEMS : I T E M S ; +T_JOIN : J O I N ; +T_KEY : K E Y ; +T_KEYS : K E Y S ; +T_LANGUAGE : L A N G U A G E ; +T_LEAVE : L E A V E ; +T_LEFT : L E F T ; +T_LIKE : L I K E ; +T_LIMIT : L I M I T ; +T_LINES : L I N E S ; +T_LOCAL : L O C A L ; +T_LOGGED : L O G G E D ; +T_LOOP : L O O P ; +T_MAP : M A P ; +T_MATCHED : M A T C H E D ; +T_MAX : M A X ; +T_MERGE : M E R G E ; +T_MESSAGE_TEXT : M E S S A G E '_' T E X T ; +T_MICROSECOND : M I C R O S E C O N D ; +T_MICROSECONDS : M I C R O S E C O N D S; +T_MIN : M I N ; +T_MULTISET : M U L T I S E T ; +T_NOT : N O T ; +T_NULL : N U L L ; +T_NUMBER : N U M B E R ; +T_OBJECT : O B J E C T ; +T_ON : O N ; +T_ONLY : O N L Y ; +T_OPEN : O P E N ; +T_OR : O R ; +T_ORDER : O R D E R; +T_OUT : O U T ; +T_OUTER : O U T E R ; +T_OVER : O V E R ; +T_OVERWRITE : O V E R W R I T E ; +T_OWNER : O W N E R ; +T_PARTITION : P A R T I T I O N ; +T_PRESERVE : P R E S E R V E ; +T_PRIMARY : P R I M A R Y ; +T_PRINT : P R I N T ; +T_PROC : P R O C ; +T_PROCEDURE : P R O C E D U R E; +T_REGEXP : R E G E X P ; +T_REPLACE : R E P L A C E ; +T_RESIGNAL : R E S I G N A L ; +T_RESULT : R E S U L T ; +T_RETURN : R E T U R N ; +T_RETURNS : R E T U R N S ; +T_REVERSE : R E V E R S E ; +T_RIGHT : R I G H T ; +T_RLIKE : R L I K E ; +T_ROLLBACK : R O L L B A C K ; +T_ROW : R O W ; +T_ROWS : R O W S ; +T_ROW_COUNT : R O W '_' C O U N T ; +T_RR : R R; +T_RS : R S ; +T_TRIM : T R I M ; +T_SECURITY : S E C U R I T Y ; +T_SEL : S E L ; +T_SELECT : S E L E C T ; +T_SET : S E T ; +T_SETS : S E T S; +T_SIGNAL : S I G N A L ; +T_SMALLINT : S M A L L I N T ; +T_SQL : S Q L ; +T_SQLEXCEPTION : S Q L E X C E P T I O N ; +T_SQLINSERT : S Q L I N S E R T ; +T_SQLSTATE : S Q L S T A T E ; +T_SQLWARNING : S Q L W A R N I N G ; +T_STEP : S T E P ; +T_STRING : S T R I N G ; +T_SUBSTRING : S U B S T R I N G ; +T_SUM : S U M ; +T_TABLE : T A B L E ; +T_TEMPORARY : T E M P O R A R Y ; +T_TERMINATED : T E R M I N A T E D ; +T_THEN : T H E N ; +T_TIMESTAMP : T I M E S T A M P ; +T_TITLE : T I T L E ; +T_TO : T O ; +T_TOP : T O P ; +T_UNION : U N I O N ; +T_UNIQUE : U N I Q U E ; +T_UPDATE : U P D A T E ; +T_UR : U R ; +T_USE : U S E ; +T_USING : U S I N G ; +T_VALUE : V A L U E ; +T_VALUES : V A L U E S ; +T_VAR : V A R ; +T_VARCHAR : V A R C H A R ; +T_VARCHAR2 : V A R C H A R '2' ; +T_VOLATILE : V O L A T I L E ; +T_WHEN : W H E N ; +T_WHERE : W H E R E ; +T_WHILE : W H I L E ; +T_WITH : W I T H ; +T_WITHOUT : W I T H O U T ; +T_WORK : W O R K ; + +// Functions with specific syntax +T_ACTIVITY_COUNT : A C T I V I T Y '_' C O U N T ; +T_CURRENT_DATE : C U R R E N T '_' D A T E ; +T_CURRENT_TIMESTAMP : C U R R E N T '_' T I M E S T A M P ; +T_CURRENT_USER : C U R R E N T '_' U S E R ; +T_DENSE_RANK : D E N S E '_' R A N K ; +T_FIRST_VALUE : F I R S T '_' V A L U E; +T_LAG : L A G ; +T_LAST_VALUE : L A S T '_' V A L U E; +T_LEAD : L E A D ; +T_MAX_PART_STRING : M A X '_' P A R T '_' S T R I N G ; +T_MIN_PART_STRING : M I N '_' P A R T '_' S T R I N G ; +T_MAX_PART_INT : M A X '_' P A R T '_' I N T ; +T_MIN_PART_INT : M I N '_' P A R T '_' I N T ; +T_MAX_PART_DATE : M A X '_' P A R T '_' D A T E ; +T_MIN_PART_DATE : M I N '_' P A R T '_' D A T E ; +T_PART_LOC : P A R T '_' L O C ; +T_RANK : R A N K ; +T_ROW_NUMBER : R O W '_' N U M B E R; +T_STDEV : S T D E V ; +T_SYSDATE : S Y S D A T E ; +T_VARIANCE : V A R I A N C E ; +T_USER : U S E R; + +T_ADD : '+' ; +T_COLON : ':' ; +T_COMMA : ',' ; +T_PIPE : '||' ; +T_DIV : '/' ; +T_DOT2 : '..' ; +T_EQUAL : '=' ; +T_EQUAL2 : '==' ; +T_NOTEQUAL : '<>' ; +T_NOTEQUAL2 : '!=' ; +T_GREATER : '>' ; +T_GREATEREQUAL : '>=' ; +T_LESS : '<' ; +T_LESSEQUAL : '<=' ; +T_MUL : '*' ; +T_OPEN_B : '{' ; +T_OPEN_P : '(' ; +T_CLOSE_B : '}' ; +T_CLOSE_P : ')' ; +T_SEMICOLON : ';' ; +T_SUB : '-' ; + +P_e : '-e' ; +P_f : '-f' ; +P_hiveconf : '-hiveconf' ; +P_i : '-i' ; +P_S : '-S' ; +P_h : '-h' ; + +L_ID : L_ID_PART (L_BLANK* '.' L_BLANK* L_ID_PART)* // Identifier + ; +L_S_STRING : '\'' (('\'' '\'') | ('\\' '\'') | ~('\''))* '\'' // Single quoted string literal + ; +L_D_STRING : '"' (L_STR_ESC_D | .)*? '"' // Double quoted string literal + ; +L_INT : L_DIGIT+ ; // Integer +L_DEC : L_DIGIT+ '.' ~'.' L_DIGIT* // Decimal number + | '.' L_DIGIT+ + ; +L_WS : L_BLANK+ -> skip ; // Whitespace +L_M_COMMENT : '/*' .*? '*/' -> channel(HIDDEN) ; // Multiline comment +L_S_COMMENT : ('--' | '//') .*? '\r'? '\n' -> channel(HIDDEN) ; // Single line comment + +L_FILE : '/'? L_ID ('/' L_ID)* // File path + | ([a-zA-Z] ':' '\\'?)? L_ID ('\\' L_ID)* + ; + +L_LABEL : ([a-zA-Z] | L_DIGIT | '_')* ':' + ; + +fragment +L_ID_PART : + [a-zA-Z] ([a-zA-Z] | L_DIGIT | '_')* // Identifier part + | ('_' | '@' | ':' | '#' | '$') ([a-zA-Z] | L_DIGIT | '_' | '@' | ':' | '#' | '$')+ // (at least one char must follow special char) + | '"' .*? '"' // Quoted identifiers + | '[' .*? ']' + | '`' .*? '`' + ; +fragment +L_STR_ESC_D : // Double quoted string escape sequence + '""' | '\\"' + ; +fragment +L_DIGIT : [0-9] // Digit + ; +fragment +L_BLANK : (' ' | '\t' | '\r' | '\n') + ; + +// Support case-insensitive keywords and allowing case-sensitive identifiers +fragment A : ('a'|'A') ; +fragment B : ('b'|'B') ; +fragment C : ('c'|'C') ; +fragment D : ('d'|'D') ; +fragment E : ('e'|'E') ; +fragment F : ('f'|'F') ; +fragment G : ('g'|'G') ; +fragment H : ('h'|'H') ; +fragment I : ('i'|'I') ; +fragment J : ('j'|'J') ; +fragment K : ('k'|'K') ; +fragment L : ('l'|'L') ; +fragment M : ('m'|'M') ; +fragment N : ('n'|'N') ; +fragment O : ('o'|'O') ; +fragment P : ('p'|'P') ; +fragment Q : ('q'|'Q') ; +fragment R : ('r'|'R') ; +fragment S : ('s'|'S') ; +fragment T : ('t'|'T') ; +fragment U : ('u'|'U') ; +fragment V : ('v'|'V') ; +fragment W : ('w'|'W') ; +fragment X : ('x'|'X') ; +fragment Y : ('y'|'Y') ; +fragment Z : ('z'|'Z') ; diff --git hplsql/src/main/java/org/apache/hive/hplsql/Hplsql.tokens hplsql/src/main/java/org/apache/hive/hplsql/Hplsql.tokens new file mode 100644 index 0000000..31d8b6e --- /dev/null +++ hplsql/src/main/java/org/apache/hive/hplsql/Hplsql.tokens @@ -0,0 +1,294 @@ +T__0=1 +T__1=2 +T__2=3 +T__3=4 +T_ALL=5 +T_ALTER=6 +T_AND=7 +T_AS=8 +T_ASC=9 +T_AT=10 +T_AVG=11 +T_BATCHSIZE=12 +T_BEGIN=13 +T_BETWEEN=14 +T_BIGINT=15 +T_BREAK=16 +T_BY=17 +T_CALL=18 +T_CALLER=19 +T_CASE=20 +T_CASESPECIFIC=21 +T_CAST=22 +T_CHAR=23 +T_CHARACTER=24 +T_CLIENT=25 +T_CLOSE=26 +T_COLLECTION=27 +T_COPY=28 +T_COMMIT=29 +T_CONCAT=30 +T_CONDITION=31 +T_CONSTRAINT=32 +T_CONTINUE=33 +T_COUNT=34 +T_COUNT_BIG=35 +T_CREATE=36 +T_CREATOR=37 +T_CS=38 +T_CURRENT=39 +T_CURSOR=40 +T_DATE=41 +T_DAY=42 +T_DAYS=43 +T_DEC=44 +T_DECIMAL=45 +T_DECLARE=46 +T_DEFAULT=47 +T_DEFINED=48 +T_DEFINER=49 +T_DELETE=50 +T_DELIMITED=51 +T_DELIMITER=52 +T_DESC=53 +T_DIAGNOSTICS=54 +T_DISTINCT=55 +T_DISTRIBUTE=56 +T_DO=57 +T_DROP=58 +T_DYNAMIC=59 +T_ELSE=60 +T_ELSEIF=61 +T_ELSIF=62 +T_END=63 +T_ESCAPED=64 +T_EXCEPT=65 +T_EXEC=66 +T_EXECUTE=67 +T_EXCEPTION=68 +T_EXISTS=69 +T_EXIT=70 +T_FETCH=71 +T_FIELDS=72 +T_FILE=73 +T_FLOAT=74 +T_FOR=75 +T_FORMAT=76 +T_FOUND=77 +T_FROM=78 +T_FULL=79 +T_FUNCTION=80 +T_GET=81 +T_GLOBAL=82 +T_GRANT=83 +T_GROUP=84 +T_HANDLER=85 +T_HASH=86 +T_HAVING=87 +T_HIVE=88 +T_HOST=89 +T_IF=90 +T_IGNORE=91 +T_IMMEDIATE=92 +T_IN=93 +T_INCLUDE=94 +T_INDEX=95 +T_INNER=96 +T_INOUT=97 +T_INSERT=98 +T_INT=99 +T_INTEGER=100 +T_INTERSECT=101 +T_INTO=102 +T_INVOKER=103 +T_IS=104 +T_ITEMS=105 +T_JOIN=106 +T_KEY=107 +T_KEYS=108 +T_LANGUAGE=109 +T_LEAVE=110 +T_LEFT=111 +T_LIKE=112 +T_LIMIT=113 +T_LINES=114 +T_LOCAL=115 +T_LOGGED=116 +T_LOOP=117 +T_MAP=118 +T_MATCHED=119 +T_MAX=120 +T_MERGE=121 +T_MESSAGE_TEXT=122 +T_MICROSECOND=123 +T_MICROSECONDS=124 +T_MIN=125 +T_MULTISET=126 +T_NOT=127 +T_NULL=128 +T_NUMBER=129 +T_OBJECT=130 +T_ON=131 +T_ONLY=132 +T_OPEN=133 +T_OR=134 +T_ORDER=135 +T_OUT=136 +T_OUTER=137 +T_OVER=138 +T_OVERWRITE=139 +T_OWNER=140 +T_PARTITION=141 +T_PRESERVE=142 +T_PRIMARY=143 +T_PRINT=144 +T_PROC=145 +T_PROCEDURE=146 +T_REGEXP=147 +T_REPLACE=148 +T_RESIGNAL=149 +T_RESULT=150 +T_RETURN=151 +T_RETURNS=152 +T_REVERSE=153 +T_RIGHT=154 +T_RLIKE=155 +T_ROLLBACK=156 +T_ROW=157 +T_ROWS=158 +T_ROW_COUNT=159 +T_RR=160 +T_RS=161 +T_TRIM=162 +T_SECURITY=163 +T_SEL=164 +T_SELECT=165 +T_SET=166 +T_SETS=167 +T_SIGNAL=168 +T_SMALLINT=169 +T_SQL=170 +T_SQLEXCEPTION=171 +T_SQLINSERT=172 +T_SQLSTATE=173 +T_SQLWARNING=174 +T_STEP=175 +T_STRING=176 +T_SUBSTRING=177 +T_SUM=178 +T_TABLE=179 +T_TEMPORARY=180 +T_TERMINATED=181 +T_THEN=182 +T_TIMESTAMP=183 +T_TITLE=184 +T_TO=185 +T_TOP=186 +T_UNION=187 +T_UNIQUE=188 +T_UPDATE=189 +T_UR=190 +T_USE=191 +T_USING=192 +T_VALUE=193 +T_VALUES=194 +T_VAR=195 +T_VARCHAR=196 +T_VARCHAR2=197 +T_VOLATILE=198 +T_WHEN=199 +T_WHERE=200 +T_WHILE=201 +T_WITH=202 +T_WITHOUT=203 +T_WORK=204 +T_ACTIVITY_COUNT=205 +T_CURRENT_DATE=206 +T_CURRENT_TIMESTAMP=207 +T_CURRENT_USER=208 +T_DENSE_RANK=209 +T_FIRST_VALUE=210 +T_LAG=211 +T_LAST_VALUE=212 +T_LEAD=213 +T_MAX_PART_STRING=214 +T_MIN_PART_STRING=215 +T_MAX_PART_INT=216 +T_MIN_PART_INT=217 +T_MAX_PART_DATE=218 +T_MIN_PART_DATE=219 +T_PART_LOC=220 +T_RANK=221 +T_ROW_NUMBER=222 +T_STDEV=223 +T_SYSDATE=224 +T_VARIANCE=225 +T_USER=226 +T_ADD=227 +T_COLON=228 +T_COMMA=229 +T_PIPE=230 +T_DIV=231 +T_DOT2=232 +T_EQUAL=233 +T_EQUAL2=234 +T_NOTEQUAL=235 +T_NOTEQUAL2=236 +T_GREATER=237 +T_GREATEREQUAL=238 +T_LESS=239 +T_LESSEQUAL=240 +T_MUL=241 +T_OPEN_B=242 +T_OPEN_P=243 +T_CLOSE_B=244 +T_CLOSE_P=245 +T_SEMICOLON=246 +T_SUB=247 +P_e=248 +P_f=249 +P_hiveconf=250 +P_i=251 +P_S=252 +P_h=253 +L_ID=254 +L_S_STRING=255 +L_D_STRING=256 +L_INT=257 +L_DEC=258 +L_WS=259 +L_M_COMMENT=260 +L_S_COMMENT=261 +L_FILE=262 +L_LABEL=263 +'@'=1 +'#'=2 +'.'=3 +'!'=4 +'+'=227 +':'=228 +','=229 +'||'=230 +'/'=231 +'..'=232 +'='=233 +'=='=234 +'<>'=235 +'!='=236 +'>'=237 +'>='=238 +'<'=239 +'<='=240 +'*'=241 +'{'=242 +'('=243 +'}'=244 +')'=245 +';'=246 +'-'=247 +'-e'=248 +'-f'=249 +'-hiveconf'=250 +'-i'=251 +'-S'=252 +'-h'=253 diff --git hplsql/src/main/java/org/apache/hive/hplsql/HplsqlBaseVisitor.java hplsql/src/main/java/org/apache/hive/hplsql/HplsqlBaseVisitor.java new file mode 100644 index 0000000..e42b4b0 --- /dev/null +++ hplsql/src/main/java/org/apache/hive/hplsql/HplsqlBaseVisitor.java @@ -0,0 +1,1214 @@ +// Generated from ..\src\main\java\org\apache\hive\hplsql\Hplsql.q by ANTLR 4.5 + +package org.apache.hive.hplsql; + +import org.antlr.v4.runtime.misc.NotNull; +import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor; + +/** + * This class provides an empty implementation of {@link HplsqlVisitor}, + * which can be extended to create a visitor which only needs to handle a subset + * of the available methods. + * + * @param The return type of the visit operation. Use {@link Void} for + * operations with no return type. + */ +public class HplsqlBaseVisitor extends AbstractParseTreeVisitor implements HplsqlVisitor { + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitProgram(HplsqlParser.ProgramContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitBlock(HplsqlParser.BlockContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitBegin_end_block(HplsqlParser.Begin_end_blockContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSingle_block_stmt(HplsqlParser.Single_block_stmtContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitStmt(HplsqlParser.StmtContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSemicolon_stmt(HplsqlParser.Semicolon_stmtContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitException_block(HplsqlParser.Exception_blockContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitException_block_item(HplsqlParser.Exception_block_itemContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitExpr_stmt(HplsqlParser.Expr_stmtContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAssignment_stmt(HplsqlParser.Assignment_stmtContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAssignment_stmt_item(HplsqlParser.Assignment_stmt_itemContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAssignment_stmt_single_item(HplsqlParser.Assignment_stmt_single_itemContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAssignment_stmt_multiple_item(HplsqlParser.Assignment_stmt_multiple_itemContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAssignment_stmt_select_item(HplsqlParser.Assignment_stmt_select_itemContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitBreak_stmt(HplsqlParser.Break_stmtContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCall_stmt(HplsqlParser.Call_stmtContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDeclare_stmt(HplsqlParser.Declare_stmtContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDeclare_block(HplsqlParser.Declare_blockContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDeclare_stmt_item(HplsqlParser.Declare_stmt_itemContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDeclare_var_item(HplsqlParser.Declare_var_itemContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDeclare_condition_item(HplsqlParser.Declare_condition_itemContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDeclare_cursor_item(HplsqlParser.Declare_cursor_itemContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDeclare_cursor_return(HplsqlParser.Declare_cursor_returnContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDeclare_handler_item(HplsqlParser.Declare_handler_itemContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDeclare_temporary_table_item(HplsqlParser.Declare_temporary_table_itemContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCreate_table_stmt(HplsqlParser.Create_table_stmtContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCreate_local_temp_table_stmt(HplsqlParser.Create_local_temp_table_stmtContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCreate_table_columns(HplsqlParser.Create_table_columnsContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCreate_table_columns_item(HplsqlParser.Create_table_columns_itemContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCreate_table_column_inline_cons(HplsqlParser.Create_table_column_inline_consContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCreate_table_column_cons(HplsqlParser.Create_table_column_consContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCreate_table_options(HplsqlParser.Create_table_optionsContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCreate_table_options_item(HplsqlParser.Create_table_options_itemContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCreate_table_options_db2_item(HplsqlParser.Create_table_options_db2_itemContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCreate_table_options_hive_item(HplsqlParser.Create_table_options_hive_itemContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCreate_table_hive_row_format(HplsqlParser.Create_table_hive_row_formatContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCreate_table_hive_row_format_fields(HplsqlParser.Create_table_hive_row_format_fieldsContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDtype(HplsqlParser.DtypeContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDtype_len(HplsqlParser.Dtype_lenContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDtype_attr(HplsqlParser.Dtype_attrContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDtype_default(HplsqlParser.Dtype_defaultContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCreate_function_stmt(HplsqlParser.Create_function_stmtContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCreate_function_return(HplsqlParser.Create_function_returnContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCreate_procedure_stmt(HplsqlParser.Create_procedure_stmtContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCreate_routine_params(HplsqlParser.Create_routine_paramsContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCreate_routine_param_item(HplsqlParser.Create_routine_param_itemContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCreate_routine_options(HplsqlParser.Create_routine_optionsContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCreate_routine_option(HplsqlParser.Create_routine_optionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDrop_stmt(HplsqlParser.Drop_stmtContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitExec_stmt(HplsqlParser.Exec_stmtContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitIf_stmt(HplsqlParser.If_stmtContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitIf_plsql_stmt(HplsqlParser.If_plsql_stmtContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitIf_tsql_stmt(HplsqlParser.If_tsql_stmtContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitElseif_block(HplsqlParser.Elseif_blockContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitElse_block(HplsqlParser.Else_blockContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitInclude_stmt(HplsqlParser.Include_stmtContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitInsert_stmt(HplsqlParser.Insert_stmtContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitInsert_stmt_cols(HplsqlParser.Insert_stmt_colsContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitInsert_stmt_rows(HplsqlParser.Insert_stmt_rowsContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitInsert_stmt_row(HplsqlParser.Insert_stmt_rowContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitExit_stmt(HplsqlParser.Exit_stmtContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitGet_diag_stmt(HplsqlParser.Get_diag_stmtContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitGet_diag_stmt_item(HplsqlParser.Get_diag_stmt_itemContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitGet_diag_stmt_exception_item(HplsqlParser.Get_diag_stmt_exception_itemContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitGet_diag_stmt_rowcount_item(HplsqlParser.Get_diag_stmt_rowcount_itemContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitGrant_stmt(HplsqlParser.Grant_stmtContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitGrant_stmt_item(HplsqlParser.Grant_stmt_itemContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitLeave_stmt(HplsqlParser.Leave_stmtContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitMap_object_stmt(HplsqlParser.Map_object_stmtContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitOpen_stmt(HplsqlParser.Open_stmtContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFetch_stmt(HplsqlParser.Fetch_stmtContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitClose_stmt(HplsqlParser.Close_stmtContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCopy_from_local_stmt(HplsqlParser.Copy_from_local_stmtContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCopy_stmt(HplsqlParser.Copy_stmtContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCopy_source(HplsqlParser.Copy_sourceContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCopy_target(HplsqlParser.Copy_targetContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCopy_option(HplsqlParser.Copy_optionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCopy_file_option(HplsqlParser.Copy_file_optionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCommit_stmt(HplsqlParser.Commit_stmtContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCreate_index_stmt(HplsqlParser.Create_index_stmtContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCreate_index_col(HplsqlParser.Create_index_colContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPrint_stmt(HplsqlParser.Print_stmtContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitResignal_stmt(HplsqlParser.Resignal_stmtContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitReturn_stmt(HplsqlParser.Return_stmtContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitRollback_stmt(HplsqlParser.Rollback_stmtContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSignal_stmt(HplsqlParser.Signal_stmtContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitUse_stmt(HplsqlParser.Use_stmtContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitValues_into_stmt(HplsqlParser.Values_into_stmtContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitWhile_stmt(HplsqlParser.While_stmtContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFor_cursor_stmt(HplsqlParser.For_cursor_stmtContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFor_range_stmt(HplsqlParser.For_range_stmtContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitLabel(HplsqlParser.LabelContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitUsing_clause(HplsqlParser.Using_clauseContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSelect_stmt(HplsqlParser.Select_stmtContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCte_select_stmt(HplsqlParser.Cte_select_stmtContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCte_select_stmt_item(HplsqlParser.Cte_select_stmt_itemContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCte_select_cols(HplsqlParser.Cte_select_colsContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFullselect_stmt(HplsqlParser.Fullselect_stmtContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFullselect_stmt_item(HplsqlParser.Fullselect_stmt_itemContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFullselect_set_clause(HplsqlParser.Fullselect_set_clauseContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSubselect_stmt(HplsqlParser.Subselect_stmtContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSelect_list(HplsqlParser.Select_listContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSelect_list_set(HplsqlParser.Select_list_setContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSelect_list_limit(HplsqlParser.Select_list_limitContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSelect_list_item(HplsqlParser.Select_list_itemContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSelect_list_alias(HplsqlParser.Select_list_aliasContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSelect_list_asterisk(HplsqlParser.Select_list_asteriskContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitInto_clause(HplsqlParser.Into_clauseContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFrom_clause(HplsqlParser.From_clauseContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFrom_table_clause(HplsqlParser.From_table_clauseContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFrom_table_name_clause(HplsqlParser.From_table_name_clauseContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFrom_subselect_clause(HplsqlParser.From_subselect_clauseContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFrom_join_clause(HplsqlParser.From_join_clauseContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFrom_join_type_clause(HplsqlParser.From_join_type_clauseContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFrom_table_values_clause(HplsqlParser.From_table_values_clauseContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFrom_table_values_row(HplsqlParser.From_table_values_rowContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFrom_alias_clause(HplsqlParser.From_alias_clauseContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTable_name(HplsqlParser.Table_nameContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitWhere_clause(HplsqlParser.Where_clauseContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitGroup_by_clause(HplsqlParser.Group_by_clauseContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitHaving_clause(HplsqlParser.Having_clauseContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitOrder_by_clause(HplsqlParser.Order_by_clauseContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSelect_options(HplsqlParser.Select_optionsContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSelect_options_item(HplsqlParser.Select_options_itemContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitUpdate_stmt(HplsqlParser.Update_stmtContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitUpdate_table(HplsqlParser.Update_tableContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitUpdate_upsert(HplsqlParser.Update_upsertContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitMerge_stmt(HplsqlParser.Merge_stmtContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitMerge_table(HplsqlParser.Merge_tableContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitMerge_condition(HplsqlParser.Merge_conditionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitMerge_action(HplsqlParser.Merge_actionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDelete_stmt(HplsqlParser.Delete_stmtContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitBool_expr(HplsqlParser.Bool_exprContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitBool_expr_atom(HplsqlParser.Bool_expr_atomContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitBool_expr_unary(HplsqlParser.Bool_expr_unaryContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitBool_expr_single_in(HplsqlParser.Bool_expr_single_inContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitBool_expr_multi_in(HplsqlParser.Bool_expr_multi_inContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitBool_expr_binary(HplsqlParser.Bool_expr_binaryContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitBool_expr_logical_operator(HplsqlParser.Bool_expr_logical_operatorContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitBool_expr_binary_operator(HplsqlParser.Bool_expr_binary_operatorContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitExpr(HplsqlParser.ExprContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitExpr_atom(HplsqlParser.Expr_atomContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitInterval_item(HplsqlParser.Interval_itemContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitInterval_number(HplsqlParser.Interval_numberContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitExpr_concat(HplsqlParser.Expr_concatContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitExpr_concat_item(HplsqlParser.Expr_concat_itemContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitExpr_case(HplsqlParser.Expr_caseContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitExpr_case_simple(HplsqlParser.Expr_case_simpleContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitExpr_case_searched(HplsqlParser.Expr_case_searchedContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitExpr_agg_window_func(HplsqlParser.Expr_agg_window_funcContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitExpr_func_all_distinct(HplsqlParser.Expr_func_all_distinctContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitExpr_func_over_clause(HplsqlParser.Expr_func_over_clauseContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitExpr_func_partition_by_clause(HplsqlParser.Expr_func_partition_by_clauseContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitExpr_spec_func(HplsqlParser.Expr_spec_funcContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitExpr_func(HplsqlParser.Expr_funcContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitExpr_func_params(HplsqlParser.Expr_func_paramsContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitHive(HplsqlParser.HiveContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitHive_item(HplsqlParser.Hive_itemContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitHost(HplsqlParser.HostContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitHost_cmd(HplsqlParser.Host_cmdContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitHost_stmt(HplsqlParser.Host_stmtContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFile_name(HplsqlParser.File_nameContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDate_literal(HplsqlParser.Date_literalContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTimestamp_literal(HplsqlParser.Timestamp_literalContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitIdent(HplsqlParser.IdentContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSingle_quotedString(HplsqlParser.Single_quotedStringContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDouble_quotedString(HplsqlParser.Double_quotedStringContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitInt_number(HplsqlParser.Int_numberContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDec_number(HplsqlParser.Dec_numberContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitNull_const(HplsqlParser.Null_constContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitNon_reserved_words(HplsqlParser.Non_reserved_wordsContext ctx) { return visitChildren(ctx); } +} \ No newline at end of file diff --git hplsql/src/main/java/org/apache/hive/hplsql/HplsqlLexer.java hplsql/src/main/java/org/apache/hive/hplsql/HplsqlLexer.java new file mode 100644 index 0000000..5cf5b61 --- /dev/null +++ hplsql/src/main/java/org/apache/hive/hplsql/HplsqlLexer.java @@ -0,0 +1,1341 @@ +// Generated from ..\src\main\java\org\apache\hive\hplsql\Hplsql.q by ANTLR 4.5 + +package org.apache.hive.hplsql; + +import org.antlr.v4.runtime.Lexer; +import org.antlr.v4.runtime.CharStream; +import org.antlr.v4.runtime.Token; +import org.antlr.v4.runtime.TokenStream; +import org.antlr.v4.runtime.*; +import org.antlr.v4.runtime.atn.*; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.misc.*; + +@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"}) +public class HplsqlLexer extends Lexer { + static { RuntimeMetaData.checkVersion("4.5", RuntimeMetaData.VERSION); } + + protected static final DFA[] _decisionToDFA; + protected static final PredictionContextCache _sharedContextCache = + new PredictionContextCache(); + public static final int + T__0=1, T__1=2, T__2=3, T__3=4, T_ALL=5, T_ALTER=6, T_AND=7, T_AS=8, T_ASC=9, + T_AT=10, T_AVG=11, T_BATCHSIZE=12, T_BEGIN=13, T_BETWEEN=14, T_BIGINT=15, + T_BREAK=16, T_BY=17, T_CALL=18, T_CALLER=19, T_CASE=20, T_CASESPECIFIC=21, + T_CAST=22, T_CHAR=23, T_CHARACTER=24, T_CLIENT=25, T_CLOSE=26, T_COLLECTION=27, + T_COPY=28, T_COMMIT=29, T_CONCAT=30, T_CONDITION=31, T_CONSTRAINT=32, + T_CONTINUE=33, T_COUNT=34, T_COUNT_BIG=35, T_CREATE=36, T_CREATOR=37, + T_CS=38, T_CURRENT=39, T_CURSOR=40, T_DATE=41, T_DAY=42, T_DAYS=43, T_DEC=44, + T_DECIMAL=45, T_DECLARE=46, T_DEFAULT=47, T_DEFINED=48, T_DEFINER=49, + T_DELETE=50, T_DELIMITED=51, T_DELIMITER=52, T_DESC=53, T_DIAGNOSTICS=54, + T_DISTINCT=55, T_DISTRIBUTE=56, T_DO=57, T_DROP=58, T_DYNAMIC=59, T_ELSE=60, + T_ELSEIF=61, T_ELSIF=62, T_END=63, T_ESCAPED=64, T_EXCEPT=65, T_EXEC=66, + T_EXECUTE=67, T_EXCEPTION=68, T_EXISTS=69, T_EXIT=70, T_FETCH=71, T_FIELDS=72, + T_FILE=73, T_FLOAT=74, T_FOR=75, T_FORMAT=76, T_FOUND=77, T_FROM=78, T_FULL=79, + T_FUNCTION=80, T_GET=81, T_GLOBAL=82, T_GRANT=83, T_GROUP=84, T_HANDLER=85, + T_HASH=86, T_HAVING=87, T_HIVE=88, T_HOST=89, T_IF=90, T_IGNORE=91, T_IMMEDIATE=92, + T_IN=93, T_INCLUDE=94, T_INDEX=95, T_INNER=96, T_INOUT=97, T_INSERT=98, + T_INT=99, T_INTEGER=100, T_INTERSECT=101, T_INTO=102, T_INVOKER=103, T_IS=104, + T_ITEMS=105, T_JOIN=106, T_KEY=107, T_KEYS=108, T_LANGUAGE=109, T_LEAVE=110, + T_LEFT=111, T_LIKE=112, T_LIMIT=113, T_LINES=114, T_LOCAL=115, T_LOGGED=116, + T_LOOP=117, T_MAP=118, T_MATCHED=119, T_MAX=120, T_MERGE=121, T_MESSAGE_TEXT=122, + T_MICROSECOND=123, T_MICROSECONDS=124, T_MIN=125, T_MULTISET=126, T_NOT=127, + T_NULL=128, T_NUMBER=129, T_OBJECT=130, T_ON=131, T_ONLY=132, T_OPEN=133, + T_OR=134, T_ORDER=135, T_OUT=136, T_OUTER=137, T_OVER=138, T_OVERWRITE=139, + T_OWNER=140, T_PARTITION=141, T_PRESERVE=142, T_PRIMARY=143, T_PRINT=144, + T_PROC=145, T_PROCEDURE=146, T_REGEXP=147, T_REPLACE=148, T_RESIGNAL=149, + T_RESULT=150, T_RETURN=151, T_RETURNS=152, T_REVERSE=153, T_RIGHT=154, + T_RLIKE=155, T_ROLLBACK=156, T_ROW=157, T_ROWS=158, T_ROW_COUNT=159, T_RR=160, + T_RS=161, T_TRIM=162, T_SECURITY=163, T_SEL=164, T_SELECT=165, T_SET=166, + T_SETS=167, T_SIGNAL=168, T_SMALLINT=169, T_SQL=170, T_SQLEXCEPTION=171, + T_SQLINSERT=172, T_SQLSTATE=173, T_SQLWARNING=174, T_STEP=175, T_STRING=176, + T_SUBSTRING=177, T_SUM=178, T_TABLE=179, T_TEMPORARY=180, T_TERMINATED=181, + T_THEN=182, T_TIMESTAMP=183, T_TITLE=184, T_TO=185, T_TOP=186, T_UNION=187, + T_UNIQUE=188, T_UPDATE=189, T_UR=190, T_USE=191, T_USING=192, T_VALUE=193, + T_VALUES=194, T_VAR=195, T_VARCHAR=196, T_VARCHAR2=197, T_VOLATILE=198, + T_WHEN=199, T_WHERE=200, T_WHILE=201, T_WITH=202, T_WITHOUT=203, T_WORK=204, + T_ACTIVITY_COUNT=205, T_CURRENT_DATE=206, T_CURRENT_TIMESTAMP=207, T_CURRENT_USER=208, + T_DENSE_RANK=209, T_FIRST_VALUE=210, T_LAG=211, T_LAST_VALUE=212, T_LEAD=213, + T_MAX_PART_STRING=214, T_MIN_PART_STRING=215, T_MAX_PART_INT=216, T_MIN_PART_INT=217, + T_MAX_PART_DATE=218, T_MIN_PART_DATE=219, T_PART_LOC=220, T_RANK=221, + T_ROW_NUMBER=222, T_STDEV=223, T_SYSDATE=224, T_VARIANCE=225, T_USER=226, + T_ADD=227, T_COLON=228, T_COMMA=229, T_PIPE=230, T_DIV=231, T_DOT2=232, + T_EQUAL=233, T_EQUAL2=234, T_NOTEQUAL=235, T_NOTEQUAL2=236, T_GREATER=237, + T_GREATEREQUAL=238, T_LESS=239, T_LESSEQUAL=240, T_MUL=241, T_OPEN_B=242, + T_OPEN_P=243, T_CLOSE_B=244, T_CLOSE_P=245, T_SEMICOLON=246, T_SUB=247, + P_e=248, P_f=249, P_hiveconf=250, P_i=251, P_S=252, P_h=253, L_ID=254, + L_S_STRING=255, L_D_STRING=256, L_INT=257, L_DEC=258, L_WS=259, L_M_COMMENT=260, + L_S_COMMENT=261, L_FILE=262, L_LABEL=263; + public static String[] modeNames = { + "DEFAULT_MODE" + }; + + public static final String[] ruleNames = { + "T__0", "T__1", "T__2", "T__3", "T_ALL", "T_ALTER", "T_AND", "T_AS", "T_ASC", + "T_AT", "T_AVG", "T_BATCHSIZE", "T_BEGIN", "T_BETWEEN", "T_BIGINT", "T_BREAK", + "T_BY", "T_CALL", "T_CALLER", "T_CASE", "T_CASESPECIFIC", "T_CAST", "T_CHAR", + "T_CHARACTER", "T_CLIENT", "T_CLOSE", "T_COLLECTION", "T_COPY", "T_COMMIT", + "T_CONCAT", "T_CONDITION", "T_CONSTRAINT", "T_CONTINUE", "T_COUNT", "T_COUNT_BIG", + "T_CREATE", "T_CREATOR", "T_CS", "T_CURRENT", "T_CURSOR", "T_DATE", "T_DAY", + "T_DAYS", "T_DEC", "T_DECIMAL", "T_DECLARE", "T_DEFAULT", "T_DEFINED", + "T_DEFINER", "T_DELETE", "T_DELIMITED", "T_DELIMITER", "T_DESC", "T_DIAGNOSTICS", + "T_DISTINCT", "T_DISTRIBUTE", "T_DO", "T_DROP", "T_DYNAMIC", "T_ELSE", + "T_ELSEIF", "T_ELSIF", "T_END", "T_ESCAPED", "T_EXCEPT", "T_EXEC", "T_EXECUTE", + "T_EXCEPTION", "T_EXISTS", "T_EXIT", "T_FETCH", "T_FIELDS", "T_FILE", + "T_FLOAT", "T_FOR", "T_FORMAT", "T_FOUND", "T_FROM", "T_FULL", "T_FUNCTION", + "T_GET", "T_GLOBAL", "T_GRANT", "T_GROUP", "T_HANDLER", "T_HASH", "T_HAVING", + "T_HIVE", "T_HOST", "T_IF", "T_IGNORE", "T_IMMEDIATE", "T_IN", "T_INCLUDE", + "T_INDEX", "T_INNER", "T_INOUT", "T_INSERT", "T_INT", "T_INTEGER", "T_INTERSECT", + "T_INTO", "T_INVOKER", "T_IS", "T_ITEMS", "T_JOIN", "T_KEY", "T_KEYS", + "T_LANGUAGE", "T_LEAVE", "T_LEFT", "T_LIKE", "T_LIMIT", "T_LINES", "T_LOCAL", + "T_LOGGED", "T_LOOP", "T_MAP", "T_MATCHED", "T_MAX", "T_MERGE", "T_MESSAGE_TEXT", + "T_MICROSECOND", "T_MICROSECONDS", "T_MIN", "T_MULTISET", "T_NOT", "T_NULL", + "T_NUMBER", "T_OBJECT", "T_ON", "T_ONLY", "T_OPEN", "T_OR", "T_ORDER", + "T_OUT", "T_OUTER", "T_OVER", "T_OVERWRITE", "T_OWNER", "T_PARTITION", + "T_PRESERVE", "T_PRIMARY", "T_PRINT", "T_PROC", "T_PROCEDURE", "T_REGEXP", + "T_REPLACE", "T_RESIGNAL", "T_RESULT", "T_RETURN", "T_RETURNS", "T_REVERSE", + "T_RIGHT", "T_RLIKE", "T_ROLLBACK", "T_ROW", "T_ROWS", "T_ROW_COUNT", + "T_RR", "T_RS", "T_TRIM", "T_SECURITY", "T_SEL", "T_SELECT", "T_SET", + "T_SETS", "T_SIGNAL", "T_SMALLINT", "T_SQL", "T_SQLEXCEPTION", "T_SQLINSERT", + "T_SQLSTATE", "T_SQLWARNING", "T_STEP", "T_STRING", "T_SUBSTRING", "T_SUM", + "T_TABLE", "T_TEMPORARY", "T_TERMINATED", "T_THEN", "T_TIMESTAMP", "T_TITLE", + "T_TO", "T_TOP", "T_UNION", "T_UNIQUE", "T_UPDATE", "T_UR", "T_USE", "T_USING", + "T_VALUE", "T_VALUES", "T_VAR", "T_VARCHAR", "T_VARCHAR2", "T_VOLATILE", + "T_WHEN", "T_WHERE", "T_WHILE", "T_WITH", "T_WITHOUT", "T_WORK", "T_ACTIVITY_COUNT", + "T_CURRENT_DATE", "T_CURRENT_TIMESTAMP", "T_CURRENT_USER", "T_DENSE_RANK", + "T_FIRST_VALUE", "T_LAG", "T_LAST_VALUE", "T_LEAD", "T_MAX_PART_STRING", + "T_MIN_PART_STRING", "T_MAX_PART_INT", "T_MIN_PART_INT", "T_MAX_PART_DATE", + "T_MIN_PART_DATE", "T_PART_LOC", "T_RANK", "T_ROW_NUMBER", "T_STDEV", + "T_SYSDATE", "T_VARIANCE", "T_USER", "T_ADD", "T_COLON", "T_COMMA", "T_PIPE", + "T_DIV", "T_DOT2", "T_EQUAL", "T_EQUAL2", "T_NOTEQUAL", "T_NOTEQUAL2", + "T_GREATER", "T_GREATEREQUAL", "T_LESS", "T_LESSEQUAL", "T_MUL", "T_OPEN_B", + "T_OPEN_P", "T_CLOSE_B", "T_CLOSE_P", "T_SEMICOLON", "T_SUB", "P_e", "P_f", + "P_hiveconf", "P_i", "P_S", "P_h", "L_ID", "L_S_STRING", "L_D_STRING", + "L_INT", "L_DEC", "L_WS", "L_M_COMMENT", "L_S_COMMENT", "L_FILE", "L_LABEL", + "L_ID_PART", "L_STR_ESC_D", "L_DIGIT", "L_BLANK", "A", "B", "C", "D", + "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", + "S", "T", "U", "V", "W", "X", "Y", "Z" + }; + + private static final String[] _LITERAL_NAMES = { + null, "'@'", "'#'", "'.'", "'!'", null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + "'+'", "':'", "','", "'||'", "'/'", "'..'", "'='", "'=='", "'<>'", "'!='", + "'>'", "'>='", "'<'", "'<='", "'*'", "'{'", "'('", "'}'", "')'", "';'", + "'-'", "'-e'", "'-f'", "'-hiveconf'", "'-i'", "'-S'", "'-h'" + }; + private static final String[] _SYMBOLIC_NAMES = { + null, null, null, null, null, "T_ALL", "T_ALTER", "T_AND", "T_AS", "T_ASC", + "T_AT", "T_AVG", "T_BATCHSIZE", "T_BEGIN", "T_BETWEEN", "T_BIGINT", "T_BREAK", + "T_BY", "T_CALL", "T_CALLER", "T_CASE", "T_CASESPECIFIC", "T_CAST", "T_CHAR", + "T_CHARACTER", "T_CLIENT", "T_CLOSE", "T_COLLECTION", "T_COPY", "T_COMMIT", + "T_CONCAT", "T_CONDITION", "T_CONSTRAINT", "T_CONTINUE", "T_COUNT", "T_COUNT_BIG", + "T_CREATE", "T_CREATOR", "T_CS", "T_CURRENT", "T_CURSOR", "T_DATE", "T_DAY", + "T_DAYS", "T_DEC", "T_DECIMAL", "T_DECLARE", "T_DEFAULT", "T_DEFINED", + "T_DEFINER", "T_DELETE", "T_DELIMITED", "T_DELIMITER", "T_DESC", "T_DIAGNOSTICS", + "T_DISTINCT", "T_DISTRIBUTE", "T_DO", "T_DROP", "T_DYNAMIC", "T_ELSE", + "T_ELSEIF", "T_ELSIF", "T_END", "T_ESCAPED", "T_EXCEPT", "T_EXEC", "T_EXECUTE", + "T_EXCEPTION", "T_EXISTS", "T_EXIT", "T_FETCH", "T_FIELDS", "T_FILE", + "T_FLOAT", "T_FOR", "T_FORMAT", "T_FOUND", "T_FROM", "T_FULL", "T_FUNCTION", + "T_GET", "T_GLOBAL", "T_GRANT", "T_GROUP", "T_HANDLER", "T_HASH", "T_HAVING", + "T_HIVE", "T_HOST", "T_IF", "T_IGNORE", "T_IMMEDIATE", "T_IN", "T_INCLUDE", + "T_INDEX", "T_INNER", "T_INOUT", "T_INSERT", "T_INT", "T_INTEGER", "T_INTERSECT", + "T_INTO", "T_INVOKER", "T_IS", "T_ITEMS", "T_JOIN", "T_KEY", "T_KEYS", + "T_LANGUAGE", "T_LEAVE", "T_LEFT", "T_LIKE", "T_LIMIT", "T_LINES", "T_LOCAL", + "T_LOGGED", "T_LOOP", "T_MAP", "T_MATCHED", "T_MAX", "T_MERGE", "T_MESSAGE_TEXT", + "T_MICROSECOND", "T_MICROSECONDS", "T_MIN", "T_MULTISET", "T_NOT", "T_NULL", + "T_NUMBER", "T_OBJECT", "T_ON", "T_ONLY", "T_OPEN", "T_OR", "T_ORDER", + "T_OUT", "T_OUTER", "T_OVER", "T_OVERWRITE", "T_OWNER", "T_PARTITION", + "T_PRESERVE", "T_PRIMARY", "T_PRINT", "T_PROC", "T_PROCEDURE", "T_REGEXP", + "T_REPLACE", "T_RESIGNAL", "T_RESULT", "T_RETURN", "T_RETURNS", "T_REVERSE", + "T_RIGHT", "T_RLIKE", "T_ROLLBACK", "T_ROW", "T_ROWS", "T_ROW_COUNT", + "T_RR", "T_RS", "T_TRIM", "T_SECURITY", "T_SEL", "T_SELECT", "T_SET", + "T_SETS", "T_SIGNAL", "T_SMALLINT", "T_SQL", "T_SQLEXCEPTION", "T_SQLINSERT", + "T_SQLSTATE", "T_SQLWARNING", "T_STEP", "T_STRING", "T_SUBSTRING", "T_SUM", + "T_TABLE", "T_TEMPORARY", "T_TERMINATED", "T_THEN", "T_TIMESTAMP", "T_TITLE", + "T_TO", "T_TOP", "T_UNION", "T_UNIQUE", "T_UPDATE", "T_UR", "T_USE", "T_USING", + "T_VALUE", "T_VALUES", "T_VAR", "T_VARCHAR", "T_VARCHAR2", "T_VOLATILE", + "T_WHEN", "T_WHERE", "T_WHILE", "T_WITH", "T_WITHOUT", "T_WORK", "T_ACTIVITY_COUNT", + "T_CURRENT_DATE", "T_CURRENT_TIMESTAMP", "T_CURRENT_USER", "T_DENSE_RANK", + "T_FIRST_VALUE", "T_LAG", "T_LAST_VALUE", "T_LEAD", "T_MAX_PART_STRING", + "T_MIN_PART_STRING", "T_MAX_PART_INT", "T_MIN_PART_INT", "T_MAX_PART_DATE", + "T_MIN_PART_DATE", "T_PART_LOC", "T_RANK", "T_ROW_NUMBER", "T_STDEV", + "T_SYSDATE", "T_VARIANCE", "T_USER", "T_ADD", "T_COLON", "T_COMMA", "T_PIPE", + "T_DIV", "T_DOT2", "T_EQUAL", "T_EQUAL2", "T_NOTEQUAL", "T_NOTEQUAL2", + "T_GREATER", "T_GREATEREQUAL", "T_LESS", "T_LESSEQUAL", "T_MUL", "T_OPEN_B", + "T_OPEN_P", "T_CLOSE_B", "T_CLOSE_P", "T_SEMICOLON", "T_SUB", "P_e", "P_f", + "P_hiveconf", "P_i", "P_S", "P_h", "L_ID", "L_S_STRING", "L_D_STRING", + "L_INT", "L_DEC", "L_WS", "L_M_COMMENT", "L_S_COMMENT", "L_FILE", "L_LABEL" + }; + public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); + + /** + * @deprecated Use {@link #VOCABULARY} instead. + */ + @Deprecated + public static final String[] tokenNames; + static { + tokenNames = new String[_SYMBOLIC_NAMES.length]; + for (int i = 0; i < tokenNames.length; i++) { + tokenNames[i] = VOCABULARY.getLiteralName(i); + if (tokenNames[i] == null) { + tokenNames[i] = VOCABULARY.getSymbolicName(i); + } + + if (tokenNames[i] == null) { + tokenNames[i] = ""; + } + } + } + + @Override + @Deprecated + public String[] getTokenNames() { + return tokenNames; + } + + @Override + + public Vocabulary getVocabulary() { + return VOCABULARY; + } + + + public HplsqlLexer(CharStream input) { + super(input); + _interp = new LexerATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache); + } + + @Override + public String getGrammarFileName() { return "Hplsql.q"; } + + @Override + public String[] getRuleNames() { return ruleNames; } + + @Override + public String getSerializedATN() { return _serializedATN; } + + @Override + public String[] getModeNames() { return modeNames; } + + @Override + public ATN getATN() { return _ATN; } + + public static final String _serializedATN = + "\3\u0430\ud6d1\u8206\uad2d\u4417\uaef1\u8d80\uaadd\2\u0109\u09b2\b\1\4"+ + "\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n"+ + "\4\13\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22"+ + "\t\22\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31"+ + "\t\31\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\4\37\t\37\4 \t"+ + " \4!\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t"+ + "+\4,\t,\4-\t-\4.\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64"+ + "\t\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:\4;\t;\4<\t<\4=\t"+ + "=\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\tC\4D\tD\4E\tE\4F\tF\4G\tG\4H\tH\4"+ + "I\tI\4J\tJ\4K\tK\4L\tL\4M\tM\4N\tN\4O\tO\4P\tP\4Q\tQ\4R\tR\4S\tS\4T\t"+ + "T\4U\tU\4V\tV\4W\tW\4X\tX\4Y\tY\4Z\tZ\4[\t[\4\\\t\\\4]\t]\4^\t^\4_\t_"+ + "\4`\t`\4a\ta\4b\tb\4c\tc\4d\td\4e\te\4f\tf\4g\tg\4h\th\4i\ti\4j\tj\4k"+ + "\tk\4l\tl\4m\tm\4n\tn\4o\to\4p\tp\4q\tq\4r\tr\4s\ts\4t\tt\4u\tu\4v\tv"+ + "\4w\tw\4x\tx\4y\ty\4z\tz\4{\t{\4|\t|\4}\t}\4~\t~\4\177\t\177\4\u0080\t"+ + "\u0080\4\u0081\t\u0081\4\u0082\t\u0082\4\u0083\t\u0083\4\u0084\t\u0084"+ + "\4\u0085\t\u0085\4\u0086\t\u0086\4\u0087\t\u0087\4\u0088\t\u0088\4\u0089"+ + "\t\u0089\4\u008a\t\u008a\4\u008b\t\u008b\4\u008c\t\u008c\4\u008d\t\u008d"+ + "\4\u008e\t\u008e\4\u008f\t\u008f\4\u0090\t\u0090\4\u0091\t\u0091\4\u0092"+ + "\t\u0092\4\u0093\t\u0093\4\u0094\t\u0094\4\u0095\t\u0095\4\u0096\t\u0096"+ + "\4\u0097\t\u0097\4\u0098\t\u0098\4\u0099\t\u0099\4\u009a\t\u009a\4\u009b"+ + "\t\u009b\4\u009c\t\u009c\4\u009d\t\u009d\4\u009e\t\u009e\4\u009f\t\u009f"+ + "\4\u00a0\t\u00a0\4\u00a1\t\u00a1\4\u00a2\t\u00a2\4\u00a3\t\u00a3\4\u00a4"+ + "\t\u00a4\4\u00a5\t\u00a5\4\u00a6\t\u00a6\4\u00a7\t\u00a7\4\u00a8\t\u00a8"+ + "\4\u00a9\t\u00a9\4\u00aa\t\u00aa\4\u00ab\t\u00ab\4\u00ac\t\u00ac\4\u00ad"+ + "\t\u00ad\4\u00ae\t\u00ae\4\u00af\t\u00af\4\u00b0\t\u00b0\4\u00b1\t\u00b1"+ + "\4\u00b2\t\u00b2\4\u00b3\t\u00b3\4\u00b4\t\u00b4\4\u00b5\t\u00b5\4\u00b6"+ + "\t\u00b6\4\u00b7\t\u00b7\4\u00b8\t\u00b8\4\u00b9\t\u00b9\4\u00ba\t\u00ba"+ + "\4\u00bb\t\u00bb\4\u00bc\t\u00bc\4\u00bd\t\u00bd\4\u00be\t\u00be\4\u00bf"+ + "\t\u00bf\4\u00c0\t\u00c0\4\u00c1\t\u00c1\4\u00c2\t\u00c2\4\u00c3\t\u00c3"+ + "\4\u00c4\t\u00c4\4\u00c5\t\u00c5\4\u00c6\t\u00c6\4\u00c7\t\u00c7\4\u00c8"+ + "\t\u00c8\4\u00c9\t\u00c9\4\u00ca\t\u00ca\4\u00cb\t\u00cb\4\u00cc\t\u00cc"+ + "\4\u00cd\t\u00cd\4\u00ce\t\u00ce\4\u00cf\t\u00cf\4\u00d0\t\u00d0\4\u00d1"+ + "\t\u00d1\4\u00d2\t\u00d2\4\u00d3\t\u00d3\4\u00d4\t\u00d4\4\u00d5\t\u00d5"+ + "\4\u00d6\t\u00d6\4\u00d7\t\u00d7\4\u00d8\t\u00d8\4\u00d9\t\u00d9\4\u00da"+ + "\t\u00da\4\u00db\t\u00db\4\u00dc\t\u00dc\4\u00dd\t\u00dd\4\u00de\t\u00de"+ + "\4\u00df\t\u00df\4\u00e0\t\u00e0\4\u00e1\t\u00e1\4\u00e2\t\u00e2\4\u00e3"+ + "\t\u00e3\4\u00e4\t\u00e4\4\u00e5\t\u00e5\4\u00e6\t\u00e6\4\u00e7\t\u00e7"+ + "\4\u00e8\t\u00e8\4\u00e9\t\u00e9\4\u00ea\t\u00ea\4\u00eb\t\u00eb\4\u00ec"+ + "\t\u00ec\4\u00ed\t\u00ed\4\u00ee\t\u00ee\4\u00ef\t\u00ef\4\u00f0\t\u00f0"+ + "\4\u00f1\t\u00f1\4\u00f2\t\u00f2\4\u00f3\t\u00f3\4\u00f4\t\u00f4\4\u00f5"+ + "\t\u00f5\4\u00f6\t\u00f6\4\u00f7\t\u00f7\4\u00f8\t\u00f8\4\u00f9\t\u00f9"+ + "\4\u00fa\t\u00fa\4\u00fb\t\u00fb\4\u00fc\t\u00fc\4\u00fd\t\u00fd\4\u00fe"+ + "\t\u00fe\4\u00ff\t\u00ff\4\u0100\t\u0100\4\u0101\t\u0101\4\u0102\t\u0102"+ + "\4\u0103\t\u0103\4\u0104\t\u0104\4\u0105\t\u0105\4\u0106\t\u0106\4\u0107"+ + "\t\u0107\4\u0108\t\u0108\4\u0109\t\u0109\4\u010a\t\u010a\4\u010b\t\u010b"+ + "\4\u010c\t\u010c\4\u010d\t\u010d\4\u010e\t\u010e\4\u010f\t\u010f\4\u0110"+ + "\t\u0110\4\u0111\t\u0111\4\u0112\t\u0112\4\u0113\t\u0113\4\u0114\t\u0114"+ + "\4\u0115\t\u0115\4\u0116\t\u0116\4\u0117\t\u0117\4\u0118\t\u0118\4\u0119"+ + "\t\u0119\4\u011a\t\u011a\4\u011b\t\u011b\4\u011c\t\u011c\4\u011d\t\u011d"+ + "\4\u011e\t\u011e\4\u011f\t\u011f\4\u0120\t\u0120\4\u0121\t\u0121\4\u0122"+ + "\t\u0122\4\u0123\t\u0123\4\u0124\t\u0124\4\u0125\t\u0125\4\u0126\t\u0126"+ + "\3\2\3\2\3\3\3\3\3\4\3\4\3\5\3\5\3\6\3\6\3\6\3\6\3\7\3\7\3\7\3\7\3\7\3"+ + "\7\3\b\3\b\3\b\3\b\3\t\3\t\3\t\3\n\3\n\3\n\3\n\3\13\3\13\3\13\3\f\3\f"+ + "\3\f\3\f\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\16\3\16\3\16\3\16\3"+ + "\16\3\16\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\20\3\20\3\20\3\20\3"+ + "\20\3\20\3\20\3\21\3\21\3\21\3\21\3\21\3\21\3\22\3\22\3\22\3\23\3\23\3"+ + "\23\3\23\3\23\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\25\3\25\3\25\3\25\3"+ + "\25\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3"+ + "\27\3\27\3\27\3\27\3\27\3\30\3\30\3\30\3\30\3\30\3\31\3\31\3\31\3\31\3"+ + "\31\3\31\3\31\3\31\3\31\3\31\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3\33\3"+ + "\33\3\33\3\33\3\33\3\33\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3"+ + "\34\3\34\3\35\3\35\3\35\3\35\3\35\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3"+ + "\37\3\37\3\37\3\37\3\37\3\37\3\37\3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3!\3!"+ + "\3!\3!\3!\3!\3!\3!\3!\3!\3!\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3#\3#"+ + "\3#\3#\3#\3#\3$\3$\3$\3$\3$\3$\3$\3$\3$\3$\3%\3%\3%\3%\3%\3%\3%\3&\3&"+ + "\3&\3&\3&\3&\3&\3&\3\'\3\'\3\'\3(\3(\3(\3(\3(\3(\3(\3(\3)\3)\3)\3)\3)"+ + "\3)\3)\3*\3*\3*\3*\3*\3+\3+\3+\3+\3,\3,\3,\3,\3,\3-\3-\3-\3-\3.\3.\3."+ + "\3.\3.\3.\3.\3.\3/\3/\3/\3/\3/\3/\3/\3/\3\60\3\60\3\60\3\60\3\60\3\60"+ + "\3\60\3\60\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\62\3\62\3\62\3\62"+ + "\3\62\3\62\3\62\3\62\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\64\3\64\3\64"+ + "\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\65\3\65\3\65\3\65\3\65\3\65\3\65"+ + "\3\65\3\65\3\65\3\66\3\66\3\66\3\66\3\66\3\67\3\67\3\67\3\67\3\67\3\67"+ + "\3\67\3\67\3\67\3\67\3\67\3\67\38\38\38\38\38\38\38\38\38\39\39\39\39"+ + "\39\39\39\39\39\39\39\3:\3:\3:\3;\3;\3;\3;\3;\3<\3<\3<\3<\3<\3<\3<\3<"+ + "\3=\3=\3=\3=\3=\3>\3>\3>\3>\3>\3>\3>\3?\3?\3?\3?\3?\3?\3@\3@\3@\3@\3A"+ + "\3A\3A\3A\3A\3A\3A\3A\3B\3B\3B\3B\3B\3B\3B\3C\3C\3C\3C\3C\3D\3D\3D\3D"+ + "\3D\3D\3D\3D\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3F\3F\3F\3F\3F\3F\3F\3G\3G"+ + "\3G\3G\3G\3H\3H\3H\3H\3H\3H\3I\3I\3I\3I\3I\3I\3I\3J\3J\3J\3J\3J\3K\3K"+ + "\3K\3K\3K\3K\3L\3L\3L\3L\3M\3M\3M\3M\3M\3M\3M\3N\3N\3N\3N\3N\3N\3O\3O"+ + "\3O\3O\3O\3P\3P\3P\3P\3P\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3R\3R\3R\3R\3S\3S"+ + "\3S\3S\3S\3S\3S\3T\3T\3T\3T\3T\3T\3U\3U\3U\3U\3U\3U\3V\3V\3V\3V\3V\3V"+ + "\3V\3V\3W\3W\3W\3W\3W\3X\3X\3X\3X\3X\3X\3X\3Y\3Y\3Y\3Y\3Y\3Z\3Z\3Z\3Z"+ + "\3Z\3[\3[\3[\3\\\3\\\3\\\3\\\3\\\3\\\3\\\3]\3]\3]\3]\3]\3]\3]\3]\3]\3"+ + "]\3^\3^\3^\3_\3_\3_\3_\3_\3_\3_\3_\3`\3`\3`\3`\3`\3`\3a\3a\3a\3a\3a\3"+ + "a\3b\3b\3b\3b\3b\3b\3c\3c\3c\3c\3c\3c\3c\3d\3d\3d\3d\3e\3e\3e\3e\3e\3"+ + "e\3e\3e\3f\3f\3f\3f\3f\3f\3f\3f\3f\3f\3g\3g\3g\3g\3g\3h\3h\3h\3h\3h\3"+ + "h\3h\3h\3i\3i\3i\3j\3j\3j\3j\3j\3j\3k\3k\3k\3k\3k\3l\3l\3l\3l\3m\3m\3"+ + "m\3m\3m\3n\3n\3n\3n\3n\3n\3n\3n\3n\3o\3o\3o\3o\3o\3o\3p\3p\3p\3p\3p\3"+ + "q\3q\3q\3q\3q\3r\3r\3r\3r\3r\3r\3s\3s\3s\3s\3s\3s\3t\3t\3t\3t\3t\3t\3"+ + "u\3u\3u\3u\3u\3u\3u\3v\3v\3v\3v\3v\3w\3w\3w\3w\3x\3x\3x\3x\3x\3x\3x\3"+ + "x\3y\3y\3y\3y\3z\3z\3z\3z\3z\3z\3{\3{\3{\3{\3{\3{\3{\3{\3{\3{\3{\3{\3"+ + "{\3|\3|\3|\3|\3|\3|\3|\3|\3|\3|\3|\3|\3}\3}\3}\3}\3}\3}\3}\3}\3}\3}\3"+ + "}\3}\3}\3~\3~\3~\3~\3\177\3\177\3\177\3\177\3\177\3\177\3\177\3\177\3"+ + "\177\3\u0080\3\u0080\3\u0080\3\u0080\3\u0081\3\u0081\3\u0081\3\u0081\3"+ + "\u0081\3\u0082\3\u0082\3\u0082\3\u0082\3\u0082\3\u0082\3\u0082\3\u0083"+ + "\3\u0083\3\u0083\3\u0083\3\u0083\3\u0083\3\u0083\3\u0084\3\u0084\3\u0084"+ + "\3\u0085\3\u0085\3\u0085\3\u0085\3\u0085\3\u0086\3\u0086\3\u0086\3\u0086"+ + "\3\u0086\3\u0087\3\u0087\3\u0087\3\u0088\3\u0088\3\u0088\3\u0088\3\u0088"+ + "\3\u0088\3\u0089\3\u0089\3\u0089\3\u0089\3\u008a\3\u008a\3\u008a\3\u008a"+ + "\3\u008a\3\u008a\3\u008b\3\u008b\3\u008b\3\u008b\3\u008b\3\u008c\3\u008c"+ + "\3\u008c\3\u008c\3\u008c\3\u008c\3\u008c\3\u008c\3\u008c\3\u008c\3\u008d"+ + "\3\u008d\3\u008d\3\u008d\3\u008d\3\u008d\3\u008e\3\u008e\3\u008e\3\u008e"+ + "\3\u008e\3\u008e\3\u008e\3\u008e\3\u008e\3\u008e\3\u008f\3\u008f\3\u008f"+ + "\3\u008f\3\u008f\3\u008f\3\u008f\3\u008f\3\u008f\3\u0090\3\u0090\3\u0090"+ + "\3\u0090\3\u0090\3\u0090\3\u0090\3\u0090\3\u0091\3\u0091\3\u0091\3\u0091"+ + "\3\u0091\3\u0091\3\u0092\3\u0092\3\u0092\3\u0092\3\u0092\3\u0093\3\u0093"+ + "\3\u0093\3\u0093\3\u0093\3\u0093\3\u0093\3\u0093\3\u0093\3\u0093\3\u0094"+ + "\3\u0094\3\u0094\3\u0094\3\u0094\3\u0094\3\u0094\3\u0095\3\u0095\3\u0095"+ + "\3\u0095\3\u0095\3\u0095\3\u0095\3\u0095\3\u0096\3\u0096\3\u0096\3\u0096"+ + "\3\u0096\3\u0096\3\u0096\3\u0096\3\u0096\3\u0097\3\u0097\3\u0097\3\u0097"+ + "\3\u0097\3\u0097\3\u0097\3\u0098\3\u0098\3\u0098\3\u0098\3\u0098\3\u0098"+ + "\3\u0098\3\u0099\3\u0099\3\u0099\3\u0099\3\u0099\3\u0099\3\u0099\3\u0099"+ + "\3\u009a\3\u009a\3\u009a\3\u009a\3\u009a\3\u009a\3\u009a\3\u009a\3\u009b"+ + "\3\u009b\3\u009b\3\u009b\3\u009b\3\u009b\3\u009c\3\u009c\3\u009c\3\u009c"+ + "\3\u009c\3\u009c\3\u009d\3\u009d\3\u009d\3\u009d\3\u009d\3\u009d\3\u009d"+ + "\3\u009d\3\u009d\3\u009e\3\u009e\3\u009e\3\u009e\3\u009f\3\u009f\3\u009f"+ + "\3\u009f\3\u009f\3\u00a0\3\u00a0\3\u00a0\3\u00a0\3\u00a0\3\u00a0\3\u00a0"+ + "\3\u00a0\3\u00a0\3\u00a0\3\u00a1\3\u00a1\3\u00a1\3\u00a2\3\u00a2\3\u00a2"+ + "\3\u00a3\3\u00a3\3\u00a3\3\u00a3\3\u00a3\3\u00a4\3\u00a4\3\u00a4\3\u00a4"+ + "\3\u00a4\3\u00a4\3\u00a4\3\u00a4\3\u00a4\3\u00a5\3\u00a5\3\u00a5\3\u00a5"+ + "\3\u00a6\3\u00a6\3\u00a6\3\u00a6\3\u00a6\3\u00a6\3\u00a6\3\u00a7\3\u00a7"+ + "\3\u00a7\3\u00a7\3\u00a8\3\u00a8\3\u00a8\3\u00a8\3\u00a8\3\u00a9\3\u00a9"+ + "\3\u00a9\3\u00a9\3\u00a9\3\u00a9\3\u00a9\3\u00aa\3\u00aa\3\u00aa\3\u00aa"+ + "\3\u00aa\3\u00aa\3\u00aa\3\u00aa\3\u00aa\3\u00ab\3\u00ab\3\u00ab\3\u00ab"+ + "\3\u00ac\3\u00ac\3\u00ac\3\u00ac\3\u00ac\3\u00ac\3\u00ac\3\u00ac\3\u00ac"+ + "\3\u00ac\3\u00ac\3\u00ac\3\u00ac\3\u00ad\3\u00ad\3\u00ad\3\u00ad\3\u00ad"+ + "\3\u00ad\3\u00ad\3\u00ad\3\u00ad\3\u00ad\3\u00ae\3\u00ae\3\u00ae\3\u00ae"+ + "\3\u00ae\3\u00ae\3\u00ae\3\u00ae\3\u00ae\3\u00af\3\u00af\3\u00af\3\u00af"+ + "\3\u00af\3\u00af\3\u00af\3\u00af\3\u00af\3\u00af\3\u00af\3\u00b0\3\u00b0"+ + "\3\u00b0\3\u00b0\3\u00b0\3\u00b1\3\u00b1\3\u00b1\3\u00b1\3\u00b1\3\u00b1"+ + "\3\u00b1\3\u00b2\3\u00b2\3\u00b2\3\u00b2\3\u00b2\3\u00b2\3\u00b2\3\u00b2"+ + "\3\u00b2\3\u00b2\3\u00b3\3\u00b3\3\u00b3\3\u00b3\3\u00b4\3\u00b4\3\u00b4"+ + "\3\u00b4\3\u00b4\3\u00b4\3\u00b5\3\u00b5\3\u00b5\3\u00b5\3\u00b5\3\u00b5"+ + "\3\u00b5\3\u00b5\3\u00b5\3\u00b5\3\u00b6\3\u00b6\3\u00b6\3\u00b6\3\u00b6"+ + "\3\u00b6\3\u00b6\3\u00b6\3\u00b6\3\u00b6\3\u00b6\3\u00b7\3\u00b7\3\u00b7"+ + "\3\u00b7\3\u00b7\3\u00b8\3\u00b8\3\u00b8\3\u00b8\3\u00b8\3\u00b8\3\u00b8"+ + "\3\u00b8\3\u00b8\3\u00b8\3\u00b9\3\u00b9\3\u00b9\3\u00b9\3\u00b9\3\u00b9"+ + "\3\u00ba\3\u00ba\3\u00ba\3\u00bb\3\u00bb\3\u00bb\3\u00bb\3\u00bc\3\u00bc"+ + "\3\u00bc\3\u00bc\3\u00bc\3\u00bc\3\u00bd\3\u00bd\3\u00bd\3\u00bd\3\u00bd"+ + "\3\u00bd\3\u00bd\3\u00be\3\u00be\3\u00be\3\u00be\3\u00be\3\u00be\3\u00be"+ + "\3\u00bf\3\u00bf\3\u00bf\3\u00c0\3\u00c0\3\u00c0\3\u00c0\3\u00c1\3\u00c1"+ + "\3\u00c1\3\u00c1\3\u00c1\3\u00c1\3\u00c2\3\u00c2\3\u00c2\3\u00c2\3\u00c2"+ + "\3\u00c2\3\u00c3\3\u00c3\3\u00c3\3\u00c3\3\u00c3\3\u00c3\3\u00c3\3\u00c4"+ + "\3\u00c4\3\u00c4\3\u00c4\3\u00c5\3\u00c5\3\u00c5\3\u00c5\3\u00c5\3\u00c5"+ + "\3\u00c5\3\u00c5\3\u00c6\3\u00c6\3\u00c6\3\u00c6\3\u00c6\3\u00c6\3\u00c6"+ + "\3\u00c6\3\u00c6\3\u00c7\3\u00c7\3\u00c7\3\u00c7\3\u00c7\3\u00c7\3\u00c7"+ + "\3\u00c7\3\u00c7\3\u00c8\3\u00c8\3\u00c8\3\u00c8\3\u00c8\3\u00c9\3\u00c9"+ + "\3\u00c9\3\u00c9\3\u00c9\3\u00c9\3\u00ca\3\u00ca\3\u00ca\3\u00ca\3\u00ca"+ + "\3\u00ca\3\u00cb\3\u00cb\3\u00cb\3\u00cb\3\u00cb\3\u00cc\3\u00cc\3\u00cc"+ + "\3\u00cc\3\u00cc\3\u00cc\3\u00cc\3\u00cc\3\u00cd\3\u00cd\3\u00cd\3\u00cd"+ + "\3\u00cd\3\u00ce\3\u00ce\3\u00ce\3\u00ce\3\u00ce\3\u00ce\3\u00ce\3\u00ce"+ + "\3\u00ce\3\u00ce\3\u00ce\3\u00ce\3\u00ce\3\u00ce\3\u00ce\3\u00cf\3\u00cf"+ + "\3\u00cf\3\u00cf\3\u00cf\3\u00cf\3\u00cf\3\u00cf\3\u00cf\3\u00cf\3\u00cf"+ + "\3\u00cf\3\u00cf\3\u00d0\3\u00d0\3\u00d0\3\u00d0\3\u00d0\3\u00d0\3\u00d0"+ + "\3\u00d0\3\u00d0\3\u00d0\3\u00d0\3\u00d0\3\u00d0\3\u00d0\3\u00d0\3\u00d0"+ + "\3\u00d0\3\u00d0\3\u00d1\3\u00d1\3\u00d1\3\u00d1\3\u00d1\3\u00d1\3\u00d1"+ + "\3\u00d1\3\u00d1\3\u00d1\3\u00d1\3\u00d1\3\u00d1\3\u00d2\3\u00d2\3\u00d2"+ + "\3\u00d2\3\u00d2\3\u00d2\3\u00d2\3\u00d2\3\u00d2\3\u00d2\3\u00d2\3\u00d3"+ + "\3\u00d3\3\u00d3\3\u00d3\3\u00d3\3\u00d3\3\u00d3\3\u00d3\3\u00d3\3\u00d3"+ + "\3\u00d3\3\u00d3\3\u00d4\3\u00d4\3\u00d4\3\u00d4\3\u00d5\3\u00d5\3\u00d5"+ + "\3\u00d5\3\u00d5\3\u00d5\3\u00d5\3\u00d5\3\u00d5\3\u00d5\3\u00d5\3\u00d6"+ + "\3\u00d6\3\u00d6\3\u00d6\3\u00d6\3\u00d7\3\u00d7\3\u00d7\3\u00d7\3\u00d7"+ + "\3\u00d7\3\u00d7\3\u00d7\3\u00d7\3\u00d7\3\u00d7\3\u00d7\3\u00d7\3\u00d7"+ + "\3\u00d7\3\u00d7\3\u00d8\3\u00d8\3\u00d8\3\u00d8\3\u00d8\3\u00d8\3\u00d8"+ + "\3\u00d8\3\u00d8\3\u00d8\3\u00d8\3\u00d8\3\u00d8\3\u00d8\3\u00d8\3\u00d8"+ + "\3\u00d9\3\u00d9\3\u00d9\3\u00d9\3\u00d9\3\u00d9\3\u00d9\3\u00d9\3\u00d9"+ + "\3\u00d9\3\u00d9\3\u00d9\3\u00d9\3\u00da\3\u00da\3\u00da\3\u00da\3\u00da"+ + "\3\u00da\3\u00da\3\u00da\3\u00da\3\u00da\3\u00da\3\u00da\3\u00da\3\u00db"+ + "\3\u00db\3\u00db\3\u00db\3\u00db\3\u00db\3\u00db\3\u00db\3\u00db\3\u00db"+ + "\3\u00db\3\u00db\3\u00db\3\u00db\3\u00dc\3\u00dc\3\u00dc\3\u00dc\3\u00dc"+ + "\3\u00dc\3\u00dc\3\u00dc\3\u00dc\3\u00dc\3\u00dc\3\u00dc\3\u00dc\3\u00dc"+ + "\3\u00dd\3\u00dd\3\u00dd\3\u00dd\3\u00dd\3\u00dd\3\u00dd\3\u00dd\3\u00dd"+ + "\3\u00de\3\u00de\3\u00de\3\u00de\3\u00de\3\u00df\3\u00df\3\u00df\3\u00df"+ + "\3\u00df\3\u00df\3\u00df\3\u00df\3\u00df\3\u00df\3\u00df\3\u00e0\3\u00e0"+ + "\3\u00e0\3\u00e0\3\u00e0\3\u00e0\3\u00e1\3\u00e1\3\u00e1\3\u00e1\3\u00e1"+ + "\3\u00e1\3\u00e1\3\u00e1\3\u00e2\3\u00e2\3\u00e2\3\u00e2\3\u00e2\3\u00e2"+ + "\3\u00e2\3\u00e2\3\u00e2\3\u00e3\3\u00e3\3\u00e3\3\u00e3\3\u00e3\3\u00e4"+ + "\3\u00e4\3\u00e5\3\u00e5\3\u00e6\3\u00e6\3\u00e7\3\u00e7\3\u00e7\3\u00e8"+ + "\3\u00e8\3\u00e9\3\u00e9\3\u00e9\3\u00ea\3\u00ea\3\u00eb\3\u00eb\3\u00eb"+ + "\3\u00ec\3\u00ec\3\u00ec\3\u00ed\3\u00ed\3\u00ed\3\u00ee\3\u00ee\3\u00ef"+ + "\3\u00ef\3\u00ef\3\u00f0\3\u00f0\3\u00f1\3\u00f1\3\u00f1\3\u00f2\3\u00f2"+ + "\3\u00f3\3\u00f3\3\u00f4\3\u00f4\3\u00f5\3\u00f5\3\u00f6\3\u00f6\3\u00f7"+ + "\3\u00f7\3\u00f8\3\u00f8\3\u00f9\3\u00f9\3\u00f9\3\u00fa\3\u00fa\3\u00fa"+ + "\3\u00fb\3\u00fb\3\u00fb\3\u00fb\3\u00fb\3\u00fb\3\u00fb\3\u00fb\3\u00fb"+ + "\3\u00fb\3\u00fc\3\u00fc\3\u00fc\3\u00fd\3\u00fd\3\u00fd\3\u00fe\3\u00fe"+ + "\3\u00fe\3\u00ff\3\u00ff\7\u00ff\u08b9\n\u00ff\f\u00ff\16\u00ff\u08bc"+ + "\13\u00ff\3\u00ff\3\u00ff\7\u00ff\u08c0\n\u00ff\f\u00ff\16\u00ff\u08c3"+ + "\13\u00ff\3\u00ff\7\u00ff\u08c6\n\u00ff\f\u00ff\16\u00ff\u08c9\13\u00ff"+ + "\3\u0100\3\u0100\3\u0100\3\u0100\3\u0100\3\u0100\7\u0100\u08d1\n\u0100"+ + "\f\u0100\16\u0100\u08d4\13\u0100\3\u0100\3\u0100\3\u0101\3\u0101\3\u0101"+ + "\7\u0101\u08db\n\u0101\f\u0101\16\u0101\u08de\13\u0101\3\u0101\3\u0101"+ + "\3\u0102\6\u0102\u08e3\n\u0102\r\u0102\16\u0102\u08e4\3\u0103\6\u0103"+ + "\u08e8\n\u0103\r\u0103\16\u0103\u08e9\3\u0103\3\u0103\3\u0103\7\u0103"+ + "\u08ef\n\u0103\f\u0103\16\u0103\u08f2\13\u0103\3\u0103\3\u0103\6\u0103"+ + "\u08f6\n\u0103\r\u0103\16\u0103\u08f7\5\u0103\u08fa\n\u0103\3\u0104\6"+ + "\u0104\u08fd\n\u0104\r\u0104\16\u0104\u08fe\3\u0104\3\u0104\3\u0105\3"+ + "\u0105\3\u0105\3\u0105\7\u0105\u0907\n\u0105\f\u0105\16\u0105\u090a\13"+ + "\u0105\3\u0105\3\u0105\3\u0105\3\u0105\3\u0105\3\u0106\3\u0106\3\u0106"+ + "\3\u0106\5\u0106\u0915\n\u0106\3\u0106\7\u0106\u0918\n\u0106\f\u0106\16"+ + "\u0106\u091b\13\u0106\3\u0106\5\u0106\u091e\n\u0106\3\u0106\3\u0106\3"+ + "\u0106\3\u0106\3\u0107\5\u0107\u0925\n\u0107\3\u0107\3\u0107\3\u0107\7"+ + "\u0107\u092a\n\u0107\f\u0107\16\u0107\u092d\13\u0107\3\u0107\3\u0107\3"+ + "\u0107\5\u0107\u0932\n\u0107\5\u0107\u0934\n\u0107\3\u0107\3\u0107\3\u0107"+ + "\7\u0107\u0939\n\u0107\f\u0107\16\u0107\u093c\13\u0107\5\u0107\u093e\n"+ + "\u0107\3\u0108\3\u0108\3\u0108\7\u0108\u0943\n\u0108\f\u0108\16\u0108"+ + "\u0946\13\u0108\3\u0108\3\u0108\3\u0109\3\u0109\3\u0109\3\u0109\7\u0109"+ + "\u094e\n\u0109\f\u0109\16\u0109\u0951\13\u0109\3\u0109\3\u0109\3\u0109"+ + "\3\u0109\6\u0109\u0957\n\u0109\r\u0109\16\u0109\u0958\3\u0109\3\u0109"+ + "\7\u0109\u095d\n\u0109\f\u0109\16\u0109\u0960\13\u0109\3\u0109\3\u0109"+ + "\3\u0109\7\u0109\u0965\n\u0109\f\u0109\16\u0109\u0968\13\u0109\3\u0109"+ + "\3\u0109\3\u0109\7\u0109\u096d\n\u0109\f\u0109\16\u0109\u0970\13\u0109"+ + "\3\u0109\5\u0109\u0973\n\u0109\3\u010a\3\u010a\3\u010a\3\u010a\5\u010a"+ + "\u0979\n\u010a\3\u010b\3\u010b\3\u010c\3\u010c\3\u010d\3\u010d\3\u010e"+ + "\3\u010e\3\u010f\3\u010f\3\u0110\3\u0110\3\u0111\3\u0111\3\u0112\3\u0112"+ + "\3\u0113\3\u0113\3\u0114\3\u0114\3\u0115\3\u0115\3\u0116\3\u0116\3\u0117"+ + "\3\u0117\3\u0118\3\u0118\3\u0119\3\u0119\3\u011a\3\u011a\3\u011b\3\u011b"+ + "\3\u011c\3\u011c\3\u011d\3\u011d\3\u011e\3\u011e\3\u011f\3\u011f\3\u0120"+ + "\3\u0120\3\u0121\3\u0121\3\u0122\3\u0122\3\u0123\3\u0123\3\u0124\3\u0124"+ + "\3\u0125\3\u0125\3\u0126\3\u0126\b\u08dc\u0908\u0919\u095e\u0966\u096e"+ + "\2\u0127\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16\33\17"+ + "\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31\61\32\63\33\65\34\67\35"+ + "9\36;\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g\65i\66"+ + "k\67m8o9q:s;u{?}@\177A\u0081B\u0083C\u0085D\u0087E\u0089F\u008bG"+ + "\u008dH\u008fI\u0091J\u0093K\u0095L\u0097M\u0099N\u009bO\u009dP\u009f"+ + "Q\u00a1R\u00a3S\u00a5T\u00a7U\u00a9V\u00abW\u00adX\u00afY\u00b1Z\u00b3"+ + "[\u00b5\\\u00b7]\u00b9^\u00bb_\u00bd`\u00bfa\u00c1b\u00c3c\u00c5d\u00c7"+ + "e\u00c9f\u00cbg\u00cdh\u00cfi\u00d1j\u00d3k\u00d5l\u00d7m\u00d9n\u00db"+ + "o\u00ddp\u00dfq\u00e1r\u00e3s\u00e5t\u00e7u\u00e9v\u00ebw\u00edx\u00ef"+ + "y\u00f1z\u00f3{\u00f5|\u00f7}\u00f9~\u00fb\177\u00fd\u0080\u00ff\u0081"+ + "\u0101\u0082\u0103\u0083\u0105\u0084\u0107\u0085\u0109\u0086\u010b\u0087"+ + "\u010d\u0088\u010f\u0089\u0111\u008a\u0113\u008b\u0115\u008c\u0117\u008d"+ + "\u0119\u008e\u011b\u008f\u011d\u0090\u011f\u0091\u0121\u0092\u0123\u0093"+ + "\u0125\u0094\u0127\u0095\u0129\u0096\u012b\u0097\u012d\u0098\u012f\u0099"+ + "\u0131\u009a\u0133\u009b\u0135\u009c\u0137\u009d\u0139\u009e\u013b\u009f"+ + "\u013d\u00a0\u013f\u00a1\u0141\u00a2\u0143\u00a3\u0145\u00a4\u0147\u00a5"+ + "\u0149\u00a6\u014b\u00a7\u014d\u00a8\u014f\u00a9\u0151\u00aa\u0153\u00ab"+ + "\u0155\u00ac\u0157\u00ad\u0159\u00ae\u015b\u00af\u015d\u00b0\u015f\u00b1"+ + "\u0161\u00b2\u0163\u00b3\u0165\u00b4\u0167\u00b5\u0169\u00b6\u016b\u00b7"+ + "\u016d\u00b8\u016f\u00b9\u0171\u00ba\u0173\u00bb\u0175\u00bc\u0177\u00bd"+ + "\u0179\u00be\u017b\u00bf\u017d\u00c0\u017f\u00c1\u0181\u00c2\u0183\u00c3"+ + "\u0185\u00c4\u0187\u00c5\u0189\u00c6\u018b\u00c7\u018d\u00c8\u018f\u00c9"+ + "\u0191\u00ca\u0193\u00cb\u0195\u00cc\u0197\u00cd\u0199\u00ce\u019b\u00cf"+ + "\u019d\u00d0\u019f\u00d1\u01a1\u00d2\u01a3\u00d3\u01a5\u00d4\u01a7\u00d5"+ + "\u01a9\u00d6\u01ab\u00d7\u01ad\u00d8\u01af\u00d9\u01b1\u00da\u01b3\u00db"+ + "\u01b5\u00dc\u01b7\u00dd\u01b9\u00de\u01bb\u00df\u01bd\u00e0\u01bf\u00e1"+ + "\u01c1\u00e2\u01c3\u00e3\u01c5\u00e4\u01c7\u00e5\u01c9\u00e6\u01cb\u00e7"+ + "\u01cd\u00e8\u01cf\u00e9\u01d1\u00ea\u01d3\u00eb\u01d5\u00ec\u01d7\u00ed"+ + "\u01d9\u00ee\u01db\u00ef\u01dd\u00f0\u01df\u00f1\u01e1\u00f2\u01e3\u00f3"+ + "\u01e5\u00f4\u01e7\u00f5\u01e9\u00f6\u01eb\u00f7\u01ed\u00f8\u01ef\u00f9"+ + "\u01f1\u00fa\u01f3\u00fb\u01f5\u00fc\u01f7\u00fd\u01f9\u00fe\u01fb\u00ff"+ + "\u01fd\u0100\u01ff\u0101\u0201\u0102\u0203\u0103\u0205\u0104\u0207\u0105"+ + "\u0209\u0106\u020b\u0107\u020d\u0108\u020f\u0109\u0211\2\u0213\2\u0215"+ + "\2\u0217\2\u0219\2\u021b\2\u021d\2\u021f\2\u0221\2\u0223\2\u0225\2\u0227"+ + "\2\u0229\2\u022b\2\u022d\2\u022f\2\u0231\2\u0233\2\u0235\2\u0237\2\u0239"+ + "\2\u023b\2\u023d\2\u023f\2\u0241\2\u0243\2\u0245\2\u0247\2\u0249\2\u024b"+ + "\2\3\2\"\3\2))\3\2\60\60\4\2C\\c|\6\2%&<\3\2"+ + "\2\2\u02f6\u02f7\5\u021d\u010f\2\u02f7\u02f8\5\u0235\u011b\2\u02f8\u02f9"+ + "\5\u0233\u011a\2\u02f9\u02fa\5\u021f\u0110\2\u02fa\u02fb\5\u0229\u0115"+ + "\2\u02fb\u02fc\5\u023f\u0120\2\u02fc\u02fd\5\u0229\u0115\2\u02fd\u02fe"+ + "\5\u0235\u011b\2\u02fe\u02ff\5\u0233\u011a\2\u02ff@\3\2\2\2\u0300\u0301"+ + "\5\u021d\u010f\2\u0301\u0302\5\u0235\u011b\2\u0302\u0303\5\u0233\u011a"+ + "\2\u0303\u0304\5\u023d\u011f\2\u0304\u0305\5\u023f\u0120\2\u0305\u0306"+ + "\5\u023b\u011e\2\u0306\u0307\5\u0219\u010d\2\u0307\u0308\5\u0229\u0115"+ + "\2\u0308\u0309\5\u0233\u011a\2\u0309\u030a\5\u023f\u0120\2\u030aB\3\2"+ + "\2\2\u030b\u030c\5\u021d\u010f\2\u030c\u030d\5\u0235\u011b\2\u030d\u030e"+ + "\5\u0233\u011a\2\u030e\u030f\5\u023f\u0120\2\u030f\u0310\5\u0229\u0115"+ + "\2\u0310\u0311\5\u0233\u011a\2\u0311\u0312\5\u0241\u0121\2\u0312\u0313"+ + "\5\u0221\u0111\2\u0313D\3\2\2\2\u0314\u0315\5\u021d\u010f\2\u0315\u0316"+ + "\5\u0235\u011b\2\u0316\u0317\5\u0241\u0121\2\u0317\u0318\5\u0233\u011a"+ + "\2\u0318\u0319\5\u023f\u0120\2\u0319F\3\2\2\2\u031a\u031b\5\u021d\u010f"+ + "\2\u031b\u031c\5\u0235\u011b\2\u031c\u031d\5\u0241\u0121\2\u031d\u031e"+ + "\5\u0233\u011a\2\u031e\u031f\5\u023f\u0120\2\u031f\u0320\7a\2\2\u0320"+ + "\u0321\5\u021b\u010e\2\u0321\u0322\5\u0229\u0115\2\u0322\u0323\5\u0225"+ + "\u0113\2\u0323H\3\2\2\2\u0324\u0325\5\u021d\u010f\2\u0325\u0326\5\u023b"+ + "\u011e\2\u0326\u0327\5\u0221\u0111\2\u0327\u0328\5\u0219\u010d\2\u0328"+ + "\u0329\5\u023f\u0120\2\u0329\u032a\5\u0221\u0111\2\u032aJ\3\2\2\2\u032b"+ + "\u032c\5\u021d\u010f\2\u032c\u032d\5\u023b\u011e\2\u032d\u032e\5\u0221"+ + "\u0111\2\u032e\u032f\5\u0219\u010d\2\u032f\u0330\5\u023f\u0120\2\u0330"+ + "\u0331\5\u0235\u011b\2\u0331\u0332\5\u023b\u011e\2\u0332L\3\2\2\2\u0333"+ + "\u0334\5\u021d\u010f\2\u0334\u0335\5\u023d\u011f\2\u0335N\3\2\2\2\u0336"+ + "\u0337\5\u021d\u010f\2\u0337\u0338\5\u0241\u0121\2\u0338\u0339\5\u023b"+ + "\u011e\2\u0339\u033a\5\u023b\u011e\2\u033a\u033b\5\u0221\u0111\2\u033b"+ + "\u033c\5\u0233\u011a\2\u033c\u033d\5\u023f\u0120\2\u033dP\3\2\2\2\u033e"+ + "\u033f\5\u021d\u010f\2\u033f\u0340\5\u0241\u0121\2\u0340\u0341\5\u023b"+ + "\u011e\2\u0341\u0342\5\u023d\u011f\2\u0342\u0343\5\u0235\u011b\2\u0343"+ + "\u0344\5\u023b\u011e\2\u0344R\3\2\2\2\u0345\u0346\5\u021f\u0110\2\u0346"+ + "\u0347\5\u0219\u010d\2\u0347\u0348\5\u023f\u0120\2\u0348\u0349\5\u0221"+ + "\u0111\2\u0349T\3\2\2\2\u034a\u034b\5\u021f\u0110\2\u034b\u034c\5\u0219"+ + "\u010d\2\u034c\u034d\5\u0249\u0125\2\u034dV\3\2\2\2\u034e\u034f\5\u021f"+ + "\u0110\2\u034f\u0350\5\u0219\u010d\2\u0350\u0351\5\u0249\u0125\2\u0351"+ + "\u0352\5\u023d\u011f\2\u0352X\3\2\2\2\u0353\u0354\5\u021f\u0110\2\u0354"+ + "\u0355\5\u0221\u0111\2\u0355\u0356\5\u021d\u010f\2\u0356Z\3\2\2\2\u0357"+ + "\u0358\5\u021f\u0110\2\u0358\u0359\5\u0221\u0111\2\u0359\u035a\5\u021d"+ + "\u010f\2\u035a\u035b\5\u0229\u0115\2\u035b\u035c\5\u0231\u0119\2\u035c"+ + "\u035d\5\u0219\u010d\2\u035d\u035e\5\u022f\u0118\2\u035e\\\3\2\2\2\u035f"+ + "\u0360\5\u021f\u0110\2\u0360\u0361\5\u0221\u0111\2\u0361\u0362\5\u021d"+ + "\u010f\2\u0362\u0363\5\u022f\u0118\2\u0363\u0364\5\u0219\u010d\2\u0364"+ + "\u0365\5\u023b\u011e\2\u0365\u0366\5\u0221\u0111\2\u0366^\3\2\2\2\u0367"+ + "\u0368\5\u021f\u0110\2\u0368\u0369\5\u0221\u0111\2\u0369\u036a\5\u0223"+ + "\u0112\2\u036a\u036b\5\u0219\u010d\2\u036b\u036c\5\u0241\u0121\2\u036c"+ + "\u036d\5\u022f\u0118\2\u036d\u036e\5\u023f\u0120\2\u036e`\3\2\2\2\u036f"+ + "\u0370\5\u021f\u0110\2\u0370\u0371\5\u0221\u0111\2\u0371\u0372\5\u0223"+ + "\u0112\2\u0372\u0373\5\u0229\u0115\2\u0373\u0374\5\u0233\u011a\2\u0374"+ + "\u0375\5\u0221\u0111\2\u0375\u0376\5\u021f\u0110\2\u0376b\3\2\2\2\u0377"+ + "\u0378\5\u021f\u0110\2\u0378\u0379\5\u0221\u0111\2\u0379\u037a\5\u0223"+ + "\u0112\2\u037a\u037b\5\u0229\u0115\2\u037b\u037c\5\u0233\u011a\2\u037c"+ + "\u037d\5\u0221\u0111\2\u037d\u037e\5\u023b\u011e\2\u037ed\3\2\2\2\u037f"+ + "\u0380\5\u021f\u0110\2\u0380\u0381\5\u0221\u0111\2\u0381\u0382\5\u022f"+ + "\u0118\2\u0382\u0383\5\u0221\u0111\2\u0383\u0384\5\u023f\u0120\2\u0384"+ + "\u0385\5\u0221\u0111\2\u0385f\3\2\2\2\u0386\u0387\5\u021f\u0110\2\u0387"+ + "\u0388\5\u0221\u0111\2\u0388\u0389\5\u022f\u0118\2\u0389\u038a\5\u0229"+ + "\u0115\2\u038a\u038b\5\u0231\u0119\2\u038b\u038c\5\u0229\u0115\2\u038c"+ + "\u038d\5\u023f\u0120\2\u038d\u038e\5\u0221\u0111\2\u038e\u038f\5\u021f"+ + "\u0110\2\u038fh\3\2\2\2\u0390\u0391\5\u021f\u0110\2\u0391\u0392\5\u0221"+ + "\u0111\2\u0392\u0393\5\u022f\u0118\2\u0393\u0394\5\u0229\u0115\2\u0394"+ + "\u0395\5\u0231\u0119\2\u0395\u0396\5\u0229\u0115\2\u0396\u0397\5\u023f"+ + "\u0120\2\u0397\u0398\5\u0221\u0111\2\u0398\u0399\5\u023b\u011e\2\u0399"+ + "j\3\2\2\2\u039a\u039b\5\u021f\u0110\2\u039b\u039c\5\u0221\u0111\2\u039c"+ + "\u039d\5\u023d\u011f\2\u039d\u039e\5\u021d\u010f\2\u039el\3\2\2\2\u039f"+ + "\u03a0\5\u021f\u0110\2\u03a0\u03a1\5\u0229\u0115\2\u03a1\u03a2\5\u0219"+ + "\u010d\2\u03a2\u03a3\5\u0225\u0113\2\u03a3\u03a4\5\u0233\u011a\2\u03a4"+ + "\u03a5\5\u0235\u011b\2\u03a5\u03a6\5\u023d\u011f\2\u03a6\u03a7\5\u023f"+ + "\u0120\2\u03a7\u03a8\5\u0229\u0115\2\u03a8\u03a9\5\u021d\u010f\2\u03a9"+ + "\u03aa\5\u023d\u011f\2\u03aan\3\2\2\2\u03ab\u03ac\5\u021f\u0110\2\u03ac"+ + "\u03ad\5\u0229\u0115\2\u03ad\u03ae\5\u023d\u011f\2\u03ae\u03af\5\u023f"+ + "\u0120\2\u03af\u03b0\5\u0229\u0115\2\u03b0\u03b1\5\u0233\u011a\2\u03b1"+ + "\u03b2\5\u021d\u010f\2\u03b2\u03b3\5\u023f\u0120\2\u03b3p\3\2\2\2\u03b4"+ + "\u03b5\5\u021f\u0110\2\u03b5\u03b6\5\u0229\u0115\2\u03b6\u03b7\5\u023d"+ + "\u011f\2\u03b7\u03b8\5\u023f\u0120\2\u03b8\u03b9\5\u023b\u011e\2\u03b9"+ + "\u03ba\5\u0229\u0115\2\u03ba\u03bb\5\u021b\u010e\2\u03bb\u03bc\5\u0241"+ + "\u0121\2\u03bc\u03bd\5\u023f\u0120\2\u03bd\u03be\5\u0221\u0111\2\u03be"+ + "r\3\2\2\2\u03bf\u03c0\5\u021f\u0110\2\u03c0\u03c1\5\u0235\u011b\2\u03c1"+ + "t\3\2\2\2\u03c2\u03c3\5\u021f\u0110\2\u03c3\u03c4\5\u023b\u011e\2\u03c4"+ + "\u03c5\5\u0235\u011b\2\u03c5\u03c6\5\u0237\u011c\2\u03c6v\3\2\2\2\u03c7"+ + "\u03c8\5\u021f\u0110\2\u03c8\u03c9\5\u0249\u0125\2\u03c9\u03ca\5\u0233"+ + "\u011a\2\u03ca\u03cb\5\u0219\u010d\2\u03cb\u03cc\5\u0231\u0119\2\u03cc"+ + "\u03cd\5\u0229\u0115\2\u03cd\u03ce\5\u021d\u010f\2\u03cex\3\2\2\2\u03cf"+ + "\u03d0\5\u0221\u0111\2\u03d0\u03d1\5\u022f\u0118\2\u03d1\u03d2\5\u023d"+ + "\u011f\2\u03d2\u03d3\5\u0221\u0111\2\u03d3z\3\2\2\2\u03d4\u03d5\5\u0221"+ + "\u0111\2\u03d5\u03d6\5\u022f\u0118\2\u03d6\u03d7\5\u023d\u011f\2\u03d7"+ + "\u03d8\5\u0221\u0111\2\u03d8\u03d9\5\u0229\u0115\2\u03d9\u03da\5\u0223"+ + "\u0112\2\u03da|\3\2\2\2\u03db\u03dc\5\u0221\u0111\2\u03dc\u03dd\5\u022f"+ + "\u0118\2\u03dd\u03de\5\u023d\u011f\2\u03de\u03df\5\u0229\u0115\2\u03df"+ + "\u03e0\5\u0223\u0112\2\u03e0~\3\2\2\2\u03e1\u03e2\5\u0221\u0111\2\u03e2"+ + "\u03e3\5\u0233\u011a\2\u03e3\u03e4\5\u021f\u0110\2\u03e4\u0080\3\2\2\2"+ + "\u03e5\u03e6\5\u0221\u0111\2\u03e6\u03e7\5\u023d\u011f\2\u03e7\u03e8\5"+ + "\u021d\u010f\2\u03e8\u03e9\5\u0219\u010d\2\u03e9\u03ea\5\u0237\u011c\2"+ + "\u03ea\u03eb\5\u0221\u0111\2\u03eb\u03ec\5\u021f\u0110\2\u03ec\u0082\3"+ + "\2\2\2\u03ed\u03ee\5\u0221\u0111\2\u03ee\u03ef\5\u0247\u0124\2\u03ef\u03f0"+ + "\5\u021d\u010f\2\u03f0\u03f1\5\u0221\u0111\2\u03f1\u03f2\5\u0237\u011c"+ + "\2\u03f2\u03f3\5\u023f\u0120\2\u03f3\u0084\3\2\2\2\u03f4\u03f5\5\u0221"+ + "\u0111\2\u03f5\u03f6\5\u0247\u0124\2\u03f6\u03f7\5\u0221\u0111\2\u03f7"+ + "\u03f8\5\u021d\u010f\2\u03f8\u0086\3\2\2\2\u03f9\u03fa\5\u0221\u0111\2"+ + "\u03fa\u03fb\5\u0247\u0124\2\u03fb\u03fc\5\u0221\u0111\2\u03fc\u03fd\5"+ + "\u021d\u010f\2\u03fd\u03fe\5\u0241\u0121\2\u03fe\u03ff\5\u023f\u0120\2"+ + "\u03ff\u0400\5\u0221\u0111\2\u0400\u0088\3\2\2\2\u0401\u0402\5\u0221\u0111"+ + "\2\u0402\u0403\5\u0247\u0124\2\u0403\u0404\5\u021d\u010f\2\u0404\u0405"+ + "\5\u0221\u0111\2\u0405\u0406\5\u0237\u011c\2\u0406\u0407\5\u023f\u0120"+ + "\2\u0407\u0408\5\u0229\u0115\2\u0408\u0409\5\u0235\u011b\2\u0409\u040a"+ + "\5\u0233\u011a\2\u040a\u008a\3\2\2\2\u040b\u040c\5\u0221\u0111\2\u040c"+ + "\u040d\5\u0247\u0124\2\u040d\u040e\5\u0229\u0115\2\u040e\u040f\5\u023d"+ + "\u011f\2\u040f\u0410\5\u023f\u0120\2\u0410\u0411\5\u023d\u011f\2\u0411"+ + "\u008c\3\2\2\2\u0412\u0413\5\u0221\u0111\2\u0413\u0414\5\u0247\u0124\2"+ + "\u0414\u0415\5\u0229\u0115\2\u0415\u0416\5\u023f\u0120\2\u0416\u008e\3"+ + "\2\2\2\u0417\u0418\5\u0223\u0112\2\u0418\u0419\5\u0221\u0111\2\u0419\u041a"+ + "\5\u023f\u0120\2\u041a\u041b\5\u021d\u010f\2\u041b\u041c\5\u0227\u0114"+ + "\2\u041c\u0090\3\2\2\2\u041d\u041e\5\u0223\u0112\2\u041e\u041f\5\u0229"+ + "\u0115\2\u041f\u0420\5\u0221\u0111\2\u0420\u0421\5\u022f\u0118\2\u0421"+ + "\u0422\5\u021f\u0110\2\u0422\u0423\5\u023d\u011f\2\u0423\u0092\3\2\2\2"+ + "\u0424\u0425\5\u0223\u0112\2\u0425\u0426\5\u0229\u0115\2\u0426\u0427\5"+ + "\u022f\u0118\2\u0427\u0428\5\u0221\u0111\2\u0428\u0094\3\2\2\2\u0429\u042a"+ + "\5\u0223\u0112\2\u042a\u042b\5\u022f\u0118\2\u042b\u042c\5\u0235\u011b"+ + "\2\u042c\u042d\5\u0219\u010d\2\u042d\u042e\5\u023f\u0120\2\u042e\u0096"+ + "\3\2\2\2\u042f\u0430\5\u0223\u0112\2\u0430\u0431\5\u0235\u011b\2\u0431"+ + "\u0432\5\u023b\u011e\2\u0432\u0098\3\2\2\2\u0433\u0434\5\u0223\u0112\2"+ + "\u0434\u0435\5\u0235\u011b\2\u0435\u0436\5\u023b\u011e\2\u0436\u0437\5"+ + "\u0231\u0119\2\u0437\u0438\5\u0219\u010d\2\u0438\u0439\5\u023f\u0120\2"+ + "\u0439\u009a\3\2\2\2\u043a\u043b\5\u0223\u0112\2\u043b\u043c\5\u0235\u011b"+ + "\2\u043c\u043d\5\u0241\u0121\2\u043d\u043e\5\u0233\u011a\2\u043e\u043f"+ + "\5\u021f\u0110\2\u043f\u009c\3\2\2\2\u0440\u0441\5\u0223\u0112\2\u0441"+ + "\u0442\5\u023b\u011e\2\u0442\u0443\5\u0235\u011b\2\u0443\u0444\5\u0231"+ + "\u0119\2\u0444\u009e\3\2\2\2\u0445\u0446\5\u0223\u0112\2\u0446\u0447\5"+ + "\u0241\u0121\2\u0447\u0448\5\u022f\u0118\2\u0448\u0449\5\u022f\u0118\2"+ + "\u0449\u00a0\3\2\2\2\u044a\u044b\5\u0223\u0112\2\u044b\u044c\5\u0241\u0121"+ + "\2\u044c\u044d\5\u0233\u011a\2\u044d\u044e\5\u021d\u010f\2\u044e\u044f"+ + "\5\u023f\u0120\2\u044f\u0450\5\u0229\u0115\2\u0450\u0451\5\u0235\u011b"+ + "\2\u0451\u0452\5\u0233\u011a\2\u0452\u00a2\3\2\2\2\u0453\u0454\5\u0225"+ + "\u0113\2\u0454\u0455\5\u0221\u0111\2\u0455\u0456\5\u023f\u0120\2\u0456"+ + "\u00a4\3\2\2\2\u0457\u0458\5\u0225\u0113\2\u0458\u0459\5\u022f\u0118\2"+ + "\u0459\u045a\5\u0235\u011b\2\u045a\u045b\5\u021b\u010e\2\u045b\u045c\5"+ + "\u0219\u010d\2\u045c\u045d\5\u022f\u0118\2\u045d\u00a6\3\2\2\2\u045e\u045f"+ + "\5\u0225\u0113\2\u045f\u0460\5\u023b\u011e\2\u0460\u0461\5\u0219\u010d"+ + "\2\u0461\u0462\5\u0233\u011a\2\u0462\u0463\5\u023f\u0120\2\u0463\u00a8"+ + "\3\2\2\2\u0464\u0465\5\u0225\u0113\2\u0465\u0466\5\u023b\u011e\2\u0466"+ + "\u0467\5\u0235\u011b\2\u0467\u0468\5\u0241\u0121\2\u0468\u0469\5\u0237"+ + "\u011c\2\u0469\u00aa\3\2\2\2\u046a\u046b\5\u0227\u0114\2\u046b\u046c\5"+ + "\u0219\u010d\2\u046c\u046d\5\u0233\u011a\2\u046d\u046e\5\u021f\u0110\2"+ + "\u046e\u046f\5\u022f\u0118\2\u046f\u0470\5\u0221\u0111\2\u0470\u0471\5"+ + "\u023b\u011e\2\u0471\u00ac\3\2\2\2\u0472\u0473\5\u0227\u0114\2\u0473\u0474"+ + "\5\u0219\u010d\2\u0474\u0475\5\u023d\u011f\2\u0475\u0476\5\u0227\u0114"+ + "\2\u0476\u00ae\3\2\2\2\u0477\u0478\5\u0227\u0114\2\u0478\u0479\5\u0219"+ + "\u010d\2\u0479\u047a\5\u0243\u0122\2\u047a\u047b\5\u0229\u0115\2\u047b"+ + "\u047c\5\u0233\u011a\2\u047c\u047d\5\u0225\u0113\2\u047d\u00b0\3\2\2\2"+ + "\u047e\u047f\5\u0227\u0114\2\u047f\u0480\5\u0229\u0115\2\u0480\u0481\5"+ + "\u0243\u0122\2\u0481\u0482\5\u0221\u0111\2\u0482\u00b2\3\2\2\2\u0483\u0484"+ + "\5\u0227\u0114\2\u0484\u0485\5\u0235\u011b\2\u0485\u0486\5\u023d\u011f"+ + "\2\u0486\u0487\5\u023f\u0120\2\u0487\u00b4\3\2\2\2\u0488\u0489\5\u0229"+ + "\u0115\2\u0489\u048a\5\u0223\u0112\2\u048a\u00b6\3\2\2\2\u048b\u048c\5"+ + "\u0229\u0115\2\u048c\u048d\5\u0225\u0113\2\u048d\u048e\5\u0233\u011a\2"+ + "\u048e\u048f\5\u0235\u011b\2\u048f\u0490\5\u023b\u011e\2\u0490\u0491\5"+ + "\u0221\u0111\2\u0491\u00b8\3\2\2\2\u0492\u0493\5\u0229\u0115\2\u0493\u0494"+ + "\5\u0231\u0119\2\u0494\u0495\5\u0231\u0119\2\u0495\u0496\5\u0221\u0111"+ + "\2\u0496\u0497\5\u021f\u0110\2\u0497\u0498\5\u0229\u0115\2\u0498\u0499"+ + "\5\u0219\u010d\2\u0499\u049a\5\u023f\u0120\2\u049a\u049b\5\u0221\u0111"+ + "\2\u049b\u00ba\3\2\2\2\u049c\u049d\5\u0229\u0115\2\u049d\u049e\5\u0233"+ + "\u011a\2\u049e\u00bc\3\2\2\2\u049f\u04a0\5\u0229\u0115\2\u04a0\u04a1\5"+ + "\u0233\u011a\2\u04a1\u04a2\5\u021d\u010f\2\u04a2\u04a3\5\u022f\u0118\2"+ + "\u04a3\u04a4\5\u0241\u0121\2\u04a4\u04a5\5\u021f\u0110\2\u04a5\u04a6\5"+ + "\u0221\u0111\2\u04a6\u00be\3\2\2\2\u04a7\u04a8\5\u0229\u0115\2\u04a8\u04a9"+ + "\5\u0233\u011a\2\u04a9\u04aa\5\u021f\u0110\2\u04aa\u04ab\5\u0221\u0111"+ + "\2\u04ab\u04ac\5\u0247\u0124\2\u04ac\u00c0\3\2\2\2\u04ad\u04ae\5\u0229"+ + "\u0115\2\u04ae\u04af\5\u0233\u011a\2\u04af\u04b0\5\u0233\u011a\2\u04b0"+ + "\u04b1\5\u0221\u0111\2\u04b1\u04b2\5\u023b\u011e\2\u04b2\u00c2\3\2\2\2"+ + "\u04b3\u04b4\5\u0229\u0115\2\u04b4\u04b5\5\u0233\u011a\2\u04b5\u04b6\5"+ + "\u0235\u011b\2\u04b6\u04b7\5\u0241\u0121\2\u04b7\u04b8\5\u023f\u0120\2"+ + "\u04b8\u00c4\3\2\2\2\u04b9\u04ba\5\u0229\u0115\2\u04ba\u04bb\5\u0233\u011a"+ + "\2\u04bb\u04bc\5\u023d\u011f\2\u04bc\u04bd\5\u0221\u0111\2\u04bd\u04be"+ + "\5\u023b\u011e\2\u04be\u04bf\5\u023f\u0120\2\u04bf\u00c6\3\2\2\2\u04c0"+ + "\u04c1\5\u0229\u0115\2\u04c1\u04c2\5\u0233\u011a\2\u04c2\u04c3\5\u023f"+ + "\u0120\2\u04c3\u00c8\3\2\2\2\u04c4\u04c5\5\u0229\u0115\2\u04c5\u04c6\5"+ + "\u0233\u011a\2\u04c6\u04c7\5\u023f\u0120\2\u04c7\u04c8\5\u0221\u0111\2"+ + "\u04c8\u04c9\5\u0225\u0113\2\u04c9\u04ca\5\u0221\u0111\2\u04ca\u04cb\5"+ + "\u023b\u011e\2\u04cb\u00ca\3\2\2\2\u04cc\u04cd\5\u0229\u0115\2\u04cd\u04ce"+ + "\5\u0233\u011a\2\u04ce\u04cf\5\u023f\u0120\2\u04cf\u04d0\5\u0221\u0111"+ + "\2\u04d0\u04d1\5\u023b\u011e\2\u04d1\u04d2\5\u023d\u011f\2\u04d2\u04d3"+ + "\5\u0221\u0111\2\u04d3\u04d4\5\u021d\u010f\2\u04d4\u04d5\5\u023f\u0120"+ + "\2\u04d5\u00cc\3\2\2\2\u04d6\u04d7\5\u0229\u0115\2\u04d7\u04d8\5\u0233"+ + "\u011a\2\u04d8\u04d9\5\u023f\u0120\2\u04d9\u04da\5\u0235\u011b\2\u04da"+ + "\u00ce\3\2\2\2\u04db\u04dc\5\u0229\u0115\2\u04dc\u04dd\5\u0233\u011a\2"+ + "\u04dd\u04de\5\u0243\u0122\2\u04de\u04df\5\u0235\u011b\2\u04df\u04e0\5"+ + "\u022d\u0117\2\u04e0\u04e1\5\u0221\u0111\2\u04e1\u04e2\5\u023b\u011e\2"+ + "\u04e2\u00d0\3\2\2\2\u04e3\u04e4\5\u0229\u0115\2\u04e4\u04e5\5\u023d\u011f"+ + "\2\u04e5\u00d2\3\2\2\2\u04e6\u04e7\5\u0229\u0115\2\u04e7\u04e8\5\u023f"+ + "\u0120\2\u04e8\u04e9\5\u0221\u0111\2\u04e9\u04ea\5\u0231\u0119\2\u04ea"+ + "\u04eb\5\u023d\u011f\2\u04eb\u00d4\3\2\2\2\u04ec\u04ed\5\u022b\u0116\2"+ + "\u04ed\u04ee\5\u0235\u011b\2\u04ee\u04ef\5\u0229\u0115\2\u04ef\u04f0\5"+ + "\u0233\u011a\2\u04f0\u00d6\3\2\2\2\u04f1\u04f2\5\u022d\u0117\2\u04f2\u04f3"+ + "\5\u0221\u0111\2\u04f3\u04f4\5\u0249\u0125\2\u04f4\u00d8\3\2\2\2\u04f5"+ + "\u04f6\5\u022d\u0117\2\u04f6\u04f7\5\u0221\u0111\2\u04f7\u04f8\5\u0249"+ + "\u0125\2\u04f8\u04f9\5\u023d\u011f\2\u04f9\u00da\3\2\2\2\u04fa\u04fb\5"+ + "\u022f\u0118\2\u04fb\u04fc\5\u0219\u010d\2\u04fc\u04fd\5\u0233\u011a\2"+ + "\u04fd\u04fe\5\u0225\u0113\2\u04fe\u04ff\5\u0241\u0121\2\u04ff\u0500\5"+ + "\u0219\u010d\2\u0500\u0501\5\u0225\u0113\2\u0501\u0502\5\u0221\u0111\2"+ + "\u0502\u00dc\3\2\2\2\u0503\u0504\5\u022f\u0118\2\u0504\u0505\5\u0221\u0111"+ + "\2\u0505\u0506\5\u0219\u010d\2\u0506\u0507\5\u0243\u0122\2\u0507\u0508"+ + "\5\u0221\u0111\2\u0508\u00de\3\2\2\2\u0509\u050a\5\u022f\u0118\2\u050a"+ + "\u050b\5\u0221\u0111\2\u050b\u050c\5\u0223\u0112\2\u050c\u050d\5\u023f"+ + "\u0120\2\u050d\u00e0\3\2\2\2\u050e\u050f\5\u022f\u0118\2\u050f\u0510\5"+ + "\u0229\u0115\2\u0510\u0511\5\u022d\u0117\2\u0511\u0512\5\u0221\u0111\2"+ + "\u0512\u00e2\3\2\2\2\u0513\u0514\5\u022f\u0118\2\u0514\u0515\5\u0229\u0115"+ + "\2\u0515\u0516\5\u0231\u0119\2\u0516\u0517\5\u0229\u0115\2\u0517\u0518"+ + "\5\u023f\u0120\2\u0518\u00e4\3\2\2\2\u0519\u051a\5\u022f\u0118\2\u051a"+ + "\u051b\5\u0229\u0115\2\u051b\u051c\5\u0233\u011a\2\u051c\u051d\5\u0221"+ + "\u0111\2\u051d\u051e\5\u023d\u011f\2\u051e\u00e6\3\2\2\2\u051f\u0520\5"+ + "\u022f\u0118\2\u0520\u0521\5\u0235\u011b\2\u0521\u0522\5\u021d\u010f\2"+ + "\u0522\u0523\5\u0219\u010d\2\u0523\u0524\5\u022f\u0118\2\u0524\u00e8\3"+ + "\2\2\2\u0525\u0526\5\u022f\u0118\2\u0526\u0527\5\u0235\u011b\2\u0527\u0528"+ + "\5\u0225\u0113\2\u0528\u0529\5\u0225\u0113\2\u0529\u052a\5\u0221\u0111"+ + "\2\u052a\u052b\5\u021f\u0110\2\u052b\u00ea\3\2\2\2\u052c\u052d\5\u022f"+ + "\u0118\2\u052d\u052e\5\u0235\u011b\2\u052e\u052f\5\u0235\u011b\2\u052f"+ + "\u0530\5\u0237\u011c\2\u0530\u00ec\3\2\2\2\u0531\u0532\5\u0231\u0119\2"+ + "\u0532\u0533\5\u0219\u010d\2\u0533\u0534\5\u0237\u011c\2\u0534\u00ee\3"+ + "\2\2\2\u0535\u0536\5\u0231\u0119\2\u0536\u0537\5\u0219\u010d\2\u0537\u0538"+ + "\5\u023f\u0120\2\u0538\u0539\5\u021d\u010f\2\u0539\u053a\5\u0227\u0114"+ + "\2\u053a\u053b\5\u0221\u0111\2\u053b\u053c\5\u021f\u0110\2\u053c\u00f0"+ + "\3\2\2\2\u053d\u053e\5\u0231\u0119\2\u053e\u053f\5\u0219\u010d\2\u053f"+ + "\u0540\5\u0247\u0124\2\u0540\u00f2\3\2\2\2\u0541\u0542\5\u0231\u0119\2"+ + "\u0542\u0543\5\u0221\u0111\2\u0543\u0544\5\u023b\u011e\2\u0544\u0545\5"+ + "\u0225\u0113\2\u0545\u0546\5\u0221\u0111\2\u0546\u00f4\3\2\2\2\u0547\u0548"+ + "\5\u0231\u0119\2\u0548\u0549\5\u0221\u0111\2\u0549\u054a\5\u023d\u011f"+ + "\2\u054a\u054b\5\u023d\u011f\2\u054b\u054c\5\u0219\u010d\2\u054c\u054d"+ + "\5\u0225\u0113\2\u054d\u054e\5\u0221\u0111\2\u054e\u054f\7a\2\2\u054f"+ + "\u0550\5\u023f\u0120\2\u0550\u0551\5\u0221\u0111\2\u0551\u0552\5\u0247"+ + "\u0124\2\u0552\u0553\5\u023f\u0120\2\u0553\u00f6\3\2\2\2\u0554\u0555\5"+ + "\u0231\u0119\2\u0555\u0556\5\u0229\u0115\2\u0556\u0557\5\u021d\u010f\2"+ + "\u0557\u0558\5\u023b\u011e\2\u0558\u0559\5\u0235\u011b\2\u0559\u055a\5"+ + "\u023d\u011f\2\u055a\u055b\5\u0221\u0111\2\u055b\u055c\5\u021d\u010f\2"+ + "\u055c\u055d\5\u0235\u011b\2\u055d\u055e\5\u0233\u011a\2\u055e\u055f\5"+ + "\u021f\u0110\2\u055f\u00f8\3\2\2\2\u0560\u0561\5\u0231\u0119\2\u0561\u0562"+ + "\5\u0229\u0115\2\u0562\u0563\5\u021d\u010f\2\u0563\u0564\5\u023b\u011e"+ + "\2\u0564\u0565\5\u0235\u011b\2\u0565\u0566\5\u023d\u011f\2\u0566\u0567"+ + "\5\u0221\u0111\2\u0567\u0568\5\u021d\u010f\2\u0568\u0569\5\u0235\u011b"+ + "\2\u0569\u056a\5\u0233\u011a\2\u056a\u056b\5\u021f\u0110\2\u056b\u056c"+ + "\5\u023d\u011f\2\u056c\u00fa\3\2\2\2\u056d\u056e\5\u0231\u0119\2\u056e"+ + "\u056f\5\u0229\u0115\2\u056f\u0570\5\u0233\u011a\2\u0570\u00fc\3\2\2\2"+ + "\u0571\u0572\5\u0231\u0119\2\u0572\u0573\5\u0241\u0121\2\u0573\u0574\5"+ + "\u022f\u0118\2\u0574\u0575\5\u023f\u0120\2\u0575\u0576\5\u0229\u0115\2"+ + "\u0576\u0577\5\u023d\u011f\2\u0577\u0578\5\u0221\u0111\2\u0578\u0579\5"+ + "\u023f\u0120\2\u0579\u00fe\3\2\2\2\u057a\u057b\5\u0233\u011a\2\u057b\u057c"+ + "\5\u0235\u011b\2\u057c\u057d\5\u023f\u0120\2\u057d\u0100\3\2\2\2\u057e"+ + "\u057f\5\u0233\u011a\2\u057f\u0580\5\u0241\u0121\2\u0580\u0581\5\u022f"+ + "\u0118\2\u0581\u0582\5\u022f\u0118\2\u0582\u0102\3\2\2\2\u0583\u0584\5"+ + "\u0233\u011a\2\u0584\u0585\5\u0241\u0121\2\u0585\u0586\5\u0231\u0119\2"+ + "\u0586\u0587\5\u021b\u010e\2\u0587\u0588\5\u0221\u0111\2\u0588\u0589\5"+ + "\u023b\u011e\2\u0589\u0104\3\2\2\2\u058a\u058b\5\u0235\u011b\2\u058b\u058c"+ + "\5\u021b\u010e\2\u058c\u058d\5\u022b\u0116\2\u058d\u058e\5\u0221\u0111"+ + "\2\u058e\u058f\5\u021d\u010f\2\u058f\u0590\5\u023f\u0120\2\u0590\u0106"+ + "\3\2\2\2\u0591\u0592\5\u0235\u011b\2\u0592\u0593\5\u0233\u011a\2\u0593"+ + "\u0108\3\2\2\2\u0594\u0595\5\u0235\u011b\2\u0595\u0596\5\u0233\u011a\2"+ + "\u0596\u0597\5\u022f\u0118\2\u0597\u0598\5\u0249\u0125\2\u0598\u010a\3"+ + "\2\2\2\u0599\u059a\5\u0235\u011b\2\u059a\u059b\5\u0237\u011c\2\u059b\u059c"+ + "\5\u0221\u0111\2\u059c\u059d\5\u0233\u011a\2\u059d\u010c\3\2\2\2\u059e"+ + "\u059f\5\u0235\u011b\2\u059f\u05a0\5\u023b\u011e\2\u05a0\u010e\3\2\2\2"+ + "\u05a1\u05a2\5\u0235\u011b\2\u05a2\u05a3\5\u023b\u011e\2\u05a3\u05a4\5"+ + "\u021f\u0110\2\u05a4\u05a5\5\u0221\u0111\2\u05a5\u05a6\5\u023b\u011e\2"+ + "\u05a6\u0110\3\2\2\2\u05a7\u05a8\5\u0235\u011b\2\u05a8\u05a9\5\u0241\u0121"+ + "\2\u05a9\u05aa\5\u023f\u0120\2\u05aa\u0112\3\2\2\2\u05ab\u05ac\5\u0235"+ + "\u011b\2\u05ac\u05ad\5\u0241\u0121\2\u05ad\u05ae\5\u023f\u0120\2\u05ae"+ + "\u05af\5\u0221\u0111\2\u05af\u05b0\5\u023b\u011e\2\u05b0\u0114\3\2\2\2"+ + "\u05b1\u05b2\5\u0235\u011b\2\u05b2\u05b3\5\u0243\u0122\2\u05b3\u05b4\5"+ + "\u0221\u0111\2\u05b4\u05b5\5\u023b\u011e\2\u05b5\u0116\3\2\2\2\u05b6\u05b7"+ + "\5\u0235\u011b\2\u05b7\u05b8\5\u0243\u0122\2\u05b8\u05b9\5\u0221\u0111"+ + "\2\u05b9\u05ba\5\u023b\u011e\2\u05ba\u05bb\5\u0245\u0123\2\u05bb\u05bc"+ + "\5\u023b\u011e\2\u05bc\u05bd\5\u0229\u0115\2\u05bd\u05be\5\u023f\u0120"+ + "\2\u05be\u05bf\5\u0221\u0111\2\u05bf\u0118\3\2\2\2\u05c0\u05c1\5\u0235"+ + "\u011b\2\u05c1\u05c2\5\u0245\u0123\2\u05c2\u05c3\5\u0233\u011a\2\u05c3"+ + "\u05c4\5\u0221\u0111\2\u05c4\u05c5\5\u023b\u011e\2\u05c5\u011a\3\2\2\2"+ + "\u05c6\u05c7\5\u0237\u011c\2\u05c7\u05c8\5\u0219\u010d\2\u05c8\u05c9\5"+ + "\u023b\u011e\2\u05c9\u05ca\5\u023f\u0120\2\u05ca\u05cb\5\u0229\u0115\2"+ + "\u05cb\u05cc\5\u023f\u0120\2\u05cc\u05cd\5\u0229\u0115\2\u05cd\u05ce\5"+ + "\u0235\u011b\2\u05ce\u05cf\5\u0233\u011a\2\u05cf\u011c\3\2\2\2\u05d0\u05d1"+ + "\5\u0237\u011c\2\u05d1\u05d2\5\u023b\u011e\2\u05d2\u05d3\5\u0221\u0111"+ + "\2\u05d3\u05d4\5\u023d\u011f\2\u05d4\u05d5\5\u0221\u0111\2\u05d5\u05d6"+ + "\5\u023b\u011e\2\u05d6\u05d7\5\u0243\u0122\2\u05d7\u05d8\5\u0221\u0111"+ + "\2\u05d8\u011e\3\2\2\2\u05d9\u05da\5\u0237\u011c\2\u05da\u05db\5\u023b"+ + "\u011e\2\u05db\u05dc\5\u0229\u0115\2\u05dc\u05dd\5\u0231\u0119\2\u05dd"+ + "\u05de\5\u0219\u010d\2\u05de\u05df\5\u023b\u011e\2\u05df\u05e0\5\u0249"+ + "\u0125\2\u05e0\u0120\3\2\2\2\u05e1\u05e2\5\u0237\u011c\2\u05e2\u05e3\5"+ + "\u023b\u011e\2\u05e3\u05e4\5\u0229\u0115\2\u05e4\u05e5\5\u0233\u011a\2"+ + "\u05e5\u05e6\5\u023f\u0120\2\u05e6\u0122\3\2\2\2\u05e7\u05e8\5\u0237\u011c"+ + "\2\u05e8\u05e9\5\u023b\u011e\2\u05e9\u05ea\5\u0235\u011b\2\u05ea\u05eb"+ + "\5\u021d\u010f\2\u05eb\u0124\3\2\2\2\u05ec\u05ed\5\u0237\u011c\2\u05ed"+ + "\u05ee\5\u023b\u011e\2\u05ee\u05ef\5\u0235\u011b\2\u05ef\u05f0\5\u021d"+ + "\u010f\2\u05f0\u05f1\5\u0221\u0111\2\u05f1\u05f2\5\u021f\u0110\2\u05f2"+ + "\u05f3\5\u0241\u0121\2\u05f3\u05f4\5\u023b\u011e\2\u05f4\u05f5\5\u0221"+ + "\u0111\2\u05f5\u0126\3\2\2\2\u05f6\u05f7\5\u023b\u011e\2\u05f7\u05f8\5"+ + "\u0221\u0111\2\u05f8\u05f9\5\u0225\u0113\2\u05f9\u05fa\5\u0221\u0111\2"+ + "\u05fa\u05fb\5\u0247\u0124\2\u05fb\u05fc\5\u0237\u011c\2\u05fc\u0128\3"+ + "\2\2\2\u05fd\u05fe\5\u023b\u011e\2\u05fe\u05ff\5\u0221\u0111\2\u05ff\u0600"+ + "\5\u0237\u011c\2\u0600\u0601\5\u022f\u0118\2\u0601\u0602\5\u0219\u010d"+ + "\2\u0602\u0603\5\u021d\u010f\2\u0603\u0604\5\u0221\u0111\2\u0604\u012a"+ + "\3\2\2\2\u0605\u0606\5\u023b\u011e\2\u0606\u0607\5\u0221\u0111\2\u0607"+ + "\u0608\5\u023d\u011f\2\u0608\u0609\5\u0229\u0115\2\u0609\u060a\5\u0225"+ + "\u0113\2\u060a\u060b\5\u0233\u011a\2\u060b\u060c\5\u0219\u010d\2\u060c"+ + "\u060d\5\u022f\u0118\2\u060d\u012c\3\2\2\2\u060e\u060f\5\u023b\u011e\2"+ + "\u060f\u0610\5\u0221\u0111\2\u0610\u0611\5\u023d\u011f\2\u0611\u0612\5"+ + "\u0241\u0121\2\u0612\u0613\5\u022f\u0118\2\u0613\u0614\5\u023f\u0120\2"+ + "\u0614\u012e\3\2\2\2\u0615\u0616\5\u023b\u011e\2\u0616\u0617\5\u0221\u0111"+ + "\2\u0617\u0618\5\u023f\u0120\2\u0618\u0619\5\u0241\u0121\2\u0619\u061a"+ + "\5\u023b\u011e\2\u061a\u061b\5\u0233\u011a\2\u061b\u0130\3\2\2\2\u061c"+ + "\u061d\5\u023b\u011e\2\u061d\u061e\5\u0221\u0111\2\u061e\u061f\5\u023f"+ + "\u0120\2\u061f\u0620\5\u0241\u0121\2\u0620\u0621\5\u023b\u011e\2\u0621"+ + "\u0622\5\u0233\u011a\2\u0622\u0623\5\u023d\u011f\2\u0623\u0132\3\2\2\2"+ + "\u0624\u0625\5\u023b\u011e\2\u0625\u0626\5\u0221\u0111\2\u0626\u0627\5"+ + "\u0243\u0122\2\u0627\u0628\5\u0221\u0111\2\u0628\u0629\5\u023b\u011e\2"+ + "\u0629\u062a\5\u023d\u011f\2\u062a\u062b\5\u0221\u0111\2\u062b\u0134\3"+ + "\2\2\2\u062c\u062d\5\u023b\u011e\2\u062d\u062e\5\u0229\u0115\2\u062e\u062f"+ + "\5\u0225\u0113\2\u062f\u0630\5\u0227\u0114\2\u0630\u0631\5\u023f\u0120"+ + "\2\u0631\u0136\3\2\2\2\u0632\u0633\5\u023b\u011e\2\u0633\u0634\5\u022f"+ + "\u0118\2\u0634\u0635\5\u0229\u0115\2\u0635\u0636\5\u022d\u0117\2\u0636"+ + "\u0637\5\u0221\u0111\2\u0637\u0138\3\2\2\2\u0638\u0639\5\u023b\u011e\2"+ + "\u0639\u063a\5\u0235\u011b\2\u063a\u063b\5\u022f\u0118\2\u063b\u063c\5"+ + "\u022f\u0118\2\u063c\u063d\5\u021b\u010e\2\u063d\u063e\5\u0219\u010d\2"+ + "\u063e\u063f\5\u021d\u010f\2\u063f\u0640\5\u022d\u0117\2\u0640\u013a\3"+ + "\2\2\2\u0641\u0642\5\u023b\u011e\2\u0642\u0643\5\u0235\u011b\2\u0643\u0644"+ + "\5\u0245\u0123\2\u0644\u013c\3\2\2\2\u0645\u0646\5\u023b\u011e\2\u0646"+ + "\u0647\5\u0235\u011b\2\u0647\u0648\5\u0245\u0123\2\u0648\u0649\5\u023d"+ + "\u011f\2\u0649\u013e\3\2\2\2\u064a\u064b\5\u023b\u011e\2\u064b\u064c\5"+ + "\u0235\u011b\2\u064c\u064d\5\u0245\u0123\2\u064d\u064e\7a\2\2\u064e\u064f"+ + "\5\u021d\u010f\2\u064f\u0650\5\u0235\u011b\2\u0650\u0651\5\u0241\u0121"+ + "\2\u0651\u0652\5\u0233\u011a\2\u0652\u0653\5\u023f\u0120\2\u0653\u0140"+ + "\3\2\2\2\u0654\u0655\5\u023b\u011e\2\u0655\u0656\5\u023b\u011e\2\u0656"+ + "\u0142\3\2\2\2\u0657\u0658\5\u023b\u011e\2\u0658\u0659\5\u023d\u011f\2"+ + "\u0659\u0144\3\2\2\2\u065a\u065b\5\u023f\u0120\2\u065b\u065c\5\u023b\u011e"+ + "\2\u065c\u065d\5\u0229\u0115\2\u065d\u065e\5\u0231\u0119\2\u065e\u0146"+ + "\3\2\2\2\u065f\u0660\5\u023d\u011f\2\u0660\u0661\5\u0221\u0111\2\u0661"+ + "\u0662\5\u021d\u010f\2\u0662\u0663\5\u0241\u0121\2\u0663\u0664\5\u023b"+ + "\u011e\2\u0664\u0665\5\u0229\u0115\2\u0665\u0666\5\u023f\u0120\2\u0666"+ + "\u0667\5\u0249\u0125\2\u0667\u0148\3\2\2\2\u0668\u0669\5\u023d\u011f\2"+ + "\u0669\u066a\5\u0221\u0111\2\u066a\u066b\5\u022f\u0118\2\u066b\u014a\3"+ + "\2\2\2\u066c\u066d\5\u023d\u011f\2\u066d\u066e\5\u0221\u0111\2\u066e\u066f"+ + "\5\u022f\u0118\2\u066f\u0670\5\u0221\u0111\2\u0670\u0671\5\u021d\u010f"+ + "\2\u0671\u0672\5\u023f\u0120\2\u0672\u014c\3\2\2\2\u0673\u0674\5\u023d"+ + "\u011f\2\u0674\u0675\5\u0221\u0111\2\u0675\u0676\5\u023f\u0120\2\u0676"+ + "\u014e\3\2\2\2\u0677\u0678\5\u023d\u011f\2\u0678\u0679\5\u0221\u0111\2"+ + "\u0679\u067a\5\u023f\u0120\2\u067a\u067b\5\u023d\u011f\2\u067b\u0150\3"+ + "\2\2\2\u067c\u067d\5\u023d\u011f\2\u067d\u067e\5\u0229\u0115\2\u067e\u067f"+ + "\5\u0225\u0113\2\u067f\u0680\5\u0233\u011a\2\u0680\u0681\5\u0219\u010d"+ + "\2\u0681\u0682\5\u022f\u0118\2\u0682\u0152\3\2\2\2\u0683\u0684\5\u023d"+ + "\u011f\2\u0684\u0685\5\u0231\u0119\2\u0685\u0686\5\u0219\u010d\2\u0686"+ + "\u0687\5\u022f\u0118\2\u0687\u0688\5\u022f\u0118\2\u0688\u0689\5\u0229"+ + "\u0115\2\u0689\u068a\5\u0233\u011a\2\u068a\u068b\5\u023f\u0120\2\u068b"+ + "\u0154\3\2\2\2\u068c\u068d\5\u023d\u011f\2\u068d\u068e\5\u0239\u011d\2"+ + "\u068e\u068f\5\u022f\u0118\2\u068f\u0156\3\2\2\2\u0690\u0691\5\u023d\u011f"+ + "\2\u0691\u0692\5\u0239\u011d\2\u0692\u0693\5\u022f\u0118\2\u0693\u0694"+ + "\5\u0221\u0111\2\u0694\u0695\5\u0247\u0124\2\u0695\u0696\5\u021d\u010f"+ + "\2\u0696\u0697\5\u0221\u0111\2\u0697\u0698\5\u0237\u011c\2\u0698\u0699"+ + "\5\u023f\u0120\2\u0699\u069a\5\u0229\u0115\2\u069a\u069b\5\u0235\u011b"+ + "\2\u069b\u069c\5\u0233\u011a\2\u069c\u0158\3\2\2\2\u069d\u069e\5\u023d"+ + "\u011f\2\u069e\u069f\5\u0239\u011d\2\u069f\u06a0\5\u022f\u0118\2\u06a0"+ + "\u06a1\5\u0229\u0115\2\u06a1\u06a2\5\u0233\u011a\2\u06a2\u06a3\5\u023d"+ + "\u011f\2\u06a3\u06a4\5\u0221\u0111\2\u06a4\u06a5\5\u023b\u011e\2\u06a5"+ + "\u06a6\5\u023f\u0120\2\u06a6\u015a\3\2\2\2\u06a7\u06a8\5\u023d\u011f\2"+ + "\u06a8\u06a9\5\u0239\u011d\2\u06a9\u06aa\5\u022f\u0118\2\u06aa\u06ab\5"+ + "\u023d\u011f\2\u06ab\u06ac\5\u023f\u0120\2\u06ac\u06ad\5\u0219\u010d\2"+ + "\u06ad\u06ae\5\u023f\u0120\2\u06ae\u06af\5\u0221\u0111\2\u06af\u015c\3"+ + "\2\2\2\u06b0\u06b1\5\u023d\u011f\2\u06b1\u06b2\5\u0239\u011d\2\u06b2\u06b3"+ + "\5\u022f\u0118\2\u06b3\u06b4\5\u0245\u0123\2\u06b4\u06b5\5\u0219\u010d"+ + "\2\u06b5\u06b6\5\u023b\u011e\2\u06b6\u06b7\5\u0233\u011a\2\u06b7\u06b8"+ + "\5\u0229\u0115\2\u06b8\u06b9\5\u0233\u011a\2\u06b9\u06ba\5\u0225\u0113"+ + "\2\u06ba\u015e\3\2\2\2\u06bb\u06bc\5\u023d\u011f\2\u06bc\u06bd\5\u023f"+ + "\u0120\2\u06bd\u06be\5\u0221\u0111\2\u06be\u06bf\5\u0237\u011c\2\u06bf"+ + "\u0160\3\2\2\2\u06c0\u06c1\5\u023d\u011f\2\u06c1\u06c2\5\u023f\u0120\2"+ + "\u06c2\u06c3\5\u023b\u011e\2\u06c3\u06c4\5\u0229\u0115\2\u06c4\u06c5\5"+ + "\u0233\u011a\2\u06c5\u06c6\5\u0225\u0113\2\u06c6\u0162\3\2\2\2\u06c7\u06c8"+ + "\5\u023d\u011f\2\u06c8\u06c9\5\u0241\u0121\2\u06c9\u06ca\5\u021b\u010e"+ + "\2\u06ca\u06cb\5\u023d\u011f\2\u06cb\u06cc\5\u023f\u0120\2\u06cc\u06cd"+ + "\5\u023b\u011e\2\u06cd\u06ce\5\u0229\u0115\2\u06ce\u06cf\5\u0233\u011a"+ + "\2\u06cf\u06d0\5\u0225\u0113\2\u06d0\u0164\3\2\2\2\u06d1\u06d2\5\u023d"+ + "\u011f\2\u06d2\u06d3\5\u0241\u0121\2\u06d3\u06d4\5\u0231\u0119\2\u06d4"+ + "\u0166\3\2\2\2\u06d5\u06d6\5\u023f\u0120\2\u06d6\u06d7\5\u0219\u010d\2"+ + "\u06d7\u06d8\5\u021b\u010e\2\u06d8\u06d9\5\u022f\u0118\2\u06d9\u06da\5"+ + "\u0221\u0111\2\u06da\u0168\3\2\2\2\u06db\u06dc\5\u023f\u0120\2\u06dc\u06dd"+ + "\5\u0221\u0111\2\u06dd\u06de\5\u0231\u0119\2\u06de\u06df\5\u0237\u011c"+ + "\2\u06df\u06e0\5\u0235\u011b\2\u06e0\u06e1\5\u023b\u011e\2\u06e1\u06e2"+ + "\5\u0219\u010d\2\u06e2\u06e3\5\u023b\u011e\2\u06e3\u06e4\5\u0249\u0125"+ + "\2\u06e4\u016a\3\2\2\2\u06e5\u06e6\5\u023f\u0120\2\u06e6\u06e7\5\u0221"+ + "\u0111\2\u06e7\u06e8\5\u023b\u011e\2\u06e8\u06e9\5\u0231\u0119\2\u06e9"+ + "\u06ea\5\u0229\u0115\2\u06ea\u06eb\5\u0233\u011a\2\u06eb\u06ec\5\u0219"+ + "\u010d\2\u06ec\u06ed\5\u023f\u0120\2\u06ed\u06ee\5\u0221\u0111\2\u06ee"+ + "\u06ef\5\u021f\u0110\2\u06ef\u016c\3\2\2\2\u06f0\u06f1\5\u023f\u0120\2"+ + "\u06f1\u06f2\5\u0227\u0114\2\u06f2\u06f3\5\u0221\u0111\2\u06f3\u06f4\5"+ + "\u0233\u011a\2\u06f4\u016e\3\2\2\2\u06f5\u06f6\5\u023f\u0120\2\u06f6\u06f7"+ + "\5\u0229\u0115\2\u06f7\u06f8\5\u0231\u0119\2\u06f8\u06f9\5\u0221\u0111"+ + "\2\u06f9\u06fa\5\u023d\u011f\2\u06fa\u06fb\5\u023f\u0120\2\u06fb\u06fc"+ + "\5\u0219\u010d\2\u06fc\u06fd\5\u0231\u0119\2\u06fd\u06fe\5\u0237\u011c"+ + "\2\u06fe\u0170\3\2\2\2\u06ff\u0700\5\u023f\u0120\2\u0700\u0701\5\u0229"+ + "\u0115\2\u0701\u0702\5\u023f\u0120\2\u0702\u0703\5\u022f\u0118\2\u0703"+ + "\u0704\5\u0221\u0111\2\u0704\u0172\3\2\2\2\u0705\u0706\5\u023f\u0120\2"+ + "\u0706\u0707\5\u0235\u011b\2\u0707\u0174\3\2\2\2\u0708\u0709\5\u023f\u0120"+ + "\2\u0709\u070a\5\u0235\u011b\2\u070a\u070b\5\u0237\u011c\2\u070b\u0176"+ + "\3\2\2\2\u070c\u070d\5\u0241\u0121\2\u070d\u070e\5\u0233\u011a\2\u070e"+ + "\u070f\5\u0229\u0115\2\u070f\u0710\5\u0235\u011b\2\u0710\u0711\5\u0233"+ + "\u011a\2\u0711\u0178\3\2\2\2\u0712\u0713\5\u0241\u0121\2\u0713\u0714\5"+ + "\u0233\u011a\2\u0714\u0715\5\u0229\u0115\2\u0715\u0716\5\u0239\u011d\2"+ + "\u0716\u0717\5\u0241\u0121\2\u0717\u0718\5\u0221\u0111\2\u0718\u017a\3"+ + "\2\2\2\u0719\u071a\5\u0241\u0121\2\u071a\u071b\5\u0237\u011c\2\u071b\u071c"+ + "\5\u021f\u0110\2\u071c\u071d\5\u0219\u010d\2\u071d\u071e\5\u023f\u0120"+ + "\2\u071e\u071f\5\u0221\u0111\2\u071f\u017c\3\2\2\2\u0720\u0721\5\u0241"+ + "\u0121\2\u0721\u0722\5\u023b\u011e\2\u0722\u017e\3\2\2\2\u0723\u0724\5"+ + "\u0241\u0121\2\u0724\u0725\5\u023d\u011f\2\u0725\u0726\5\u0221\u0111\2"+ + "\u0726\u0180\3\2\2\2\u0727\u0728\5\u0241\u0121\2\u0728\u0729\5\u023d\u011f"+ + "\2\u0729\u072a\5\u0229\u0115\2\u072a\u072b\5\u0233\u011a\2\u072b\u072c"+ + "\5\u0225\u0113\2\u072c\u0182\3\2\2\2\u072d\u072e\5\u0243\u0122\2\u072e"+ + "\u072f\5\u0219\u010d\2\u072f\u0730\5\u022f\u0118\2\u0730\u0731\5\u0241"+ + "\u0121\2\u0731\u0732\5\u0221\u0111\2\u0732\u0184\3\2\2\2\u0733\u0734\5"+ + "\u0243\u0122\2\u0734\u0735\5\u0219\u010d\2\u0735\u0736\5\u022f\u0118\2"+ + "\u0736\u0737\5\u0241\u0121\2\u0737\u0738\5\u0221\u0111\2\u0738\u0739\5"+ + "\u023d\u011f\2\u0739\u0186\3\2\2\2\u073a\u073b\5\u0243\u0122\2\u073b\u073c"+ + "\5\u0219\u010d\2\u073c\u073d\5\u023b\u011e\2\u073d\u0188\3\2\2\2\u073e"+ + "\u073f\5\u0243\u0122\2\u073f\u0740\5\u0219\u010d\2\u0740\u0741\5\u023b"+ + "\u011e\2\u0741\u0742\5\u021d\u010f\2\u0742\u0743\5\u0227\u0114\2\u0743"+ + "\u0744\5\u0219\u010d\2\u0744\u0745\5\u023b\u011e\2\u0745\u018a\3\2\2\2"+ + "\u0746\u0747\5\u0243\u0122\2\u0747\u0748\5\u0219\u010d\2\u0748\u0749\5"+ + "\u023b\u011e\2\u0749\u074a\5\u021d\u010f\2\u074a\u074b\5\u0227\u0114\2"+ + "\u074b\u074c\5\u0219\u010d\2\u074c\u074d\5\u023b\u011e\2\u074d\u074e\7"+ + "\64\2\2\u074e\u018c\3\2\2\2\u074f\u0750\5\u0243\u0122\2\u0750\u0751\5"+ + "\u0235\u011b\2\u0751\u0752\5\u022f\u0118\2\u0752\u0753\5\u0219\u010d\2"+ + "\u0753\u0754\5\u023f\u0120\2\u0754\u0755\5\u0229\u0115\2\u0755\u0756\5"+ + "\u022f\u0118\2\u0756\u0757\5\u0221\u0111\2\u0757\u018e\3\2\2\2\u0758\u0759"+ + "\5\u0245\u0123\2\u0759\u075a\5\u0227\u0114\2\u075a\u075b\5\u0221\u0111"+ + "\2\u075b\u075c\5\u0233\u011a\2\u075c\u0190\3\2\2\2\u075d\u075e\5\u0245"+ + "\u0123\2\u075e\u075f\5\u0227\u0114\2\u075f\u0760\5\u0221\u0111\2\u0760"+ + "\u0761\5\u023b\u011e\2\u0761\u0762\5\u0221\u0111\2\u0762\u0192\3\2\2\2"+ + "\u0763\u0764\5\u0245\u0123\2\u0764\u0765\5\u0227\u0114\2\u0765\u0766\5"+ + "\u0229\u0115\2\u0766\u0767\5\u022f\u0118\2\u0767\u0768\5\u0221\u0111\2"+ + "\u0768\u0194\3\2\2\2\u0769\u076a\5\u0245\u0123\2\u076a\u076b\5\u0229\u0115"+ + "\2\u076b\u076c\5\u023f\u0120\2\u076c\u076d\5\u0227\u0114\2\u076d\u0196"+ + "\3\2\2\2\u076e\u076f\5\u0245\u0123\2\u076f\u0770\5\u0229\u0115\2\u0770"+ + "\u0771\5\u023f\u0120\2\u0771\u0772\5\u0227\u0114\2\u0772\u0773\5\u0235"+ + "\u011b\2\u0773\u0774\5\u0241\u0121\2\u0774\u0775\5\u023f\u0120\2\u0775"+ + "\u0198\3\2\2\2\u0776\u0777\5\u0245\u0123\2\u0777\u0778\5\u0235\u011b\2"+ + "\u0778\u0779\5\u023b\u011e\2\u0779\u077a\5\u022d\u0117\2\u077a\u019a\3"+ + "\2\2\2\u077b\u077c\5\u0219\u010d\2\u077c\u077d\5\u021d\u010f\2\u077d\u077e"+ + "\5\u023f\u0120\2\u077e\u077f\5\u0229\u0115\2\u077f\u0780\5\u0243\u0122"+ + "\2\u0780\u0781\5\u0229\u0115\2\u0781\u0782\5\u023f\u0120\2\u0782\u0783"+ + "\5\u0249\u0125\2\u0783\u0784\7a\2\2\u0784\u0785\5\u021d\u010f\2\u0785"+ + "\u0786\5\u0235\u011b\2\u0786\u0787\5\u0241\u0121\2\u0787\u0788\5\u0233"+ + "\u011a\2\u0788\u0789\5\u023f\u0120\2\u0789\u019c\3\2\2\2\u078a\u078b\5"+ + "\u021d\u010f\2\u078b\u078c\5\u0241\u0121\2\u078c\u078d\5\u023b\u011e\2"+ + "\u078d\u078e\5\u023b\u011e\2\u078e\u078f\5\u0221\u0111\2\u078f\u0790\5"+ + "\u0233\u011a\2\u0790\u0791\5\u023f\u0120\2\u0791\u0792\7a\2\2\u0792\u0793"+ + "\5\u021f\u0110\2\u0793\u0794\5\u0219\u010d\2\u0794\u0795\5\u023f\u0120"+ + "\2\u0795\u0796\5\u0221\u0111\2\u0796\u019e\3\2\2\2\u0797\u0798\5\u021d"+ + "\u010f\2\u0798\u0799\5\u0241\u0121\2\u0799\u079a\5\u023b\u011e\2\u079a"+ + "\u079b\5\u023b\u011e\2\u079b\u079c\5\u0221\u0111\2\u079c\u079d\5\u0233"+ + "\u011a\2\u079d\u079e\5\u023f\u0120\2\u079e\u079f\7a\2\2\u079f\u07a0\5"+ + "\u023f\u0120\2\u07a0\u07a1\5\u0229\u0115\2\u07a1\u07a2\5\u0231\u0119\2"+ + "\u07a2\u07a3\5\u0221\u0111\2\u07a3\u07a4\5\u023d\u011f\2\u07a4\u07a5\5"+ + "\u023f\u0120\2\u07a5\u07a6\5\u0219\u010d\2\u07a6\u07a7\5\u0231\u0119\2"+ + "\u07a7\u07a8\5\u0237\u011c\2\u07a8\u01a0\3\2\2\2\u07a9\u07aa\5\u021d\u010f"+ + "\2\u07aa\u07ab\5\u0241\u0121\2\u07ab\u07ac\5\u023b\u011e\2\u07ac\u07ad"+ + "\5\u023b\u011e\2\u07ad\u07ae\5\u0221\u0111\2\u07ae\u07af\5\u0233\u011a"+ + "\2\u07af\u07b0\5\u023f\u0120\2\u07b0\u07b1\7a\2\2\u07b1\u07b2\5\u0241"+ + "\u0121\2\u07b2\u07b3\5\u023d\u011f\2\u07b3\u07b4\5\u0221\u0111\2\u07b4"+ + "\u07b5\5\u023b\u011e\2\u07b5\u01a2\3\2\2\2\u07b6\u07b7\5\u021f\u0110\2"+ + "\u07b7\u07b8\5\u0221\u0111\2\u07b8\u07b9\5\u0233\u011a\2\u07b9\u07ba\5"+ + "\u023d\u011f\2\u07ba\u07bb\5\u0221\u0111\2\u07bb\u07bc\7a\2\2\u07bc\u07bd"+ + "\5\u023b\u011e\2\u07bd\u07be\5\u0219\u010d\2\u07be\u07bf\5\u0233\u011a"+ + "\2\u07bf\u07c0\5\u022d\u0117\2\u07c0\u01a4\3\2\2\2\u07c1\u07c2\5\u0223"+ + "\u0112\2\u07c2\u07c3\5\u0229\u0115\2\u07c3\u07c4\5\u023b\u011e\2\u07c4"+ + "\u07c5\5\u023d\u011f\2\u07c5\u07c6\5\u023f\u0120\2\u07c6\u07c7\7a\2\2"+ + "\u07c7\u07c8\5\u0243\u0122\2\u07c8\u07c9\5\u0219\u010d\2\u07c9\u07ca\5"+ + "\u022f\u0118\2\u07ca\u07cb\5\u0241\u0121\2\u07cb\u07cc\5\u0221\u0111\2"+ + "\u07cc\u01a6\3\2\2\2\u07cd\u07ce\5\u022f\u0118\2\u07ce\u07cf\5\u0219\u010d"+ + "\2\u07cf\u07d0\5\u0225\u0113\2\u07d0\u01a8\3\2\2\2\u07d1\u07d2\5\u022f"+ + "\u0118\2\u07d2\u07d3\5\u0219\u010d\2\u07d3\u07d4\5\u023d\u011f\2\u07d4"+ + "\u07d5\5\u023f\u0120\2\u07d5\u07d6\7a\2\2\u07d6\u07d7\5\u0243\u0122\2"+ + "\u07d7\u07d8\5\u0219\u010d\2\u07d8\u07d9\5\u022f\u0118\2\u07d9\u07da\5"+ + "\u0241\u0121\2\u07da\u07db\5\u0221\u0111\2\u07db\u01aa\3\2\2\2\u07dc\u07dd"+ + "\5\u022f\u0118\2\u07dd\u07de\5\u0221\u0111\2\u07de\u07df\5\u0219\u010d"+ + "\2\u07df\u07e0\5\u021f\u0110\2\u07e0\u01ac\3\2\2\2\u07e1\u07e2\5\u0231"+ + "\u0119\2\u07e2\u07e3\5\u0219\u010d\2\u07e3\u07e4\5\u0247\u0124\2\u07e4"+ + "\u07e5\7a\2\2\u07e5\u07e6\5\u0237\u011c\2\u07e6\u07e7\5\u0219\u010d\2"+ + "\u07e7\u07e8\5\u023b\u011e\2\u07e8\u07e9\5\u023f\u0120\2\u07e9\u07ea\7"+ + "a\2\2\u07ea\u07eb\5\u023d\u011f\2\u07eb\u07ec\5\u023f\u0120\2\u07ec\u07ed"+ + "\5\u023b\u011e\2\u07ed\u07ee\5\u0229\u0115\2\u07ee\u07ef\5\u0233\u011a"+ + "\2\u07ef\u07f0\5\u0225\u0113\2\u07f0\u01ae\3\2\2\2\u07f1\u07f2\5\u0231"+ + "\u0119\2\u07f2\u07f3\5\u0229\u0115\2\u07f3\u07f4\5\u0233\u011a\2\u07f4"+ + "\u07f5\7a\2\2\u07f5\u07f6\5\u0237\u011c\2\u07f6\u07f7\5\u0219\u010d\2"+ + "\u07f7\u07f8\5\u023b\u011e\2\u07f8\u07f9\5\u023f\u0120\2\u07f9\u07fa\7"+ + "a\2\2\u07fa\u07fb\5\u023d\u011f\2\u07fb\u07fc\5\u023f\u0120\2\u07fc\u07fd"+ + "\5\u023b\u011e\2\u07fd\u07fe\5\u0229\u0115\2\u07fe\u07ff\5\u0233\u011a"+ + "\2\u07ff\u0800\5\u0225\u0113\2\u0800\u01b0\3\2\2\2\u0801\u0802\5\u0231"+ + "\u0119\2\u0802\u0803\5\u0219\u010d\2\u0803\u0804\5\u0247\u0124\2\u0804"+ + "\u0805\7a\2\2\u0805\u0806\5\u0237\u011c\2\u0806\u0807\5\u0219\u010d\2"+ + "\u0807\u0808\5\u023b\u011e\2\u0808\u0809\5\u023f\u0120\2\u0809\u080a\7"+ + "a\2\2\u080a\u080b\5\u0229\u0115\2\u080b\u080c\5\u0233\u011a\2\u080c\u080d"+ + "\5\u023f\u0120\2\u080d\u01b2\3\2\2\2\u080e\u080f\5\u0231\u0119\2\u080f"+ + "\u0810\5\u0229\u0115\2\u0810\u0811\5\u0233\u011a\2\u0811\u0812\7a\2\2"+ + "\u0812\u0813\5\u0237\u011c\2\u0813\u0814\5\u0219\u010d\2\u0814\u0815\5"+ + "\u023b\u011e\2\u0815\u0816\5\u023f\u0120\2\u0816\u0817\7a\2\2\u0817\u0818"+ + "\5\u0229\u0115\2\u0818\u0819\5\u0233\u011a\2\u0819\u081a\5\u023f\u0120"+ + "\2\u081a\u01b4\3\2\2\2\u081b\u081c\5\u0231\u0119\2\u081c\u081d\5\u0219"+ + "\u010d\2\u081d\u081e\5\u0247\u0124\2\u081e\u081f\7a\2\2\u081f\u0820\5"+ + "\u0237\u011c\2\u0820\u0821\5\u0219\u010d\2\u0821\u0822\5\u023b\u011e\2"+ + "\u0822\u0823\5\u023f\u0120\2\u0823\u0824\7a\2\2\u0824\u0825\5\u021f\u0110"+ + "\2\u0825\u0826\5\u0219\u010d\2\u0826\u0827\5\u023f\u0120\2\u0827\u0828"+ + "\5\u0221\u0111\2\u0828\u01b6\3\2\2\2\u0829\u082a\5\u0231\u0119\2\u082a"+ + "\u082b\5\u0229\u0115\2\u082b\u082c\5\u0233\u011a\2\u082c\u082d\7a\2\2"+ + "\u082d\u082e\5\u0237\u011c\2\u082e\u082f\5\u0219\u010d\2\u082f\u0830\5"+ + "\u023b\u011e\2\u0830\u0831\5\u023f\u0120\2\u0831\u0832\7a\2\2\u0832\u0833"+ + "\5\u021f\u0110\2\u0833\u0834\5\u0219\u010d\2\u0834\u0835\5\u023f\u0120"+ + "\2\u0835\u0836\5\u0221\u0111\2\u0836\u01b8\3\2\2\2\u0837\u0838\5\u0237"+ + "\u011c\2\u0838\u0839\5\u0219\u010d\2\u0839\u083a\5\u023b\u011e\2\u083a"+ + "\u083b\5\u023f\u0120\2\u083b\u083c\7a\2\2\u083c\u083d\5\u022f\u0118\2"+ + "\u083d\u083e\5\u0235\u011b\2\u083e\u083f\5\u021d\u010f\2\u083f\u01ba\3"+ + "\2\2\2\u0840\u0841\5\u023b\u011e\2\u0841\u0842\5\u0219\u010d\2\u0842\u0843"+ + "\5\u0233\u011a\2\u0843\u0844\5\u022d\u0117\2\u0844\u01bc\3\2\2\2\u0845"+ + "\u0846\5\u023b\u011e\2\u0846\u0847\5\u0235\u011b\2\u0847\u0848\5\u0245"+ + "\u0123\2\u0848\u0849\7a\2\2\u0849\u084a\5\u0233\u011a\2\u084a\u084b\5"+ + "\u0241\u0121\2\u084b\u084c\5\u0231\u0119\2\u084c\u084d\5\u021b\u010e\2"+ + "\u084d\u084e\5\u0221\u0111\2\u084e\u084f\5\u023b\u011e\2\u084f\u01be\3"+ + "\2\2\2\u0850\u0851\5\u023d\u011f\2\u0851\u0852\5\u023f\u0120\2\u0852\u0853"+ + "\5\u021f\u0110\2\u0853\u0854\5\u0221\u0111\2\u0854\u0855\5\u0243\u0122"+ + "\2\u0855\u01c0\3\2\2\2\u0856\u0857\5\u023d\u011f\2\u0857\u0858\5\u0249"+ + "\u0125\2\u0858\u0859\5\u023d\u011f\2\u0859\u085a\5\u021f\u0110\2\u085a"+ + "\u085b\5\u0219\u010d\2\u085b\u085c\5\u023f\u0120\2\u085c\u085d\5\u0221"+ + "\u0111\2\u085d\u01c2\3\2\2\2\u085e\u085f\5\u0243\u0122\2\u085f\u0860\5"+ + "\u0219\u010d\2\u0860\u0861\5\u023b\u011e\2\u0861\u0862\5\u0229\u0115\2"+ + "\u0862\u0863\5\u0219\u010d\2\u0863\u0864\5\u0233\u011a\2\u0864\u0865\5"+ + "\u021d\u010f\2\u0865\u0866\5\u0221\u0111\2\u0866\u01c4\3\2\2\2\u0867\u0868"+ + "\5\u0241\u0121\2\u0868\u0869\5\u023d\u011f\2\u0869\u086a\5\u0221\u0111"+ + "\2\u086a\u086b\5\u023b\u011e\2\u086b\u01c6\3\2\2\2\u086c\u086d\7-\2\2"+ + "\u086d\u01c8\3\2\2\2\u086e\u086f\7<\2\2\u086f\u01ca\3\2\2\2\u0870\u0871"+ + "\7.\2\2\u0871\u01cc\3\2\2\2\u0872\u0873\7~\2\2\u0873\u0874\7~\2\2\u0874"+ + "\u01ce\3\2\2\2\u0875\u0876\7\61\2\2\u0876\u01d0\3\2\2\2\u0877\u0878\7"+ + "\60\2\2\u0878\u0879\7\60\2\2\u0879\u01d2\3\2\2\2\u087a\u087b\7?\2\2\u087b"+ + "\u01d4\3\2\2\2\u087c\u087d\7?\2\2\u087d\u087e\7?\2\2\u087e\u01d6\3\2\2"+ + "\2\u087f\u0880\7>\2\2\u0880\u0881\7@\2\2\u0881\u01d8\3\2\2\2\u0882\u0883"+ + "\7#\2\2\u0883\u0884\7?\2\2\u0884\u01da\3\2\2\2\u0885\u0886\7@\2\2\u0886"+ + "\u01dc\3\2\2\2\u0887\u0888\7@\2\2\u0888\u0889\7?\2\2\u0889\u01de\3\2\2"+ + "\2\u088a\u088b\7>\2\2\u088b\u01e0\3\2\2\2\u088c\u088d\7>\2\2\u088d\u088e"+ + "\7?\2\2\u088e\u01e2\3\2\2\2\u088f\u0890\7,\2\2\u0890\u01e4\3\2\2\2\u0891"+ + "\u0892\7}\2\2\u0892\u01e6\3\2\2\2\u0893\u0894\7*\2\2\u0894\u01e8\3\2\2"+ + "\2\u0895\u0896\7\177\2\2\u0896\u01ea\3\2\2\2\u0897\u0898\7+\2\2\u0898"+ + "\u01ec\3\2\2\2\u0899\u089a\7=\2\2\u089a\u01ee\3\2\2\2\u089b\u089c\7/\2"+ + "\2\u089c\u01f0\3\2\2\2\u089d\u089e\7/\2\2\u089e\u089f\7g\2\2\u089f\u01f2"+ + "\3\2\2\2\u08a0\u08a1\7/\2\2\u08a1\u08a2\7h\2\2\u08a2\u01f4\3\2\2\2\u08a3"+ + "\u08a4\7/\2\2\u08a4\u08a5\7j\2\2\u08a5\u08a6\7k\2\2\u08a6\u08a7\7x\2\2"+ + "\u08a7\u08a8\7g\2\2\u08a8\u08a9\7e\2\2\u08a9\u08aa\7q\2\2\u08aa\u08ab"+ + "\7p\2\2\u08ab\u08ac\7h\2\2\u08ac\u01f6\3\2\2\2\u08ad\u08ae\7/\2\2\u08ae"+ + "\u08af\7k\2\2\u08af\u01f8\3\2\2\2\u08b0\u08b1\7/\2\2\u08b1\u08b2\7U\2"+ + "\2\u08b2\u01fa\3\2\2\2\u08b3\u08b4\7/\2\2\u08b4\u08b5\7j\2\2\u08b5\u01fc"+ + "\3\2\2\2\u08b6\u08c7\5\u0211\u0109\2\u08b7\u08b9\5\u0217\u010c\2\u08b8"+ + "\u08b7\3\2\2\2\u08b9\u08bc\3\2\2\2\u08ba\u08b8\3\2\2\2\u08ba\u08bb\3\2"+ + "\2\2\u08bb\u08bd\3\2\2\2\u08bc\u08ba\3\2\2\2\u08bd\u08c1\7\60\2\2\u08be"+ + "\u08c0\5\u0217\u010c\2\u08bf\u08be\3\2\2\2\u08c0\u08c3\3\2\2\2\u08c1\u08bf"+ + "\3\2\2\2\u08c1\u08c2\3\2\2\2\u08c2\u08c4\3\2\2\2\u08c3\u08c1\3\2\2\2\u08c4"+ + "\u08c6\5\u0211\u0109\2\u08c5\u08ba\3\2\2\2\u08c6\u08c9\3\2\2\2\u08c7\u08c5"+ + "\3\2\2\2\u08c7\u08c8\3\2\2\2\u08c8\u01fe\3\2\2\2\u08c9\u08c7\3\2\2\2\u08ca"+ + "\u08d2\7)\2\2\u08cb\u08cc\7)\2\2\u08cc\u08d1\7)\2\2\u08cd\u08ce\7^\2\2"+ + "\u08ce\u08d1\7)\2\2\u08cf\u08d1\n\2\2\2\u08d0\u08cb\3\2\2\2\u08d0\u08cd"+ + "\3\2\2\2\u08d0\u08cf\3\2\2\2\u08d1\u08d4\3\2\2\2\u08d2\u08d0\3\2\2\2\u08d2"+ + "\u08d3\3\2\2\2\u08d3\u08d5\3\2\2\2\u08d4\u08d2\3\2\2\2\u08d5\u08d6\7)"+ + "\2\2\u08d6\u0200\3\2\2\2\u08d7\u08dc\7$\2\2\u08d8\u08db\5\u0213\u010a"+ + "\2\u08d9\u08db\13\2\2\2\u08da\u08d8\3\2\2\2\u08da\u08d9\3\2\2\2\u08db"+ + "\u08de\3\2\2\2\u08dc\u08dd\3\2\2\2\u08dc\u08da\3\2\2\2\u08dd\u08df\3\2"+ + "\2\2\u08de\u08dc\3\2\2\2\u08df\u08e0\7$\2\2\u08e0\u0202\3\2\2\2\u08e1"+ + "\u08e3\5\u0215\u010b\2\u08e2\u08e1\3\2\2\2\u08e3\u08e4\3\2\2\2\u08e4\u08e2"+ + "\3\2\2\2\u08e4\u08e5\3\2\2\2\u08e5\u0204\3\2\2\2\u08e6\u08e8\5\u0215\u010b"+ + "\2\u08e7\u08e6\3\2\2\2\u08e8\u08e9\3\2\2\2\u08e9\u08e7\3\2\2\2\u08e9\u08ea"+ + "\3\2\2\2\u08ea\u08eb\3\2\2\2\u08eb\u08ec\7\60\2\2\u08ec\u08f0\n\3\2\2"+ + "\u08ed\u08ef\5\u0215\u010b\2\u08ee\u08ed\3\2\2\2\u08ef\u08f2\3\2\2\2\u08f0"+ + "\u08ee\3\2\2\2\u08f0\u08f1\3\2\2\2\u08f1\u08fa\3\2\2\2\u08f2\u08f0\3\2"+ + "\2\2\u08f3\u08f5\7\60\2\2\u08f4\u08f6\5\u0215\u010b\2\u08f5\u08f4\3\2"+ + "\2\2\u08f6\u08f7\3\2\2\2\u08f7\u08f5\3\2\2\2\u08f7\u08f8\3\2\2\2\u08f8"+ + "\u08fa\3\2\2\2\u08f9\u08e7\3\2\2\2\u08f9\u08f3\3\2\2\2\u08fa\u0206\3\2"+ + "\2\2\u08fb\u08fd\5\u0217\u010c\2\u08fc\u08fb\3\2\2\2\u08fd\u08fe\3\2\2"+ + "\2\u08fe\u08fc\3\2\2\2\u08fe\u08ff\3\2\2\2\u08ff\u0900\3\2\2\2\u0900\u0901"+ + "\b\u0104\2\2\u0901\u0208\3\2\2\2\u0902\u0903\7\61\2\2\u0903\u0904\7,\2"+ + "\2\u0904\u0908\3\2\2\2\u0905\u0907\13\2\2\2\u0906\u0905\3\2\2\2\u0907"+ + "\u090a\3\2\2\2\u0908\u0909\3\2\2\2\u0908\u0906\3\2\2\2\u0909\u090b\3\2"+ + "\2\2\u090a\u0908\3\2\2\2\u090b\u090c\7,\2\2\u090c\u090d\7\61\2\2\u090d"+ + "\u090e\3\2\2\2\u090e\u090f\b\u0105\3\2\u090f\u020a\3\2\2\2\u0910\u0911"+ + "\7/\2\2\u0911\u0915\7/\2\2\u0912\u0913\7\61\2\2\u0913\u0915\7\61\2\2\u0914"+ + "\u0910\3\2\2\2\u0914\u0912\3\2\2\2\u0915\u0919\3\2\2\2\u0916\u0918\13"+ + "\2\2\2\u0917\u0916\3\2\2\2\u0918\u091b\3\2\2\2\u0919\u091a\3\2\2\2\u0919"+ + "\u0917\3\2\2\2\u091a\u091d\3\2\2\2\u091b\u0919\3\2\2\2\u091c\u091e\7\17"+ + "\2\2\u091d\u091c\3\2\2\2\u091d\u091e\3\2\2\2\u091e\u091f\3\2\2\2\u091f"+ + "\u0920\7\f\2\2\u0920\u0921\3\2\2\2\u0921\u0922\b\u0106\3\2\u0922\u020c"+ + "\3\2\2\2\u0923\u0925\7\61\2\2\u0924\u0923\3\2\2\2\u0924\u0925\3\2\2\2"+ + "\u0925\u0926\3\2\2\2\u0926\u092b\5\u01fd\u00ff\2\u0927\u0928\7\61\2\2"+ + "\u0928\u092a\5\u01fd\u00ff\2\u0929\u0927\3\2\2\2\u092a\u092d\3\2\2\2\u092b"+ + "\u0929\3\2\2\2\u092b\u092c\3\2\2\2\u092c\u093e\3\2\2\2\u092d\u092b\3\2"+ + "\2\2\u092e\u092f\t\4\2\2\u092f\u0931\7<\2\2\u0930\u0932\7^\2\2\u0931\u0930"+ + "\3\2\2\2\u0931\u0932\3\2\2\2\u0932\u0934\3\2\2\2\u0933\u092e\3\2\2\2\u0933"+ + "\u0934\3\2\2\2\u0934\u0935\3\2\2\2\u0935\u093a\5\u01fd\u00ff\2\u0936\u0937"+ + "\7^\2\2\u0937\u0939\5\u01fd\u00ff\2\u0938\u0936\3\2\2\2\u0939\u093c\3"+ + "\2\2\2\u093a\u0938\3\2\2\2\u093a\u093b\3\2\2\2\u093b\u093e\3\2\2\2\u093c"+ + "\u093a\3\2\2\2\u093d\u0924\3\2\2\2\u093d\u0933\3\2\2\2\u093e\u020e\3\2"+ + "\2\2\u093f\u0943\t\4\2\2\u0940\u0943\5\u0215\u010b\2\u0941\u0943\7a\2"+ + "\2\u0942\u093f\3\2\2\2\u0942\u0940\3\2\2\2\u0942\u0941\3\2\2\2\u0943\u0946"+ + "\3\2\2\2\u0944\u0942\3\2\2\2\u0944\u0945\3\2\2\2\u0945\u0947\3\2\2\2\u0946"+ + "\u0944\3\2\2\2\u0947\u0948\7<\2\2\u0948\u0210\3\2\2\2\u0949\u094f\t\4"+ + "\2\2\u094a\u094e\t\4\2\2\u094b\u094e\5\u0215\u010b\2\u094c\u094e\7a\2"+ + "\2\u094d\u094a\3\2\2\2\u094d\u094b\3\2\2\2\u094d\u094c\3\2\2\2\u094e\u0951"+ + "\3\2\2\2\u094f\u094d\3\2\2\2\u094f\u0950\3\2\2\2\u0950\u0973\3\2\2\2\u0951"+ + "\u094f\3\2\2\2\u0952\u0956\t\5\2\2\u0953\u0957\t\4\2\2\u0954\u0957\5\u0215"+ + "\u010b\2\u0955\u0957\t\5\2\2\u0956\u0953\3\2\2\2\u0956\u0954\3\2\2\2\u0956"+ + "\u0955\3\2\2\2\u0957\u0958\3\2\2\2\u0958\u0956\3\2\2\2\u0958\u0959\3\2"+ + "\2\2\u0959\u0973\3\2\2\2\u095a\u095e\7$\2\2\u095b\u095d\13\2\2\2\u095c"+ + "\u095b\3\2\2\2\u095d\u0960\3\2\2\2\u095e\u095f\3\2\2\2\u095e\u095c\3\2"+ + "\2\2\u095f\u0961\3\2\2\2\u0960\u095e\3\2\2\2\u0961\u0973\7$\2\2\u0962"+ + "\u0966\7]\2\2\u0963\u0965\13\2\2\2\u0964\u0963\3\2\2\2\u0965\u0968\3\2"+ + "\2\2\u0966\u0967\3\2\2\2\u0966\u0964\3\2\2\2\u0967\u0969\3\2\2\2\u0968"+ + "\u0966\3\2\2\2\u0969\u0973\7_\2\2\u096a\u096e\7b\2\2\u096b\u096d\13\2"+ + "\2\2\u096c\u096b\3\2\2\2\u096d\u0970\3\2\2\2\u096e\u096f\3\2\2\2\u096e"+ + "\u096c\3\2\2\2\u096f\u0971\3\2\2\2\u0970\u096e\3\2\2\2\u0971\u0973\7b"+ + "\2\2\u0972\u0949\3\2\2\2\u0972\u0952\3\2\2\2\u0972\u095a\3\2\2\2\u0972"+ + "\u0962\3\2\2\2\u0972\u096a\3\2\2\2\u0973\u0212\3\2\2\2\u0974\u0975\7$"+ + "\2\2\u0975\u0979\7$\2\2\u0976\u0977\7^\2\2\u0977\u0979\7$\2\2\u0978\u0974"+ + "\3\2\2\2\u0978\u0976\3\2\2\2\u0979\u0214\3\2\2\2\u097a\u097b\t\6\2\2\u097b"+ + "\u0216\3\2\2\2\u097c\u097d\t\7\2\2\u097d\u0218\3\2\2\2\u097e\u097f\t\b"+ + "\2\2\u097f\u021a\3\2\2\2\u0980\u0981\t\t\2\2\u0981\u021c\3\2\2\2\u0982"+ + "\u0983\t\n\2\2\u0983\u021e\3\2\2\2\u0984\u0985\t\13\2\2\u0985\u0220\3"+ + "\2\2\2\u0986\u0987\t\f\2\2\u0987\u0222\3\2\2\2\u0988\u0989\t\r\2\2\u0989"+ + "\u0224\3\2\2\2\u098a\u098b\t\16\2\2\u098b\u0226\3\2\2\2\u098c\u098d\t"+ + "\17\2\2\u098d\u0228\3\2\2\2\u098e\u098f\t\20\2\2\u098f\u022a\3\2\2\2\u0990"+ + "\u0991\t\21\2\2\u0991\u022c\3\2\2\2\u0992\u0993\t\22\2\2\u0993\u022e\3"+ + "\2\2\2\u0994\u0995\t\23\2\2\u0995\u0230\3\2\2\2\u0996\u0997\t\24\2\2\u0997"+ + "\u0232\3\2\2\2\u0998\u0999\t\25\2\2\u0999\u0234\3\2\2\2\u099a\u099b\t"+ + "\26\2\2\u099b\u0236\3\2\2\2\u099c\u099d\t\27\2\2\u099d\u0238\3\2\2\2\u099e"+ + "\u099f\t\30\2\2\u099f\u023a\3\2\2\2\u09a0\u09a1\t\31\2\2\u09a1\u023c\3"+ + "\2\2\2\u09a2\u09a3\t\32\2\2\u09a3\u023e\3\2\2\2\u09a4\u09a5\t\33\2\2\u09a5"+ + "\u0240\3\2\2\2\u09a6\u09a7\t\34\2\2\u09a7\u0242\3\2\2\2\u09a8\u09a9\t"+ + "\35\2\2\u09a9\u0244\3\2\2\2\u09aa\u09ab\t\36\2\2\u09ab\u0246\3\2\2\2\u09ac"+ + "\u09ad\t\37\2\2\u09ad\u0248\3\2\2\2\u09ae\u09af\t \2\2\u09af\u024a\3\2"+ + "\2\2\u09b0\u09b1\t!\2\2\u09b1\u024c\3\2\2\2%\2\u08ba\u08c1\u08c7\u08d0"+ + "\u08d2\u08da\u08dc\u08e4\u08e9\u08f0\u08f7\u08f9\u08fe\u0908\u0914\u0919"+ + "\u091d\u0924\u092b\u0931\u0933\u093a\u093d\u0942\u0944\u094d\u094f\u0956"+ + "\u0958\u095e\u0966\u096e\u0972\u0978\4\b\2\2\2\3\2"; + public static final ATN _ATN = + new ATNDeserializer().deserialize(_serializedATN.toCharArray()); + static { + _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()]; + for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) { + _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i); + } + } +} \ No newline at end of file diff --git hplsql/src/main/java/org/apache/hive/hplsql/HplsqlLexer.tokens hplsql/src/main/java/org/apache/hive/hplsql/HplsqlLexer.tokens new file mode 100644 index 0000000..31d8b6e --- /dev/null +++ hplsql/src/main/java/org/apache/hive/hplsql/HplsqlLexer.tokens @@ -0,0 +1,294 @@ +T__0=1 +T__1=2 +T__2=3 +T__3=4 +T_ALL=5 +T_ALTER=6 +T_AND=7 +T_AS=8 +T_ASC=9 +T_AT=10 +T_AVG=11 +T_BATCHSIZE=12 +T_BEGIN=13 +T_BETWEEN=14 +T_BIGINT=15 +T_BREAK=16 +T_BY=17 +T_CALL=18 +T_CALLER=19 +T_CASE=20 +T_CASESPECIFIC=21 +T_CAST=22 +T_CHAR=23 +T_CHARACTER=24 +T_CLIENT=25 +T_CLOSE=26 +T_COLLECTION=27 +T_COPY=28 +T_COMMIT=29 +T_CONCAT=30 +T_CONDITION=31 +T_CONSTRAINT=32 +T_CONTINUE=33 +T_COUNT=34 +T_COUNT_BIG=35 +T_CREATE=36 +T_CREATOR=37 +T_CS=38 +T_CURRENT=39 +T_CURSOR=40 +T_DATE=41 +T_DAY=42 +T_DAYS=43 +T_DEC=44 +T_DECIMAL=45 +T_DECLARE=46 +T_DEFAULT=47 +T_DEFINED=48 +T_DEFINER=49 +T_DELETE=50 +T_DELIMITED=51 +T_DELIMITER=52 +T_DESC=53 +T_DIAGNOSTICS=54 +T_DISTINCT=55 +T_DISTRIBUTE=56 +T_DO=57 +T_DROP=58 +T_DYNAMIC=59 +T_ELSE=60 +T_ELSEIF=61 +T_ELSIF=62 +T_END=63 +T_ESCAPED=64 +T_EXCEPT=65 +T_EXEC=66 +T_EXECUTE=67 +T_EXCEPTION=68 +T_EXISTS=69 +T_EXIT=70 +T_FETCH=71 +T_FIELDS=72 +T_FILE=73 +T_FLOAT=74 +T_FOR=75 +T_FORMAT=76 +T_FOUND=77 +T_FROM=78 +T_FULL=79 +T_FUNCTION=80 +T_GET=81 +T_GLOBAL=82 +T_GRANT=83 +T_GROUP=84 +T_HANDLER=85 +T_HASH=86 +T_HAVING=87 +T_HIVE=88 +T_HOST=89 +T_IF=90 +T_IGNORE=91 +T_IMMEDIATE=92 +T_IN=93 +T_INCLUDE=94 +T_INDEX=95 +T_INNER=96 +T_INOUT=97 +T_INSERT=98 +T_INT=99 +T_INTEGER=100 +T_INTERSECT=101 +T_INTO=102 +T_INVOKER=103 +T_IS=104 +T_ITEMS=105 +T_JOIN=106 +T_KEY=107 +T_KEYS=108 +T_LANGUAGE=109 +T_LEAVE=110 +T_LEFT=111 +T_LIKE=112 +T_LIMIT=113 +T_LINES=114 +T_LOCAL=115 +T_LOGGED=116 +T_LOOP=117 +T_MAP=118 +T_MATCHED=119 +T_MAX=120 +T_MERGE=121 +T_MESSAGE_TEXT=122 +T_MICROSECOND=123 +T_MICROSECONDS=124 +T_MIN=125 +T_MULTISET=126 +T_NOT=127 +T_NULL=128 +T_NUMBER=129 +T_OBJECT=130 +T_ON=131 +T_ONLY=132 +T_OPEN=133 +T_OR=134 +T_ORDER=135 +T_OUT=136 +T_OUTER=137 +T_OVER=138 +T_OVERWRITE=139 +T_OWNER=140 +T_PARTITION=141 +T_PRESERVE=142 +T_PRIMARY=143 +T_PRINT=144 +T_PROC=145 +T_PROCEDURE=146 +T_REGEXP=147 +T_REPLACE=148 +T_RESIGNAL=149 +T_RESULT=150 +T_RETURN=151 +T_RETURNS=152 +T_REVERSE=153 +T_RIGHT=154 +T_RLIKE=155 +T_ROLLBACK=156 +T_ROW=157 +T_ROWS=158 +T_ROW_COUNT=159 +T_RR=160 +T_RS=161 +T_TRIM=162 +T_SECURITY=163 +T_SEL=164 +T_SELECT=165 +T_SET=166 +T_SETS=167 +T_SIGNAL=168 +T_SMALLINT=169 +T_SQL=170 +T_SQLEXCEPTION=171 +T_SQLINSERT=172 +T_SQLSTATE=173 +T_SQLWARNING=174 +T_STEP=175 +T_STRING=176 +T_SUBSTRING=177 +T_SUM=178 +T_TABLE=179 +T_TEMPORARY=180 +T_TERMINATED=181 +T_THEN=182 +T_TIMESTAMP=183 +T_TITLE=184 +T_TO=185 +T_TOP=186 +T_UNION=187 +T_UNIQUE=188 +T_UPDATE=189 +T_UR=190 +T_USE=191 +T_USING=192 +T_VALUE=193 +T_VALUES=194 +T_VAR=195 +T_VARCHAR=196 +T_VARCHAR2=197 +T_VOLATILE=198 +T_WHEN=199 +T_WHERE=200 +T_WHILE=201 +T_WITH=202 +T_WITHOUT=203 +T_WORK=204 +T_ACTIVITY_COUNT=205 +T_CURRENT_DATE=206 +T_CURRENT_TIMESTAMP=207 +T_CURRENT_USER=208 +T_DENSE_RANK=209 +T_FIRST_VALUE=210 +T_LAG=211 +T_LAST_VALUE=212 +T_LEAD=213 +T_MAX_PART_STRING=214 +T_MIN_PART_STRING=215 +T_MAX_PART_INT=216 +T_MIN_PART_INT=217 +T_MAX_PART_DATE=218 +T_MIN_PART_DATE=219 +T_PART_LOC=220 +T_RANK=221 +T_ROW_NUMBER=222 +T_STDEV=223 +T_SYSDATE=224 +T_VARIANCE=225 +T_USER=226 +T_ADD=227 +T_COLON=228 +T_COMMA=229 +T_PIPE=230 +T_DIV=231 +T_DOT2=232 +T_EQUAL=233 +T_EQUAL2=234 +T_NOTEQUAL=235 +T_NOTEQUAL2=236 +T_GREATER=237 +T_GREATEREQUAL=238 +T_LESS=239 +T_LESSEQUAL=240 +T_MUL=241 +T_OPEN_B=242 +T_OPEN_P=243 +T_CLOSE_B=244 +T_CLOSE_P=245 +T_SEMICOLON=246 +T_SUB=247 +P_e=248 +P_f=249 +P_hiveconf=250 +P_i=251 +P_S=252 +P_h=253 +L_ID=254 +L_S_STRING=255 +L_D_STRING=256 +L_INT=257 +L_DEC=258 +L_WS=259 +L_M_COMMENT=260 +L_S_COMMENT=261 +L_FILE=262 +L_LABEL=263 +'@'=1 +'#'=2 +'.'=3 +'!'=4 +'+'=227 +':'=228 +','=229 +'||'=230 +'/'=231 +'..'=232 +'='=233 +'=='=234 +'<>'=235 +'!='=236 +'>'=237 +'>='=238 +'<'=239 +'<='=240 +'*'=241 +'{'=242 +'('=243 +'}'=244 +')'=245 +';'=246 +'-'=247 +'-e'=248 +'-f'=249 +'-hiveconf'=250 +'-i'=251 +'-S'=252 +'-h'=253 diff --git hplsql/src/main/java/org/apache/hive/hplsql/HplsqlParser.java hplsql/src/main/java/org/apache/hive/hplsql/HplsqlParser.java new file mode 100644 index 0000000..8df1fe5 --- /dev/null +++ hplsql/src/main/java/org/apache/hive/hplsql/HplsqlParser.java @@ -0,0 +1,16531 @@ +// Generated from ..\src\main\java\org\apache\hive\hplsql\Hplsql.q by ANTLR 4.5 + +package org.apache.hive.hplsql; + +import org.antlr.v4.runtime.atn.*; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.*; +import org.antlr.v4.runtime.misc.*; +import org.antlr.v4.runtime.tree.*; +import java.util.List; +import java.util.Iterator; +import java.util.ArrayList; + +@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"}) +public class HplsqlParser extends Parser { + static { RuntimeMetaData.checkVersion("4.5", RuntimeMetaData.VERSION); } + + protected static final DFA[] _decisionToDFA; + protected static final PredictionContextCache _sharedContextCache = + new PredictionContextCache(); + public static final int + T__0=1, T__1=2, T__2=3, T__3=4, T_ALL=5, T_ALTER=6, T_AND=7, T_AS=8, T_ASC=9, + T_AT=10, T_AVG=11, T_BATCHSIZE=12, T_BEGIN=13, T_BETWEEN=14, T_BIGINT=15, + T_BREAK=16, T_BY=17, T_CALL=18, T_CALLER=19, T_CASE=20, T_CASESPECIFIC=21, + T_CAST=22, T_CHAR=23, T_CHARACTER=24, T_CLIENT=25, T_CLOSE=26, T_COLLECTION=27, + T_COPY=28, T_COMMIT=29, T_CONCAT=30, T_CONDITION=31, T_CONSTRAINT=32, + T_CONTINUE=33, T_COUNT=34, T_COUNT_BIG=35, T_CREATE=36, T_CREATOR=37, + T_CS=38, T_CURRENT=39, T_CURSOR=40, T_DATE=41, T_DAY=42, T_DAYS=43, T_DEC=44, + T_DECIMAL=45, T_DECLARE=46, T_DEFAULT=47, T_DEFINED=48, T_DEFINER=49, + T_DELETE=50, T_DELIMITED=51, T_DELIMITER=52, T_DESC=53, T_DIAGNOSTICS=54, + T_DISTINCT=55, T_DISTRIBUTE=56, T_DO=57, T_DROP=58, T_DYNAMIC=59, T_ELSE=60, + T_ELSEIF=61, T_ELSIF=62, T_END=63, T_ESCAPED=64, T_EXCEPT=65, T_EXEC=66, + T_EXECUTE=67, T_EXCEPTION=68, T_EXISTS=69, T_EXIT=70, T_FETCH=71, T_FIELDS=72, + T_FILE=73, T_FLOAT=74, T_FOR=75, T_FORMAT=76, T_FOUND=77, T_FROM=78, T_FULL=79, + T_FUNCTION=80, T_GET=81, T_GLOBAL=82, T_GRANT=83, T_GROUP=84, T_HANDLER=85, + T_HASH=86, T_HAVING=87, T_HIVE=88, T_HOST=89, T_IF=90, T_IGNORE=91, T_IMMEDIATE=92, + T_IN=93, T_INCLUDE=94, T_INDEX=95, T_INNER=96, T_INOUT=97, T_INSERT=98, + T_INT=99, T_INTEGER=100, T_INTERSECT=101, T_INTO=102, T_INVOKER=103, T_IS=104, + T_ITEMS=105, T_JOIN=106, T_KEY=107, T_KEYS=108, T_LANGUAGE=109, T_LEAVE=110, + T_LEFT=111, T_LIKE=112, T_LIMIT=113, T_LINES=114, T_LOCAL=115, T_LOGGED=116, + T_LOOP=117, T_MAP=118, T_MATCHED=119, T_MAX=120, T_MERGE=121, T_MESSAGE_TEXT=122, + T_MICROSECOND=123, T_MICROSECONDS=124, T_MIN=125, T_MULTISET=126, T_NOT=127, + T_NULL=128, T_NUMBER=129, T_OBJECT=130, T_ON=131, T_ONLY=132, T_OPEN=133, + T_OR=134, T_ORDER=135, T_OUT=136, T_OUTER=137, T_OVER=138, T_OVERWRITE=139, + T_OWNER=140, T_PARTITION=141, T_PRESERVE=142, T_PRIMARY=143, T_PRINT=144, + T_PROC=145, T_PROCEDURE=146, T_REGEXP=147, T_REPLACE=148, T_RESIGNAL=149, + T_RESULT=150, T_RETURN=151, T_RETURNS=152, T_REVERSE=153, T_RIGHT=154, + T_RLIKE=155, T_ROLLBACK=156, T_ROW=157, T_ROWS=158, T_ROW_COUNT=159, T_RR=160, + T_RS=161, T_TRIM=162, T_SECURITY=163, T_SEL=164, T_SELECT=165, T_SET=166, + T_SETS=167, T_SIGNAL=168, T_SMALLINT=169, T_SQL=170, T_SQLEXCEPTION=171, + T_SQLINSERT=172, T_SQLSTATE=173, T_SQLWARNING=174, T_STEP=175, T_STRING=176, + T_SUBSTRING=177, T_SUM=178, T_TABLE=179, T_TEMPORARY=180, T_TERMINATED=181, + T_THEN=182, T_TIMESTAMP=183, T_TITLE=184, T_TO=185, T_TOP=186, T_UNION=187, + T_UNIQUE=188, T_UPDATE=189, T_UR=190, T_USE=191, T_USING=192, T_VALUE=193, + T_VALUES=194, T_VAR=195, T_VARCHAR=196, T_VARCHAR2=197, T_VOLATILE=198, + T_WHEN=199, T_WHERE=200, T_WHILE=201, T_WITH=202, T_WITHOUT=203, T_WORK=204, + T_ACTIVITY_COUNT=205, T_CURRENT_DATE=206, T_CURRENT_TIMESTAMP=207, T_CURRENT_USER=208, + T_DENSE_RANK=209, T_FIRST_VALUE=210, T_LAG=211, T_LAST_VALUE=212, T_LEAD=213, + T_MAX_PART_STRING=214, T_MIN_PART_STRING=215, T_MAX_PART_INT=216, T_MIN_PART_INT=217, + T_MAX_PART_DATE=218, T_MIN_PART_DATE=219, T_PART_LOC=220, T_RANK=221, + T_ROW_NUMBER=222, T_STDEV=223, T_SYSDATE=224, T_VARIANCE=225, T_USER=226, + T_ADD=227, T_COLON=228, T_COMMA=229, T_PIPE=230, T_DIV=231, T_DOT2=232, + T_EQUAL=233, T_EQUAL2=234, T_NOTEQUAL=235, T_NOTEQUAL2=236, T_GREATER=237, + T_GREATEREQUAL=238, T_LESS=239, T_LESSEQUAL=240, T_MUL=241, T_OPEN_B=242, + T_OPEN_P=243, T_CLOSE_B=244, T_CLOSE_P=245, T_SEMICOLON=246, T_SUB=247, + P_e=248, P_f=249, P_hiveconf=250, P_i=251, P_S=252, P_h=253, L_ID=254, + L_S_STRING=255, L_D_STRING=256, L_INT=257, L_DEC=258, L_WS=259, L_M_COMMENT=260, + L_S_COMMENT=261, L_FILE=262, L_LABEL=263; + public static final int + RULE_program = 0, RULE_block = 1, RULE_begin_end_block = 2, RULE_single_block_stmt = 3, + RULE_stmt = 4, RULE_semicolon_stmt = 5, RULE_exception_block = 6, RULE_exception_block_item = 7, + RULE_expr_stmt = 8, RULE_assignment_stmt = 9, RULE_assignment_stmt_item = 10, + RULE_assignment_stmt_single_item = 11, RULE_assignment_stmt_multiple_item = 12, + RULE_assignment_stmt_select_item = 13, RULE_break_stmt = 14, RULE_call_stmt = 15, + RULE_declare_stmt = 16, RULE_declare_block = 17, RULE_declare_stmt_item = 18, + RULE_declare_var_item = 19, RULE_declare_condition_item = 20, RULE_declare_cursor_item = 21, + RULE_declare_cursor_return = 22, RULE_declare_handler_item = 23, RULE_declare_temporary_table_item = 24, + RULE_create_table_stmt = 25, RULE_create_local_temp_table_stmt = 26, RULE_create_table_columns = 27, + RULE_create_table_columns_item = 28, RULE_create_table_column_inline_cons = 29, + RULE_create_table_column_cons = 30, RULE_create_table_options = 31, RULE_create_table_options_item = 32, + RULE_create_table_options_db2_item = 33, RULE_create_table_options_hive_item = 34, + RULE_create_table_hive_row_format = 35, RULE_create_table_hive_row_format_fields = 36, + RULE_dtype = 37, RULE_dtype_len = 38, RULE_dtype_attr = 39, RULE_dtype_default = 40, + RULE_create_function_stmt = 41, RULE_create_function_return = 42, RULE_create_procedure_stmt = 43, + RULE_create_routine_params = 44, RULE_create_routine_param_item = 45, + RULE_create_routine_options = 46, RULE_create_routine_option = 47, RULE_drop_stmt = 48, + RULE_exec_stmt = 49, RULE_if_stmt = 50, RULE_if_plsql_stmt = 51, RULE_if_tsql_stmt = 52, + RULE_elseif_block = 53, RULE_else_block = 54, RULE_include_stmt = 55, + RULE_insert_stmt = 56, RULE_insert_stmt_cols = 57, RULE_insert_stmt_rows = 58, + RULE_insert_stmt_row = 59, RULE_exit_stmt = 60, RULE_get_diag_stmt = 61, + RULE_get_diag_stmt_item = 62, RULE_get_diag_stmt_exception_item = 63, + RULE_get_diag_stmt_rowcount_item = 64, RULE_grant_stmt = 65, RULE_grant_stmt_item = 66, + RULE_leave_stmt = 67, RULE_map_object_stmt = 68, RULE_open_stmt = 69, + RULE_fetch_stmt = 70, RULE_close_stmt = 71, RULE_copy_from_local_stmt = 72, + RULE_copy_stmt = 73, RULE_copy_source = 74, RULE_copy_target = 75, RULE_copy_option = 76, + RULE_copy_file_option = 77, RULE_commit_stmt = 78, RULE_create_index_stmt = 79, + RULE_create_index_col = 80, RULE_print_stmt = 81, RULE_resignal_stmt = 82, + RULE_return_stmt = 83, RULE_rollback_stmt = 84, RULE_signal_stmt = 85, + RULE_use_stmt = 86, RULE_values_into_stmt = 87, RULE_while_stmt = 88, + RULE_for_cursor_stmt = 89, RULE_for_range_stmt = 90, RULE_label = 91, + RULE_using_clause = 92, RULE_select_stmt = 93, RULE_cte_select_stmt = 94, + RULE_cte_select_stmt_item = 95, RULE_cte_select_cols = 96, RULE_fullselect_stmt = 97, + RULE_fullselect_stmt_item = 98, RULE_fullselect_set_clause = 99, RULE_subselect_stmt = 100, + RULE_select_list = 101, RULE_select_list_set = 102, RULE_select_list_limit = 103, + RULE_select_list_item = 104, RULE_select_list_alias = 105, RULE_select_list_asterisk = 106, + RULE_into_clause = 107, RULE_from_clause = 108, RULE_from_table_clause = 109, + RULE_from_table_name_clause = 110, RULE_from_subselect_clause = 111, RULE_from_join_clause = 112, + RULE_from_join_type_clause = 113, RULE_from_table_values_clause = 114, + RULE_from_table_values_row = 115, RULE_from_alias_clause = 116, RULE_table_name = 117, + RULE_where_clause = 118, RULE_group_by_clause = 119, RULE_having_clause = 120, + RULE_order_by_clause = 121, RULE_select_options = 122, RULE_select_options_item = 123, + RULE_update_stmt = 124, RULE_update_table = 125, RULE_update_upsert = 126, + RULE_merge_stmt = 127, RULE_merge_table = 128, RULE_merge_condition = 129, + RULE_merge_action = 130, RULE_delete_stmt = 131, RULE_bool_expr = 132, + RULE_bool_expr_atom = 133, RULE_bool_expr_unary = 134, RULE_bool_expr_single_in = 135, + RULE_bool_expr_multi_in = 136, RULE_bool_expr_binary = 137, RULE_bool_expr_logical_operator = 138, + RULE_bool_expr_binary_operator = 139, RULE_expr = 140, RULE_expr_atom = 141, + RULE_interval_item = 142, RULE_interval_number = 143, RULE_expr_concat = 144, + RULE_expr_concat_item = 145, RULE_expr_case = 146, RULE_expr_case_simple = 147, + RULE_expr_case_searched = 148, RULE_expr_agg_window_func = 149, RULE_expr_func_all_distinct = 150, + RULE_expr_func_over_clause = 151, RULE_expr_func_partition_by_clause = 152, + RULE_expr_spec_func = 153, RULE_expr_func = 154, RULE_expr_func_params = 155, + RULE_hive = 156, RULE_hive_item = 157, RULE_host = 158, RULE_host_cmd = 159, + RULE_host_stmt = 160, RULE_file_name = 161, RULE_date_literal = 162, RULE_timestamp_literal = 163, + RULE_ident = 164, RULE_string = 165, RULE_int_number = 166, RULE_dec_number = 167, + RULE_null_const = 168, RULE_non_reserved_words = 169; + public static final String[] ruleNames = { + "program", "block", "begin_end_block", "single_block_stmt", "stmt", "semicolon_stmt", + "exception_block", "exception_block_item", "expr_stmt", "assignment_stmt", + "assignment_stmt_item", "assignment_stmt_single_item", "assignment_stmt_multiple_item", + "assignment_stmt_select_item", "break_stmt", "call_stmt", "declare_stmt", + "declare_block", "declare_stmt_item", "declare_var_item", "declare_condition_item", + "declare_cursor_item", "declare_cursor_return", "declare_handler_item", + "declare_temporary_table_item", "create_table_stmt", "create_local_temp_table_stmt", + "create_table_columns", "create_table_columns_item", "create_table_column_inline_cons", + "create_table_column_cons", "create_table_options", "create_table_options_item", + "create_table_options_db2_item", "create_table_options_hive_item", "create_table_hive_row_format", + "create_table_hive_row_format_fields", "dtype", "dtype_len", "dtype_attr", + "dtype_default", "create_function_stmt", "create_function_return", "create_procedure_stmt", + "create_routine_params", "create_routine_param_item", "create_routine_options", + "create_routine_option", "drop_stmt", "exec_stmt", "if_stmt", "if_plsql_stmt", + "if_tsql_stmt", "elseif_block", "else_block", "include_stmt", "insert_stmt", + "insert_stmt_cols", "insert_stmt_rows", "insert_stmt_row", "exit_stmt", + "get_diag_stmt", "get_diag_stmt_item", "get_diag_stmt_exception_item", + "get_diag_stmt_rowcount_item", "grant_stmt", "grant_stmt_item", "leave_stmt", + "map_object_stmt", "open_stmt", "fetch_stmt", "close_stmt", "copy_from_local_stmt", + "copy_stmt", "copy_source", "copy_target", "copy_option", "copy_file_option", + "commit_stmt", "create_index_stmt", "create_index_col", "print_stmt", + "resignal_stmt", "return_stmt", "rollback_stmt", "signal_stmt", "use_stmt", + "values_into_stmt", "while_stmt", "for_cursor_stmt", "for_range_stmt", + "label", "using_clause", "select_stmt", "cte_select_stmt", "cte_select_stmt_item", + "cte_select_cols", "fullselect_stmt", "fullselect_stmt_item", "fullselect_set_clause", + "subselect_stmt", "select_list", "select_list_set", "select_list_limit", + "select_list_item", "select_list_alias", "select_list_asterisk", "into_clause", + "from_clause", "from_table_clause", "from_table_name_clause", "from_subselect_clause", + "from_join_clause", "from_join_type_clause", "from_table_values_clause", + "from_table_values_row", "from_alias_clause", "table_name", "where_clause", + "group_by_clause", "having_clause", "order_by_clause", "select_options", + "select_options_item", "update_stmt", "update_table", "update_upsert", + "merge_stmt", "merge_table", "merge_condition", "merge_action", "delete_stmt", + "bool_expr", "bool_expr_atom", "bool_expr_unary", "bool_expr_single_in", + "bool_expr_multi_in", "bool_expr_binary", "bool_expr_logical_operator", + "bool_expr_binary_operator", "expr", "expr_atom", "interval_item", "interval_number", + "expr_concat", "expr_concat_item", "expr_case", "expr_case_simple", "expr_case_searched", + "expr_agg_window_func", "expr_func_all_distinct", "expr_func_over_clause", + "expr_func_partition_by_clause", "expr_spec_func", "expr_func", "expr_func_params", + "hive", "hive_item", "host", "host_cmd", "host_stmt", "file_name", "date_literal", + "timestamp_literal", "ident", "string", "int_number", "dec_number", "null_const", + "non_reserved_words" + }; + + private static final String[] _LITERAL_NAMES = { + null, "'@'", "'#'", "'.'", "'!'", null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, + "'+'", "':'", "','", "'||'", "'/'", "'..'", "'='", "'=='", "'<>'", "'!='", + "'>'", "'>='", "'<'", "'<='", "'*'", "'{'", "'('", "'}'", "')'", "';'", + "'-'", "'-e'", "'-f'", "'-hiveconf'", "'-i'", "'-S'", "'-h'" + }; + private static final String[] _SYMBOLIC_NAMES = { + null, null, null, null, null, "T_ALL", "T_ALTER", "T_AND", "T_AS", "T_ASC", + "T_AT", "T_AVG", "T_BATCHSIZE", "T_BEGIN", "T_BETWEEN", "T_BIGINT", "T_BREAK", + "T_BY", "T_CALL", "T_CALLER", "T_CASE", "T_CASESPECIFIC", "T_CAST", "T_CHAR", + "T_CHARACTER", "T_CLIENT", "T_CLOSE", "T_COLLECTION", "T_COPY", "T_COMMIT", + "T_CONCAT", "T_CONDITION", "T_CONSTRAINT", "T_CONTINUE", "T_COUNT", "T_COUNT_BIG", + "T_CREATE", "T_CREATOR", "T_CS", "T_CURRENT", "T_CURSOR", "T_DATE", "T_DAY", + "T_DAYS", "T_DEC", "T_DECIMAL", "T_DECLARE", "T_DEFAULT", "T_DEFINED", + "T_DEFINER", "T_DELETE", "T_DELIMITED", "T_DELIMITER", "T_DESC", "T_DIAGNOSTICS", + "T_DISTINCT", "T_DISTRIBUTE", "T_DO", "T_DROP", "T_DYNAMIC", "T_ELSE", + "T_ELSEIF", "T_ELSIF", "T_END", "T_ESCAPED", "T_EXCEPT", "T_EXEC", "T_EXECUTE", + "T_EXCEPTION", "T_EXISTS", "T_EXIT", "T_FETCH", "T_FIELDS", "T_FILE", + "T_FLOAT", "T_FOR", "T_FORMAT", "T_FOUND", "T_FROM", "T_FULL", "T_FUNCTION", + "T_GET", "T_GLOBAL", "T_GRANT", "T_GROUP", "T_HANDLER", "T_HASH", "T_HAVING", + "T_HIVE", "T_HOST", "T_IF", "T_IGNORE", "T_IMMEDIATE", "T_IN", "T_INCLUDE", + "T_INDEX", "T_INNER", "T_INOUT", "T_INSERT", "T_INT", "T_INTEGER", "T_INTERSECT", + "T_INTO", "T_INVOKER", "T_IS", "T_ITEMS", "T_JOIN", "T_KEY", "T_KEYS", + "T_LANGUAGE", "T_LEAVE", "T_LEFT", "T_LIKE", "T_LIMIT", "T_LINES", "T_LOCAL", + "T_LOGGED", "T_LOOP", "T_MAP", "T_MATCHED", "T_MAX", "T_MERGE", "T_MESSAGE_TEXT", + "T_MICROSECOND", "T_MICROSECONDS", "T_MIN", "T_MULTISET", "T_NOT", "T_NULL", + "T_NUMBER", "T_OBJECT", "T_ON", "T_ONLY", "T_OPEN", "T_OR", "T_ORDER", + "T_OUT", "T_OUTER", "T_OVER", "T_OVERWRITE", "T_OWNER", "T_PARTITION", + "T_PRESERVE", "T_PRIMARY", "T_PRINT", "T_PROC", "T_PROCEDURE", "T_REGEXP", + "T_REPLACE", "T_RESIGNAL", "T_RESULT", "T_RETURN", "T_RETURNS", "T_REVERSE", + "T_RIGHT", "T_RLIKE", "T_ROLLBACK", "T_ROW", "T_ROWS", "T_ROW_COUNT", + "T_RR", "T_RS", "T_TRIM", "T_SECURITY", "T_SEL", "T_SELECT", "T_SET", + "T_SETS", "T_SIGNAL", "T_SMALLINT", "T_SQL", "T_SQLEXCEPTION", "T_SQLINSERT", + "T_SQLSTATE", "T_SQLWARNING", "T_STEP", "T_STRING", "T_SUBSTRING", "T_SUM", + "T_TABLE", "T_TEMPORARY", "T_TERMINATED", "T_THEN", "T_TIMESTAMP", "T_TITLE", + "T_TO", "T_TOP", "T_UNION", "T_UNIQUE", "T_UPDATE", "T_UR", "T_USE", "T_USING", + "T_VALUE", "T_VALUES", "T_VAR", "T_VARCHAR", "T_VARCHAR2", "T_VOLATILE", + "T_WHEN", "T_WHERE", "T_WHILE", "T_WITH", "T_WITHOUT", "T_WORK", "T_ACTIVITY_COUNT", + "T_CURRENT_DATE", "T_CURRENT_TIMESTAMP", "T_CURRENT_USER", "T_DENSE_RANK", + "T_FIRST_VALUE", "T_LAG", "T_LAST_VALUE", "T_LEAD", "T_MAX_PART_STRING", + "T_MIN_PART_STRING", "T_MAX_PART_INT", "T_MIN_PART_INT", "T_MAX_PART_DATE", + "T_MIN_PART_DATE", "T_PART_LOC", "T_RANK", "T_ROW_NUMBER", "T_STDEV", + "T_SYSDATE", "T_VARIANCE", "T_USER", "T_ADD", "T_COLON", "T_COMMA", "T_PIPE", + "T_DIV", "T_DOT2", "T_EQUAL", "T_EQUAL2", "T_NOTEQUAL", "T_NOTEQUAL2", + "T_GREATER", "T_GREATEREQUAL", "T_LESS", "T_LESSEQUAL", "T_MUL", "T_OPEN_B", + "T_OPEN_P", "T_CLOSE_B", "T_CLOSE_P", "T_SEMICOLON", "T_SUB", "P_e", "P_f", + "P_hiveconf", "P_i", "P_S", "P_h", "L_ID", "L_S_STRING", "L_D_STRING", + "L_INT", "L_DEC", "L_WS", "L_M_COMMENT", "L_S_COMMENT", "L_FILE", "L_LABEL" + }; + public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); + + /** + * @deprecated Use {@link #VOCABULARY} instead. + */ + @Deprecated + public static final String[] tokenNames; + static { + tokenNames = new String[_SYMBOLIC_NAMES.length]; + for (int i = 0; i < tokenNames.length; i++) { + tokenNames[i] = VOCABULARY.getLiteralName(i); + if (tokenNames[i] == null) { + tokenNames[i] = VOCABULARY.getSymbolicName(i); + } + + if (tokenNames[i] == null) { + tokenNames[i] = ""; + } + } + } + + @Override + @Deprecated + public String[] getTokenNames() { + return tokenNames; + } + + @Override + + public Vocabulary getVocabulary() { + return VOCABULARY; + } + + @Override + public String getGrammarFileName() { return "Hplsql.q"; } + + @Override + public String[] getRuleNames() { return ruleNames; } + + @Override + public String getSerializedATN() { return _serializedATN; } + + @Override + public ATN getATN() { return _ATN; } + + public HplsqlParser(TokenStream input) { + super(input); + _interp = new ParserATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache); + } + public static class ProgramContext extends ParserRuleContext { + public BlockContext block() { + return getRuleContext(BlockContext.class,0); + } + public ProgramContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_program; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitProgram(this); + else return visitor.visitChildren(this); + } + } + + public final ProgramContext program() throws RecognitionException { + ProgramContext _localctx = new ProgramContext(_ctx, getState()); + enterRule(_localctx, 0, RULE_program); + try { + enterOuterAlt(_localctx, 1); + { + setState(340); + block(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class BlockContext extends ParserRuleContext { + public List begin_end_block() { + return getRuleContexts(Begin_end_blockContext.class); + } + public Begin_end_blockContext begin_end_block(int i) { + return getRuleContext(Begin_end_blockContext.class,i); + } + public List stmt() { + return getRuleContexts(StmtContext.class); + } + public StmtContext stmt(int i) { + return getRuleContext(StmtContext.class,i); + } + public BlockContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_block; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitBlock(this); + else return visitor.visitChildren(this); + } + } + + public final BlockContext block() throws RecognitionException { + BlockContext _localctx = new BlockContext(_ctx, getState()); + enterRule(_localctx, 2, RULE_block); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(344); + _errHandler.sync(this); + _alt = 1; + do { + switch (_alt) { + case 1: + { + setState(344); + switch ( getInterpreter().adaptivePredict(_input,0,_ctx) ) { + case 1: + { + setState(342); + begin_end_block(); + } + break; + case 2: + { + setState(343); + stmt(); + } + break; + } + } + break; + default: + throw new NoViableAltException(this); + } + setState(346); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,1,_ctx); + } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Begin_end_blockContext extends ParserRuleContext { + public TerminalNode T_BEGIN() { return getToken(HplsqlParser.T_BEGIN, 0); } + public BlockContext block() { + return getRuleContext(BlockContext.class,0); + } + public TerminalNode T_END() { return getToken(HplsqlParser.T_END, 0); } + public Declare_blockContext declare_block() { + return getRuleContext(Declare_blockContext.class,0); + } + public Exception_blockContext exception_block() { + return getRuleContext(Exception_blockContext.class,0); + } + public Begin_end_blockContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_begin_end_block; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitBegin_end_block(this); + else return visitor.visitChildren(this); + } + } + + public final Begin_end_blockContext begin_end_block() throws RecognitionException { + Begin_end_blockContext _localctx = new Begin_end_blockContext(_ctx, getState()); + enterRule(_localctx, 4, RULE_begin_end_block); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(349); + _la = _input.LA(1); + if (_la==T_DECLARE) { + { + setState(348); + declare_block(); + } + } + + setState(351); + match(T_BEGIN); + setState(352); + block(); + setState(354); + _la = _input.LA(1); + if (_la==T_EXCEPTION) { + { + setState(353); + exception_block(); + } + } + + setState(356); + match(T_END); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Single_block_stmtContext extends ParserRuleContext { + public TerminalNode T_BEGIN() { return getToken(HplsqlParser.T_BEGIN, 0); } + public BlockContext block() { + return getRuleContext(BlockContext.class,0); + } + public TerminalNode T_END() { return getToken(HplsqlParser.T_END, 0); } + public StmtContext stmt() { + return getRuleContext(StmtContext.class,0); + } + public TerminalNode T_SEMICOLON() { return getToken(HplsqlParser.T_SEMICOLON, 0); } + public Single_block_stmtContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_single_block_stmt; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitSingle_block_stmt(this); + else return visitor.visitChildren(this); + } + } + + public final Single_block_stmtContext single_block_stmt() throws RecognitionException { + Single_block_stmtContext _localctx = new Single_block_stmtContext(_ctx, getState()); + enterRule(_localctx, 6, RULE_single_block_stmt); + try { + setState(366); + switch ( getInterpreter().adaptivePredict(_input,5,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(358); + match(T_BEGIN); + setState(359); + block(); + setState(360); + match(T_END); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(362); + stmt(); + setState(364); + switch ( getInterpreter().adaptivePredict(_input,4,_ctx) ) { + case 1: + { + setState(363); + match(T_SEMICOLON); + } + break; + } + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class StmtContext extends ParserRuleContext { + public Assignment_stmtContext assignment_stmt() { + return getRuleContext(Assignment_stmtContext.class,0); + } + public Break_stmtContext break_stmt() { + return getRuleContext(Break_stmtContext.class,0); + } + public Call_stmtContext call_stmt() { + return getRuleContext(Call_stmtContext.class,0); + } + public Close_stmtContext close_stmt() { + return getRuleContext(Close_stmtContext.class,0); + } + public Copy_from_local_stmtContext copy_from_local_stmt() { + return getRuleContext(Copy_from_local_stmtContext.class,0); + } + public Copy_stmtContext copy_stmt() { + return getRuleContext(Copy_stmtContext.class,0); + } + public Commit_stmtContext commit_stmt() { + return getRuleContext(Commit_stmtContext.class,0); + } + public Create_function_stmtContext create_function_stmt() { + return getRuleContext(Create_function_stmtContext.class,0); + } + public Create_index_stmtContext create_index_stmt() { + return getRuleContext(Create_index_stmtContext.class,0); + } + public Create_local_temp_table_stmtContext create_local_temp_table_stmt() { + return getRuleContext(Create_local_temp_table_stmtContext.class,0); + } + public Create_procedure_stmtContext create_procedure_stmt() { + return getRuleContext(Create_procedure_stmtContext.class,0); + } + public Create_table_stmtContext create_table_stmt() { + return getRuleContext(Create_table_stmtContext.class,0); + } + public Declare_stmtContext declare_stmt() { + return getRuleContext(Declare_stmtContext.class,0); + } + public Delete_stmtContext delete_stmt() { + return getRuleContext(Delete_stmtContext.class,0); + } + public Drop_stmtContext drop_stmt() { + return getRuleContext(Drop_stmtContext.class,0); + } + public Exec_stmtContext exec_stmt() { + return getRuleContext(Exec_stmtContext.class,0); + } + public Exit_stmtContext exit_stmt() { + return getRuleContext(Exit_stmtContext.class,0); + } + public Fetch_stmtContext fetch_stmt() { + return getRuleContext(Fetch_stmtContext.class,0); + } + public For_cursor_stmtContext for_cursor_stmt() { + return getRuleContext(For_cursor_stmtContext.class,0); + } + public For_range_stmtContext for_range_stmt() { + return getRuleContext(For_range_stmtContext.class,0); + } + public If_stmtContext if_stmt() { + return getRuleContext(If_stmtContext.class,0); + } + public Include_stmtContext include_stmt() { + return getRuleContext(Include_stmtContext.class,0); + } + public Insert_stmtContext insert_stmt() { + return getRuleContext(Insert_stmtContext.class,0); + } + public Get_diag_stmtContext get_diag_stmt() { + return getRuleContext(Get_diag_stmtContext.class,0); + } + public Grant_stmtContext grant_stmt() { + return getRuleContext(Grant_stmtContext.class,0); + } + public Leave_stmtContext leave_stmt() { + return getRuleContext(Leave_stmtContext.class,0); + } + public Map_object_stmtContext map_object_stmt() { + return getRuleContext(Map_object_stmtContext.class,0); + } + public Merge_stmtContext merge_stmt() { + return getRuleContext(Merge_stmtContext.class,0); + } + public Open_stmtContext open_stmt() { + return getRuleContext(Open_stmtContext.class,0); + } + public Print_stmtContext print_stmt() { + return getRuleContext(Print_stmtContext.class,0); + } + public Resignal_stmtContext resignal_stmt() { + return getRuleContext(Resignal_stmtContext.class,0); + } + public Return_stmtContext return_stmt() { + return getRuleContext(Return_stmtContext.class,0); + } + public Rollback_stmtContext rollback_stmt() { + return getRuleContext(Rollback_stmtContext.class,0); + } + public Select_stmtContext select_stmt() { + return getRuleContext(Select_stmtContext.class,0); + } + public Signal_stmtContext signal_stmt() { + return getRuleContext(Signal_stmtContext.class,0); + } + public Update_stmtContext update_stmt() { + return getRuleContext(Update_stmtContext.class,0); + } + public Use_stmtContext use_stmt() { + return getRuleContext(Use_stmtContext.class,0); + } + public Values_into_stmtContext values_into_stmt() { + return getRuleContext(Values_into_stmtContext.class,0); + } + public While_stmtContext while_stmt() { + return getRuleContext(While_stmtContext.class,0); + } + public LabelContext label() { + return getRuleContext(LabelContext.class,0); + } + public HiveContext hive() { + return getRuleContext(HiveContext.class,0); + } + public HostContext host() { + return getRuleContext(HostContext.class,0); + } + public Expr_stmtContext expr_stmt() { + return getRuleContext(Expr_stmtContext.class,0); + } + public Semicolon_stmtContext semicolon_stmt() { + return getRuleContext(Semicolon_stmtContext.class,0); + } + public StmtContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_stmt; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitStmt(this); + else return visitor.visitChildren(this); + } + } + + public final StmtContext stmt() throws RecognitionException { + StmtContext _localctx = new StmtContext(_ctx, getState()); + enterRule(_localctx, 8, RULE_stmt); + try { + setState(412); + switch ( getInterpreter().adaptivePredict(_input,6,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(368); + assignment_stmt(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(369); + break_stmt(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(370); + call_stmt(); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(371); + close_stmt(); + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(372); + copy_from_local_stmt(); + } + break; + case 6: + enterOuterAlt(_localctx, 6); + { + setState(373); + copy_stmt(); + } + break; + case 7: + enterOuterAlt(_localctx, 7); + { + setState(374); + commit_stmt(); + } + break; + case 8: + enterOuterAlt(_localctx, 8); + { + setState(375); + create_function_stmt(); + } + break; + case 9: + enterOuterAlt(_localctx, 9); + { + setState(376); + create_index_stmt(); + } + break; + case 10: + enterOuterAlt(_localctx, 10); + { + setState(377); + create_local_temp_table_stmt(); + } + break; + case 11: + enterOuterAlt(_localctx, 11); + { + setState(378); + create_procedure_stmt(); + } + break; + case 12: + enterOuterAlt(_localctx, 12); + { + setState(379); + create_table_stmt(); + } + break; + case 13: + enterOuterAlt(_localctx, 13); + { + setState(380); + declare_stmt(); + } + break; + case 14: + enterOuterAlt(_localctx, 14); + { + setState(381); + delete_stmt(); + } + break; + case 15: + enterOuterAlt(_localctx, 15); + { + setState(382); + drop_stmt(); + } + break; + case 16: + enterOuterAlt(_localctx, 16); + { + setState(383); + exec_stmt(); + } + break; + case 17: + enterOuterAlt(_localctx, 17); + { + setState(384); + exit_stmt(); + } + break; + case 18: + enterOuterAlt(_localctx, 18); + { + setState(385); + fetch_stmt(); + } + break; + case 19: + enterOuterAlt(_localctx, 19); + { + setState(386); + for_cursor_stmt(); + } + break; + case 20: + enterOuterAlt(_localctx, 20); + { + setState(387); + for_range_stmt(); + } + break; + case 21: + enterOuterAlt(_localctx, 21); + { + setState(388); + if_stmt(); + } + break; + case 22: + enterOuterAlt(_localctx, 22); + { + setState(389); + include_stmt(); + } + break; + case 23: + enterOuterAlt(_localctx, 23); + { + setState(390); + insert_stmt(); + } + break; + case 24: + enterOuterAlt(_localctx, 24); + { + setState(391); + get_diag_stmt(); + } + break; + case 25: + enterOuterAlt(_localctx, 25); + { + setState(392); + grant_stmt(); + } + break; + case 26: + enterOuterAlt(_localctx, 26); + { + setState(393); + leave_stmt(); + } + break; + case 27: + enterOuterAlt(_localctx, 27); + { + setState(394); + map_object_stmt(); + } + break; + case 28: + enterOuterAlt(_localctx, 28); + { + setState(395); + merge_stmt(); + } + break; + case 29: + enterOuterAlt(_localctx, 29); + { + setState(396); + open_stmt(); + } + break; + case 30: + enterOuterAlt(_localctx, 30); + { + setState(397); + print_stmt(); + } + break; + case 31: + enterOuterAlt(_localctx, 31); + { + setState(398); + resignal_stmt(); + } + break; + case 32: + enterOuterAlt(_localctx, 32); + { + setState(399); + return_stmt(); + } + break; + case 33: + enterOuterAlt(_localctx, 33); + { + setState(400); + rollback_stmt(); + } + break; + case 34: + enterOuterAlt(_localctx, 34); + { + setState(401); + select_stmt(); + } + break; + case 35: + enterOuterAlt(_localctx, 35); + { + setState(402); + signal_stmt(); + } + break; + case 36: + enterOuterAlt(_localctx, 36); + { + setState(403); + update_stmt(); + } + break; + case 37: + enterOuterAlt(_localctx, 37); + { + setState(404); + use_stmt(); + } + break; + case 38: + enterOuterAlt(_localctx, 38); + { + setState(405); + values_into_stmt(); + } + break; + case 39: + enterOuterAlt(_localctx, 39); + { + setState(406); + while_stmt(); + } + break; + case 40: + enterOuterAlt(_localctx, 40); + { + setState(407); + label(); + } + break; + case 41: + enterOuterAlt(_localctx, 41); + { + setState(408); + hive(); + } + break; + case 42: + enterOuterAlt(_localctx, 42); + { + setState(409); + host(); + } + break; + case 43: + enterOuterAlt(_localctx, 43); + { + setState(410); + expr_stmt(); + } + break; + case 44: + enterOuterAlt(_localctx, 44); + { + setState(411); + semicolon_stmt(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Semicolon_stmtContext extends ParserRuleContext { + public TerminalNode T_SEMICOLON() { return getToken(HplsqlParser.T_SEMICOLON, 0); } + public Semicolon_stmtContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_semicolon_stmt; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitSemicolon_stmt(this); + else return visitor.visitChildren(this); + } + } + + public final Semicolon_stmtContext semicolon_stmt() throws RecognitionException { + Semicolon_stmtContext _localctx = new Semicolon_stmtContext(_ctx, getState()); + enterRule(_localctx, 10, RULE_semicolon_stmt); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(414); + _la = _input.LA(1); + if ( !(_la==T__0 || _la==T__1 || _la==T_DIV || _la==T_SEMICOLON) ) { + _errHandler.recoverInline(this); + } else { + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Exception_blockContext extends ParserRuleContext { + public TerminalNode T_EXCEPTION() { return getToken(HplsqlParser.T_EXCEPTION, 0); } + public List exception_block_item() { + return getRuleContexts(Exception_block_itemContext.class); + } + public Exception_block_itemContext exception_block_item(int i) { + return getRuleContext(Exception_block_itemContext.class,i); + } + public Exception_blockContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_exception_block; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitException_block(this); + else return visitor.visitChildren(this); + } + } + + public final Exception_blockContext exception_block() throws RecognitionException { + Exception_blockContext _localctx = new Exception_blockContext(_ctx, getState()); + enterRule(_localctx, 12, RULE_exception_block); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(416); + match(T_EXCEPTION); + setState(418); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(417); + exception_block_item(); + } + } + setState(420); + _errHandler.sync(this); + _la = _input.LA(1); + } while ( _la==T_WHEN ); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Exception_block_itemContext extends ParserRuleContext { + public List T_WHEN() { return getTokens(HplsqlParser.T_WHEN); } + public TerminalNode T_WHEN(int i) { + return getToken(HplsqlParser.T_WHEN, i); + } + public TerminalNode L_ID() { return getToken(HplsqlParser.L_ID, 0); } + public TerminalNode T_THEN() { return getToken(HplsqlParser.T_THEN, 0); } + public BlockContext block() { + return getRuleContext(BlockContext.class,0); + } + public TerminalNode T_END() { return getToken(HplsqlParser.T_END, 0); } + public Exception_block_itemContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_exception_block_item; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitException_block_item(this); + else return visitor.visitChildren(this); + } + } + + public final Exception_block_itemContext exception_block_item() throws RecognitionException { + Exception_block_itemContext _localctx = new Exception_block_itemContext(_ctx, getState()); + enterRule(_localctx, 14, RULE_exception_block_item); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(422); + match(T_WHEN); + setState(423); + match(L_ID); + setState(424); + match(T_THEN); + setState(425); + block(); + setState(426); + _la = _input.LA(1); + if ( _la <= 0 || (_la==T_END || _la==T_WHEN) ) { + _errHandler.recoverInline(this); + } else { + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Expr_stmtContext extends ParserRuleContext { + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public Expr_stmtContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_expr_stmt; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitExpr_stmt(this); + else return visitor.visitChildren(this); + } + } + + public final Expr_stmtContext expr_stmt() throws RecognitionException { + Expr_stmtContext _localctx = new Expr_stmtContext(_ctx, getState()); + enterRule(_localctx, 16, RULE_expr_stmt); + try { + enterOuterAlt(_localctx, 1); + { + setState(428); + expr(0); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Assignment_stmtContext extends ParserRuleContext { + public List assignment_stmt_item() { + return getRuleContexts(Assignment_stmt_itemContext.class); + } + public Assignment_stmt_itemContext assignment_stmt_item(int i) { + return getRuleContext(Assignment_stmt_itemContext.class,i); + } + public TerminalNode T_SET() { return getToken(HplsqlParser.T_SET, 0); } + public List T_COMMA() { return getTokens(HplsqlParser.T_COMMA); } + public TerminalNode T_COMMA(int i) { + return getToken(HplsqlParser.T_COMMA, i); + } + public Assignment_stmtContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_assignment_stmt; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitAssignment_stmt(this); + else return visitor.visitChildren(this); + } + } + + public final Assignment_stmtContext assignment_stmt() throws RecognitionException { + Assignment_stmtContext _localctx = new Assignment_stmtContext(_ctx, getState()); + enterRule(_localctx, 18, RULE_assignment_stmt); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(431); + switch ( getInterpreter().adaptivePredict(_input,8,_ctx) ) { + case 1: + { + setState(430); + match(T_SET); + } + break; + } + setState(433); + assignment_stmt_item(); + setState(438); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,9,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(434); + match(T_COMMA); + setState(435); + assignment_stmt_item(); + } + } + } + setState(440); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,9,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Assignment_stmt_itemContext extends ParserRuleContext { + public Assignment_stmt_single_itemContext assignment_stmt_single_item() { + return getRuleContext(Assignment_stmt_single_itemContext.class,0); + } + public Assignment_stmt_multiple_itemContext assignment_stmt_multiple_item() { + return getRuleContext(Assignment_stmt_multiple_itemContext.class,0); + } + public Assignment_stmt_select_itemContext assignment_stmt_select_item() { + return getRuleContext(Assignment_stmt_select_itemContext.class,0); + } + public Assignment_stmt_itemContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_assignment_stmt_item; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitAssignment_stmt_item(this); + else return visitor.visitChildren(this); + } + } + + public final Assignment_stmt_itemContext assignment_stmt_item() throws RecognitionException { + Assignment_stmt_itemContext _localctx = new Assignment_stmt_itemContext(_ctx, getState()); + enterRule(_localctx, 20, RULE_assignment_stmt_item); + try { + setState(444); + switch ( getInterpreter().adaptivePredict(_input,10,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(441); + assignment_stmt_single_item(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(442); + assignment_stmt_multiple_item(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(443); + assignment_stmt_select_item(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Assignment_stmt_single_itemContext extends ParserRuleContext { + public IdentContext ident() { + return getRuleContext(IdentContext.class,0); + } + public TerminalNode T_EQUAL() { return getToken(HplsqlParser.T_EQUAL, 0); } + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public TerminalNode T_COLON() { return getToken(HplsqlParser.T_COLON, 0); } + public Assignment_stmt_single_itemContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_assignment_stmt_single_item; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitAssignment_stmt_single_item(this); + else return visitor.visitChildren(this); + } + } + + public final Assignment_stmt_single_itemContext assignment_stmt_single_item() throws RecognitionException { + Assignment_stmt_single_itemContext _localctx = new Assignment_stmt_single_itemContext(_ctx, getState()); + enterRule(_localctx, 22, RULE_assignment_stmt_single_item); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(446); + ident(); + setState(448); + _la = _input.LA(1); + if (_la==T_COLON) { + { + setState(447); + match(T_COLON); + } + } + + setState(450); + match(T_EQUAL); + setState(451); + expr(0); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Assignment_stmt_multiple_itemContext extends ParserRuleContext { + public List T_OPEN_P() { return getTokens(HplsqlParser.T_OPEN_P); } + public TerminalNode T_OPEN_P(int i) { + return getToken(HplsqlParser.T_OPEN_P, i); + } + public List ident() { + return getRuleContexts(IdentContext.class); + } + public IdentContext ident(int i) { + return getRuleContext(IdentContext.class,i); + } + public List T_CLOSE_P() { return getTokens(HplsqlParser.T_CLOSE_P); } + public TerminalNode T_CLOSE_P(int i) { + return getToken(HplsqlParser.T_CLOSE_P, i); + } + public TerminalNode T_EQUAL() { return getToken(HplsqlParser.T_EQUAL, 0); } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public List T_COMMA() { return getTokens(HplsqlParser.T_COMMA); } + public TerminalNode T_COMMA(int i) { + return getToken(HplsqlParser.T_COMMA, i); + } + public TerminalNode T_COLON() { return getToken(HplsqlParser.T_COLON, 0); } + public Assignment_stmt_multiple_itemContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_assignment_stmt_multiple_item; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitAssignment_stmt_multiple_item(this); + else return visitor.visitChildren(this); + } + } + + public final Assignment_stmt_multiple_itemContext assignment_stmt_multiple_item() throws RecognitionException { + Assignment_stmt_multiple_itemContext _localctx = new Assignment_stmt_multiple_itemContext(_ctx, getState()); + enterRule(_localctx, 24, RULE_assignment_stmt_multiple_item); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(453); + match(T_OPEN_P); + setState(454); + ident(); + setState(459); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T_COMMA) { + { + { + setState(455); + match(T_COMMA); + setState(456); + ident(); + } + } + setState(461); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(462); + match(T_CLOSE_P); + setState(464); + _la = _input.LA(1); + if (_la==T_COLON) { + { + setState(463); + match(T_COLON); + } + } + + setState(466); + match(T_EQUAL); + setState(467); + match(T_OPEN_P); + setState(468); + expr(0); + setState(473); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T_COMMA) { + { + { + setState(469); + match(T_COMMA); + setState(470); + expr(0); + } + } + setState(475); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(476); + match(T_CLOSE_P); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Assignment_stmt_select_itemContext extends ParserRuleContext { + public TerminalNode T_EQUAL() { return getToken(HplsqlParser.T_EQUAL, 0); } + public List T_OPEN_P() { return getTokens(HplsqlParser.T_OPEN_P); } + public TerminalNode T_OPEN_P(int i) { + return getToken(HplsqlParser.T_OPEN_P, i); + } + public Select_stmtContext select_stmt() { + return getRuleContext(Select_stmtContext.class,0); + } + public List T_CLOSE_P() { return getTokens(HplsqlParser.T_CLOSE_P); } + public TerminalNode T_CLOSE_P(int i) { + return getToken(HplsqlParser.T_CLOSE_P, i); + } + public List ident() { + return getRuleContexts(IdentContext.class); + } + public IdentContext ident(int i) { + return getRuleContext(IdentContext.class,i); + } + public TerminalNode T_COLON() { return getToken(HplsqlParser.T_COLON, 0); } + public List T_COMMA() { return getTokens(HplsqlParser.T_COMMA); } + public TerminalNode T_COMMA(int i) { + return getToken(HplsqlParser.T_COMMA, i); + } + public Assignment_stmt_select_itemContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_assignment_stmt_select_item; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitAssignment_stmt_select_item(this); + else return visitor.visitChildren(this); + } + } + + public final Assignment_stmt_select_itemContext assignment_stmt_select_item() throws RecognitionException { + Assignment_stmt_select_itemContext _localctx = new Assignment_stmt_select_itemContext(_ctx, getState()); + enterRule(_localctx, 26, RULE_assignment_stmt_select_item); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(490); + switch (_input.LA(1)) { + case T_ALL: + case T_ALTER: + case T_AND: + case T_AS: + case T_ASC: + case T_AT: + case T_AVG: + case T_BATCHSIZE: + case T_BEGIN: + case T_BETWEEN: + case T_BIGINT: + case T_BREAK: + case T_BY: + case T_CALL: + case T_CALLER: + case T_CASE: + case T_CASESPECIFIC: + case T_CAST: + case T_CHAR: + case T_CHARACTER: + case T_CLIENT: + case T_CLOSE: + case T_COLLECTION: + case T_COPY: + case T_COMMIT: + case T_CONCAT: + case T_CONDITION: + case T_CONSTRAINT: + case T_CONTINUE: + case T_COUNT: + case T_COUNT_BIG: + case T_CREATE: + case T_CREATOR: + case T_CS: + case T_CURRENT: + case T_CURSOR: + case T_DATE: + case T_DAY: + case T_DAYS: + case T_DEC: + case T_DECIMAL: + case T_DECLARE: + case T_DEFAULT: + case T_DEFINED: + case T_DEFINER: + case T_DELETE: + case T_DELIMITED: + case T_DELIMITER: + case T_DESC: + case T_DIAGNOSTICS: + case T_DISTINCT: + case T_DISTRIBUTE: + case T_DO: + case T_DROP: + case T_DYNAMIC: + case T_ESCAPED: + case T_EXCEPT: + case T_EXEC: + case T_EXECUTE: + case T_EXCEPTION: + case T_EXISTS: + case T_EXIT: + case T_FETCH: + case T_FIELDS: + case T_FILE: + case T_FLOAT: + case T_FOR: + case T_FORMAT: + case T_FOUND: + case T_FROM: + case T_FULL: + case T_FUNCTION: + case T_GET: + case T_GLOBAL: + case T_GRANT: + case T_GROUP: + case T_HANDLER: + case T_HASH: + case T_HAVING: + case T_HIVE: + case T_HOST: + case T_IF: + case T_IGNORE: + case T_IMMEDIATE: + case T_IN: + case T_INCLUDE: + case T_INDEX: + case T_INNER: + case T_INOUT: + case T_INSERT: + case T_INT: + case T_INTEGER: + case T_INTERSECT: + case T_INTO: + case T_INVOKER: + case T_IS: + case T_ITEMS: + case T_JOIN: + case T_KEY: + case T_KEYS: + case T_LANGUAGE: + case T_LEAVE: + case T_LEFT: + case T_LIKE: + case T_LIMIT: + case T_LINES: + case T_LOCAL: + case T_LOGGED: + case T_LOOP: + case T_MAP: + case T_MATCHED: + case T_MAX: + case T_MERGE: + case T_MESSAGE_TEXT: + case T_MICROSECOND: + case T_MICROSECONDS: + case T_MIN: + case T_MULTISET: + case T_NOT: + case T_NUMBER: + case T_OBJECT: + case T_ON: + case T_ONLY: + case T_OPEN: + case T_OR: + case T_ORDER: + case T_OUT: + case T_OUTER: + case T_OVER: + case T_OVERWRITE: + case T_OWNER: + case T_PARTITION: + case T_PRESERVE: + case T_PRIMARY: + case T_PRINT: + case T_PROC: + case T_PROCEDURE: + case T_REGEXP: + case T_REPLACE: + case T_RESIGNAL: + case T_RESULT: + case T_RETURN: + case T_RETURNS: + case T_REVERSE: + case T_RIGHT: + case T_RLIKE: + case T_ROLLBACK: + case T_ROW: + case T_ROWS: + case T_ROW_COUNT: + case T_RR: + case T_RS: + case T_TRIM: + case T_SECURITY: + case T_SEL: + case T_SELECT: + case T_SET: + case T_SETS: + case T_SIGNAL: + case T_SMALLINT: + case T_SQL: + case T_SQLEXCEPTION: + case T_SQLINSERT: + case T_SQLSTATE: + case T_SQLWARNING: + case T_STEP: + case T_STRING: + case T_SUBSTRING: + case T_SUM: + case T_TABLE: + case T_TEMPORARY: + case T_TERMINATED: + case T_THEN: + case T_TIMESTAMP: + case T_TITLE: + case T_TO: + case T_TOP: + case T_UNIQUE: + case T_UPDATE: + case T_UR: + case T_USE: + case T_USING: + case T_VALUE: + case T_VALUES: + case T_VAR: + case T_VARCHAR: + case T_VARCHAR2: + case T_VOLATILE: + case T_WHILE: + case T_WITH: + case T_WITHOUT: + case T_WORK: + case T_ACTIVITY_COUNT: + case T_CURRENT_DATE: + case T_CURRENT_TIMESTAMP: + case T_CURRENT_USER: + case T_DENSE_RANK: + case T_FIRST_VALUE: + case T_LAG: + case T_LAST_VALUE: + case T_LEAD: + case T_PART_LOC: + case T_RANK: + case T_ROW_NUMBER: + case T_STDEV: + case T_SYSDATE: + case T_VARIANCE: + case T_USER: + case L_ID: + { + setState(478); + ident(); + } + break; + case T_OPEN_P: + { + { + setState(479); + match(T_OPEN_P); + setState(480); + ident(); + setState(485); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T_COMMA) { + { + { + setState(481); + match(T_COMMA); + setState(482); + ident(); + } + } + setState(487); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(488); + match(T_CLOSE_P); + } + } + break; + default: + throw new NoViableAltException(this); + } + setState(493); + _la = _input.LA(1); + if (_la==T_COLON) { + { + setState(492); + match(T_COLON); + } + } + + setState(495); + match(T_EQUAL); + setState(496); + match(T_OPEN_P); + setState(497); + select_stmt(); + setState(498); + match(T_CLOSE_P); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Break_stmtContext extends ParserRuleContext { + public TerminalNode T_BREAK() { return getToken(HplsqlParser.T_BREAK, 0); } + public Break_stmtContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_break_stmt; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitBreak_stmt(this); + else return visitor.visitChildren(this); + } + } + + public final Break_stmtContext break_stmt() throws RecognitionException { + Break_stmtContext _localctx = new Break_stmtContext(_ctx, getState()); + enterRule(_localctx, 28, RULE_break_stmt); + try { + enterOuterAlt(_localctx, 1); + { + setState(500); + match(T_BREAK); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Call_stmtContext extends ParserRuleContext { + public TerminalNode T_CALL() { return getToken(HplsqlParser.T_CALL, 0); } + public IdentContext ident() { + return getRuleContext(IdentContext.class,0); + } + public Expr_func_paramsContext expr_func_params() { + return getRuleContext(Expr_func_paramsContext.class,0); + } + public Call_stmtContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_call_stmt; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitCall_stmt(this); + else return visitor.visitChildren(this); + } + } + + public final Call_stmtContext call_stmt() throws RecognitionException { + Call_stmtContext _localctx = new Call_stmtContext(_ctx, getState()); + enterRule(_localctx, 30, RULE_call_stmt); + try { + enterOuterAlt(_localctx, 1); + { + setState(502); + match(T_CALL); + setState(503); + ident(); + setState(505); + switch ( getInterpreter().adaptivePredict(_input,18,_ctx) ) { + case 1: + { + setState(504); + expr_func_params(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Declare_stmtContext extends ParserRuleContext { + public TerminalNode T_DECLARE() { return getToken(HplsqlParser.T_DECLARE, 0); } + public List declare_stmt_item() { + return getRuleContexts(Declare_stmt_itemContext.class); + } + public Declare_stmt_itemContext declare_stmt_item(int i) { + return getRuleContext(Declare_stmt_itemContext.class,i); + } + public List T_COMMA() { return getTokens(HplsqlParser.T_COMMA); } + public TerminalNode T_COMMA(int i) { + return getToken(HplsqlParser.T_COMMA, i); + } + public Declare_stmtContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_declare_stmt; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitDeclare_stmt(this); + else return visitor.visitChildren(this); + } + } + + public final Declare_stmtContext declare_stmt() throws RecognitionException { + Declare_stmtContext _localctx = new Declare_stmtContext(_ctx, getState()); + enterRule(_localctx, 32, RULE_declare_stmt); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(507); + match(T_DECLARE); + setState(508); + declare_stmt_item(); + setState(513); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,19,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(509); + match(T_COMMA); + setState(510); + declare_stmt_item(); + } + } + } + setState(515); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,19,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Declare_blockContext extends ParserRuleContext { + public TerminalNode T_DECLARE() { return getToken(HplsqlParser.T_DECLARE, 0); } + public List declare_stmt_item() { + return getRuleContexts(Declare_stmt_itemContext.class); + } + public Declare_stmt_itemContext declare_stmt_item(int i) { + return getRuleContext(Declare_stmt_itemContext.class,i); + } + public List T_SEMICOLON() { return getTokens(HplsqlParser.T_SEMICOLON); } + public TerminalNode T_SEMICOLON(int i) { + return getToken(HplsqlParser.T_SEMICOLON, i); + } + public Declare_blockContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_declare_block; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitDeclare_block(this); + else return visitor.visitChildren(this); + } + } + + public final Declare_blockContext declare_block() throws RecognitionException { + Declare_blockContext _localctx = new Declare_blockContext(_ctx, getState()); + enterRule(_localctx, 34, RULE_declare_block); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(516); + match(T_DECLARE); + setState(517); + declare_stmt_item(); + setState(518); + match(T_SEMICOLON); + setState(524); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,20,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(519); + declare_stmt_item(); + setState(520); + match(T_SEMICOLON); + } + } + } + setState(526); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,20,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Declare_stmt_itemContext extends ParserRuleContext { + public Declare_var_itemContext declare_var_item() { + return getRuleContext(Declare_var_itemContext.class,0); + } + public Declare_condition_itemContext declare_condition_item() { + return getRuleContext(Declare_condition_itemContext.class,0); + } + public Declare_cursor_itemContext declare_cursor_item() { + return getRuleContext(Declare_cursor_itemContext.class,0); + } + public Declare_handler_itemContext declare_handler_item() { + return getRuleContext(Declare_handler_itemContext.class,0); + } + public Declare_temporary_table_itemContext declare_temporary_table_item() { + return getRuleContext(Declare_temporary_table_itemContext.class,0); + } + public Declare_stmt_itemContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_declare_stmt_item; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitDeclare_stmt_item(this); + else return visitor.visitChildren(this); + } + } + + public final Declare_stmt_itemContext declare_stmt_item() throws RecognitionException { + Declare_stmt_itemContext _localctx = new Declare_stmt_itemContext(_ctx, getState()); + enterRule(_localctx, 36, RULE_declare_stmt_item); + try { + setState(532); + switch ( getInterpreter().adaptivePredict(_input,21,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(527); + declare_var_item(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(528); + declare_condition_item(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(529); + declare_cursor_item(); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(530); + declare_handler_item(); + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(531); + declare_temporary_table_item(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Declare_var_itemContext extends ParserRuleContext { + public List ident() { + return getRuleContexts(IdentContext.class); + } + public IdentContext ident(int i) { + return getRuleContext(IdentContext.class,i); + } + public DtypeContext dtype() { + return getRuleContext(DtypeContext.class,0); + } + public List T_COMMA() { return getTokens(HplsqlParser.T_COMMA); } + public TerminalNode T_COMMA(int i) { + return getToken(HplsqlParser.T_COMMA, i); + } + public TerminalNode T_AS() { return getToken(HplsqlParser.T_AS, 0); } + public Dtype_lenContext dtype_len() { + return getRuleContext(Dtype_lenContext.class,0); + } + public List dtype_attr() { + return getRuleContexts(Dtype_attrContext.class); + } + public Dtype_attrContext dtype_attr(int i) { + return getRuleContext(Dtype_attrContext.class,i); + } + public Dtype_defaultContext dtype_default() { + return getRuleContext(Dtype_defaultContext.class,0); + } + public Declare_var_itemContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_declare_var_item; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitDeclare_var_item(this); + else return visitor.visitChildren(this); + } + } + + public final Declare_var_itemContext declare_var_item() throws RecognitionException { + Declare_var_itemContext _localctx = new Declare_var_itemContext(_ctx, getState()); + enterRule(_localctx, 38, RULE_declare_var_item); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(534); + ident(); + setState(539); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T_COMMA) { + { + { + setState(535); + match(T_COMMA); + setState(536); + ident(); + } + } + setState(541); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(543); + _la = _input.LA(1); + if (_la==T_AS) { + { + setState(542); + match(T_AS); + } + } + + setState(545); + dtype(); + setState(547); + switch ( getInterpreter().adaptivePredict(_input,24,_ctx) ) { + case 1: + { + setState(546); + dtype_len(); + } + break; + } + setState(552); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,25,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(549); + dtype_attr(); + } + } + } + setState(554); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,25,_ctx); + } + setState(556); + switch ( getInterpreter().adaptivePredict(_input,26,_ctx) ) { + case 1: + { + setState(555); + dtype_default(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Declare_condition_itemContext extends ParserRuleContext { + public IdentContext ident() { + return getRuleContext(IdentContext.class,0); + } + public TerminalNode T_CONDITION() { return getToken(HplsqlParser.T_CONDITION, 0); } + public Declare_condition_itemContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_declare_condition_item; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitDeclare_condition_item(this); + else return visitor.visitChildren(this); + } + } + + public final Declare_condition_itemContext declare_condition_item() throws RecognitionException { + Declare_condition_itemContext _localctx = new Declare_condition_itemContext(_ctx, getState()); + enterRule(_localctx, 40, RULE_declare_condition_item); + try { + enterOuterAlt(_localctx, 1); + { + setState(558); + ident(); + setState(559); + match(T_CONDITION); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Declare_cursor_itemContext extends ParserRuleContext { + public TerminalNode T_IS() { return getToken(HplsqlParser.T_IS, 0); } + public TerminalNode T_AS() { return getToken(HplsqlParser.T_AS, 0); } + public TerminalNode T_FOR() { return getToken(HplsqlParser.T_FOR, 0); } + public TerminalNode T_CURSOR() { return getToken(HplsqlParser.T_CURSOR, 0); } + public IdentContext ident() { + return getRuleContext(IdentContext.class,0); + } + public Select_stmtContext select_stmt() { + return getRuleContext(Select_stmtContext.class,0); + } + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public Declare_cursor_returnContext declare_cursor_return() { + return getRuleContext(Declare_cursor_returnContext.class,0); + } + public Declare_cursor_itemContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_declare_cursor_item; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitDeclare_cursor_item(this); + else return visitor.visitChildren(this); + } + } + + public final Declare_cursor_itemContext declare_cursor_item() throws RecognitionException { + Declare_cursor_itemContext _localctx = new Declare_cursor_itemContext(_ctx, getState()); + enterRule(_localctx, 42, RULE_declare_cursor_item); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(566); + switch ( getInterpreter().adaptivePredict(_input,27,_ctx) ) { + case 1: + { + setState(561); + match(T_CURSOR); + setState(562); + ident(); + } + break; + case 2: + { + setState(563); + ident(); + setState(564); + match(T_CURSOR); + } + break; + } + setState(569); + _la = _input.LA(1); + if (_la==T_WITH || _la==T_WITHOUT) { + { + setState(568); + declare_cursor_return(); + } + } + + setState(571); + _la = _input.LA(1); + if ( !(_la==T_AS || _la==T_FOR || _la==T_IS) ) { + _errHandler.recoverInline(this); + } else { + consume(); + } + setState(574); + switch ( getInterpreter().adaptivePredict(_input,29,_ctx) ) { + case 1: + { + setState(572); + select_stmt(); + } + break; + case 2: + { + setState(573); + expr(0); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Declare_cursor_returnContext extends ParserRuleContext { + public TerminalNode T_WITHOUT() { return getToken(HplsqlParser.T_WITHOUT, 0); } + public TerminalNode T_RETURN() { return getToken(HplsqlParser.T_RETURN, 0); } + public TerminalNode T_WITH() { return getToken(HplsqlParser.T_WITH, 0); } + public TerminalNode T_ONLY() { return getToken(HplsqlParser.T_ONLY, 0); } + public TerminalNode T_TO() { return getToken(HplsqlParser.T_TO, 0); } + public TerminalNode T_CALLER() { return getToken(HplsqlParser.T_CALLER, 0); } + public TerminalNode T_CLIENT() { return getToken(HplsqlParser.T_CLIENT, 0); } + public Declare_cursor_returnContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_declare_cursor_return; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitDeclare_cursor_return(this); + else return visitor.visitChildren(this); + } + } + + public final Declare_cursor_returnContext declare_cursor_return() throws RecognitionException { + Declare_cursor_returnContext _localctx = new Declare_cursor_returnContext(_ctx, getState()); + enterRule(_localctx, 44, RULE_declare_cursor_return); + int _la; + try { + setState(587); + switch (_input.LA(1)) { + case T_WITHOUT: + enterOuterAlt(_localctx, 1); + { + setState(576); + match(T_WITHOUT); + setState(577); + match(T_RETURN); + } + break; + case T_WITH: + enterOuterAlt(_localctx, 2); + { + setState(578); + match(T_WITH); + setState(579); + match(T_RETURN); + setState(581); + _la = _input.LA(1); + if (_la==T_ONLY) { + { + setState(580); + match(T_ONLY); + } + } + + setState(585); + _la = _input.LA(1); + if (_la==T_TO) { + { + setState(583); + match(T_TO); + setState(584); + _la = _input.LA(1); + if ( !(_la==T_CALLER || _la==T_CLIENT) ) { + _errHandler.recoverInline(this); + } else { + consume(); + } + } + } + + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Declare_handler_itemContext extends ParserRuleContext { + public TerminalNode T_HANDLER() { return getToken(HplsqlParser.T_HANDLER, 0); } + public TerminalNode T_FOR() { return getToken(HplsqlParser.T_FOR, 0); } + public Single_block_stmtContext single_block_stmt() { + return getRuleContext(Single_block_stmtContext.class,0); + } + public TerminalNode T_CONTINUE() { return getToken(HplsqlParser.T_CONTINUE, 0); } + public TerminalNode T_EXIT() { return getToken(HplsqlParser.T_EXIT, 0); } + public TerminalNode T_SQLEXCEPTION() { return getToken(HplsqlParser.T_SQLEXCEPTION, 0); } + public TerminalNode T_SQLWARNING() { return getToken(HplsqlParser.T_SQLWARNING, 0); } + public TerminalNode T_NOT() { return getToken(HplsqlParser.T_NOT, 0); } + public TerminalNode T_FOUND() { return getToken(HplsqlParser.T_FOUND, 0); } + public IdentContext ident() { + return getRuleContext(IdentContext.class,0); + } + public Declare_handler_itemContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_declare_handler_item; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitDeclare_handler_item(this); + else return visitor.visitChildren(this); + } + } + + public final Declare_handler_itemContext declare_handler_item() throws RecognitionException { + Declare_handler_itemContext _localctx = new Declare_handler_itemContext(_ctx, getState()); + enterRule(_localctx, 46, RULE_declare_handler_item); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(589); + _la = _input.LA(1); + if ( !(_la==T_CONTINUE || _la==T_EXIT) ) { + _errHandler.recoverInline(this); + } else { + consume(); + } + setState(590); + match(T_HANDLER); + setState(591); + match(T_FOR); + setState(597); + switch ( getInterpreter().adaptivePredict(_input,33,_ctx) ) { + case 1: + { + setState(592); + match(T_SQLEXCEPTION); + } + break; + case 2: + { + setState(593); + match(T_SQLWARNING); + } + break; + case 3: + { + setState(594); + match(T_NOT); + setState(595); + match(T_FOUND); + } + break; + case 4: + { + setState(596); + ident(); + } + break; + } + setState(599); + single_block_stmt(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Declare_temporary_table_itemContext extends ParserRuleContext { + public TerminalNode T_TEMPORARY() { return getToken(HplsqlParser.T_TEMPORARY, 0); } + public TerminalNode T_TABLE() { return getToken(HplsqlParser.T_TABLE, 0); } + public IdentContext ident() { + return getRuleContext(IdentContext.class,0); + } + public TerminalNode T_OPEN_P() { return getToken(HplsqlParser.T_OPEN_P, 0); } + public Create_table_columnsContext create_table_columns() { + return getRuleContext(Create_table_columnsContext.class,0); + } + public TerminalNode T_CLOSE_P() { return getToken(HplsqlParser.T_CLOSE_P, 0); } + public TerminalNode T_GLOBAL() { return getToken(HplsqlParser.T_GLOBAL, 0); } + public Create_table_optionsContext create_table_options() { + return getRuleContext(Create_table_optionsContext.class,0); + } + public Declare_temporary_table_itemContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_declare_temporary_table_item; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitDeclare_temporary_table_item(this); + else return visitor.visitChildren(this); + } + } + + public final Declare_temporary_table_itemContext declare_temporary_table_item() throws RecognitionException { + Declare_temporary_table_itemContext _localctx = new Declare_temporary_table_itemContext(_ctx, getState()); + enterRule(_localctx, 48, RULE_declare_temporary_table_item); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(602); + _la = _input.LA(1); + if (_la==T_GLOBAL) { + { + setState(601); + match(T_GLOBAL); + } + } + + setState(604); + match(T_TEMPORARY); + setState(605); + match(T_TABLE); + setState(606); + ident(); + setState(607); + match(T_OPEN_P); + setState(608); + create_table_columns(); + setState(609); + match(T_CLOSE_P); + setState(611); + switch ( getInterpreter().adaptivePredict(_input,35,_ctx) ) { + case 1: + { + setState(610); + create_table_options(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Create_table_stmtContext extends ParserRuleContext { + public TerminalNode T_CREATE() { return getToken(HplsqlParser.T_CREATE, 0); } + public TerminalNode T_TABLE() { return getToken(HplsqlParser.T_TABLE, 0); } + public IdentContext ident() { + return getRuleContext(IdentContext.class,0); + } + public TerminalNode T_OPEN_P() { return getToken(HplsqlParser.T_OPEN_P, 0); } + public Create_table_columnsContext create_table_columns() { + return getRuleContext(Create_table_columnsContext.class,0); + } + public TerminalNode T_CLOSE_P() { return getToken(HplsqlParser.T_CLOSE_P, 0); } + public TerminalNode T_IF() { return getToken(HplsqlParser.T_IF, 0); } + public TerminalNode T_NOT() { return getToken(HplsqlParser.T_NOT, 0); } + public TerminalNode T_EXISTS() { return getToken(HplsqlParser.T_EXISTS, 0); } + public Create_table_optionsContext create_table_options() { + return getRuleContext(Create_table_optionsContext.class,0); + } + public Create_table_stmtContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_create_table_stmt; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitCreate_table_stmt(this); + else return visitor.visitChildren(this); + } + } + + public final Create_table_stmtContext create_table_stmt() throws RecognitionException { + Create_table_stmtContext _localctx = new Create_table_stmtContext(_ctx, getState()); + enterRule(_localctx, 50, RULE_create_table_stmt); + try { + enterOuterAlt(_localctx, 1); + { + setState(613); + match(T_CREATE); + setState(614); + match(T_TABLE); + setState(618); + switch ( getInterpreter().adaptivePredict(_input,36,_ctx) ) { + case 1: + { + setState(615); + match(T_IF); + setState(616); + match(T_NOT); + setState(617); + match(T_EXISTS); + } + break; + } + setState(620); + ident(); + setState(621); + match(T_OPEN_P); + setState(622); + create_table_columns(); + setState(623); + match(T_CLOSE_P); + setState(625); + switch ( getInterpreter().adaptivePredict(_input,37,_ctx) ) { + case 1: + { + setState(624); + create_table_options(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Create_local_temp_table_stmtContext extends ParserRuleContext { + public TerminalNode T_CREATE() { return getToken(HplsqlParser.T_CREATE, 0); } + public TerminalNode T_TABLE() { return getToken(HplsqlParser.T_TABLE, 0); } + public IdentContext ident() { + return getRuleContext(IdentContext.class,0); + } + public TerminalNode T_OPEN_P() { return getToken(HplsqlParser.T_OPEN_P, 0); } + public Create_table_columnsContext create_table_columns() { + return getRuleContext(Create_table_columnsContext.class,0); + } + public TerminalNode T_CLOSE_P() { return getToken(HplsqlParser.T_CLOSE_P, 0); } + public TerminalNode T_LOCAL() { return getToken(HplsqlParser.T_LOCAL, 0); } + public TerminalNode T_TEMPORARY() { return getToken(HplsqlParser.T_TEMPORARY, 0); } + public TerminalNode T_VOLATILE() { return getToken(HplsqlParser.T_VOLATILE, 0); } + public Create_table_optionsContext create_table_options() { + return getRuleContext(Create_table_optionsContext.class,0); + } + public TerminalNode T_SET() { return getToken(HplsqlParser.T_SET, 0); } + public TerminalNode T_MULTISET() { return getToken(HplsqlParser.T_MULTISET, 0); } + public Create_local_temp_table_stmtContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_create_local_temp_table_stmt; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitCreate_local_temp_table_stmt(this); + else return visitor.visitChildren(this); + } + } + + public final Create_local_temp_table_stmtContext create_local_temp_table_stmt() throws RecognitionException { + Create_local_temp_table_stmtContext _localctx = new Create_local_temp_table_stmtContext(_ctx, getState()); + enterRule(_localctx, 52, RULE_create_local_temp_table_stmt); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(627); + match(T_CREATE); + setState(634); + switch (_input.LA(1)) { + case T_LOCAL: + { + setState(628); + match(T_LOCAL); + setState(629); + match(T_TEMPORARY); + } + break; + case T_MULTISET: + case T_SET: + case T_VOLATILE: + { + setState(631); + _la = _input.LA(1); + if (_la==T_MULTISET || _la==T_SET) { + { + setState(630); + _la = _input.LA(1); + if ( !(_la==T_MULTISET || _la==T_SET) ) { + _errHandler.recoverInline(this); + } else { + consume(); + } + } + } + + setState(633); + match(T_VOLATILE); + } + break; + default: + throw new NoViableAltException(this); + } + setState(636); + match(T_TABLE); + setState(637); + ident(); + setState(638); + match(T_OPEN_P); + setState(639); + create_table_columns(); + setState(640); + match(T_CLOSE_P); + setState(642); + switch ( getInterpreter().adaptivePredict(_input,40,_ctx) ) { + case 1: + { + setState(641); + create_table_options(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Create_table_columnsContext extends ParserRuleContext { + public List create_table_columns_item() { + return getRuleContexts(Create_table_columns_itemContext.class); + } + public Create_table_columns_itemContext create_table_columns_item(int i) { + return getRuleContext(Create_table_columns_itemContext.class,i); + } + public List T_COMMA() { return getTokens(HplsqlParser.T_COMMA); } + public TerminalNode T_COMMA(int i) { + return getToken(HplsqlParser.T_COMMA, i); + } + public Create_table_columnsContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_create_table_columns; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitCreate_table_columns(this); + else return visitor.visitChildren(this); + } + } + + public final Create_table_columnsContext create_table_columns() throws RecognitionException { + Create_table_columnsContext _localctx = new Create_table_columnsContext(_ctx, getState()); + enterRule(_localctx, 54, RULE_create_table_columns); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(644); + create_table_columns_item(); + setState(649); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T_COMMA) { + { + { + setState(645); + match(T_COMMA); + setState(646); + create_table_columns_item(); + } + } + setState(651); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Create_table_columns_itemContext extends ParserRuleContext { + public IdentContext ident() { + return getRuleContext(IdentContext.class,0); + } + public DtypeContext dtype() { + return getRuleContext(DtypeContext.class,0); + } + public Dtype_lenContext dtype_len() { + return getRuleContext(Dtype_lenContext.class,0); + } + public List dtype_attr() { + return getRuleContexts(Dtype_attrContext.class); + } + public Dtype_attrContext dtype_attr(int i) { + return getRuleContext(Dtype_attrContext.class,i); + } + public Create_table_column_inline_consContext create_table_column_inline_cons() { + return getRuleContext(Create_table_column_inline_consContext.class,0); + } + public TerminalNode T_CONSTRAINT() { return getToken(HplsqlParser.T_CONSTRAINT, 0); } + public Create_table_column_consContext create_table_column_cons() { + return getRuleContext(Create_table_column_consContext.class,0); + } + public Create_table_columns_itemContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_create_table_columns_item; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitCreate_table_columns_item(this); + else return visitor.visitChildren(this); + } + } + + public final Create_table_columns_itemContext create_table_columns_item() throws RecognitionException { + Create_table_columns_itemContext _localctx = new Create_table_columns_itemContext(_ctx, getState()); + enterRule(_localctx, 56, RULE_create_table_columns_item); + int _la; + try { + int _alt; + setState(670); + switch ( getInterpreter().adaptivePredict(_input,45,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(652); + ident(); + setState(653); + dtype(); + setState(655); + _la = _input.LA(1); + if (_la==T_OPEN_P) { + { + setState(654); + dtype_len(); + } + } + + setState(660); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,43,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(657); + dtype_attr(); + } + } + } + setState(662); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,43,_ctx); + } + setState(664); + _la = _input.LA(1); + if (_la==T_DEFAULT || ((((_la - 127)) & ~0x3f) == 0 && ((1L << (_la - 127)) & ((1L << (T_NOT - 127)) | (1L << (T_NULL - 127)) | (1L << (T_PRIMARY - 127)))) != 0) || _la==T_COLON || _la==T_EQUAL) { + { + setState(663); + create_table_column_inline_cons(); + } + } + + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(666); + match(T_CONSTRAINT); + setState(667); + ident(); + setState(668); + create_table_column_cons(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Create_table_column_inline_consContext extends ParserRuleContext { + public Dtype_defaultContext dtype_default() { + return getRuleContext(Dtype_defaultContext.class,0); + } + public TerminalNode T_NULL() { return getToken(HplsqlParser.T_NULL, 0); } + public TerminalNode T_NOT() { return getToken(HplsqlParser.T_NOT, 0); } + public TerminalNode T_PRIMARY() { return getToken(HplsqlParser.T_PRIMARY, 0); } + public TerminalNode T_KEY() { return getToken(HplsqlParser.T_KEY, 0); } + public Create_table_column_inline_consContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_create_table_column_inline_cons; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitCreate_table_column_inline_cons(this); + else return visitor.visitChildren(this); + } + } + + public final Create_table_column_inline_consContext create_table_column_inline_cons() throws RecognitionException { + Create_table_column_inline_consContext _localctx = new Create_table_column_inline_consContext(_ctx, getState()); + enterRule(_localctx, 58, RULE_create_table_column_inline_cons); + int _la; + try { + setState(679); + switch (_input.LA(1)) { + case T_DEFAULT: + case T_COLON: + case T_EQUAL: + enterOuterAlt(_localctx, 1); + { + setState(672); + dtype_default(); + } + break; + case T_NOT: + case T_NULL: + enterOuterAlt(_localctx, 2); + { + setState(674); + _la = _input.LA(1); + if (_la==T_NOT) { + { + setState(673); + match(T_NOT); + } + } + + setState(676); + match(T_NULL); + } + break; + case T_PRIMARY: + enterOuterAlt(_localctx, 3); + { + setState(677); + match(T_PRIMARY); + setState(678); + match(T_KEY); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Create_table_column_consContext extends ParserRuleContext { + public TerminalNode T_PRIMARY() { return getToken(HplsqlParser.T_PRIMARY, 0); } + public TerminalNode T_KEY() { return getToken(HplsqlParser.T_KEY, 0); } + public TerminalNode T_OPEN_P() { return getToken(HplsqlParser.T_OPEN_P, 0); } + public List ident() { + return getRuleContexts(IdentContext.class); + } + public IdentContext ident(int i) { + return getRuleContext(IdentContext.class,i); + } + public TerminalNode T_CLOSE_P() { return getToken(HplsqlParser.T_CLOSE_P, 0); } + public List T_COMMA() { return getTokens(HplsqlParser.T_COMMA); } + public TerminalNode T_COMMA(int i) { + return getToken(HplsqlParser.T_COMMA, i); + } + public Create_table_column_consContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_create_table_column_cons; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitCreate_table_column_cons(this); + else return visitor.visitChildren(this); + } + } + + public final Create_table_column_consContext create_table_column_cons() throws RecognitionException { + Create_table_column_consContext _localctx = new Create_table_column_consContext(_ctx, getState()); + enterRule(_localctx, 60, RULE_create_table_column_cons); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(681); + match(T_PRIMARY); + setState(682); + match(T_KEY); + setState(683); + match(T_OPEN_P); + setState(684); + ident(); + setState(689); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T_COMMA) { + { + { + setState(685); + match(T_COMMA); + setState(686); + ident(); + } + } + setState(691); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(692); + match(T_CLOSE_P); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Create_table_optionsContext extends ParserRuleContext { + public List create_table_options_item() { + return getRuleContexts(Create_table_options_itemContext.class); + } + public Create_table_options_itemContext create_table_options_item(int i) { + return getRuleContext(Create_table_options_itemContext.class,i); + } + public Create_table_optionsContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_create_table_options; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitCreate_table_options(this); + else return visitor.visitChildren(this); + } + } + + public final Create_table_optionsContext create_table_options() throws RecognitionException { + Create_table_optionsContext _localctx = new Create_table_optionsContext(_ctx, getState()); + enterRule(_localctx, 62, RULE_create_table_options); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(695); + _errHandler.sync(this); + _alt = 1; + do { + switch (_alt) { + case 1: + { + { + setState(694); + create_table_options_item(); + } + } + break; + default: + throw new NoViableAltException(this); + } + setState(697); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,49,_ctx); + } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Create_table_options_itemContext extends ParserRuleContext { + public TerminalNode T_ON() { return getToken(HplsqlParser.T_ON, 0); } + public TerminalNode T_COMMIT() { return getToken(HplsqlParser.T_COMMIT, 0); } + public TerminalNode T_ROWS() { return getToken(HplsqlParser.T_ROWS, 0); } + public TerminalNode T_DELETE() { return getToken(HplsqlParser.T_DELETE, 0); } + public TerminalNode T_PRESERVE() { return getToken(HplsqlParser.T_PRESERVE, 0); } + public Create_table_options_db2_itemContext create_table_options_db2_item() { + return getRuleContext(Create_table_options_db2_itemContext.class,0); + } + public Create_table_options_hive_itemContext create_table_options_hive_item() { + return getRuleContext(Create_table_options_hive_itemContext.class,0); + } + public Create_table_options_itemContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_create_table_options_item; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitCreate_table_options_item(this); + else return visitor.visitChildren(this); + } + } + + public final Create_table_options_itemContext create_table_options_item() throws RecognitionException { + Create_table_options_itemContext _localctx = new Create_table_options_itemContext(_ctx, getState()); + enterRule(_localctx, 64, RULE_create_table_options_item); + int _la; + try { + setState(705); + switch (_input.LA(1)) { + case T_ON: + enterOuterAlt(_localctx, 1); + { + setState(699); + match(T_ON); + setState(700); + match(T_COMMIT); + setState(701); + _la = _input.LA(1); + if ( !(_la==T_DELETE || _la==T_PRESERVE) ) { + _errHandler.recoverInline(this); + } else { + consume(); + } + setState(702); + match(T_ROWS); + } + break; + case T_DISTRIBUTE: + case T_IN: + case T_LOGGED: + case T_NOT: + case T_WITH: + enterOuterAlt(_localctx, 2); + { + setState(703); + create_table_options_db2_item(); + } + break; + case T_ROW: + enterOuterAlt(_localctx, 3); + { + setState(704); + create_table_options_hive_item(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Create_table_options_db2_itemContext extends ParserRuleContext { + public TerminalNode T_IN() { return getToken(HplsqlParser.T_IN, 0); } + public List ident() { + return getRuleContexts(IdentContext.class); + } + public IdentContext ident(int i) { + return getRuleContext(IdentContext.class,i); + } + public TerminalNode T_WITH() { return getToken(HplsqlParser.T_WITH, 0); } + public TerminalNode T_REPLACE() { return getToken(HplsqlParser.T_REPLACE, 0); } + public TerminalNode T_DISTRIBUTE() { return getToken(HplsqlParser.T_DISTRIBUTE, 0); } + public TerminalNode T_BY() { return getToken(HplsqlParser.T_BY, 0); } + public TerminalNode T_HASH() { return getToken(HplsqlParser.T_HASH, 0); } + public TerminalNode T_OPEN_P() { return getToken(HplsqlParser.T_OPEN_P, 0); } + public TerminalNode T_CLOSE_P() { return getToken(HplsqlParser.T_CLOSE_P, 0); } + public List T_COMMA() { return getTokens(HplsqlParser.T_COMMA); } + public TerminalNode T_COMMA(int i) { + return getToken(HplsqlParser.T_COMMA, i); + } + public TerminalNode T_LOGGED() { return getToken(HplsqlParser.T_LOGGED, 0); } + public TerminalNode T_NOT() { return getToken(HplsqlParser.T_NOT, 0); } + public Create_table_options_db2_itemContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_create_table_options_db2_item; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitCreate_table_options_db2_item(this); + else return visitor.visitChildren(this); + } + } + + public final Create_table_options_db2_itemContext create_table_options_db2_item() throws RecognitionException { + Create_table_options_db2_itemContext _localctx = new Create_table_options_db2_itemContext(_ctx, getState()); + enterRule(_localctx, 66, RULE_create_table_options_db2_item); + int _la; + try { + setState(728); + switch (_input.LA(1)) { + case T_IN: + enterOuterAlt(_localctx, 1); + { + setState(707); + match(T_IN); + setState(708); + ident(); + } + break; + case T_WITH: + enterOuterAlt(_localctx, 2); + { + setState(709); + match(T_WITH); + setState(710); + match(T_REPLACE); + } + break; + case T_DISTRIBUTE: + enterOuterAlt(_localctx, 3); + { + setState(711); + match(T_DISTRIBUTE); + setState(712); + match(T_BY); + setState(713); + match(T_HASH); + setState(714); + match(T_OPEN_P); + setState(715); + ident(); + setState(720); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T_COMMA) { + { + { + setState(716); + match(T_COMMA); + setState(717); + ident(); + } + } + setState(722); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(723); + match(T_CLOSE_P); + } + break; + case T_LOGGED: + enterOuterAlt(_localctx, 4); + { + setState(725); + match(T_LOGGED); + } + break; + case T_NOT: + enterOuterAlt(_localctx, 5); + { + setState(726); + match(T_NOT); + setState(727); + match(T_LOGGED); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Create_table_options_hive_itemContext extends ParserRuleContext { + public Create_table_hive_row_formatContext create_table_hive_row_format() { + return getRuleContext(Create_table_hive_row_formatContext.class,0); + } + public Create_table_options_hive_itemContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_create_table_options_hive_item; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitCreate_table_options_hive_item(this); + else return visitor.visitChildren(this); + } + } + + public final Create_table_options_hive_itemContext create_table_options_hive_item() throws RecognitionException { + Create_table_options_hive_itemContext _localctx = new Create_table_options_hive_itemContext(_ctx, getState()); + enterRule(_localctx, 68, RULE_create_table_options_hive_item); + try { + enterOuterAlt(_localctx, 1); + { + setState(730); + create_table_hive_row_format(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Create_table_hive_row_formatContext extends ParserRuleContext { + public TerminalNode T_ROW() { return getToken(HplsqlParser.T_ROW, 0); } + public TerminalNode T_FORMAT() { return getToken(HplsqlParser.T_FORMAT, 0); } + public TerminalNode T_DELIMITED() { return getToken(HplsqlParser.T_DELIMITED, 0); } + public List create_table_hive_row_format_fields() { + return getRuleContexts(Create_table_hive_row_format_fieldsContext.class); + } + public Create_table_hive_row_format_fieldsContext create_table_hive_row_format_fields(int i) { + return getRuleContext(Create_table_hive_row_format_fieldsContext.class,i); + } + public Create_table_hive_row_formatContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_create_table_hive_row_format; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitCreate_table_hive_row_format(this); + else return visitor.visitChildren(this); + } + } + + public final Create_table_hive_row_formatContext create_table_hive_row_format() throws RecognitionException { + Create_table_hive_row_formatContext _localctx = new Create_table_hive_row_formatContext(_ctx, getState()); + enterRule(_localctx, 70, RULE_create_table_hive_row_format); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(732); + match(T_ROW); + setState(733); + match(T_FORMAT); + setState(734); + match(T_DELIMITED); + setState(738); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,53,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(735); + create_table_hive_row_format_fields(); + } + } + } + setState(740); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,53,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Create_table_hive_row_format_fieldsContext extends ParserRuleContext { + public TerminalNode T_FIELDS() { return getToken(HplsqlParser.T_FIELDS, 0); } + public TerminalNode T_TERMINATED() { return getToken(HplsqlParser.T_TERMINATED, 0); } + public List T_BY() { return getTokens(HplsqlParser.T_BY); } + public TerminalNode T_BY(int i) { + return getToken(HplsqlParser.T_BY, i); + } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public TerminalNode T_ESCAPED() { return getToken(HplsqlParser.T_ESCAPED, 0); } + public TerminalNode T_COLLECTION() { return getToken(HplsqlParser.T_COLLECTION, 0); } + public TerminalNode T_ITEMS() { return getToken(HplsqlParser.T_ITEMS, 0); } + public TerminalNode T_MAP() { return getToken(HplsqlParser.T_MAP, 0); } + public TerminalNode T_KEYS() { return getToken(HplsqlParser.T_KEYS, 0); } + public TerminalNode T_LINES() { return getToken(HplsqlParser.T_LINES, 0); } + public TerminalNode T_NULL() { return getToken(HplsqlParser.T_NULL, 0); } + public TerminalNode T_DEFINED() { return getToken(HplsqlParser.T_DEFINED, 0); } + public TerminalNode T_AS() { return getToken(HplsqlParser.T_AS, 0); } + public Create_table_hive_row_format_fieldsContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_create_table_hive_row_format_fields; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitCreate_table_hive_row_format_fields(this); + else return visitor.visitChildren(this); + } + } + + public final Create_table_hive_row_format_fieldsContext create_table_hive_row_format_fields() throws RecognitionException { + Create_table_hive_row_format_fieldsContext _localctx = new Create_table_hive_row_format_fieldsContext(_ctx, getState()); + enterRule(_localctx, 72, RULE_create_table_hive_row_format_fields); + try { + setState(768); + switch (_input.LA(1)) { + case T_FIELDS: + enterOuterAlt(_localctx, 1); + { + setState(741); + match(T_FIELDS); + setState(742); + match(T_TERMINATED); + setState(743); + match(T_BY); + setState(744); + expr(0); + setState(748); + switch ( getInterpreter().adaptivePredict(_input,54,_ctx) ) { + case 1: + { + setState(745); + match(T_ESCAPED); + setState(746); + match(T_BY); + setState(747); + expr(0); + } + break; + } + } + break; + case T_COLLECTION: + enterOuterAlt(_localctx, 2); + { + setState(750); + match(T_COLLECTION); + setState(751); + match(T_ITEMS); + setState(752); + match(T_TERMINATED); + setState(753); + match(T_BY); + setState(754); + expr(0); + } + break; + case T_MAP: + enterOuterAlt(_localctx, 3); + { + setState(755); + match(T_MAP); + setState(756); + match(T_KEYS); + setState(757); + match(T_TERMINATED); + setState(758); + match(T_BY); + setState(759); + expr(0); + } + break; + case T_LINES: + enterOuterAlt(_localctx, 4); + { + setState(760); + match(T_LINES); + setState(761); + match(T_TERMINATED); + setState(762); + match(T_BY); + setState(763); + expr(0); + } + break; + case T_NULL: + enterOuterAlt(_localctx, 5); + { + setState(764); + match(T_NULL); + setState(765); + match(T_DEFINED); + setState(766); + match(T_AS); + setState(767); + expr(0); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class DtypeContext extends ParserRuleContext { + public TerminalNode T_CHAR() { return getToken(HplsqlParser.T_CHAR, 0); } + public TerminalNode T_BIGINT() { return getToken(HplsqlParser.T_BIGINT, 0); } + public TerminalNode T_DATE() { return getToken(HplsqlParser.T_DATE, 0); } + public TerminalNode T_DEC() { return getToken(HplsqlParser.T_DEC, 0); } + public TerminalNode T_DECIMAL() { return getToken(HplsqlParser.T_DECIMAL, 0); } + public TerminalNode T_FLOAT() { return getToken(HplsqlParser.T_FLOAT, 0); } + public TerminalNode T_INT() { return getToken(HplsqlParser.T_INT, 0); } + public TerminalNode T_INTEGER() { return getToken(HplsqlParser.T_INTEGER, 0); } + public TerminalNode T_NUMBER() { return getToken(HplsqlParser.T_NUMBER, 0); } + public TerminalNode T_SMALLINT() { return getToken(HplsqlParser.T_SMALLINT, 0); } + public TerminalNode T_STRING() { return getToken(HplsqlParser.T_STRING, 0); } + public TerminalNode T_TIMESTAMP() { return getToken(HplsqlParser.T_TIMESTAMP, 0); } + public TerminalNode T_VARCHAR() { return getToken(HplsqlParser.T_VARCHAR, 0); } + public TerminalNode T_VARCHAR2() { return getToken(HplsqlParser.T_VARCHAR2, 0); } + public TerminalNode L_ID() { return getToken(HplsqlParser.L_ID, 0); } + public DtypeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_dtype; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitDtype(this); + else return visitor.visitChildren(this); + } + } + + public final DtypeContext dtype() throws RecognitionException { + DtypeContext _localctx = new DtypeContext(_ctx, getState()); + enterRule(_localctx, 74, RULE_dtype); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(770); + _la = _input.LA(1); + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T_BIGINT) | (1L << T_CHAR) | (1L << T_DATE) | (1L << T_DEC) | (1L << T_DECIMAL))) != 0) || ((((_la - 74)) & ~0x3f) == 0 && ((1L << (_la - 74)) & ((1L << (T_FLOAT - 74)) | (1L << (T_INT - 74)) | (1L << (T_INTEGER - 74)) | (1L << (T_NUMBER - 74)))) != 0) || ((((_la - 169)) & ~0x3f) == 0 && ((1L << (_la - 169)) & ((1L << (T_SMALLINT - 169)) | (1L << (T_STRING - 169)) | (1L << (T_TIMESTAMP - 169)) | (1L << (T_VARCHAR - 169)) | (1L << (T_VARCHAR2 - 169)))) != 0) || _la==L_ID) ) { + _errHandler.recoverInline(this); + } else { + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Dtype_lenContext extends ParserRuleContext { + public TerminalNode T_OPEN_P() { return getToken(HplsqlParser.T_OPEN_P, 0); } + public List L_INT() { return getTokens(HplsqlParser.L_INT); } + public TerminalNode L_INT(int i) { + return getToken(HplsqlParser.L_INT, i); + } + public TerminalNode T_CLOSE_P() { return getToken(HplsqlParser.T_CLOSE_P, 0); } + public TerminalNode T_COMMA() { return getToken(HplsqlParser.T_COMMA, 0); } + public Dtype_lenContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_dtype_len; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitDtype_len(this); + else return visitor.visitChildren(this); + } + } + + public final Dtype_lenContext dtype_len() throws RecognitionException { + Dtype_lenContext _localctx = new Dtype_lenContext(_ctx, getState()); + enterRule(_localctx, 76, RULE_dtype_len); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(772); + match(T_OPEN_P); + setState(773); + match(L_INT); + setState(776); + _la = _input.LA(1); + if (_la==T_COMMA) { + { + setState(774); + match(T_COMMA); + setState(775); + match(L_INT); + } + } + + setState(778); + match(T_CLOSE_P); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Dtype_attrContext extends ParserRuleContext { + public TerminalNode T_CHARACTER() { return getToken(HplsqlParser.T_CHARACTER, 0); } + public TerminalNode T_SET() { return getToken(HplsqlParser.T_SET, 0); } + public IdentContext ident() { + return getRuleContext(IdentContext.class,0); + } + public TerminalNode T_CASESPECIFIC() { return getToken(HplsqlParser.T_CASESPECIFIC, 0); } + public TerminalNode T_CS() { return getToken(HplsqlParser.T_CS, 0); } + public TerminalNode T_NOT() { return getToken(HplsqlParser.T_NOT, 0); } + public Dtype_attrContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_dtype_attr; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitDtype_attr(this); + else return visitor.visitChildren(this); + } + } + + public final Dtype_attrContext dtype_attr() throws RecognitionException { + Dtype_attrContext _localctx = new Dtype_attrContext(_ctx, getState()); + enterRule(_localctx, 78, RULE_dtype_attr); + int _la; + try { + setState(787); + switch (_input.LA(1)) { + case T_CHARACTER: + enterOuterAlt(_localctx, 1); + { + setState(780); + match(T_CHARACTER); + setState(781); + match(T_SET); + setState(782); + ident(); + } + break; + case T_CASESPECIFIC: + case T_CS: + case T_NOT: + enterOuterAlt(_localctx, 2); + { + setState(784); + _la = _input.LA(1); + if (_la==T_NOT) { + { + setState(783); + match(T_NOT); + } + } + + setState(786); + _la = _input.LA(1); + if ( !(_la==T_CASESPECIFIC || _la==T_CS) ) { + _errHandler.recoverInline(this); + } else { + consume(); + } + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Dtype_defaultContext extends ParserRuleContext { + public TerminalNode T_EQUAL() { return getToken(HplsqlParser.T_EQUAL, 0); } + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public TerminalNode T_COLON() { return getToken(HplsqlParser.T_COLON, 0); } + public TerminalNode T_DEFAULT() { return getToken(HplsqlParser.T_DEFAULT, 0); } + public Dtype_defaultContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_dtype_default; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitDtype_default(this); + else return visitor.visitChildren(this); + } + } + + public final Dtype_defaultContext dtype_default() throws RecognitionException { + Dtype_defaultContext _localctx = new Dtype_defaultContext(_ctx, getState()); + enterRule(_localctx, 80, RULE_dtype_default); + int _la; + try { + setState(796); + switch (_input.LA(1)) { + case T_COLON: + case T_EQUAL: + enterOuterAlt(_localctx, 1); + { + setState(790); + _la = _input.LA(1); + if (_la==T_COLON) { + { + setState(789); + match(T_COLON); + } + } + + setState(792); + match(T_EQUAL); + setState(793); + expr(0); + } + break; + case T_DEFAULT: + enterOuterAlt(_localctx, 2); + { + setState(794); + match(T_DEFAULT); + setState(795); + expr(0); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Create_function_stmtContext extends ParserRuleContext { + public TerminalNode T_FUNCTION() { return getToken(HplsqlParser.T_FUNCTION, 0); } + public IdentContext ident() { + return getRuleContext(IdentContext.class,0); + } + public Create_routine_paramsContext create_routine_params() { + return getRuleContext(Create_routine_paramsContext.class,0); + } + public Create_function_returnContext create_function_return() { + return getRuleContext(Create_function_returnContext.class,0); + } + public Single_block_stmtContext single_block_stmt() { + return getRuleContext(Single_block_stmtContext.class,0); + } + public TerminalNode T_ALTER() { return getToken(HplsqlParser.T_ALTER, 0); } + public TerminalNode T_CREATE() { return getToken(HplsqlParser.T_CREATE, 0); } + public TerminalNode T_REPLACE() { return getToken(HplsqlParser.T_REPLACE, 0); } + public TerminalNode T_AS() { return getToken(HplsqlParser.T_AS, 0); } + public TerminalNode T_IS() { return getToken(HplsqlParser.T_IS, 0); } + public TerminalNode T_OR() { return getToken(HplsqlParser.T_OR, 0); } + public Create_function_stmtContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_create_function_stmt; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitCreate_function_stmt(this); + else return visitor.visitChildren(this); + } + } + + public final Create_function_stmtContext create_function_stmt() throws RecognitionException { + Create_function_stmtContext _localctx = new Create_function_stmtContext(_ctx, getState()); + enterRule(_localctx, 82, RULE_create_function_stmt); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(805); + switch (_input.LA(1)) { + case T_ALTER: + { + setState(798); + match(T_ALTER); + } + break; + case T_CREATE: + { + setState(799); + match(T_CREATE); + setState(802); + _la = _input.LA(1); + if (_la==T_OR) { + { + setState(800); + match(T_OR); + setState(801); + match(T_REPLACE); + } + } + + } + break; + case T_REPLACE: + { + setState(804); + match(T_REPLACE); + } + break; + default: + throw new NoViableAltException(this); + } + setState(807); + match(T_FUNCTION); + setState(808); + ident(); + setState(809); + create_routine_params(); + setState(810); + create_function_return(); + setState(812); + switch ( getInterpreter().adaptivePredict(_input,63,_ctx) ) { + case 1: + { + setState(811); + _la = _input.LA(1); + if ( !(_la==T_AS || _la==T_IS) ) { + _errHandler.recoverInline(this); + } else { + consume(); + } + } + break; + } + setState(814); + single_block_stmt(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Create_function_returnContext extends ParserRuleContext { + public DtypeContext dtype() { + return getRuleContext(DtypeContext.class,0); + } + public TerminalNode T_RETURN() { return getToken(HplsqlParser.T_RETURN, 0); } + public TerminalNode T_RETURNS() { return getToken(HplsqlParser.T_RETURNS, 0); } + public Dtype_lenContext dtype_len() { + return getRuleContext(Dtype_lenContext.class,0); + } + public Create_function_returnContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_create_function_return; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitCreate_function_return(this); + else return visitor.visitChildren(this); + } + } + + public final Create_function_returnContext create_function_return() throws RecognitionException { + Create_function_returnContext _localctx = new Create_function_returnContext(_ctx, getState()); + enterRule(_localctx, 84, RULE_create_function_return); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(816); + _la = _input.LA(1); + if ( !(_la==T_RETURN || _la==T_RETURNS) ) { + _errHandler.recoverInline(this); + } else { + consume(); + } + setState(817); + dtype(); + setState(819); + switch ( getInterpreter().adaptivePredict(_input,64,_ctx) ) { + case 1: + { + setState(818); + dtype_len(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Create_procedure_stmtContext extends ParserRuleContext { + public List ident() { + return getRuleContexts(IdentContext.class); + } + public IdentContext ident(int i) { + return getRuleContext(IdentContext.class,i); + } + public Create_routine_paramsContext create_routine_params() { + return getRuleContext(Create_routine_paramsContext.class,0); + } + public Single_block_stmtContext single_block_stmt() { + return getRuleContext(Single_block_stmtContext.class,0); + } + public TerminalNode T_PROCEDURE() { return getToken(HplsqlParser.T_PROCEDURE, 0); } + public TerminalNode T_PROC() { return getToken(HplsqlParser.T_PROC, 0); } + public TerminalNode T_ALTER() { return getToken(HplsqlParser.T_ALTER, 0); } + public TerminalNode T_CREATE() { return getToken(HplsqlParser.T_CREATE, 0); } + public TerminalNode T_REPLACE() { return getToken(HplsqlParser.T_REPLACE, 0); } + public Create_routine_optionsContext create_routine_options() { + return getRuleContext(Create_routine_optionsContext.class,0); + } + public LabelContext label() { + return getRuleContext(LabelContext.class,0); + } + public TerminalNode T_SEMICOLON() { return getToken(HplsqlParser.T_SEMICOLON, 0); } + public TerminalNode T_AS() { return getToken(HplsqlParser.T_AS, 0); } + public TerminalNode T_IS() { return getToken(HplsqlParser.T_IS, 0); } + public TerminalNode T_OR() { return getToken(HplsqlParser.T_OR, 0); } + public Create_procedure_stmtContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_create_procedure_stmt; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitCreate_procedure_stmt(this); + else return visitor.visitChildren(this); + } + } + + public final Create_procedure_stmtContext create_procedure_stmt() throws RecognitionException { + Create_procedure_stmtContext _localctx = new Create_procedure_stmtContext(_ctx, getState()); + enterRule(_localctx, 86, RULE_create_procedure_stmt); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(828); + switch (_input.LA(1)) { + case T_ALTER: + { + setState(821); + match(T_ALTER); + } + break; + case T_CREATE: + { + setState(822); + match(T_CREATE); + setState(825); + _la = _input.LA(1); + if (_la==T_OR) { + { + setState(823); + match(T_OR); + setState(824); + match(T_REPLACE); + } + } + + } + break; + case T_REPLACE: + { + setState(827); + match(T_REPLACE); + } + break; + default: + throw new NoViableAltException(this); + } + setState(830); + _la = _input.LA(1); + if ( !(_la==T_PROC || _la==T_PROCEDURE) ) { + _errHandler.recoverInline(this); + } else { + consume(); + } + setState(831); + ident(); + setState(832); + create_routine_params(); + setState(834); + switch ( getInterpreter().adaptivePredict(_input,67,_ctx) ) { + case 1: + { + setState(833); + create_routine_options(); + } + break; + } + setState(837); + switch ( getInterpreter().adaptivePredict(_input,68,_ctx) ) { + case 1: + { + setState(836); + _la = _input.LA(1); + if ( !(_la==T_AS || _la==T_IS) ) { + _errHandler.recoverInline(this); + } else { + consume(); + } + } + break; + } + setState(840); + switch ( getInterpreter().adaptivePredict(_input,69,_ctx) ) { + case 1: + { + setState(839); + label(); + } + break; + } + setState(842); + single_block_stmt(); + setState(846); + switch ( getInterpreter().adaptivePredict(_input,70,_ctx) ) { + case 1: + { + setState(843); + ident(); + setState(844); + match(T_SEMICOLON); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Create_routine_paramsContext extends ParserRuleContext { + public TerminalNode T_OPEN_P() { return getToken(HplsqlParser.T_OPEN_P, 0); } + public TerminalNode T_CLOSE_P() { return getToken(HplsqlParser.T_CLOSE_P, 0); } + public List create_routine_param_item() { + return getRuleContexts(Create_routine_param_itemContext.class); + } + public Create_routine_param_itemContext create_routine_param_item(int i) { + return getRuleContext(Create_routine_param_itemContext.class,i); + } + public List T_COMMA() { return getTokens(HplsqlParser.T_COMMA); } + public TerminalNode T_COMMA(int i) { + return getToken(HplsqlParser.T_COMMA, i); + } + public Create_routine_paramsContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_create_routine_params; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitCreate_routine_params(this); + else return visitor.visitChildren(this); + } + } + + public final Create_routine_paramsContext create_routine_params() throws RecognitionException { + Create_routine_paramsContext _localctx = new Create_routine_paramsContext(_ctx, getState()); + enterRule(_localctx, 88, RULE_create_routine_params); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(848); + match(T_OPEN_P); + setState(857); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T_ALL) | (1L << T_ALTER) | (1L << T_AND) | (1L << T_AS) | (1L << T_ASC) | (1L << T_AT) | (1L << T_AVG) | (1L << T_BATCHSIZE) | (1L << T_BEGIN) | (1L << T_BETWEEN) | (1L << T_BIGINT) | (1L << T_BREAK) | (1L << T_BY) | (1L << T_CALL) | (1L << T_CALLER) | (1L << T_CASE) | (1L << T_CASESPECIFIC) | (1L << T_CAST) | (1L << T_CHAR) | (1L << T_CHARACTER) | (1L << T_CLIENT) | (1L << T_CLOSE) | (1L << T_COLLECTION) | (1L << T_COPY) | (1L << T_COMMIT) | (1L << T_CONCAT) | (1L << T_CONDITION) | (1L << T_CONSTRAINT) | (1L << T_CONTINUE) | (1L << T_COUNT) | (1L << T_COUNT_BIG) | (1L << T_CREATE) | (1L << T_CREATOR) | (1L << T_CS) | (1L << T_CURRENT) | (1L << T_CURSOR) | (1L << T_DATE) | (1L << T_DAY) | (1L << T_DAYS) | (1L << T_DEC) | (1L << T_DECIMAL) | (1L << T_DECLARE) | (1L << T_DEFAULT) | (1L << T_DEFINED) | (1L << T_DEFINER) | (1L << T_DELETE) | (1L << T_DELIMITED) | (1L << T_DELIMITER) | (1L << T_DESC) | (1L << T_DIAGNOSTICS) | (1L << T_DISTINCT) | (1L << T_DISTRIBUTE) | (1L << T_DO) | (1L << T_DROP) | (1L << T_DYNAMIC))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (T_ESCAPED - 64)) | (1L << (T_EXCEPT - 64)) | (1L << (T_EXEC - 64)) | (1L << (T_EXECUTE - 64)) | (1L << (T_EXCEPTION - 64)) | (1L << (T_EXISTS - 64)) | (1L << (T_EXIT - 64)) | (1L << (T_FETCH - 64)) | (1L << (T_FIELDS - 64)) | (1L << (T_FILE - 64)) | (1L << (T_FLOAT - 64)) | (1L << (T_FOR - 64)) | (1L << (T_FORMAT - 64)) | (1L << (T_FOUND - 64)) | (1L << (T_FROM - 64)) | (1L << (T_FULL - 64)) | (1L << (T_FUNCTION - 64)) | (1L << (T_GET - 64)) | (1L << (T_GLOBAL - 64)) | (1L << (T_GRANT - 64)) | (1L << (T_GROUP - 64)) | (1L << (T_HANDLER - 64)) | (1L << (T_HASH - 64)) | (1L << (T_HAVING - 64)) | (1L << (T_HIVE - 64)) | (1L << (T_HOST - 64)) | (1L << (T_IF - 64)) | (1L << (T_IGNORE - 64)) | (1L << (T_IMMEDIATE - 64)) | (1L << (T_IN - 64)) | (1L << (T_INCLUDE - 64)) | (1L << (T_INDEX - 64)) | (1L << (T_INNER - 64)) | (1L << (T_INOUT - 64)) | (1L << (T_INSERT - 64)) | (1L << (T_INT - 64)) | (1L << (T_INTEGER - 64)) | (1L << (T_INTERSECT - 64)) | (1L << (T_INTO - 64)) | (1L << (T_INVOKER - 64)) | (1L << (T_IS - 64)) | (1L << (T_ITEMS - 64)) | (1L << (T_JOIN - 64)) | (1L << (T_KEY - 64)) | (1L << (T_KEYS - 64)) | (1L << (T_LANGUAGE - 64)) | (1L << (T_LEAVE - 64)) | (1L << (T_LEFT - 64)) | (1L << (T_LIKE - 64)) | (1L << (T_LIMIT - 64)) | (1L << (T_LINES - 64)) | (1L << (T_LOCAL - 64)) | (1L << (T_LOGGED - 64)) | (1L << (T_LOOP - 64)) | (1L << (T_MAP - 64)) | (1L << (T_MATCHED - 64)) | (1L << (T_MAX - 64)) | (1L << (T_MERGE - 64)) | (1L << (T_MESSAGE_TEXT - 64)) | (1L << (T_MICROSECOND - 64)) | (1L << (T_MICROSECONDS - 64)) | (1L << (T_MIN - 64)) | (1L << (T_MULTISET - 64)) | (1L << (T_NOT - 64)))) != 0) || ((((_la - 129)) & ~0x3f) == 0 && ((1L << (_la - 129)) & ((1L << (T_NUMBER - 129)) | (1L << (T_OBJECT - 129)) | (1L << (T_ON - 129)) | (1L << (T_ONLY - 129)) | (1L << (T_OPEN - 129)) | (1L << (T_OR - 129)) | (1L << (T_ORDER - 129)) | (1L << (T_OUT - 129)) | (1L << (T_OUTER - 129)) | (1L << (T_OVER - 129)) | (1L << (T_OVERWRITE - 129)) | (1L << (T_OWNER - 129)) | (1L << (T_PARTITION - 129)) | (1L << (T_PRESERVE - 129)) | (1L << (T_PRIMARY - 129)) | (1L << (T_PRINT - 129)) | (1L << (T_PROC - 129)) | (1L << (T_PROCEDURE - 129)) | (1L << (T_REGEXP - 129)) | (1L << (T_REPLACE - 129)) | (1L << (T_RESIGNAL - 129)) | (1L << (T_RESULT - 129)) | (1L << (T_RETURN - 129)) | (1L << (T_RETURNS - 129)) | (1L << (T_REVERSE - 129)) | (1L << (T_RIGHT - 129)) | (1L << (T_RLIKE - 129)) | (1L << (T_ROLLBACK - 129)) | (1L << (T_ROW - 129)) | (1L << (T_ROWS - 129)) | (1L << (T_ROW_COUNT - 129)) | (1L << (T_RR - 129)) | (1L << (T_RS - 129)) | (1L << (T_TRIM - 129)) | (1L << (T_SECURITY - 129)) | (1L << (T_SEL - 129)) | (1L << (T_SELECT - 129)) | (1L << (T_SET - 129)) | (1L << (T_SETS - 129)) | (1L << (T_SIGNAL - 129)) | (1L << (T_SMALLINT - 129)) | (1L << (T_SQL - 129)) | (1L << (T_SQLEXCEPTION - 129)) | (1L << (T_SQLINSERT - 129)) | (1L << (T_SQLSTATE - 129)) | (1L << (T_SQLWARNING - 129)) | (1L << (T_STEP - 129)) | (1L << (T_STRING - 129)) | (1L << (T_SUBSTRING - 129)) | (1L << (T_SUM - 129)) | (1L << (T_TABLE - 129)) | (1L << (T_TEMPORARY - 129)) | (1L << (T_TERMINATED - 129)) | (1L << (T_THEN - 129)) | (1L << (T_TIMESTAMP - 129)) | (1L << (T_TITLE - 129)) | (1L << (T_TO - 129)) | (1L << (T_TOP - 129)) | (1L << (T_UNIQUE - 129)) | (1L << (T_UPDATE - 129)) | (1L << (T_UR - 129)) | (1L << (T_USE - 129)) | (1L << (T_USING - 129)))) != 0) || ((((_la - 193)) & ~0x3f) == 0 && ((1L << (_la - 193)) & ((1L << (T_VALUE - 193)) | (1L << (T_VALUES - 193)) | (1L << (T_VAR - 193)) | (1L << (T_VARCHAR - 193)) | (1L << (T_VARCHAR2 - 193)) | (1L << (T_VOLATILE - 193)) | (1L << (T_WHILE - 193)) | (1L << (T_WITH - 193)) | (1L << (T_WITHOUT - 193)) | (1L << (T_WORK - 193)) | (1L << (T_ACTIVITY_COUNT - 193)) | (1L << (T_CURRENT_DATE - 193)) | (1L << (T_CURRENT_TIMESTAMP - 193)) | (1L << (T_CURRENT_USER - 193)) | (1L << (T_DENSE_RANK - 193)) | (1L << (T_FIRST_VALUE - 193)) | (1L << (T_LAG - 193)) | (1L << (T_LAST_VALUE - 193)) | (1L << (T_LEAD - 193)) | (1L << (T_PART_LOC - 193)) | (1L << (T_RANK - 193)) | (1L << (T_ROW_NUMBER - 193)) | (1L << (T_STDEV - 193)) | (1L << (T_SYSDATE - 193)) | (1L << (T_VARIANCE - 193)) | (1L << (T_USER - 193)) | (1L << (L_ID - 193)))) != 0)) { + { + setState(849); + create_routine_param_item(); + setState(854); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T_COMMA) { + { + { + setState(850); + match(T_COMMA); + setState(851); + create_routine_param_item(); + } + } + setState(856); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + + setState(859); + match(T_CLOSE_P); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Create_routine_param_itemContext extends ParserRuleContext { + public IdentContext ident() { + return getRuleContext(IdentContext.class,0); + } + public DtypeContext dtype() { + return getRuleContext(DtypeContext.class,0); + } + public TerminalNode T_IN() { return getToken(HplsqlParser.T_IN, 0); } + public TerminalNode T_OUT() { return getToken(HplsqlParser.T_OUT, 0); } + public TerminalNode T_INOUT() { return getToken(HplsqlParser.T_INOUT, 0); } + public Dtype_lenContext dtype_len() { + return getRuleContext(Dtype_lenContext.class,0); + } + public List dtype_attr() { + return getRuleContexts(Dtype_attrContext.class); + } + public Dtype_attrContext dtype_attr(int i) { + return getRuleContext(Dtype_attrContext.class,i); + } + public Dtype_defaultContext dtype_default() { + return getRuleContext(Dtype_defaultContext.class,0); + } + public Create_routine_param_itemContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_create_routine_param_item; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitCreate_routine_param_item(this); + else return visitor.visitChildren(this); + } + } + + public final Create_routine_param_itemContext create_routine_param_item() throws RecognitionException { + Create_routine_param_itemContext _localctx = new Create_routine_param_itemContext(_ctx, getState()); + enterRule(_localctx, 90, RULE_create_routine_param_item); + int _la; + try { + setState(903); + switch ( getInterpreter().adaptivePredict(_input,81,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(866); + switch ( getInterpreter().adaptivePredict(_input,73,_ctx) ) { + case 1: + { + setState(861); + match(T_IN); + } + break; + case 2: + { + setState(862); + match(T_OUT); + } + break; + case 3: + { + setState(863); + match(T_INOUT); + } + break; + case 4: + { + setState(864); + match(T_IN); + setState(865); + match(T_OUT); + } + break; + } + setState(868); + ident(); + setState(869); + dtype(); + setState(871); + _la = _input.LA(1); + if (_la==T_OPEN_P) { + { + setState(870); + dtype_len(); + } + } + + setState(876); + _errHandler.sync(this); + _la = _input.LA(1); + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T_CASESPECIFIC) | (1L << T_CHARACTER) | (1L << T_CS))) != 0) || _la==T_NOT) { + { + { + setState(873); + dtype_attr(); + } + } + setState(878); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(880); + _la = _input.LA(1); + if (_la==T_DEFAULT || _la==T_COLON || _la==T_EQUAL) { + { + setState(879); + dtype_default(); + } + } + + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(882); + ident(); + setState(888); + switch ( getInterpreter().adaptivePredict(_input,77,_ctx) ) { + case 1: + { + setState(883); + match(T_IN); + } + break; + case 2: + { + setState(884); + match(T_OUT); + } + break; + case 3: + { + setState(885); + match(T_INOUT); + } + break; + case 4: + { + setState(886); + match(T_IN); + setState(887); + match(T_OUT); + } + break; + } + setState(890); + dtype(); + setState(892); + _la = _input.LA(1); + if (_la==T_OPEN_P) { + { + setState(891); + dtype_len(); + } + } + + setState(897); + _errHandler.sync(this); + _la = _input.LA(1); + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T_CASESPECIFIC) | (1L << T_CHARACTER) | (1L << T_CS))) != 0) || _la==T_NOT) { + { + { + setState(894); + dtype_attr(); + } + } + setState(899); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(901); + _la = _input.LA(1); + if (_la==T_DEFAULT || _la==T_COLON || _la==T_EQUAL) { + { + setState(900); + dtype_default(); + } + } + + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Create_routine_optionsContext extends ParserRuleContext { + public List create_routine_option() { + return getRuleContexts(Create_routine_optionContext.class); + } + public Create_routine_optionContext create_routine_option(int i) { + return getRuleContext(Create_routine_optionContext.class,i); + } + public Create_routine_optionsContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_create_routine_options; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitCreate_routine_options(this); + else return visitor.visitChildren(this); + } + } + + public final Create_routine_optionsContext create_routine_options() throws RecognitionException { + Create_routine_optionsContext _localctx = new Create_routine_optionsContext(_ctx, getState()); + enterRule(_localctx, 92, RULE_create_routine_options); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(906); + _errHandler.sync(this); + _alt = 1; + do { + switch (_alt) { + case 1: + { + { + setState(905); + create_routine_option(); + } + } + break; + default: + throw new NoViableAltException(this); + } + setState(908); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,82,_ctx); + } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Create_routine_optionContext extends ParserRuleContext { + public TerminalNode T_LANGUAGE() { return getToken(HplsqlParser.T_LANGUAGE, 0); } + public TerminalNode T_SQL() { return getToken(HplsqlParser.T_SQL, 0); } + public TerminalNode T_SECURITY() { return getToken(HplsqlParser.T_SECURITY, 0); } + public TerminalNode T_CREATOR() { return getToken(HplsqlParser.T_CREATOR, 0); } + public TerminalNode T_DEFINER() { return getToken(HplsqlParser.T_DEFINER, 0); } + public TerminalNode T_INVOKER() { return getToken(HplsqlParser.T_INVOKER, 0); } + public TerminalNode T_OWNER() { return getToken(HplsqlParser.T_OWNER, 0); } + public TerminalNode T_DYNAMIC() { return getToken(HplsqlParser.T_DYNAMIC, 0); } + public TerminalNode T_RESULT() { return getToken(HplsqlParser.T_RESULT, 0); } + public TerminalNode T_SETS() { return getToken(HplsqlParser.T_SETS, 0); } + public TerminalNode L_INT() { return getToken(HplsqlParser.L_INT, 0); } + public Create_routine_optionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_create_routine_option; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitCreate_routine_option(this); + else return visitor.visitChildren(this); + } + } + + public final Create_routine_optionContext create_routine_option() throws RecognitionException { + Create_routine_optionContext _localctx = new Create_routine_optionContext(_ctx, getState()); + enterRule(_localctx, 94, RULE_create_routine_option); + int _la; + try { + setState(919); + switch (_input.LA(1)) { + case T_LANGUAGE: + enterOuterAlt(_localctx, 1); + { + setState(910); + match(T_LANGUAGE); + setState(911); + match(T_SQL); + } + break; + case T_SQL: + enterOuterAlt(_localctx, 2); + { + setState(912); + match(T_SQL); + setState(913); + match(T_SECURITY); + setState(914); + _la = _input.LA(1); + if ( !(_la==T_CREATOR || _la==T_DEFINER || _la==T_INVOKER || _la==T_OWNER) ) { + _errHandler.recoverInline(this); + } else { + consume(); + } + } + break; + case T_DYNAMIC: + enterOuterAlt(_localctx, 3); + { + setState(915); + match(T_DYNAMIC); + setState(916); + match(T_RESULT); + setState(917); + match(T_SETS); + setState(918); + match(L_INT); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Drop_stmtContext extends ParserRuleContext { + public TerminalNode T_DROP() { return getToken(HplsqlParser.T_DROP, 0); } + public TerminalNode T_TABLE() { return getToken(HplsqlParser.T_TABLE, 0); } + public Table_nameContext table_name() { + return getRuleContext(Table_nameContext.class,0); + } + public TerminalNode T_IF() { return getToken(HplsqlParser.T_IF, 0); } + public TerminalNode T_EXISTS() { return getToken(HplsqlParser.T_EXISTS, 0); } + public Drop_stmtContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_drop_stmt; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitDrop_stmt(this); + else return visitor.visitChildren(this); + } + } + + public final Drop_stmtContext drop_stmt() throws RecognitionException { + Drop_stmtContext _localctx = new Drop_stmtContext(_ctx, getState()); + enterRule(_localctx, 96, RULE_drop_stmt); + try { + enterOuterAlt(_localctx, 1); + { + setState(921); + match(T_DROP); + setState(922); + match(T_TABLE); + setState(925); + switch ( getInterpreter().adaptivePredict(_input,84,_ctx) ) { + case 1: + { + setState(923); + match(T_IF); + setState(924); + match(T_EXISTS); + } + break; + } + setState(927); + table_name(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Exec_stmtContext extends ParserRuleContext { + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public TerminalNode T_EXEC() { return getToken(HplsqlParser.T_EXEC, 0); } + public TerminalNode T_EXECUTE() { return getToken(HplsqlParser.T_EXECUTE, 0); } + public TerminalNode T_IMMEDIATE() { return getToken(HplsqlParser.T_IMMEDIATE, 0); } + public TerminalNode T_INTO() { return getToken(HplsqlParser.T_INTO, 0); } + public List L_ID() { return getTokens(HplsqlParser.L_ID); } + public TerminalNode L_ID(int i) { + return getToken(HplsqlParser.L_ID, i); + } + public Using_clauseContext using_clause() { + return getRuleContext(Using_clauseContext.class,0); + } + public List T_COMMA() { return getTokens(HplsqlParser.T_COMMA); } + public TerminalNode T_COMMA(int i) { + return getToken(HplsqlParser.T_COMMA, i); + } + public Exec_stmtContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_exec_stmt; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitExec_stmt(this); + else return visitor.visitChildren(this); + } + } + + public final Exec_stmtContext exec_stmt() throws RecognitionException { + Exec_stmtContext _localctx = new Exec_stmtContext(_ctx, getState()); + enterRule(_localctx, 98, RULE_exec_stmt); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(929); + _la = _input.LA(1); + if ( !(_la==T_EXEC || _la==T_EXECUTE) ) { + _errHandler.recoverInline(this); + } else { + consume(); + } + setState(931); + switch ( getInterpreter().adaptivePredict(_input,85,_ctx) ) { + case 1: + { + setState(930); + match(T_IMMEDIATE); + } + break; + } + setState(933); + expr(0); + setState(943); + switch ( getInterpreter().adaptivePredict(_input,87,_ctx) ) { + case 1: + { + setState(934); + match(T_INTO); + setState(935); + match(L_ID); + setState(940); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,86,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(936); + match(T_COMMA); + setState(937); + match(L_ID); + } + } + } + setState(942); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,86,_ctx); + } + } + break; + } + setState(946); + switch ( getInterpreter().adaptivePredict(_input,88,_ctx) ) { + case 1: + { + setState(945); + using_clause(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class If_stmtContext extends ParserRuleContext { + public If_plsql_stmtContext if_plsql_stmt() { + return getRuleContext(If_plsql_stmtContext.class,0); + } + public If_tsql_stmtContext if_tsql_stmt() { + return getRuleContext(If_tsql_stmtContext.class,0); + } + public If_stmtContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_if_stmt; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitIf_stmt(this); + else return visitor.visitChildren(this); + } + } + + public final If_stmtContext if_stmt() throws RecognitionException { + If_stmtContext _localctx = new If_stmtContext(_ctx, getState()); + enterRule(_localctx, 100, RULE_if_stmt); + try { + setState(950); + switch ( getInterpreter().adaptivePredict(_input,89,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(948); + if_plsql_stmt(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(949); + if_tsql_stmt(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class If_plsql_stmtContext extends ParserRuleContext { + public List T_IF() { return getTokens(HplsqlParser.T_IF); } + public TerminalNode T_IF(int i) { + return getToken(HplsqlParser.T_IF, i); + } + public Bool_exprContext bool_expr() { + return getRuleContext(Bool_exprContext.class,0); + } + public TerminalNode T_THEN() { return getToken(HplsqlParser.T_THEN, 0); } + public BlockContext block() { + return getRuleContext(BlockContext.class,0); + } + public TerminalNode T_END() { return getToken(HplsqlParser.T_END, 0); } + public List elseif_block() { + return getRuleContexts(Elseif_blockContext.class); + } + public Elseif_blockContext elseif_block(int i) { + return getRuleContext(Elseif_blockContext.class,i); + } + public Else_blockContext else_block() { + return getRuleContext(Else_blockContext.class,0); + } + public If_plsql_stmtContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_if_plsql_stmt; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitIf_plsql_stmt(this); + else return visitor.visitChildren(this); + } + } + + public final If_plsql_stmtContext if_plsql_stmt() throws RecognitionException { + If_plsql_stmtContext _localctx = new If_plsql_stmtContext(_ctx, getState()); + enterRule(_localctx, 102, RULE_if_plsql_stmt); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(952); + match(T_IF); + setState(953); + bool_expr(0); + setState(954); + match(T_THEN); + setState(955); + block(); + setState(959); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T_ELSEIF || _la==T_ELSIF) { + { + { + setState(956); + elseif_block(); + } + } + setState(961); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(963); + _la = _input.LA(1); + if (_la==T_ELSE) { + { + setState(962); + else_block(); + } + } + + setState(965); + match(T_END); + setState(966); + match(T_IF); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class If_tsql_stmtContext extends ParserRuleContext { + public TerminalNode T_IF() { return getToken(HplsqlParser.T_IF, 0); } + public Bool_exprContext bool_expr() { + return getRuleContext(Bool_exprContext.class,0); + } + public List single_block_stmt() { + return getRuleContexts(Single_block_stmtContext.class); + } + public Single_block_stmtContext single_block_stmt(int i) { + return getRuleContext(Single_block_stmtContext.class,i); + } + public TerminalNode T_ELSE() { return getToken(HplsqlParser.T_ELSE, 0); } + public If_tsql_stmtContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_if_tsql_stmt; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitIf_tsql_stmt(this); + else return visitor.visitChildren(this); + } + } + + public final If_tsql_stmtContext if_tsql_stmt() throws RecognitionException { + If_tsql_stmtContext _localctx = new If_tsql_stmtContext(_ctx, getState()); + enterRule(_localctx, 104, RULE_if_tsql_stmt); + try { + enterOuterAlt(_localctx, 1); + { + setState(968); + match(T_IF); + setState(969); + bool_expr(0); + setState(970); + single_block_stmt(); + setState(973); + switch ( getInterpreter().adaptivePredict(_input,92,_ctx) ) { + case 1: + { + setState(971); + match(T_ELSE); + setState(972); + single_block_stmt(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Elseif_blockContext extends ParserRuleContext { + public Bool_exprContext bool_expr() { + return getRuleContext(Bool_exprContext.class,0); + } + public TerminalNode T_THEN() { return getToken(HplsqlParser.T_THEN, 0); } + public BlockContext block() { + return getRuleContext(BlockContext.class,0); + } + public TerminalNode T_ELSIF() { return getToken(HplsqlParser.T_ELSIF, 0); } + public TerminalNode T_ELSEIF() { return getToken(HplsqlParser.T_ELSEIF, 0); } + public Elseif_blockContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_elseif_block; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitElseif_block(this); + else return visitor.visitChildren(this); + } + } + + public final Elseif_blockContext elseif_block() throws RecognitionException { + Elseif_blockContext _localctx = new Elseif_blockContext(_ctx, getState()); + enterRule(_localctx, 106, RULE_elseif_block); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(975); + _la = _input.LA(1); + if ( !(_la==T_ELSEIF || _la==T_ELSIF) ) { + _errHandler.recoverInline(this); + } else { + consume(); + } + setState(976); + bool_expr(0); + setState(977); + match(T_THEN); + setState(978); + block(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Else_blockContext extends ParserRuleContext { + public TerminalNode T_ELSE() { return getToken(HplsqlParser.T_ELSE, 0); } + public BlockContext block() { + return getRuleContext(BlockContext.class,0); + } + public Else_blockContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_else_block; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitElse_block(this); + else return visitor.visitChildren(this); + } + } + + public final Else_blockContext else_block() throws RecognitionException { + Else_blockContext _localctx = new Else_blockContext(_ctx, getState()); + enterRule(_localctx, 108, RULE_else_block); + try { + enterOuterAlt(_localctx, 1); + { + setState(980); + match(T_ELSE); + setState(981); + block(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Include_stmtContext extends ParserRuleContext { + public TerminalNode T_INCLUDE() { return getToken(HplsqlParser.T_INCLUDE, 0); } + public File_nameContext file_name() { + return getRuleContext(File_nameContext.class,0); + } + public Include_stmtContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_include_stmt; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitInclude_stmt(this); + else return visitor.visitChildren(this); + } + } + + public final Include_stmtContext include_stmt() throws RecognitionException { + Include_stmtContext _localctx = new Include_stmtContext(_ctx, getState()); + enterRule(_localctx, 110, RULE_include_stmt); + try { + enterOuterAlt(_localctx, 1); + { + setState(983); + match(T_INCLUDE); + setState(984); + file_name(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Insert_stmtContext extends ParserRuleContext { + public TerminalNode T_INSERT() { return getToken(HplsqlParser.T_INSERT, 0); } + public Table_nameContext table_name() { + return getRuleContext(Table_nameContext.class,0); + } + public TerminalNode T_OVERWRITE() { return getToken(HplsqlParser.T_OVERWRITE, 0); } + public TerminalNode T_TABLE() { return getToken(HplsqlParser.T_TABLE, 0); } + public TerminalNode T_INTO() { return getToken(HplsqlParser.T_INTO, 0); } + public Select_stmtContext select_stmt() { + return getRuleContext(Select_stmtContext.class,0); + } + public Insert_stmt_rowsContext insert_stmt_rows() { + return getRuleContext(Insert_stmt_rowsContext.class,0); + } + public Insert_stmt_colsContext insert_stmt_cols() { + return getRuleContext(Insert_stmt_colsContext.class,0); + } + public Insert_stmtContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_insert_stmt; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitInsert_stmt(this); + else return visitor.visitChildren(this); + } + } + + public final Insert_stmtContext insert_stmt() throws RecognitionException { + Insert_stmtContext _localctx = new Insert_stmtContext(_ctx, getState()); + enterRule(_localctx, 112, RULE_insert_stmt); + try { + enterOuterAlt(_localctx, 1); + { + setState(986); + match(T_INSERT); + setState(993); + switch (_input.LA(1)) { + case T_OVERWRITE: + { + setState(987); + match(T_OVERWRITE); + setState(988); + match(T_TABLE); + } + break; + case T_INTO: + { + setState(989); + match(T_INTO); + setState(991); + switch ( getInterpreter().adaptivePredict(_input,93,_ctx) ) { + case 1: + { + setState(990); + match(T_TABLE); + } + break; + } + } + break; + default: + throw new NoViableAltException(this); + } + setState(995); + table_name(); + setState(997); + switch ( getInterpreter().adaptivePredict(_input,95,_ctx) ) { + case 1: + { + setState(996); + insert_stmt_cols(); + } + break; + } + setState(1001); + switch (_input.LA(1)) { + case T_SEL: + case T_SELECT: + case T_WITH: + case T_OPEN_P: + { + setState(999); + select_stmt(); + } + break; + case T_VALUES: + { + setState(1000); + insert_stmt_rows(); + } + break; + default: + throw new NoViableAltException(this); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Insert_stmt_colsContext extends ParserRuleContext { + public TerminalNode T_OPEN_P() { return getToken(HplsqlParser.T_OPEN_P, 0); } + public List ident() { + return getRuleContexts(IdentContext.class); + } + public IdentContext ident(int i) { + return getRuleContext(IdentContext.class,i); + } + public TerminalNode T_CLOSE_P() { return getToken(HplsqlParser.T_CLOSE_P, 0); } + public List T_COMMA() { return getTokens(HplsqlParser.T_COMMA); } + public TerminalNode T_COMMA(int i) { + return getToken(HplsqlParser.T_COMMA, i); + } + public Insert_stmt_colsContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_insert_stmt_cols; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitInsert_stmt_cols(this); + else return visitor.visitChildren(this); + } + } + + public final Insert_stmt_colsContext insert_stmt_cols() throws RecognitionException { + Insert_stmt_colsContext _localctx = new Insert_stmt_colsContext(_ctx, getState()); + enterRule(_localctx, 114, RULE_insert_stmt_cols); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1003); + match(T_OPEN_P); + setState(1004); + ident(); + setState(1009); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T_COMMA) { + { + { + setState(1005); + match(T_COMMA); + setState(1006); + ident(); + } + } + setState(1011); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1012); + match(T_CLOSE_P); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Insert_stmt_rowsContext extends ParserRuleContext { + public TerminalNode T_VALUES() { return getToken(HplsqlParser.T_VALUES, 0); } + public List insert_stmt_row() { + return getRuleContexts(Insert_stmt_rowContext.class); + } + public Insert_stmt_rowContext insert_stmt_row(int i) { + return getRuleContext(Insert_stmt_rowContext.class,i); + } + public List T_COMMA() { return getTokens(HplsqlParser.T_COMMA); } + public TerminalNode T_COMMA(int i) { + return getToken(HplsqlParser.T_COMMA, i); + } + public Insert_stmt_rowsContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_insert_stmt_rows; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitInsert_stmt_rows(this); + else return visitor.visitChildren(this); + } + } + + public final Insert_stmt_rowsContext insert_stmt_rows() throws RecognitionException { + Insert_stmt_rowsContext _localctx = new Insert_stmt_rowsContext(_ctx, getState()); + enterRule(_localctx, 116, RULE_insert_stmt_rows); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(1014); + match(T_VALUES); + setState(1015); + insert_stmt_row(); + setState(1020); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,98,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(1016); + match(T_COMMA); + setState(1017); + insert_stmt_row(); + } + } + } + setState(1022); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,98,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Insert_stmt_rowContext extends ParserRuleContext { + public TerminalNode T_OPEN_P() { return getToken(HplsqlParser.T_OPEN_P, 0); } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public TerminalNode T_CLOSE_P() { return getToken(HplsqlParser.T_CLOSE_P, 0); } + public List T_COMMA() { return getTokens(HplsqlParser.T_COMMA); } + public TerminalNode T_COMMA(int i) { + return getToken(HplsqlParser.T_COMMA, i); + } + public Insert_stmt_rowContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_insert_stmt_row; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitInsert_stmt_row(this); + else return visitor.visitChildren(this); + } + } + + public final Insert_stmt_rowContext insert_stmt_row() throws RecognitionException { + Insert_stmt_rowContext _localctx = new Insert_stmt_rowContext(_ctx, getState()); + enterRule(_localctx, 118, RULE_insert_stmt_row); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1023); + match(T_OPEN_P); + setState(1024); + expr(0); + setState(1029); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T_COMMA) { + { + { + setState(1025); + match(T_COMMA); + setState(1026); + expr(0); + } + } + setState(1031); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1032); + match(T_CLOSE_P); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Exit_stmtContext extends ParserRuleContext { + public TerminalNode T_EXIT() { return getToken(HplsqlParser.T_EXIT, 0); } + public TerminalNode L_ID() { return getToken(HplsqlParser.L_ID, 0); } + public TerminalNode T_WHEN() { return getToken(HplsqlParser.T_WHEN, 0); } + public Bool_exprContext bool_expr() { + return getRuleContext(Bool_exprContext.class,0); + } + public Exit_stmtContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_exit_stmt; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitExit_stmt(this); + else return visitor.visitChildren(this); + } + } + + public final Exit_stmtContext exit_stmt() throws RecognitionException { + Exit_stmtContext _localctx = new Exit_stmtContext(_ctx, getState()); + enterRule(_localctx, 120, RULE_exit_stmt); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1034); + match(T_EXIT); + setState(1036); + switch ( getInterpreter().adaptivePredict(_input,100,_ctx) ) { + case 1: + { + setState(1035); + match(L_ID); + } + break; + } + setState(1040); + _la = _input.LA(1); + if (_la==T_WHEN) { + { + setState(1038); + match(T_WHEN); + setState(1039); + bool_expr(0); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Get_diag_stmtContext extends ParserRuleContext { + public TerminalNode T_GET() { return getToken(HplsqlParser.T_GET, 0); } + public TerminalNode T_DIAGNOSTICS() { return getToken(HplsqlParser.T_DIAGNOSTICS, 0); } + public Get_diag_stmt_itemContext get_diag_stmt_item() { + return getRuleContext(Get_diag_stmt_itemContext.class,0); + } + public Get_diag_stmtContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_get_diag_stmt; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitGet_diag_stmt(this); + else return visitor.visitChildren(this); + } + } + + public final Get_diag_stmtContext get_diag_stmt() throws RecognitionException { + Get_diag_stmtContext _localctx = new Get_diag_stmtContext(_ctx, getState()); + enterRule(_localctx, 122, RULE_get_diag_stmt); + try { + enterOuterAlt(_localctx, 1); + { + setState(1042); + match(T_GET); + setState(1043); + match(T_DIAGNOSTICS); + setState(1044); + get_diag_stmt_item(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Get_diag_stmt_itemContext extends ParserRuleContext { + public Get_diag_stmt_exception_itemContext get_diag_stmt_exception_item() { + return getRuleContext(Get_diag_stmt_exception_itemContext.class,0); + } + public Get_diag_stmt_rowcount_itemContext get_diag_stmt_rowcount_item() { + return getRuleContext(Get_diag_stmt_rowcount_itemContext.class,0); + } + public Get_diag_stmt_itemContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_get_diag_stmt_item; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitGet_diag_stmt_item(this); + else return visitor.visitChildren(this); + } + } + + public final Get_diag_stmt_itemContext get_diag_stmt_item() throws RecognitionException { + Get_diag_stmt_itemContext _localctx = new Get_diag_stmt_itemContext(_ctx, getState()); + enterRule(_localctx, 124, RULE_get_diag_stmt_item); + try { + setState(1048); + switch ( getInterpreter().adaptivePredict(_input,102,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(1046); + get_diag_stmt_exception_item(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(1047); + get_diag_stmt_rowcount_item(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Get_diag_stmt_exception_itemContext extends ParserRuleContext { + public TerminalNode T_EXCEPTION() { return getToken(HplsqlParser.T_EXCEPTION, 0); } + public TerminalNode L_INT() { return getToken(HplsqlParser.L_INT, 0); } + public IdentContext ident() { + return getRuleContext(IdentContext.class,0); + } + public TerminalNode T_EQUAL() { return getToken(HplsqlParser.T_EQUAL, 0); } + public TerminalNode T_MESSAGE_TEXT() { return getToken(HplsqlParser.T_MESSAGE_TEXT, 0); } + public Get_diag_stmt_exception_itemContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_get_diag_stmt_exception_item; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitGet_diag_stmt_exception_item(this); + else return visitor.visitChildren(this); + } + } + + public final Get_diag_stmt_exception_itemContext get_diag_stmt_exception_item() throws RecognitionException { + Get_diag_stmt_exception_itemContext _localctx = new Get_diag_stmt_exception_itemContext(_ctx, getState()); + enterRule(_localctx, 126, RULE_get_diag_stmt_exception_item); + try { + enterOuterAlt(_localctx, 1); + { + setState(1050); + match(T_EXCEPTION); + setState(1051); + match(L_INT); + setState(1052); + ident(); + setState(1053); + match(T_EQUAL); + setState(1054); + match(T_MESSAGE_TEXT); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Get_diag_stmt_rowcount_itemContext extends ParserRuleContext { + public IdentContext ident() { + return getRuleContext(IdentContext.class,0); + } + public TerminalNode T_EQUAL() { return getToken(HplsqlParser.T_EQUAL, 0); } + public TerminalNode T_ROW_COUNT() { return getToken(HplsqlParser.T_ROW_COUNT, 0); } + public Get_diag_stmt_rowcount_itemContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_get_diag_stmt_rowcount_item; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitGet_diag_stmt_rowcount_item(this); + else return visitor.visitChildren(this); + } + } + + public final Get_diag_stmt_rowcount_itemContext get_diag_stmt_rowcount_item() throws RecognitionException { + Get_diag_stmt_rowcount_itemContext _localctx = new Get_diag_stmt_rowcount_itemContext(_ctx, getState()); + enterRule(_localctx, 128, RULE_get_diag_stmt_rowcount_item); + try { + enterOuterAlt(_localctx, 1); + { + setState(1056); + ident(); + setState(1057); + match(T_EQUAL); + setState(1058); + match(T_ROW_COUNT); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Grant_stmtContext extends ParserRuleContext { + public TerminalNode T_GRANT() { return getToken(HplsqlParser.T_GRANT, 0); } + public List grant_stmt_item() { + return getRuleContexts(Grant_stmt_itemContext.class); + } + public Grant_stmt_itemContext grant_stmt_item(int i) { + return getRuleContext(Grant_stmt_itemContext.class,i); + } + public TerminalNode T_TO() { return getToken(HplsqlParser.T_TO, 0); } + public IdentContext ident() { + return getRuleContext(IdentContext.class,0); + } + public List T_COMMA() { return getTokens(HplsqlParser.T_COMMA); } + public TerminalNode T_COMMA(int i) { + return getToken(HplsqlParser.T_COMMA, i); + } + public Grant_stmtContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_grant_stmt; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitGrant_stmt(this); + else return visitor.visitChildren(this); + } + } + + public final Grant_stmtContext grant_stmt() throws RecognitionException { + Grant_stmtContext _localctx = new Grant_stmtContext(_ctx, getState()); + enterRule(_localctx, 130, RULE_grant_stmt); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1060); + match(T_GRANT); + setState(1061); + grant_stmt_item(); + setState(1066); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T_COMMA) { + { + { + setState(1062); + match(T_COMMA); + setState(1063); + grant_stmt_item(); + } + } + setState(1068); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1069); + match(T_TO); + setState(1070); + ident(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Grant_stmt_itemContext extends ParserRuleContext { + public TerminalNode T_EXECUTE() { return getToken(HplsqlParser.T_EXECUTE, 0); } + public TerminalNode T_ON() { return getToken(HplsqlParser.T_ON, 0); } + public TerminalNode T_PROCEDURE() { return getToken(HplsqlParser.T_PROCEDURE, 0); } + public IdentContext ident() { + return getRuleContext(IdentContext.class,0); + } + public Grant_stmt_itemContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_grant_stmt_item; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitGrant_stmt_item(this); + else return visitor.visitChildren(this); + } + } + + public final Grant_stmt_itemContext grant_stmt_item() throws RecognitionException { + Grant_stmt_itemContext _localctx = new Grant_stmt_itemContext(_ctx, getState()); + enterRule(_localctx, 132, RULE_grant_stmt_item); + try { + enterOuterAlt(_localctx, 1); + { + setState(1072); + match(T_EXECUTE); + setState(1073); + match(T_ON); + setState(1074); + match(T_PROCEDURE); + setState(1075); + ident(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Leave_stmtContext extends ParserRuleContext { + public TerminalNode T_LEAVE() { return getToken(HplsqlParser.T_LEAVE, 0); } + public TerminalNode L_ID() { return getToken(HplsqlParser.L_ID, 0); } + public Leave_stmtContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_leave_stmt; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitLeave_stmt(this); + else return visitor.visitChildren(this); + } + } + + public final Leave_stmtContext leave_stmt() throws RecognitionException { + Leave_stmtContext _localctx = new Leave_stmtContext(_ctx, getState()); + enterRule(_localctx, 134, RULE_leave_stmt); + try { + enterOuterAlt(_localctx, 1); + { + setState(1077); + match(T_LEAVE); + setState(1079); + switch ( getInterpreter().adaptivePredict(_input,104,_ctx) ) { + case 1: + { + setState(1078); + match(L_ID); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Map_object_stmtContext extends ParserRuleContext { + public TerminalNode T_MAP() { return getToken(HplsqlParser.T_MAP, 0); } + public TerminalNode T_OBJECT() { return getToken(HplsqlParser.T_OBJECT, 0); } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public TerminalNode T_TO() { return getToken(HplsqlParser.T_TO, 0); } + public TerminalNode T_AT() { return getToken(HplsqlParser.T_AT, 0); } + public Map_object_stmtContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_map_object_stmt; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitMap_object_stmt(this); + else return visitor.visitChildren(this); + } + } + + public final Map_object_stmtContext map_object_stmt() throws RecognitionException { + Map_object_stmtContext _localctx = new Map_object_stmtContext(_ctx, getState()); + enterRule(_localctx, 136, RULE_map_object_stmt); + try { + enterOuterAlt(_localctx, 1); + { + setState(1081); + match(T_MAP); + setState(1082); + match(T_OBJECT); + setState(1083); + expr(0); + setState(1086); + switch ( getInterpreter().adaptivePredict(_input,105,_ctx) ) { + case 1: + { + setState(1084); + match(T_TO); + setState(1085); + expr(0); + } + break; + } + setState(1090); + switch ( getInterpreter().adaptivePredict(_input,106,_ctx) ) { + case 1: + { + setState(1088); + match(T_AT); + setState(1089); + expr(0); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Open_stmtContext extends ParserRuleContext { + public TerminalNode T_OPEN() { return getToken(HplsqlParser.T_OPEN, 0); } + public TerminalNode L_ID() { return getToken(HplsqlParser.L_ID, 0); } + public TerminalNode T_FOR() { return getToken(HplsqlParser.T_FOR, 0); } + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public Select_stmtContext select_stmt() { + return getRuleContext(Select_stmtContext.class,0); + } + public Open_stmtContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_open_stmt; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitOpen_stmt(this); + else return visitor.visitChildren(this); + } + } + + public final Open_stmtContext open_stmt() throws RecognitionException { + Open_stmtContext _localctx = new Open_stmtContext(_ctx, getState()); + enterRule(_localctx, 138, RULE_open_stmt); + try { + enterOuterAlt(_localctx, 1); + { + setState(1092); + match(T_OPEN); + setState(1093); + match(L_ID); + setState(1099); + switch ( getInterpreter().adaptivePredict(_input,108,_ctx) ) { + case 1: + { + setState(1094); + match(T_FOR); + setState(1097); + switch ( getInterpreter().adaptivePredict(_input,107,_ctx) ) { + case 1: + { + setState(1095); + expr(0); + } + break; + case 2: + { + setState(1096); + select_stmt(); + } + break; + } + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Fetch_stmtContext extends ParserRuleContext { + public TerminalNode T_FETCH() { return getToken(HplsqlParser.T_FETCH, 0); } + public List L_ID() { return getTokens(HplsqlParser.L_ID); } + public TerminalNode L_ID(int i) { + return getToken(HplsqlParser.L_ID, i); + } + public TerminalNode T_INTO() { return getToken(HplsqlParser.T_INTO, 0); } + public TerminalNode T_FROM() { return getToken(HplsqlParser.T_FROM, 0); } + public List T_COMMA() { return getTokens(HplsqlParser.T_COMMA); } + public TerminalNode T_COMMA(int i) { + return getToken(HplsqlParser.T_COMMA, i); + } + public Fetch_stmtContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_fetch_stmt; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitFetch_stmt(this); + else return visitor.visitChildren(this); + } + } + + public final Fetch_stmtContext fetch_stmt() throws RecognitionException { + Fetch_stmtContext _localctx = new Fetch_stmtContext(_ctx, getState()); + enterRule(_localctx, 140, RULE_fetch_stmt); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(1101); + match(T_FETCH); + setState(1103); + _la = _input.LA(1); + if (_la==T_FROM) { + { + setState(1102); + match(T_FROM); + } + } + + setState(1105); + match(L_ID); + setState(1106); + match(T_INTO); + setState(1107); + match(L_ID); + setState(1112); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,110,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(1108); + match(T_COMMA); + setState(1109); + match(L_ID); + } + } + } + setState(1114); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,110,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Close_stmtContext extends ParserRuleContext { + public TerminalNode T_CLOSE() { return getToken(HplsqlParser.T_CLOSE, 0); } + public TerminalNode L_ID() { return getToken(HplsqlParser.L_ID, 0); } + public Close_stmtContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_close_stmt; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitClose_stmt(this); + else return visitor.visitChildren(this); + } + } + + public final Close_stmtContext close_stmt() throws RecognitionException { + Close_stmtContext _localctx = new Close_stmtContext(_ctx, getState()); + enterRule(_localctx, 142, RULE_close_stmt); + try { + enterOuterAlt(_localctx, 1); + { + setState(1115); + match(T_CLOSE); + setState(1116); + match(L_ID); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Copy_from_local_stmtContext extends ParserRuleContext { + public TerminalNode T_COPY() { return getToken(HplsqlParser.T_COPY, 0); } + public TerminalNode T_FROM() { return getToken(HplsqlParser.T_FROM, 0); } + public TerminalNode T_LOCAL() { return getToken(HplsqlParser.T_LOCAL, 0); } + public List copy_source() { + return getRuleContexts(Copy_sourceContext.class); + } + public Copy_sourceContext copy_source(int i) { + return getRuleContext(Copy_sourceContext.class,i); + } + public TerminalNode T_TO() { return getToken(HplsqlParser.T_TO, 0); } + public Copy_targetContext copy_target() { + return getRuleContext(Copy_targetContext.class,0); + } + public List T_COMMA() { return getTokens(HplsqlParser.T_COMMA); } + public TerminalNode T_COMMA(int i) { + return getToken(HplsqlParser.T_COMMA, i); + } + public List copy_file_option() { + return getRuleContexts(Copy_file_optionContext.class); + } + public Copy_file_optionContext copy_file_option(int i) { + return getRuleContext(Copy_file_optionContext.class,i); + } + public Copy_from_local_stmtContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_copy_from_local_stmt; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitCopy_from_local_stmt(this); + else return visitor.visitChildren(this); + } + } + + public final Copy_from_local_stmtContext copy_from_local_stmt() throws RecognitionException { + Copy_from_local_stmtContext _localctx = new Copy_from_local_stmtContext(_ctx, getState()); + enterRule(_localctx, 144, RULE_copy_from_local_stmt); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(1118); + match(T_COPY); + setState(1119); + match(T_FROM); + setState(1120); + match(T_LOCAL); + setState(1121); + copy_source(); + setState(1126); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T_COMMA) { + { + { + setState(1122); + match(T_COMMA); + setState(1123); + copy_source(); + } + } + setState(1128); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1129); + match(T_TO); + setState(1130); + copy_target(); + setState(1134); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,112,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(1131); + copy_file_option(); + } + } + } + setState(1136); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,112,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Copy_stmtContext extends ParserRuleContext { + public TerminalNode T_COPY() { return getToken(HplsqlParser.T_COPY, 0); } + public TerminalNode T_TO() { return getToken(HplsqlParser.T_TO, 0); } + public Copy_targetContext copy_target() { + return getRuleContext(Copy_targetContext.class,0); + } + public Table_nameContext table_name() { + return getRuleContext(Table_nameContext.class,0); + } + public TerminalNode T_OPEN_P() { return getToken(HplsqlParser.T_OPEN_P, 0); } + public Select_stmtContext select_stmt() { + return getRuleContext(Select_stmtContext.class,0); + } + public TerminalNode T_CLOSE_P() { return getToken(HplsqlParser.T_CLOSE_P, 0); } + public List copy_option() { + return getRuleContexts(Copy_optionContext.class); + } + public Copy_optionContext copy_option(int i) { + return getRuleContext(Copy_optionContext.class,i); + } + public Copy_stmtContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_copy_stmt; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitCopy_stmt(this); + else return visitor.visitChildren(this); + } + } + + public final Copy_stmtContext copy_stmt() throws RecognitionException { + Copy_stmtContext _localctx = new Copy_stmtContext(_ctx, getState()); + enterRule(_localctx, 146, RULE_copy_stmt); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(1137); + match(T_COPY); + setState(1143); + switch (_input.LA(1)) { + case T_ALL: + case T_ALTER: + case T_AND: + case T_AS: + case T_ASC: + case T_AT: + case T_AVG: + case T_BATCHSIZE: + case T_BEGIN: + case T_BETWEEN: + case T_BIGINT: + case T_BREAK: + case T_BY: + case T_CALL: + case T_CALLER: + case T_CASE: + case T_CASESPECIFIC: + case T_CAST: + case T_CHAR: + case T_CHARACTER: + case T_CLIENT: + case T_CLOSE: + case T_COLLECTION: + case T_COPY: + case T_COMMIT: + case T_CONCAT: + case T_CONDITION: + case T_CONSTRAINT: + case T_CONTINUE: + case T_COUNT: + case T_COUNT_BIG: + case T_CREATE: + case T_CREATOR: + case T_CS: + case T_CURRENT: + case T_CURSOR: + case T_DATE: + case T_DAY: + case T_DAYS: + case T_DEC: + case T_DECIMAL: + case T_DECLARE: + case T_DEFAULT: + case T_DEFINED: + case T_DEFINER: + case T_DELETE: + case T_DELIMITED: + case T_DELIMITER: + case T_DESC: + case T_DIAGNOSTICS: + case T_DISTINCT: + case T_DISTRIBUTE: + case T_DO: + case T_DROP: + case T_DYNAMIC: + case T_ESCAPED: + case T_EXCEPT: + case T_EXEC: + case T_EXECUTE: + case T_EXCEPTION: + case T_EXISTS: + case T_EXIT: + case T_FETCH: + case T_FIELDS: + case T_FILE: + case T_FLOAT: + case T_FOR: + case T_FORMAT: + case T_FOUND: + case T_FROM: + case T_FULL: + case T_FUNCTION: + case T_GET: + case T_GLOBAL: + case T_GRANT: + case T_GROUP: + case T_HANDLER: + case T_HASH: + case T_HAVING: + case T_HIVE: + case T_HOST: + case T_IF: + case T_IGNORE: + case T_IMMEDIATE: + case T_IN: + case T_INCLUDE: + case T_INDEX: + case T_INNER: + case T_INOUT: + case T_INSERT: + case T_INT: + case T_INTEGER: + case T_INTERSECT: + case T_INTO: + case T_INVOKER: + case T_IS: + case T_ITEMS: + case T_JOIN: + case T_KEY: + case T_KEYS: + case T_LANGUAGE: + case T_LEAVE: + case T_LEFT: + case T_LIKE: + case T_LIMIT: + case T_LINES: + case T_LOCAL: + case T_LOGGED: + case T_LOOP: + case T_MAP: + case T_MATCHED: + case T_MAX: + case T_MERGE: + case T_MESSAGE_TEXT: + case T_MICROSECOND: + case T_MICROSECONDS: + case T_MIN: + case T_MULTISET: + case T_NOT: + case T_NUMBER: + case T_OBJECT: + case T_ON: + case T_ONLY: + case T_OPEN: + case T_OR: + case T_ORDER: + case T_OUT: + case T_OUTER: + case T_OVER: + case T_OVERWRITE: + case T_OWNER: + case T_PARTITION: + case T_PRESERVE: + case T_PRIMARY: + case T_PRINT: + case T_PROC: + case T_PROCEDURE: + case T_REGEXP: + case T_REPLACE: + case T_RESIGNAL: + case T_RESULT: + case T_RETURN: + case T_RETURNS: + case T_REVERSE: + case T_RIGHT: + case T_RLIKE: + case T_ROLLBACK: + case T_ROW: + case T_ROWS: + case T_ROW_COUNT: + case T_RR: + case T_RS: + case T_TRIM: + case T_SECURITY: + case T_SEL: + case T_SELECT: + case T_SET: + case T_SETS: + case T_SIGNAL: + case T_SMALLINT: + case T_SQL: + case T_SQLEXCEPTION: + case T_SQLINSERT: + case T_SQLSTATE: + case T_SQLWARNING: + case T_STEP: + case T_STRING: + case T_SUBSTRING: + case T_SUM: + case T_TABLE: + case T_TEMPORARY: + case T_TERMINATED: + case T_THEN: + case T_TIMESTAMP: + case T_TITLE: + case T_TO: + case T_TOP: + case T_UNIQUE: + case T_UPDATE: + case T_UR: + case T_USE: + case T_USING: + case T_VALUE: + case T_VALUES: + case T_VAR: + case T_VARCHAR: + case T_VARCHAR2: + case T_VOLATILE: + case T_WHILE: + case T_WITH: + case T_WITHOUT: + case T_WORK: + case T_ACTIVITY_COUNT: + case T_CURRENT_DATE: + case T_CURRENT_TIMESTAMP: + case T_CURRENT_USER: + case T_DENSE_RANK: + case T_FIRST_VALUE: + case T_LAG: + case T_LAST_VALUE: + case T_LEAD: + case T_PART_LOC: + case T_RANK: + case T_ROW_NUMBER: + case T_STDEV: + case T_SYSDATE: + case T_VARIANCE: + case T_USER: + case L_ID: + { + setState(1138); + table_name(); + } + break; + case T_OPEN_P: + { + setState(1139); + match(T_OPEN_P); + setState(1140); + select_stmt(); + setState(1141); + match(T_CLOSE_P); + } + break; + default: + throw new NoViableAltException(this); + } + setState(1145); + match(T_TO); + setState(1146); + copy_target(); + setState(1150); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,114,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(1147); + copy_option(); + } + } + } + setState(1152); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,114,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Copy_sourceContext extends ParserRuleContext { + public IdentContext ident() { + return getRuleContext(IdentContext.class,0); + } + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public TerminalNode L_FILE() { return getToken(HplsqlParser.L_FILE, 0); } + public Copy_sourceContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_copy_source; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitCopy_source(this); + else return visitor.visitChildren(this); + } + } + + public final Copy_sourceContext copy_source() throws RecognitionException { + Copy_sourceContext _localctx = new Copy_sourceContext(_ctx, getState()); + enterRule(_localctx, 148, RULE_copy_source); + try { + enterOuterAlt(_localctx, 1); + { + setState(1156); + switch ( getInterpreter().adaptivePredict(_input,115,_ctx) ) { + case 1: + { + setState(1153); + ident(); + } + break; + case 2: + { + setState(1154); + expr(0); + } + break; + case 3: + { + setState(1155); + match(L_FILE); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Copy_targetContext extends ParserRuleContext { + public IdentContext ident() { + return getRuleContext(IdentContext.class,0); + } + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public TerminalNode L_FILE() { return getToken(HplsqlParser.L_FILE, 0); } + public Copy_targetContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_copy_target; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitCopy_target(this); + else return visitor.visitChildren(this); + } + } + + public final Copy_targetContext copy_target() throws RecognitionException { + Copy_targetContext _localctx = new Copy_targetContext(_ctx, getState()); + enterRule(_localctx, 150, RULE_copy_target); + try { + enterOuterAlt(_localctx, 1); + { + setState(1161); + switch ( getInterpreter().adaptivePredict(_input,116,_ctx) ) { + case 1: + { + setState(1158); + ident(); + } + break; + case 2: + { + setState(1159); + expr(0); + } + break; + case 3: + { + setState(1160); + match(L_FILE); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Copy_optionContext extends ParserRuleContext { + public TerminalNode T_AT() { return getToken(HplsqlParser.T_AT, 0); } + public IdentContext ident() { + return getRuleContext(IdentContext.class,0); + } + public TerminalNode T_BATCHSIZE() { return getToken(HplsqlParser.T_BATCHSIZE, 0); } + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public TerminalNode T_DELIMITER() { return getToken(HplsqlParser.T_DELIMITER, 0); } + public TerminalNode T_SQLINSERT() { return getToken(HplsqlParser.T_SQLINSERT, 0); } + public Copy_optionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_copy_option; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitCopy_option(this); + else return visitor.visitChildren(this); + } + } + + public final Copy_optionContext copy_option() throws RecognitionException { + Copy_optionContext _localctx = new Copy_optionContext(_ctx, getState()); + enterRule(_localctx, 152, RULE_copy_option); + try { + setState(1171); + switch (_input.LA(1)) { + case T_AT: + enterOuterAlt(_localctx, 1); + { + setState(1163); + match(T_AT); + setState(1164); + ident(); + } + break; + case T_BATCHSIZE: + enterOuterAlt(_localctx, 2); + { + setState(1165); + match(T_BATCHSIZE); + setState(1166); + expr(0); + } + break; + case T_DELIMITER: + enterOuterAlt(_localctx, 3); + { + setState(1167); + match(T_DELIMITER); + setState(1168); + expr(0); + } + break; + case T_SQLINSERT: + enterOuterAlt(_localctx, 4); + { + setState(1169); + match(T_SQLINSERT); + setState(1170); + ident(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Copy_file_optionContext extends ParserRuleContext { + public TerminalNode T_DELETE() { return getToken(HplsqlParser.T_DELETE, 0); } + public TerminalNode T_IGNORE() { return getToken(HplsqlParser.T_IGNORE, 0); } + public TerminalNode T_OVERWRITE() { return getToken(HplsqlParser.T_OVERWRITE, 0); } + public Copy_file_optionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_copy_file_option; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitCopy_file_option(this); + else return visitor.visitChildren(this); + } + } + + public final Copy_file_optionContext copy_file_option() throws RecognitionException { + Copy_file_optionContext _localctx = new Copy_file_optionContext(_ctx, getState()); + enterRule(_localctx, 154, RULE_copy_file_option); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1173); + _la = _input.LA(1); + if ( !(_la==T_DELETE || _la==T_IGNORE || _la==T_OVERWRITE) ) { + _errHandler.recoverInline(this); + } else { + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Commit_stmtContext extends ParserRuleContext { + public TerminalNode T_COMMIT() { return getToken(HplsqlParser.T_COMMIT, 0); } + public TerminalNode T_WORK() { return getToken(HplsqlParser.T_WORK, 0); } + public Commit_stmtContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_commit_stmt; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitCommit_stmt(this); + else return visitor.visitChildren(this); + } + } + + public final Commit_stmtContext commit_stmt() throws RecognitionException { + Commit_stmtContext _localctx = new Commit_stmtContext(_ctx, getState()); + enterRule(_localctx, 156, RULE_commit_stmt); + try { + enterOuterAlt(_localctx, 1); + { + setState(1175); + match(T_COMMIT); + setState(1177); + switch ( getInterpreter().adaptivePredict(_input,118,_ctx) ) { + case 1: + { + setState(1176); + match(T_WORK); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Create_index_stmtContext extends ParserRuleContext { + public TerminalNode T_CREATE() { return getToken(HplsqlParser.T_CREATE, 0); } + public TerminalNode T_INDEX() { return getToken(HplsqlParser.T_INDEX, 0); } + public IdentContext ident() { + return getRuleContext(IdentContext.class,0); + } + public TerminalNode T_ON() { return getToken(HplsqlParser.T_ON, 0); } + public Table_nameContext table_name() { + return getRuleContext(Table_nameContext.class,0); + } + public TerminalNode T_OPEN_P() { return getToken(HplsqlParser.T_OPEN_P, 0); } + public List create_index_col() { + return getRuleContexts(Create_index_colContext.class); + } + public Create_index_colContext create_index_col(int i) { + return getRuleContext(Create_index_colContext.class,i); + } + public TerminalNode T_CLOSE_P() { return getToken(HplsqlParser.T_CLOSE_P, 0); } + public TerminalNode T_UNIQUE() { return getToken(HplsqlParser.T_UNIQUE, 0); } + public List T_COMMA() { return getTokens(HplsqlParser.T_COMMA); } + public TerminalNode T_COMMA(int i) { + return getToken(HplsqlParser.T_COMMA, i); + } + public Create_index_stmtContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_create_index_stmt; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitCreate_index_stmt(this); + else return visitor.visitChildren(this); + } + } + + public final Create_index_stmtContext create_index_stmt() throws RecognitionException { + Create_index_stmtContext _localctx = new Create_index_stmtContext(_ctx, getState()); + enterRule(_localctx, 158, RULE_create_index_stmt); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1179); + match(T_CREATE); + setState(1181); + _la = _input.LA(1); + if (_la==T_UNIQUE) { + { + setState(1180); + match(T_UNIQUE); + } + } + + setState(1183); + match(T_INDEX); + setState(1184); + ident(); + setState(1185); + match(T_ON); + setState(1186); + table_name(); + setState(1187); + match(T_OPEN_P); + setState(1188); + create_index_col(); + setState(1193); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T_COMMA) { + { + { + setState(1189); + match(T_COMMA); + setState(1190); + create_index_col(); + } + } + setState(1195); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1196); + match(T_CLOSE_P); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Create_index_colContext extends ParserRuleContext { + public IdentContext ident() { + return getRuleContext(IdentContext.class,0); + } + public TerminalNode T_ASC() { return getToken(HplsqlParser.T_ASC, 0); } + public TerminalNode T_DESC() { return getToken(HplsqlParser.T_DESC, 0); } + public Create_index_colContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_create_index_col; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitCreate_index_col(this); + else return visitor.visitChildren(this); + } + } + + public final Create_index_colContext create_index_col() throws RecognitionException { + Create_index_colContext _localctx = new Create_index_colContext(_ctx, getState()); + enterRule(_localctx, 160, RULE_create_index_col); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1198); + ident(); + setState(1200); + _la = _input.LA(1); + if (_la==T_ASC || _la==T_DESC) { + { + setState(1199); + _la = _input.LA(1); + if ( !(_la==T_ASC || _la==T_DESC) ) { + _errHandler.recoverInline(this); + } else { + consume(); + } + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Print_stmtContext extends ParserRuleContext { + public TerminalNode T_PRINT() { return getToken(HplsqlParser.T_PRINT, 0); } + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public TerminalNode T_OPEN_P() { return getToken(HplsqlParser.T_OPEN_P, 0); } + public TerminalNode T_CLOSE_P() { return getToken(HplsqlParser.T_CLOSE_P, 0); } + public Print_stmtContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_print_stmt; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitPrint_stmt(this); + else return visitor.visitChildren(this); + } + } + + public final Print_stmtContext print_stmt() throws RecognitionException { + Print_stmtContext _localctx = new Print_stmtContext(_ctx, getState()); + enterRule(_localctx, 162, RULE_print_stmt); + try { + setState(1209); + switch ( getInterpreter().adaptivePredict(_input,122,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(1202); + match(T_PRINT); + setState(1203); + expr(0); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(1204); + match(T_PRINT); + setState(1205); + match(T_OPEN_P); + setState(1206); + expr(0); + setState(1207); + match(T_CLOSE_P); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Resignal_stmtContext extends ParserRuleContext { + public TerminalNode T_RESIGNAL() { return getToken(HplsqlParser.T_RESIGNAL, 0); } + public TerminalNode T_SQLSTATE() { return getToken(HplsqlParser.T_SQLSTATE, 0); } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public TerminalNode T_VALUE() { return getToken(HplsqlParser.T_VALUE, 0); } + public TerminalNode T_SET() { return getToken(HplsqlParser.T_SET, 0); } + public TerminalNode T_MESSAGE_TEXT() { return getToken(HplsqlParser.T_MESSAGE_TEXT, 0); } + public TerminalNode T_EQUAL() { return getToken(HplsqlParser.T_EQUAL, 0); } + public Resignal_stmtContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_resignal_stmt; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitResignal_stmt(this); + else return visitor.visitChildren(this); + } + } + + public final Resignal_stmtContext resignal_stmt() throws RecognitionException { + Resignal_stmtContext _localctx = new Resignal_stmtContext(_ctx, getState()); + enterRule(_localctx, 164, RULE_resignal_stmt); + try { + enterOuterAlt(_localctx, 1); + { + setState(1211); + match(T_RESIGNAL); + setState(1223); + switch ( getInterpreter().adaptivePredict(_input,125,_ctx) ) { + case 1: + { + setState(1212); + match(T_SQLSTATE); + setState(1214); + switch ( getInterpreter().adaptivePredict(_input,123,_ctx) ) { + case 1: + { + setState(1213); + match(T_VALUE); + } + break; + } + setState(1216); + expr(0); + setState(1221); + switch ( getInterpreter().adaptivePredict(_input,124,_ctx) ) { + case 1: + { + setState(1217); + match(T_SET); + setState(1218); + match(T_MESSAGE_TEXT); + setState(1219); + match(T_EQUAL); + setState(1220); + expr(0); + } + break; + } + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Return_stmtContext extends ParserRuleContext { + public TerminalNode T_RETURN() { return getToken(HplsqlParser.T_RETURN, 0); } + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public Return_stmtContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_return_stmt; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitReturn_stmt(this); + else return visitor.visitChildren(this); + } + } + + public final Return_stmtContext return_stmt() throws RecognitionException { + Return_stmtContext _localctx = new Return_stmtContext(_ctx, getState()); + enterRule(_localctx, 166, RULE_return_stmt); + try { + enterOuterAlt(_localctx, 1); + { + setState(1225); + match(T_RETURN); + setState(1227); + switch ( getInterpreter().adaptivePredict(_input,126,_ctx) ) { + case 1: + { + setState(1226); + expr(0); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Rollback_stmtContext extends ParserRuleContext { + public TerminalNode T_ROLLBACK() { return getToken(HplsqlParser.T_ROLLBACK, 0); } + public TerminalNode T_WORK() { return getToken(HplsqlParser.T_WORK, 0); } + public Rollback_stmtContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_rollback_stmt; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitRollback_stmt(this); + else return visitor.visitChildren(this); + } + } + + public final Rollback_stmtContext rollback_stmt() throws RecognitionException { + Rollback_stmtContext _localctx = new Rollback_stmtContext(_ctx, getState()); + enterRule(_localctx, 168, RULE_rollback_stmt); + try { + enterOuterAlt(_localctx, 1); + { + setState(1229); + match(T_ROLLBACK); + setState(1231); + switch ( getInterpreter().adaptivePredict(_input,127,_ctx) ) { + case 1: + { + setState(1230); + match(T_WORK); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Signal_stmtContext extends ParserRuleContext { + public TerminalNode T_SIGNAL() { return getToken(HplsqlParser.T_SIGNAL, 0); } + public IdentContext ident() { + return getRuleContext(IdentContext.class,0); + } + public Signal_stmtContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_signal_stmt; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitSignal_stmt(this); + else return visitor.visitChildren(this); + } + } + + public final Signal_stmtContext signal_stmt() throws RecognitionException { + Signal_stmtContext _localctx = new Signal_stmtContext(_ctx, getState()); + enterRule(_localctx, 170, RULE_signal_stmt); + try { + enterOuterAlt(_localctx, 1); + { + setState(1233); + match(T_SIGNAL); + setState(1234); + ident(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Use_stmtContext extends ParserRuleContext { + public TerminalNode T_USE() { return getToken(HplsqlParser.T_USE, 0); } + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public Use_stmtContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_use_stmt; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitUse_stmt(this); + else return visitor.visitChildren(this); + } + } + + public final Use_stmtContext use_stmt() throws RecognitionException { + Use_stmtContext _localctx = new Use_stmtContext(_ctx, getState()); + enterRule(_localctx, 172, RULE_use_stmt); + try { + enterOuterAlt(_localctx, 1); + { + setState(1236); + match(T_USE); + setState(1237); + expr(0); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Values_into_stmtContext extends ParserRuleContext { + public TerminalNode T_VALUES() { return getToken(HplsqlParser.T_VALUES, 0); } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public TerminalNode T_INTO() { return getToken(HplsqlParser.T_INTO, 0); } + public List ident() { + return getRuleContexts(IdentContext.class); + } + public IdentContext ident(int i) { + return getRuleContext(IdentContext.class,i); + } + public List T_OPEN_P() { return getTokens(HplsqlParser.T_OPEN_P); } + public TerminalNode T_OPEN_P(int i) { + return getToken(HplsqlParser.T_OPEN_P, i); + } + public List T_COMMA() { return getTokens(HplsqlParser.T_COMMA); } + public TerminalNode T_COMMA(int i) { + return getToken(HplsqlParser.T_COMMA, i); + } + public List T_CLOSE_P() { return getTokens(HplsqlParser.T_CLOSE_P); } + public TerminalNode T_CLOSE_P(int i) { + return getToken(HplsqlParser.T_CLOSE_P, i); + } + public Values_into_stmtContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_values_into_stmt; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitValues_into_stmt(this); + else return visitor.visitChildren(this); + } + } + + public final Values_into_stmtContext values_into_stmt() throws RecognitionException { + Values_into_stmtContext _localctx = new Values_into_stmtContext(_ctx, getState()); + enterRule(_localctx, 174, RULE_values_into_stmt); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(1239); + match(T_VALUES); + setState(1241); + switch ( getInterpreter().adaptivePredict(_input,128,_ctx) ) { + case 1: + { + setState(1240); + match(T_OPEN_P); + } + break; + } + setState(1243); + expr(0); + setState(1248); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T_COMMA) { + { + { + setState(1244); + match(T_COMMA); + setState(1245); + expr(0); + } + } + setState(1250); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1252); + _la = _input.LA(1); + if (_la==T_CLOSE_P) { + { + setState(1251); + match(T_CLOSE_P); + } + } + + setState(1254); + match(T_INTO); + setState(1256); + _la = _input.LA(1); + if (_la==T_OPEN_P) { + { + setState(1255); + match(T_OPEN_P); + } + } + + setState(1258); + ident(); + setState(1263); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,132,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(1259); + match(T_COMMA); + setState(1260); + ident(); + } + } + } + setState(1265); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,132,_ctx); + } + setState(1267); + switch ( getInterpreter().adaptivePredict(_input,133,_ctx) ) { + case 1: + { + setState(1266); + match(T_CLOSE_P); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class While_stmtContext extends ParserRuleContext { + public List T_WHILE() { return getTokens(HplsqlParser.T_WHILE); } + public TerminalNode T_WHILE(int i) { + return getToken(HplsqlParser.T_WHILE, i); + } + public Bool_exprContext bool_expr() { + return getRuleContext(Bool_exprContext.class,0); + } + public BlockContext block() { + return getRuleContext(BlockContext.class,0); + } + public TerminalNode T_END() { return getToken(HplsqlParser.T_END, 0); } + public TerminalNode T_DO() { return getToken(HplsqlParser.T_DO, 0); } + public List T_LOOP() { return getTokens(HplsqlParser.T_LOOP); } + public TerminalNode T_LOOP(int i) { + return getToken(HplsqlParser.T_LOOP, i); + } + public TerminalNode T_THEN() { return getToken(HplsqlParser.T_THEN, 0); } + public TerminalNode T_BEGIN() { return getToken(HplsqlParser.T_BEGIN, 0); } + public While_stmtContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_while_stmt; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitWhile_stmt(this); + else return visitor.visitChildren(this); + } + } + + public final While_stmtContext while_stmt() throws RecognitionException { + While_stmtContext _localctx = new While_stmtContext(_ctx, getState()); + enterRule(_localctx, 176, RULE_while_stmt); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1269); + match(T_WHILE); + setState(1270); + bool_expr(0); + setState(1271); + _la = _input.LA(1); + if ( !(_la==T_BEGIN || _la==T_DO || _la==T_LOOP || _la==T_THEN) ) { + _errHandler.recoverInline(this); + } else { + consume(); + } + setState(1272); + block(); + setState(1273); + match(T_END); + setState(1275); + switch ( getInterpreter().adaptivePredict(_input,134,_ctx) ) { + case 1: + { + setState(1274); + _la = _input.LA(1); + if ( !(_la==T_LOOP || _la==T_WHILE) ) { + _errHandler.recoverInline(this); + } else { + consume(); + } + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class For_cursor_stmtContext extends ParserRuleContext { + public TerminalNode T_FOR() { return getToken(HplsqlParser.T_FOR, 0); } + public TerminalNode L_ID() { return getToken(HplsqlParser.L_ID, 0); } + public TerminalNode T_IN() { return getToken(HplsqlParser.T_IN, 0); } + public Select_stmtContext select_stmt() { + return getRuleContext(Select_stmtContext.class,0); + } + public List T_LOOP() { return getTokens(HplsqlParser.T_LOOP); } + public TerminalNode T_LOOP(int i) { + return getToken(HplsqlParser.T_LOOP, i); + } + public BlockContext block() { + return getRuleContext(BlockContext.class,0); + } + public TerminalNode T_END() { return getToken(HplsqlParser.T_END, 0); } + public TerminalNode T_OPEN_P() { return getToken(HplsqlParser.T_OPEN_P, 0); } + public TerminalNode T_CLOSE_P() { return getToken(HplsqlParser.T_CLOSE_P, 0); } + public For_cursor_stmtContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_for_cursor_stmt; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitFor_cursor_stmt(this); + else return visitor.visitChildren(this); + } + } + + public final For_cursor_stmtContext for_cursor_stmt() throws RecognitionException { + For_cursor_stmtContext _localctx = new For_cursor_stmtContext(_ctx, getState()); + enterRule(_localctx, 178, RULE_for_cursor_stmt); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1277); + match(T_FOR); + setState(1278); + match(L_ID); + setState(1279); + match(T_IN); + setState(1281); + switch ( getInterpreter().adaptivePredict(_input,135,_ctx) ) { + case 1: + { + setState(1280); + match(T_OPEN_P); + } + break; + } + setState(1283); + select_stmt(); + setState(1285); + _la = _input.LA(1); + if (_la==T_CLOSE_P) { + { + setState(1284); + match(T_CLOSE_P); + } + } + + setState(1287); + match(T_LOOP); + setState(1288); + block(); + setState(1289); + match(T_END); + setState(1290); + match(T_LOOP); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class For_range_stmtContext extends ParserRuleContext { + public TerminalNode T_FOR() { return getToken(HplsqlParser.T_FOR, 0); } + public TerminalNode L_ID() { return getToken(HplsqlParser.L_ID, 0); } + public TerminalNode T_IN() { return getToken(HplsqlParser.T_IN, 0); } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public TerminalNode T_DOT2() { return getToken(HplsqlParser.T_DOT2, 0); } + public List T_LOOP() { return getTokens(HplsqlParser.T_LOOP); } + public TerminalNode T_LOOP(int i) { + return getToken(HplsqlParser.T_LOOP, i); + } + public BlockContext block() { + return getRuleContext(BlockContext.class,0); + } + public TerminalNode T_END() { return getToken(HplsqlParser.T_END, 0); } + public TerminalNode T_REVERSE() { return getToken(HplsqlParser.T_REVERSE, 0); } + public TerminalNode T_BY() { return getToken(HplsqlParser.T_BY, 0); } + public TerminalNode T_STEP() { return getToken(HplsqlParser.T_STEP, 0); } + public For_range_stmtContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_for_range_stmt; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitFor_range_stmt(this); + else return visitor.visitChildren(this); + } + } + + public final For_range_stmtContext for_range_stmt() throws RecognitionException { + For_range_stmtContext _localctx = new For_range_stmtContext(_ctx, getState()); + enterRule(_localctx, 180, RULE_for_range_stmt); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1292); + match(T_FOR); + setState(1293); + match(L_ID); + setState(1294); + match(T_IN); + setState(1296); + switch ( getInterpreter().adaptivePredict(_input,137,_ctx) ) { + case 1: + { + setState(1295); + match(T_REVERSE); + } + break; + } + setState(1298); + expr(0); + setState(1299); + match(T_DOT2); + setState(1300); + expr(0); + setState(1303); + _la = _input.LA(1); + if (_la==T_BY || _la==T_STEP) { + { + setState(1301); + _la = _input.LA(1); + if ( !(_la==T_BY || _la==T_STEP) ) { + _errHandler.recoverInline(this); + } else { + consume(); + } + setState(1302); + expr(0); + } + } + + setState(1305); + match(T_LOOP); + setState(1306); + block(); + setState(1307); + match(T_END); + setState(1308); + match(T_LOOP); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class LabelContext extends ParserRuleContext { + public TerminalNode L_LABEL() { return getToken(HplsqlParser.L_LABEL, 0); } + public List T_LESS() { return getTokens(HplsqlParser.T_LESS); } + public TerminalNode T_LESS(int i) { + return getToken(HplsqlParser.T_LESS, i); + } + public TerminalNode L_ID() { return getToken(HplsqlParser.L_ID, 0); } + public List T_GREATER() { return getTokens(HplsqlParser.T_GREATER); } + public TerminalNode T_GREATER(int i) { + return getToken(HplsqlParser.T_GREATER, i); + } + public LabelContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_label; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitLabel(this); + else return visitor.visitChildren(this); + } + } + + public final LabelContext label() throws RecognitionException { + LabelContext _localctx = new LabelContext(_ctx, getState()); + enterRule(_localctx, 182, RULE_label); + try { + setState(1316); + switch (_input.LA(1)) { + case L_LABEL: + enterOuterAlt(_localctx, 1); + { + setState(1310); + match(L_LABEL); + } + break; + case T_LESS: + enterOuterAlt(_localctx, 2); + { + setState(1311); + match(T_LESS); + setState(1312); + match(T_LESS); + setState(1313); + match(L_ID); + setState(1314); + match(T_GREATER); + setState(1315); + match(T_GREATER); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Using_clauseContext extends ParserRuleContext { + public TerminalNode T_USING() { return getToken(HplsqlParser.T_USING, 0); } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public List T_COMMA() { return getTokens(HplsqlParser.T_COMMA); } + public TerminalNode T_COMMA(int i) { + return getToken(HplsqlParser.T_COMMA, i); + } + public Using_clauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_using_clause; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitUsing_clause(this); + else return visitor.visitChildren(this); + } + } + + public final Using_clauseContext using_clause() throws RecognitionException { + Using_clauseContext _localctx = new Using_clauseContext(_ctx, getState()); + enterRule(_localctx, 184, RULE_using_clause); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(1318); + match(T_USING); + setState(1319); + expr(0); + setState(1324); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,140,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(1320); + match(T_COMMA); + setState(1321); + expr(0); + } + } + } + setState(1326); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,140,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Select_stmtContext extends ParserRuleContext { + public Fullselect_stmtContext fullselect_stmt() { + return getRuleContext(Fullselect_stmtContext.class,0); + } + public Cte_select_stmtContext cte_select_stmt() { + return getRuleContext(Cte_select_stmtContext.class,0); + } + public Select_stmtContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_select_stmt; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitSelect_stmt(this); + else return visitor.visitChildren(this); + } + } + + public final Select_stmtContext select_stmt() throws RecognitionException { + Select_stmtContext _localctx = new Select_stmtContext(_ctx, getState()); + enterRule(_localctx, 186, RULE_select_stmt); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1328); + _la = _input.LA(1); + if (_la==T_WITH) { + { + setState(1327); + cte_select_stmt(); + } + } + + setState(1330); + fullselect_stmt(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Cte_select_stmtContext extends ParserRuleContext { + public TerminalNode T_WITH() { return getToken(HplsqlParser.T_WITH, 0); } + public List cte_select_stmt_item() { + return getRuleContexts(Cte_select_stmt_itemContext.class); + } + public Cte_select_stmt_itemContext cte_select_stmt_item(int i) { + return getRuleContext(Cte_select_stmt_itemContext.class,i); + } + public List T_COMMA() { return getTokens(HplsqlParser.T_COMMA); } + public TerminalNode T_COMMA(int i) { + return getToken(HplsqlParser.T_COMMA, i); + } + public Cte_select_stmtContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_cte_select_stmt; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitCte_select_stmt(this); + else return visitor.visitChildren(this); + } + } + + public final Cte_select_stmtContext cte_select_stmt() throws RecognitionException { + Cte_select_stmtContext _localctx = new Cte_select_stmtContext(_ctx, getState()); + enterRule(_localctx, 188, RULE_cte_select_stmt); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1332); + match(T_WITH); + setState(1333); + cte_select_stmt_item(); + setState(1338); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T_COMMA) { + { + { + setState(1334); + match(T_COMMA); + setState(1335); + cte_select_stmt_item(); + } + } + setState(1340); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Cte_select_stmt_itemContext extends ParserRuleContext { + public IdentContext ident() { + return getRuleContext(IdentContext.class,0); + } + public TerminalNode T_AS() { return getToken(HplsqlParser.T_AS, 0); } + public TerminalNode T_OPEN_P() { return getToken(HplsqlParser.T_OPEN_P, 0); } + public Fullselect_stmtContext fullselect_stmt() { + return getRuleContext(Fullselect_stmtContext.class,0); + } + public TerminalNode T_CLOSE_P() { return getToken(HplsqlParser.T_CLOSE_P, 0); } + public Cte_select_colsContext cte_select_cols() { + return getRuleContext(Cte_select_colsContext.class,0); + } + public Cte_select_stmt_itemContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_cte_select_stmt_item; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitCte_select_stmt_item(this); + else return visitor.visitChildren(this); + } + } + + public final Cte_select_stmt_itemContext cte_select_stmt_item() throws RecognitionException { + Cte_select_stmt_itemContext _localctx = new Cte_select_stmt_itemContext(_ctx, getState()); + enterRule(_localctx, 190, RULE_cte_select_stmt_item); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1341); + ident(); + setState(1343); + _la = _input.LA(1); + if (_la==T_OPEN_P) { + { + setState(1342); + cte_select_cols(); + } + } + + setState(1345); + match(T_AS); + setState(1346); + match(T_OPEN_P); + setState(1347); + fullselect_stmt(); + setState(1348); + match(T_CLOSE_P); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Cte_select_colsContext extends ParserRuleContext { + public TerminalNode T_OPEN_P() { return getToken(HplsqlParser.T_OPEN_P, 0); } + public List ident() { + return getRuleContexts(IdentContext.class); + } + public IdentContext ident(int i) { + return getRuleContext(IdentContext.class,i); + } + public TerminalNode T_CLOSE_P() { return getToken(HplsqlParser.T_CLOSE_P, 0); } + public List T_COMMA() { return getTokens(HplsqlParser.T_COMMA); } + public TerminalNode T_COMMA(int i) { + return getToken(HplsqlParser.T_COMMA, i); + } + public Cte_select_colsContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_cte_select_cols; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitCte_select_cols(this); + else return visitor.visitChildren(this); + } + } + + public final Cte_select_colsContext cte_select_cols() throws RecognitionException { + Cte_select_colsContext _localctx = new Cte_select_colsContext(_ctx, getState()); + enterRule(_localctx, 192, RULE_cte_select_cols); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1350); + match(T_OPEN_P); + setState(1351); + ident(); + setState(1356); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T_COMMA) { + { + { + setState(1352); + match(T_COMMA); + setState(1353); + ident(); + } + } + setState(1358); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1359); + match(T_CLOSE_P); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Fullselect_stmtContext extends ParserRuleContext { + public List fullselect_stmt_item() { + return getRuleContexts(Fullselect_stmt_itemContext.class); + } + public Fullselect_stmt_itemContext fullselect_stmt_item(int i) { + return getRuleContext(Fullselect_stmt_itemContext.class,i); + } + public List fullselect_set_clause() { + return getRuleContexts(Fullselect_set_clauseContext.class); + } + public Fullselect_set_clauseContext fullselect_set_clause(int i) { + return getRuleContext(Fullselect_set_clauseContext.class,i); + } + public Fullselect_stmtContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_fullselect_stmt; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitFullselect_stmt(this); + else return visitor.visitChildren(this); + } + } + + public final Fullselect_stmtContext fullselect_stmt() throws RecognitionException { + Fullselect_stmtContext _localctx = new Fullselect_stmtContext(_ctx, getState()); + enterRule(_localctx, 194, RULE_fullselect_stmt); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(1361); + fullselect_stmt_item(); + setState(1367); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,145,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(1362); + fullselect_set_clause(); + setState(1363); + fullselect_stmt_item(); + } + } + } + setState(1369); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,145,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Fullselect_stmt_itemContext extends ParserRuleContext { + public Subselect_stmtContext subselect_stmt() { + return getRuleContext(Subselect_stmtContext.class,0); + } + public TerminalNode T_OPEN_P() { return getToken(HplsqlParser.T_OPEN_P, 0); } + public Fullselect_stmtContext fullselect_stmt() { + return getRuleContext(Fullselect_stmtContext.class,0); + } + public TerminalNode T_CLOSE_P() { return getToken(HplsqlParser.T_CLOSE_P, 0); } + public Fullselect_stmt_itemContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_fullselect_stmt_item; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitFullselect_stmt_item(this); + else return visitor.visitChildren(this); + } + } + + public final Fullselect_stmt_itemContext fullselect_stmt_item() throws RecognitionException { + Fullselect_stmt_itemContext _localctx = new Fullselect_stmt_itemContext(_ctx, getState()); + enterRule(_localctx, 196, RULE_fullselect_stmt_item); + try { + setState(1375); + switch (_input.LA(1)) { + case T_SEL: + case T_SELECT: + enterOuterAlt(_localctx, 1); + { + setState(1370); + subselect_stmt(); + } + break; + case T_OPEN_P: + enterOuterAlt(_localctx, 2); + { + setState(1371); + match(T_OPEN_P); + setState(1372); + fullselect_stmt(); + setState(1373); + match(T_CLOSE_P); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Fullselect_set_clauseContext extends ParserRuleContext { + public TerminalNode T_UNION() { return getToken(HplsqlParser.T_UNION, 0); } + public TerminalNode T_ALL() { return getToken(HplsqlParser.T_ALL, 0); } + public TerminalNode T_EXCEPT() { return getToken(HplsqlParser.T_EXCEPT, 0); } + public TerminalNode T_INTERSECT() { return getToken(HplsqlParser.T_INTERSECT, 0); } + public Fullselect_set_clauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_fullselect_set_clause; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitFullselect_set_clause(this); + else return visitor.visitChildren(this); + } + } + + public final Fullselect_set_clauseContext fullselect_set_clause() throws RecognitionException { + Fullselect_set_clauseContext _localctx = new Fullselect_set_clauseContext(_ctx, getState()); + enterRule(_localctx, 198, RULE_fullselect_set_clause); + int _la; + try { + setState(1389); + switch (_input.LA(1)) { + case T_UNION: + enterOuterAlt(_localctx, 1); + { + setState(1377); + match(T_UNION); + setState(1379); + _la = _input.LA(1); + if (_la==T_ALL) { + { + setState(1378); + match(T_ALL); + } + } + + } + break; + case T_EXCEPT: + enterOuterAlt(_localctx, 2); + { + setState(1381); + match(T_EXCEPT); + setState(1383); + _la = _input.LA(1); + if (_la==T_ALL) { + { + setState(1382); + match(T_ALL); + } + } + + } + break; + case T_INTERSECT: + enterOuterAlt(_localctx, 3); + { + setState(1385); + match(T_INTERSECT); + setState(1387); + _la = _input.LA(1); + if (_la==T_ALL) { + { + setState(1386); + match(T_ALL); + } + } + + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Subselect_stmtContext extends ParserRuleContext { + public Select_listContext select_list() { + return getRuleContext(Select_listContext.class,0); + } + public TerminalNode T_SELECT() { return getToken(HplsqlParser.T_SELECT, 0); } + public TerminalNode T_SEL() { return getToken(HplsqlParser.T_SEL, 0); } + public Into_clauseContext into_clause() { + return getRuleContext(Into_clauseContext.class,0); + } + public From_clauseContext from_clause() { + return getRuleContext(From_clauseContext.class,0); + } + public Where_clauseContext where_clause() { + return getRuleContext(Where_clauseContext.class,0); + } + public Group_by_clauseContext group_by_clause() { + return getRuleContext(Group_by_clauseContext.class,0); + } + public Having_clauseContext having_clause() { + return getRuleContext(Having_clauseContext.class,0); + } + public Order_by_clauseContext order_by_clause() { + return getRuleContext(Order_by_clauseContext.class,0); + } + public Select_optionsContext select_options() { + return getRuleContext(Select_optionsContext.class,0); + } + public Subselect_stmtContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_subselect_stmt; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitSubselect_stmt(this); + else return visitor.visitChildren(this); + } + } + + public final Subselect_stmtContext subselect_stmt() throws RecognitionException { + Subselect_stmtContext _localctx = new Subselect_stmtContext(_ctx, getState()); + enterRule(_localctx, 200, RULE_subselect_stmt); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1391); + _la = _input.LA(1); + if ( !(_la==T_SEL || _la==T_SELECT) ) { + _errHandler.recoverInline(this); + } else { + consume(); + } + setState(1392); + select_list(); + setState(1394); + switch ( getInterpreter().adaptivePredict(_input,151,_ctx) ) { + case 1: + { + setState(1393); + into_clause(); + } + break; + } + setState(1397); + switch ( getInterpreter().adaptivePredict(_input,152,_ctx) ) { + case 1: + { + setState(1396); + from_clause(); + } + break; + } + setState(1400); + switch ( getInterpreter().adaptivePredict(_input,153,_ctx) ) { + case 1: + { + setState(1399); + where_clause(); + } + break; + } + setState(1403); + switch ( getInterpreter().adaptivePredict(_input,154,_ctx) ) { + case 1: + { + setState(1402); + group_by_clause(); + } + break; + } + setState(1406); + switch ( getInterpreter().adaptivePredict(_input,155,_ctx) ) { + case 1: + { + setState(1405); + having_clause(); + } + break; + } + setState(1409); + switch ( getInterpreter().adaptivePredict(_input,156,_ctx) ) { + case 1: + { + setState(1408); + order_by_clause(); + } + break; + } + setState(1412); + switch ( getInterpreter().adaptivePredict(_input,157,_ctx) ) { + case 1: + { + setState(1411); + select_options(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Select_listContext extends ParserRuleContext { + public List select_list_item() { + return getRuleContexts(Select_list_itemContext.class); + } + public Select_list_itemContext select_list_item(int i) { + return getRuleContext(Select_list_itemContext.class,i); + } + public Select_list_setContext select_list_set() { + return getRuleContext(Select_list_setContext.class,0); + } + public Select_list_limitContext select_list_limit() { + return getRuleContext(Select_list_limitContext.class,0); + } + public List T_COMMA() { return getTokens(HplsqlParser.T_COMMA); } + public TerminalNode T_COMMA(int i) { + return getToken(HplsqlParser.T_COMMA, i); + } + public Select_listContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_select_list; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitSelect_list(this); + else return visitor.visitChildren(this); + } + } + + public final Select_listContext select_list() throws RecognitionException { + Select_listContext _localctx = new Select_listContext(_ctx, getState()); + enterRule(_localctx, 202, RULE_select_list); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(1415); + switch ( getInterpreter().adaptivePredict(_input,158,_ctx) ) { + case 1: + { + setState(1414); + select_list_set(); + } + break; + } + setState(1418); + switch ( getInterpreter().adaptivePredict(_input,159,_ctx) ) { + case 1: + { + setState(1417); + select_list_limit(); + } + break; + } + setState(1420); + select_list_item(); + setState(1425); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,160,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(1421); + match(T_COMMA); + setState(1422); + select_list_item(); + } + } + } + setState(1427); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,160,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Select_list_setContext extends ParserRuleContext { + public TerminalNode T_ALL() { return getToken(HplsqlParser.T_ALL, 0); } + public TerminalNode T_DISTINCT() { return getToken(HplsqlParser.T_DISTINCT, 0); } + public Select_list_setContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_select_list_set; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitSelect_list_set(this); + else return visitor.visitChildren(this); + } + } + + public final Select_list_setContext select_list_set() throws RecognitionException { + Select_list_setContext _localctx = new Select_list_setContext(_ctx, getState()); + enterRule(_localctx, 204, RULE_select_list_set); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1428); + _la = _input.LA(1); + if ( !(_la==T_ALL || _la==T_DISTINCT) ) { + _errHandler.recoverInline(this); + } else { + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Select_list_limitContext extends ParserRuleContext { + public TerminalNode T_TOP() { return getToken(HplsqlParser.T_TOP, 0); } + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public Select_list_limitContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_select_list_limit; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitSelect_list_limit(this); + else return visitor.visitChildren(this); + } + } + + public final Select_list_limitContext select_list_limit() throws RecognitionException { + Select_list_limitContext _localctx = new Select_list_limitContext(_ctx, getState()); + enterRule(_localctx, 206, RULE_select_list_limit); + try { + enterOuterAlt(_localctx, 1); + { + setState(1430); + match(T_TOP); + setState(1431); + expr(0); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Select_list_itemContext extends ParserRuleContext { + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public Select_list_asteriskContext select_list_asterisk() { + return getRuleContext(Select_list_asteriskContext.class,0); + } + public Select_list_aliasContext select_list_alias() { + return getRuleContext(Select_list_aliasContext.class,0); + } + public Select_list_itemContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_select_list_item; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitSelect_list_item(this); + else return visitor.visitChildren(this); + } + } + + public final Select_list_itemContext select_list_item() throws RecognitionException { + Select_list_itemContext _localctx = new Select_list_itemContext(_ctx, getState()); + enterRule(_localctx, 208, RULE_select_list_item); + try { + enterOuterAlt(_localctx, 1); + { + setState(1438); + switch ( getInterpreter().adaptivePredict(_input,162,_ctx) ) { + case 1: + { + setState(1433); + expr(0); + setState(1435); + switch ( getInterpreter().adaptivePredict(_input,161,_ctx) ) { + case 1: + { + setState(1434); + select_list_alias(); + } + break; + } + } + break; + case 2: + { + setState(1437); + select_list_asterisk(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Select_list_aliasContext extends ParserRuleContext { + public TerminalNode L_ID() { return getToken(HplsqlParser.L_ID, 0); } + public TerminalNode T_AS() { return getToken(HplsqlParser.T_AS, 0); } + public TerminalNode T_OPEN_P() { return getToken(HplsqlParser.T_OPEN_P, 0); } + public TerminalNode T_TITLE() { return getToken(HplsqlParser.T_TITLE, 0); } + public TerminalNode L_S_STRING() { return getToken(HplsqlParser.L_S_STRING, 0); } + public TerminalNode T_CLOSE_P() { return getToken(HplsqlParser.T_CLOSE_P, 0); } + public Select_list_aliasContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_select_list_alias; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitSelect_list_alias(this); + else return visitor.visitChildren(this); + } + } + + public final Select_list_aliasContext select_list_alias() throws RecognitionException { + Select_list_aliasContext _localctx = new Select_list_aliasContext(_ctx, getState()); + enterRule(_localctx, 210, RULE_select_list_alias); + int _la; + try { + setState(1448); + switch (_input.LA(1)) { + case T_AS: + case L_ID: + enterOuterAlt(_localctx, 1); + { + setState(1441); + _la = _input.LA(1); + if (_la==T_AS) { + { + setState(1440); + match(T_AS); + } + } + + setState(1443); + match(L_ID); + } + break; + case T_OPEN_P: + enterOuterAlt(_localctx, 2); + { + setState(1444); + match(T_OPEN_P); + setState(1445); + match(T_TITLE); + setState(1446); + match(L_S_STRING); + setState(1447); + match(T_CLOSE_P); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Select_list_asteriskContext extends ParserRuleContext { + public TerminalNode L_ID() { return getToken(HplsqlParser.L_ID, 0); } + public Select_list_asteriskContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_select_list_asterisk; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitSelect_list_asterisk(this); + else return visitor.visitChildren(this); + } + } + + public final Select_list_asteriskContext select_list_asterisk() throws RecognitionException { + Select_list_asteriskContext _localctx = new Select_list_asteriskContext(_ctx, getState()); + enterRule(_localctx, 212, RULE_select_list_asterisk); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1452); + _la = _input.LA(1); + if (_la==L_ID) { + { + setState(1450); + match(L_ID); + setState(1451); + match(T__2); + } + } + + setState(1454); + match(T_MUL); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Into_clauseContext extends ParserRuleContext { + public TerminalNode T_INTO() { return getToken(HplsqlParser.T_INTO, 0); } + public List ident() { + return getRuleContexts(IdentContext.class); + } + public IdentContext ident(int i) { + return getRuleContext(IdentContext.class,i); + } + public List T_COMMA() { return getTokens(HplsqlParser.T_COMMA); } + public TerminalNode T_COMMA(int i) { + return getToken(HplsqlParser.T_COMMA, i); + } + public Into_clauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_into_clause; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitInto_clause(this); + else return visitor.visitChildren(this); + } + } + + public final Into_clauseContext into_clause() throws RecognitionException { + Into_clauseContext _localctx = new Into_clauseContext(_ctx, getState()); + enterRule(_localctx, 214, RULE_into_clause); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(1456); + match(T_INTO); + setState(1457); + ident(); + setState(1462); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,166,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(1458); + match(T_COMMA); + setState(1459); + ident(); + } + } + } + setState(1464); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,166,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class From_clauseContext extends ParserRuleContext { + public TerminalNode T_FROM() { return getToken(HplsqlParser.T_FROM, 0); } + public From_table_clauseContext from_table_clause() { + return getRuleContext(From_table_clauseContext.class,0); + } + public List from_join_clause() { + return getRuleContexts(From_join_clauseContext.class); + } + public From_join_clauseContext from_join_clause(int i) { + return getRuleContext(From_join_clauseContext.class,i); + } + public From_clauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_from_clause; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitFrom_clause(this); + else return visitor.visitChildren(this); + } + } + + public final From_clauseContext from_clause() throws RecognitionException { + From_clauseContext _localctx = new From_clauseContext(_ctx, getState()); + enterRule(_localctx, 216, RULE_from_clause); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(1465); + match(T_FROM); + setState(1466); + from_table_clause(); + setState(1470); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,167,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(1467); + from_join_clause(); + } + } + } + setState(1472); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,167,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class From_table_clauseContext extends ParserRuleContext { + public From_table_name_clauseContext from_table_name_clause() { + return getRuleContext(From_table_name_clauseContext.class,0); + } + public From_subselect_clauseContext from_subselect_clause() { + return getRuleContext(From_subselect_clauseContext.class,0); + } + public From_table_values_clauseContext from_table_values_clause() { + return getRuleContext(From_table_values_clauseContext.class,0); + } + public From_table_clauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_from_table_clause; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitFrom_table_clause(this); + else return visitor.visitChildren(this); + } + } + + public final From_table_clauseContext from_table_clause() throws RecognitionException { + From_table_clauseContext _localctx = new From_table_clauseContext(_ctx, getState()); + enterRule(_localctx, 218, RULE_from_table_clause); + try { + setState(1476); + switch ( getInterpreter().adaptivePredict(_input,168,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(1473); + from_table_name_clause(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(1474); + from_subselect_clause(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(1475); + from_table_values_clause(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class From_table_name_clauseContext extends ParserRuleContext { + public Table_nameContext table_name() { + return getRuleContext(Table_nameContext.class,0); + } + public From_alias_clauseContext from_alias_clause() { + return getRuleContext(From_alias_clauseContext.class,0); + } + public From_table_name_clauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_from_table_name_clause; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitFrom_table_name_clause(this); + else return visitor.visitChildren(this); + } + } + + public final From_table_name_clauseContext from_table_name_clause() throws RecognitionException { + From_table_name_clauseContext _localctx = new From_table_name_clauseContext(_ctx, getState()); + enterRule(_localctx, 220, RULE_from_table_name_clause); + try { + enterOuterAlt(_localctx, 1); + { + setState(1478); + table_name(); + setState(1480); + switch ( getInterpreter().adaptivePredict(_input,169,_ctx) ) { + case 1: + { + setState(1479); + from_alias_clause(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class From_subselect_clauseContext extends ParserRuleContext { + public TerminalNode T_OPEN_P() { return getToken(HplsqlParser.T_OPEN_P, 0); } + public Subselect_stmtContext subselect_stmt() { + return getRuleContext(Subselect_stmtContext.class,0); + } + public TerminalNode T_CLOSE_P() { return getToken(HplsqlParser.T_CLOSE_P, 0); } + public From_alias_clauseContext from_alias_clause() { + return getRuleContext(From_alias_clauseContext.class,0); + } + public From_subselect_clauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_from_subselect_clause; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitFrom_subselect_clause(this); + else return visitor.visitChildren(this); + } + } + + public final From_subselect_clauseContext from_subselect_clause() throws RecognitionException { + From_subselect_clauseContext _localctx = new From_subselect_clauseContext(_ctx, getState()); + enterRule(_localctx, 222, RULE_from_subselect_clause); + try { + enterOuterAlt(_localctx, 1); + { + setState(1482); + match(T_OPEN_P); + setState(1483); + subselect_stmt(); + setState(1484); + match(T_CLOSE_P); + setState(1486); + switch ( getInterpreter().adaptivePredict(_input,170,_ctx) ) { + case 1: + { + setState(1485); + from_alias_clause(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class From_join_clauseContext extends ParserRuleContext { + public TerminalNode T_COMMA() { return getToken(HplsqlParser.T_COMMA, 0); } + public From_table_clauseContext from_table_clause() { + return getRuleContext(From_table_clauseContext.class,0); + } + public From_join_type_clauseContext from_join_type_clause() { + return getRuleContext(From_join_type_clauseContext.class,0); + } + public TerminalNode T_ON() { return getToken(HplsqlParser.T_ON, 0); } + public Bool_exprContext bool_expr() { + return getRuleContext(Bool_exprContext.class,0); + } + public From_join_clauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_from_join_clause; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitFrom_join_clause(this); + else return visitor.visitChildren(this); + } + } + + public final From_join_clauseContext from_join_clause() throws RecognitionException { + From_join_clauseContext _localctx = new From_join_clauseContext(_ctx, getState()); + enterRule(_localctx, 224, RULE_from_join_clause); + try { + setState(1495); + switch (_input.LA(1)) { + case T_COMMA: + enterOuterAlt(_localctx, 1); + { + setState(1488); + match(T_COMMA); + setState(1489); + from_table_clause(); + } + break; + case T_FULL: + case T_INNER: + case T_LEFT: + case T_RIGHT: + enterOuterAlt(_localctx, 2); + { + setState(1490); + from_join_type_clause(); + setState(1491); + from_table_clause(); + setState(1492); + match(T_ON); + setState(1493); + bool_expr(0); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class From_join_type_clauseContext extends ParserRuleContext { + public TerminalNode T_INNER() { return getToken(HplsqlParser.T_INNER, 0); } + public TerminalNode T_JOIN() { return getToken(HplsqlParser.T_JOIN, 0); } + public TerminalNode T_LEFT() { return getToken(HplsqlParser.T_LEFT, 0); } + public TerminalNode T_RIGHT() { return getToken(HplsqlParser.T_RIGHT, 0); } + public TerminalNode T_FULL() { return getToken(HplsqlParser.T_FULL, 0); } + public TerminalNode T_OUTER() { return getToken(HplsqlParser.T_OUTER, 0); } + public From_join_type_clauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_from_join_type_clause; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitFrom_join_type_clause(this); + else return visitor.visitChildren(this); + } + } + + public final From_join_type_clauseContext from_join_type_clause() throws RecognitionException { + From_join_type_clauseContext _localctx = new From_join_type_clauseContext(_ctx, getState()); + enterRule(_localctx, 226, RULE_from_join_type_clause); + int _la; + try { + setState(1504); + switch (_input.LA(1)) { + case T_INNER: + enterOuterAlt(_localctx, 1); + { + setState(1497); + match(T_INNER); + setState(1498); + match(T_JOIN); + } + break; + case T_FULL: + case T_LEFT: + case T_RIGHT: + enterOuterAlt(_localctx, 2); + { + setState(1499); + _la = _input.LA(1); + if ( !(_la==T_FULL || _la==T_LEFT || _la==T_RIGHT) ) { + _errHandler.recoverInline(this); + } else { + consume(); + } + setState(1501); + _la = _input.LA(1); + if (_la==T_OUTER) { + { + setState(1500); + match(T_OUTER); + } + } + + setState(1503); + match(T_JOIN); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class From_table_values_clauseContext extends ParserRuleContext { + public TerminalNode T_TABLE() { return getToken(HplsqlParser.T_TABLE, 0); } + public TerminalNode T_OPEN_P() { return getToken(HplsqlParser.T_OPEN_P, 0); } + public TerminalNode T_VALUES() { return getToken(HplsqlParser.T_VALUES, 0); } + public List from_table_values_row() { + return getRuleContexts(From_table_values_rowContext.class); + } + public From_table_values_rowContext from_table_values_row(int i) { + return getRuleContext(From_table_values_rowContext.class,i); + } + public TerminalNode T_CLOSE_P() { return getToken(HplsqlParser.T_CLOSE_P, 0); } + public List T_COMMA() { return getTokens(HplsqlParser.T_COMMA); } + public TerminalNode T_COMMA(int i) { + return getToken(HplsqlParser.T_COMMA, i); + } + public From_alias_clauseContext from_alias_clause() { + return getRuleContext(From_alias_clauseContext.class,0); + } + public From_table_values_clauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_from_table_values_clause; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitFrom_table_values_clause(this); + else return visitor.visitChildren(this); + } + } + + public final From_table_values_clauseContext from_table_values_clause() throws RecognitionException { + From_table_values_clauseContext _localctx = new From_table_values_clauseContext(_ctx, getState()); + enterRule(_localctx, 228, RULE_from_table_values_clause); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1506); + match(T_TABLE); + setState(1507); + match(T_OPEN_P); + setState(1508); + match(T_VALUES); + setState(1509); + from_table_values_row(); + setState(1514); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T_COMMA) { + { + { + setState(1510); + match(T_COMMA); + setState(1511); + from_table_values_row(); + } + } + setState(1516); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1517); + match(T_CLOSE_P); + setState(1519); + switch ( getInterpreter().adaptivePredict(_input,175,_ctx) ) { + case 1: + { + setState(1518); + from_alias_clause(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class From_table_values_rowContext extends ParserRuleContext { + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public TerminalNode T_OPEN_P() { return getToken(HplsqlParser.T_OPEN_P, 0); } + public TerminalNode T_CLOSE_P() { return getToken(HplsqlParser.T_CLOSE_P, 0); } + public List T_COMMA() { return getTokens(HplsqlParser.T_COMMA); } + public TerminalNode T_COMMA(int i) { + return getToken(HplsqlParser.T_COMMA, i); + } + public From_table_values_rowContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_from_table_values_row; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitFrom_table_values_row(this); + else return visitor.visitChildren(this); + } + } + + public final From_table_values_rowContext from_table_values_row() throws RecognitionException { + From_table_values_rowContext _localctx = new From_table_values_rowContext(_ctx, getState()); + enterRule(_localctx, 230, RULE_from_table_values_row); + int _la; + try { + setState(1533); + switch ( getInterpreter().adaptivePredict(_input,177,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(1521); + expr(0); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(1522); + match(T_OPEN_P); + setState(1523); + expr(0); + setState(1528); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T_COMMA) { + { + { + setState(1524); + match(T_COMMA); + setState(1525); + expr(0); + } + } + setState(1530); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1531); + match(T_CLOSE_P); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class From_alias_clauseContext extends ParserRuleContext { + public IdentContext ident() { + return getRuleContext(IdentContext.class,0); + } + public TerminalNode T_AS() { return getToken(HplsqlParser.T_AS, 0); } + public TerminalNode T_OPEN_P() { return getToken(HplsqlParser.T_OPEN_P, 0); } + public List L_ID() { return getTokens(HplsqlParser.L_ID); } + public TerminalNode L_ID(int i) { + return getToken(HplsqlParser.L_ID, i); + } + public TerminalNode T_CLOSE_P() { return getToken(HplsqlParser.T_CLOSE_P, 0); } + public List T_COMMA() { return getTokens(HplsqlParser.T_COMMA); } + public TerminalNode T_COMMA(int i) { + return getToken(HplsqlParser.T_COMMA, i); + } + public From_alias_clauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_from_alias_clause; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitFrom_alias_clause(this); + else return visitor.visitChildren(this); + } + } + + public final From_alias_clauseContext from_alias_clause() throws RecognitionException { + From_alias_clauseContext _localctx = new From_alias_clauseContext(_ctx, getState()); + enterRule(_localctx, 232, RULE_from_alias_clause); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1535); + if (!(!_input.LT(1).getText().equalsIgnoreCase("GROUP") && + !_input.LT(1).getText().equalsIgnoreCase("ORDER") && + !_input.LT(1).getText().equalsIgnoreCase("LIMIT"))) throw new FailedPredicateException(this, "!_input.LT(1).getText().equalsIgnoreCase(\"GROUP\") &&\r\n !_input.LT(1).getText().equalsIgnoreCase(\"ORDER\") &&\r\n !_input.LT(1).getText().equalsIgnoreCase(\"LIMIT\")"); + setState(1537); + switch ( getInterpreter().adaptivePredict(_input,178,_ctx) ) { + case 1: + { + setState(1536); + match(T_AS); + } + break; + } + setState(1539); + ident(); + setState(1550); + switch ( getInterpreter().adaptivePredict(_input,180,_ctx) ) { + case 1: + { + setState(1540); + match(T_OPEN_P); + setState(1541); + match(L_ID); + setState(1546); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T_COMMA) { + { + { + setState(1542); + match(T_COMMA); + setState(1543); + match(L_ID); + } + } + setState(1548); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1549); + match(T_CLOSE_P); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Table_nameContext extends ParserRuleContext { + public IdentContext ident() { + return getRuleContext(IdentContext.class,0); + } + public Table_nameContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_table_name; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitTable_name(this); + else return visitor.visitChildren(this); + } + } + + public final Table_nameContext table_name() throws RecognitionException { + Table_nameContext _localctx = new Table_nameContext(_ctx, getState()); + enterRule(_localctx, 234, RULE_table_name); + try { + enterOuterAlt(_localctx, 1); + { + setState(1552); + ident(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Where_clauseContext extends ParserRuleContext { + public TerminalNode T_WHERE() { return getToken(HplsqlParser.T_WHERE, 0); } + public Bool_exprContext bool_expr() { + return getRuleContext(Bool_exprContext.class,0); + } + public Where_clauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_where_clause; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitWhere_clause(this); + else return visitor.visitChildren(this); + } + } + + public final Where_clauseContext where_clause() throws RecognitionException { + Where_clauseContext _localctx = new Where_clauseContext(_ctx, getState()); + enterRule(_localctx, 236, RULE_where_clause); + try { + enterOuterAlt(_localctx, 1); + { + setState(1554); + match(T_WHERE); + setState(1555); + bool_expr(0); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Group_by_clauseContext extends ParserRuleContext { + public TerminalNode T_GROUP() { return getToken(HplsqlParser.T_GROUP, 0); } + public TerminalNode T_BY() { return getToken(HplsqlParser.T_BY, 0); } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public List T_COMMA() { return getTokens(HplsqlParser.T_COMMA); } + public TerminalNode T_COMMA(int i) { + return getToken(HplsqlParser.T_COMMA, i); + } + public Group_by_clauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_group_by_clause; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitGroup_by_clause(this); + else return visitor.visitChildren(this); + } + } + + public final Group_by_clauseContext group_by_clause() throws RecognitionException { + Group_by_clauseContext _localctx = new Group_by_clauseContext(_ctx, getState()); + enterRule(_localctx, 238, RULE_group_by_clause); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(1557); + match(T_GROUP); + setState(1558); + match(T_BY); + setState(1559); + expr(0); + setState(1564); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,181,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(1560); + match(T_COMMA); + setState(1561); + expr(0); + } + } + } + setState(1566); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,181,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Having_clauseContext extends ParserRuleContext { + public TerminalNode T_HAVING() { return getToken(HplsqlParser.T_HAVING, 0); } + public Bool_exprContext bool_expr() { + return getRuleContext(Bool_exprContext.class,0); + } + public Having_clauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_having_clause; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitHaving_clause(this); + else return visitor.visitChildren(this); + } + } + + public final Having_clauseContext having_clause() throws RecognitionException { + Having_clauseContext _localctx = new Having_clauseContext(_ctx, getState()); + enterRule(_localctx, 240, RULE_having_clause); + try { + enterOuterAlt(_localctx, 1); + { + setState(1567); + match(T_HAVING); + setState(1568); + bool_expr(0); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Order_by_clauseContext extends ParserRuleContext { + public TerminalNode T_ORDER() { return getToken(HplsqlParser.T_ORDER, 0); } + public TerminalNode T_BY() { return getToken(HplsqlParser.T_BY, 0); } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public List T_COMMA() { return getTokens(HplsqlParser.T_COMMA); } + public TerminalNode T_COMMA(int i) { + return getToken(HplsqlParser.T_COMMA, i); + } + public List T_ASC() { return getTokens(HplsqlParser.T_ASC); } + public TerminalNode T_ASC(int i) { + return getToken(HplsqlParser.T_ASC, i); + } + public List T_DESC() { return getTokens(HplsqlParser.T_DESC); } + public TerminalNode T_DESC(int i) { + return getToken(HplsqlParser.T_DESC, i); + } + public Order_by_clauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_order_by_clause; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitOrder_by_clause(this); + else return visitor.visitChildren(this); + } + } + + public final Order_by_clauseContext order_by_clause() throws RecognitionException { + Order_by_clauseContext _localctx = new Order_by_clauseContext(_ctx, getState()); + enterRule(_localctx, 242, RULE_order_by_clause); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(1570); + match(T_ORDER); + setState(1571); + match(T_BY); + setState(1572); + expr(0); + setState(1574); + switch ( getInterpreter().adaptivePredict(_input,182,_ctx) ) { + case 1: + { + setState(1573); + _la = _input.LA(1); + if ( !(_la==T_ASC || _la==T_DESC) ) { + _errHandler.recoverInline(this); + } else { + consume(); + } + } + break; + } + setState(1583); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,184,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(1576); + match(T_COMMA); + setState(1577); + expr(0); + setState(1579); + switch ( getInterpreter().adaptivePredict(_input,183,_ctx) ) { + case 1: + { + setState(1578); + _la = _input.LA(1); + if ( !(_la==T_ASC || _la==T_DESC) ) { + _errHandler.recoverInline(this); + } else { + consume(); + } + } + break; + } + } + } + } + setState(1585); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,184,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Select_optionsContext extends ParserRuleContext { + public List select_options_item() { + return getRuleContexts(Select_options_itemContext.class); + } + public Select_options_itemContext select_options_item(int i) { + return getRuleContext(Select_options_itemContext.class,i); + } + public Select_optionsContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_select_options; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitSelect_options(this); + else return visitor.visitChildren(this); + } + } + + public final Select_optionsContext select_options() throws RecognitionException { + Select_optionsContext _localctx = new Select_optionsContext(_ctx, getState()); + enterRule(_localctx, 244, RULE_select_options); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(1587); + _errHandler.sync(this); + _alt = 1; + do { + switch (_alt) { + case 1: + { + { + setState(1586); + select_options_item(); + } + } + break; + default: + throw new NoViableAltException(this); + } + setState(1589); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,185,_ctx); + } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Select_options_itemContext extends ParserRuleContext { + public TerminalNode T_LIMIT() { return getToken(HplsqlParser.T_LIMIT, 0); } + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public TerminalNode T_WITH() { return getToken(HplsqlParser.T_WITH, 0); } + public TerminalNode T_RR() { return getToken(HplsqlParser.T_RR, 0); } + public TerminalNode T_RS() { return getToken(HplsqlParser.T_RS, 0); } + public TerminalNode T_CS() { return getToken(HplsqlParser.T_CS, 0); } + public TerminalNode T_UR() { return getToken(HplsqlParser.T_UR, 0); } + public Select_options_itemContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_select_options_item; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitSelect_options_item(this); + else return visitor.visitChildren(this); + } + } + + public final Select_options_itemContext select_options_item() throws RecognitionException { + Select_options_itemContext _localctx = new Select_options_itemContext(_ctx, getState()); + enterRule(_localctx, 246, RULE_select_options_item); + int _la; + try { + setState(1595); + switch (_input.LA(1)) { + case T_LIMIT: + enterOuterAlt(_localctx, 1); + { + setState(1591); + match(T_LIMIT); + setState(1592); + expr(0); + } + break; + case T_WITH: + enterOuterAlt(_localctx, 2); + { + setState(1593); + match(T_WITH); + setState(1594); + _la = _input.LA(1); + if ( !(_la==T_CS || ((((_la - 160)) & ~0x3f) == 0 && ((1L << (_la - 160)) & ((1L << (T_RR - 160)) | (1L << (T_RS - 160)) | (1L << (T_UR - 160)))) != 0)) ) { + _errHandler.recoverInline(this); + } else { + consume(); + } + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Update_stmtContext extends ParserRuleContext { + public TerminalNode T_UPDATE() { return getToken(HplsqlParser.T_UPDATE, 0); } + public Update_tableContext update_table() { + return getRuleContext(Update_tableContext.class,0); + } + public TerminalNode T_SET() { return getToken(HplsqlParser.T_SET, 0); } + public List assignment_stmt_item() { + return getRuleContexts(Assignment_stmt_itemContext.class); + } + public Assignment_stmt_itemContext assignment_stmt_item(int i) { + return getRuleContext(Assignment_stmt_itemContext.class,i); + } + public List T_COMMA() { return getTokens(HplsqlParser.T_COMMA); } + public TerminalNode T_COMMA(int i) { + return getToken(HplsqlParser.T_COMMA, i); + } + public Where_clauseContext where_clause() { + return getRuleContext(Where_clauseContext.class,0); + } + public Update_upsertContext update_upsert() { + return getRuleContext(Update_upsertContext.class,0); + } + public Update_stmtContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_update_stmt; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitUpdate_stmt(this); + else return visitor.visitChildren(this); + } + } + + public final Update_stmtContext update_stmt() throws RecognitionException { + Update_stmtContext _localctx = new Update_stmtContext(_ctx, getState()); + enterRule(_localctx, 248, RULE_update_stmt); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(1597); + match(T_UPDATE); + setState(1598); + update_table(); + setState(1599); + match(T_SET); + setState(1600); + assignment_stmt_item(); + setState(1605); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,187,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(1601); + match(T_COMMA); + setState(1602); + assignment_stmt_item(); + } + } + } + setState(1607); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,187,_ctx); + } + setState(1609); + switch ( getInterpreter().adaptivePredict(_input,188,_ctx) ) { + case 1: + { + setState(1608); + where_clause(); + } + break; + } + setState(1612); + switch ( getInterpreter().adaptivePredict(_input,189,_ctx) ) { + case 1: + { + setState(1611); + update_upsert(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Update_tableContext extends ParserRuleContext { + public Table_nameContext table_name() { + return getRuleContext(Table_nameContext.class,0); + } + public IdentContext ident() { + return getRuleContext(IdentContext.class,0); + } + public TerminalNode T_OPEN_P() { return getToken(HplsqlParser.T_OPEN_P, 0); } + public Select_stmtContext select_stmt() { + return getRuleContext(Select_stmtContext.class,0); + } + public TerminalNode T_CLOSE_P() { return getToken(HplsqlParser.T_CLOSE_P, 0); } + public TerminalNode T_AS() { return getToken(HplsqlParser.T_AS, 0); } + public Update_tableContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_update_table; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitUpdate_table(this); + else return visitor.visitChildren(this); + } + } + + public final Update_tableContext update_table() throws RecognitionException { + Update_tableContext _localctx = new Update_tableContext(_ctx, getState()); + enterRule(_localctx, 250, RULE_update_table); + try { + enterOuterAlt(_localctx, 1); + { + setState(1619); + switch (_input.LA(1)) { + case T_ALL: + case T_ALTER: + case T_AND: + case T_AS: + case T_ASC: + case T_AT: + case T_AVG: + case T_BATCHSIZE: + case T_BEGIN: + case T_BETWEEN: + case T_BIGINT: + case T_BREAK: + case T_BY: + case T_CALL: + case T_CALLER: + case T_CASE: + case T_CASESPECIFIC: + case T_CAST: + case T_CHAR: + case T_CHARACTER: + case T_CLIENT: + case T_CLOSE: + case T_COLLECTION: + case T_COPY: + case T_COMMIT: + case T_CONCAT: + case T_CONDITION: + case T_CONSTRAINT: + case T_CONTINUE: + case T_COUNT: + case T_COUNT_BIG: + case T_CREATE: + case T_CREATOR: + case T_CS: + case T_CURRENT: + case T_CURSOR: + case T_DATE: + case T_DAY: + case T_DAYS: + case T_DEC: + case T_DECIMAL: + case T_DECLARE: + case T_DEFAULT: + case T_DEFINED: + case T_DEFINER: + case T_DELETE: + case T_DELIMITED: + case T_DELIMITER: + case T_DESC: + case T_DIAGNOSTICS: + case T_DISTINCT: + case T_DISTRIBUTE: + case T_DO: + case T_DROP: + case T_DYNAMIC: + case T_ESCAPED: + case T_EXCEPT: + case T_EXEC: + case T_EXECUTE: + case T_EXCEPTION: + case T_EXISTS: + case T_EXIT: + case T_FETCH: + case T_FIELDS: + case T_FILE: + case T_FLOAT: + case T_FOR: + case T_FORMAT: + case T_FOUND: + case T_FROM: + case T_FULL: + case T_FUNCTION: + case T_GET: + case T_GLOBAL: + case T_GRANT: + case T_GROUP: + case T_HANDLER: + case T_HASH: + case T_HAVING: + case T_HIVE: + case T_HOST: + case T_IF: + case T_IGNORE: + case T_IMMEDIATE: + case T_IN: + case T_INCLUDE: + case T_INDEX: + case T_INNER: + case T_INOUT: + case T_INSERT: + case T_INT: + case T_INTEGER: + case T_INTERSECT: + case T_INTO: + case T_INVOKER: + case T_IS: + case T_ITEMS: + case T_JOIN: + case T_KEY: + case T_KEYS: + case T_LANGUAGE: + case T_LEAVE: + case T_LEFT: + case T_LIKE: + case T_LIMIT: + case T_LINES: + case T_LOCAL: + case T_LOGGED: + case T_LOOP: + case T_MAP: + case T_MATCHED: + case T_MAX: + case T_MERGE: + case T_MESSAGE_TEXT: + case T_MICROSECOND: + case T_MICROSECONDS: + case T_MIN: + case T_MULTISET: + case T_NOT: + case T_NUMBER: + case T_OBJECT: + case T_ON: + case T_ONLY: + case T_OPEN: + case T_OR: + case T_ORDER: + case T_OUT: + case T_OUTER: + case T_OVER: + case T_OVERWRITE: + case T_OWNER: + case T_PARTITION: + case T_PRESERVE: + case T_PRIMARY: + case T_PRINT: + case T_PROC: + case T_PROCEDURE: + case T_REGEXP: + case T_REPLACE: + case T_RESIGNAL: + case T_RESULT: + case T_RETURN: + case T_RETURNS: + case T_REVERSE: + case T_RIGHT: + case T_RLIKE: + case T_ROLLBACK: + case T_ROW: + case T_ROWS: + case T_ROW_COUNT: + case T_RR: + case T_RS: + case T_TRIM: + case T_SECURITY: + case T_SEL: + case T_SELECT: + case T_SET: + case T_SETS: + case T_SIGNAL: + case T_SMALLINT: + case T_SQL: + case T_SQLEXCEPTION: + case T_SQLINSERT: + case T_SQLSTATE: + case T_SQLWARNING: + case T_STEP: + case T_STRING: + case T_SUBSTRING: + case T_SUM: + case T_TABLE: + case T_TEMPORARY: + case T_TERMINATED: + case T_THEN: + case T_TIMESTAMP: + case T_TITLE: + case T_TO: + case T_TOP: + case T_UNIQUE: + case T_UPDATE: + case T_UR: + case T_USE: + case T_USING: + case T_VALUE: + case T_VALUES: + case T_VAR: + case T_VARCHAR: + case T_VARCHAR2: + case T_VOLATILE: + case T_WHILE: + case T_WITH: + case T_WITHOUT: + case T_WORK: + case T_ACTIVITY_COUNT: + case T_CURRENT_DATE: + case T_CURRENT_TIMESTAMP: + case T_CURRENT_USER: + case T_DENSE_RANK: + case T_FIRST_VALUE: + case T_LAG: + case T_LAST_VALUE: + case T_LEAD: + case T_PART_LOC: + case T_RANK: + case T_ROW_NUMBER: + case T_STDEV: + case T_SYSDATE: + case T_VARIANCE: + case T_USER: + case L_ID: + { + setState(1614); + table_name(); + } + break; + case T_OPEN_P: + { + { + setState(1615); + match(T_OPEN_P); + setState(1616); + select_stmt(); + setState(1617); + match(T_CLOSE_P); + } + } + break; + default: + throw new NoViableAltException(this); + } + setState(1625); + switch ( getInterpreter().adaptivePredict(_input,192,_ctx) ) { + case 1: + { + setState(1622); + switch ( getInterpreter().adaptivePredict(_input,191,_ctx) ) { + case 1: + { + setState(1621); + match(T_AS); + } + break; + } + setState(1624); + ident(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Update_upsertContext extends ParserRuleContext { + public TerminalNode T_ELSE() { return getToken(HplsqlParser.T_ELSE, 0); } + public Insert_stmtContext insert_stmt() { + return getRuleContext(Insert_stmtContext.class,0); + } + public Update_upsertContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_update_upsert; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitUpdate_upsert(this); + else return visitor.visitChildren(this); + } + } + + public final Update_upsertContext update_upsert() throws RecognitionException { + Update_upsertContext _localctx = new Update_upsertContext(_ctx, getState()); + enterRule(_localctx, 252, RULE_update_upsert); + try { + enterOuterAlt(_localctx, 1); + { + setState(1627); + match(T_ELSE); + setState(1628); + insert_stmt(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Merge_stmtContext extends ParserRuleContext { + public TerminalNode T_MERGE() { return getToken(HplsqlParser.T_MERGE, 0); } + public TerminalNode T_INTO() { return getToken(HplsqlParser.T_INTO, 0); } + public List merge_table() { + return getRuleContexts(Merge_tableContext.class); + } + public Merge_tableContext merge_table(int i) { + return getRuleContext(Merge_tableContext.class,i); + } + public TerminalNode T_USING() { return getToken(HplsqlParser.T_USING, 0); } + public TerminalNode T_ON() { return getToken(HplsqlParser.T_ON, 0); } + public Bool_exprContext bool_expr() { + return getRuleContext(Bool_exprContext.class,0); + } + public List merge_condition() { + return getRuleContexts(Merge_conditionContext.class); + } + public Merge_conditionContext merge_condition(int i) { + return getRuleContext(Merge_conditionContext.class,i); + } + public Merge_stmtContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_merge_stmt; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitMerge_stmt(this); + else return visitor.visitChildren(this); + } + } + + public final Merge_stmtContext merge_stmt() throws RecognitionException { + Merge_stmtContext _localctx = new Merge_stmtContext(_ctx, getState()); + enterRule(_localctx, 254, RULE_merge_stmt); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(1630); + match(T_MERGE); + setState(1631); + match(T_INTO); + setState(1632); + merge_table(); + setState(1633); + match(T_USING); + setState(1634); + merge_table(); + setState(1635); + match(T_ON); + setState(1636); + bool_expr(0); + setState(1638); + _errHandler.sync(this); + _alt = 1; + do { + switch (_alt) { + case 1: + { + { + setState(1637); + merge_condition(); + } + } + break; + default: + throw new NoViableAltException(this); + } + setState(1640); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,193,_ctx); + } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Merge_tableContext extends ParserRuleContext { + public Table_nameContext table_name() { + return getRuleContext(Table_nameContext.class,0); + } + public IdentContext ident() { + return getRuleContext(IdentContext.class,0); + } + public TerminalNode T_OPEN_P() { return getToken(HplsqlParser.T_OPEN_P, 0); } + public Select_stmtContext select_stmt() { + return getRuleContext(Select_stmtContext.class,0); + } + public TerminalNode T_CLOSE_P() { return getToken(HplsqlParser.T_CLOSE_P, 0); } + public TerminalNode T_AS() { return getToken(HplsqlParser.T_AS, 0); } + public Merge_tableContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_merge_table; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitMerge_table(this); + else return visitor.visitChildren(this); + } + } + + public final Merge_tableContext merge_table() throws RecognitionException { + Merge_tableContext _localctx = new Merge_tableContext(_ctx, getState()); + enterRule(_localctx, 256, RULE_merge_table); + try { + enterOuterAlt(_localctx, 1); + { + setState(1647); + switch (_input.LA(1)) { + case T_ALL: + case T_ALTER: + case T_AND: + case T_AS: + case T_ASC: + case T_AT: + case T_AVG: + case T_BATCHSIZE: + case T_BEGIN: + case T_BETWEEN: + case T_BIGINT: + case T_BREAK: + case T_BY: + case T_CALL: + case T_CALLER: + case T_CASE: + case T_CASESPECIFIC: + case T_CAST: + case T_CHAR: + case T_CHARACTER: + case T_CLIENT: + case T_CLOSE: + case T_COLLECTION: + case T_COPY: + case T_COMMIT: + case T_CONCAT: + case T_CONDITION: + case T_CONSTRAINT: + case T_CONTINUE: + case T_COUNT: + case T_COUNT_BIG: + case T_CREATE: + case T_CREATOR: + case T_CS: + case T_CURRENT: + case T_CURSOR: + case T_DATE: + case T_DAY: + case T_DAYS: + case T_DEC: + case T_DECIMAL: + case T_DECLARE: + case T_DEFAULT: + case T_DEFINED: + case T_DEFINER: + case T_DELETE: + case T_DELIMITED: + case T_DELIMITER: + case T_DESC: + case T_DIAGNOSTICS: + case T_DISTINCT: + case T_DISTRIBUTE: + case T_DO: + case T_DROP: + case T_DYNAMIC: + case T_ESCAPED: + case T_EXCEPT: + case T_EXEC: + case T_EXECUTE: + case T_EXCEPTION: + case T_EXISTS: + case T_EXIT: + case T_FETCH: + case T_FIELDS: + case T_FILE: + case T_FLOAT: + case T_FOR: + case T_FORMAT: + case T_FOUND: + case T_FROM: + case T_FULL: + case T_FUNCTION: + case T_GET: + case T_GLOBAL: + case T_GRANT: + case T_GROUP: + case T_HANDLER: + case T_HASH: + case T_HAVING: + case T_HIVE: + case T_HOST: + case T_IF: + case T_IGNORE: + case T_IMMEDIATE: + case T_IN: + case T_INCLUDE: + case T_INDEX: + case T_INNER: + case T_INOUT: + case T_INSERT: + case T_INT: + case T_INTEGER: + case T_INTERSECT: + case T_INTO: + case T_INVOKER: + case T_IS: + case T_ITEMS: + case T_JOIN: + case T_KEY: + case T_KEYS: + case T_LANGUAGE: + case T_LEAVE: + case T_LEFT: + case T_LIKE: + case T_LIMIT: + case T_LINES: + case T_LOCAL: + case T_LOGGED: + case T_LOOP: + case T_MAP: + case T_MATCHED: + case T_MAX: + case T_MERGE: + case T_MESSAGE_TEXT: + case T_MICROSECOND: + case T_MICROSECONDS: + case T_MIN: + case T_MULTISET: + case T_NOT: + case T_NUMBER: + case T_OBJECT: + case T_ON: + case T_ONLY: + case T_OPEN: + case T_OR: + case T_ORDER: + case T_OUT: + case T_OUTER: + case T_OVER: + case T_OVERWRITE: + case T_OWNER: + case T_PARTITION: + case T_PRESERVE: + case T_PRIMARY: + case T_PRINT: + case T_PROC: + case T_PROCEDURE: + case T_REGEXP: + case T_REPLACE: + case T_RESIGNAL: + case T_RESULT: + case T_RETURN: + case T_RETURNS: + case T_REVERSE: + case T_RIGHT: + case T_RLIKE: + case T_ROLLBACK: + case T_ROW: + case T_ROWS: + case T_ROW_COUNT: + case T_RR: + case T_RS: + case T_TRIM: + case T_SECURITY: + case T_SEL: + case T_SELECT: + case T_SET: + case T_SETS: + case T_SIGNAL: + case T_SMALLINT: + case T_SQL: + case T_SQLEXCEPTION: + case T_SQLINSERT: + case T_SQLSTATE: + case T_SQLWARNING: + case T_STEP: + case T_STRING: + case T_SUBSTRING: + case T_SUM: + case T_TABLE: + case T_TEMPORARY: + case T_TERMINATED: + case T_THEN: + case T_TIMESTAMP: + case T_TITLE: + case T_TO: + case T_TOP: + case T_UNIQUE: + case T_UPDATE: + case T_UR: + case T_USE: + case T_USING: + case T_VALUE: + case T_VALUES: + case T_VAR: + case T_VARCHAR: + case T_VARCHAR2: + case T_VOLATILE: + case T_WHILE: + case T_WITH: + case T_WITHOUT: + case T_WORK: + case T_ACTIVITY_COUNT: + case T_CURRENT_DATE: + case T_CURRENT_TIMESTAMP: + case T_CURRENT_USER: + case T_DENSE_RANK: + case T_FIRST_VALUE: + case T_LAG: + case T_LAST_VALUE: + case T_LEAD: + case T_PART_LOC: + case T_RANK: + case T_ROW_NUMBER: + case T_STDEV: + case T_SYSDATE: + case T_VARIANCE: + case T_USER: + case L_ID: + { + setState(1642); + table_name(); + } + break; + case T_OPEN_P: + { + { + setState(1643); + match(T_OPEN_P); + setState(1644); + select_stmt(); + setState(1645); + match(T_CLOSE_P); + } + } + break; + default: + throw new NoViableAltException(this); + } + setState(1653); + switch ( getInterpreter().adaptivePredict(_input,196,_ctx) ) { + case 1: + { + setState(1650); + switch ( getInterpreter().adaptivePredict(_input,195,_ctx) ) { + case 1: + { + setState(1649); + match(T_AS); + } + break; + } + setState(1652); + ident(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Merge_conditionContext extends ParserRuleContext { + public TerminalNode T_WHEN() { return getToken(HplsqlParser.T_WHEN, 0); } + public TerminalNode T_MATCHED() { return getToken(HplsqlParser.T_MATCHED, 0); } + public TerminalNode T_THEN() { return getToken(HplsqlParser.T_THEN, 0); } + public Merge_actionContext merge_action() { + return getRuleContext(Merge_actionContext.class,0); + } + public TerminalNode T_NOT() { return getToken(HplsqlParser.T_NOT, 0); } + public TerminalNode T_AND() { return getToken(HplsqlParser.T_AND, 0); } + public Bool_exprContext bool_expr() { + return getRuleContext(Bool_exprContext.class,0); + } + public TerminalNode T_ELSE() { return getToken(HplsqlParser.T_ELSE, 0); } + public TerminalNode T_IGNORE() { return getToken(HplsqlParser.T_IGNORE, 0); } + public Merge_conditionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_merge_condition; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitMerge_condition(this); + else return visitor.visitChildren(this); + } + } + + public final Merge_conditionContext merge_condition() throws RecognitionException { + Merge_conditionContext _localctx = new Merge_conditionContext(_ctx, getState()); + enterRule(_localctx, 258, RULE_merge_condition); + int _la; + try { + setState(1668); + switch (_input.LA(1)) { + case T_WHEN: + enterOuterAlt(_localctx, 1); + { + setState(1655); + match(T_WHEN); + setState(1657); + _la = _input.LA(1); + if (_la==T_NOT) { + { + setState(1656); + match(T_NOT); + } + } + + setState(1659); + match(T_MATCHED); + setState(1662); + _la = _input.LA(1); + if (_la==T_AND) { + { + setState(1660); + match(T_AND); + setState(1661); + bool_expr(0); + } + } + + setState(1664); + match(T_THEN); + setState(1665); + merge_action(); + } + break; + case T_ELSE: + enterOuterAlt(_localctx, 2); + { + setState(1666); + match(T_ELSE); + setState(1667); + match(T_IGNORE); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Merge_actionContext extends ParserRuleContext { + public TerminalNode T_INSERT() { return getToken(HplsqlParser.T_INSERT, 0); } + public TerminalNode T_VALUES() { return getToken(HplsqlParser.T_VALUES, 0); } + public Insert_stmt_rowContext insert_stmt_row() { + return getRuleContext(Insert_stmt_rowContext.class,0); + } + public Insert_stmt_colsContext insert_stmt_cols() { + return getRuleContext(Insert_stmt_colsContext.class,0); + } + public TerminalNode T_UPDATE() { return getToken(HplsqlParser.T_UPDATE, 0); } + public TerminalNode T_SET() { return getToken(HplsqlParser.T_SET, 0); } + public List assignment_stmt_item() { + return getRuleContexts(Assignment_stmt_itemContext.class); + } + public Assignment_stmt_itemContext assignment_stmt_item(int i) { + return getRuleContext(Assignment_stmt_itemContext.class,i); + } + public List T_COMMA() { return getTokens(HplsqlParser.T_COMMA); } + public TerminalNode T_COMMA(int i) { + return getToken(HplsqlParser.T_COMMA, i); + } + public TerminalNode T_DELETE() { return getToken(HplsqlParser.T_DELETE, 0); } + public Merge_actionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_merge_action; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitMerge_action(this); + else return visitor.visitChildren(this); + } + } + + public final Merge_actionContext merge_action() throws RecognitionException { + Merge_actionContext _localctx = new Merge_actionContext(_ctx, getState()); + enterRule(_localctx, 260, RULE_merge_action); + int _la; + try { + int _alt; + setState(1687); + switch (_input.LA(1)) { + case T_INSERT: + enterOuterAlt(_localctx, 1); + { + setState(1670); + match(T_INSERT); + setState(1672); + _la = _input.LA(1); + if (_la==T_OPEN_P) { + { + setState(1671); + insert_stmt_cols(); + } + } + + setState(1674); + match(T_VALUES); + setState(1675); + insert_stmt_row(); + } + break; + case T_UPDATE: + enterOuterAlt(_localctx, 2); + { + setState(1676); + match(T_UPDATE); + setState(1677); + match(T_SET); + setState(1678); + assignment_stmt_item(); + setState(1683); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,201,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(1679); + match(T_COMMA); + setState(1680); + assignment_stmt_item(); + } + } + } + setState(1685); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,201,_ctx); + } + } + break; + case T_DELETE: + enterOuterAlt(_localctx, 3); + { + setState(1686); + match(T_DELETE); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Delete_stmtContext extends ParserRuleContext { + public TerminalNode T_DELETE() { return getToken(HplsqlParser.T_DELETE, 0); } + public Table_nameContext table_name() { + return getRuleContext(Table_nameContext.class,0); + } + public TerminalNode T_FROM() { return getToken(HplsqlParser.T_FROM, 0); } + public IdentContext ident() { + return getRuleContext(IdentContext.class,0); + } + public Where_clauseContext where_clause() { + return getRuleContext(Where_clauseContext.class,0); + } + public TerminalNode T_AS() { return getToken(HplsqlParser.T_AS, 0); } + public Delete_stmtContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_delete_stmt; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitDelete_stmt(this); + else return visitor.visitChildren(this); + } + } + + public final Delete_stmtContext delete_stmt() throws RecognitionException { + Delete_stmtContext _localctx = new Delete_stmtContext(_ctx, getState()); + enterRule(_localctx, 262, RULE_delete_stmt); + try { + enterOuterAlt(_localctx, 1); + { + setState(1689); + match(T_DELETE); + setState(1691); + switch ( getInterpreter().adaptivePredict(_input,203,_ctx) ) { + case 1: + { + setState(1690); + match(T_FROM); + } + break; + } + setState(1693); + table_name(); + setState(1698); + switch ( getInterpreter().adaptivePredict(_input,205,_ctx) ) { + case 1: + { + setState(1695); + switch ( getInterpreter().adaptivePredict(_input,204,_ctx) ) { + case 1: + { + setState(1694); + match(T_AS); + } + break; + } + setState(1697); + ident(); + } + break; + } + setState(1701); + switch ( getInterpreter().adaptivePredict(_input,206,_ctx) ) { + case 1: + { + setState(1700); + where_clause(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Bool_exprContext extends ParserRuleContext { + public TerminalNode T_OPEN_P() { return getToken(HplsqlParser.T_OPEN_P, 0); } + public List bool_expr() { + return getRuleContexts(Bool_exprContext.class); + } + public Bool_exprContext bool_expr(int i) { + return getRuleContext(Bool_exprContext.class,i); + } + public TerminalNode T_CLOSE_P() { return getToken(HplsqlParser.T_CLOSE_P, 0); } + public Bool_expr_atomContext bool_expr_atom() { + return getRuleContext(Bool_expr_atomContext.class,0); + } + public Bool_expr_logical_operatorContext bool_expr_logical_operator() { + return getRuleContext(Bool_expr_logical_operatorContext.class,0); + } + public Bool_exprContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_bool_expr; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitBool_expr(this); + else return visitor.visitChildren(this); + } + } + + public final Bool_exprContext bool_expr() throws RecognitionException { + return bool_expr(0); + } + + private Bool_exprContext bool_expr(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + Bool_exprContext _localctx = new Bool_exprContext(_ctx, _parentState); + Bool_exprContext _prevctx = _localctx; + int _startState = 264; + enterRecursionRule(_localctx, 264, RULE_bool_expr, _p); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(1709); + switch ( getInterpreter().adaptivePredict(_input,207,_ctx) ) { + case 1: + { + setState(1704); + match(T_OPEN_P); + setState(1705); + bool_expr(0); + setState(1706); + match(T_CLOSE_P); + } + break; + case 2: + { + setState(1708); + bool_expr_atom(); + } + break; + } + _ctx.stop = _input.LT(-1); + setState(1717); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,208,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + { + _localctx = new Bool_exprContext(_parentctx, _parentState); + pushNewRecursionContext(_localctx, _startState, RULE_bool_expr); + setState(1711); + if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); + setState(1712); + bool_expr_logical_operator(); + setState(1713); + bool_expr(3); + } + } + } + setState(1719); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,208,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + public static class Bool_expr_atomContext extends ParserRuleContext { + public Bool_expr_unaryContext bool_expr_unary() { + return getRuleContext(Bool_expr_unaryContext.class,0); + } + public Bool_expr_binaryContext bool_expr_binary() { + return getRuleContext(Bool_expr_binaryContext.class,0); + } + public Bool_expr_atomContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_bool_expr_atom; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitBool_expr_atom(this); + else return visitor.visitChildren(this); + } + } + + public final Bool_expr_atomContext bool_expr_atom() throws RecognitionException { + Bool_expr_atomContext _localctx = new Bool_expr_atomContext(_ctx, getState()); + enterRule(_localctx, 266, RULE_bool_expr_atom); + try { + setState(1722); + switch ( getInterpreter().adaptivePredict(_input,209,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(1720); + bool_expr_unary(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(1721); + bool_expr_binary(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Bool_expr_unaryContext extends ParserRuleContext { + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public TerminalNode T_IS() { return getToken(HplsqlParser.T_IS, 0); } + public TerminalNode T_NULL() { return getToken(HplsqlParser.T_NULL, 0); } + public TerminalNode T_NOT() { return getToken(HplsqlParser.T_NOT, 0); } + public TerminalNode T_BETWEEN() { return getToken(HplsqlParser.T_BETWEEN, 0); } + public TerminalNode T_AND() { return getToken(HplsqlParser.T_AND, 0); } + public Bool_expr_single_inContext bool_expr_single_in() { + return getRuleContext(Bool_expr_single_inContext.class,0); + } + public Bool_expr_multi_inContext bool_expr_multi_in() { + return getRuleContext(Bool_expr_multi_inContext.class,0); + } + public Bool_expr_unaryContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_bool_expr_unary; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitBool_expr_unary(this); + else return visitor.visitChildren(this); + } + } + + public final Bool_expr_unaryContext bool_expr_unary() throws RecognitionException { + Bool_expr_unaryContext _localctx = new Bool_expr_unaryContext(_ctx, getState()); + enterRule(_localctx, 268, RULE_bool_expr_unary); + int _la; + try { + setState(1739); + switch ( getInterpreter().adaptivePredict(_input,211,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(1724); + expr(0); + setState(1725); + match(T_IS); + setState(1727); + _la = _input.LA(1); + if (_la==T_NOT) { + { + setState(1726); + match(T_NOT); + } + } + + setState(1729); + match(T_NULL); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(1731); + expr(0); + setState(1732); + match(T_BETWEEN); + setState(1733); + expr(0); + setState(1734); + match(T_AND); + setState(1735); + expr(0); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(1737); + bool_expr_single_in(); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(1738); + bool_expr_multi_in(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Bool_expr_single_inContext extends ParserRuleContext { + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public TerminalNode T_IN() { return getToken(HplsqlParser.T_IN, 0); } + public TerminalNode T_OPEN_P() { return getToken(HplsqlParser.T_OPEN_P, 0); } + public TerminalNode T_CLOSE_P() { return getToken(HplsqlParser.T_CLOSE_P, 0); } + public Select_stmtContext select_stmt() { + return getRuleContext(Select_stmtContext.class,0); + } + public TerminalNode T_NOT() { return getToken(HplsqlParser.T_NOT, 0); } + public List T_COMMA() { return getTokens(HplsqlParser.T_COMMA); } + public TerminalNode T_COMMA(int i) { + return getToken(HplsqlParser.T_COMMA, i); + } + public Bool_expr_single_inContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_bool_expr_single_in; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitBool_expr_single_in(this); + else return visitor.visitChildren(this); + } + } + + public final Bool_expr_single_inContext bool_expr_single_in() throws RecognitionException { + Bool_expr_single_inContext _localctx = new Bool_expr_single_inContext(_ctx, getState()); + enterRule(_localctx, 270, RULE_bool_expr_single_in); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1741); + expr(0); + setState(1743); + _la = _input.LA(1); + if (_la==T_NOT) { + { + setState(1742); + match(T_NOT); + } + } + + setState(1745); + match(T_IN); + setState(1746); + match(T_OPEN_P); + setState(1756); + switch ( getInterpreter().adaptivePredict(_input,214,_ctx) ) { + case 1: + { + { + setState(1747); + expr(0); + setState(1752); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T_COMMA) { + { + { + setState(1748); + match(T_COMMA); + setState(1749); + expr(0); + } + } + setState(1754); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + break; + case 2: + { + setState(1755); + select_stmt(); + } + break; + } + setState(1758); + match(T_CLOSE_P); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Bool_expr_multi_inContext extends ParserRuleContext { + public List T_OPEN_P() { return getTokens(HplsqlParser.T_OPEN_P); } + public TerminalNode T_OPEN_P(int i) { + return getToken(HplsqlParser.T_OPEN_P, i); + } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public List T_CLOSE_P() { return getTokens(HplsqlParser.T_CLOSE_P); } + public TerminalNode T_CLOSE_P(int i) { + return getToken(HplsqlParser.T_CLOSE_P, i); + } + public TerminalNode T_IN() { return getToken(HplsqlParser.T_IN, 0); } + public Select_stmtContext select_stmt() { + return getRuleContext(Select_stmtContext.class,0); + } + public List T_COMMA() { return getTokens(HplsqlParser.T_COMMA); } + public TerminalNode T_COMMA(int i) { + return getToken(HplsqlParser.T_COMMA, i); + } + public TerminalNode T_NOT() { return getToken(HplsqlParser.T_NOT, 0); } + public Bool_expr_multi_inContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_bool_expr_multi_in; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitBool_expr_multi_in(this); + else return visitor.visitChildren(this); + } + } + + public final Bool_expr_multi_inContext bool_expr_multi_in() throws RecognitionException { + Bool_expr_multi_inContext _localctx = new Bool_expr_multi_inContext(_ctx, getState()); + enterRule(_localctx, 272, RULE_bool_expr_multi_in); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1760); + match(T_OPEN_P); + setState(1761); + expr(0); + setState(1766); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T_COMMA) { + { + { + setState(1762); + match(T_COMMA); + setState(1763); + expr(0); + } + } + setState(1768); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1769); + match(T_CLOSE_P); + setState(1771); + _la = _input.LA(1); + if (_la==T_NOT) { + { + setState(1770); + match(T_NOT); + } + } + + setState(1773); + match(T_IN); + setState(1774); + match(T_OPEN_P); + setState(1775); + select_stmt(); + setState(1776); + match(T_CLOSE_P); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Bool_expr_binaryContext extends ParserRuleContext { + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public Bool_expr_binary_operatorContext bool_expr_binary_operator() { + return getRuleContext(Bool_expr_binary_operatorContext.class,0); + } + public Bool_expr_binaryContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_bool_expr_binary; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitBool_expr_binary(this); + else return visitor.visitChildren(this); + } + } + + public final Bool_expr_binaryContext bool_expr_binary() throws RecognitionException { + Bool_expr_binaryContext _localctx = new Bool_expr_binaryContext(_ctx, getState()); + enterRule(_localctx, 274, RULE_bool_expr_binary); + try { + enterOuterAlt(_localctx, 1); + { + setState(1778); + expr(0); + setState(1779); + bool_expr_binary_operator(); + setState(1780); + expr(0); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Bool_expr_logical_operatorContext extends ParserRuleContext { + public TerminalNode T_AND() { return getToken(HplsqlParser.T_AND, 0); } + public TerminalNode T_OR() { return getToken(HplsqlParser.T_OR, 0); } + public Bool_expr_logical_operatorContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_bool_expr_logical_operator; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitBool_expr_logical_operator(this); + else return visitor.visitChildren(this); + } + } + + public final Bool_expr_logical_operatorContext bool_expr_logical_operator() throws RecognitionException { + Bool_expr_logical_operatorContext _localctx = new Bool_expr_logical_operatorContext(_ctx, getState()); + enterRule(_localctx, 276, RULE_bool_expr_logical_operator); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1782); + _la = _input.LA(1); + if ( !(_la==T_AND || _la==T_OR) ) { + _errHandler.recoverInline(this); + } else { + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Bool_expr_binary_operatorContext extends ParserRuleContext { + public TerminalNode T_EQUAL() { return getToken(HplsqlParser.T_EQUAL, 0); } + public TerminalNode T_EQUAL2() { return getToken(HplsqlParser.T_EQUAL2, 0); } + public TerminalNode T_NOTEQUAL() { return getToken(HplsqlParser.T_NOTEQUAL, 0); } + public TerminalNode T_NOTEQUAL2() { return getToken(HplsqlParser.T_NOTEQUAL2, 0); } + public TerminalNode T_LESS() { return getToken(HplsqlParser.T_LESS, 0); } + public TerminalNode T_LESSEQUAL() { return getToken(HplsqlParser.T_LESSEQUAL, 0); } + public TerminalNode T_GREATER() { return getToken(HplsqlParser.T_GREATER, 0); } + public TerminalNode T_GREATEREQUAL() { return getToken(HplsqlParser.T_GREATEREQUAL, 0); } + public TerminalNode T_LIKE() { return getToken(HplsqlParser.T_LIKE, 0); } + public TerminalNode T_RLIKE() { return getToken(HplsqlParser.T_RLIKE, 0); } + public TerminalNode T_REGEXP() { return getToken(HplsqlParser.T_REGEXP, 0); } + public TerminalNode T_NOT() { return getToken(HplsqlParser.T_NOT, 0); } + public Bool_expr_binary_operatorContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_bool_expr_binary_operator; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitBool_expr_binary_operator(this); + else return visitor.visitChildren(this); + } + } + + public final Bool_expr_binary_operatorContext bool_expr_binary_operator() throws RecognitionException { + Bool_expr_binary_operatorContext _localctx = new Bool_expr_binary_operatorContext(_ctx, getState()); + enterRule(_localctx, 278, RULE_bool_expr_binary_operator); + int _la; + try { + setState(1796); + switch (_input.LA(1)) { + case T_EQUAL: + enterOuterAlt(_localctx, 1); + { + setState(1784); + match(T_EQUAL); + } + break; + case T_EQUAL2: + enterOuterAlt(_localctx, 2); + { + setState(1785); + match(T_EQUAL2); + } + break; + case T_NOTEQUAL: + enterOuterAlt(_localctx, 3); + { + setState(1786); + match(T_NOTEQUAL); + } + break; + case T_NOTEQUAL2: + enterOuterAlt(_localctx, 4); + { + setState(1787); + match(T_NOTEQUAL2); + } + break; + case T_LESS: + enterOuterAlt(_localctx, 5); + { + setState(1788); + match(T_LESS); + } + break; + case T_LESSEQUAL: + enterOuterAlt(_localctx, 6); + { + setState(1789); + match(T_LESSEQUAL); + } + break; + case T_GREATER: + enterOuterAlt(_localctx, 7); + { + setState(1790); + match(T_GREATER); + } + break; + case T_GREATEREQUAL: + enterOuterAlt(_localctx, 8); + { + setState(1791); + match(T_GREATEREQUAL); + } + break; + case T_LIKE: + case T_NOT: + case T_REGEXP: + case T_RLIKE: + enterOuterAlt(_localctx, 9); + { + setState(1793); + _la = _input.LA(1); + if (_la==T_NOT) { + { + setState(1792); + match(T_NOT); + } + } + + setState(1795); + _la = _input.LA(1); + if ( !(((((_la - 112)) & ~0x3f) == 0 && ((1L << (_la - 112)) & ((1L << (T_LIKE - 112)) | (1L << (T_REGEXP - 112)) | (1L << (T_RLIKE - 112)))) != 0)) ) { + _errHandler.recoverInline(this); + } else { + consume(); + } + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ExprContext extends ParserRuleContext { + public TerminalNode T_OPEN_P() { return getToken(HplsqlParser.T_OPEN_P, 0); } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public TerminalNode T_CLOSE_P() { return getToken(HplsqlParser.T_CLOSE_P, 0); } + public Expr_concatContext expr_concat() { + return getRuleContext(Expr_concatContext.class,0); + } + public Expr_caseContext expr_case() { + return getRuleContext(Expr_caseContext.class,0); + } + public Expr_agg_window_funcContext expr_agg_window_func() { + return getRuleContext(Expr_agg_window_funcContext.class,0); + } + public Expr_spec_funcContext expr_spec_func() { + return getRuleContext(Expr_spec_funcContext.class,0); + } + public Expr_funcContext expr_func() { + return getRuleContext(Expr_funcContext.class,0); + } + public Expr_atomContext expr_atom() { + return getRuleContext(Expr_atomContext.class,0); + } + public TerminalNode T_MUL() { return getToken(HplsqlParser.T_MUL, 0); } + public TerminalNode T_DIV() { return getToken(HplsqlParser.T_DIV, 0); } + public TerminalNode T_ADD() { return getToken(HplsqlParser.T_ADD, 0); } + public TerminalNode T_SUB() { return getToken(HplsqlParser.T_SUB, 0); } + public Interval_itemContext interval_item() { + return getRuleContext(Interval_itemContext.class,0); + } + public ExprContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_expr; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitExpr(this); + else return visitor.visitChildren(this); + } + } + + public final ExprContext expr() throws RecognitionException { + return expr(0); + } + + private ExprContext expr(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + ExprContext _localctx = new ExprContext(_ctx, _parentState); + ExprContext _prevctx = _localctx; + int _startState = 280; + enterRecursionRule(_localctx, 280, RULE_expr, _p); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(1809); + switch ( getInterpreter().adaptivePredict(_input,219,_ctx) ) { + case 1: + { + setState(1799); + match(T_OPEN_P); + setState(1800); + expr(0); + setState(1801); + match(T_CLOSE_P); + } + break; + case 2: + { + setState(1803); + expr_concat(); + } + break; + case 3: + { + setState(1804); + expr_case(); + } + break; + case 4: + { + setState(1805); + expr_agg_window_func(); + } + break; + case 5: + { + setState(1806); + expr_spec_func(); + } + break; + case 6: + { + setState(1807); + expr_func(); + } + break; + case 7: + { + setState(1808); + expr_atom(); + } + break; + } + _ctx.stop = _input.LT(-1); + setState(1827); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,221,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + setState(1825); + switch ( getInterpreter().adaptivePredict(_input,220,_ctx) ) { + case 1: + { + _localctx = new ExprContext(_parentctx, _parentState); + pushNewRecursionContext(_localctx, _startState, RULE_expr); + setState(1811); + if (!(precpred(_ctx, 11))) throw new FailedPredicateException(this, "precpred(_ctx, 11)"); + setState(1812); + match(T_MUL); + setState(1813); + expr(12); + } + break; + case 2: + { + _localctx = new ExprContext(_parentctx, _parentState); + pushNewRecursionContext(_localctx, _startState, RULE_expr); + setState(1814); + if (!(precpred(_ctx, 10))) throw new FailedPredicateException(this, "precpred(_ctx, 10)"); + setState(1815); + match(T_DIV); + setState(1816); + expr(11); + } + break; + case 3: + { + _localctx = new ExprContext(_parentctx, _parentState); + pushNewRecursionContext(_localctx, _startState, RULE_expr); + setState(1817); + if (!(precpred(_ctx, 9))) throw new FailedPredicateException(this, "precpred(_ctx, 9)"); + setState(1818); + match(T_ADD); + setState(1819); + expr(10); + } + break; + case 4: + { + _localctx = new ExprContext(_parentctx, _parentState); + pushNewRecursionContext(_localctx, _startState, RULE_expr); + setState(1820); + if (!(precpred(_ctx, 8))) throw new FailedPredicateException(this, "precpred(_ctx, 8)"); + setState(1821); + match(T_SUB); + setState(1822); + expr(9); + } + break; + case 5: + { + _localctx = new ExprContext(_parentctx, _parentState); + pushNewRecursionContext(_localctx, _startState, RULE_expr); + setState(1823); + if (!(precpred(_ctx, 12))) throw new FailedPredicateException(this, "precpred(_ctx, 12)"); + setState(1824); + interval_item(); + } + break; + } + } + } + setState(1829); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,221,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + public static class Expr_atomContext extends ParserRuleContext { + public Date_literalContext date_literal() { + return getRuleContext(Date_literalContext.class,0); + } + public Timestamp_literalContext timestamp_literal() { + return getRuleContext(Timestamp_literalContext.class,0); + } + public IdentContext ident() { + return getRuleContext(IdentContext.class,0); + } + public StringContext string() { + return getRuleContext(StringContext.class,0); + } + public Dec_numberContext dec_number() { + return getRuleContext(Dec_numberContext.class,0); + } + public Interval_numberContext interval_number() { + return getRuleContext(Interval_numberContext.class,0); + } + public Int_numberContext int_number() { + return getRuleContext(Int_numberContext.class,0); + } + public Null_constContext null_const() { + return getRuleContext(Null_constContext.class,0); + } + public Expr_atomContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_expr_atom; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitExpr_atom(this); + else return visitor.visitChildren(this); + } + } + + public final Expr_atomContext expr_atom() throws RecognitionException { + Expr_atomContext _localctx = new Expr_atomContext(_ctx, getState()); + enterRule(_localctx, 282, RULE_expr_atom); + try { + setState(1838); + switch ( getInterpreter().adaptivePredict(_input,222,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(1830); + date_literal(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(1831); + timestamp_literal(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(1832); + ident(); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(1833); + string(); + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(1834); + dec_number(); + } + break; + case 6: + enterOuterAlt(_localctx, 6); + { + setState(1835); + interval_number(); + } + break; + case 7: + enterOuterAlt(_localctx, 7); + { + setState(1836); + int_number(); + } + break; + case 8: + enterOuterAlt(_localctx, 8); + { + setState(1837); + null_const(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Interval_itemContext extends ParserRuleContext { + public TerminalNode T_DAY() { return getToken(HplsqlParser.T_DAY, 0); } + public TerminalNode T_DAYS() { return getToken(HplsqlParser.T_DAYS, 0); } + public TerminalNode T_MICROSECOND() { return getToken(HplsqlParser.T_MICROSECOND, 0); } + public TerminalNode T_MICROSECONDS() { return getToken(HplsqlParser.T_MICROSECONDS, 0); } + public Interval_itemContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_interval_item; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitInterval_item(this); + else return visitor.visitChildren(this); + } + } + + public final Interval_itemContext interval_item() throws RecognitionException { + Interval_itemContext _localctx = new Interval_itemContext(_ctx, getState()); + enterRule(_localctx, 284, RULE_interval_item); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1840); + _la = _input.LA(1); + if ( !(_la==T_DAY || _la==T_DAYS || _la==T_MICROSECOND || _la==T_MICROSECONDS) ) { + _errHandler.recoverInline(this); + } else { + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Interval_numberContext extends ParserRuleContext { + public Int_numberContext int_number() { + return getRuleContext(Int_numberContext.class,0); + } + public Interval_itemContext interval_item() { + return getRuleContext(Interval_itemContext.class,0); + } + public Interval_numberContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_interval_number; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitInterval_number(this); + else return visitor.visitChildren(this); + } + } + + public final Interval_numberContext interval_number() throws RecognitionException { + Interval_numberContext _localctx = new Interval_numberContext(_ctx, getState()); + enterRule(_localctx, 286, RULE_interval_number); + try { + enterOuterAlt(_localctx, 1); + { + setState(1842); + int_number(); + setState(1843); + interval_item(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Expr_concatContext extends ParserRuleContext { + public List expr_concat_item() { + return getRuleContexts(Expr_concat_itemContext.class); + } + public Expr_concat_itemContext expr_concat_item(int i) { + return getRuleContext(Expr_concat_itemContext.class,i); + } + public List T_PIPE() { return getTokens(HplsqlParser.T_PIPE); } + public TerminalNode T_PIPE(int i) { + return getToken(HplsqlParser.T_PIPE, i); + } + public List T_CONCAT() { return getTokens(HplsqlParser.T_CONCAT); } + public TerminalNode T_CONCAT(int i) { + return getToken(HplsqlParser.T_CONCAT, i); + } + public Expr_concatContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_expr_concat; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitExpr_concat(this); + else return visitor.visitChildren(this); + } + } + + public final Expr_concatContext expr_concat() throws RecognitionException { + Expr_concatContext _localctx = new Expr_concatContext(_ctx, getState()); + enterRule(_localctx, 288, RULE_expr_concat); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(1845); + expr_concat_item(); + setState(1846); + _la = _input.LA(1); + if ( !(_la==T_CONCAT || _la==T_PIPE) ) { + _errHandler.recoverInline(this); + } else { + consume(); + } + setState(1847); + expr_concat_item(); + setState(1852); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,223,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(1848); + _la = _input.LA(1); + if ( !(_la==T_CONCAT || _la==T_PIPE) ) { + _errHandler.recoverInline(this); + } else { + consume(); + } + setState(1849); + expr_concat_item(); + } + } + } + setState(1854); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,223,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Expr_concat_itemContext extends ParserRuleContext { + public TerminalNode T_OPEN_P() { return getToken(HplsqlParser.T_OPEN_P, 0); } + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public TerminalNode T_CLOSE_P() { return getToken(HplsqlParser.T_CLOSE_P, 0); } + public Expr_caseContext expr_case() { + return getRuleContext(Expr_caseContext.class,0); + } + public Expr_agg_window_funcContext expr_agg_window_func() { + return getRuleContext(Expr_agg_window_funcContext.class,0); + } + public Expr_spec_funcContext expr_spec_func() { + return getRuleContext(Expr_spec_funcContext.class,0); + } + public Expr_funcContext expr_func() { + return getRuleContext(Expr_funcContext.class,0); + } + public Expr_atomContext expr_atom() { + return getRuleContext(Expr_atomContext.class,0); + } + public Expr_concat_itemContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_expr_concat_item; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitExpr_concat_item(this); + else return visitor.visitChildren(this); + } + } + + public final Expr_concat_itemContext expr_concat_item() throws RecognitionException { + Expr_concat_itemContext _localctx = new Expr_concat_itemContext(_ctx, getState()); + enterRule(_localctx, 290, RULE_expr_concat_item); + try { + setState(1864); + switch ( getInterpreter().adaptivePredict(_input,224,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(1855); + match(T_OPEN_P); + setState(1856); + expr(0); + setState(1857); + match(T_CLOSE_P); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(1859); + expr_case(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(1860); + expr_agg_window_func(); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(1861); + expr_spec_func(); + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(1862); + expr_func(); + } + break; + case 6: + enterOuterAlt(_localctx, 6); + { + setState(1863); + expr_atom(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Expr_caseContext extends ParserRuleContext { + public Expr_case_simpleContext expr_case_simple() { + return getRuleContext(Expr_case_simpleContext.class,0); + } + public Expr_case_searchedContext expr_case_searched() { + return getRuleContext(Expr_case_searchedContext.class,0); + } + public Expr_caseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_expr_case; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitExpr_case(this); + else return visitor.visitChildren(this); + } + } + + public final Expr_caseContext expr_case() throws RecognitionException { + Expr_caseContext _localctx = new Expr_caseContext(_ctx, getState()); + enterRule(_localctx, 292, RULE_expr_case); + try { + setState(1868); + switch ( getInterpreter().adaptivePredict(_input,225,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(1866); + expr_case_simple(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(1867); + expr_case_searched(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Expr_case_simpleContext extends ParserRuleContext { + public TerminalNode T_CASE() { return getToken(HplsqlParser.T_CASE, 0); } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public TerminalNode T_END() { return getToken(HplsqlParser.T_END, 0); } + public List T_WHEN() { return getTokens(HplsqlParser.T_WHEN); } + public TerminalNode T_WHEN(int i) { + return getToken(HplsqlParser.T_WHEN, i); + } + public List T_THEN() { return getTokens(HplsqlParser.T_THEN); } + public TerminalNode T_THEN(int i) { + return getToken(HplsqlParser.T_THEN, i); + } + public TerminalNode T_ELSE() { return getToken(HplsqlParser.T_ELSE, 0); } + public Expr_case_simpleContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_expr_case_simple; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitExpr_case_simple(this); + else return visitor.visitChildren(this); + } + } + + public final Expr_case_simpleContext expr_case_simple() throws RecognitionException { + Expr_case_simpleContext _localctx = new Expr_case_simpleContext(_ctx, getState()); + enterRule(_localctx, 294, RULE_expr_case_simple); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1870); + match(T_CASE); + setState(1871); + expr(0); + setState(1877); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(1872); + match(T_WHEN); + setState(1873); + expr(0); + setState(1874); + match(T_THEN); + setState(1875); + expr(0); + } + } + setState(1879); + _errHandler.sync(this); + _la = _input.LA(1); + } while ( _la==T_WHEN ); + setState(1883); + _la = _input.LA(1); + if (_la==T_ELSE) { + { + setState(1881); + match(T_ELSE); + setState(1882); + expr(0); + } + } + + setState(1885); + match(T_END); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Expr_case_searchedContext extends ParserRuleContext { + public TerminalNode T_CASE() { return getToken(HplsqlParser.T_CASE, 0); } + public TerminalNode T_END() { return getToken(HplsqlParser.T_END, 0); } + public List T_WHEN() { return getTokens(HplsqlParser.T_WHEN); } + public TerminalNode T_WHEN(int i) { + return getToken(HplsqlParser.T_WHEN, i); + } + public List bool_expr() { + return getRuleContexts(Bool_exprContext.class); + } + public Bool_exprContext bool_expr(int i) { + return getRuleContext(Bool_exprContext.class,i); + } + public List T_THEN() { return getTokens(HplsqlParser.T_THEN); } + public TerminalNode T_THEN(int i) { + return getToken(HplsqlParser.T_THEN, i); + } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public TerminalNode T_ELSE() { return getToken(HplsqlParser.T_ELSE, 0); } + public Expr_case_searchedContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_expr_case_searched; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitExpr_case_searched(this); + else return visitor.visitChildren(this); + } + } + + public final Expr_case_searchedContext expr_case_searched() throws RecognitionException { + Expr_case_searchedContext _localctx = new Expr_case_searchedContext(_ctx, getState()); + enterRule(_localctx, 296, RULE_expr_case_searched); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1887); + match(T_CASE); + setState(1893); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(1888); + match(T_WHEN); + setState(1889); + bool_expr(0); + setState(1890); + match(T_THEN); + setState(1891); + expr(0); + } + } + setState(1895); + _errHandler.sync(this); + _la = _input.LA(1); + } while ( _la==T_WHEN ); + setState(1899); + _la = _input.LA(1); + if (_la==T_ELSE) { + { + setState(1897); + match(T_ELSE); + setState(1898); + expr(0); + } + } + + setState(1901); + match(T_END); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Expr_agg_window_funcContext extends ParserRuleContext { + public TerminalNode T_AVG() { return getToken(HplsqlParser.T_AVG, 0); } + public TerminalNode T_OPEN_P() { return getToken(HplsqlParser.T_OPEN_P, 0); } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public TerminalNode T_CLOSE_P() { return getToken(HplsqlParser.T_CLOSE_P, 0); } + public Expr_func_all_distinctContext expr_func_all_distinct() { + return getRuleContext(Expr_func_all_distinctContext.class,0); + } + public Expr_func_over_clauseContext expr_func_over_clause() { + return getRuleContext(Expr_func_over_clauseContext.class,0); + } + public TerminalNode T_COUNT() { return getToken(HplsqlParser.T_COUNT, 0); } + public TerminalNode T_COUNT_BIG() { return getToken(HplsqlParser.T_COUNT_BIG, 0); } + public TerminalNode T_DENSE_RANK() { return getToken(HplsqlParser.T_DENSE_RANK, 0); } + public TerminalNode T_FIRST_VALUE() { return getToken(HplsqlParser.T_FIRST_VALUE, 0); } + public TerminalNode T_LAG() { return getToken(HplsqlParser.T_LAG, 0); } + public List T_COMMA() { return getTokens(HplsqlParser.T_COMMA); } + public TerminalNode T_COMMA(int i) { + return getToken(HplsqlParser.T_COMMA, i); + } + public TerminalNode T_LAST_VALUE() { return getToken(HplsqlParser.T_LAST_VALUE, 0); } + public TerminalNode T_LEAD() { return getToken(HplsqlParser.T_LEAD, 0); } + public TerminalNode T_MAX() { return getToken(HplsqlParser.T_MAX, 0); } + public TerminalNode T_MIN() { return getToken(HplsqlParser.T_MIN, 0); } + public TerminalNode T_RANK() { return getToken(HplsqlParser.T_RANK, 0); } + public TerminalNode T_ROW_NUMBER() { return getToken(HplsqlParser.T_ROW_NUMBER, 0); } + public TerminalNode T_STDEV() { return getToken(HplsqlParser.T_STDEV, 0); } + public TerminalNode T_SUM() { return getToken(HplsqlParser.T_SUM, 0); } + public TerminalNode T_VAR() { return getToken(HplsqlParser.T_VAR, 0); } + public TerminalNode T_VARIANCE() { return getToken(HplsqlParser.T_VARIANCE, 0); } + public Expr_agg_window_funcContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_expr_agg_window_func; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitExpr_agg_window_func(this); + else return visitor.visitChildren(this); + } + } + + public final Expr_agg_window_funcContext expr_agg_window_func() throws RecognitionException { + Expr_agg_window_funcContext _localctx = new Expr_agg_window_funcContext(_ctx, getState()); + enterRule(_localctx, 298, RULE_expr_agg_window_func); + int _la; + try { + setState(2051); + switch (_input.LA(1)) { + case T_AVG: + enterOuterAlt(_localctx, 1); + { + setState(1903); + match(T_AVG); + setState(1904); + match(T_OPEN_P); + setState(1906); + switch ( getInterpreter().adaptivePredict(_input,230,_ctx) ) { + case 1: + { + setState(1905); + expr_func_all_distinct(); + } + break; + } + setState(1908); + expr(0); + setState(1909); + match(T_CLOSE_P); + setState(1911); + switch ( getInterpreter().adaptivePredict(_input,231,_ctx) ) { + case 1: + { + setState(1910); + expr_func_over_clause(); + } + break; + } + } + break; + case T_COUNT: + enterOuterAlt(_localctx, 2); + { + setState(1913); + match(T_COUNT); + setState(1914); + match(T_OPEN_P); + setState(1920); + switch (_input.LA(1)) { + case T_ALL: + case T_ALTER: + case T_AND: + case T_AS: + case T_ASC: + case T_AT: + case T_AVG: + case T_BATCHSIZE: + case T_BEGIN: + case T_BETWEEN: + case T_BIGINT: + case T_BREAK: + case T_BY: + case T_CALL: + case T_CALLER: + case T_CASE: + case T_CASESPECIFIC: + case T_CAST: + case T_CHAR: + case T_CHARACTER: + case T_CLIENT: + case T_CLOSE: + case T_COLLECTION: + case T_COPY: + case T_COMMIT: + case T_CONCAT: + case T_CONDITION: + case T_CONSTRAINT: + case T_CONTINUE: + case T_COUNT: + case T_COUNT_BIG: + case T_CREATE: + case T_CREATOR: + case T_CS: + case T_CURRENT: + case T_CURSOR: + case T_DATE: + case T_DAY: + case T_DAYS: + case T_DEC: + case T_DECIMAL: + case T_DECLARE: + case T_DEFAULT: + case T_DEFINED: + case T_DEFINER: + case T_DELETE: + case T_DELIMITED: + case T_DELIMITER: + case T_DESC: + case T_DIAGNOSTICS: + case T_DISTINCT: + case T_DISTRIBUTE: + case T_DO: + case T_DROP: + case T_DYNAMIC: + case T_ESCAPED: + case T_EXCEPT: + case T_EXEC: + case T_EXECUTE: + case T_EXCEPTION: + case T_EXISTS: + case T_EXIT: + case T_FETCH: + case T_FIELDS: + case T_FILE: + case T_FLOAT: + case T_FOR: + case T_FORMAT: + case T_FOUND: + case T_FROM: + case T_FULL: + case T_FUNCTION: + case T_GET: + case T_GLOBAL: + case T_GRANT: + case T_GROUP: + case T_HANDLER: + case T_HASH: + case T_HAVING: + case T_HIVE: + case T_HOST: + case T_IF: + case T_IGNORE: + case T_IMMEDIATE: + case T_IN: + case T_INCLUDE: + case T_INDEX: + case T_INNER: + case T_INOUT: + case T_INSERT: + case T_INT: + case T_INTEGER: + case T_INTERSECT: + case T_INTO: + case T_INVOKER: + case T_IS: + case T_ITEMS: + case T_JOIN: + case T_KEY: + case T_KEYS: + case T_LANGUAGE: + case T_LEAVE: + case T_LEFT: + case T_LIKE: + case T_LIMIT: + case T_LINES: + case T_LOCAL: + case T_LOGGED: + case T_LOOP: + case T_MAP: + case T_MATCHED: + case T_MAX: + case T_MERGE: + case T_MESSAGE_TEXT: + case T_MICROSECOND: + case T_MICROSECONDS: + case T_MIN: + case T_MULTISET: + case T_NOT: + case T_NULL: + case T_NUMBER: + case T_OBJECT: + case T_ON: + case T_ONLY: + case T_OPEN: + case T_OR: + case T_ORDER: + case T_OUT: + case T_OUTER: + case T_OVER: + case T_OVERWRITE: + case T_OWNER: + case T_PARTITION: + case T_PRESERVE: + case T_PRIMARY: + case T_PRINT: + case T_PROC: + case T_PROCEDURE: + case T_REGEXP: + case T_REPLACE: + case T_RESIGNAL: + case T_RESULT: + case T_RETURN: + case T_RETURNS: + case T_REVERSE: + case T_RIGHT: + case T_RLIKE: + case T_ROLLBACK: + case T_ROW: + case T_ROWS: + case T_ROW_COUNT: + case T_RR: + case T_RS: + case T_TRIM: + case T_SECURITY: + case T_SEL: + case T_SELECT: + case T_SET: + case T_SETS: + case T_SIGNAL: + case T_SMALLINT: + case T_SQL: + case T_SQLEXCEPTION: + case T_SQLINSERT: + case T_SQLSTATE: + case T_SQLWARNING: + case T_STEP: + case T_STRING: + case T_SUBSTRING: + case T_SUM: + case T_TABLE: + case T_TEMPORARY: + case T_TERMINATED: + case T_THEN: + case T_TIMESTAMP: + case T_TITLE: + case T_TO: + case T_TOP: + case T_UNIQUE: + case T_UPDATE: + case T_UR: + case T_USE: + case T_USING: + case T_VALUE: + case T_VALUES: + case T_VAR: + case T_VARCHAR: + case T_VARCHAR2: + case T_VOLATILE: + case T_WHILE: + case T_WITH: + case T_WITHOUT: + case T_WORK: + case T_ACTIVITY_COUNT: + case T_CURRENT_DATE: + case T_CURRENT_TIMESTAMP: + case T_CURRENT_USER: + case T_DENSE_RANK: + case T_FIRST_VALUE: + case T_LAG: + case T_LAST_VALUE: + case T_LEAD: + case T_MAX_PART_STRING: + case T_MIN_PART_STRING: + case T_MAX_PART_INT: + case T_MIN_PART_INT: + case T_MAX_PART_DATE: + case T_MIN_PART_DATE: + case T_PART_LOC: + case T_RANK: + case T_ROW_NUMBER: + case T_STDEV: + case T_SYSDATE: + case T_VARIANCE: + case T_USER: + case T_ADD: + case T_OPEN_P: + case T_SUB: + case L_ID: + case L_S_STRING: + case L_D_STRING: + case L_INT: + case L_DEC: + { + { + setState(1916); + switch ( getInterpreter().adaptivePredict(_input,232,_ctx) ) { + case 1: + { + setState(1915); + expr_func_all_distinct(); + } + break; + } + setState(1918); + expr(0); + } + } + break; + case T_MUL: + { + setState(1919); + match(T_MUL); + } + break; + default: + throw new NoViableAltException(this); + } + setState(1922); + match(T_CLOSE_P); + setState(1924); + switch ( getInterpreter().adaptivePredict(_input,234,_ctx) ) { + case 1: + { + setState(1923); + expr_func_over_clause(); + } + break; + } + } + break; + case T_COUNT_BIG: + enterOuterAlt(_localctx, 3); + { + setState(1926); + match(T_COUNT_BIG); + setState(1927); + match(T_OPEN_P); + setState(1933); + switch (_input.LA(1)) { + case T_ALL: + case T_ALTER: + case T_AND: + case T_AS: + case T_ASC: + case T_AT: + case T_AVG: + case T_BATCHSIZE: + case T_BEGIN: + case T_BETWEEN: + case T_BIGINT: + case T_BREAK: + case T_BY: + case T_CALL: + case T_CALLER: + case T_CASE: + case T_CASESPECIFIC: + case T_CAST: + case T_CHAR: + case T_CHARACTER: + case T_CLIENT: + case T_CLOSE: + case T_COLLECTION: + case T_COPY: + case T_COMMIT: + case T_CONCAT: + case T_CONDITION: + case T_CONSTRAINT: + case T_CONTINUE: + case T_COUNT: + case T_COUNT_BIG: + case T_CREATE: + case T_CREATOR: + case T_CS: + case T_CURRENT: + case T_CURSOR: + case T_DATE: + case T_DAY: + case T_DAYS: + case T_DEC: + case T_DECIMAL: + case T_DECLARE: + case T_DEFAULT: + case T_DEFINED: + case T_DEFINER: + case T_DELETE: + case T_DELIMITED: + case T_DELIMITER: + case T_DESC: + case T_DIAGNOSTICS: + case T_DISTINCT: + case T_DISTRIBUTE: + case T_DO: + case T_DROP: + case T_DYNAMIC: + case T_ESCAPED: + case T_EXCEPT: + case T_EXEC: + case T_EXECUTE: + case T_EXCEPTION: + case T_EXISTS: + case T_EXIT: + case T_FETCH: + case T_FIELDS: + case T_FILE: + case T_FLOAT: + case T_FOR: + case T_FORMAT: + case T_FOUND: + case T_FROM: + case T_FULL: + case T_FUNCTION: + case T_GET: + case T_GLOBAL: + case T_GRANT: + case T_GROUP: + case T_HANDLER: + case T_HASH: + case T_HAVING: + case T_HIVE: + case T_HOST: + case T_IF: + case T_IGNORE: + case T_IMMEDIATE: + case T_IN: + case T_INCLUDE: + case T_INDEX: + case T_INNER: + case T_INOUT: + case T_INSERT: + case T_INT: + case T_INTEGER: + case T_INTERSECT: + case T_INTO: + case T_INVOKER: + case T_IS: + case T_ITEMS: + case T_JOIN: + case T_KEY: + case T_KEYS: + case T_LANGUAGE: + case T_LEAVE: + case T_LEFT: + case T_LIKE: + case T_LIMIT: + case T_LINES: + case T_LOCAL: + case T_LOGGED: + case T_LOOP: + case T_MAP: + case T_MATCHED: + case T_MAX: + case T_MERGE: + case T_MESSAGE_TEXT: + case T_MICROSECOND: + case T_MICROSECONDS: + case T_MIN: + case T_MULTISET: + case T_NOT: + case T_NULL: + case T_NUMBER: + case T_OBJECT: + case T_ON: + case T_ONLY: + case T_OPEN: + case T_OR: + case T_ORDER: + case T_OUT: + case T_OUTER: + case T_OVER: + case T_OVERWRITE: + case T_OWNER: + case T_PARTITION: + case T_PRESERVE: + case T_PRIMARY: + case T_PRINT: + case T_PROC: + case T_PROCEDURE: + case T_REGEXP: + case T_REPLACE: + case T_RESIGNAL: + case T_RESULT: + case T_RETURN: + case T_RETURNS: + case T_REVERSE: + case T_RIGHT: + case T_RLIKE: + case T_ROLLBACK: + case T_ROW: + case T_ROWS: + case T_ROW_COUNT: + case T_RR: + case T_RS: + case T_TRIM: + case T_SECURITY: + case T_SEL: + case T_SELECT: + case T_SET: + case T_SETS: + case T_SIGNAL: + case T_SMALLINT: + case T_SQL: + case T_SQLEXCEPTION: + case T_SQLINSERT: + case T_SQLSTATE: + case T_SQLWARNING: + case T_STEP: + case T_STRING: + case T_SUBSTRING: + case T_SUM: + case T_TABLE: + case T_TEMPORARY: + case T_TERMINATED: + case T_THEN: + case T_TIMESTAMP: + case T_TITLE: + case T_TO: + case T_TOP: + case T_UNIQUE: + case T_UPDATE: + case T_UR: + case T_USE: + case T_USING: + case T_VALUE: + case T_VALUES: + case T_VAR: + case T_VARCHAR: + case T_VARCHAR2: + case T_VOLATILE: + case T_WHILE: + case T_WITH: + case T_WITHOUT: + case T_WORK: + case T_ACTIVITY_COUNT: + case T_CURRENT_DATE: + case T_CURRENT_TIMESTAMP: + case T_CURRENT_USER: + case T_DENSE_RANK: + case T_FIRST_VALUE: + case T_LAG: + case T_LAST_VALUE: + case T_LEAD: + case T_MAX_PART_STRING: + case T_MIN_PART_STRING: + case T_MAX_PART_INT: + case T_MIN_PART_INT: + case T_MAX_PART_DATE: + case T_MIN_PART_DATE: + case T_PART_LOC: + case T_RANK: + case T_ROW_NUMBER: + case T_STDEV: + case T_SYSDATE: + case T_VARIANCE: + case T_USER: + case T_ADD: + case T_OPEN_P: + case T_SUB: + case L_ID: + case L_S_STRING: + case L_D_STRING: + case L_INT: + case L_DEC: + { + { + setState(1929); + switch ( getInterpreter().adaptivePredict(_input,235,_ctx) ) { + case 1: + { + setState(1928); + expr_func_all_distinct(); + } + break; + } + setState(1931); + expr(0); + } + } + break; + case T_MUL: + { + setState(1932); + match(T_MUL); + } + break; + default: + throw new NoViableAltException(this); + } + setState(1935); + match(T_CLOSE_P); + setState(1937); + switch ( getInterpreter().adaptivePredict(_input,237,_ctx) ) { + case 1: + { + setState(1936); + expr_func_over_clause(); + } + break; + } + } + break; + case T_DENSE_RANK: + enterOuterAlt(_localctx, 4); + { + setState(1939); + match(T_DENSE_RANK); + setState(1940); + match(T_OPEN_P); + setState(1941); + match(T_CLOSE_P); + setState(1942); + expr_func_over_clause(); + } + break; + case T_FIRST_VALUE: + enterOuterAlt(_localctx, 5); + { + setState(1943); + match(T_FIRST_VALUE); + setState(1944); + match(T_OPEN_P); + setState(1945); + expr(0); + setState(1946); + match(T_CLOSE_P); + setState(1947); + expr_func_over_clause(); + } + break; + case T_LAG: + enterOuterAlt(_localctx, 6); + { + setState(1949); + match(T_LAG); + setState(1950); + match(T_OPEN_P); + setState(1951); + expr(0); + setState(1958); + _la = _input.LA(1); + if (_la==T_COMMA) { + { + setState(1952); + match(T_COMMA); + setState(1953); + expr(0); + setState(1956); + _la = _input.LA(1); + if (_la==T_COMMA) { + { + setState(1954); + match(T_COMMA); + setState(1955); + expr(0); + } + } + + } + } + + setState(1960); + match(T_CLOSE_P); + setState(1961); + expr_func_over_clause(); + } + break; + case T_LAST_VALUE: + enterOuterAlt(_localctx, 7); + { + setState(1963); + match(T_LAST_VALUE); + setState(1964); + match(T_OPEN_P); + setState(1965); + expr(0); + setState(1966); + match(T_CLOSE_P); + setState(1967); + expr_func_over_clause(); + } + break; + case T_LEAD: + enterOuterAlt(_localctx, 8); + { + setState(1969); + match(T_LEAD); + setState(1970); + match(T_OPEN_P); + setState(1971); + expr(0); + setState(1978); + _la = _input.LA(1); + if (_la==T_COMMA) { + { + setState(1972); + match(T_COMMA); + setState(1973); + expr(0); + setState(1976); + _la = _input.LA(1); + if (_la==T_COMMA) { + { + setState(1974); + match(T_COMMA); + setState(1975); + expr(0); + } + } + + } + } + + setState(1980); + match(T_CLOSE_P); + setState(1981); + expr_func_over_clause(); + } + break; + case T_MAX: + enterOuterAlt(_localctx, 9); + { + setState(1983); + match(T_MAX); + setState(1984); + match(T_OPEN_P); + setState(1986); + switch ( getInterpreter().adaptivePredict(_input,242,_ctx) ) { + case 1: + { + setState(1985); + expr_func_all_distinct(); + } + break; + } + setState(1988); + expr(0); + setState(1989); + match(T_CLOSE_P); + setState(1991); + switch ( getInterpreter().adaptivePredict(_input,243,_ctx) ) { + case 1: + { + setState(1990); + expr_func_over_clause(); + } + break; + } + } + break; + case T_MIN: + enterOuterAlt(_localctx, 10); + { + setState(1993); + match(T_MIN); + setState(1994); + match(T_OPEN_P); + setState(1996); + switch ( getInterpreter().adaptivePredict(_input,244,_ctx) ) { + case 1: + { + setState(1995); + expr_func_all_distinct(); + } + break; + } + setState(1998); + expr(0); + setState(1999); + match(T_CLOSE_P); + setState(2001); + switch ( getInterpreter().adaptivePredict(_input,245,_ctx) ) { + case 1: + { + setState(2000); + expr_func_over_clause(); + } + break; + } + } + break; + case T_RANK: + enterOuterAlt(_localctx, 11); + { + setState(2003); + match(T_RANK); + setState(2004); + match(T_OPEN_P); + setState(2005); + match(T_CLOSE_P); + setState(2006); + expr_func_over_clause(); + } + break; + case T_ROW_NUMBER: + enterOuterAlt(_localctx, 12); + { + setState(2007); + match(T_ROW_NUMBER); + setState(2008); + match(T_OPEN_P); + setState(2009); + match(T_CLOSE_P); + setState(2010); + expr_func_over_clause(); + } + break; + case T_STDEV: + enterOuterAlt(_localctx, 13); + { + setState(2011); + match(T_STDEV); + setState(2012); + match(T_OPEN_P); + setState(2014); + switch ( getInterpreter().adaptivePredict(_input,246,_ctx) ) { + case 1: + { + setState(2013); + expr_func_all_distinct(); + } + break; + } + setState(2016); + expr(0); + setState(2017); + match(T_CLOSE_P); + setState(2019); + switch ( getInterpreter().adaptivePredict(_input,247,_ctx) ) { + case 1: + { + setState(2018); + expr_func_over_clause(); + } + break; + } + } + break; + case T_SUM: + enterOuterAlt(_localctx, 14); + { + setState(2021); + match(T_SUM); + setState(2022); + match(T_OPEN_P); + setState(2024); + switch ( getInterpreter().adaptivePredict(_input,248,_ctx) ) { + case 1: + { + setState(2023); + expr_func_all_distinct(); + } + break; + } + setState(2026); + expr(0); + setState(2027); + match(T_CLOSE_P); + setState(2029); + switch ( getInterpreter().adaptivePredict(_input,249,_ctx) ) { + case 1: + { + setState(2028); + expr_func_over_clause(); + } + break; + } + } + break; + case T_VAR: + enterOuterAlt(_localctx, 15); + { + setState(2031); + match(T_VAR); + setState(2032); + match(T_OPEN_P); + setState(2034); + switch ( getInterpreter().adaptivePredict(_input,250,_ctx) ) { + case 1: + { + setState(2033); + expr_func_all_distinct(); + } + break; + } + setState(2036); + expr(0); + setState(2037); + match(T_CLOSE_P); + setState(2039); + switch ( getInterpreter().adaptivePredict(_input,251,_ctx) ) { + case 1: + { + setState(2038); + expr_func_over_clause(); + } + break; + } + } + break; + case T_VARIANCE: + enterOuterAlt(_localctx, 16); + { + setState(2041); + match(T_VARIANCE); + setState(2042); + match(T_OPEN_P); + setState(2044); + switch ( getInterpreter().adaptivePredict(_input,252,_ctx) ) { + case 1: + { + setState(2043); + expr_func_all_distinct(); + } + break; + } + setState(2046); + expr(0); + setState(2047); + match(T_CLOSE_P); + setState(2049); + switch ( getInterpreter().adaptivePredict(_input,253,_ctx) ) { + case 1: + { + setState(2048); + expr_func_over_clause(); + } + break; + } + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Expr_func_all_distinctContext extends ParserRuleContext { + public TerminalNode T_ALL() { return getToken(HplsqlParser.T_ALL, 0); } + public TerminalNode T_DISTINCT() { return getToken(HplsqlParser.T_DISTINCT, 0); } + public Expr_func_all_distinctContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_expr_func_all_distinct; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitExpr_func_all_distinct(this); + else return visitor.visitChildren(this); + } + } + + public final Expr_func_all_distinctContext expr_func_all_distinct() throws RecognitionException { + Expr_func_all_distinctContext _localctx = new Expr_func_all_distinctContext(_ctx, getState()); + enterRule(_localctx, 300, RULE_expr_func_all_distinct); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(2053); + _la = _input.LA(1); + if ( !(_la==T_ALL || _la==T_DISTINCT) ) { + _errHandler.recoverInline(this); + } else { + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Expr_func_over_clauseContext extends ParserRuleContext { + public TerminalNode T_OVER() { return getToken(HplsqlParser.T_OVER, 0); } + public TerminalNode T_OPEN_P() { return getToken(HplsqlParser.T_OPEN_P, 0); } + public TerminalNode T_CLOSE_P() { return getToken(HplsqlParser.T_CLOSE_P, 0); } + public Expr_func_partition_by_clauseContext expr_func_partition_by_clause() { + return getRuleContext(Expr_func_partition_by_clauseContext.class,0); + } + public Order_by_clauseContext order_by_clause() { + return getRuleContext(Order_by_clauseContext.class,0); + } + public Expr_func_over_clauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_expr_func_over_clause; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitExpr_func_over_clause(this); + else return visitor.visitChildren(this); + } + } + + public final Expr_func_over_clauseContext expr_func_over_clause() throws RecognitionException { + Expr_func_over_clauseContext _localctx = new Expr_func_over_clauseContext(_ctx, getState()); + enterRule(_localctx, 302, RULE_expr_func_over_clause); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(2055); + match(T_OVER); + setState(2056); + match(T_OPEN_P); + setState(2058); + _la = _input.LA(1); + if (_la==T_PARTITION) { + { + setState(2057); + expr_func_partition_by_clause(); + } + } + + setState(2061); + _la = _input.LA(1); + if (_la==T_ORDER) { + { + setState(2060); + order_by_clause(); + } + } + + setState(2063); + match(T_CLOSE_P); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Expr_func_partition_by_clauseContext extends ParserRuleContext { + public TerminalNode T_PARTITION() { return getToken(HplsqlParser.T_PARTITION, 0); } + public TerminalNode T_BY() { return getToken(HplsqlParser.T_BY, 0); } + public List ident() { + return getRuleContexts(IdentContext.class); + } + public IdentContext ident(int i) { + return getRuleContext(IdentContext.class,i); + } + public List T_COMMA() { return getTokens(HplsqlParser.T_COMMA); } + public TerminalNode T_COMMA(int i) { + return getToken(HplsqlParser.T_COMMA, i); + } + public Expr_func_partition_by_clauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_expr_func_partition_by_clause; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitExpr_func_partition_by_clause(this); + else return visitor.visitChildren(this); + } + } + + public final Expr_func_partition_by_clauseContext expr_func_partition_by_clause() throws RecognitionException { + Expr_func_partition_by_clauseContext _localctx = new Expr_func_partition_by_clauseContext(_ctx, getState()); + enterRule(_localctx, 304, RULE_expr_func_partition_by_clause); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(2065); + match(T_PARTITION); + setState(2066); + match(T_BY); + setState(2067); + ident(); + setState(2072); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T_COMMA) { + { + { + setState(2068); + match(T_COMMA); + setState(2069); + ident(); + } + } + setState(2074); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Expr_spec_funcContext extends ParserRuleContext { + public TerminalNode T_ACTIVITY_COUNT() { return getToken(HplsqlParser.T_ACTIVITY_COUNT, 0); } + public TerminalNode T_CAST() { return getToken(HplsqlParser.T_CAST, 0); } + public TerminalNode T_OPEN_P() { return getToken(HplsqlParser.T_OPEN_P, 0); } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public TerminalNode T_AS() { return getToken(HplsqlParser.T_AS, 0); } + public DtypeContext dtype() { + return getRuleContext(DtypeContext.class,0); + } + public TerminalNode T_CLOSE_P() { return getToken(HplsqlParser.T_CLOSE_P, 0); } + public Dtype_lenContext dtype_len() { + return getRuleContext(Dtype_lenContext.class,0); + } + public TerminalNode T_COUNT() { return getToken(HplsqlParser.T_COUNT, 0); } + public TerminalNode T_CURRENT_DATE() { return getToken(HplsqlParser.T_CURRENT_DATE, 0); } + public TerminalNode T_CURRENT() { return getToken(HplsqlParser.T_CURRENT, 0); } + public TerminalNode T_DATE() { return getToken(HplsqlParser.T_DATE, 0); } + public TerminalNode T_CURRENT_TIMESTAMP() { return getToken(HplsqlParser.T_CURRENT_TIMESTAMP, 0); } + public TerminalNode T_TIMESTAMP() { return getToken(HplsqlParser.T_TIMESTAMP, 0); } + public TerminalNode T_CURRENT_USER() { return getToken(HplsqlParser.T_CURRENT_USER, 0); } + public TerminalNode T_USER() { return getToken(HplsqlParser.T_USER, 0); } + public TerminalNode T_MAX_PART_STRING() { return getToken(HplsqlParser.T_MAX_PART_STRING, 0); } + public List T_COMMA() { return getTokens(HplsqlParser.T_COMMA); } + public TerminalNode T_COMMA(int i) { + return getToken(HplsqlParser.T_COMMA, i); + } + public List T_EQUAL() { return getTokens(HplsqlParser.T_EQUAL); } + public TerminalNode T_EQUAL(int i) { + return getToken(HplsqlParser.T_EQUAL, i); + } + public TerminalNode T_MIN_PART_STRING() { return getToken(HplsqlParser.T_MIN_PART_STRING, 0); } + public TerminalNode T_MAX_PART_INT() { return getToken(HplsqlParser.T_MAX_PART_INT, 0); } + public TerminalNode T_MIN_PART_INT() { return getToken(HplsqlParser.T_MIN_PART_INT, 0); } + public TerminalNode T_MAX_PART_DATE() { return getToken(HplsqlParser.T_MAX_PART_DATE, 0); } + public TerminalNode T_MIN_PART_DATE() { return getToken(HplsqlParser.T_MIN_PART_DATE, 0); } + public TerminalNode T_PART_LOC() { return getToken(HplsqlParser.T_PART_LOC, 0); } + public TerminalNode T_TRIM() { return getToken(HplsqlParser.T_TRIM, 0); } + public TerminalNode T_SUBSTRING() { return getToken(HplsqlParser.T_SUBSTRING, 0); } + public TerminalNode T_FROM() { return getToken(HplsqlParser.T_FROM, 0); } + public TerminalNode T_FOR() { return getToken(HplsqlParser.T_FOR, 0); } + public TerminalNode T_SYSDATE() { return getToken(HplsqlParser.T_SYSDATE, 0); } + public Expr_spec_funcContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_expr_spec_func; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitExpr_spec_func(this); + else return visitor.visitChildren(this); + } + } + + public final Expr_spec_funcContext expr_spec_func() throws RecognitionException { + Expr_spec_funcContext _localctx = new Expr_spec_funcContext(_ctx, getState()); + enterRule(_localctx, 306, RULE_expr_spec_func); + int _la; + try { + int _alt; + setState(2260); + switch ( getInterpreter().adaptivePredict(_input,277,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(2075); + match(T_ACTIVITY_COUNT); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(2076); + match(T_CAST); + setState(2077); + match(T_OPEN_P); + setState(2078); + expr(0); + setState(2079); + match(T_AS); + setState(2080); + dtype(); + setState(2082); + _la = _input.LA(1); + if (_la==T_OPEN_P) { + { + setState(2081); + dtype_len(); + } + } + + setState(2084); + match(T_CLOSE_P); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(2086); + match(T_COUNT); + setState(2087); + match(T_OPEN_P); + setState(2090); + switch (_input.LA(1)) { + case T_ALL: + case T_ALTER: + case T_AND: + case T_AS: + case T_ASC: + case T_AT: + case T_AVG: + case T_BATCHSIZE: + case T_BEGIN: + case T_BETWEEN: + case T_BIGINT: + case T_BREAK: + case T_BY: + case T_CALL: + case T_CALLER: + case T_CASE: + case T_CASESPECIFIC: + case T_CAST: + case T_CHAR: + case T_CHARACTER: + case T_CLIENT: + case T_CLOSE: + case T_COLLECTION: + case T_COPY: + case T_COMMIT: + case T_CONCAT: + case T_CONDITION: + case T_CONSTRAINT: + case T_CONTINUE: + case T_COUNT: + case T_COUNT_BIG: + case T_CREATE: + case T_CREATOR: + case T_CS: + case T_CURRENT: + case T_CURSOR: + case T_DATE: + case T_DAY: + case T_DAYS: + case T_DEC: + case T_DECIMAL: + case T_DECLARE: + case T_DEFAULT: + case T_DEFINED: + case T_DEFINER: + case T_DELETE: + case T_DELIMITED: + case T_DELIMITER: + case T_DESC: + case T_DIAGNOSTICS: + case T_DISTINCT: + case T_DISTRIBUTE: + case T_DO: + case T_DROP: + case T_DYNAMIC: + case T_ESCAPED: + case T_EXCEPT: + case T_EXEC: + case T_EXECUTE: + case T_EXCEPTION: + case T_EXISTS: + case T_EXIT: + case T_FETCH: + case T_FIELDS: + case T_FILE: + case T_FLOAT: + case T_FOR: + case T_FORMAT: + case T_FOUND: + case T_FROM: + case T_FULL: + case T_FUNCTION: + case T_GET: + case T_GLOBAL: + case T_GRANT: + case T_GROUP: + case T_HANDLER: + case T_HASH: + case T_HAVING: + case T_HIVE: + case T_HOST: + case T_IF: + case T_IGNORE: + case T_IMMEDIATE: + case T_IN: + case T_INCLUDE: + case T_INDEX: + case T_INNER: + case T_INOUT: + case T_INSERT: + case T_INT: + case T_INTEGER: + case T_INTERSECT: + case T_INTO: + case T_INVOKER: + case T_IS: + case T_ITEMS: + case T_JOIN: + case T_KEY: + case T_KEYS: + case T_LANGUAGE: + case T_LEAVE: + case T_LEFT: + case T_LIKE: + case T_LIMIT: + case T_LINES: + case T_LOCAL: + case T_LOGGED: + case T_LOOP: + case T_MAP: + case T_MATCHED: + case T_MAX: + case T_MERGE: + case T_MESSAGE_TEXT: + case T_MICROSECOND: + case T_MICROSECONDS: + case T_MIN: + case T_MULTISET: + case T_NOT: + case T_NULL: + case T_NUMBER: + case T_OBJECT: + case T_ON: + case T_ONLY: + case T_OPEN: + case T_OR: + case T_ORDER: + case T_OUT: + case T_OUTER: + case T_OVER: + case T_OVERWRITE: + case T_OWNER: + case T_PARTITION: + case T_PRESERVE: + case T_PRIMARY: + case T_PRINT: + case T_PROC: + case T_PROCEDURE: + case T_REGEXP: + case T_REPLACE: + case T_RESIGNAL: + case T_RESULT: + case T_RETURN: + case T_RETURNS: + case T_REVERSE: + case T_RIGHT: + case T_RLIKE: + case T_ROLLBACK: + case T_ROW: + case T_ROWS: + case T_ROW_COUNT: + case T_RR: + case T_RS: + case T_TRIM: + case T_SECURITY: + case T_SEL: + case T_SELECT: + case T_SET: + case T_SETS: + case T_SIGNAL: + case T_SMALLINT: + case T_SQL: + case T_SQLEXCEPTION: + case T_SQLINSERT: + case T_SQLSTATE: + case T_SQLWARNING: + case T_STEP: + case T_STRING: + case T_SUBSTRING: + case T_SUM: + case T_TABLE: + case T_TEMPORARY: + case T_TERMINATED: + case T_THEN: + case T_TIMESTAMP: + case T_TITLE: + case T_TO: + case T_TOP: + case T_UNIQUE: + case T_UPDATE: + case T_UR: + case T_USE: + case T_USING: + case T_VALUE: + case T_VALUES: + case T_VAR: + case T_VARCHAR: + case T_VARCHAR2: + case T_VOLATILE: + case T_WHILE: + case T_WITH: + case T_WITHOUT: + case T_WORK: + case T_ACTIVITY_COUNT: + case T_CURRENT_DATE: + case T_CURRENT_TIMESTAMP: + case T_CURRENT_USER: + case T_DENSE_RANK: + case T_FIRST_VALUE: + case T_LAG: + case T_LAST_VALUE: + case T_LEAD: + case T_MAX_PART_STRING: + case T_MIN_PART_STRING: + case T_MAX_PART_INT: + case T_MIN_PART_INT: + case T_MAX_PART_DATE: + case T_MIN_PART_DATE: + case T_PART_LOC: + case T_RANK: + case T_ROW_NUMBER: + case T_STDEV: + case T_SYSDATE: + case T_VARIANCE: + case T_USER: + case T_ADD: + case T_OPEN_P: + case T_SUB: + case L_ID: + case L_S_STRING: + case L_D_STRING: + case L_INT: + case L_DEC: + { + setState(2088); + expr(0); + } + break; + case T_MUL: + { + setState(2089); + match(T_MUL); + } + break; + default: + throw new NoViableAltException(this); + } + setState(2092); + match(T_CLOSE_P); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(2093); + match(T_CURRENT_DATE); + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(2094); + match(T_CURRENT); + setState(2095); + match(T_DATE); + } + break; + case 6: + enterOuterAlt(_localctx, 6); + { + setState(2099); + switch (_input.LA(1)) { + case T_CURRENT_TIMESTAMP: + { + setState(2096); + match(T_CURRENT_TIMESTAMP); + } + break; + case T_CURRENT: + { + setState(2097); + match(T_CURRENT); + setState(2098); + match(T_TIMESTAMP); + } + break; + default: + throw new NoViableAltException(this); + } + setState(2105); + switch ( getInterpreter().adaptivePredict(_input,261,_ctx) ) { + case 1: + { + setState(2101); + match(T_OPEN_P); + setState(2102); + expr(0); + setState(2103); + match(T_CLOSE_P); + } + break; + } + } + break; + case 7: + enterOuterAlt(_localctx, 7); + { + setState(2107); + match(T_CURRENT_USER); + } + break; + case 8: + enterOuterAlt(_localctx, 8); + { + setState(2108); + match(T_CURRENT); + setState(2109); + match(T_USER); + } + break; + case 9: + enterOuterAlt(_localctx, 9); + { + setState(2110); + match(T_MAX_PART_STRING); + setState(2111); + match(T_OPEN_P); + setState(2112); + expr(0); + setState(2125); + _la = _input.LA(1); + if (_la==T_COMMA) { + { + setState(2113); + match(T_COMMA); + setState(2114); + expr(0); + setState(2122); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T_COMMA) { + { + { + setState(2115); + match(T_COMMA); + setState(2116); + expr(0); + setState(2117); + match(T_EQUAL); + setState(2118); + expr(0); + } + } + setState(2124); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + + setState(2127); + match(T_CLOSE_P); + } + break; + case 10: + enterOuterAlt(_localctx, 10); + { + setState(2129); + match(T_MIN_PART_STRING); + setState(2130); + match(T_OPEN_P); + setState(2131); + expr(0); + setState(2144); + _la = _input.LA(1); + if (_la==T_COMMA) { + { + setState(2132); + match(T_COMMA); + setState(2133); + expr(0); + setState(2141); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T_COMMA) { + { + { + setState(2134); + match(T_COMMA); + setState(2135); + expr(0); + setState(2136); + match(T_EQUAL); + setState(2137); + expr(0); + } + } + setState(2143); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + + setState(2146); + match(T_CLOSE_P); + } + break; + case 11: + enterOuterAlt(_localctx, 11); + { + setState(2148); + match(T_MAX_PART_INT); + setState(2149); + match(T_OPEN_P); + setState(2150); + expr(0); + setState(2163); + _la = _input.LA(1); + if (_la==T_COMMA) { + { + setState(2151); + match(T_COMMA); + setState(2152); + expr(0); + setState(2160); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T_COMMA) { + { + { + setState(2153); + match(T_COMMA); + setState(2154); + expr(0); + setState(2155); + match(T_EQUAL); + setState(2156); + expr(0); + } + } + setState(2162); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + + setState(2165); + match(T_CLOSE_P); + } + break; + case 12: + enterOuterAlt(_localctx, 12); + { + setState(2167); + match(T_MIN_PART_INT); + setState(2168); + match(T_OPEN_P); + setState(2169); + expr(0); + setState(2182); + _la = _input.LA(1); + if (_la==T_COMMA) { + { + setState(2170); + match(T_COMMA); + setState(2171); + expr(0); + setState(2179); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T_COMMA) { + { + { + setState(2172); + match(T_COMMA); + setState(2173); + expr(0); + setState(2174); + match(T_EQUAL); + setState(2175); + expr(0); + } + } + setState(2181); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + + setState(2184); + match(T_CLOSE_P); + } + break; + case 13: + enterOuterAlt(_localctx, 13); + { + setState(2186); + match(T_MAX_PART_DATE); + setState(2187); + match(T_OPEN_P); + setState(2188); + expr(0); + setState(2201); + _la = _input.LA(1); + if (_la==T_COMMA) { + { + setState(2189); + match(T_COMMA); + setState(2190); + expr(0); + setState(2198); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T_COMMA) { + { + { + setState(2191); + match(T_COMMA); + setState(2192); + expr(0); + setState(2193); + match(T_EQUAL); + setState(2194); + expr(0); + } + } + setState(2200); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + + setState(2203); + match(T_CLOSE_P); + } + break; + case 14: + enterOuterAlt(_localctx, 14); + { + setState(2205); + match(T_MIN_PART_DATE); + setState(2206); + match(T_OPEN_P); + setState(2207); + expr(0); + setState(2220); + _la = _input.LA(1); + if (_la==T_COMMA) { + { + setState(2208); + match(T_COMMA); + setState(2209); + expr(0); + setState(2217); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T_COMMA) { + { + { + setState(2210); + match(T_COMMA); + setState(2211); + expr(0); + setState(2212); + match(T_EQUAL); + setState(2213); + expr(0); + } + } + setState(2219); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + + setState(2222); + match(T_CLOSE_P); + } + break; + case 15: + enterOuterAlt(_localctx, 15); + { + setState(2224); + match(T_PART_LOC); + setState(2225); + match(T_OPEN_P); + setState(2226); + expr(0); + setState(2232); + _errHandler.sync(this); + _alt = 1; + do { + switch (_alt) { + case 1: + { + { + setState(2227); + match(T_COMMA); + setState(2228); + expr(0); + setState(2229); + match(T_EQUAL); + setState(2230); + expr(0); + } + } + break; + default: + throw new NoViableAltException(this); + } + setState(2234); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,274,_ctx); + } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ); + setState(2238); + _la = _input.LA(1); + if (_la==T_COMMA) { + { + setState(2236); + match(T_COMMA); + setState(2237); + expr(0); + } + } + + setState(2240); + match(T_CLOSE_P); + } + break; + case 16: + enterOuterAlt(_localctx, 16); + { + setState(2242); + match(T_TRIM); + setState(2243); + match(T_OPEN_P); + setState(2244); + expr(0); + setState(2245); + match(T_CLOSE_P); + } + break; + case 17: + enterOuterAlt(_localctx, 17); + { + setState(2247); + match(T_SUBSTRING); + setState(2248); + match(T_OPEN_P); + setState(2249); + expr(0); + setState(2250); + match(T_FROM); + setState(2251); + expr(0); + setState(2254); + _la = _input.LA(1); + if (_la==T_FOR) { + { + setState(2252); + match(T_FOR); + setState(2253); + expr(0); + } + } + + setState(2256); + match(T_CLOSE_P); + } + break; + case 18: + enterOuterAlt(_localctx, 18); + { + setState(2258); + match(T_SYSDATE); + } + break; + case 19: + enterOuterAlt(_localctx, 19); + { + setState(2259); + match(T_USER); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Expr_funcContext extends ParserRuleContext { + public IdentContext ident() { + return getRuleContext(IdentContext.class,0); + } + public Expr_func_paramsContext expr_func_params() { + return getRuleContext(Expr_func_paramsContext.class,0); + } + public Expr_funcContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_expr_func; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitExpr_func(this); + else return visitor.visitChildren(this); + } + } + + public final Expr_funcContext expr_func() throws RecognitionException { + Expr_funcContext _localctx = new Expr_funcContext(_ctx, getState()); + enterRule(_localctx, 308, RULE_expr_func); + try { + enterOuterAlt(_localctx, 1); + { + setState(2262); + ident(); + setState(2263); + expr_func_params(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Expr_func_paramsContext extends ParserRuleContext { + public TerminalNode T_OPEN_P() { return getToken(HplsqlParser.T_OPEN_P, 0); } + public TerminalNode T_CLOSE_P() { return getToken(HplsqlParser.T_CLOSE_P, 0); } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public List T_COMMA() { return getTokens(HplsqlParser.T_COMMA); } + public TerminalNode T_COMMA(int i) { + return getToken(HplsqlParser.T_COMMA, i); + } + public Expr_func_paramsContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_expr_func_params; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitExpr_func_params(this); + else return visitor.visitChildren(this); + } + } + + public final Expr_func_paramsContext expr_func_params() throws RecognitionException { + Expr_func_paramsContext _localctx = new Expr_func_paramsContext(_ctx, getState()); + enterRule(_localctx, 310, RULE_expr_func_params); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(2265); + match(T_OPEN_P); + setState(2274); + _la = _input.LA(1); + if (((((_la - 5)) & ~0x3f) == 0 && ((1L << (_la - 5)) & ((1L << (T_ALL - 5)) | (1L << (T_ALTER - 5)) | (1L << (T_AND - 5)) | (1L << (T_AS - 5)) | (1L << (T_ASC - 5)) | (1L << (T_AT - 5)) | (1L << (T_AVG - 5)) | (1L << (T_BATCHSIZE - 5)) | (1L << (T_BEGIN - 5)) | (1L << (T_BETWEEN - 5)) | (1L << (T_BIGINT - 5)) | (1L << (T_BREAK - 5)) | (1L << (T_BY - 5)) | (1L << (T_CALL - 5)) | (1L << (T_CALLER - 5)) | (1L << (T_CASE - 5)) | (1L << (T_CASESPECIFIC - 5)) | (1L << (T_CAST - 5)) | (1L << (T_CHAR - 5)) | (1L << (T_CHARACTER - 5)) | (1L << (T_CLIENT - 5)) | (1L << (T_CLOSE - 5)) | (1L << (T_COLLECTION - 5)) | (1L << (T_COPY - 5)) | (1L << (T_COMMIT - 5)) | (1L << (T_CONCAT - 5)) | (1L << (T_CONDITION - 5)) | (1L << (T_CONSTRAINT - 5)) | (1L << (T_CONTINUE - 5)) | (1L << (T_COUNT - 5)) | (1L << (T_COUNT_BIG - 5)) | (1L << (T_CREATE - 5)) | (1L << (T_CREATOR - 5)) | (1L << (T_CS - 5)) | (1L << (T_CURRENT - 5)) | (1L << (T_CURSOR - 5)) | (1L << (T_DATE - 5)) | (1L << (T_DAY - 5)) | (1L << (T_DAYS - 5)) | (1L << (T_DEC - 5)) | (1L << (T_DECIMAL - 5)) | (1L << (T_DECLARE - 5)) | (1L << (T_DEFAULT - 5)) | (1L << (T_DEFINED - 5)) | (1L << (T_DEFINER - 5)) | (1L << (T_DELETE - 5)) | (1L << (T_DELIMITED - 5)) | (1L << (T_DELIMITER - 5)) | (1L << (T_DESC - 5)) | (1L << (T_DIAGNOSTICS - 5)) | (1L << (T_DISTINCT - 5)) | (1L << (T_DISTRIBUTE - 5)) | (1L << (T_DO - 5)) | (1L << (T_DROP - 5)) | (1L << (T_DYNAMIC - 5)) | (1L << (T_ESCAPED - 5)) | (1L << (T_EXCEPT - 5)) | (1L << (T_EXEC - 5)) | (1L << (T_EXECUTE - 5)) | (1L << (T_EXCEPTION - 5)))) != 0) || ((((_la - 69)) & ~0x3f) == 0 && ((1L << (_la - 69)) & ((1L << (T_EXISTS - 69)) | (1L << (T_EXIT - 69)) | (1L << (T_FETCH - 69)) | (1L << (T_FIELDS - 69)) | (1L << (T_FILE - 69)) | (1L << (T_FLOAT - 69)) | (1L << (T_FOR - 69)) | (1L << (T_FORMAT - 69)) | (1L << (T_FOUND - 69)) | (1L << (T_FROM - 69)) | (1L << (T_FULL - 69)) | (1L << (T_FUNCTION - 69)) | (1L << (T_GET - 69)) | (1L << (T_GLOBAL - 69)) | (1L << (T_GRANT - 69)) | (1L << (T_GROUP - 69)) | (1L << (T_HANDLER - 69)) | (1L << (T_HASH - 69)) | (1L << (T_HAVING - 69)) | (1L << (T_HIVE - 69)) | (1L << (T_HOST - 69)) | (1L << (T_IF - 69)) | (1L << (T_IGNORE - 69)) | (1L << (T_IMMEDIATE - 69)) | (1L << (T_IN - 69)) | (1L << (T_INCLUDE - 69)) | (1L << (T_INDEX - 69)) | (1L << (T_INNER - 69)) | (1L << (T_INOUT - 69)) | (1L << (T_INSERT - 69)) | (1L << (T_INT - 69)) | (1L << (T_INTEGER - 69)) | (1L << (T_INTERSECT - 69)) | (1L << (T_INTO - 69)) | (1L << (T_INVOKER - 69)) | (1L << (T_IS - 69)) | (1L << (T_ITEMS - 69)) | (1L << (T_JOIN - 69)) | (1L << (T_KEY - 69)) | (1L << (T_KEYS - 69)) | (1L << (T_LANGUAGE - 69)) | (1L << (T_LEAVE - 69)) | (1L << (T_LEFT - 69)) | (1L << (T_LIKE - 69)) | (1L << (T_LIMIT - 69)) | (1L << (T_LINES - 69)) | (1L << (T_LOCAL - 69)) | (1L << (T_LOGGED - 69)) | (1L << (T_LOOP - 69)) | (1L << (T_MAP - 69)) | (1L << (T_MATCHED - 69)) | (1L << (T_MAX - 69)) | (1L << (T_MERGE - 69)) | (1L << (T_MESSAGE_TEXT - 69)) | (1L << (T_MICROSECOND - 69)) | (1L << (T_MICROSECONDS - 69)) | (1L << (T_MIN - 69)) | (1L << (T_MULTISET - 69)) | (1L << (T_NOT - 69)) | (1L << (T_NULL - 69)) | (1L << (T_NUMBER - 69)) | (1L << (T_OBJECT - 69)) | (1L << (T_ON - 69)) | (1L << (T_ONLY - 69)))) != 0) || ((((_la - 133)) & ~0x3f) == 0 && ((1L << (_la - 133)) & ((1L << (T_OPEN - 133)) | (1L << (T_OR - 133)) | (1L << (T_ORDER - 133)) | (1L << (T_OUT - 133)) | (1L << (T_OUTER - 133)) | (1L << (T_OVER - 133)) | (1L << (T_OVERWRITE - 133)) | (1L << (T_OWNER - 133)) | (1L << (T_PARTITION - 133)) | (1L << (T_PRESERVE - 133)) | (1L << (T_PRIMARY - 133)) | (1L << (T_PRINT - 133)) | (1L << (T_PROC - 133)) | (1L << (T_PROCEDURE - 133)) | (1L << (T_REGEXP - 133)) | (1L << (T_REPLACE - 133)) | (1L << (T_RESIGNAL - 133)) | (1L << (T_RESULT - 133)) | (1L << (T_RETURN - 133)) | (1L << (T_RETURNS - 133)) | (1L << (T_REVERSE - 133)) | (1L << (T_RIGHT - 133)) | (1L << (T_RLIKE - 133)) | (1L << (T_ROLLBACK - 133)) | (1L << (T_ROW - 133)) | (1L << (T_ROWS - 133)) | (1L << (T_ROW_COUNT - 133)) | (1L << (T_RR - 133)) | (1L << (T_RS - 133)) | (1L << (T_TRIM - 133)) | (1L << (T_SECURITY - 133)) | (1L << (T_SEL - 133)) | (1L << (T_SELECT - 133)) | (1L << (T_SET - 133)) | (1L << (T_SETS - 133)) | (1L << (T_SIGNAL - 133)) | (1L << (T_SMALLINT - 133)) | (1L << (T_SQL - 133)) | (1L << (T_SQLEXCEPTION - 133)) | (1L << (T_SQLINSERT - 133)) | (1L << (T_SQLSTATE - 133)) | (1L << (T_SQLWARNING - 133)) | (1L << (T_STEP - 133)) | (1L << (T_STRING - 133)) | (1L << (T_SUBSTRING - 133)) | (1L << (T_SUM - 133)) | (1L << (T_TABLE - 133)) | (1L << (T_TEMPORARY - 133)) | (1L << (T_TERMINATED - 133)) | (1L << (T_THEN - 133)) | (1L << (T_TIMESTAMP - 133)) | (1L << (T_TITLE - 133)) | (1L << (T_TO - 133)) | (1L << (T_TOP - 133)) | (1L << (T_UNIQUE - 133)) | (1L << (T_UPDATE - 133)) | (1L << (T_UR - 133)) | (1L << (T_USE - 133)) | (1L << (T_USING - 133)) | (1L << (T_VALUE - 133)) | (1L << (T_VALUES - 133)) | (1L << (T_VAR - 133)) | (1L << (T_VARCHAR - 133)))) != 0) || ((((_la - 197)) & ~0x3f) == 0 && ((1L << (_la - 197)) & ((1L << (T_VARCHAR2 - 197)) | (1L << (T_VOLATILE - 197)) | (1L << (T_WHILE - 197)) | (1L << (T_WITH - 197)) | (1L << (T_WITHOUT - 197)) | (1L << (T_WORK - 197)) | (1L << (T_ACTIVITY_COUNT - 197)) | (1L << (T_CURRENT_DATE - 197)) | (1L << (T_CURRENT_TIMESTAMP - 197)) | (1L << (T_CURRENT_USER - 197)) | (1L << (T_DENSE_RANK - 197)) | (1L << (T_FIRST_VALUE - 197)) | (1L << (T_LAG - 197)) | (1L << (T_LAST_VALUE - 197)) | (1L << (T_LEAD - 197)) | (1L << (T_MAX_PART_STRING - 197)) | (1L << (T_MIN_PART_STRING - 197)) | (1L << (T_MAX_PART_INT - 197)) | (1L << (T_MIN_PART_INT - 197)) | (1L << (T_MAX_PART_DATE - 197)) | (1L << (T_MIN_PART_DATE - 197)) | (1L << (T_PART_LOC - 197)) | (1L << (T_RANK - 197)) | (1L << (T_ROW_NUMBER - 197)) | (1L << (T_STDEV - 197)) | (1L << (T_SYSDATE - 197)) | (1L << (T_VARIANCE - 197)) | (1L << (T_USER - 197)) | (1L << (T_ADD - 197)) | (1L << (T_OPEN_P - 197)) | (1L << (T_SUB - 197)) | (1L << (L_ID - 197)) | (1L << (L_S_STRING - 197)) | (1L << (L_D_STRING - 197)) | (1L << (L_INT - 197)) | (1L << (L_DEC - 197)))) != 0)) { + { + setState(2266); + expr(0); + setState(2271); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T_COMMA) { + { + { + setState(2267); + match(T_COMMA); + setState(2268); + expr(0); + } + } + setState(2273); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + + setState(2276); + match(T_CLOSE_P); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class HiveContext extends ParserRuleContext { + public TerminalNode T_HIVE() { return getToken(HplsqlParser.T_HIVE, 0); } + public List hive_item() { + return getRuleContexts(Hive_itemContext.class); + } + public Hive_itemContext hive_item(int i) { + return getRuleContext(Hive_itemContext.class,i); + } + public HiveContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_hive; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitHive(this); + else return visitor.visitChildren(this); + } + } + + public final HiveContext hive() throws RecognitionException { + HiveContext _localctx = new HiveContext(_ctx, getState()); + enterRule(_localctx, 312, RULE_hive); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(2278); + match(T_HIVE); + setState(2282); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,280,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(2279); + hive_item(); + } + } + } + setState(2284); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,280,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Hive_itemContext extends ParserRuleContext { + public TerminalNode P_e() { return getToken(HplsqlParser.P_e, 0); } + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public TerminalNode P_f() { return getToken(HplsqlParser.P_f, 0); } + public TerminalNode P_hiveconf() { return getToken(HplsqlParser.P_hiveconf, 0); } + public TerminalNode L_ID() { return getToken(HplsqlParser.L_ID, 0); } + public TerminalNode T_EQUAL() { return getToken(HplsqlParser.T_EQUAL, 0); } + public TerminalNode P_i() { return getToken(HplsqlParser.P_i, 0); } + public TerminalNode P_S() { return getToken(HplsqlParser.P_S, 0); } + public TerminalNode P_h() { return getToken(HplsqlParser.P_h, 0); } + public Hive_itemContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_hive_item; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitHive_item(this); + else return visitor.visitChildren(this); + } + } + + public final Hive_itemContext hive_item() throws RecognitionException { + Hive_itemContext _localctx = new Hive_itemContext(_ctx, getState()); + enterRule(_localctx, 314, RULE_hive_item); + try { + setState(2297); + switch (_input.LA(1)) { + case P_e: + enterOuterAlt(_localctx, 1); + { + setState(2285); + match(P_e); + setState(2286); + expr(0); + } + break; + case P_f: + enterOuterAlt(_localctx, 2); + { + setState(2287); + match(P_f); + setState(2288); + expr(0); + } + break; + case P_hiveconf: + enterOuterAlt(_localctx, 3); + { + setState(2289); + match(P_hiveconf); + setState(2290); + match(L_ID); + setState(2291); + match(T_EQUAL); + setState(2292); + expr(0); + } + break; + case P_i: + enterOuterAlt(_localctx, 4); + { + setState(2293); + match(P_i); + setState(2294); + expr(0); + } + break; + case P_S: + enterOuterAlt(_localctx, 5); + { + setState(2295); + match(P_S); + } + break; + case P_h: + enterOuterAlt(_localctx, 6); + { + setState(2296); + match(P_h); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class HostContext extends ParserRuleContext { + public Host_cmdContext host_cmd() { + return getRuleContext(Host_cmdContext.class,0); + } + public Host_stmtContext host_stmt() { + return getRuleContext(Host_stmtContext.class,0); + } + public HostContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_host; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitHost(this); + else return visitor.visitChildren(this); + } + } + + public final HostContext host() throws RecognitionException { + HostContext _localctx = new HostContext(_ctx, getState()); + enterRule(_localctx, 316, RULE_host); + try { + setState(2304); + switch (_input.LA(1)) { + case T__3: + enterOuterAlt(_localctx, 1); + { + setState(2299); + match(T__3); + setState(2300); + host_cmd(); + setState(2301); + match(T_SEMICOLON); + } + break; + case T_HOST: + enterOuterAlt(_localctx, 2); + { + setState(2303); + host_stmt(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Host_cmdContext extends ParserRuleContext { + public Host_cmdContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_host_cmd; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitHost_cmd(this); + else return visitor.visitChildren(this); + } + } + + public final Host_cmdContext host_cmd() throws RecognitionException { + Host_cmdContext _localctx = new Host_cmdContext(_ctx, getState()); + enterRule(_localctx, 318, RULE_host_cmd); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(2309); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,283,_ctx); + while ( _alt!=1 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1+1 ) { + { + { + setState(2306); + matchWildcard(); + } + } + } + setState(2311); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,283,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Host_stmtContext extends ParserRuleContext { + public TerminalNode T_HOST() { return getToken(HplsqlParser.T_HOST, 0); } + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public Host_stmtContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_host_stmt; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitHost_stmt(this); + else return visitor.visitChildren(this); + } + } + + public final Host_stmtContext host_stmt() throws RecognitionException { + Host_stmtContext _localctx = new Host_stmtContext(_ctx, getState()); + enterRule(_localctx, 320, RULE_host_stmt); + try { + enterOuterAlt(_localctx, 1); + { + setState(2312); + match(T_HOST); + setState(2313); + expr(0); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class File_nameContext extends ParserRuleContext { + public TerminalNode L_ID() { return getToken(HplsqlParser.L_ID, 0); } + public TerminalNode L_FILE() { return getToken(HplsqlParser.L_FILE, 0); } + public File_nameContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_file_name; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitFile_name(this); + else return visitor.visitChildren(this); + } + } + + public final File_nameContext file_name() throws RecognitionException { + File_nameContext _localctx = new File_nameContext(_ctx, getState()); + enterRule(_localctx, 322, RULE_file_name); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(2315); + _la = _input.LA(1); + if ( !(_la==L_ID || _la==L_FILE) ) { + _errHandler.recoverInline(this); + } else { + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Date_literalContext extends ParserRuleContext { + public TerminalNode T_DATE() { return getToken(HplsqlParser.T_DATE, 0); } + public StringContext string() { + return getRuleContext(StringContext.class,0); + } + public Date_literalContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_date_literal; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitDate_literal(this); + else return visitor.visitChildren(this); + } + } + + public final Date_literalContext date_literal() throws RecognitionException { + Date_literalContext _localctx = new Date_literalContext(_ctx, getState()); + enterRule(_localctx, 324, RULE_date_literal); + try { + enterOuterAlt(_localctx, 1); + { + setState(2317); + match(T_DATE); + setState(2318); + string(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Timestamp_literalContext extends ParserRuleContext { + public TerminalNode T_TIMESTAMP() { return getToken(HplsqlParser.T_TIMESTAMP, 0); } + public StringContext string() { + return getRuleContext(StringContext.class,0); + } + public Timestamp_literalContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_timestamp_literal; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitTimestamp_literal(this); + else return visitor.visitChildren(this); + } + } + + public final Timestamp_literalContext timestamp_literal() throws RecognitionException { + Timestamp_literalContext _localctx = new Timestamp_literalContext(_ctx, getState()); + enterRule(_localctx, 326, RULE_timestamp_literal); + try { + enterOuterAlt(_localctx, 1); + { + setState(2320); + match(T_TIMESTAMP); + setState(2321); + string(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class IdentContext extends ParserRuleContext { + public TerminalNode L_ID() { return getToken(HplsqlParser.L_ID, 0); } + public Non_reserved_wordsContext non_reserved_words() { + return getRuleContext(Non_reserved_wordsContext.class,0); + } + public IdentContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_ident; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitIdent(this); + else return visitor.visitChildren(this); + } + } + + public final IdentContext ident() throws RecognitionException { + IdentContext _localctx = new IdentContext(_ctx, getState()); + enterRule(_localctx, 328, RULE_ident); + try { + setState(2325); + switch (_input.LA(1)) { + case L_ID: + enterOuterAlt(_localctx, 1); + { + setState(2323); + match(L_ID); + } + break; + case T_ALL: + case T_ALTER: + case T_AND: + case T_AS: + case T_ASC: + case T_AT: + case T_AVG: + case T_BATCHSIZE: + case T_BEGIN: + case T_BETWEEN: + case T_BIGINT: + case T_BREAK: + case T_BY: + case T_CALL: + case T_CALLER: + case T_CASE: + case T_CASESPECIFIC: + case T_CAST: + case T_CHAR: + case T_CHARACTER: + case T_CLIENT: + case T_CLOSE: + case T_COLLECTION: + case T_COPY: + case T_COMMIT: + case T_CONCAT: + case T_CONDITION: + case T_CONSTRAINT: + case T_CONTINUE: + case T_COUNT: + case T_COUNT_BIG: + case T_CREATE: + case T_CREATOR: + case T_CS: + case T_CURRENT: + case T_CURSOR: + case T_DATE: + case T_DAY: + case T_DAYS: + case T_DEC: + case T_DECIMAL: + case T_DECLARE: + case T_DEFAULT: + case T_DEFINED: + case T_DEFINER: + case T_DELETE: + case T_DELIMITED: + case T_DELIMITER: + case T_DESC: + case T_DIAGNOSTICS: + case T_DISTINCT: + case T_DISTRIBUTE: + case T_DO: + case T_DROP: + case T_DYNAMIC: + case T_ESCAPED: + case T_EXCEPT: + case T_EXEC: + case T_EXECUTE: + case T_EXCEPTION: + case T_EXISTS: + case T_EXIT: + case T_FETCH: + case T_FIELDS: + case T_FILE: + case T_FLOAT: + case T_FOR: + case T_FORMAT: + case T_FOUND: + case T_FROM: + case T_FULL: + case T_FUNCTION: + case T_GET: + case T_GLOBAL: + case T_GRANT: + case T_GROUP: + case T_HANDLER: + case T_HASH: + case T_HAVING: + case T_HIVE: + case T_HOST: + case T_IF: + case T_IGNORE: + case T_IMMEDIATE: + case T_IN: + case T_INCLUDE: + case T_INDEX: + case T_INNER: + case T_INOUT: + case T_INSERT: + case T_INT: + case T_INTEGER: + case T_INTERSECT: + case T_INTO: + case T_INVOKER: + case T_IS: + case T_ITEMS: + case T_JOIN: + case T_KEY: + case T_KEYS: + case T_LANGUAGE: + case T_LEAVE: + case T_LEFT: + case T_LIKE: + case T_LIMIT: + case T_LINES: + case T_LOCAL: + case T_LOGGED: + case T_LOOP: + case T_MAP: + case T_MATCHED: + case T_MAX: + case T_MERGE: + case T_MESSAGE_TEXT: + case T_MICROSECOND: + case T_MICROSECONDS: + case T_MIN: + case T_MULTISET: + case T_NOT: + case T_NUMBER: + case T_OBJECT: + case T_ON: + case T_ONLY: + case T_OPEN: + case T_OR: + case T_ORDER: + case T_OUT: + case T_OUTER: + case T_OVER: + case T_OVERWRITE: + case T_OWNER: + case T_PARTITION: + case T_PRESERVE: + case T_PRIMARY: + case T_PRINT: + case T_PROC: + case T_PROCEDURE: + case T_REGEXP: + case T_REPLACE: + case T_RESIGNAL: + case T_RESULT: + case T_RETURN: + case T_RETURNS: + case T_REVERSE: + case T_RIGHT: + case T_RLIKE: + case T_ROLLBACK: + case T_ROW: + case T_ROWS: + case T_ROW_COUNT: + case T_RR: + case T_RS: + case T_TRIM: + case T_SECURITY: + case T_SEL: + case T_SELECT: + case T_SET: + case T_SETS: + case T_SIGNAL: + case T_SMALLINT: + case T_SQL: + case T_SQLEXCEPTION: + case T_SQLINSERT: + case T_SQLSTATE: + case T_SQLWARNING: + case T_STEP: + case T_STRING: + case T_SUBSTRING: + case T_SUM: + case T_TABLE: + case T_TEMPORARY: + case T_TERMINATED: + case T_THEN: + case T_TIMESTAMP: + case T_TITLE: + case T_TO: + case T_TOP: + case T_UNIQUE: + case T_UPDATE: + case T_UR: + case T_USE: + case T_USING: + case T_VALUE: + case T_VALUES: + case T_VAR: + case T_VARCHAR: + case T_VARCHAR2: + case T_VOLATILE: + case T_WHILE: + case T_WITH: + case T_WITHOUT: + case T_WORK: + case T_ACTIVITY_COUNT: + case T_CURRENT_DATE: + case T_CURRENT_TIMESTAMP: + case T_CURRENT_USER: + case T_DENSE_RANK: + case T_FIRST_VALUE: + case T_LAG: + case T_LAST_VALUE: + case T_LEAD: + case T_PART_LOC: + case T_RANK: + case T_ROW_NUMBER: + case T_STDEV: + case T_SYSDATE: + case T_VARIANCE: + case T_USER: + enterOuterAlt(_localctx, 2); + { + setState(2324); + non_reserved_words(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class StringContext extends ParserRuleContext { + public StringContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_string; } + + public StringContext() { } + public void copyFrom(StringContext ctx) { + super.copyFrom(ctx); + } + } + public static class Single_quotedStringContext extends StringContext { + public TerminalNode L_S_STRING() { return getToken(HplsqlParser.L_S_STRING, 0); } + public Single_quotedStringContext(StringContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitSingle_quotedString(this); + else return visitor.visitChildren(this); + } + } + public static class Double_quotedStringContext extends StringContext { + public TerminalNode L_D_STRING() { return getToken(HplsqlParser.L_D_STRING, 0); } + public Double_quotedStringContext(StringContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitDouble_quotedString(this); + else return visitor.visitChildren(this); + } + } + + public final StringContext string() throws RecognitionException { + StringContext _localctx = new StringContext(_ctx, getState()); + enterRule(_localctx, 330, RULE_string); + try { + setState(2329); + switch (_input.LA(1)) { + case L_S_STRING: + _localctx = new Single_quotedStringContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(2327); + match(L_S_STRING); + } + break; + case L_D_STRING: + _localctx = new Double_quotedStringContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(2328); + match(L_D_STRING); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Int_numberContext extends ParserRuleContext { + public TerminalNode L_INT() { return getToken(HplsqlParser.L_INT, 0); } + public Int_numberContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_int_number; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitInt_number(this); + else return visitor.visitChildren(this); + } + } + + public final Int_numberContext int_number() throws RecognitionException { + Int_numberContext _localctx = new Int_numberContext(_ctx, getState()); + enterRule(_localctx, 332, RULE_int_number); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(2332); + _la = _input.LA(1); + if (_la==T_ADD || _la==T_SUB) { + { + setState(2331); + _la = _input.LA(1); + if ( !(_la==T_ADD || _la==T_SUB) ) { + _errHandler.recoverInline(this); + } else { + consume(); + } + } + } + + setState(2334); + match(L_INT); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Dec_numberContext extends ParserRuleContext { + public TerminalNode L_DEC() { return getToken(HplsqlParser.L_DEC, 0); } + public Dec_numberContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_dec_number; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitDec_number(this); + else return visitor.visitChildren(this); + } + } + + public final Dec_numberContext dec_number() throws RecognitionException { + Dec_numberContext _localctx = new Dec_numberContext(_ctx, getState()); + enterRule(_localctx, 334, RULE_dec_number); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(2337); + _la = _input.LA(1); + if (_la==T_ADD || _la==T_SUB) { + { + setState(2336); + _la = _input.LA(1); + if ( !(_la==T_ADD || _la==T_SUB) ) { + _errHandler.recoverInline(this); + } else { + consume(); + } + } + } + + setState(2339); + match(L_DEC); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Null_constContext extends ParserRuleContext { + public TerminalNode T_NULL() { return getToken(HplsqlParser.T_NULL, 0); } + public Null_constContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_null_const; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitNull_const(this); + else return visitor.visitChildren(this); + } + } + + public final Null_constContext null_const() throws RecognitionException { + Null_constContext _localctx = new Null_constContext(_ctx, getState()); + enterRule(_localctx, 336, RULE_null_const); + try { + enterOuterAlt(_localctx, 1); + { + setState(2341); + match(T_NULL); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Non_reserved_wordsContext extends ParserRuleContext { + public TerminalNode T_ACTIVITY_COUNT() { return getToken(HplsqlParser.T_ACTIVITY_COUNT, 0); } + public TerminalNode T_ALL() { return getToken(HplsqlParser.T_ALL, 0); } + public TerminalNode T_ALTER() { return getToken(HplsqlParser.T_ALTER, 0); } + public TerminalNode T_AND() { return getToken(HplsqlParser.T_AND, 0); } + public TerminalNode T_AS() { return getToken(HplsqlParser.T_AS, 0); } + public TerminalNode T_ASC() { return getToken(HplsqlParser.T_ASC, 0); } + public TerminalNode T_AT() { return getToken(HplsqlParser.T_AT, 0); } + public TerminalNode T_AVG() { return getToken(HplsqlParser.T_AVG, 0); } + public TerminalNode T_BATCHSIZE() { return getToken(HplsqlParser.T_BATCHSIZE, 0); } + public TerminalNode T_BEGIN() { return getToken(HplsqlParser.T_BEGIN, 0); } + public TerminalNode T_BETWEEN() { return getToken(HplsqlParser.T_BETWEEN, 0); } + public TerminalNode T_BIGINT() { return getToken(HplsqlParser.T_BIGINT, 0); } + public TerminalNode T_BREAK() { return getToken(HplsqlParser.T_BREAK, 0); } + public TerminalNode T_BY() { return getToken(HplsqlParser.T_BY, 0); } + public TerminalNode T_CALL() { return getToken(HplsqlParser.T_CALL, 0); } + public TerminalNode T_CALLER() { return getToken(HplsqlParser.T_CALLER, 0); } + public TerminalNode T_CASE() { return getToken(HplsqlParser.T_CASE, 0); } + public TerminalNode T_CASESPECIFIC() { return getToken(HplsqlParser.T_CASESPECIFIC, 0); } + public TerminalNode T_CAST() { return getToken(HplsqlParser.T_CAST, 0); } + public TerminalNode T_CHAR() { return getToken(HplsqlParser.T_CHAR, 0); } + public TerminalNode T_CHARACTER() { return getToken(HplsqlParser.T_CHARACTER, 0); } + public TerminalNode T_CLIENT() { return getToken(HplsqlParser.T_CLIENT, 0); } + public TerminalNode T_CLOSE() { return getToken(HplsqlParser.T_CLOSE, 0); } + public TerminalNode T_COLLECTION() { return getToken(HplsqlParser.T_COLLECTION, 0); } + public TerminalNode T_COPY() { return getToken(HplsqlParser.T_COPY, 0); } + public TerminalNode T_COMMIT() { return getToken(HplsqlParser.T_COMMIT, 0); } + public TerminalNode T_CONCAT() { return getToken(HplsqlParser.T_CONCAT, 0); } + public TerminalNode T_CONDITION() { return getToken(HplsqlParser.T_CONDITION, 0); } + public TerminalNode T_CONSTRAINT() { return getToken(HplsqlParser.T_CONSTRAINT, 0); } + public TerminalNode T_CONTINUE() { return getToken(HplsqlParser.T_CONTINUE, 0); } + public TerminalNode T_COUNT() { return getToken(HplsqlParser.T_COUNT, 0); } + public TerminalNode T_COUNT_BIG() { return getToken(HplsqlParser.T_COUNT_BIG, 0); } + public TerminalNode T_CREATE() { return getToken(HplsqlParser.T_CREATE, 0); } + public TerminalNode T_CREATOR() { return getToken(HplsqlParser.T_CREATOR, 0); } + public TerminalNode T_CS() { return getToken(HplsqlParser.T_CS, 0); } + public TerminalNode T_CURRENT() { return getToken(HplsqlParser.T_CURRENT, 0); } + public TerminalNode T_CURRENT_DATE() { return getToken(HplsqlParser.T_CURRENT_DATE, 0); } + public TerminalNode T_CURRENT_TIMESTAMP() { return getToken(HplsqlParser.T_CURRENT_TIMESTAMP, 0); } + public TerminalNode T_CURRENT_USER() { return getToken(HplsqlParser.T_CURRENT_USER, 0); } + public TerminalNode T_CURSOR() { return getToken(HplsqlParser.T_CURSOR, 0); } + public TerminalNode T_DATE() { return getToken(HplsqlParser.T_DATE, 0); } + public TerminalNode T_DAY() { return getToken(HplsqlParser.T_DAY, 0); } + public TerminalNode T_DAYS() { return getToken(HplsqlParser.T_DAYS, 0); } + public TerminalNode T_DEC() { return getToken(HplsqlParser.T_DEC, 0); } + public TerminalNode T_DECIMAL() { return getToken(HplsqlParser.T_DECIMAL, 0); } + public TerminalNode T_DECLARE() { return getToken(HplsqlParser.T_DECLARE, 0); } + public TerminalNode T_DEFAULT() { return getToken(HplsqlParser.T_DEFAULT, 0); } + public TerminalNode T_DEFINED() { return getToken(HplsqlParser.T_DEFINED, 0); } + public TerminalNode T_DEFINER() { return getToken(HplsqlParser.T_DEFINER, 0); } + public TerminalNode T_DELETE() { return getToken(HplsqlParser.T_DELETE, 0); } + public TerminalNode T_DELIMITED() { return getToken(HplsqlParser.T_DELIMITED, 0); } + public TerminalNode T_DELIMITER() { return getToken(HplsqlParser.T_DELIMITER, 0); } + public TerminalNode T_DENSE_RANK() { return getToken(HplsqlParser.T_DENSE_RANK, 0); } + public TerminalNode T_DESC() { return getToken(HplsqlParser.T_DESC, 0); } + public TerminalNode T_DIAGNOSTICS() { return getToken(HplsqlParser.T_DIAGNOSTICS, 0); } + public TerminalNode T_DISTINCT() { return getToken(HplsqlParser.T_DISTINCT, 0); } + public TerminalNode T_DISTRIBUTE() { return getToken(HplsqlParser.T_DISTRIBUTE, 0); } + public TerminalNode T_DO() { return getToken(HplsqlParser.T_DO, 0); } + public TerminalNode T_DROP() { return getToken(HplsqlParser.T_DROP, 0); } + public TerminalNode T_DYNAMIC() { return getToken(HplsqlParser.T_DYNAMIC, 0); } + public TerminalNode T_ESCAPED() { return getToken(HplsqlParser.T_ESCAPED, 0); } + public TerminalNode T_EXCEPT() { return getToken(HplsqlParser.T_EXCEPT, 0); } + public TerminalNode T_EXEC() { return getToken(HplsqlParser.T_EXEC, 0); } + public TerminalNode T_EXECUTE() { return getToken(HplsqlParser.T_EXECUTE, 0); } + public TerminalNode T_EXCEPTION() { return getToken(HplsqlParser.T_EXCEPTION, 0); } + public TerminalNode T_EXISTS() { return getToken(HplsqlParser.T_EXISTS, 0); } + public TerminalNode T_EXIT() { return getToken(HplsqlParser.T_EXIT, 0); } + public TerminalNode T_FETCH() { return getToken(HplsqlParser.T_FETCH, 0); } + public TerminalNode T_FIELDS() { return getToken(HplsqlParser.T_FIELDS, 0); } + public TerminalNode T_FILE() { return getToken(HplsqlParser.T_FILE, 0); } + public TerminalNode T_FIRST_VALUE() { return getToken(HplsqlParser.T_FIRST_VALUE, 0); } + public TerminalNode T_FLOAT() { return getToken(HplsqlParser.T_FLOAT, 0); } + public TerminalNode T_FOR() { return getToken(HplsqlParser.T_FOR, 0); } + public TerminalNode T_FORMAT() { return getToken(HplsqlParser.T_FORMAT, 0); } + public TerminalNode T_FOUND() { return getToken(HplsqlParser.T_FOUND, 0); } + public TerminalNode T_FROM() { return getToken(HplsqlParser.T_FROM, 0); } + public TerminalNode T_FULL() { return getToken(HplsqlParser.T_FULL, 0); } + public TerminalNode T_FUNCTION() { return getToken(HplsqlParser.T_FUNCTION, 0); } + public TerminalNode T_GET() { return getToken(HplsqlParser.T_GET, 0); } + public TerminalNode T_GLOBAL() { return getToken(HplsqlParser.T_GLOBAL, 0); } + public TerminalNode T_GRANT() { return getToken(HplsqlParser.T_GRANT, 0); } + public TerminalNode T_GROUP() { return getToken(HplsqlParser.T_GROUP, 0); } + public TerminalNode T_HANDLER() { return getToken(HplsqlParser.T_HANDLER, 0); } + public TerminalNode T_HASH() { return getToken(HplsqlParser.T_HASH, 0); } + public TerminalNode T_HAVING() { return getToken(HplsqlParser.T_HAVING, 0); } + public TerminalNode T_HIVE() { return getToken(HplsqlParser.T_HIVE, 0); } + public TerminalNode T_HOST() { return getToken(HplsqlParser.T_HOST, 0); } + public TerminalNode T_IF() { return getToken(HplsqlParser.T_IF, 0); } + public TerminalNode T_IGNORE() { return getToken(HplsqlParser.T_IGNORE, 0); } + public TerminalNode T_IMMEDIATE() { return getToken(HplsqlParser.T_IMMEDIATE, 0); } + public TerminalNode T_IN() { return getToken(HplsqlParser.T_IN, 0); } + public TerminalNode T_INCLUDE() { return getToken(HplsqlParser.T_INCLUDE, 0); } + public TerminalNode T_INDEX() { return getToken(HplsqlParser.T_INDEX, 0); } + public TerminalNode T_INNER() { return getToken(HplsqlParser.T_INNER, 0); } + public TerminalNode T_INOUT() { return getToken(HplsqlParser.T_INOUT, 0); } + public TerminalNode T_INSERT() { return getToken(HplsqlParser.T_INSERT, 0); } + public TerminalNode T_INT() { return getToken(HplsqlParser.T_INT, 0); } + public TerminalNode T_INTEGER() { return getToken(HplsqlParser.T_INTEGER, 0); } + public TerminalNode T_INTERSECT() { return getToken(HplsqlParser.T_INTERSECT, 0); } + public TerminalNode T_INTO() { return getToken(HplsqlParser.T_INTO, 0); } + public TerminalNode T_INVOKER() { return getToken(HplsqlParser.T_INVOKER, 0); } + public TerminalNode T_ITEMS() { return getToken(HplsqlParser.T_ITEMS, 0); } + public TerminalNode T_IS() { return getToken(HplsqlParser.T_IS, 0); } + public TerminalNode T_JOIN() { return getToken(HplsqlParser.T_JOIN, 0); } + public TerminalNode T_KEY() { return getToken(HplsqlParser.T_KEY, 0); } + public TerminalNode T_KEYS() { return getToken(HplsqlParser.T_KEYS, 0); } + public TerminalNode T_LAG() { return getToken(HplsqlParser.T_LAG, 0); } + public TerminalNode T_LANGUAGE() { return getToken(HplsqlParser.T_LANGUAGE, 0); } + public TerminalNode T_LAST_VALUE() { return getToken(HplsqlParser.T_LAST_VALUE, 0); } + public TerminalNode T_LEAD() { return getToken(HplsqlParser.T_LEAD, 0); } + public TerminalNode T_LEAVE() { return getToken(HplsqlParser.T_LEAVE, 0); } + public TerminalNode T_LEFT() { return getToken(HplsqlParser.T_LEFT, 0); } + public TerminalNode T_LIKE() { return getToken(HplsqlParser.T_LIKE, 0); } + public TerminalNode T_LIMIT() { return getToken(HplsqlParser.T_LIMIT, 0); } + public TerminalNode T_LINES() { return getToken(HplsqlParser.T_LINES, 0); } + public TerminalNode T_LOCAL() { return getToken(HplsqlParser.T_LOCAL, 0); } + public TerminalNode T_LOGGED() { return getToken(HplsqlParser.T_LOGGED, 0); } + public TerminalNode T_LOOP() { return getToken(HplsqlParser.T_LOOP, 0); } + public TerminalNode T_MAP() { return getToken(HplsqlParser.T_MAP, 0); } + public TerminalNode T_MATCHED() { return getToken(HplsqlParser.T_MATCHED, 0); } + public TerminalNode T_MAX() { return getToken(HplsqlParser.T_MAX, 0); } + public TerminalNode T_MERGE() { return getToken(HplsqlParser.T_MERGE, 0); } + public TerminalNode T_MESSAGE_TEXT() { return getToken(HplsqlParser.T_MESSAGE_TEXT, 0); } + public TerminalNode T_MICROSECOND() { return getToken(HplsqlParser.T_MICROSECOND, 0); } + public TerminalNode T_MICROSECONDS() { return getToken(HplsqlParser.T_MICROSECONDS, 0); } + public TerminalNode T_MIN() { return getToken(HplsqlParser.T_MIN, 0); } + public TerminalNode T_MULTISET() { return getToken(HplsqlParser.T_MULTISET, 0); } + public TerminalNode T_NOT() { return getToken(HplsqlParser.T_NOT, 0); } + public TerminalNode T_NUMBER() { return getToken(HplsqlParser.T_NUMBER, 0); } + public TerminalNode T_OBJECT() { return getToken(HplsqlParser.T_OBJECT, 0); } + public TerminalNode T_ON() { return getToken(HplsqlParser.T_ON, 0); } + public TerminalNode T_ONLY() { return getToken(HplsqlParser.T_ONLY, 0); } + public TerminalNode T_OPEN() { return getToken(HplsqlParser.T_OPEN, 0); } + public TerminalNode T_OR() { return getToken(HplsqlParser.T_OR, 0); } + public TerminalNode T_ORDER() { return getToken(HplsqlParser.T_ORDER, 0); } + public TerminalNode T_OUT() { return getToken(HplsqlParser.T_OUT, 0); } + public TerminalNode T_OUTER() { return getToken(HplsqlParser.T_OUTER, 0); } + public TerminalNode T_OVER() { return getToken(HplsqlParser.T_OVER, 0); } + public TerminalNode T_OVERWRITE() { return getToken(HplsqlParser.T_OVERWRITE, 0); } + public TerminalNode T_OWNER() { return getToken(HplsqlParser.T_OWNER, 0); } + public TerminalNode T_PART_LOC() { return getToken(HplsqlParser.T_PART_LOC, 0); } + public TerminalNode T_PARTITION() { return getToken(HplsqlParser.T_PARTITION, 0); } + public TerminalNode T_PRESERVE() { return getToken(HplsqlParser.T_PRESERVE, 0); } + public TerminalNode T_PRIMARY() { return getToken(HplsqlParser.T_PRIMARY, 0); } + public TerminalNode T_PRINT() { return getToken(HplsqlParser.T_PRINT, 0); } + public TerminalNode T_PROC() { return getToken(HplsqlParser.T_PROC, 0); } + public TerminalNode T_PROCEDURE() { return getToken(HplsqlParser.T_PROCEDURE, 0); } + public TerminalNode T_RANK() { return getToken(HplsqlParser.T_RANK, 0); } + public TerminalNode T_REGEXP() { return getToken(HplsqlParser.T_REGEXP, 0); } + public TerminalNode T_RR() { return getToken(HplsqlParser.T_RR, 0); } + public TerminalNode T_REPLACE() { return getToken(HplsqlParser.T_REPLACE, 0); } + public TerminalNode T_RESIGNAL() { return getToken(HplsqlParser.T_RESIGNAL, 0); } + public TerminalNode T_RESULT() { return getToken(HplsqlParser.T_RESULT, 0); } + public TerminalNode T_RETURN() { return getToken(HplsqlParser.T_RETURN, 0); } + public TerminalNode T_RETURNS() { return getToken(HplsqlParser.T_RETURNS, 0); } + public TerminalNode T_REVERSE() { return getToken(HplsqlParser.T_REVERSE, 0); } + public TerminalNode T_RIGHT() { return getToken(HplsqlParser.T_RIGHT, 0); } + public TerminalNode T_RLIKE() { return getToken(HplsqlParser.T_RLIKE, 0); } + public TerminalNode T_RS() { return getToken(HplsqlParser.T_RS, 0); } + public TerminalNode T_ROLLBACK() { return getToken(HplsqlParser.T_ROLLBACK, 0); } + public TerminalNode T_ROW() { return getToken(HplsqlParser.T_ROW, 0); } + public TerminalNode T_ROWS() { return getToken(HplsqlParser.T_ROWS, 0); } + public TerminalNode T_ROW_COUNT() { return getToken(HplsqlParser.T_ROW_COUNT, 0); } + public TerminalNode T_ROW_NUMBER() { return getToken(HplsqlParser.T_ROW_NUMBER, 0); } + public TerminalNode T_SECURITY() { return getToken(HplsqlParser.T_SECURITY, 0); } + public TerminalNode T_SEL() { return getToken(HplsqlParser.T_SEL, 0); } + public TerminalNode T_SELECT() { return getToken(HplsqlParser.T_SELECT, 0); } + public TerminalNode T_SET() { return getToken(HplsqlParser.T_SET, 0); } + public TerminalNode T_SETS() { return getToken(HplsqlParser.T_SETS, 0); } + public TerminalNode T_SIGNAL() { return getToken(HplsqlParser.T_SIGNAL, 0); } + public TerminalNode T_SMALLINT() { return getToken(HplsqlParser.T_SMALLINT, 0); } + public TerminalNode T_SQL() { return getToken(HplsqlParser.T_SQL, 0); } + public TerminalNode T_SQLEXCEPTION() { return getToken(HplsqlParser.T_SQLEXCEPTION, 0); } + public TerminalNode T_SQLINSERT() { return getToken(HplsqlParser.T_SQLINSERT, 0); } + public TerminalNode T_SQLSTATE() { return getToken(HplsqlParser.T_SQLSTATE, 0); } + public TerminalNode T_SQLWARNING() { return getToken(HplsqlParser.T_SQLWARNING, 0); } + public TerminalNode T_STEP() { return getToken(HplsqlParser.T_STEP, 0); } + public TerminalNode T_STDEV() { return getToken(HplsqlParser.T_STDEV, 0); } + public TerminalNode T_STRING() { return getToken(HplsqlParser.T_STRING, 0); } + public TerminalNode T_SUBSTRING() { return getToken(HplsqlParser.T_SUBSTRING, 0); } + public TerminalNode T_SUM() { return getToken(HplsqlParser.T_SUM, 0); } + public TerminalNode T_SYSDATE() { return getToken(HplsqlParser.T_SYSDATE, 0); } + public TerminalNode T_TABLE() { return getToken(HplsqlParser.T_TABLE, 0); } + public TerminalNode T_TEMPORARY() { return getToken(HplsqlParser.T_TEMPORARY, 0); } + public TerminalNode T_TERMINATED() { return getToken(HplsqlParser.T_TERMINATED, 0); } + public TerminalNode T_THEN() { return getToken(HplsqlParser.T_THEN, 0); } + public TerminalNode T_TIMESTAMP() { return getToken(HplsqlParser.T_TIMESTAMP, 0); } + public TerminalNode T_TITLE() { return getToken(HplsqlParser.T_TITLE, 0); } + public TerminalNode T_TO() { return getToken(HplsqlParser.T_TO, 0); } + public TerminalNode T_TOP() { return getToken(HplsqlParser.T_TOP, 0); } + public TerminalNode T_TRIM() { return getToken(HplsqlParser.T_TRIM, 0); } + public TerminalNode T_UNIQUE() { return getToken(HplsqlParser.T_UNIQUE, 0); } + public TerminalNode T_UPDATE() { return getToken(HplsqlParser.T_UPDATE, 0); } + public TerminalNode T_UR() { return getToken(HplsqlParser.T_UR, 0); } + public TerminalNode T_USE() { return getToken(HplsqlParser.T_USE, 0); } + public TerminalNode T_USER() { return getToken(HplsqlParser.T_USER, 0); } + public TerminalNode T_USING() { return getToken(HplsqlParser.T_USING, 0); } + public TerminalNode T_VALUE() { return getToken(HplsqlParser.T_VALUE, 0); } + public TerminalNode T_VALUES() { return getToken(HplsqlParser.T_VALUES, 0); } + public TerminalNode T_VAR() { return getToken(HplsqlParser.T_VAR, 0); } + public TerminalNode T_VARCHAR() { return getToken(HplsqlParser.T_VARCHAR, 0); } + public TerminalNode T_VARCHAR2() { return getToken(HplsqlParser.T_VARCHAR2, 0); } + public TerminalNode T_VARIANCE() { return getToken(HplsqlParser.T_VARIANCE, 0); } + public TerminalNode T_VOLATILE() { return getToken(HplsqlParser.T_VOLATILE, 0); } + public TerminalNode T_WHILE() { return getToken(HplsqlParser.T_WHILE, 0); } + public TerminalNode T_WITH() { return getToken(HplsqlParser.T_WITH, 0); } + public TerminalNode T_WITHOUT() { return getToken(HplsqlParser.T_WITHOUT, 0); } + public TerminalNode T_WORK() { return getToken(HplsqlParser.T_WORK, 0); } + public Non_reserved_wordsContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_non_reserved_words; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HplsqlVisitor ) return ((HplsqlVisitor)visitor).visitNon_reserved_words(this); + else return visitor.visitChildren(this); + } + } + + public final Non_reserved_wordsContext non_reserved_words() throws RecognitionException { + Non_reserved_wordsContext _localctx = new Non_reserved_wordsContext(_ctx, getState()); + enterRule(_localctx, 338, RULE_non_reserved_words); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(2343); + _la = _input.LA(1); + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T_ALL) | (1L << T_ALTER) | (1L << T_AND) | (1L << T_AS) | (1L << T_ASC) | (1L << T_AT) | (1L << T_AVG) | (1L << T_BATCHSIZE) | (1L << T_BEGIN) | (1L << T_BETWEEN) | (1L << T_BIGINT) | (1L << T_BREAK) | (1L << T_BY) | (1L << T_CALL) | (1L << T_CALLER) | (1L << T_CASE) | (1L << T_CASESPECIFIC) | (1L << T_CAST) | (1L << T_CHAR) | (1L << T_CHARACTER) | (1L << T_CLIENT) | (1L << T_CLOSE) | (1L << T_COLLECTION) | (1L << T_COPY) | (1L << T_COMMIT) | (1L << T_CONCAT) | (1L << T_CONDITION) | (1L << T_CONSTRAINT) | (1L << T_CONTINUE) | (1L << T_COUNT) | (1L << T_COUNT_BIG) | (1L << T_CREATE) | (1L << T_CREATOR) | (1L << T_CS) | (1L << T_CURRENT) | (1L << T_CURSOR) | (1L << T_DATE) | (1L << T_DAY) | (1L << T_DAYS) | (1L << T_DEC) | (1L << T_DECIMAL) | (1L << T_DECLARE) | (1L << T_DEFAULT) | (1L << T_DEFINED) | (1L << T_DEFINER) | (1L << T_DELETE) | (1L << T_DELIMITED) | (1L << T_DELIMITER) | (1L << T_DESC) | (1L << T_DIAGNOSTICS) | (1L << T_DISTINCT) | (1L << T_DISTRIBUTE) | (1L << T_DO) | (1L << T_DROP) | (1L << T_DYNAMIC))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (T_ESCAPED - 64)) | (1L << (T_EXCEPT - 64)) | (1L << (T_EXEC - 64)) | (1L << (T_EXECUTE - 64)) | (1L << (T_EXCEPTION - 64)) | (1L << (T_EXISTS - 64)) | (1L << (T_EXIT - 64)) | (1L << (T_FETCH - 64)) | (1L << (T_FIELDS - 64)) | (1L << (T_FILE - 64)) | (1L << (T_FLOAT - 64)) | (1L << (T_FOR - 64)) | (1L << (T_FORMAT - 64)) | (1L << (T_FOUND - 64)) | (1L << (T_FROM - 64)) | (1L << (T_FULL - 64)) | (1L << (T_FUNCTION - 64)) | (1L << (T_GET - 64)) | (1L << (T_GLOBAL - 64)) | (1L << (T_GRANT - 64)) | (1L << (T_GROUP - 64)) | (1L << (T_HANDLER - 64)) | (1L << (T_HASH - 64)) | (1L << (T_HAVING - 64)) | (1L << (T_HIVE - 64)) | (1L << (T_HOST - 64)) | (1L << (T_IF - 64)) | (1L << (T_IGNORE - 64)) | (1L << (T_IMMEDIATE - 64)) | (1L << (T_IN - 64)) | (1L << (T_INCLUDE - 64)) | (1L << (T_INDEX - 64)) | (1L << (T_INNER - 64)) | (1L << (T_INOUT - 64)) | (1L << (T_INSERT - 64)) | (1L << (T_INT - 64)) | (1L << (T_INTEGER - 64)) | (1L << (T_INTERSECT - 64)) | (1L << (T_INTO - 64)) | (1L << (T_INVOKER - 64)) | (1L << (T_IS - 64)) | (1L << (T_ITEMS - 64)) | (1L << (T_JOIN - 64)) | (1L << (T_KEY - 64)) | (1L << (T_KEYS - 64)) | (1L << (T_LANGUAGE - 64)) | (1L << (T_LEAVE - 64)) | (1L << (T_LEFT - 64)) | (1L << (T_LIKE - 64)) | (1L << (T_LIMIT - 64)) | (1L << (T_LINES - 64)) | (1L << (T_LOCAL - 64)) | (1L << (T_LOGGED - 64)) | (1L << (T_LOOP - 64)) | (1L << (T_MAP - 64)) | (1L << (T_MATCHED - 64)) | (1L << (T_MAX - 64)) | (1L << (T_MERGE - 64)) | (1L << (T_MESSAGE_TEXT - 64)) | (1L << (T_MICROSECOND - 64)) | (1L << (T_MICROSECONDS - 64)) | (1L << (T_MIN - 64)) | (1L << (T_MULTISET - 64)) | (1L << (T_NOT - 64)))) != 0) || ((((_la - 129)) & ~0x3f) == 0 && ((1L << (_la - 129)) & ((1L << (T_NUMBER - 129)) | (1L << (T_OBJECT - 129)) | (1L << (T_ON - 129)) | (1L << (T_ONLY - 129)) | (1L << (T_OPEN - 129)) | (1L << (T_OR - 129)) | (1L << (T_ORDER - 129)) | (1L << (T_OUT - 129)) | (1L << (T_OUTER - 129)) | (1L << (T_OVER - 129)) | (1L << (T_OVERWRITE - 129)) | (1L << (T_OWNER - 129)) | (1L << (T_PARTITION - 129)) | (1L << (T_PRESERVE - 129)) | (1L << (T_PRIMARY - 129)) | (1L << (T_PRINT - 129)) | (1L << (T_PROC - 129)) | (1L << (T_PROCEDURE - 129)) | (1L << (T_REGEXP - 129)) | (1L << (T_REPLACE - 129)) | (1L << (T_RESIGNAL - 129)) | (1L << (T_RESULT - 129)) | (1L << (T_RETURN - 129)) | (1L << (T_RETURNS - 129)) | (1L << (T_REVERSE - 129)) | (1L << (T_RIGHT - 129)) | (1L << (T_RLIKE - 129)) | (1L << (T_ROLLBACK - 129)) | (1L << (T_ROW - 129)) | (1L << (T_ROWS - 129)) | (1L << (T_ROW_COUNT - 129)) | (1L << (T_RR - 129)) | (1L << (T_RS - 129)) | (1L << (T_TRIM - 129)) | (1L << (T_SECURITY - 129)) | (1L << (T_SEL - 129)) | (1L << (T_SELECT - 129)) | (1L << (T_SET - 129)) | (1L << (T_SETS - 129)) | (1L << (T_SIGNAL - 129)) | (1L << (T_SMALLINT - 129)) | (1L << (T_SQL - 129)) | (1L << (T_SQLEXCEPTION - 129)) | (1L << (T_SQLINSERT - 129)) | (1L << (T_SQLSTATE - 129)) | (1L << (T_SQLWARNING - 129)) | (1L << (T_STEP - 129)) | (1L << (T_STRING - 129)) | (1L << (T_SUBSTRING - 129)) | (1L << (T_SUM - 129)) | (1L << (T_TABLE - 129)) | (1L << (T_TEMPORARY - 129)) | (1L << (T_TERMINATED - 129)) | (1L << (T_THEN - 129)) | (1L << (T_TIMESTAMP - 129)) | (1L << (T_TITLE - 129)) | (1L << (T_TO - 129)) | (1L << (T_TOP - 129)) | (1L << (T_UNIQUE - 129)) | (1L << (T_UPDATE - 129)) | (1L << (T_UR - 129)) | (1L << (T_USE - 129)) | (1L << (T_USING - 129)))) != 0) || ((((_la - 193)) & ~0x3f) == 0 && ((1L << (_la - 193)) & ((1L << (T_VALUE - 193)) | (1L << (T_VALUES - 193)) | (1L << (T_VAR - 193)) | (1L << (T_VARCHAR - 193)) | (1L << (T_VARCHAR2 - 193)) | (1L << (T_VOLATILE - 193)) | (1L << (T_WHILE - 193)) | (1L << (T_WITH - 193)) | (1L << (T_WITHOUT - 193)) | (1L << (T_WORK - 193)) | (1L << (T_ACTIVITY_COUNT - 193)) | (1L << (T_CURRENT_DATE - 193)) | (1L << (T_CURRENT_TIMESTAMP - 193)) | (1L << (T_CURRENT_USER - 193)) | (1L << (T_DENSE_RANK - 193)) | (1L << (T_FIRST_VALUE - 193)) | (1L << (T_LAG - 193)) | (1L << (T_LAST_VALUE - 193)) | (1L << (T_LEAD - 193)) | (1L << (T_PART_LOC - 193)) | (1L << (T_RANK - 193)) | (1L << (T_ROW_NUMBER - 193)) | (1L << (T_STDEV - 193)) | (1L << (T_SYSDATE - 193)) | (1L << (T_VARIANCE - 193)) | (1L << (T_USER - 193)))) != 0)) ) { + _errHandler.recoverInline(this); + } else { + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) { + switch (ruleIndex) { + case 116: + return from_alias_clause_sempred((From_alias_clauseContext)_localctx, predIndex); + case 132: + return bool_expr_sempred((Bool_exprContext)_localctx, predIndex); + case 140: + return expr_sempred((ExprContext)_localctx, predIndex); + } + return true; + } + private boolean from_alias_clause_sempred(From_alias_clauseContext _localctx, int predIndex) { + switch (predIndex) { + case 0: + return !_input.LT(1).getText().equalsIgnoreCase("GROUP") && + !_input.LT(1).getText().equalsIgnoreCase("ORDER") && + !_input.LT(1).getText().equalsIgnoreCase("LIMIT"); + } + return true; + } + private boolean bool_expr_sempred(Bool_exprContext _localctx, int predIndex) { + switch (predIndex) { + case 1: + return precpred(_ctx, 2); + } + return true; + } + private boolean expr_sempred(ExprContext _localctx, int predIndex) { + switch (predIndex) { + case 2: + return precpred(_ctx, 11); + case 3: + return precpred(_ctx, 10); + case 4: + return precpred(_ctx, 9); + case 5: + return precpred(_ctx, 8); + case 6: + return precpred(_ctx, 12); + } + return true; + } + + public static final String _serializedATN = + "\3\u0430\ud6d1\u8206\uad2d\u4417\uaef1\u8d80\uaadd\3\u0109\u092c\4\2\t"+ + "\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13"+ + "\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+ + "\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"+ + "\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\4\37\t\37\4 \t \4!"+ + "\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t+\4"+ + ",\t,\4-\t-\4.\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64\t"+ + "\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:\4;\t;\4<\t<\4=\t="+ + "\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\tC\4D\tD\4E\tE\4F\tF\4G\tG\4H\tH\4I"+ + "\tI\4J\tJ\4K\tK\4L\tL\4M\tM\4N\tN\4O\tO\4P\tP\4Q\tQ\4R\tR\4S\tS\4T\tT"+ + "\4U\tU\4V\tV\4W\tW\4X\tX\4Y\tY\4Z\tZ\4[\t[\4\\\t\\\4]\t]\4^\t^\4_\t_\4"+ + "`\t`\4a\ta\4b\tb\4c\tc\4d\td\4e\te\4f\tf\4g\tg\4h\th\4i\ti\4j\tj\4k\t"+ + "k\4l\tl\4m\tm\4n\tn\4o\to\4p\tp\4q\tq\4r\tr\4s\ts\4t\tt\4u\tu\4v\tv\4"+ + "w\tw\4x\tx\4y\ty\4z\tz\4{\t{\4|\t|\4}\t}\4~\t~\4\177\t\177\4\u0080\t\u0080"+ + "\4\u0081\t\u0081\4\u0082\t\u0082\4\u0083\t\u0083\4\u0084\t\u0084\4\u0085"+ + "\t\u0085\4\u0086\t\u0086\4\u0087\t\u0087\4\u0088\t\u0088\4\u0089\t\u0089"+ + "\4\u008a\t\u008a\4\u008b\t\u008b\4\u008c\t\u008c\4\u008d\t\u008d\4\u008e"+ + "\t\u008e\4\u008f\t\u008f\4\u0090\t\u0090\4\u0091\t\u0091\4\u0092\t\u0092"+ + "\4\u0093\t\u0093\4\u0094\t\u0094\4\u0095\t\u0095\4\u0096\t\u0096\4\u0097"+ + "\t\u0097\4\u0098\t\u0098\4\u0099\t\u0099\4\u009a\t\u009a\4\u009b\t\u009b"+ + "\4\u009c\t\u009c\4\u009d\t\u009d\4\u009e\t\u009e\4\u009f\t\u009f\4\u00a0"+ + "\t\u00a0\4\u00a1\t\u00a1\4\u00a2\t\u00a2\4\u00a3\t\u00a3\4\u00a4\t\u00a4"+ + "\4\u00a5\t\u00a5\4\u00a6\t\u00a6\4\u00a7\t\u00a7\4\u00a8\t\u00a8\4\u00a9"+ + "\t\u00a9\4\u00aa\t\u00aa\4\u00ab\t\u00ab\3\2\3\2\3\3\3\3\6\3\u015b\n\3"+ + "\r\3\16\3\u015c\3\4\5\4\u0160\n\4\3\4\3\4\3\4\5\4\u0165\n\4\3\4\3\4\3"+ + "\5\3\5\3\5\3\5\3\5\3\5\5\5\u016f\n\5\5\5\u0171\n\5\3\6\3\6\3\6\3\6\3\6"+ + "\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3"+ + "\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6"+ + "\3\6\3\6\3\6\3\6\5\6\u019f\n\6\3\7\3\7\3\b\3\b\6\b\u01a5\n\b\r\b\16\b"+ + "\u01a6\3\t\3\t\3\t\3\t\3\t\3\t\3\n\3\n\3\13\5\13\u01b2\n\13\3\13\3\13"+ + "\3\13\7\13\u01b7\n\13\f\13\16\13\u01ba\13\13\3\f\3\f\3\f\5\f\u01bf\n\f"+ + "\3\r\3\r\5\r\u01c3\n\r\3\r\3\r\3\r\3\16\3\16\3\16\3\16\7\16\u01cc\n\16"+ + "\f\16\16\16\u01cf\13\16\3\16\3\16\5\16\u01d3\n\16\3\16\3\16\3\16\3\16"+ + "\3\16\7\16\u01da\n\16\f\16\16\16\u01dd\13\16\3\16\3\16\3\17\3\17\3\17"+ + "\3\17\3\17\7\17\u01e6\n\17\f\17\16\17\u01e9\13\17\3\17\3\17\5\17\u01ed"+ + "\n\17\3\17\5\17\u01f0\n\17\3\17\3\17\3\17\3\17\3\17\3\20\3\20\3\21\3\21"+ + "\3\21\5\21\u01fc\n\21\3\22\3\22\3\22\3\22\7\22\u0202\n\22\f\22\16\22\u0205"+ + "\13\22\3\23\3\23\3\23\3\23\3\23\3\23\7\23\u020d\n\23\f\23\16\23\u0210"+ + "\13\23\3\24\3\24\3\24\3\24\3\24\5\24\u0217\n\24\3\25\3\25\3\25\7\25\u021c"+ + "\n\25\f\25\16\25\u021f\13\25\3\25\5\25\u0222\n\25\3\25\3\25\5\25\u0226"+ + "\n\25\3\25\7\25\u0229\n\25\f\25\16\25\u022c\13\25\3\25\5\25\u022f\n\25"+ + "\3\26\3\26\3\26\3\27\3\27\3\27\3\27\3\27\5\27\u0239\n\27\3\27\5\27\u023c"+ + "\n\27\3\27\3\27\3\27\5\27\u0241\n\27\3\30\3\30\3\30\3\30\3\30\5\30\u0248"+ + "\n\30\3\30\3\30\5\30\u024c\n\30\5\30\u024e\n\30\3\31\3\31\3\31\3\31\3"+ + "\31\3\31\3\31\3\31\5\31\u0258\n\31\3\31\3\31\3\32\5\32\u025d\n\32\3\32"+ + "\3\32\3\32\3\32\3\32\3\32\3\32\5\32\u0266\n\32\3\33\3\33\3\33\3\33\3\33"+ + "\5\33\u026d\n\33\3\33\3\33\3\33\3\33\3\33\5\33\u0274\n\33\3\34\3\34\3"+ + "\34\3\34\5\34\u027a\n\34\3\34\5\34\u027d\n\34\3\34\3\34\3\34\3\34\3\34"+ + "\3\34\5\34\u0285\n\34\3\35\3\35\3\35\7\35\u028a\n\35\f\35\16\35\u028d"+ + "\13\35\3\36\3\36\3\36\5\36\u0292\n\36\3\36\7\36\u0295\n\36\f\36\16\36"+ + "\u0298\13\36\3\36\5\36\u029b\n\36\3\36\3\36\3\36\3\36\5\36\u02a1\n\36"+ + "\3\37\3\37\5\37\u02a5\n\37\3\37\3\37\3\37\5\37\u02aa\n\37\3 \3 \3 \3 "+ + "\3 \3 \7 \u02b2\n \f \16 \u02b5\13 \3 \3 \3!\6!\u02ba\n!\r!\16!\u02bb"+ + "\3\"\3\"\3\"\3\"\3\"\3\"\5\"\u02c4\n\"\3#\3#\3#\3#\3#\3#\3#\3#\3#\3#\3"+ + "#\7#\u02d1\n#\f#\16#\u02d4\13#\3#\3#\3#\3#\3#\5#\u02db\n#\3$\3$\3%\3%"+ + "\3%\3%\7%\u02e3\n%\f%\16%\u02e6\13%\3&\3&\3&\3&\3&\3&\3&\5&\u02ef\n&\3"+ + "&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\5&\u0303\n&\3\'\3"+ + "\'\3(\3(\3(\3(\5(\u030b\n(\3(\3(\3)\3)\3)\3)\5)\u0313\n)\3)\5)\u0316\n"+ + ")\3*\5*\u0319\n*\3*\3*\3*\3*\5*\u031f\n*\3+\3+\3+\3+\5+\u0325\n+\3+\5"+ + "+\u0328\n+\3+\3+\3+\3+\3+\5+\u032f\n+\3+\3+\3,\3,\3,\5,\u0336\n,\3-\3"+ + "-\3-\3-\5-\u033c\n-\3-\5-\u033f\n-\3-\3-\3-\3-\5-\u0345\n-\3-\5-\u0348"+ + "\n-\3-\5-\u034b\n-\3-\3-\3-\3-\5-\u0351\n-\3.\3.\3.\3.\7.\u0357\n.\f."+ + "\16.\u035a\13.\5.\u035c\n.\3.\3.\3/\3/\3/\3/\3/\5/\u0365\n/\3/\3/\3/\5"+ + "/\u036a\n/\3/\7/\u036d\n/\f/\16/\u0370\13/\3/\5/\u0373\n/\3/\3/\3/\3/"+ + "\3/\3/\5/\u037b\n/\3/\3/\5/\u037f\n/\3/\7/\u0382\n/\f/\16/\u0385\13/\3"+ + "/\5/\u0388\n/\5/\u038a\n/\3\60\6\60\u038d\n\60\r\60\16\60\u038e\3\61\3"+ + "\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\5\61\u039a\n\61\3\62\3\62\3\62"+ + "\3\62\5\62\u03a0\n\62\3\62\3\62\3\63\3\63\5\63\u03a6\n\63\3\63\3\63\3"+ + "\63\3\63\3\63\7\63\u03ad\n\63\f\63\16\63\u03b0\13\63\5\63\u03b2\n\63\3"+ + "\63\5\63\u03b5\n\63\3\64\3\64\5\64\u03b9\n\64\3\65\3\65\3\65\3\65\3\65"+ + "\7\65\u03c0\n\65\f\65\16\65\u03c3\13\65\3\65\5\65\u03c6\n\65\3\65\3\65"+ + "\3\65\3\66\3\66\3\66\3\66\3\66\5\66\u03d0\n\66\3\67\3\67\3\67\3\67\3\67"+ + "\38\38\38\39\39\39\3:\3:\3:\3:\3:\5:\u03e2\n:\5:\u03e4\n:\3:\3:\5:\u03e8"+ + "\n:\3:\3:\5:\u03ec\n:\3;\3;\3;\3;\7;\u03f2\n;\f;\16;\u03f5\13;\3;\3;\3"+ + "<\3<\3<\3<\7<\u03fd\n<\f<\16<\u0400\13<\3=\3=\3=\3=\7=\u0406\n=\f=\16"+ + "=\u0409\13=\3=\3=\3>\3>\5>\u040f\n>\3>\3>\5>\u0413\n>\3?\3?\3?\3?\3@\3"+ + "@\5@\u041b\n@\3A\3A\3A\3A\3A\3A\3B\3B\3B\3B\3C\3C\3C\3C\7C\u042b\nC\f"+ + "C\16C\u042e\13C\3C\3C\3C\3D\3D\3D\3D\3D\3E\3E\5E\u043a\nE\3F\3F\3F\3F"+ + "\3F\5F\u0441\nF\3F\3F\5F\u0445\nF\3G\3G\3G\3G\3G\5G\u044c\nG\5G\u044e"+ + "\nG\3H\3H\5H\u0452\nH\3H\3H\3H\3H\3H\7H\u0459\nH\fH\16H\u045c\13H\3I\3"+ + "I\3I\3J\3J\3J\3J\3J\3J\7J\u0467\nJ\fJ\16J\u046a\13J\3J\3J\3J\7J\u046f"+ + "\nJ\fJ\16J\u0472\13J\3K\3K\3K\3K\3K\3K\5K\u047a\nK\3K\3K\3K\7K\u047f\n"+ + "K\fK\16K\u0482\13K\3L\3L\3L\5L\u0487\nL\3M\3M\3M\5M\u048c\nM\3N\3N\3N"+ + "\3N\3N\3N\3N\3N\5N\u0496\nN\3O\3O\3P\3P\5P\u049c\nP\3Q\3Q\5Q\u04a0\nQ"+ + "\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3Q\7Q\u04aa\nQ\fQ\16Q\u04ad\13Q\3Q\3Q\3R\3R\5R\u04b3"+ + "\nR\3S\3S\3S\3S\3S\3S\3S\5S\u04bc\nS\3T\3T\3T\5T\u04c1\nT\3T\3T\3T\3T"+ + "\3T\5T\u04c8\nT\5T\u04ca\nT\3U\3U\5U\u04ce\nU\3V\3V\5V\u04d2\nV\3W\3W"+ + "\3W\3X\3X\3X\3Y\3Y\5Y\u04dc\nY\3Y\3Y\3Y\7Y\u04e1\nY\fY\16Y\u04e4\13Y\3"+ + "Y\5Y\u04e7\nY\3Y\3Y\5Y\u04eb\nY\3Y\3Y\3Y\7Y\u04f0\nY\fY\16Y\u04f3\13Y"+ + "\3Y\5Y\u04f6\nY\3Z\3Z\3Z\3Z\3Z\3Z\5Z\u04fe\nZ\3[\3[\3[\3[\5[\u0504\n["+ + "\3[\3[\5[\u0508\n[\3[\3[\3[\3[\3[\3\\\3\\\3\\\3\\\5\\\u0513\n\\\3\\\3"+ + "\\\3\\\3\\\3\\\5\\\u051a\n\\\3\\\3\\\3\\\3\\\3\\\3]\3]\3]\3]\3]\3]\5]"+ + "\u0527\n]\3^\3^\3^\3^\7^\u052d\n^\f^\16^\u0530\13^\3_\5_\u0533\n_\3_\3"+ + "_\3`\3`\3`\3`\7`\u053b\n`\f`\16`\u053e\13`\3a\3a\5a\u0542\na\3a\3a\3a"+ + "\3a\3a\3b\3b\3b\3b\7b\u054d\nb\fb\16b\u0550\13b\3b\3b\3c\3c\3c\3c\7c\u0558"+ + "\nc\fc\16c\u055b\13c\3d\3d\3d\3d\3d\5d\u0562\nd\3e\3e\5e\u0566\ne\3e\3"+ + "e\5e\u056a\ne\3e\3e\5e\u056e\ne\5e\u0570\ne\3f\3f\3f\5f\u0575\nf\3f\5"+ + "f\u0578\nf\3f\5f\u057b\nf\3f\5f\u057e\nf\3f\5f\u0581\nf\3f\5f\u0584\n"+ + "f\3f\5f\u0587\nf\3g\5g\u058a\ng\3g\5g\u058d\ng\3g\3g\3g\7g\u0592\ng\f"+ + "g\16g\u0595\13g\3h\3h\3i\3i\3i\3j\3j\5j\u059e\nj\3j\5j\u05a1\nj\3k\5k"+ + "\u05a4\nk\3k\3k\3k\3k\3k\5k\u05ab\nk\3l\3l\5l\u05af\nl\3l\3l\3m\3m\3m"+ + "\3m\7m\u05b7\nm\fm\16m\u05ba\13m\3n\3n\3n\7n\u05bf\nn\fn\16n\u05c2\13"+ + "n\3o\3o\3o\5o\u05c7\no\3p\3p\5p\u05cb\np\3q\3q\3q\3q\5q\u05d1\nq\3r\3"+ + "r\3r\3r\3r\3r\3r\5r\u05da\nr\3s\3s\3s\3s\5s\u05e0\ns\3s\5s\u05e3\ns\3"+ + "t\3t\3t\3t\3t\3t\7t\u05eb\nt\ft\16t\u05ee\13t\3t\3t\5t\u05f2\nt\3u\3u"+ + "\3u\3u\3u\7u\u05f9\nu\fu\16u\u05fc\13u\3u\3u\5u\u0600\nu\3v\3v\5v\u0604"+ + "\nv\3v\3v\3v\3v\3v\7v\u060b\nv\fv\16v\u060e\13v\3v\5v\u0611\nv\3w\3w\3"+ + "x\3x\3x\3y\3y\3y\3y\3y\7y\u061d\ny\fy\16y\u0620\13y\3z\3z\3z\3{\3{\3{"+ + "\3{\5{\u0629\n{\3{\3{\3{\5{\u062e\n{\7{\u0630\n{\f{\16{\u0633\13{\3|\6"+ + "|\u0636\n|\r|\16|\u0637\3}\3}\3}\3}\5}\u063e\n}\3~\3~\3~\3~\3~\3~\7~\u0646"+ + "\n~\f~\16~\u0649\13~\3~\5~\u064c\n~\3~\5~\u064f\n~\3\177\3\177\3\177\3"+ + "\177\3\177\5\177\u0656\n\177\3\177\5\177\u0659\n\177\3\177\5\177\u065c"+ + "\n\177\3\u0080\3\u0080\3\u0080\3\u0081\3\u0081\3\u0081\3\u0081\3\u0081"+ + "\3\u0081\3\u0081\3\u0081\6\u0081\u0669\n\u0081\r\u0081\16\u0081\u066a"+ + "\3\u0082\3\u0082\3\u0082\3\u0082\3\u0082\5\u0082\u0672\n\u0082\3\u0082"+ + "\5\u0082\u0675\n\u0082\3\u0082\5\u0082\u0678\n\u0082\3\u0083\3\u0083\5"+ + "\u0083\u067c\n\u0083\3\u0083\3\u0083\3\u0083\5\u0083\u0681\n\u0083\3\u0083"+ + "\3\u0083\3\u0083\3\u0083\5\u0083\u0687\n\u0083\3\u0084\3\u0084\5\u0084"+ + "\u068b\n\u0084\3\u0084\3\u0084\3\u0084\3\u0084\3\u0084\3\u0084\3\u0084"+ + "\7\u0084\u0694\n\u0084\f\u0084\16\u0084\u0697\13\u0084\3\u0084\5\u0084"+ + "\u069a\n\u0084\3\u0085\3\u0085\5\u0085\u069e\n\u0085\3\u0085\3\u0085\5"+ + "\u0085\u06a2\n\u0085\3\u0085\5\u0085\u06a5\n\u0085\3\u0085\5\u0085\u06a8"+ + "\n\u0085\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086\5\u0086\u06b0"+ + "\n\u0086\3\u0086\3\u0086\3\u0086\3\u0086\7\u0086\u06b6\n\u0086\f\u0086"+ + "\16\u0086\u06b9\13\u0086\3\u0087\3\u0087\5\u0087\u06bd\n\u0087\3\u0088"+ + "\3\u0088\3\u0088\5\u0088\u06c2\n\u0088\3\u0088\3\u0088\3\u0088\3\u0088"+ + "\3\u0088\3\u0088\3\u0088\3\u0088\3\u0088\3\u0088\5\u0088\u06ce\n\u0088"+ + "\3\u0089\3\u0089\5\u0089\u06d2\n\u0089\3\u0089\3\u0089\3\u0089\3\u0089"+ + "\3\u0089\7\u0089\u06d9\n\u0089\f\u0089\16\u0089\u06dc\13\u0089\3\u0089"+ + "\5\u0089\u06df\n\u0089\3\u0089\3\u0089\3\u008a\3\u008a\3\u008a\3\u008a"+ + "\7\u008a\u06e7\n\u008a\f\u008a\16\u008a\u06ea\13\u008a\3\u008a\3\u008a"+ + "\5\u008a\u06ee\n\u008a\3\u008a\3\u008a\3\u008a\3\u008a\3\u008a\3\u008b"+ + "\3\u008b\3\u008b\3\u008b\3\u008c\3\u008c\3\u008d\3\u008d\3\u008d\3\u008d"+ + "\3\u008d\3\u008d\3\u008d\3\u008d\3\u008d\5\u008d\u0704\n\u008d\3\u008d"+ + "\5\u008d\u0707\n\u008d\3\u008e\3\u008e\3\u008e\3\u008e\3\u008e\3\u008e"+ + "\3\u008e\3\u008e\3\u008e\3\u008e\3\u008e\5\u008e\u0714\n\u008e\3\u008e"+ + "\3\u008e\3\u008e\3\u008e\3\u008e\3\u008e\3\u008e\3\u008e\3\u008e\3\u008e"+ + "\3\u008e\3\u008e\3\u008e\3\u008e\7\u008e\u0724\n\u008e\f\u008e\16\u008e"+ + "\u0727\13\u008e\3\u008f\3\u008f\3\u008f\3\u008f\3\u008f\3\u008f\3\u008f"+ + "\3\u008f\5\u008f\u0731\n\u008f\3\u0090\3\u0090\3\u0091\3\u0091\3\u0091"+ + "\3\u0092\3\u0092\3\u0092\3\u0092\3\u0092\7\u0092\u073d\n\u0092\f\u0092"+ + "\16\u0092\u0740\13\u0092\3\u0093\3\u0093\3\u0093\3\u0093\3\u0093\3\u0093"+ + "\3\u0093\3\u0093\3\u0093\5\u0093\u074b\n\u0093\3\u0094\3\u0094\5\u0094"+ + "\u074f\n\u0094\3\u0095\3\u0095\3\u0095\3\u0095\3\u0095\3\u0095\3\u0095"+ + "\6\u0095\u0758\n\u0095\r\u0095\16\u0095\u0759\3\u0095\3\u0095\5\u0095"+ + "\u075e\n\u0095\3\u0095\3\u0095\3\u0096\3\u0096\3\u0096\3\u0096\3\u0096"+ + "\3\u0096\6\u0096\u0768\n\u0096\r\u0096\16\u0096\u0769\3\u0096\3\u0096"+ + "\5\u0096\u076e\n\u0096\3\u0096\3\u0096\3\u0097\3\u0097\3\u0097\5\u0097"+ + "\u0775\n\u0097\3\u0097\3\u0097\3\u0097\5\u0097\u077a\n\u0097\3\u0097\3"+ + "\u0097\3\u0097\5\u0097\u077f\n\u0097\3\u0097\3\u0097\5\u0097\u0783\n\u0097"+ + "\3\u0097\3\u0097\5\u0097\u0787\n\u0097\3\u0097\3\u0097\3\u0097\5\u0097"+ + "\u078c\n\u0097\3\u0097\3\u0097\5\u0097\u0790\n\u0097\3\u0097\3\u0097\5"+ + "\u0097\u0794\n\u0097\3\u0097\3\u0097\3\u0097\3\u0097\3\u0097\3\u0097\3"+ + "\u0097\3\u0097\3\u0097\3\u0097\3\u0097\3\u0097\3\u0097\3\u0097\3\u0097"+ + "\3\u0097\3\u0097\5\u0097\u07a7\n\u0097\5\u0097\u07a9\n\u0097\3\u0097\3"+ + "\u0097\3\u0097\3\u0097\3\u0097\3\u0097\3\u0097\3\u0097\3\u0097\3\u0097"+ + "\3\u0097\3\u0097\3\u0097\3\u0097\3\u0097\3\u0097\5\u0097\u07bb\n\u0097"+ + "\5\u0097\u07bd\n\u0097\3\u0097\3\u0097\3\u0097\3\u0097\3\u0097\3\u0097"+ + "\5\u0097\u07c5\n\u0097\3\u0097\3\u0097\3\u0097\5\u0097\u07ca\n\u0097\3"+ + "\u0097\3\u0097\3\u0097\5\u0097\u07cf\n\u0097\3\u0097\3\u0097\3\u0097\5"+ + "\u0097\u07d4\n\u0097\3\u0097\3\u0097\3\u0097\3\u0097\3\u0097\3\u0097\3"+ + "\u0097\3\u0097\3\u0097\3\u0097\3\u0097\5\u0097\u07e1\n\u0097\3\u0097\3"+ + "\u0097\3\u0097\5\u0097\u07e6\n\u0097\3\u0097\3\u0097\3\u0097\5\u0097\u07eb"+ + "\n\u0097\3\u0097\3\u0097\3\u0097\5\u0097\u07f0\n\u0097\3\u0097\3\u0097"+ + "\3\u0097\5\u0097\u07f5\n\u0097\3\u0097\3\u0097\3\u0097\5\u0097\u07fa\n"+ + "\u0097\3\u0097\3\u0097\3\u0097\5\u0097\u07ff\n\u0097\3\u0097\3\u0097\3"+ + "\u0097\5\u0097\u0804\n\u0097\5\u0097\u0806\n\u0097\3\u0098\3\u0098\3\u0099"+ + "\3\u0099\3\u0099\5\u0099\u080d\n\u0099\3\u0099\5\u0099\u0810\n\u0099\3"+ + "\u0099\3\u0099\3\u009a\3\u009a\3\u009a\3\u009a\3\u009a\7\u009a\u0819\n"+ + "\u009a\f\u009a\16\u009a\u081c\13\u009a\3\u009b\3\u009b\3\u009b\3\u009b"+ + "\3\u009b\3\u009b\3\u009b\5\u009b\u0825\n\u009b\3\u009b\3\u009b\3\u009b"+ + "\3\u009b\3\u009b\3\u009b\5\u009b\u082d\n\u009b\3\u009b\3\u009b\3\u009b"+ + "\3\u009b\3\u009b\3\u009b\3\u009b\5\u009b\u0836\n\u009b\3\u009b\3\u009b"+ + "\3\u009b\3\u009b\5\u009b\u083c\n\u009b\3\u009b\3\u009b\3\u009b\3\u009b"+ + "\3\u009b\3\u009b\3\u009b\3\u009b\3\u009b\3\u009b\3\u009b\3\u009b\3\u009b"+ + "\7\u009b\u084b\n\u009b\f\u009b\16\u009b\u084e\13\u009b\5\u009b\u0850\n"+ + "\u009b\3\u009b\3\u009b\3\u009b\3\u009b\3\u009b\3\u009b\3\u009b\3\u009b"+ + "\3\u009b\3\u009b\3\u009b\3\u009b\7\u009b\u085e\n\u009b\f\u009b\16\u009b"+ + "\u0861\13\u009b\5\u009b\u0863\n\u009b\3\u009b\3\u009b\3\u009b\3\u009b"+ + "\3\u009b\3\u009b\3\u009b\3\u009b\3\u009b\3\u009b\3\u009b\3\u009b\7\u009b"+ + "\u0871\n\u009b\f\u009b\16\u009b\u0874\13\u009b\5\u009b\u0876\n\u009b\3"+ + "\u009b\3\u009b\3\u009b\3\u009b\3\u009b\3\u009b\3\u009b\3\u009b\3\u009b"+ + "\3\u009b\3\u009b\3\u009b\7\u009b\u0884\n\u009b\f\u009b\16\u009b\u0887"+ + "\13\u009b\5\u009b\u0889\n\u009b\3\u009b\3\u009b\3\u009b\3\u009b\3\u009b"+ + "\3\u009b\3\u009b\3\u009b\3\u009b\3\u009b\3\u009b\3\u009b\7\u009b\u0897"+ + "\n\u009b\f\u009b\16\u009b\u089a\13\u009b\5\u009b\u089c\n\u009b\3\u009b"+ + "\3\u009b\3\u009b\3\u009b\3\u009b\3\u009b\3\u009b\3\u009b\3\u009b\3\u009b"+ + "\3\u009b\3\u009b\7\u009b\u08aa\n\u009b\f\u009b\16\u009b\u08ad\13\u009b"+ + "\5\u009b\u08af\n\u009b\3\u009b\3\u009b\3\u009b\3\u009b\3\u009b\3\u009b"+ + "\3\u009b\3\u009b\3\u009b\3\u009b\6\u009b\u08bb\n\u009b\r\u009b\16\u009b"+ + "\u08bc\3\u009b\3\u009b\5\u009b\u08c1\n\u009b\3\u009b\3\u009b\3\u009b\3"+ + "\u009b\3\u009b\3\u009b\3\u009b\3\u009b\3\u009b\3\u009b\3\u009b\3\u009b"+ + "\3\u009b\3\u009b\5\u009b\u08d1\n\u009b\3\u009b\3\u009b\3\u009b\3\u009b"+ + "\5\u009b\u08d7\n\u009b\3\u009c\3\u009c\3\u009c\3\u009d\3\u009d\3\u009d"+ + "\3\u009d\7\u009d\u08e0\n\u009d\f\u009d\16\u009d\u08e3\13\u009d\5\u009d"+ + "\u08e5\n\u009d\3\u009d\3\u009d\3\u009e\3\u009e\7\u009e\u08eb\n\u009e\f"+ + "\u009e\16\u009e\u08ee\13\u009e\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f"+ + "\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f\5\u009f\u08fc"+ + "\n\u009f\3\u00a0\3\u00a0\3\u00a0\3\u00a0\3\u00a0\5\u00a0\u0903\n\u00a0"+ + "\3\u00a1\7\u00a1\u0906\n\u00a1\f\u00a1\16\u00a1\u0909\13\u00a1\3\u00a2"+ + "\3\u00a2\3\u00a2\3\u00a3\3\u00a3\3\u00a4\3\u00a4\3\u00a4\3\u00a5\3\u00a5"+ + "\3\u00a5\3\u00a6\3\u00a6\5\u00a6\u0918\n\u00a6\3\u00a7\3\u00a7\5\u00a7"+ + "\u091c\n\u00a7\3\u00a8\5\u00a8\u091f\n\u00a8\3\u00a8\3\u00a8\3\u00a9\5"+ + "\u00a9\u0924\n\u00a9\3\u00a9\3\u00a9\3\u00aa\3\u00aa\3\u00ab\3\u00ab\3"+ + "\u00ab\3\u0907\4\u010a\u011a\u00ac\2\4\6\b\n\f\16\20\22\24\26\30\32\34"+ + "\36 \"$&(*,.\60\62\64\668:<>@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~\u0080\u0082"+ + "\u0084\u0086\u0088\u008a\u008c\u008e\u0090\u0092\u0094\u0096\u0098\u009a"+ + "\u009c\u009e\u00a0\u00a2\u00a4\u00a6\u00a8\u00aa\u00ac\u00ae\u00b0\u00b2"+ + "\u00b4\u00b6\u00b8\u00ba\u00bc\u00be\u00c0\u00c2\u00c4\u00c6\u00c8\u00ca"+ + "\u00cc\u00ce\u00d0\u00d2\u00d4\u00d6\u00d8\u00da\u00dc\u00de\u00e0\u00e2"+ + "\u00e4\u00e6\u00e8\u00ea\u00ec\u00ee\u00f0\u00f2\u00f4\u00f6\u00f8\u00fa"+ + "\u00fc\u00fe\u0100\u0102\u0104\u0106\u0108\u010a\u010c\u010e\u0110\u0112"+ + "\u0114\u0116\u0118\u011a\u011c\u011e\u0120\u0122\u0124\u0126\u0128\u012a"+ + "\u012c\u012e\u0130\u0132\u0134\u0136\u0138\u013a\u013c\u013e\u0140\u0142"+ + "\u0144\u0146\u0148\u014a\u014c\u014e\u0150\u0152\u0154\2!\5\2\3\4\u00e9"+ + "\u00e9\u00f8\u00f8\4\2AA\u00c9\u00c9\5\2\n\nMMjj\4\2\25\25\33\33\4\2#"+ + "#HH\4\2\u0080\u0080\u00a8\u00a8\4\2\64\64\u0090\u0090\16\2\21\21\31\31"+ + "++./LLef\u0083\u0083\u00ab\u00ab\u00b2\u00b2\u00b9\u00b9\u00c6\u00c7\u0100"+ + "\u0100\4\2\27\27((\4\2\n\njj\3\2\u0099\u009a\3\2\u0093\u0094\6\2\'\'\63"+ + "\63ii\u008e\u008e\3\2DE\3\2?@\5\2\64\64]]\u008d\u008d\4\2\13\13\67\67"+ + "\6\2\17\17;;ww\u00b8\u00b8\4\2ww\u00cb\u00cb\4\2\23\23\u00b1\u00b1\3\2"+ + "\u00a6\u00a7\4\2\7\799\5\2QQqq\u009c\u009c\5\2((\u00a2\u00a3\u00c0\u00c0"+ + "\4\2\t\t\u0088\u0088\5\2rr\u0095\u0095\u009d\u009d\4\2,-}~\4\2 \u00e8"+ + "\u00e8\4\2\u0100\u0100\u0108\u0108\4\2\u00e5\u00e5\u00f9\u00f9\b\2\7="+ + "B\u0081\u0083\u00bc\u00be\u00c8\u00cb\u00d7\u00de\u00e4\u0a27\2\u0156"+ + "\3\2\2\2\4\u015a\3\2\2\2\6\u015f\3\2\2\2\b\u0170\3\2\2\2\n\u019e\3\2\2"+ + "\2\f\u01a0\3\2\2\2\16\u01a2\3\2\2\2\20\u01a8\3\2\2\2\22\u01ae\3\2\2\2"+ + "\24\u01b1\3\2\2\2\26\u01be\3\2\2\2\30\u01c0\3\2\2\2\32\u01c7\3\2\2\2\34"+ + "\u01ec\3\2\2\2\36\u01f6\3\2\2\2 \u01f8\3\2\2\2\"\u01fd\3\2\2\2$\u0206"+ + "\3\2\2\2&\u0216\3\2\2\2(\u0218\3\2\2\2*\u0230\3\2\2\2,\u0238\3\2\2\2."+ + "\u024d\3\2\2\2\60\u024f\3\2\2\2\62\u025c\3\2\2\2\64\u0267\3\2\2\2\66\u0275"+ + "\3\2\2\28\u0286\3\2\2\2:\u02a0\3\2\2\2<\u02a9\3\2\2\2>\u02ab\3\2\2\2@"+ + "\u02b9\3\2\2\2B\u02c3\3\2\2\2D\u02da\3\2\2\2F\u02dc\3\2\2\2H\u02de\3\2"+ + "\2\2J\u0302\3\2\2\2L\u0304\3\2\2\2N\u0306\3\2\2\2P\u0315\3\2\2\2R\u031e"+ + "\3\2\2\2T\u0327\3\2\2\2V\u0332\3\2\2\2X\u033e\3\2\2\2Z\u0352\3\2\2\2\\"+ + "\u0389\3\2\2\2^\u038c\3\2\2\2`\u0399\3\2\2\2b\u039b\3\2\2\2d\u03a3\3\2"+ + "\2\2f\u03b8\3\2\2\2h\u03ba\3\2\2\2j\u03ca\3\2\2\2l\u03d1\3\2\2\2n\u03d6"+ + "\3\2\2\2p\u03d9\3\2\2\2r\u03dc\3\2\2\2t\u03ed\3\2\2\2v\u03f8\3\2\2\2x"+ + "\u0401\3\2\2\2z\u040c\3\2\2\2|\u0414\3\2\2\2~\u041a\3\2\2\2\u0080\u041c"+ + "\3\2\2\2\u0082\u0422\3\2\2\2\u0084\u0426\3\2\2\2\u0086\u0432\3\2\2\2\u0088"+ + "\u0437\3\2\2\2\u008a\u043b\3\2\2\2\u008c\u0446\3\2\2\2\u008e\u044f\3\2"+ + "\2\2\u0090\u045d\3\2\2\2\u0092\u0460\3\2\2\2\u0094\u0473\3\2\2\2\u0096"+ + "\u0486\3\2\2\2\u0098\u048b\3\2\2\2\u009a\u0495\3\2\2\2\u009c\u0497\3\2"+ + "\2\2\u009e\u0499\3\2\2\2\u00a0\u049d\3\2\2\2\u00a2\u04b0\3\2\2\2\u00a4"+ + "\u04bb\3\2\2\2\u00a6\u04bd\3\2\2\2\u00a8\u04cb\3\2\2\2\u00aa\u04cf\3\2"+ + "\2\2\u00ac\u04d3\3\2\2\2\u00ae\u04d6\3\2\2\2\u00b0\u04d9\3\2\2\2\u00b2"+ + "\u04f7\3\2\2\2\u00b4\u04ff\3\2\2\2\u00b6\u050e\3\2\2\2\u00b8\u0526\3\2"+ + "\2\2\u00ba\u0528\3\2\2\2\u00bc\u0532\3\2\2\2\u00be\u0536\3\2\2\2\u00c0"+ + "\u053f\3\2\2\2\u00c2\u0548\3\2\2\2\u00c4\u0553\3\2\2\2\u00c6\u0561\3\2"+ + "\2\2\u00c8\u056f\3\2\2\2\u00ca\u0571\3\2\2\2\u00cc\u0589\3\2\2\2\u00ce"+ + "\u0596\3\2\2\2\u00d0\u0598\3\2\2\2\u00d2\u05a0\3\2\2\2\u00d4\u05aa\3\2"+ + "\2\2\u00d6\u05ae\3\2\2\2\u00d8\u05b2\3\2\2\2\u00da\u05bb\3\2\2\2\u00dc"+ + "\u05c6\3\2\2\2\u00de\u05c8\3\2\2\2\u00e0\u05cc\3\2\2\2\u00e2\u05d9\3\2"+ + "\2\2\u00e4\u05e2\3\2\2\2\u00e6\u05e4\3\2\2\2\u00e8\u05ff\3\2\2\2\u00ea"+ + "\u0601\3\2\2\2\u00ec\u0612\3\2\2\2\u00ee\u0614\3\2\2\2\u00f0\u0617\3\2"+ + "\2\2\u00f2\u0621\3\2\2\2\u00f4\u0624\3\2\2\2\u00f6\u0635\3\2\2\2\u00f8"+ + "\u063d\3\2\2\2\u00fa\u063f\3\2\2\2\u00fc\u0655\3\2\2\2\u00fe\u065d\3\2"+ + "\2\2\u0100\u0660\3\2\2\2\u0102\u0671\3\2\2\2\u0104\u0686\3\2\2\2\u0106"+ + "\u0699\3\2\2\2\u0108\u069b\3\2\2\2\u010a\u06af\3\2\2\2\u010c\u06bc\3\2"+ + "\2\2\u010e\u06cd\3\2\2\2\u0110\u06cf\3\2\2\2\u0112\u06e2\3\2\2\2\u0114"+ + "\u06f4\3\2\2\2\u0116\u06f8\3\2\2\2\u0118\u0706\3\2\2\2\u011a\u0713\3\2"+ + "\2\2\u011c\u0730\3\2\2\2\u011e\u0732\3\2\2\2\u0120\u0734\3\2\2\2\u0122"+ + "\u0737\3\2\2\2\u0124\u074a\3\2\2\2\u0126\u074e\3\2\2\2\u0128\u0750\3\2"+ + "\2\2\u012a\u0761\3\2\2\2\u012c\u0805\3\2\2\2\u012e\u0807\3\2\2\2\u0130"+ + "\u0809\3\2\2\2\u0132\u0813\3\2\2\2\u0134\u08d6\3\2\2\2\u0136\u08d8\3\2"+ + "\2\2\u0138\u08db\3\2\2\2\u013a\u08e8\3\2\2\2\u013c\u08fb\3\2\2\2\u013e"+ + "\u0902\3\2\2\2\u0140\u0907\3\2\2\2\u0142\u090a\3\2\2\2\u0144\u090d\3\2"+ + "\2\2\u0146\u090f\3\2\2\2\u0148\u0912\3\2\2\2\u014a\u0917\3\2\2\2\u014c"+ + "\u091b\3\2\2\2\u014e\u091e\3\2\2\2\u0150\u0923\3\2\2\2\u0152\u0927\3\2"+ + "\2\2\u0154\u0929\3\2\2\2\u0156\u0157\5\4\3\2\u0157\3\3\2\2\2\u0158\u015b"+ + "\5\6\4\2\u0159\u015b\5\n\6\2\u015a\u0158\3\2\2\2\u015a\u0159\3\2\2\2\u015b"+ + "\u015c\3\2\2\2\u015c\u015a\3\2\2\2\u015c\u015d\3\2\2\2\u015d\5\3\2\2\2"+ + "\u015e\u0160\5$\23\2\u015f\u015e\3\2\2\2\u015f\u0160\3\2\2\2\u0160\u0161"+ + "\3\2\2\2\u0161\u0162\7\17\2\2\u0162\u0164\5\4\3\2\u0163\u0165\5\16\b\2"+ + "\u0164\u0163\3\2\2\2\u0164\u0165\3\2\2\2\u0165\u0166\3\2\2\2\u0166\u0167"+ + "\7A\2\2\u0167\7\3\2\2\2\u0168\u0169\7\17\2\2\u0169\u016a\5\4\3\2\u016a"+ + "\u016b\7A\2\2\u016b\u0171\3\2\2\2\u016c\u016e\5\n\6\2\u016d\u016f\7\u00f8"+ + "\2\2\u016e\u016d\3\2\2\2\u016e\u016f\3\2\2\2\u016f\u0171\3\2\2\2\u0170"+ + "\u0168\3\2\2\2\u0170\u016c\3\2\2\2\u0171\t\3\2\2\2\u0172\u019f\5\24\13"+ + "\2\u0173\u019f\5\36\20\2\u0174\u019f\5 \21\2\u0175\u019f\5\u0090I\2\u0176"+ + "\u019f\5\u0092J\2\u0177\u019f\5\u0094K\2\u0178\u019f\5\u009eP\2\u0179"+ + "\u019f\5T+\2\u017a\u019f\5\u00a0Q\2\u017b\u019f\5\66\34\2\u017c\u019f"+ + "\5X-\2\u017d\u019f\5\64\33\2\u017e\u019f\5\"\22\2\u017f\u019f\5\u0108"+ + "\u0085\2\u0180\u019f\5b\62\2\u0181\u019f\5d\63\2\u0182\u019f\5z>\2\u0183"+ + "\u019f\5\u008eH\2\u0184\u019f\5\u00b4[\2\u0185\u019f\5\u00b6\\\2\u0186"+ + "\u019f\5f\64\2\u0187\u019f\5p9\2\u0188\u019f\5r:\2\u0189\u019f\5|?\2\u018a"+ + "\u019f\5\u0084C\2\u018b\u019f\5\u0088E\2\u018c\u019f\5\u008aF\2\u018d"+ + "\u019f\5\u0100\u0081\2\u018e\u019f\5\u008cG\2\u018f\u019f\5\u00a4S\2\u0190"+ + "\u019f\5\u00a6T\2\u0191\u019f\5\u00a8U\2\u0192\u019f\5\u00aaV\2\u0193"+ + "\u019f\5\u00bc_\2\u0194\u019f\5\u00acW\2\u0195\u019f\5\u00fa~\2\u0196"+ + "\u019f\5\u00aeX\2\u0197\u019f\5\u00b0Y\2\u0198\u019f\5\u00b2Z\2\u0199"+ + "\u019f\5\u00b8]\2\u019a\u019f\5\u013a\u009e\2\u019b\u019f\5\u013e\u00a0"+ + "\2\u019c\u019f\5\22\n\2\u019d\u019f\5\f\7\2\u019e\u0172\3\2\2\2\u019e"+ + "\u0173\3\2\2\2\u019e\u0174\3\2\2\2\u019e\u0175\3\2\2\2\u019e\u0176\3\2"+ + "\2\2\u019e\u0177\3\2\2\2\u019e\u0178\3\2\2\2\u019e\u0179\3\2\2\2\u019e"+ + "\u017a\3\2\2\2\u019e\u017b\3\2\2\2\u019e\u017c\3\2\2\2\u019e\u017d\3\2"+ + "\2\2\u019e\u017e\3\2\2\2\u019e\u017f\3\2\2\2\u019e\u0180\3\2\2\2\u019e"+ + "\u0181\3\2\2\2\u019e\u0182\3\2\2\2\u019e\u0183\3\2\2\2\u019e\u0184\3\2"+ + "\2\2\u019e\u0185\3\2\2\2\u019e\u0186\3\2\2\2\u019e\u0187\3\2\2\2\u019e"+ + "\u0188\3\2\2\2\u019e\u0189\3\2\2\2\u019e\u018a\3\2\2\2\u019e\u018b\3\2"+ + "\2\2\u019e\u018c\3\2\2\2\u019e\u018d\3\2\2\2\u019e\u018e\3\2\2\2\u019e"+ + "\u018f\3\2\2\2\u019e\u0190\3\2\2\2\u019e\u0191\3\2\2\2\u019e\u0192\3\2"+ + "\2\2\u019e\u0193\3\2\2\2\u019e\u0194\3\2\2\2\u019e\u0195\3\2\2\2\u019e"+ + "\u0196\3\2\2\2\u019e\u0197\3\2\2\2\u019e\u0198\3\2\2\2\u019e\u0199\3\2"+ + "\2\2\u019e\u019a\3\2\2\2\u019e\u019b\3\2\2\2\u019e\u019c\3\2\2\2\u019e"+ + "\u019d\3\2\2\2\u019f\13\3\2\2\2\u01a0\u01a1\t\2\2\2\u01a1\r\3\2\2\2\u01a2"+ + "\u01a4\7F\2\2\u01a3\u01a5\5\20\t\2\u01a4\u01a3\3\2\2\2\u01a5\u01a6\3\2"+ + "\2\2\u01a6\u01a4\3\2\2\2\u01a6\u01a7\3\2\2\2\u01a7\17\3\2\2\2\u01a8\u01a9"+ + "\7\u00c9\2\2\u01a9\u01aa\7\u0100\2\2\u01aa\u01ab\7\u00b8\2\2\u01ab\u01ac"+ + "\5\4\3\2\u01ac\u01ad\n\3\2\2\u01ad\21\3\2\2\2\u01ae\u01af\5\u011a\u008e"+ + "\2\u01af\23\3\2\2\2\u01b0\u01b2\7\u00a8\2\2\u01b1\u01b0\3\2\2\2\u01b1"+ + "\u01b2\3\2\2\2\u01b2\u01b3\3\2\2\2\u01b3\u01b8\5\26\f\2\u01b4\u01b5\7"+ + "\u00e7\2\2\u01b5\u01b7\5\26\f\2\u01b6\u01b4\3\2\2\2\u01b7\u01ba\3\2\2"+ + "\2\u01b8\u01b6\3\2\2\2\u01b8\u01b9\3\2\2\2\u01b9\25\3\2\2\2\u01ba\u01b8"+ + "\3\2\2\2\u01bb\u01bf\5\30\r\2\u01bc\u01bf\5\32\16\2\u01bd\u01bf\5\34\17"+ + "\2\u01be\u01bb\3\2\2\2\u01be\u01bc\3\2\2\2\u01be\u01bd\3\2\2\2\u01bf\27"+ + "\3\2\2\2\u01c0\u01c2\5\u014a\u00a6\2\u01c1\u01c3\7\u00e6\2\2\u01c2\u01c1"+ + "\3\2\2\2\u01c2\u01c3\3\2\2\2\u01c3\u01c4\3\2\2\2\u01c4\u01c5\7\u00eb\2"+ + "\2\u01c5\u01c6\5\u011a\u008e\2\u01c6\31\3\2\2\2\u01c7\u01c8\7\u00f5\2"+ + "\2\u01c8\u01cd\5\u014a\u00a6\2\u01c9\u01ca\7\u00e7\2\2\u01ca\u01cc\5\u014a"+ + "\u00a6\2\u01cb\u01c9\3\2\2\2\u01cc\u01cf\3\2\2\2\u01cd\u01cb\3\2\2\2\u01cd"+ + "\u01ce\3\2\2\2\u01ce\u01d0\3\2\2\2\u01cf\u01cd\3\2\2\2\u01d0\u01d2\7\u00f7"+ + "\2\2\u01d1\u01d3\7\u00e6\2\2\u01d2\u01d1\3\2\2\2\u01d2\u01d3\3\2\2\2\u01d3"+ + "\u01d4\3\2\2\2\u01d4\u01d5\7\u00eb\2\2\u01d5\u01d6\7\u00f5\2\2\u01d6\u01db"+ + "\5\u011a\u008e\2\u01d7\u01d8\7\u00e7\2\2\u01d8\u01da\5\u011a\u008e\2\u01d9"+ + "\u01d7\3\2\2\2\u01da\u01dd\3\2\2\2\u01db\u01d9\3\2\2\2\u01db\u01dc\3\2"+ + "\2\2\u01dc\u01de\3\2\2\2\u01dd\u01db\3\2\2\2\u01de\u01df\7\u00f7\2\2\u01df"+ + "\33\3\2\2\2\u01e0\u01ed\5\u014a\u00a6\2\u01e1\u01e2\7\u00f5\2\2\u01e2"+ + "\u01e7\5\u014a\u00a6\2\u01e3\u01e4\7\u00e7\2\2\u01e4\u01e6\5\u014a\u00a6"+ + "\2\u01e5\u01e3\3\2\2\2\u01e6\u01e9\3\2\2\2\u01e7\u01e5\3\2\2\2\u01e7\u01e8"+ + "\3\2\2\2\u01e8\u01ea\3\2\2\2\u01e9\u01e7\3\2\2\2\u01ea\u01eb\7\u00f7\2"+ + "\2\u01eb\u01ed\3\2\2\2\u01ec\u01e0\3\2\2\2\u01ec\u01e1\3\2\2\2\u01ed\u01ef"+ + "\3\2\2\2\u01ee\u01f0\7\u00e6\2\2\u01ef\u01ee\3\2\2\2\u01ef\u01f0\3\2\2"+ + "\2\u01f0\u01f1\3\2\2\2\u01f1\u01f2\7\u00eb\2\2\u01f2\u01f3\7\u00f5\2\2"+ + "\u01f3\u01f4\5\u00bc_\2\u01f4\u01f5\7\u00f7\2\2\u01f5\35\3\2\2\2\u01f6"+ + "\u01f7\7\22\2\2\u01f7\37\3\2\2\2\u01f8\u01f9\7\24\2\2\u01f9\u01fb\5\u014a"+ + "\u00a6\2\u01fa\u01fc\5\u0138\u009d\2\u01fb\u01fa\3\2\2\2\u01fb\u01fc\3"+ + "\2\2\2\u01fc!\3\2\2\2\u01fd\u01fe\7\60\2\2\u01fe\u0203\5&\24\2\u01ff\u0200"+ + "\7\u00e7\2\2\u0200\u0202\5&\24\2\u0201\u01ff\3\2\2\2\u0202\u0205\3\2\2"+ + "\2\u0203\u0201\3\2\2\2\u0203\u0204\3\2\2\2\u0204#\3\2\2\2\u0205\u0203"+ + "\3\2\2\2\u0206\u0207\7\60\2\2\u0207\u0208\5&\24\2\u0208\u020e\7\u00f8"+ + "\2\2\u0209\u020a\5&\24\2\u020a\u020b\7\u00f8\2\2\u020b\u020d\3\2\2\2\u020c"+ + "\u0209\3\2\2\2\u020d\u0210\3\2\2\2\u020e\u020c\3\2\2\2\u020e\u020f\3\2"+ + "\2\2\u020f%\3\2\2\2\u0210\u020e\3\2\2\2\u0211\u0217\5(\25\2\u0212\u0217"+ + "\5*\26\2\u0213\u0217\5,\27\2\u0214\u0217\5\60\31\2\u0215\u0217\5\62\32"+ + "\2\u0216\u0211\3\2\2\2\u0216\u0212\3\2\2\2\u0216\u0213\3\2\2\2\u0216\u0214"+ + "\3\2\2\2\u0216\u0215\3\2\2\2\u0217\'\3\2\2\2\u0218\u021d\5\u014a\u00a6"+ + "\2\u0219\u021a\7\u00e7\2\2\u021a\u021c\5\u014a\u00a6\2\u021b\u0219\3\2"+ + "\2\2\u021c\u021f\3\2\2\2\u021d\u021b\3\2\2\2\u021d\u021e\3\2\2\2\u021e"+ + "\u0221\3\2\2\2\u021f\u021d\3\2\2\2\u0220\u0222\7\n\2\2\u0221\u0220\3\2"+ + "\2\2\u0221\u0222\3\2\2\2\u0222\u0223\3\2\2\2\u0223\u0225\5L\'\2\u0224"+ + "\u0226\5N(\2\u0225\u0224\3\2\2\2\u0225\u0226\3\2\2\2\u0226\u022a\3\2\2"+ + "\2\u0227\u0229\5P)\2\u0228\u0227\3\2\2\2\u0229\u022c\3\2\2\2\u022a\u0228"+ + "\3\2\2\2\u022a\u022b\3\2\2\2\u022b\u022e\3\2\2\2\u022c\u022a\3\2\2\2\u022d"+ + "\u022f\5R*\2\u022e\u022d\3\2\2\2\u022e\u022f\3\2\2\2\u022f)\3\2\2\2\u0230"+ + "\u0231\5\u014a\u00a6\2\u0231\u0232\7!\2\2\u0232+\3\2\2\2\u0233\u0234\7"+ + "*\2\2\u0234\u0239\5\u014a\u00a6\2\u0235\u0236\5\u014a\u00a6\2\u0236\u0237"+ + "\7*\2\2\u0237\u0239\3\2\2\2\u0238\u0233\3\2\2\2\u0238\u0235\3\2\2\2\u0239"+ + "\u023b\3\2\2\2\u023a\u023c\5.\30\2\u023b\u023a\3\2\2\2\u023b\u023c\3\2"+ + "\2\2\u023c\u023d\3\2\2\2\u023d\u0240\t\4\2\2\u023e\u0241\5\u00bc_\2\u023f"+ + "\u0241\5\u011a\u008e\2\u0240\u023e\3\2\2\2\u0240\u023f\3\2\2\2\u0241-"+ + "\3\2\2\2\u0242\u0243\7\u00cd\2\2\u0243\u024e\7\u0099\2\2\u0244\u0245\7"+ + "\u00cc\2\2\u0245\u0247\7\u0099\2\2\u0246\u0248\7\u0086\2\2\u0247\u0246"+ + "\3\2\2\2\u0247\u0248\3\2\2\2\u0248\u024b\3\2\2\2\u0249\u024a\7\u00bb\2"+ + "\2\u024a\u024c\t\5\2\2\u024b\u0249\3\2\2\2\u024b\u024c\3\2\2\2\u024c\u024e"+ + "\3\2\2\2\u024d\u0242\3\2\2\2\u024d\u0244\3\2\2\2\u024e/\3\2\2\2\u024f"+ + "\u0250\t\6\2\2\u0250\u0251\7W\2\2\u0251\u0257\7M\2\2\u0252\u0258\7\u00ad"+ + "\2\2\u0253\u0258\7\u00b0\2\2\u0254\u0255\7\u0081\2\2\u0255\u0258\7O\2"+ + "\2\u0256\u0258\5\u014a\u00a6\2\u0257\u0252\3\2\2\2\u0257\u0253\3\2\2\2"+ + "\u0257\u0254\3\2\2\2\u0257\u0256\3\2\2\2\u0258\u0259\3\2\2\2\u0259\u025a"+ + "\5\b\5\2\u025a\61\3\2\2\2\u025b\u025d\7T\2\2\u025c\u025b\3\2\2\2\u025c"+ + "\u025d\3\2\2\2\u025d\u025e\3\2\2\2\u025e\u025f\7\u00b6\2\2\u025f\u0260"+ + "\7\u00b5\2\2\u0260\u0261\5\u014a\u00a6\2\u0261\u0262\7\u00f5\2\2\u0262"+ + "\u0263\58\35\2\u0263\u0265\7\u00f7\2\2\u0264\u0266\5@!\2\u0265\u0264\3"+ + "\2\2\2\u0265\u0266\3\2\2\2\u0266\63\3\2\2\2\u0267\u0268\7&\2\2\u0268\u026c"+ + "\7\u00b5\2\2\u0269\u026a\7\\\2\2\u026a\u026b\7\u0081\2\2\u026b\u026d\7"+ + "G\2\2\u026c\u0269\3\2\2\2\u026c\u026d\3\2\2\2\u026d\u026e\3\2\2\2\u026e"+ + "\u026f\5\u014a\u00a6\2\u026f\u0270\7\u00f5\2\2\u0270\u0271\58\35\2\u0271"+ + "\u0273\7\u00f7\2\2\u0272\u0274\5@!\2\u0273\u0272\3\2\2\2\u0273\u0274\3"+ + "\2\2\2\u0274\65\3\2\2\2\u0275\u027c\7&\2\2\u0276\u0277\7u\2\2\u0277\u027d"+ + "\7\u00b6\2\2\u0278\u027a\t\7\2\2\u0279\u0278\3\2\2\2\u0279\u027a\3\2\2"+ + "\2\u027a\u027b\3\2\2\2\u027b\u027d\7\u00c8\2\2\u027c\u0276\3\2\2\2\u027c"+ + "\u0279\3\2\2\2\u027d\u027e\3\2\2\2\u027e\u027f\7\u00b5\2\2\u027f\u0280"+ + "\5\u014a\u00a6\2\u0280\u0281\7\u00f5\2\2\u0281\u0282\58\35\2\u0282\u0284"+ + "\7\u00f7\2\2\u0283\u0285\5@!\2\u0284\u0283\3\2\2\2\u0284\u0285\3\2\2\2"+ + "\u0285\67\3\2\2\2\u0286\u028b\5:\36\2\u0287\u0288\7\u00e7\2\2\u0288\u028a"+ + "\5:\36\2\u0289\u0287\3\2\2\2\u028a\u028d\3\2\2\2\u028b\u0289\3\2\2\2\u028b"+ + "\u028c\3\2\2\2\u028c9\3\2\2\2\u028d\u028b\3\2\2\2\u028e\u028f\5\u014a"+ + "\u00a6\2\u028f\u0291\5L\'\2\u0290\u0292\5N(\2\u0291\u0290\3\2\2\2\u0291"+ + "\u0292\3\2\2\2\u0292\u0296\3\2\2\2\u0293\u0295\5P)\2\u0294\u0293\3\2\2"+ + "\2\u0295\u0298\3\2\2\2\u0296\u0294\3\2\2\2\u0296\u0297\3\2\2\2\u0297\u029a"+ + "\3\2\2\2\u0298\u0296\3\2\2\2\u0299\u029b\5<\37\2\u029a\u0299\3\2\2\2\u029a"+ + "\u029b\3\2\2\2\u029b\u02a1\3\2\2\2\u029c\u029d\7\"\2\2\u029d\u029e\5\u014a"+ + "\u00a6\2\u029e\u029f\5> \2\u029f\u02a1\3\2\2\2\u02a0\u028e\3\2\2\2\u02a0"+ + "\u029c\3\2\2\2\u02a1;\3\2\2\2\u02a2\u02aa\5R*\2\u02a3\u02a5\7\u0081\2"+ + "\2\u02a4\u02a3\3\2\2\2\u02a4\u02a5\3\2\2\2\u02a5\u02a6\3\2\2\2\u02a6\u02aa"+ + "\7\u0082\2\2\u02a7\u02a8\7\u0091\2\2\u02a8\u02aa\7m\2\2\u02a9\u02a2\3"+ + "\2\2\2\u02a9\u02a4\3\2\2\2\u02a9\u02a7\3\2\2\2\u02aa=\3\2\2\2\u02ab\u02ac"+ + "\7\u0091\2\2\u02ac\u02ad\7m\2\2\u02ad\u02ae\7\u00f5\2\2\u02ae\u02b3\5"+ + "\u014a\u00a6\2\u02af\u02b0\7\u00e7\2\2\u02b0\u02b2\5\u014a\u00a6\2\u02b1"+ + "\u02af\3\2\2\2\u02b2\u02b5\3\2\2\2\u02b3\u02b1\3\2\2\2\u02b3\u02b4\3\2"+ + "\2\2\u02b4\u02b6\3\2\2\2\u02b5\u02b3\3\2\2\2\u02b6\u02b7\7\u00f7\2\2\u02b7"+ + "?\3\2\2\2\u02b8\u02ba\5B\"\2\u02b9\u02b8\3\2\2\2\u02ba\u02bb\3\2\2\2\u02bb"+ + "\u02b9\3\2\2\2\u02bb\u02bc\3\2\2\2\u02bcA\3\2\2\2\u02bd\u02be\7\u0085"+ + "\2\2\u02be\u02bf\7\37\2\2\u02bf\u02c0\t\b\2\2\u02c0\u02c4\7\u00a0\2\2"+ + "\u02c1\u02c4\5D#\2\u02c2\u02c4\5F$\2\u02c3\u02bd\3\2\2\2\u02c3\u02c1\3"+ + "\2\2\2\u02c3\u02c2\3\2\2\2\u02c4C\3\2\2\2\u02c5\u02c6\7_\2\2\u02c6\u02db"+ + "\5\u014a\u00a6\2\u02c7\u02c8\7\u00cc\2\2\u02c8\u02db\7\u0096\2\2\u02c9"+ + "\u02ca\7:\2\2\u02ca\u02cb\7\23\2\2\u02cb\u02cc\7X\2\2\u02cc\u02cd\7\u00f5"+ + "\2\2\u02cd\u02d2\5\u014a\u00a6\2\u02ce\u02cf\7\u00e7\2\2\u02cf\u02d1\5"+ + "\u014a\u00a6\2\u02d0\u02ce\3\2\2\2\u02d1\u02d4\3\2\2\2\u02d2\u02d0\3\2"+ + "\2\2\u02d2\u02d3\3\2\2\2\u02d3\u02d5\3\2\2\2\u02d4\u02d2\3\2\2\2\u02d5"+ + "\u02d6\7\u00f7\2\2\u02d6\u02db\3\2\2\2\u02d7\u02db\7v\2\2\u02d8\u02d9"+ + "\7\u0081\2\2\u02d9\u02db\7v\2\2\u02da\u02c5\3\2\2\2\u02da\u02c7\3\2\2"+ + "\2\u02da\u02c9\3\2\2\2\u02da\u02d7\3\2\2\2\u02da\u02d8\3\2\2\2\u02dbE"+ + "\3\2\2\2\u02dc\u02dd\5H%\2\u02ddG\3\2\2\2\u02de\u02df\7\u009f\2\2\u02df"+ + "\u02e0\7N\2\2\u02e0\u02e4\7\65\2\2\u02e1\u02e3\5J&\2\u02e2\u02e1\3\2\2"+ + "\2\u02e3\u02e6\3\2\2\2\u02e4\u02e2\3\2\2\2\u02e4\u02e5\3\2\2\2\u02e5I"+ + "\3\2\2\2\u02e6\u02e4\3\2\2\2\u02e7\u02e8\7J\2\2\u02e8\u02e9\7\u00b7\2"+ + "\2\u02e9\u02ea\7\23\2\2\u02ea\u02ee\5\u011a\u008e\2\u02eb\u02ec\7B\2\2"+ + "\u02ec\u02ed\7\23\2\2\u02ed\u02ef\5\u011a\u008e\2\u02ee\u02eb\3\2\2\2"+ + "\u02ee\u02ef\3\2\2\2\u02ef\u0303\3\2\2\2\u02f0\u02f1\7\35\2\2\u02f1\u02f2"+ + "\7k\2\2\u02f2\u02f3\7\u00b7\2\2\u02f3\u02f4\7\23\2\2\u02f4\u0303\5\u011a"+ + "\u008e\2\u02f5\u02f6\7x\2\2\u02f6\u02f7\7n\2\2\u02f7\u02f8\7\u00b7\2\2"+ + "\u02f8\u02f9\7\23\2\2\u02f9\u0303\5\u011a\u008e\2\u02fa\u02fb\7t\2\2\u02fb"+ + "\u02fc\7\u00b7\2\2\u02fc\u02fd\7\23\2\2\u02fd\u0303\5\u011a\u008e\2\u02fe"+ + "\u02ff\7\u0082\2\2\u02ff\u0300\7\62\2\2\u0300\u0301\7\n\2\2\u0301\u0303"+ + "\5\u011a\u008e\2\u0302\u02e7\3\2\2\2\u0302\u02f0\3\2\2\2\u0302\u02f5\3"+ + "\2\2\2\u0302\u02fa\3\2\2\2\u0302\u02fe\3\2\2\2\u0303K\3\2\2\2\u0304\u0305"+ + "\t\t\2\2\u0305M\3\2\2\2\u0306\u0307\7\u00f5\2\2\u0307\u030a\7\u0103\2"+ + "\2\u0308\u0309\7\u00e7\2\2\u0309\u030b\7\u0103\2\2\u030a\u0308\3\2\2\2"+ + "\u030a\u030b\3\2\2\2\u030b\u030c\3\2\2\2\u030c\u030d\7\u00f7\2\2\u030d"+ + "O\3\2\2\2\u030e\u030f\7\32\2\2\u030f\u0310\7\u00a8\2\2\u0310\u0316\5\u014a"+ + "\u00a6\2\u0311\u0313\7\u0081\2\2\u0312\u0311\3\2\2\2\u0312\u0313\3\2\2"+ + "\2\u0313\u0314\3\2\2\2\u0314\u0316\t\n\2\2\u0315\u030e\3\2\2\2\u0315\u0312"+ + "\3\2\2\2\u0316Q\3\2\2\2\u0317\u0319\7\u00e6\2\2\u0318\u0317\3\2\2\2\u0318"+ + "\u0319\3\2\2\2\u0319\u031a\3\2\2\2\u031a\u031b\7\u00eb\2\2\u031b\u031f"+ + "\5\u011a\u008e\2\u031c\u031d\7\61\2\2\u031d\u031f\5\u011a\u008e\2\u031e"+ + "\u0318\3\2\2\2\u031e\u031c\3\2\2\2\u031fS\3\2\2\2\u0320\u0328\7\b\2\2"+ + "\u0321\u0324\7&\2\2\u0322\u0323\7\u0088\2\2\u0323\u0325\7\u0096\2\2\u0324"+ + "\u0322\3\2\2\2\u0324\u0325\3\2\2\2\u0325\u0328\3\2\2\2\u0326\u0328\7\u0096"+ + "\2\2\u0327\u0320\3\2\2\2\u0327\u0321\3\2\2\2\u0327\u0326\3\2\2\2\u0328"+ + "\u0329\3\2\2\2\u0329\u032a\7R\2\2\u032a\u032b\5\u014a\u00a6\2\u032b\u032c"+ + "\5Z.\2\u032c\u032e\5V,\2\u032d\u032f\t\13\2\2\u032e\u032d\3\2\2\2\u032e"+ + "\u032f\3\2\2\2\u032f\u0330\3\2\2\2\u0330\u0331\5\b\5\2\u0331U\3\2\2\2"+ + "\u0332\u0333\t\f\2\2\u0333\u0335\5L\'\2\u0334\u0336\5N(\2\u0335\u0334"+ + "\3\2\2\2\u0335\u0336\3\2\2\2\u0336W\3\2\2\2\u0337\u033f\7\b\2\2\u0338"+ + "\u033b\7&\2\2\u0339\u033a\7\u0088\2\2\u033a\u033c\7\u0096\2\2\u033b\u0339"+ + "\3\2\2\2\u033b\u033c\3\2\2\2\u033c\u033f\3\2\2\2\u033d\u033f\7\u0096\2"+ + "\2\u033e\u0337\3\2\2\2\u033e\u0338\3\2\2\2\u033e\u033d\3\2\2\2\u033f\u0340"+ + "\3\2\2\2\u0340\u0341\t\r\2\2\u0341\u0342\5\u014a\u00a6\2\u0342\u0344\5"+ + "Z.\2\u0343\u0345\5^\60\2\u0344\u0343\3\2\2\2\u0344\u0345\3\2\2\2\u0345"+ + "\u0347\3\2\2\2\u0346\u0348\t\13\2\2\u0347\u0346\3\2\2\2\u0347\u0348\3"+ + "\2\2\2\u0348\u034a\3\2\2\2\u0349\u034b\5\u00b8]\2\u034a\u0349\3\2\2\2"+ + "\u034a\u034b\3\2\2\2\u034b\u034c\3\2\2\2\u034c\u0350\5\b\5\2\u034d\u034e"+ + "\5\u014a\u00a6\2\u034e\u034f\7\u00f8\2\2\u034f\u0351\3\2\2\2\u0350\u034d"+ + "\3\2\2\2\u0350\u0351\3\2\2\2\u0351Y\3\2\2\2\u0352\u035b\7\u00f5\2\2\u0353"+ + "\u0358\5\\/\2\u0354\u0355\7\u00e7\2\2\u0355\u0357\5\\/\2\u0356\u0354\3"+ + "\2\2\2\u0357\u035a\3\2\2\2\u0358\u0356\3\2\2\2\u0358\u0359\3\2\2\2\u0359"+ + "\u035c\3\2\2\2\u035a\u0358\3\2\2\2\u035b\u0353\3\2\2\2\u035b\u035c\3\2"+ + "\2\2\u035c\u035d\3\2\2\2\u035d\u035e\7\u00f7\2\2\u035e[\3\2\2\2\u035f"+ + "\u0365\7_\2\2\u0360\u0365\7\u008a\2\2\u0361\u0365\7c\2\2\u0362\u0363\7"+ + "_\2\2\u0363\u0365\7\u008a\2\2\u0364\u035f\3\2\2\2\u0364\u0360\3\2\2\2"+ + "\u0364\u0361\3\2\2\2\u0364\u0362\3\2\2\2\u0364\u0365\3\2\2\2\u0365\u0366"+ + "\3\2\2\2\u0366\u0367\5\u014a\u00a6\2\u0367\u0369\5L\'\2\u0368\u036a\5"+ + "N(\2\u0369\u0368\3\2\2\2\u0369\u036a\3\2\2\2\u036a\u036e\3\2\2\2\u036b"+ + "\u036d\5P)\2\u036c\u036b\3\2\2\2\u036d\u0370\3\2\2\2\u036e\u036c\3\2\2"+ + "\2\u036e\u036f\3\2\2\2\u036f\u0372\3\2\2\2\u0370\u036e\3\2\2\2\u0371\u0373"+ + "\5R*\2\u0372\u0371\3\2\2\2\u0372\u0373\3\2\2\2\u0373\u038a\3\2\2\2\u0374"+ + "\u037a\5\u014a\u00a6\2\u0375\u037b\7_\2\2\u0376\u037b\7\u008a\2\2\u0377"+ + "\u037b\7c\2\2\u0378\u0379\7_\2\2\u0379\u037b\7\u008a\2\2\u037a\u0375\3"+ + "\2\2\2\u037a\u0376\3\2\2\2\u037a\u0377\3\2\2\2\u037a\u0378\3\2\2\2\u037a"+ + "\u037b\3\2\2\2\u037b\u037c\3\2\2\2\u037c\u037e\5L\'\2\u037d\u037f\5N("+ + "\2\u037e\u037d\3\2\2\2\u037e\u037f\3\2\2\2\u037f\u0383\3\2\2\2\u0380\u0382"+ + "\5P)\2\u0381\u0380\3\2\2\2\u0382\u0385\3\2\2\2\u0383\u0381\3\2\2\2\u0383"+ + "\u0384\3\2\2\2\u0384\u0387\3\2\2\2\u0385\u0383\3\2\2\2\u0386\u0388\5R"+ + "*\2\u0387\u0386\3\2\2\2\u0387\u0388\3\2\2\2\u0388\u038a\3\2\2\2\u0389"+ + "\u0364\3\2\2\2\u0389\u0374\3\2\2\2\u038a]\3\2\2\2\u038b\u038d\5`\61\2"+ + "\u038c\u038b\3\2\2\2\u038d\u038e\3\2\2\2\u038e\u038c\3\2\2\2\u038e\u038f"+ + "\3\2\2\2\u038f_\3\2\2\2\u0390\u0391\7o\2\2\u0391\u039a\7\u00ac\2\2\u0392"+ + "\u0393\7\u00ac\2\2\u0393\u0394\7\u00a5\2\2\u0394\u039a\t\16\2\2\u0395"+ + "\u0396\7=\2\2\u0396\u0397\7\u0098\2\2\u0397\u0398\7\u00a9\2\2\u0398\u039a"+ + "\7\u0103\2\2\u0399\u0390\3\2\2\2\u0399\u0392\3\2\2\2\u0399\u0395\3\2\2"+ + "\2\u039aa\3\2\2\2\u039b\u039c\7<\2\2\u039c\u039f\7\u00b5\2\2\u039d\u039e"+ + "\7\\\2\2\u039e\u03a0\7G\2\2\u039f\u039d\3\2\2\2\u039f\u03a0\3\2\2\2\u03a0"+ + "\u03a1\3\2\2\2\u03a1\u03a2\5\u00ecw\2\u03a2c\3\2\2\2\u03a3\u03a5\t\17"+ + "\2\2\u03a4\u03a6\7^\2\2\u03a5\u03a4\3\2\2\2\u03a5\u03a6\3\2\2\2\u03a6"+ + "\u03a7\3\2\2\2\u03a7\u03b1\5\u011a\u008e\2\u03a8\u03a9\7h\2\2\u03a9\u03ae"+ + "\7\u0100\2\2\u03aa\u03ab\7\u00e7\2\2\u03ab\u03ad\7\u0100\2\2\u03ac\u03aa"+ + "\3\2\2\2\u03ad\u03b0\3\2\2\2\u03ae\u03ac\3\2\2\2\u03ae\u03af\3\2\2\2\u03af"+ + "\u03b2\3\2\2\2\u03b0\u03ae\3\2\2\2\u03b1\u03a8\3\2\2\2\u03b1\u03b2\3\2"+ + "\2\2\u03b2\u03b4\3\2\2\2\u03b3\u03b5\5\u00ba^\2\u03b4\u03b3\3\2\2\2\u03b4"+ + "\u03b5\3\2\2\2\u03b5e\3\2\2\2\u03b6\u03b9\5h\65\2\u03b7\u03b9\5j\66\2"+ + "\u03b8\u03b6\3\2\2\2\u03b8\u03b7\3\2\2\2\u03b9g\3\2\2\2\u03ba\u03bb\7"+ + "\\\2\2\u03bb\u03bc\5\u010a\u0086\2\u03bc\u03bd\7\u00b8\2\2\u03bd\u03c1"+ + "\5\4\3\2\u03be\u03c0\5l\67\2\u03bf\u03be\3\2\2\2\u03c0\u03c3\3\2\2\2\u03c1"+ + "\u03bf\3\2\2\2\u03c1\u03c2\3\2\2\2\u03c2\u03c5\3\2\2\2\u03c3\u03c1\3\2"+ + "\2\2\u03c4\u03c6\5n8\2\u03c5\u03c4\3\2\2\2\u03c5\u03c6\3\2\2\2\u03c6\u03c7"+ + "\3\2\2\2\u03c7\u03c8\7A\2\2\u03c8\u03c9\7\\\2\2\u03c9i\3\2\2\2\u03ca\u03cb"+ + "\7\\\2\2\u03cb\u03cc\5\u010a\u0086\2\u03cc\u03cf\5\b\5\2\u03cd\u03ce\7"+ + ">\2\2\u03ce\u03d0\5\b\5\2\u03cf\u03cd\3\2\2\2\u03cf\u03d0\3\2\2\2\u03d0"+ + "k\3\2\2\2\u03d1\u03d2\t\20\2\2\u03d2\u03d3\5\u010a\u0086\2\u03d3\u03d4"+ + "\7\u00b8\2\2\u03d4\u03d5\5\4\3\2\u03d5m\3\2\2\2\u03d6\u03d7\7>\2\2\u03d7"+ + "\u03d8\5\4\3\2\u03d8o\3\2\2\2\u03d9\u03da\7`\2\2\u03da\u03db\5\u0144\u00a3"+ + "\2\u03dbq\3\2\2\2\u03dc\u03e3\7d\2\2\u03dd\u03de\7\u008d\2\2\u03de\u03e4"+ + "\7\u00b5\2\2\u03df\u03e1\7h\2\2\u03e0\u03e2\7\u00b5\2\2\u03e1\u03e0\3"+ + "\2\2\2\u03e1\u03e2\3\2\2\2\u03e2\u03e4\3\2\2\2\u03e3\u03dd\3\2\2\2\u03e3"+ + "\u03df\3\2\2\2\u03e4\u03e5\3\2\2\2\u03e5\u03e7\5\u00ecw\2\u03e6\u03e8"+ + "\5t;\2\u03e7\u03e6\3\2\2\2\u03e7\u03e8\3\2\2\2\u03e8\u03eb\3\2\2\2\u03e9"+ + "\u03ec\5\u00bc_\2\u03ea\u03ec\5v<\2\u03eb\u03e9\3\2\2\2\u03eb\u03ea\3"+ + "\2\2\2\u03ecs\3\2\2\2\u03ed\u03ee\7\u00f5\2\2\u03ee\u03f3\5\u014a\u00a6"+ + "\2\u03ef\u03f0\7\u00e7\2\2\u03f0\u03f2\5\u014a\u00a6\2\u03f1\u03ef\3\2"+ + "\2\2\u03f2\u03f5\3\2\2\2\u03f3\u03f1\3\2\2\2\u03f3\u03f4\3\2\2\2\u03f4"+ + "\u03f6\3\2\2\2\u03f5\u03f3\3\2\2\2\u03f6\u03f7\7\u00f7\2\2\u03f7u\3\2"+ + "\2\2\u03f8\u03f9\7\u00c4\2\2\u03f9\u03fe\5x=\2\u03fa\u03fb\7\u00e7\2\2"+ + "\u03fb\u03fd\5x=\2\u03fc\u03fa\3\2\2\2\u03fd\u0400\3\2\2\2\u03fe\u03fc"+ + "\3\2\2\2\u03fe\u03ff\3\2\2\2\u03ffw\3\2\2\2\u0400\u03fe\3\2\2\2\u0401"+ + "\u0402\7\u00f5\2\2\u0402\u0407\5\u011a\u008e\2\u0403\u0404\7\u00e7\2\2"+ + "\u0404\u0406\5\u011a\u008e\2\u0405\u0403\3\2\2\2\u0406\u0409\3\2\2\2\u0407"+ + "\u0405\3\2\2\2\u0407\u0408\3\2\2\2\u0408\u040a\3\2\2\2\u0409\u0407\3\2"+ + "\2\2\u040a\u040b\7\u00f7\2\2\u040by\3\2\2\2\u040c\u040e\7H\2\2\u040d\u040f"+ + "\7\u0100\2\2\u040e\u040d\3\2\2\2\u040e\u040f\3\2\2\2\u040f\u0412\3\2\2"+ + "\2\u0410\u0411\7\u00c9\2\2\u0411\u0413\5\u010a\u0086\2\u0412\u0410\3\2"+ + "\2\2\u0412\u0413\3\2\2\2\u0413{\3\2\2\2\u0414\u0415\7S\2\2\u0415\u0416"+ + "\78\2\2\u0416\u0417\5~@\2\u0417}\3\2\2\2\u0418\u041b\5\u0080A\2\u0419"+ + "\u041b\5\u0082B\2\u041a\u0418\3\2\2\2\u041a\u0419\3\2\2\2\u041b\177\3"+ + "\2\2\2\u041c\u041d\7F\2\2\u041d\u041e\7\u0103\2\2\u041e\u041f\5\u014a"+ + "\u00a6\2\u041f\u0420\7\u00eb\2\2\u0420\u0421\7|\2\2\u0421\u0081\3\2\2"+ + "\2\u0422\u0423\5\u014a\u00a6\2\u0423\u0424\7\u00eb\2\2\u0424\u0425\7\u00a1"+ + "\2\2\u0425\u0083\3\2\2\2\u0426\u0427\7U\2\2\u0427\u042c\5\u0086D\2\u0428"+ + "\u0429\7\u00e7\2\2\u0429\u042b\5\u0086D\2\u042a\u0428\3\2\2\2\u042b\u042e"+ + "\3\2\2\2\u042c\u042a\3\2\2\2\u042c\u042d\3\2\2\2\u042d\u042f\3\2\2\2\u042e"+ + "\u042c\3\2\2\2\u042f\u0430\7\u00bb\2\2\u0430\u0431\5\u014a\u00a6\2\u0431"+ + "\u0085\3\2\2\2\u0432\u0433\7E\2\2\u0433\u0434\7\u0085\2\2\u0434\u0435"+ + "\7\u0094\2\2\u0435\u0436\5\u014a\u00a6\2\u0436\u0087\3\2\2\2\u0437\u0439"+ + "\7p\2\2\u0438\u043a\7\u0100\2\2\u0439\u0438\3\2\2\2\u0439\u043a\3\2\2"+ + "\2\u043a\u0089\3\2\2\2\u043b\u043c\7x\2\2\u043c\u043d\7\u0084\2\2\u043d"+ + "\u0440\5\u011a\u008e\2\u043e\u043f\7\u00bb\2\2\u043f\u0441\5\u011a\u008e"+ + "\2\u0440\u043e\3\2\2\2\u0440\u0441\3\2\2\2\u0441\u0444\3\2\2\2\u0442\u0443"+ + "\7\f\2\2\u0443\u0445\5\u011a\u008e\2\u0444\u0442\3\2\2\2\u0444\u0445\3"+ + "\2\2\2\u0445\u008b\3\2\2\2\u0446\u0447\7\u0087\2\2\u0447\u044d\7\u0100"+ + "\2\2\u0448\u044b\7M\2\2\u0449\u044c\5\u011a\u008e\2\u044a\u044c\5\u00bc"+ + "_\2\u044b\u0449\3\2\2\2\u044b\u044a\3\2\2\2\u044c\u044e\3\2\2\2\u044d"+ + "\u0448\3\2\2\2\u044d\u044e\3\2\2\2\u044e\u008d\3\2\2\2\u044f\u0451\7I"+ + "\2\2\u0450\u0452\7P\2\2\u0451\u0450\3\2\2\2\u0451\u0452\3\2\2\2\u0452"+ + "\u0453\3\2\2\2\u0453\u0454\7\u0100\2\2\u0454\u0455\7h\2\2\u0455\u045a"+ + "\7\u0100\2\2\u0456\u0457\7\u00e7\2\2\u0457\u0459\7\u0100\2\2\u0458\u0456"+ + "\3\2\2\2\u0459\u045c\3\2\2\2\u045a\u0458\3\2\2\2\u045a\u045b\3\2\2\2\u045b"+ + "\u008f\3\2\2\2\u045c\u045a\3\2\2\2\u045d\u045e\7\34\2\2\u045e\u045f\7"+ + "\u0100\2\2\u045f\u0091\3\2\2\2\u0460\u0461\7\36\2\2\u0461\u0462\7P\2\2"+ + "\u0462\u0463\7u\2\2\u0463\u0468\5\u0096L\2\u0464\u0465\7\u00e7\2\2\u0465"+ + "\u0467\5\u0096L\2\u0466\u0464\3\2\2\2\u0467\u046a\3\2\2\2\u0468\u0466"+ + "\3\2\2\2\u0468\u0469\3\2\2\2\u0469\u046b\3\2\2\2\u046a\u0468\3\2\2\2\u046b"+ + "\u046c\7\u00bb\2\2\u046c\u0470\5\u0098M\2\u046d\u046f\5\u009cO\2\u046e"+ + "\u046d\3\2\2\2\u046f\u0472\3\2\2\2\u0470\u046e\3\2\2\2\u0470\u0471\3\2"+ + "\2\2\u0471\u0093\3\2\2\2\u0472\u0470\3\2\2\2\u0473\u0479\7\36\2\2\u0474"+ + "\u047a\5\u00ecw\2\u0475\u0476\7\u00f5\2\2\u0476\u0477\5\u00bc_\2\u0477"+ + "\u0478\7\u00f7\2\2\u0478\u047a\3\2\2\2\u0479\u0474\3\2\2\2\u0479\u0475"+ + "\3\2\2\2\u047a\u047b\3\2\2\2\u047b\u047c\7\u00bb\2\2\u047c\u0480\5\u0098"+ + "M\2\u047d\u047f\5\u009aN\2\u047e\u047d\3\2\2\2\u047f\u0482\3\2\2\2\u0480"+ + "\u047e\3\2\2\2\u0480\u0481\3\2\2\2\u0481\u0095\3\2\2\2\u0482\u0480\3\2"+ + "\2\2\u0483\u0487\5\u014a\u00a6\2\u0484\u0487\5\u011a\u008e\2\u0485\u0487"+ + "\7\u0108\2\2\u0486\u0483\3\2\2\2\u0486\u0484\3\2\2\2\u0486\u0485\3\2\2"+ + "\2\u0487\u0097\3\2\2\2\u0488\u048c\5\u014a\u00a6\2\u0489\u048c\5\u011a"+ + "\u008e\2\u048a\u048c\7\u0108\2\2\u048b\u0488\3\2\2\2\u048b\u0489\3\2\2"+ + "\2\u048b\u048a\3\2\2\2\u048c\u0099\3\2\2\2\u048d\u048e\7\f\2\2\u048e\u0496"+ + "\5\u014a\u00a6\2\u048f\u0490\7\16\2\2\u0490\u0496\5\u011a\u008e\2\u0491"+ + "\u0492\7\66\2\2\u0492\u0496\5\u011a\u008e\2\u0493\u0494\7\u00ae\2\2\u0494"+ + "\u0496\5\u014a\u00a6\2\u0495\u048d\3\2\2\2\u0495\u048f\3\2\2\2\u0495\u0491"+ + "\3\2\2\2\u0495\u0493\3\2\2\2\u0496\u009b\3\2\2\2\u0497\u0498\t\21\2\2"+ + "\u0498\u009d\3\2\2\2\u0499\u049b\7\37\2\2\u049a\u049c\7\u00ce\2\2\u049b"+ + "\u049a\3\2\2\2\u049b\u049c\3\2\2\2\u049c\u009f\3\2\2\2\u049d\u049f\7&"+ + "\2\2\u049e\u04a0\7\u00be\2\2\u049f\u049e\3\2\2\2\u049f\u04a0\3\2\2\2\u04a0"+ + "\u04a1\3\2\2\2\u04a1\u04a2\7a\2\2\u04a2\u04a3\5\u014a\u00a6\2\u04a3\u04a4"+ + "\7\u0085\2\2\u04a4\u04a5\5\u00ecw\2\u04a5\u04a6\7\u00f5\2\2\u04a6\u04ab"+ + "\5\u00a2R\2\u04a7\u04a8\7\u00e7\2\2\u04a8\u04aa\5\u00a2R\2\u04a9\u04a7"+ + "\3\2\2\2\u04aa\u04ad\3\2\2\2\u04ab\u04a9\3\2\2\2\u04ab\u04ac\3\2\2\2\u04ac"+ + "\u04ae\3\2\2\2\u04ad\u04ab\3\2\2\2\u04ae\u04af\7\u00f7\2\2\u04af\u00a1"+ + "\3\2\2\2\u04b0\u04b2\5\u014a\u00a6\2\u04b1\u04b3\t\22\2\2\u04b2\u04b1"+ + "\3\2\2\2\u04b2\u04b3\3\2\2\2\u04b3\u00a3\3\2\2\2\u04b4\u04b5\7\u0092\2"+ + "\2\u04b5\u04bc\5\u011a\u008e\2\u04b6\u04b7\7\u0092\2\2\u04b7\u04b8\7\u00f5"+ + "\2\2\u04b8\u04b9\5\u011a\u008e\2\u04b9\u04ba\7\u00f7\2\2\u04ba\u04bc\3"+ + "\2\2\2\u04bb\u04b4\3\2\2\2\u04bb\u04b6\3\2\2\2\u04bc\u00a5\3\2\2\2\u04bd"+ + "\u04c9\7\u0097\2\2\u04be\u04c0\7\u00af\2\2\u04bf\u04c1\7\u00c3\2\2\u04c0"+ + "\u04bf\3\2\2\2\u04c0\u04c1\3\2\2\2\u04c1\u04c2\3\2\2\2\u04c2\u04c7\5\u011a"+ + "\u008e\2\u04c3\u04c4\7\u00a8\2\2\u04c4\u04c5\7|\2\2\u04c5\u04c6\7\u00eb"+ + "\2\2\u04c6\u04c8\5\u011a\u008e\2\u04c7\u04c3\3\2\2\2\u04c7\u04c8\3\2\2"+ + "\2\u04c8\u04ca\3\2\2\2\u04c9\u04be\3\2\2\2\u04c9\u04ca\3\2\2\2\u04ca\u00a7"+ + "\3\2\2\2\u04cb\u04cd\7\u0099\2\2\u04cc\u04ce\5\u011a\u008e\2\u04cd\u04cc"+ + "\3\2\2\2\u04cd\u04ce\3\2\2\2\u04ce\u00a9\3\2\2\2\u04cf\u04d1\7\u009e\2"+ + "\2\u04d0\u04d2\7\u00ce\2\2\u04d1\u04d0\3\2\2\2\u04d1\u04d2\3\2\2\2\u04d2"+ + "\u00ab\3\2\2\2\u04d3\u04d4\7\u00aa\2\2\u04d4\u04d5\5\u014a\u00a6\2\u04d5"+ + "\u00ad\3\2\2\2\u04d6\u04d7\7\u00c1\2\2\u04d7\u04d8\5\u011a\u008e\2\u04d8"+ + "\u00af\3\2\2\2\u04d9\u04db\7\u00c4\2\2\u04da\u04dc\7\u00f5\2\2\u04db\u04da"+ + "\3\2\2\2\u04db\u04dc\3\2\2\2\u04dc\u04dd\3\2\2\2\u04dd\u04e2\5\u011a\u008e"+ + "\2\u04de\u04df\7\u00e7\2\2\u04df\u04e1\5\u011a\u008e\2\u04e0\u04de\3\2"+ + "\2\2\u04e1\u04e4\3\2\2\2\u04e2\u04e0\3\2\2\2\u04e2\u04e3\3\2\2\2\u04e3"+ + "\u04e6\3\2\2\2\u04e4\u04e2\3\2\2\2\u04e5\u04e7\7\u00f7\2\2\u04e6\u04e5"+ + "\3\2\2\2\u04e6\u04e7\3\2\2\2\u04e7\u04e8\3\2\2\2\u04e8\u04ea\7h\2\2\u04e9"+ + "\u04eb\7\u00f5\2\2\u04ea\u04e9\3\2\2\2\u04ea\u04eb\3\2\2\2\u04eb\u04ec"+ + "\3\2\2\2\u04ec\u04f1\5\u014a\u00a6\2\u04ed\u04ee\7\u00e7\2\2\u04ee\u04f0"+ + "\5\u014a\u00a6\2\u04ef\u04ed\3\2\2\2\u04f0\u04f3\3\2\2\2\u04f1\u04ef\3"+ + "\2\2\2\u04f1\u04f2\3\2\2\2\u04f2\u04f5\3\2\2\2\u04f3\u04f1\3\2\2\2\u04f4"+ + "\u04f6\7\u00f7\2\2\u04f5\u04f4\3\2\2\2\u04f5\u04f6\3\2\2\2\u04f6\u00b1"+ + "\3\2\2\2\u04f7\u04f8\7\u00cb\2\2\u04f8\u04f9\5\u010a\u0086\2\u04f9\u04fa"+ + "\t\23\2\2\u04fa\u04fb\5\4\3\2\u04fb\u04fd\7A\2\2\u04fc\u04fe\t\24\2\2"+ + "\u04fd\u04fc\3\2\2\2\u04fd\u04fe\3\2\2\2\u04fe\u00b3\3\2\2\2\u04ff\u0500"+ + "\7M\2\2\u0500\u0501\7\u0100\2\2\u0501\u0503\7_\2\2\u0502\u0504\7\u00f5"+ + "\2\2\u0503\u0502\3\2\2\2\u0503\u0504\3\2\2\2\u0504\u0505\3\2\2\2\u0505"+ + "\u0507\5\u00bc_\2\u0506\u0508\7\u00f7\2\2\u0507\u0506\3\2\2\2\u0507\u0508"+ + "\3\2\2\2\u0508\u0509\3\2\2\2\u0509\u050a\7w\2\2\u050a\u050b\5\4\3\2\u050b"+ + "\u050c\7A\2\2\u050c\u050d\7w\2\2\u050d\u00b5\3\2\2\2\u050e\u050f\7M\2"+ + "\2\u050f\u0510\7\u0100\2\2\u0510\u0512\7_\2\2\u0511\u0513\7\u009b\2\2"+ + "\u0512\u0511\3\2\2\2\u0512\u0513\3\2\2\2\u0513\u0514\3\2\2\2\u0514\u0515"+ + "\5\u011a\u008e\2\u0515\u0516\7\u00ea\2\2\u0516\u0519\5\u011a\u008e\2\u0517"+ + "\u0518\t\25\2\2\u0518\u051a\5\u011a\u008e\2\u0519\u0517\3\2\2\2\u0519"+ + "\u051a\3\2\2\2\u051a\u051b\3\2\2\2\u051b\u051c\7w\2\2\u051c\u051d\5\4"+ + "\3\2\u051d\u051e\7A\2\2\u051e\u051f\7w\2\2\u051f\u00b7\3\2\2\2\u0520\u0527"+ + "\7\u0109\2\2\u0521\u0522\7\u00f1\2\2\u0522\u0523\7\u00f1\2\2\u0523\u0524"+ + "\7\u0100\2\2\u0524\u0525\7\u00ef\2\2\u0525\u0527\7\u00ef\2\2\u0526\u0520"+ + "\3\2\2\2\u0526\u0521\3\2\2\2\u0527\u00b9\3\2\2\2\u0528\u0529\7\u00c2\2"+ + "\2\u0529\u052e\5\u011a\u008e\2\u052a\u052b\7\u00e7\2\2\u052b\u052d\5\u011a"+ + "\u008e\2\u052c\u052a\3\2\2\2\u052d\u0530\3\2\2\2\u052e\u052c\3\2\2\2\u052e"+ + "\u052f\3\2\2\2\u052f\u00bb\3\2\2\2\u0530\u052e\3\2\2\2\u0531\u0533\5\u00be"+ + "`\2\u0532\u0531\3\2\2\2\u0532\u0533\3\2\2\2\u0533\u0534\3\2\2\2\u0534"+ + "\u0535\5\u00c4c\2\u0535\u00bd\3\2\2\2\u0536\u0537\7\u00cc\2\2\u0537\u053c"+ + "\5\u00c0a\2\u0538\u0539\7\u00e7\2\2\u0539\u053b\5\u00c0a\2\u053a\u0538"+ + "\3\2\2\2\u053b\u053e\3\2\2\2\u053c\u053a\3\2\2\2\u053c\u053d\3\2\2\2\u053d"+ + "\u00bf\3\2\2\2\u053e\u053c\3\2\2\2\u053f\u0541\5\u014a\u00a6\2\u0540\u0542"+ + "\5\u00c2b\2\u0541\u0540\3\2\2\2\u0541\u0542\3\2\2\2\u0542\u0543\3\2\2"+ + "\2\u0543\u0544\7\n\2\2\u0544\u0545\7\u00f5\2\2\u0545\u0546\5\u00c4c\2"+ + "\u0546\u0547\7\u00f7\2\2\u0547\u00c1\3\2\2\2\u0548\u0549\7\u00f5\2\2\u0549"+ + "\u054e\5\u014a\u00a6\2\u054a\u054b\7\u00e7\2\2\u054b\u054d\5\u014a\u00a6"+ + "\2\u054c\u054a\3\2\2\2\u054d\u0550\3\2\2\2\u054e\u054c\3\2\2\2\u054e\u054f"+ + "\3\2\2\2\u054f\u0551\3\2\2\2\u0550\u054e\3\2\2\2\u0551\u0552\7\u00f7\2"+ + "\2\u0552\u00c3\3\2\2\2\u0553\u0559\5\u00c6d\2\u0554\u0555\5\u00c8e\2\u0555"+ + "\u0556\5\u00c6d\2\u0556\u0558\3\2\2\2\u0557\u0554\3\2\2\2\u0558\u055b"+ + "\3\2\2\2\u0559\u0557\3\2\2\2\u0559\u055a\3\2\2\2\u055a\u00c5\3\2\2\2\u055b"+ + "\u0559\3\2\2\2\u055c\u0562\5\u00caf\2\u055d\u055e\7\u00f5\2\2\u055e\u055f"+ + "\5\u00c4c\2\u055f\u0560\7\u00f7\2\2\u0560\u0562\3\2\2\2\u0561\u055c\3"+ + "\2\2\2\u0561\u055d\3\2\2\2\u0562\u00c7\3\2\2\2\u0563\u0565\7\u00bd\2\2"+ + "\u0564\u0566\7\7\2\2\u0565\u0564\3\2\2\2\u0565\u0566\3\2\2\2\u0566\u0570"+ + "\3\2\2\2\u0567\u0569\7C\2\2\u0568\u056a\7\7\2\2\u0569\u0568\3\2\2\2\u0569"+ + "\u056a\3\2\2\2\u056a\u0570\3\2\2\2\u056b\u056d\7g\2\2\u056c\u056e\7\7"+ + "\2\2\u056d\u056c\3\2\2\2\u056d\u056e\3\2\2\2\u056e\u0570\3\2\2\2\u056f"+ + "\u0563\3\2\2\2\u056f\u0567\3\2\2\2\u056f\u056b\3\2\2\2\u0570\u00c9\3\2"+ + "\2\2\u0571\u0572\t\26\2\2\u0572\u0574\5\u00ccg\2\u0573\u0575\5\u00d8m"+ + "\2\u0574\u0573\3\2\2\2\u0574\u0575\3\2\2\2\u0575\u0577\3\2\2\2\u0576\u0578"+ + "\5\u00dan\2\u0577\u0576\3\2\2\2\u0577\u0578\3\2\2\2\u0578\u057a\3\2\2"+ + "\2\u0579\u057b\5\u00eex\2\u057a\u0579\3\2\2\2\u057a\u057b\3\2\2\2\u057b"+ + "\u057d\3\2\2\2\u057c\u057e\5\u00f0y\2\u057d\u057c\3\2\2\2\u057d\u057e"+ + "\3\2\2\2\u057e\u0580\3\2\2\2\u057f\u0581\5\u00f2z\2\u0580\u057f\3\2\2"+ + "\2\u0580\u0581\3\2\2\2\u0581\u0583\3\2\2\2\u0582\u0584\5\u00f4{\2\u0583"+ + "\u0582\3\2\2\2\u0583\u0584\3\2\2\2\u0584\u0586\3\2\2\2\u0585\u0587\5\u00f6"+ + "|\2\u0586\u0585\3\2\2\2\u0586\u0587\3\2\2\2\u0587\u00cb\3\2\2\2\u0588"+ + "\u058a\5\u00ceh\2\u0589\u0588\3\2\2\2\u0589\u058a\3\2\2\2\u058a\u058c"+ + "\3\2\2\2\u058b\u058d\5\u00d0i\2\u058c\u058b\3\2\2\2\u058c\u058d\3\2\2"+ + "\2\u058d\u058e\3\2\2\2\u058e\u0593\5\u00d2j\2\u058f\u0590\7\u00e7\2\2"+ + "\u0590\u0592\5\u00d2j\2\u0591\u058f\3\2\2\2\u0592\u0595\3\2\2\2\u0593"+ + "\u0591\3\2\2\2\u0593\u0594\3\2\2\2\u0594\u00cd\3\2\2\2\u0595\u0593\3\2"+ + "\2\2\u0596\u0597\t\27\2\2\u0597\u00cf\3\2\2\2\u0598\u0599\7\u00bc\2\2"+ + "\u0599\u059a\5\u011a\u008e\2\u059a\u00d1\3\2\2\2\u059b\u059d\5\u011a\u008e"+ + "\2\u059c\u059e\5\u00d4k\2\u059d\u059c\3\2\2\2\u059d\u059e\3\2\2\2\u059e"+ + "\u05a1\3\2\2\2\u059f\u05a1\5\u00d6l\2\u05a0\u059b\3\2\2\2\u05a0\u059f"+ + "\3\2\2\2\u05a1\u00d3\3\2\2\2\u05a2\u05a4\7\n\2\2\u05a3\u05a2\3\2\2\2\u05a3"+ + "\u05a4\3\2\2\2\u05a4\u05a5\3\2\2\2\u05a5\u05ab\7\u0100\2\2\u05a6\u05a7"+ + "\7\u00f5\2\2\u05a7\u05a8\7\u00ba\2\2\u05a8\u05a9\7\u0101\2\2\u05a9\u05ab"+ + "\7\u00f7\2\2\u05aa\u05a3\3\2\2\2\u05aa\u05a6\3\2\2\2\u05ab\u00d5\3\2\2"+ + "\2\u05ac\u05ad\7\u0100\2\2\u05ad\u05af\7\5\2\2\u05ae\u05ac\3\2\2\2\u05ae"+ + "\u05af\3\2\2\2\u05af\u05b0\3\2\2\2\u05b0\u05b1\7\u00f3\2\2\u05b1\u00d7"+ + "\3\2\2\2\u05b2\u05b3\7h\2\2\u05b3\u05b8\5\u014a\u00a6\2\u05b4\u05b5\7"+ + "\u00e7\2\2\u05b5\u05b7\5\u014a\u00a6\2\u05b6\u05b4\3\2\2\2\u05b7\u05ba"+ + "\3\2\2\2\u05b8\u05b6\3\2\2\2\u05b8\u05b9\3\2\2\2\u05b9\u00d9\3\2\2\2\u05ba"+ + "\u05b8\3\2\2\2\u05bb\u05bc\7P\2\2\u05bc\u05c0\5\u00dco\2\u05bd\u05bf\5"+ + "\u00e2r\2\u05be\u05bd\3\2\2\2\u05bf\u05c2\3\2\2\2\u05c0\u05be\3\2\2\2"+ + "\u05c0\u05c1\3\2\2\2\u05c1\u00db\3\2\2\2\u05c2\u05c0\3\2\2\2\u05c3\u05c7"+ + "\5\u00dep\2\u05c4\u05c7\5\u00e0q\2\u05c5\u05c7\5\u00e6t\2\u05c6\u05c3"+ + "\3\2\2\2\u05c6\u05c4\3\2\2\2\u05c6\u05c5\3\2\2\2\u05c7\u00dd\3\2\2\2\u05c8"+ + "\u05ca\5\u00ecw\2\u05c9\u05cb\5\u00eav\2\u05ca\u05c9\3\2\2\2\u05ca\u05cb"+ + "\3\2\2\2\u05cb\u00df\3\2\2\2\u05cc\u05cd\7\u00f5\2\2\u05cd\u05ce\5\u00ca"+ + "f\2\u05ce\u05d0\7\u00f7\2\2\u05cf\u05d1\5\u00eav\2\u05d0\u05cf\3\2\2\2"+ + "\u05d0\u05d1\3\2\2\2\u05d1\u00e1\3\2\2\2\u05d2\u05d3\7\u00e7\2\2\u05d3"+ + "\u05da\5\u00dco\2\u05d4\u05d5\5\u00e4s\2\u05d5\u05d6\5\u00dco\2\u05d6"+ + "\u05d7\7\u0085\2\2\u05d7\u05d8\5\u010a\u0086\2\u05d8\u05da\3\2\2\2\u05d9"+ + "\u05d2\3\2\2\2\u05d9\u05d4\3\2\2\2\u05da\u00e3\3\2\2\2\u05db\u05dc\7b"+ + "\2\2\u05dc\u05e3\7l\2\2\u05dd\u05df\t\30\2\2\u05de\u05e0\7\u008b\2\2\u05df"+ + "\u05de\3\2\2\2\u05df\u05e0\3\2\2\2\u05e0\u05e1\3\2\2\2\u05e1\u05e3\7l"+ + "\2\2\u05e2\u05db\3\2\2\2\u05e2\u05dd\3\2\2\2\u05e3\u00e5\3\2\2\2\u05e4"+ + "\u05e5\7\u00b5\2\2\u05e5\u05e6\7\u00f5\2\2\u05e6\u05e7\7\u00c4\2\2\u05e7"+ + "\u05ec\5\u00e8u\2\u05e8\u05e9\7\u00e7\2\2\u05e9\u05eb\5\u00e8u\2\u05ea"+ + "\u05e8\3\2\2\2\u05eb\u05ee\3\2\2\2\u05ec\u05ea\3\2\2\2\u05ec\u05ed\3\2"+ + "\2\2\u05ed\u05ef\3\2\2\2\u05ee\u05ec\3\2\2\2\u05ef\u05f1\7\u00f7\2\2\u05f0"+ + "\u05f2\5\u00eav\2\u05f1\u05f0\3\2\2\2\u05f1\u05f2\3\2\2\2\u05f2\u00e7"+ + "\3\2\2\2\u05f3\u0600\5\u011a\u008e\2\u05f4\u05f5\7\u00f5\2\2\u05f5\u05fa"+ + "\5\u011a\u008e\2\u05f6\u05f7\7\u00e7\2\2\u05f7\u05f9\5\u011a\u008e\2\u05f8"+ + "\u05f6\3\2\2\2\u05f9\u05fc\3\2\2\2\u05fa\u05f8\3\2\2\2\u05fa\u05fb\3\2"+ + "\2\2\u05fb\u05fd\3\2\2\2\u05fc\u05fa\3\2\2\2\u05fd\u05fe\7\u00f7\2\2\u05fe"+ + "\u0600\3\2\2\2\u05ff\u05f3\3\2\2\2\u05ff\u05f4\3\2\2\2\u0600\u00e9\3\2"+ + "\2\2\u0601\u0603\6v\2\2\u0602\u0604\7\n\2\2\u0603\u0602\3\2\2\2\u0603"+ + "\u0604\3\2\2\2\u0604\u0605\3\2\2\2\u0605\u0610\5\u014a\u00a6\2\u0606\u0607"+ + "\7\u00f5\2\2\u0607\u060c\7\u0100\2\2\u0608\u0609\7\u00e7\2\2\u0609\u060b"+ + "\7\u0100\2\2\u060a\u0608\3\2\2\2\u060b\u060e\3\2\2\2\u060c\u060a\3\2\2"+ + "\2\u060c\u060d\3\2\2\2\u060d\u060f\3\2\2\2\u060e\u060c\3\2\2\2\u060f\u0611"+ + "\7\u00f7\2\2\u0610\u0606\3\2\2\2\u0610\u0611\3\2\2\2\u0611\u00eb\3\2\2"+ + "\2\u0612\u0613\5\u014a\u00a6\2\u0613\u00ed\3\2\2\2\u0614\u0615\7\u00ca"+ + "\2\2\u0615\u0616\5\u010a\u0086\2\u0616\u00ef\3\2\2\2\u0617\u0618\7V\2"+ + "\2\u0618\u0619\7\23\2\2\u0619\u061e\5\u011a\u008e\2\u061a\u061b\7\u00e7"+ + "\2\2\u061b\u061d\5\u011a\u008e\2\u061c\u061a\3\2\2\2\u061d\u0620\3\2\2"+ + "\2\u061e\u061c\3\2\2\2\u061e\u061f\3\2\2\2\u061f\u00f1\3\2\2\2\u0620\u061e"+ + "\3\2\2\2\u0621\u0622\7Y\2\2\u0622\u0623\5\u010a\u0086\2\u0623\u00f3\3"+ + "\2\2\2\u0624\u0625\7\u0089\2\2\u0625\u0626\7\23\2\2\u0626\u0628\5\u011a"+ + "\u008e\2\u0627\u0629\t\22\2\2\u0628\u0627\3\2\2\2\u0628\u0629\3\2\2\2"+ + "\u0629\u0631\3\2\2\2\u062a\u062b\7\u00e7\2\2\u062b\u062d\5\u011a\u008e"+ + "\2\u062c\u062e\t\22\2\2\u062d\u062c\3\2\2\2\u062d\u062e\3\2\2\2\u062e"+ + "\u0630\3\2\2\2\u062f\u062a\3\2\2\2\u0630\u0633\3\2\2\2\u0631\u062f\3\2"+ + "\2\2\u0631\u0632\3\2\2\2\u0632\u00f5\3\2\2\2\u0633\u0631\3\2\2\2\u0634"+ + "\u0636\5\u00f8}\2\u0635\u0634\3\2\2\2\u0636\u0637\3\2\2\2\u0637\u0635"+ + "\3\2\2\2\u0637\u0638\3\2\2\2\u0638\u00f7\3\2\2\2\u0639\u063a\7s\2\2\u063a"+ + "\u063e\5\u011a\u008e\2\u063b\u063c\7\u00cc\2\2\u063c\u063e\t\31\2\2\u063d"+ + "\u0639\3\2\2\2\u063d\u063b\3\2\2\2\u063e\u00f9\3\2\2\2\u063f\u0640\7\u00bf"+ + "\2\2\u0640\u0641\5\u00fc\177\2\u0641\u0642\7\u00a8\2\2\u0642\u0647\5\26"+ + "\f\2\u0643\u0644\7\u00e7\2\2\u0644\u0646\5\26\f\2\u0645\u0643\3\2\2\2"+ + "\u0646\u0649\3\2\2\2\u0647\u0645\3\2\2\2\u0647\u0648\3\2\2\2\u0648\u064b"+ + "\3\2\2\2\u0649\u0647\3\2\2\2\u064a\u064c\5\u00eex\2\u064b\u064a\3\2\2"+ + "\2\u064b\u064c\3\2\2\2\u064c\u064e\3\2\2\2\u064d\u064f\5\u00fe\u0080\2"+ + "\u064e\u064d\3\2\2\2\u064e\u064f\3\2\2\2\u064f\u00fb\3\2\2\2\u0650\u0656"+ + "\5\u00ecw\2\u0651\u0652\7\u00f5\2\2\u0652\u0653\5\u00bc_\2\u0653\u0654"+ + "\7\u00f7\2\2\u0654\u0656\3\2\2\2\u0655\u0650\3\2\2\2\u0655\u0651\3\2\2"+ + "\2\u0656\u065b\3\2\2\2\u0657\u0659\7\n\2\2\u0658\u0657\3\2\2\2\u0658\u0659"+ + "\3\2\2\2\u0659\u065a\3\2\2\2\u065a\u065c\5\u014a\u00a6\2\u065b\u0658\3"+ + "\2\2\2\u065b\u065c\3\2\2\2\u065c\u00fd\3\2\2\2\u065d\u065e\7>\2\2\u065e"+ + "\u065f\5r:\2\u065f\u00ff\3\2\2\2\u0660\u0661\7{\2\2\u0661\u0662\7h\2\2"+ + "\u0662\u0663\5\u0102\u0082\2\u0663\u0664\7\u00c2\2\2\u0664\u0665\5\u0102"+ + "\u0082\2\u0665\u0666\7\u0085\2\2\u0666\u0668\5\u010a\u0086\2\u0667\u0669"+ + "\5\u0104\u0083\2\u0668\u0667\3\2\2\2\u0669\u066a\3\2\2\2\u066a\u0668\3"+ + "\2\2\2\u066a\u066b\3\2\2\2\u066b\u0101\3\2\2\2\u066c\u0672\5\u00ecw\2"+ + "\u066d\u066e\7\u00f5\2\2\u066e\u066f\5\u00bc_\2\u066f\u0670\7\u00f7\2"+ + "\2\u0670\u0672\3\2\2\2\u0671\u066c\3\2\2\2\u0671\u066d\3\2\2\2\u0672\u0677"+ + "\3\2\2\2\u0673\u0675\7\n\2\2\u0674\u0673\3\2\2\2\u0674\u0675\3\2\2\2\u0675"+ + "\u0676\3\2\2\2\u0676\u0678\5\u014a\u00a6\2\u0677\u0674\3\2\2\2\u0677\u0678"+ + "\3\2\2\2\u0678\u0103\3\2\2\2\u0679\u067b\7\u00c9\2\2\u067a\u067c\7\u0081"+ + "\2\2\u067b\u067a\3\2\2\2\u067b\u067c\3\2\2\2\u067c\u067d\3\2\2\2\u067d"+ + "\u0680\7y\2\2\u067e\u067f\7\t\2\2\u067f\u0681\5\u010a\u0086\2\u0680\u067e"+ + "\3\2\2\2\u0680\u0681\3\2\2\2\u0681\u0682\3\2\2\2\u0682\u0683\7\u00b8\2"+ + "\2\u0683\u0687\5\u0106\u0084\2\u0684\u0685\7>\2\2\u0685\u0687\7]\2\2\u0686"+ + "\u0679\3\2\2\2\u0686\u0684\3\2\2\2\u0687\u0105\3\2\2\2\u0688\u068a\7d"+ + "\2\2\u0689\u068b\5t;\2\u068a\u0689\3\2\2\2\u068a\u068b\3\2\2\2\u068b\u068c"+ + "\3\2\2\2\u068c\u068d\7\u00c4\2\2\u068d\u069a\5x=\2\u068e\u068f\7\u00bf"+ + "\2\2\u068f\u0690\7\u00a8\2\2\u0690\u0695\5\26\f\2\u0691\u0692\7\u00e7"+ + "\2\2\u0692\u0694\5\26\f\2\u0693\u0691\3\2\2\2\u0694\u0697\3\2\2\2\u0695"+ + "\u0693\3\2\2\2\u0695\u0696\3\2\2\2\u0696\u069a\3\2\2\2\u0697\u0695\3\2"+ + "\2\2\u0698\u069a\7\64\2\2\u0699\u0688\3\2\2\2\u0699\u068e\3\2\2\2\u0699"+ + "\u0698\3\2\2\2\u069a\u0107\3\2\2\2\u069b\u069d\7\64\2\2\u069c\u069e\7"+ + "P\2\2\u069d\u069c\3\2\2\2\u069d\u069e\3\2\2\2\u069e\u069f\3\2\2\2\u069f"+ + "\u06a4\5\u00ecw\2\u06a0\u06a2\7\n\2\2\u06a1\u06a0\3\2\2\2\u06a1\u06a2"+ + "\3\2\2\2\u06a2\u06a3\3\2\2\2\u06a3\u06a5\5\u014a\u00a6\2\u06a4\u06a1\3"+ + "\2\2\2\u06a4\u06a5\3\2\2\2\u06a5\u06a7\3\2\2\2\u06a6\u06a8\5\u00eex\2"+ + "\u06a7\u06a6\3\2\2\2\u06a7\u06a8\3\2\2\2\u06a8\u0109\3\2\2\2\u06a9\u06aa"+ + "\b\u0086\1\2\u06aa\u06ab\7\u00f5\2\2\u06ab\u06ac\5\u010a\u0086\2\u06ac"+ + "\u06ad\7\u00f7\2\2\u06ad\u06b0\3\2\2\2\u06ae\u06b0\5\u010c\u0087\2\u06af"+ + "\u06a9\3\2\2\2\u06af\u06ae\3\2\2\2\u06b0\u06b7\3\2\2\2\u06b1\u06b2\f\4"+ + "\2\2\u06b2\u06b3\5\u0116\u008c\2\u06b3\u06b4\5\u010a\u0086\5\u06b4\u06b6"+ + "\3\2\2\2\u06b5\u06b1\3\2\2\2\u06b6\u06b9\3\2\2\2\u06b7\u06b5\3\2\2\2\u06b7"+ + "\u06b8\3\2\2\2\u06b8\u010b\3\2\2\2\u06b9\u06b7\3\2\2\2\u06ba\u06bd\5\u010e"+ + "\u0088\2\u06bb\u06bd\5\u0114\u008b\2\u06bc\u06ba\3\2\2\2\u06bc\u06bb\3"+ + "\2\2\2\u06bd\u010d\3\2\2\2\u06be\u06bf\5\u011a\u008e\2\u06bf\u06c1\7j"+ + "\2\2\u06c0\u06c2\7\u0081\2\2\u06c1\u06c0\3\2\2\2\u06c1\u06c2\3\2\2\2\u06c2"+ + "\u06c3\3\2\2\2\u06c3\u06c4\7\u0082\2\2\u06c4\u06ce\3\2\2\2\u06c5\u06c6"+ + "\5\u011a\u008e\2\u06c6\u06c7\7\20\2\2\u06c7\u06c8\5\u011a\u008e\2\u06c8"+ + "\u06c9\7\t\2\2\u06c9\u06ca\5\u011a\u008e\2\u06ca\u06ce\3\2\2\2\u06cb\u06ce"+ + "\5\u0110\u0089\2\u06cc\u06ce\5\u0112\u008a\2\u06cd\u06be\3\2\2\2\u06cd"+ + "\u06c5\3\2\2\2\u06cd\u06cb\3\2\2\2\u06cd\u06cc\3\2\2\2\u06ce\u010f\3\2"+ + "\2\2\u06cf\u06d1\5\u011a\u008e\2\u06d0\u06d2\7\u0081\2\2\u06d1\u06d0\3"+ + "\2\2\2\u06d1\u06d2\3\2\2\2\u06d2\u06d3\3\2\2\2\u06d3\u06d4\7_\2\2\u06d4"+ + "\u06de\7\u00f5\2\2\u06d5\u06da\5\u011a\u008e\2\u06d6\u06d7\7\u00e7\2\2"+ + "\u06d7\u06d9\5\u011a\u008e\2\u06d8\u06d6\3\2\2\2\u06d9\u06dc\3\2\2\2\u06da"+ + "\u06d8\3\2\2\2\u06da\u06db\3\2\2\2\u06db\u06df\3\2\2\2\u06dc\u06da\3\2"+ + "\2\2\u06dd\u06df\5\u00bc_\2\u06de\u06d5\3\2\2\2\u06de\u06dd\3\2\2\2\u06df"+ + "\u06e0\3\2\2\2\u06e0\u06e1\7\u00f7\2\2\u06e1\u0111\3\2\2\2\u06e2\u06e3"+ + "\7\u00f5\2\2\u06e3\u06e8\5\u011a\u008e\2\u06e4\u06e5\7\u00e7\2\2\u06e5"+ + "\u06e7\5\u011a\u008e\2\u06e6\u06e4\3\2\2\2\u06e7\u06ea\3\2\2\2\u06e8\u06e6"+ + "\3\2\2\2\u06e8\u06e9\3\2\2\2\u06e9\u06eb\3\2\2\2\u06ea\u06e8\3\2\2\2\u06eb"+ + "\u06ed\7\u00f7\2\2\u06ec\u06ee\7\u0081\2\2\u06ed\u06ec\3\2\2\2\u06ed\u06ee"+ + "\3\2\2\2\u06ee\u06ef\3\2\2\2\u06ef\u06f0\7_\2\2\u06f0\u06f1\7\u00f5\2"+ + "\2\u06f1\u06f2\5\u00bc_\2\u06f2\u06f3\7\u00f7\2\2\u06f3\u0113\3\2\2\2"+ + "\u06f4\u06f5\5\u011a\u008e\2\u06f5\u06f6\5\u0118\u008d\2\u06f6\u06f7\5"+ + "\u011a\u008e\2\u06f7\u0115\3\2\2\2\u06f8\u06f9\t\32\2\2\u06f9\u0117\3"+ + "\2\2\2\u06fa\u0707\7\u00eb\2\2\u06fb\u0707\7\u00ec\2\2\u06fc\u0707\7\u00ed"+ + "\2\2\u06fd\u0707\7\u00ee\2\2\u06fe\u0707\7\u00f1\2\2\u06ff\u0707\7\u00f2"+ + "\2\2\u0700\u0707\7\u00ef\2\2\u0701\u0707\7\u00f0\2\2\u0702\u0704\7\u0081"+ + "\2\2\u0703\u0702\3\2\2\2\u0703\u0704\3\2\2\2\u0704\u0705\3\2\2\2\u0705"+ + "\u0707\t\33\2\2\u0706\u06fa\3\2\2\2\u0706\u06fb\3\2\2\2\u0706\u06fc\3"+ + "\2\2\2\u0706\u06fd\3\2\2\2\u0706\u06fe\3\2\2\2\u0706\u06ff\3\2\2\2\u0706"+ + "\u0700\3\2\2\2\u0706\u0701\3\2\2\2\u0706\u0703\3\2\2\2\u0707\u0119\3\2"+ + "\2\2\u0708\u0709\b\u008e\1\2\u0709\u070a\7\u00f5\2\2\u070a\u070b\5\u011a"+ + "\u008e\2\u070b\u070c\7\u00f7\2\2\u070c\u0714\3\2\2\2\u070d\u0714\5\u0122"+ + "\u0092\2\u070e\u0714\5\u0126\u0094\2\u070f\u0714\5\u012c\u0097\2\u0710"+ + "\u0714\5\u0134\u009b\2\u0711\u0714\5\u0136\u009c\2\u0712\u0714\5\u011c"+ + "\u008f\2\u0713\u0708\3\2\2\2\u0713\u070d\3\2\2\2\u0713\u070e\3\2\2\2\u0713"+ + "\u070f\3\2\2\2\u0713\u0710\3\2\2\2\u0713\u0711\3\2\2\2\u0713\u0712\3\2"+ + "\2\2\u0714\u0725\3\2\2\2\u0715\u0716\f\r\2\2\u0716\u0717\7\u00f3\2\2\u0717"+ + "\u0724\5\u011a\u008e\16\u0718\u0719\f\f\2\2\u0719\u071a\7\u00e9\2\2\u071a"+ + "\u0724\5\u011a\u008e\r\u071b\u071c\f\13\2\2\u071c\u071d\7\u00e5\2\2\u071d"+ + "\u0724\5\u011a\u008e\f\u071e\u071f\f\n\2\2\u071f\u0720\7\u00f9\2\2\u0720"+ + "\u0724\5\u011a\u008e\13\u0721\u0722\f\16\2\2\u0722\u0724\5\u011e\u0090"+ + "\2\u0723\u0715\3\2\2\2\u0723\u0718\3\2\2\2\u0723\u071b\3\2\2\2\u0723\u071e"+ + "\3\2\2\2\u0723\u0721\3\2\2\2\u0724\u0727\3\2\2\2\u0725\u0723\3\2\2\2\u0725"+ + "\u0726\3\2\2\2\u0726\u011b\3\2\2\2\u0727\u0725\3\2\2\2\u0728\u0731\5\u0146"+ + "\u00a4\2\u0729\u0731\5\u0148\u00a5\2\u072a\u0731\5\u014a\u00a6\2\u072b"+ + "\u0731\5\u014c\u00a7\2\u072c\u0731\5\u0150\u00a9\2\u072d\u0731\5\u0120"+ + "\u0091\2\u072e\u0731\5\u014e\u00a8\2\u072f\u0731\5\u0152\u00aa\2\u0730"+ + "\u0728\3\2\2\2\u0730\u0729\3\2\2\2\u0730\u072a\3\2\2\2\u0730\u072b\3\2"+ + "\2\2\u0730\u072c\3\2\2\2\u0730\u072d\3\2\2\2\u0730\u072e\3\2\2\2\u0730"+ + "\u072f\3\2\2\2\u0731\u011d\3\2\2\2\u0732\u0733\t\34\2\2\u0733\u011f\3"+ + "\2\2\2\u0734\u0735\5\u014e\u00a8\2\u0735\u0736\5\u011e\u0090\2\u0736\u0121"+ + "\3\2\2\2\u0737\u0738\5\u0124\u0093\2\u0738\u0739\t\35\2\2\u0739\u073e"+ + "\5\u0124\u0093\2\u073a\u073b\t\35\2\2\u073b\u073d\5\u0124\u0093\2\u073c"+ + "\u073a\3\2\2\2\u073d\u0740\3\2\2\2\u073e\u073c\3\2\2\2\u073e\u073f\3\2"+ + "\2\2\u073f\u0123\3\2\2\2\u0740\u073e\3\2\2\2\u0741\u0742\7\u00f5\2\2\u0742"+ + "\u0743\5\u011a\u008e\2\u0743\u0744\7\u00f7\2\2\u0744\u074b\3\2\2\2\u0745"+ + "\u074b\5\u0126\u0094\2\u0746\u074b\5\u012c\u0097\2\u0747\u074b\5\u0134"+ + "\u009b\2\u0748\u074b\5\u0136\u009c\2\u0749\u074b\5\u011c\u008f\2\u074a"+ + "\u0741\3\2\2\2\u074a\u0745\3\2\2\2\u074a\u0746\3\2\2\2\u074a\u0747\3\2"+ + "\2\2\u074a\u0748\3\2\2\2\u074a\u0749\3\2\2\2\u074b\u0125\3\2\2\2\u074c"+ + "\u074f\5\u0128\u0095\2\u074d\u074f\5\u012a\u0096\2\u074e\u074c\3\2\2\2"+ + "\u074e\u074d\3\2\2\2\u074f\u0127\3\2\2\2\u0750\u0751\7\26\2\2\u0751\u0757"+ + "\5\u011a\u008e\2\u0752\u0753\7\u00c9\2\2\u0753\u0754\5\u011a\u008e\2\u0754"+ + "\u0755\7\u00b8\2\2\u0755\u0756\5\u011a\u008e\2\u0756\u0758\3\2\2\2\u0757"+ + "\u0752\3\2\2\2\u0758\u0759\3\2\2\2\u0759\u0757\3\2\2\2\u0759\u075a\3\2"+ + "\2\2\u075a\u075d\3\2\2\2\u075b\u075c\7>\2\2\u075c\u075e\5\u011a\u008e"+ + "\2\u075d\u075b\3\2\2\2\u075d\u075e\3\2\2\2\u075e\u075f\3\2\2\2\u075f\u0760"+ + "\7A\2\2\u0760\u0129\3\2\2\2\u0761\u0767\7\26\2\2\u0762\u0763\7\u00c9\2"+ + "\2\u0763\u0764\5\u010a\u0086\2\u0764\u0765\7\u00b8\2\2\u0765\u0766\5\u011a"+ + "\u008e\2\u0766\u0768\3\2\2\2\u0767\u0762\3\2\2\2\u0768\u0769\3\2\2\2\u0769"+ + "\u0767\3\2\2\2\u0769\u076a\3\2\2\2\u076a\u076d\3\2\2\2\u076b\u076c\7>"+ + "\2\2\u076c\u076e\5\u011a\u008e\2\u076d\u076b\3\2\2\2\u076d\u076e\3\2\2"+ + "\2\u076e\u076f\3\2\2\2\u076f\u0770\7A\2\2\u0770\u012b\3\2\2\2\u0771\u0772"+ + "\7\r\2\2\u0772\u0774\7\u00f5\2\2\u0773\u0775\5\u012e\u0098\2\u0774\u0773"+ + "\3\2\2\2\u0774\u0775\3\2\2\2\u0775\u0776\3\2\2\2\u0776\u0777\5\u011a\u008e"+ + "\2\u0777\u0779\7\u00f7\2\2\u0778\u077a\5\u0130\u0099\2\u0779\u0778\3\2"+ + "\2\2\u0779\u077a\3\2\2\2\u077a\u0806\3\2\2\2\u077b\u077c\7$\2\2\u077c"+ + "\u0782\7\u00f5\2\2\u077d\u077f\5\u012e\u0098\2\u077e\u077d\3\2\2\2\u077e"+ + "\u077f\3\2\2\2\u077f\u0780\3\2\2\2\u0780\u0783\5\u011a\u008e\2\u0781\u0783"+ + "\7\u00f3\2\2\u0782\u077e\3\2\2\2\u0782\u0781\3\2\2\2\u0783\u0784\3\2\2"+ + "\2\u0784\u0786\7\u00f7\2\2\u0785\u0787\5\u0130\u0099\2\u0786\u0785\3\2"+ + "\2\2\u0786\u0787\3\2\2\2\u0787\u0806\3\2\2\2\u0788\u0789\7%\2\2\u0789"+ + "\u078f\7\u00f5\2\2\u078a\u078c\5\u012e\u0098\2\u078b\u078a\3\2\2\2\u078b"+ + "\u078c\3\2\2\2\u078c\u078d\3\2\2\2\u078d\u0790\5\u011a\u008e\2\u078e\u0790"+ + "\7\u00f3\2\2\u078f\u078b\3\2\2\2\u078f\u078e\3\2\2\2\u0790\u0791\3\2\2"+ + "\2\u0791\u0793\7\u00f7\2\2\u0792\u0794\5\u0130\u0099\2\u0793\u0792\3\2"+ + "\2\2\u0793\u0794\3\2\2\2\u0794\u0806\3\2\2\2\u0795\u0796\7\u00d3\2\2\u0796"+ + "\u0797\7\u00f5\2\2\u0797\u0798\7\u00f7\2\2\u0798\u0806\5\u0130\u0099\2"+ + "\u0799\u079a\7\u00d4\2\2\u079a\u079b\7\u00f5\2\2\u079b\u079c\5\u011a\u008e"+ + "\2\u079c\u079d\7\u00f7\2\2\u079d\u079e\5\u0130\u0099\2\u079e\u0806\3\2"+ + "\2\2\u079f\u07a0\7\u00d5\2\2\u07a0\u07a1\7\u00f5\2\2\u07a1\u07a8\5\u011a"+ + "\u008e\2\u07a2\u07a3\7\u00e7\2\2\u07a3\u07a6\5\u011a\u008e\2\u07a4\u07a5"+ + "\7\u00e7\2\2\u07a5\u07a7\5\u011a\u008e\2\u07a6\u07a4\3\2\2\2\u07a6\u07a7"+ + "\3\2\2\2\u07a7\u07a9\3\2\2\2\u07a8\u07a2\3\2\2\2\u07a8\u07a9\3\2\2\2\u07a9"+ + "\u07aa\3\2\2\2\u07aa\u07ab\7\u00f7\2\2\u07ab\u07ac\5\u0130\u0099\2\u07ac"+ + "\u0806\3\2\2\2\u07ad\u07ae\7\u00d6\2\2\u07ae\u07af\7\u00f5\2\2\u07af\u07b0"+ + "\5\u011a\u008e\2\u07b0\u07b1\7\u00f7\2\2\u07b1\u07b2\5\u0130\u0099\2\u07b2"+ + "\u0806\3\2\2\2\u07b3\u07b4\7\u00d7\2\2\u07b4\u07b5\7\u00f5\2\2\u07b5\u07bc"+ + "\5\u011a\u008e\2\u07b6\u07b7\7\u00e7\2\2\u07b7\u07ba\5\u011a\u008e\2\u07b8"+ + "\u07b9\7\u00e7\2\2\u07b9\u07bb\5\u011a\u008e\2\u07ba\u07b8\3\2\2\2\u07ba"+ + "\u07bb\3\2\2\2\u07bb\u07bd\3\2\2\2\u07bc\u07b6\3\2\2\2\u07bc\u07bd\3\2"+ + "\2\2\u07bd\u07be\3\2\2\2\u07be\u07bf\7\u00f7\2\2\u07bf\u07c0\5\u0130\u0099"+ + "\2\u07c0\u0806\3\2\2\2\u07c1\u07c2\7z\2\2\u07c2\u07c4\7\u00f5\2\2\u07c3"+ + "\u07c5\5\u012e\u0098\2\u07c4\u07c3\3\2\2\2\u07c4\u07c5\3\2\2\2\u07c5\u07c6"+ + "\3\2\2\2\u07c6\u07c7\5\u011a\u008e\2\u07c7\u07c9\7\u00f7\2\2\u07c8\u07ca"+ + "\5\u0130\u0099\2\u07c9\u07c8\3\2\2\2\u07c9\u07ca\3\2\2\2\u07ca\u0806\3"+ + "\2\2\2\u07cb\u07cc\7\177\2\2\u07cc\u07ce\7\u00f5\2\2\u07cd\u07cf\5\u012e"+ + "\u0098\2\u07ce\u07cd\3\2\2\2\u07ce\u07cf\3\2\2\2\u07cf\u07d0\3\2\2\2\u07d0"+ + "\u07d1\5\u011a\u008e\2\u07d1\u07d3\7\u00f7\2\2\u07d2\u07d4\5\u0130\u0099"+ + "\2\u07d3\u07d2\3\2\2\2\u07d3\u07d4\3\2\2\2\u07d4\u0806\3\2\2\2\u07d5\u07d6"+ + "\7\u00df\2\2\u07d6\u07d7\7\u00f5\2\2\u07d7\u07d8\7\u00f7\2\2\u07d8\u0806"+ + "\5\u0130\u0099\2\u07d9\u07da\7\u00e0\2\2\u07da\u07db\7\u00f5\2\2\u07db"+ + "\u07dc\7\u00f7\2\2\u07dc\u0806\5\u0130\u0099\2\u07dd\u07de\7\u00e1\2\2"+ + "\u07de\u07e0\7\u00f5\2\2\u07df\u07e1\5\u012e\u0098\2\u07e0\u07df\3\2\2"+ + "\2\u07e0\u07e1\3\2\2\2\u07e1\u07e2\3\2\2\2\u07e2\u07e3\5\u011a\u008e\2"+ + "\u07e3\u07e5\7\u00f7\2\2\u07e4\u07e6\5\u0130\u0099\2\u07e5\u07e4\3\2\2"+ + "\2\u07e5\u07e6\3\2\2\2\u07e6\u0806\3\2\2\2\u07e7\u07e8\7\u00b4\2\2\u07e8"+ + "\u07ea\7\u00f5\2\2\u07e9\u07eb\5\u012e\u0098\2\u07ea\u07e9\3\2\2\2\u07ea"+ + "\u07eb\3\2\2\2\u07eb\u07ec\3\2\2\2\u07ec\u07ed\5\u011a\u008e\2\u07ed\u07ef"+ + "\7\u00f7\2\2\u07ee\u07f0\5\u0130\u0099\2\u07ef\u07ee\3\2\2\2\u07ef\u07f0"+ + "\3\2\2\2\u07f0\u0806\3\2\2\2\u07f1\u07f2\7\u00c5\2\2\u07f2\u07f4\7\u00f5"+ + "\2\2\u07f3\u07f5\5\u012e\u0098\2\u07f4\u07f3\3\2\2\2\u07f4\u07f5\3\2\2"+ + "\2\u07f5\u07f6\3\2\2\2\u07f6\u07f7\5\u011a\u008e\2\u07f7\u07f9\7\u00f7"+ + "\2\2\u07f8\u07fa\5\u0130\u0099\2\u07f9\u07f8\3\2\2\2\u07f9\u07fa\3\2\2"+ + "\2\u07fa\u0806\3\2\2\2\u07fb\u07fc\7\u00e3\2\2\u07fc\u07fe\7\u00f5\2\2"+ + "\u07fd\u07ff\5\u012e\u0098\2\u07fe\u07fd\3\2\2\2\u07fe\u07ff\3\2\2\2\u07ff"+ + "\u0800\3\2\2\2\u0800\u0801\5\u011a\u008e\2\u0801\u0803\7\u00f7\2\2\u0802"+ + "\u0804\5\u0130\u0099\2\u0803\u0802\3\2\2\2\u0803\u0804\3\2\2\2\u0804\u0806"+ + "\3\2\2\2\u0805\u0771\3\2\2\2\u0805\u077b\3\2\2\2\u0805\u0788\3\2\2\2\u0805"+ + "\u0795\3\2\2\2\u0805\u0799\3\2\2\2\u0805\u079f\3\2\2\2\u0805\u07ad\3\2"+ + "\2\2\u0805\u07b3\3\2\2\2\u0805\u07c1\3\2\2\2\u0805\u07cb\3\2\2\2\u0805"+ + "\u07d5\3\2\2\2\u0805\u07d9\3\2\2\2\u0805\u07dd\3\2\2\2\u0805\u07e7\3\2"+ + "\2\2\u0805\u07f1\3\2\2\2\u0805\u07fb\3\2\2\2\u0806\u012d\3\2\2\2\u0807"+ + "\u0808\t\27\2\2\u0808\u012f\3\2\2\2\u0809\u080a\7\u008c\2\2\u080a\u080c"+ + "\7\u00f5\2\2\u080b\u080d\5\u0132\u009a\2\u080c\u080b\3\2\2\2\u080c\u080d"+ + "\3\2\2\2\u080d\u080f\3\2\2\2\u080e\u0810\5\u00f4{\2\u080f\u080e\3\2\2"+ + "\2\u080f\u0810\3\2\2\2\u0810\u0811\3\2\2\2\u0811\u0812\7\u00f7\2\2\u0812"+ + "\u0131\3\2\2\2\u0813\u0814\7\u008f\2\2\u0814\u0815\7\23\2\2\u0815\u081a"+ + "\5\u014a\u00a6\2\u0816\u0817\7\u00e7\2\2\u0817\u0819\5\u014a\u00a6\2\u0818"+ + "\u0816\3\2\2\2\u0819\u081c\3\2\2\2\u081a\u0818\3\2\2\2\u081a\u081b\3\2"+ + "\2\2\u081b\u0133\3\2\2\2\u081c\u081a\3\2\2\2\u081d\u08d7\7\u00cf\2\2\u081e"+ + "\u081f\7\30\2\2\u081f\u0820\7\u00f5\2\2\u0820\u0821\5\u011a\u008e\2\u0821"+ + "\u0822\7\n\2\2\u0822\u0824\5L\'\2\u0823\u0825\5N(\2\u0824\u0823\3\2\2"+ + "\2\u0824\u0825\3\2\2\2\u0825\u0826\3\2\2\2\u0826\u0827\7\u00f7\2\2\u0827"+ + "\u08d7\3\2\2\2\u0828\u0829\7$\2\2\u0829\u082c\7\u00f5\2\2\u082a\u082d"+ + "\5\u011a\u008e\2\u082b\u082d\7\u00f3\2\2\u082c\u082a\3\2\2\2\u082c\u082b"+ + "\3\2\2\2\u082d\u082e\3\2\2\2\u082e\u08d7\7\u00f7\2\2\u082f\u08d7\7\u00d0"+ + "\2\2\u0830\u0831\7)\2\2\u0831\u08d7\7+\2\2\u0832\u0836\7\u00d1\2\2\u0833"+ + "\u0834\7)\2\2\u0834\u0836\7\u00b9\2\2\u0835\u0832\3\2\2\2\u0835\u0833"+ + "\3\2\2\2\u0836\u083b\3\2\2\2\u0837\u0838\7\u00f5\2\2\u0838\u0839\5\u011a"+ + "\u008e\2\u0839\u083a\7\u00f7\2\2\u083a\u083c\3\2\2\2\u083b\u0837\3\2\2"+ + "\2\u083b\u083c\3\2\2\2\u083c\u08d7\3\2\2\2\u083d\u08d7\7\u00d2\2\2\u083e"+ + "\u083f\7)\2\2\u083f\u08d7\7\u00e4\2\2\u0840\u0841\7\u00d8\2\2\u0841\u0842"+ + "\7\u00f5\2\2\u0842\u084f\5\u011a\u008e\2\u0843\u0844\7\u00e7\2\2\u0844"+ + "\u084c\5\u011a\u008e\2\u0845\u0846\7\u00e7\2\2\u0846\u0847\5\u011a\u008e"+ + "\2\u0847\u0848\7\u00eb\2\2\u0848\u0849\5\u011a\u008e\2\u0849\u084b\3\2"+ + "\2\2\u084a\u0845\3\2\2\2\u084b\u084e\3\2\2\2\u084c\u084a\3\2\2\2\u084c"+ + "\u084d\3\2\2\2\u084d\u0850\3\2\2\2\u084e\u084c\3\2\2\2\u084f\u0843\3\2"+ + "\2\2\u084f\u0850\3\2\2\2\u0850\u0851\3\2\2\2\u0851\u0852\7\u00f7\2\2\u0852"+ + "\u08d7\3\2\2\2\u0853\u0854\7\u00d9\2\2\u0854\u0855\7\u00f5\2\2\u0855\u0862"+ + "\5\u011a\u008e\2\u0856\u0857\7\u00e7\2\2\u0857\u085f\5\u011a\u008e\2\u0858"+ + "\u0859\7\u00e7\2\2\u0859\u085a\5\u011a\u008e\2\u085a\u085b\7\u00eb\2\2"+ + "\u085b\u085c\5\u011a\u008e\2\u085c\u085e\3\2\2\2\u085d\u0858\3\2\2\2\u085e"+ + "\u0861\3\2\2\2\u085f\u085d\3\2\2\2\u085f\u0860\3\2\2\2\u0860\u0863\3\2"+ + "\2\2\u0861\u085f\3\2\2\2\u0862\u0856\3\2\2\2\u0862\u0863\3\2\2\2\u0863"+ + "\u0864\3\2\2\2\u0864\u0865\7\u00f7\2\2\u0865\u08d7\3\2\2\2\u0866\u0867"+ + "\7\u00da\2\2\u0867\u0868\7\u00f5\2\2\u0868\u0875\5\u011a\u008e\2\u0869"+ + "\u086a\7\u00e7\2\2\u086a\u0872\5\u011a\u008e\2\u086b\u086c\7\u00e7\2\2"+ + "\u086c\u086d\5\u011a\u008e\2\u086d\u086e\7\u00eb\2\2\u086e\u086f\5\u011a"+ + "\u008e\2\u086f\u0871\3\2\2\2\u0870\u086b\3\2\2\2\u0871\u0874\3\2\2\2\u0872"+ + "\u0870\3\2\2\2\u0872\u0873\3\2\2\2\u0873\u0876\3\2\2\2\u0874\u0872\3\2"+ + "\2\2\u0875\u0869\3\2\2\2\u0875\u0876\3\2\2\2\u0876\u0877\3\2\2\2\u0877"+ + "\u0878\7\u00f7\2\2\u0878\u08d7\3\2\2\2\u0879\u087a\7\u00db\2\2\u087a\u087b"+ + "\7\u00f5\2\2\u087b\u0888\5\u011a\u008e\2\u087c\u087d\7\u00e7\2\2\u087d"+ + "\u0885\5\u011a\u008e\2\u087e\u087f\7\u00e7\2\2\u087f\u0880\5\u011a\u008e"+ + "\2\u0880\u0881\7\u00eb\2\2\u0881\u0882\5\u011a\u008e\2\u0882\u0884\3\2"+ + "\2\2\u0883\u087e\3\2\2\2\u0884\u0887\3\2\2\2\u0885\u0883\3\2\2\2\u0885"+ + "\u0886\3\2\2\2\u0886\u0889\3\2\2\2\u0887\u0885\3\2\2\2\u0888\u087c\3\2"+ + "\2\2\u0888\u0889\3\2\2\2\u0889\u088a\3\2\2\2\u088a\u088b\7\u00f7\2\2\u088b"+ + "\u08d7\3\2\2\2\u088c\u088d\7\u00dc\2\2\u088d\u088e\7\u00f5\2\2\u088e\u089b"+ + "\5\u011a\u008e\2\u088f\u0890\7\u00e7\2\2\u0890\u0898\5\u011a\u008e\2\u0891"+ + "\u0892\7\u00e7\2\2\u0892\u0893\5\u011a\u008e\2\u0893\u0894\7\u00eb\2\2"+ + "\u0894\u0895\5\u011a\u008e\2\u0895\u0897\3\2\2\2\u0896\u0891\3\2\2\2\u0897"+ + "\u089a\3\2\2\2\u0898\u0896\3\2\2\2\u0898\u0899\3\2\2\2\u0899\u089c\3\2"+ + "\2\2\u089a\u0898\3\2\2\2\u089b\u088f\3\2\2\2\u089b\u089c\3\2\2\2\u089c"+ + "\u089d\3\2\2\2\u089d\u089e\7\u00f7\2\2\u089e\u08d7\3\2\2\2\u089f\u08a0"+ + "\7\u00dd\2\2\u08a0\u08a1\7\u00f5\2\2\u08a1\u08ae\5\u011a\u008e\2\u08a2"+ + "\u08a3\7\u00e7\2\2\u08a3\u08ab\5\u011a\u008e\2\u08a4\u08a5\7\u00e7\2\2"+ + "\u08a5\u08a6\5\u011a\u008e\2\u08a6\u08a7\7\u00eb\2\2\u08a7\u08a8\5\u011a"+ + "\u008e\2\u08a8\u08aa\3\2\2\2\u08a9\u08a4\3\2\2\2\u08aa\u08ad\3\2\2\2\u08ab"+ + "\u08a9\3\2\2\2\u08ab\u08ac\3\2\2\2\u08ac\u08af\3\2\2\2\u08ad\u08ab\3\2"+ + "\2\2\u08ae\u08a2\3\2\2\2\u08ae\u08af\3\2\2\2\u08af\u08b0\3\2\2\2\u08b0"+ + "\u08b1\7\u00f7\2\2\u08b1\u08d7\3\2\2\2\u08b2\u08b3\7\u00de\2\2\u08b3\u08b4"+ + "\7\u00f5\2\2\u08b4\u08ba\5\u011a\u008e\2\u08b5\u08b6\7\u00e7\2\2\u08b6"+ + "\u08b7\5\u011a\u008e\2\u08b7\u08b8\7\u00eb\2\2\u08b8\u08b9\5\u011a\u008e"+ + "\2\u08b9\u08bb\3\2\2\2\u08ba\u08b5\3\2\2\2\u08bb\u08bc\3\2\2\2\u08bc\u08ba"+ + "\3\2\2\2\u08bc\u08bd\3\2\2\2\u08bd\u08c0\3\2\2\2\u08be\u08bf\7\u00e7\2"+ + "\2\u08bf\u08c1\5\u011a\u008e\2\u08c0\u08be\3\2\2\2\u08c0\u08c1\3\2\2\2"+ + "\u08c1\u08c2\3\2\2\2\u08c2\u08c3\7\u00f7\2\2\u08c3\u08d7\3\2\2\2\u08c4"+ + "\u08c5\7\u00a4\2\2\u08c5\u08c6\7\u00f5\2\2\u08c6\u08c7\5\u011a\u008e\2"+ + "\u08c7\u08c8\7\u00f7\2\2\u08c8\u08d7\3\2\2\2\u08c9\u08ca\7\u00b3\2\2\u08ca"+ + "\u08cb\7\u00f5\2\2\u08cb\u08cc\5\u011a\u008e\2\u08cc\u08cd\7P\2\2\u08cd"+ + "\u08d0\5\u011a\u008e\2\u08ce\u08cf\7M\2\2\u08cf\u08d1\5\u011a\u008e\2"+ + "\u08d0\u08ce\3\2\2\2\u08d0\u08d1\3\2\2\2\u08d1\u08d2\3\2\2\2\u08d2\u08d3"+ + "\7\u00f7\2\2\u08d3\u08d7\3\2\2\2\u08d4\u08d7\7\u00e2\2\2\u08d5\u08d7\7"+ + "\u00e4\2\2\u08d6\u081d\3\2\2\2\u08d6\u081e\3\2\2\2\u08d6\u0828\3\2\2\2"+ + "\u08d6\u082f\3\2\2\2\u08d6\u0830\3\2\2\2\u08d6\u0835\3\2\2\2\u08d6\u083d"+ + "\3\2\2\2\u08d6\u083e\3\2\2\2\u08d6\u0840\3\2\2\2\u08d6\u0853\3\2\2\2\u08d6"+ + "\u0866\3\2\2\2\u08d6\u0879\3\2\2\2\u08d6\u088c\3\2\2\2\u08d6\u089f\3\2"+ + "\2\2\u08d6\u08b2\3\2\2\2\u08d6\u08c4\3\2\2\2\u08d6\u08c9\3\2\2\2\u08d6"+ + "\u08d4\3\2\2\2\u08d6\u08d5\3\2\2\2\u08d7\u0135\3\2\2\2\u08d8\u08d9\5\u014a"+ + "\u00a6\2\u08d9\u08da\5\u0138\u009d\2\u08da\u0137\3\2\2\2\u08db\u08e4\7"+ + "\u00f5\2\2\u08dc\u08e1\5\u011a\u008e\2\u08dd\u08de\7\u00e7\2\2\u08de\u08e0"+ + "\5\u011a\u008e\2\u08df\u08dd\3\2\2\2\u08e0\u08e3\3\2\2\2\u08e1\u08df\3"+ + "\2\2\2\u08e1\u08e2\3\2\2\2\u08e2\u08e5\3\2\2\2\u08e3\u08e1\3\2\2\2\u08e4"+ + "\u08dc\3\2\2\2\u08e4\u08e5\3\2\2\2\u08e5\u08e6\3\2\2\2\u08e6\u08e7\7\u00f7"+ + "\2\2\u08e7\u0139\3\2\2\2\u08e8\u08ec\7Z\2\2\u08e9\u08eb\5\u013c\u009f"+ + "\2\u08ea\u08e9\3\2\2\2\u08eb\u08ee\3\2\2\2\u08ec\u08ea\3\2\2\2\u08ec\u08ed"+ + "\3\2\2\2\u08ed\u013b\3\2\2\2\u08ee\u08ec\3\2\2\2\u08ef\u08f0\7\u00fa\2"+ + "\2\u08f0\u08fc\5\u011a\u008e\2\u08f1\u08f2\7\u00fb\2\2\u08f2\u08fc\5\u011a"+ + "\u008e\2\u08f3\u08f4\7\u00fc\2\2\u08f4\u08f5\7\u0100\2\2\u08f5\u08f6\7"+ + "\u00eb\2\2\u08f6\u08fc\5\u011a\u008e\2\u08f7\u08f8\7\u00fd\2\2\u08f8\u08fc"+ + "\5\u011a\u008e\2\u08f9\u08fc\7\u00fe\2\2\u08fa\u08fc\7\u00ff\2\2\u08fb"+ + "\u08ef\3\2\2\2\u08fb\u08f1\3\2\2\2\u08fb\u08f3\3\2\2\2\u08fb\u08f7\3\2"+ + "\2\2\u08fb\u08f9\3\2\2\2\u08fb\u08fa\3\2\2\2\u08fc\u013d\3\2\2\2\u08fd"+ + "\u08fe\7\6\2\2\u08fe\u08ff\5\u0140\u00a1\2\u08ff\u0900\7\u00f8\2\2\u0900"+ + "\u0903\3\2\2\2\u0901\u0903\5\u0142\u00a2\2\u0902\u08fd\3\2\2\2\u0902\u0901"+ + "\3\2\2\2\u0903\u013f\3\2\2\2\u0904\u0906\13\2\2\2\u0905\u0904\3\2\2\2"+ + "\u0906\u0909\3\2\2\2\u0907\u0908\3\2\2\2\u0907\u0905\3\2\2\2\u0908\u0141"+ + "\3\2\2\2\u0909\u0907\3\2\2\2\u090a\u090b\7[\2\2\u090b\u090c\5\u011a\u008e"+ + "\2\u090c\u0143\3\2\2\2\u090d\u090e\t\36\2\2\u090e\u0145\3\2\2\2\u090f"+ + "\u0910\7+\2\2\u0910\u0911\5\u014c\u00a7\2\u0911\u0147\3\2\2\2\u0912\u0913"+ + "\7\u00b9\2\2\u0913\u0914\5\u014c\u00a7\2\u0914\u0149\3\2\2\2\u0915\u0918"+ + "\7\u0100\2\2\u0916\u0918\5\u0154\u00ab\2\u0917\u0915\3\2\2\2\u0917\u0916"+ + "\3\2\2\2\u0918\u014b\3\2\2\2\u0919\u091c\7\u0101\2\2\u091a\u091c\7\u0102"+ + "\2\2\u091b\u0919\3\2\2\2\u091b\u091a\3\2\2\2\u091c\u014d\3\2\2\2\u091d"+ + "\u091f\t\37\2\2\u091e\u091d\3\2\2\2\u091e\u091f\3\2\2\2\u091f\u0920\3"+ + "\2\2\2\u0920\u0921\7\u0103\2\2\u0921\u014f\3\2\2\2\u0922\u0924\t\37\2"+ + "\2\u0923\u0922\3\2\2\2\u0923\u0924\3\2\2\2\u0924\u0925\3\2\2\2\u0925\u0926"+ + "\7\u0104\2\2\u0926\u0151\3\2\2\2\u0927\u0928\7\u0082\2\2\u0928\u0153\3"+ + "\2\2\2\u0929\u092a\t \2\2\u092a\u0155\3\2\2\2\u0122\u015a\u015c\u015f"+ + "\u0164\u016e\u0170\u019e\u01a6\u01b1\u01b8\u01be\u01c2\u01cd\u01d2\u01db"+ + "\u01e7\u01ec\u01ef\u01fb\u0203\u020e\u0216\u021d\u0221\u0225\u022a\u022e"+ + "\u0238\u023b\u0240\u0247\u024b\u024d\u0257\u025c\u0265\u026c\u0273\u0279"+ + "\u027c\u0284\u028b\u0291\u0296\u029a\u02a0\u02a4\u02a9\u02b3\u02bb\u02c3"+ + "\u02d2\u02da\u02e4\u02ee\u0302\u030a\u0312\u0315\u0318\u031e\u0324\u0327"+ + "\u032e\u0335\u033b\u033e\u0344\u0347\u034a\u0350\u0358\u035b\u0364\u0369"+ + "\u036e\u0372\u037a\u037e\u0383\u0387\u0389\u038e\u0399\u039f\u03a5\u03ae"+ + "\u03b1\u03b4\u03b8\u03c1\u03c5\u03cf\u03e1\u03e3\u03e7\u03eb\u03f3\u03fe"+ + "\u0407\u040e\u0412\u041a\u042c\u0439\u0440\u0444\u044b\u044d\u0451\u045a"+ + "\u0468\u0470\u0479\u0480\u0486\u048b\u0495\u049b\u049f\u04ab\u04b2\u04bb"+ + "\u04c0\u04c7\u04c9\u04cd\u04d1\u04db\u04e2\u04e6\u04ea\u04f1\u04f5\u04fd"+ + "\u0503\u0507\u0512\u0519\u0526\u052e\u0532\u053c\u0541\u054e\u0559\u0561"+ + "\u0565\u0569\u056d\u056f\u0574\u0577\u057a\u057d\u0580\u0583\u0586\u0589"+ + "\u058c\u0593\u059d\u05a0\u05a3\u05aa\u05ae\u05b8\u05c0\u05c6\u05ca\u05d0"+ + "\u05d9\u05df\u05e2\u05ec\u05f1\u05fa\u05ff\u0603\u060c\u0610\u061e\u0628"+ + "\u062d\u0631\u0637\u063d\u0647\u064b\u064e\u0655\u0658\u065b\u066a\u0671"+ + "\u0674\u0677\u067b\u0680\u0686\u068a\u0695\u0699\u069d\u06a1\u06a4\u06a7"+ + "\u06af\u06b7\u06bc\u06c1\u06cd\u06d1\u06da\u06de\u06e8\u06ed\u0703\u0706"+ + "\u0713\u0723\u0725\u0730\u073e\u074a\u074e\u0759\u075d\u0769\u076d\u0774"+ + "\u0779\u077e\u0782\u0786\u078b\u078f\u0793\u07a6\u07a8\u07ba\u07bc\u07c4"+ + "\u07c9\u07ce\u07d3\u07e0\u07e5\u07ea\u07ef\u07f4\u07f9\u07fe\u0803\u0805"+ + "\u080c\u080f\u081a\u0824\u082c\u0835\u083b\u084c\u084f\u085f\u0862\u0872"+ + "\u0875\u0885\u0888\u0898\u089b\u08ab\u08ae\u08bc\u08c0\u08d0\u08d6\u08e1"+ + "\u08e4\u08ec\u08fb\u0902\u0907\u0917\u091b\u091e\u0923"; + public static final ATN _ATN = + new ATNDeserializer().deserialize(_serializedATN.toCharArray()); + static { + _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()]; + for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) { + _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i); + } + } +} \ No newline at end of file diff --git hplsql/src/main/java/org/apache/hive/hplsql/HplsqlVisitor.java hplsql/src/main/java/org/apache/hive/hplsql/HplsqlVisitor.java new file mode 100644 index 0000000..27c072c --- /dev/null +++ hplsql/src/main/java/org/apache/hive/hplsql/HplsqlVisitor.java @@ -0,0 +1,1044 @@ +// Generated from ..\src\main\java\org\apache\hive\hplsql\Hplsql.q by ANTLR 4.5 + +package org.apache.hive.hplsql; + +import org.antlr.v4.runtime.misc.NotNull; +import org.antlr.v4.runtime.tree.ParseTreeVisitor; + +/** + * This interface defines a complete generic visitor for a parse tree produced + * by {@link HplsqlParser}. + * + * @param The return type of the visit operation. Use {@link Void} for + * operations with no return type. + */ +public interface HplsqlVisitor extends ParseTreeVisitor { + /** + * Visit a parse tree produced by {@link HplsqlParser#program}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitProgram(HplsqlParser.ProgramContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#block}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitBlock(HplsqlParser.BlockContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#begin_end_block}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitBegin_end_block(HplsqlParser.Begin_end_blockContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#single_block_stmt}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSingle_block_stmt(HplsqlParser.Single_block_stmtContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#stmt}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitStmt(HplsqlParser.StmtContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#semicolon_stmt}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSemicolon_stmt(HplsqlParser.Semicolon_stmtContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#exception_block}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitException_block(HplsqlParser.Exception_blockContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#exception_block_item}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitException_block_item(HplsqlParser.Exception_block_itemContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#expr_stmt}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitExpr_stmt(HplsqlParser.Expr_stmtContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#assignment_stmt}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAssignment_stmt(HplsqlParser.Assignment_stmtContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#assignment_stmt_item}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAssignment_stmt_item(HplsqlParser.Assignment_stmt_itemContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#assignment_stmt_single_item}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAssignment_stmt_single_item(HplsqlParser.Assignment_stmt_single_itemContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#assignment_stmt_multiple_item}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAssignment_stmt_multiple_item(HplsqlParser.Assignment_stmt_multiple_itemContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#assignment_stmt_select_item}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAssignment_stmt_select_item(HplsqlParser.Assignment_stmt_select_itemContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#break_stmt}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitBreak_stmt(HplsqlParser.Break_stmtContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#call_stmt}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCall_stmt(HplsqlParser.Call_stmtContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#declare_stmt}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDeclare_stmt(HplsqlParser.Declare_stmtContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#declare_block}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDeclare_block(HplsqlParser.Declare_blockContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#declare_stmt_item}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDeclare_stmt_item(HplsqlParser.Declare_stmt_itemContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#declare_var_item}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDeclare_var_item(HplsqlParser.Declare_var_itemContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#declare_condition_item}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDeclare_condition_item(HplsqlParser.Declare_condition_itemContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#declare_cursor_item}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDeclare_cursor_item(HplsqlParser.Declare_cursor_itemContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#declare_cursor_return}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDeclare_cursor_return(HplsqlParser.Declare_cursor_returnContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#declare_handler_item}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDeclare_handler_item(HplsqlParser.Declare_handler_itemContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#declare_temporary_table_item}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDeclare_temporary_table_item(HplsqlParser.Declare_temporary_table_itemContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#create_table_stmt}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCreate_table_stmt(HplsqlParser.Create_table_stmtContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#create_local_temp_table_stmt}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCreate_local_temp_table_stmt(HplsqlParser.Create_local_temp_table_stmtContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#create_table_columns}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCreate_table_columns(HplsqlParser.Create_table_columnsContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#create_table_columns_item}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCreate_table_columns_item(HplsqlParser.Create_table_columns_itemContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#create_table_column_inline_cons}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCreate_table_column_inline_cons(HplsqlParser.Create_table_column_inline_consContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#create_table_column_cons}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCreate_table_column_cons(HplsqlParser.Create_table_column_consContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#create_table_options}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCreate_table_options(HplsqlParser.Create_table_optionsContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#create_table_options_item}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCreate_table_options_item(HplsqlParser.Create_table_options_itemContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#create_table_options_db2_item}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCreate_table_options_db2_item(HplsqlParser.Create_table_options_db2_itemContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#create_table_options_hive_item}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCreate_table_options_hive_item(HplsqlParser.Create_table_options_hive_itemContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#create_table_hive_row_format}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCreate_table_hive_row_format(HplsqlParser.Create_table_hive_row_formatContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#create_table_hive_row_format_fields}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCreate_table_hive_row_format_fields(HplsqlParser.Create_table_hive_row_format_fieldsContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#dtype}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDtype(HplsqlParser.DtypeContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#dtype_len}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDtype_len(HplsqlParser.Dtype_lenContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#dtype_attr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDtype_attr(HplsqlParser.Dtype_attrContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#dtype_default}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDtype_default(HplsqlParser.Dtype_defaultContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#create_function_stmt}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCreate_function_stmt(HplsqlParser.Create_function_stmtContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#create_function_return}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCreate_function_return(HplsqlParser.Create_function_returnContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#create_procedure_stmt}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCreate_procedure_stmt(HplsqlParser.Create_procedure_stmtContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#create_routine_params}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCreate_routine_params(HplsqlParser.Create_routine_paramsContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#create_routine_param_item}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCreate_routine_param_item(HplsqlParser.Create_routine_param_itemContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#create_routine_options}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCreate_routine_options(HplsqlParser.Create_routine_optionsContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#create_routine_option}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCreate_routine_option(HplsqlParser.Create_routine_optionContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#drop_stmt}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDrop_stmt(HplsqlParser.Drop_stmtContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#exec_stmt}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitExec_stmt(HplsqlParser.Exec_stmtContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#if_stmt}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitIf_stmt(HplsqlParser.If_stmtContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#if_plsql_stmt}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitIf_plsql_stmt(HplsqlParser.If_plsql_stmtContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#if_tsql_stmt}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitIf_tsql_stmt(HplsqlParser.If_tsql_stmtContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#elseif_block}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitElseif_block(HplsqlParser.Elseif_blockContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#else_block}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitElse_block(HplsqlParser.Else_blockContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#include_stmt}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitInclude_stmt(HplsqlParser.Include_stmtContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#insert_stmt}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitInsert_stmt(HplsqlParser.Insert_stmtContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#insert_stmt_cols}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitInsert_stmt_cols(HplsqlParser.Insert_stmt_colsContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#insert_stmt_rows}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitInsert_stmt_rows(HplsqlParser.Insert_stmt_rowsContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#insert_stmt_row}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitInsert_stmt_row(HplsqlParser.Insert_stmt_rowContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#exit_stmt}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitExit_stmt(HplsqlParser.Exit_stmtContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#get_diag_stmt}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitGet_diag_stmt(HplsqlParser.Get_diag_stmtContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#get_diag_stmt_item}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitGet_diag_stmt_item(HplsqlParser.Get_diag_stmt_itemContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#get_diag_stmt_exception_item}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitGet_diag_stmt_exception_item(HplsqlParser.Get_diag_stmt_exception_itemContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#get_diag_stmt_rowcount_item}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitGet_diag_stmt_rowcount_item(HplsqlParser.Get_diag_stmt_rowcount_itemContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#grant_stmt}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitGrant_stmt(HplsqlParser.Grant_stmtContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#grant_stmt_item}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitGrant_stmt_item(HplsqlParser.Grant_stmt_itemContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#leave_stmt}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitLeave_stmt(HplsqlParser.Leave_stmtContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#map_object_stmt}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitMap_object_stmt(HplsqlParser.Map_object_stmtContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#open_stmt}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitOpen_stmt(HplsqlParser.Open_stmtContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#fetch_stmt}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFetch_stmt(HplsqlParser.Fetch_stmtContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#close_stmt}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitClose_stmt(HplsqlParser.Close_stmtContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#copy_from_local_stmt}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCopy_from_local_stmt(HplsqlParser.Copy_from_local_stmtContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#copy_stmt}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCopy_stmt(HplsqlParser.Copy_stmtContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#copy_source}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCopy_source(HplsqlParser.Copy_sourceContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#copy_target}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCopy_target(HplsqlParser.Copy_targetContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#copy_option}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCopy_option(HplsqlParser.Copy_optionContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#copy_file_option}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCopy_file_option(HplsqlParser.Copy_file_optionContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#commit_stmt}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCommit_stmt(HplsqlParser.Commit_stmtContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#create_index_stmt}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCreate_index_stmt(HplsqlParser.Create_index_stmtContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#create_index_col}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCreate_index_col(HplsqlParser.Create_index_colContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#print_stmt}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPrint_stmt(HplsqlParser.Print_stmtContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#resignal_stmt}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitResignal_stmt(HplsqlParser.Resignal_stmtContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#return_stmt}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitReturn_stmt(HplsqlParser.Return_stmtContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#rollback_stmt}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitRollback_stmt(HplsqlParser.Rollback_stmtContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#signal_stmt}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSignal_stmt(HplsqlParser.Signal_stmtContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#use_stmt}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitUse_stmt(HplsqlParser.Use_stmtContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#values_into_stmt}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitValues_into_stmt(HplsqlParser.Values_into_stmtContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#while_stmt}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitWhile_stmt(HplsqlParser.While_stmtContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#for_cursor_stmt}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFor_cursor_stmt(HplsqlParser.For_cursor_stmtContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#for_range_stmt}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFor_range_stmt(HplsqlParser.For_range_stmtContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#label}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitLabel(HplsqlParser.LabelContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#using_clause}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitUsing_clause(HplsqlParser.Using_clauseContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#select_stmt}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSelect_stmt(HplsqlParser.Select_stmtContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#cte_select_stmt}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCte_select_stmt(HplsqlParser.Cte_select_stmtContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#cte_select_stmt_item}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCte_select_stmt_item(HplsqlParser.Cte_select_stmt_itemContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#cte_select_cols}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCte_select_cols(HplsqlParser.Cte_select_colsContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#fullselect_stmt}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFullselect_stmt(HplsqlParser.Fullselect_stmtContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#fullselect_stmt_item}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFullselect_stmt_item(HplsqlParser.Fullselect_stmt_itemContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#fullselect_set_clause}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFullselect_set_clause(HplsqlParser.Fullselect_set_clauseContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#subselect_stmt}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSubselect_stmt(HplsqlParser.Subselect_stmtContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#select_list}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSelect_list(HplsqlParser.Select_listContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#select_list_set}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSelect_list_set(HplsqlParser.Select_list_setContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#select_list_limit}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSelect_list_limit(HplsqlParser.Select_list_limitContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#select_list_item}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSelect_list_item(HplsqlParser.Select_list_itemContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#select_list_alias}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSelect_list_alias(HplsqlParser.Select_list_aliasContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#select_list_asterisk}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSelect_list_asterisk(HplsqlParser.Select_list_asteriskContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#into_clause}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitInto_clause(HplsqlParser.Into_clauseContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#from_clause}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFrom_clause(HplsqlParser.From_clauseContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#from_table_clause}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFrom_table_clause(HplsqlParser.From_table_clauseContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#from_table_name_clause}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFrom_table_name_clause(HplsqlParser.From_table_name_clauseContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#from_subselect_clause}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFrom_subselect_clause(HplsqlParser.From_subselect_clauseContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#from_join_clause}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFrom_join_clause(HplsqlParser.From_join_clauseContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#from_join_type_clause}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFrom_join_type_clause(HplsqlParser.From_join_type_clauseContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#from_table_values_clause}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFrom_table_values_clause(HplsqlParser.From_table_values_clauseContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#from_table_values_row}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFrom_table_values_row(HplsqlParser.From_table_values_rowContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#from_alias_clause}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFrom_alias_clause(HplsqlParser.From_alias_clauseContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#table_name}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTable_name(HplsqlParser.Table_nameContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#where_clause}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitWhere_clause(HplsqlParser.Where_clauseContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#group_by_clause}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitGroup_by_clause(HplsqlParser.Group_by_clauseContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#having_clause}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitHaving_clause(HplsqlParser.Having_clauseContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#order_by_clause}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitOrder_by_clause(HplsqlParser.Order_by_clauseContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#select_options}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSelect_options(HplsqlParser.Select_optionsContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#select_options_item}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSelect_options_item(HplsqlParser.Select_options_itemContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#update_stmt}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitUpdate_stmt(HplsqlParser.Update_stmtContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#update_table}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitUpdate_table(HplsqlParser.Update_tableContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#update_upsert}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitUpdate_upsert(HplsqlParser.Update_upsertContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#merge_stmt}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitMerge_stmt(HplsqlParser.Merge_stmtContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#merge_table}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitMerge_table(HplsqlParser.Merge_tableContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#merge_condition}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitMerge_condition(HplsqlParser.Merge_conditionContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#merge_action}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitMerge_action(HplsqlParser.Merge_actionContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#delete_stmt}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDelete_stmt(HplsqlParser.Delete_stmtContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#bool_expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitBool_expr(HplsqlParser.Bool_exprContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#bool_expr_atom}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitBool_expr_atom(HplsqlParser.Bool_expr_atomContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#bool_expr_unary}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitBool_expr_unary(HplsqlParser.Bool_expr_unaryContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#bool_expr_single_in}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitBool_expr_single_in(HplsqlParser.Bool_expr_single_inContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#bool_expr_multi_in}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitBool_expr_multi_in(HplsqlParser.Bool_expr_multi_inContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#bool_expr_binary}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitBool_expr_binary(HplsqlParser.Bool_expr_binaryContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#bool_expr_logical_operator}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitBool_expr_logical_operator(HplsqlParser.Bool_expr_logical_operatorContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#bool_expr_binary_operator}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitBool_expr_binary_operator(HplsqlParser.Bool_expr_binary_operatorContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitExpr(HplsqlParser.ExprContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#expr_atom}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitExpr_atom(HplsqlParser.Expr_atomContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#interval_item}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitInterval_item(HplsqlParser.Interval_itemContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#interval_number}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitInterval_number(HplsqlParser.Interval_numberContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#expr_concat}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitExpr_concat(HplsqlParser.Expr_concatContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#expr_concat_item}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitExpr_concat_item(HplsqlParser.Expr_concat_itemContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#expr_case}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitExpr_case(HplsqlParser.Expr_caseContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#expr_case_simple}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitExpr_case_simple(HplsqlParser.Expr_case_simpleContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#expr_case_searched}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitExpr_case_searched(HplsqlParser.Expr_case_searchedContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#expr_agg_window_func}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitExpr_agg_window_func(HplsqlParser.Expr_agg_window_funcContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#expr_func_all_distinct}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitExpr_func_all_distinct(HplsqlParser.Expr_func_all_distinctContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#expr_func_over_clause}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitExpr_func_over_clause(HplsqlParser.Expr_func_over_clauseContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#expr_func_partition_by_clause}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitExpr_func_partition_by_clause(HplsqlParser.Expr_func_partition_by_clauseContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#expr_spec_func}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitExpr_spec_func(HplsqlParser.Expr_spec_funcContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#expr_func}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitExpr_func(HplsqlParser.Expr_funcContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#expr_func_params}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitExpr_func_params(HplsqlParser.Expr_func_paramsContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#hive}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitHive(HplsqlParser.HiveContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#hive_item}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitHive_item(HplsqlParser.Hive_itemContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#host}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitHost(HplsqlParser.HostContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#host_cmd}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitHost_cmd(HplsqlParser.Host_cmdContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#host_stmt}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitHost_stmt(HplsqlParser.Host_stmtContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#file_name}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFile_name(HplsqlParser.File_nameContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#date_literal}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDate_literal(HplsqlParser.Date_literalContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#timestamp_literal}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTimestamp_literal(HplsqlParser.Timestamp_literalContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#ident}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitIdent(HplsqlParser.IdentContext ctx); + /** + * Visit a parse tree produced by the {@code single_quotedString} + * labeled alternative in {@link HplsqlParser#string}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSingle_quotedString(HplsqlParser.Single_quotedStringContext ctx); + /** + * Visit a parse tree produced by the {@code double_quotedString} + * labeled alternative in {@link HplsqlParser#string}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDouble_quotedString(HplsqlParser.Double_quotedStringContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#int_number}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitInt_number(HplsqlParser.Int_numberContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#dec_number}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDec_number(HplsqlParser.Dec_numberContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#null_const}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitNull_const(HplsqlParser.Null_constContext ctx); + /** + * Visit a parse tree produced by {@link HplsqlParser#non_reserved_words}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitNon_reserved_words(HplsqlParser.Non_reserved_wordsContext ctx); +} \ No newline at end of file diff --git hplsql/src/main/java/org/apache/hive/hplsql/Interval.java hplsql/src/main/java/org/apache/hive/hplsql/Interval.java new file mode 100644 index 0000000..92c5d52 --- /dev/null +++ hplsql/src/main/java/org/apache/hive/hplsql/Interval.java @@ -0,0 +1,109 @@ +/** + * 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. + */ + +package org.apache.hive.hplsql; + +import java.sql.Date; +import java.sql.Timestamp; +import java.util.Calendar; + +/** + * Date and time interval + */ +public class Interval { + int days = 0; + int milliseconds = 0; + + /** + * Add or subtract interval value to the specified date + */ + public Date dateChange(Date in, boolean add) { + Calendar c = Calendar.getInstance(); + c.setTimeInMillis(in.getTime()); + calendarChange(c, add); + return new Date(c.getTimeInMillis()); + } + + /** + * Add or subtract interval value to the specified timestamp + */ + public Timestamp timestampChange(Timestamp in, boolean add) { + Calendar c = Calendar.getInstance(); + c.setTimeInMillis(in.getTime()); + calendarChange(c, add); + return new Timestamp(c.getTimeInMillis()); + } + + /** + * Add interval value to the specified Calendar value + */ + public Calendar calendarChange(Calendar c, boolean add) { + int a = 1; + if (!add) { + a = -1; + } + if (days != 0) { + c.add(Calendar.DAY_OF_MONTH, days * a); + } + if (milliseconds != 0) { + c.setTimeInMillis(c.getTimeInMillis() + milliseconds * a); + } + return c; + } + + /** + * Set interval value + */ + public Interval set(int value, String item) { + if (item.compareToIgnoreCase("DAYS") == 0 || item.compareToIgnoreCase("DAY") == 0) { + setDays(value); + } + if (item.compareToIgnoreCase("MICROSECONDS") == 0 || item.compareToIgnoreCase("MICROSECOND") == 0) { + setMilliseconds(value); + } + return this; + } + + /** + * Set interval items + */ + public void setDays(int days) { + this.days = days; + } + + public void setMilliseconds(int milliseconds) { + this.milliseconds = milliseconds; + } + + /** + * Convert interval to string + */ + @Override + public String toString() { + StringBuilder s = new StringBuilder(); + if (days != 0) { + s.append(days); + s.append(" days"); + } + if (milliseconds != 0) { + s.append(milliseconds); + s.append(" milliseconds"); + } + return s.toString(); + } +} diff --git hplsql/src/main/java/org/apache/hive/hplsql/Query.java hplsql/src/main/java/org/apache/hive/hplsql/Query.java new file mode 100644 index 0000000..23d963f --- /dev/null +++ hplsql/src/main/java/org/apache/hive/hplsql/Query.java @@ -0,0 +1,155 @@ +/** + * 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. + */ + +package org.apache.hive.hplsql; + +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; + +import org.antlr.v4.runtime.ParserRuleContext; + +public class Query { + String sql; + ParserRuleContext sqlExpr; + ParserRuleContext sqlSelect; + + Connection conn; + Statement stmt; + ResultSet rs; + Exception exception; + + Query() { + } + + Query(String sql) { + this.sql = sql; + } + + /** + * Set query objects + */ + public void set(Connection conn, Statement stmt, ResultSet rs) { + this.conn = conn; + this.stmt = stmt; + this.rs = rs; + } + + /** + * Get the number of rows + */ + public int getRowCount() { + if (!error() && stmt != null) { + try { + return stmt.getUpdateCount(); + } catch (SQLException e) {} + } + return -1; + } + + /** + * Close statement results + */ + public void closeStatement() { + try { + if(rs != null) { + rs.close(); + rs = null; + } + if(stmt != null) { + stmt.close(); + stmt = null; + } + } catch (SQLException e) { + e.printStackTrace(); + } + } + + /** + * Set SQL statement + */ + public void setSql(String sql) { + this.sql = sql; + } + + /** + * Set expression context + */ + public void setExprCtx(ParserRuleContext sqlExpr) { + this.sqlExpr = sqlExpr; + } + + /** + * Set SELECT statement context + */ + public void setSelectCtx(ParserRuleContext sqlSelect) { + this.sqlSelect = sqlSelect; + } + + /** + * Set an execution error + */ + public void setError(Exception e) { + exception = e; + } + + /** + * Print error stack trace + */ + public void printStackTrace() { + if(exception != null) { + exception.printStackTrace(); + } + } + + /** + * Get the result set object + */ + public ResultSet getResultSet() { + return rs; + } + + /** + * Get the connection object + */ + public Connection getConnection() { + return conn; + } + + /** + * Return error information + */ + public boolean error() { + return exception != null; + } + + public String errorText() { + if(exception != null) { + if(exception instanceof ClassNotFoundException) { + return "ClassNotFoundException: " + exception.getMessage(); + } + return exception.getMessage(); + } + return ""; + } + + public Exception getException() { + return exception; + } +} diff --git hplsql/src/main/java/org/apache/hive/hplsql/Scope.java hplsql/src/main/java/org/apache/hive/hplsql/Scope.java new file mode 100644 index 0000000..317a94f --- /dev/null +++ hplsql/src/main/java/org/apache/hive/hplsql/Scope.java @@ -0,0 +1,69 @@ +/** + * 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. + */ + +package org.apache.hive.hplsql; + +import java.util.ArrayList; + +/** + * HPL/SQL block scope + */ +public class Scope { + + // Types + public enum Type { FILE, BEGIN_END, LOOP, HANDLER, ROUTINE }; + + // Local variables + ArrayList vars = new ArrayList(); + // Condition handlers + ArrayList handlers = new ArrayList(); + + Scope parent; + Type type; + + Scope(Type type) { + this.parent = null; + this.type = type; + } + + Scope(Scope parent, Type type) { + this.parent = parent; + this.type = type; + } + + /** + * Add a local variable + */ + void addVariable(Var var) { + vars.add(var); + } + + /** + * Add a condition handler + */ + void addHandler(Handler handler) { + handlers.add(handler); + } + + /** + * Get the parent scope + */ + Scope getParent() { + return parent; + } +} diff --git hplsql/src/main/java/org/apache/hive/hplsql/Select.java hplsql/src/main/java/org/apache/hive/hplsql/Select.java new file mode 100644 index 0000000..e0f4098 --- /dev/null +++ hplsql/src/main/java/org/apache/hive/hplsql/Select.java @@ -0,0 +1,411 @@ +/** + * 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. + */ + +package org.apache.hive.hplsql; + +import java.sql.ResultSet; +import java.sql.ResultSetMetaData; +import java.sql.SQLException; +import java.util.Stack; + +import org.antlr.v4.runtime.ParserRuleContext; +import org.antlr.v4.runtime.misc.Interval; + +public class Select { + + Exec exec = null; + Stack stack = null; + Conf conf; + + boolean trace = false; + + Select(Exec e) { + exec = e; + stack = exec.getStack(); + conf = exec.getConf(); + trace = exec.getTrace(); + } + + /** + * Executing or building SELECT statement + */ + public Integer select(HplsqlParser.Select_stmtContext ctx) { + if (ctx.parent instanceof HplsqlParser.StmtContext) { + exec.stmtConnList.clear(); + trace(ctx, "SELECT"); + } + boolean oldBuildSql = exec.buildSql; + exec.buildSql = true; + StringBuilder sql = new StringBuilder(); + if (ctx.cte_select_stmt() != null) { + sql.append(evalPop(ctx.cte_select_stmt()).toString()); + sql.append("\n"); + } + sql.append(evalPop(ctx.fullselect_stmt()).toString()); + exec.buildSql = oldBuildSql; + if (!(ctx.parent instanceof HplsqlParser.StmtContext)) { // No need to execute at this stage + exec.stackPush(sql); + return 0; + } + if (trace && ctx.parent instanceof HplsqlParser.StmtContext) { + trace(ctx, sql.toString()); + } + if (exec.getOffline()) { + trace(ctx, "Not executed - offline mode set"); + return 0; + } + String conn = exec.getStatementConnection(); + Query query = exec.executeQuery(ctx, sql.toString(), conn); + if (query.error()) { + exec.signal(query); + return 1; + } + trace(ctx, "SELECT completed successfully"); + exec.setSqlSuccess(); + try { + ResultSet rs = query.getResultSet(); + ResultSetMetaData rm = null; + if (rs != null) { + rm = rs.getMetaData(); + } + HplsqlParser.Into_clauseContext into = getIntoClause(ctx); + if (into != null) { + trace(ctx, "SELECT INTO statement executed"); + int cols = into.ident().size(); + if (rs.next()) { + for (int i = 1; i <= cols; i++) { + Var var = exec.findVariable(into.ident(i-1).getText()); + if (var != null) { + var.setValue(rs, rm, i); + if (trace) { + trace(ctx, "COLUMN: " + rm.getColumnName(i) + ", " + rm.getColumnTypeName(i)); + trace(ctx, "SET " + var.getName() + " = " + var.toString()); + } + } + else if(trace) { + trace(ctx, "Variable not found: " + into.ident(i-1).getText()); + } + } + exec.incRowCount(); + exec.setSqlSuccess(); + } + else { + exec.setSqlCode(100); + exec.signal(Signal.Type.NOTFOUND); + } + } + // Print all results for standalone SELECT statement + else if (ctx.parent instanceof HplsqlParser.StmtContext) { + int cols = rm.getColumnCount(); + if (trace) { + trace(ctx, "Standalone SELECT executed: " + cols + " columns in the result set"); + } + while (rs.next()) { + for (int i = 1; i <= cols; i++) { + if (i > 1) { + System.out.print("\t"); + } + System.out.print(rs.getString(i)); + } + System.out.println(""); + exec.incRowCount(); + } + } + // Scalar subquery + else { + trace(ctx, "Scalar subquery executed, first row and first column fetched only"); + if(rs.next()) { + exec.stackPush(new Var().setValue(rs, rm, 1)); + exec.setSqlSuccess(); + } + else { + evalNull(); + exec.setSqlCode(100); + } + } + } + catch (SQLException e) { + exec.signal(query); + exec.closeQuery(query, exec.conf.defaultConnection); + return 1; + } + exec.closeQuery(query, exec.conf.defaultConnection); + return 0; + } + + /** + * Common table expression (WITH clause) + */ + public Integer cte(HplsqlParser.Cte_select_stmtContext ctx) { + int cnt = ctx.cte_select_stmt_item().size(); + StringBuilder sql = new StringBuilder(); + sql.append("WITH "); + for (int i = 0; i < cnt; i++) { + HplsqlParser.Cte_select_stmt_itemContext c = ctx.cte_select_stmt_item(i); + sql.append(c.ident().getText()); + if (c.cte_select_cols() != null) { + sql.append(" " + exec.getFormattedText(c.cte_select_cols())); + } + sql.append(" AS ("); + sql.append(evalPop(ctx.cte_select_stmt_item(i).fullselect_stmt()).toString()); + sql.append(")"); + if (i + 1 != cnt) { + sql.append(",\n"); + } + } + exec.stackPush(sql); + return 0; + } + + /** + * Part of SELECT + */ + public Integer fullselect(HplsqlParser.Fullselect_stmtContext ctx) { + int cnt = ctx.fullselect_stmt_item().size(); + StringBuilder sql = new StringBuilder(); + for (int i = 0; i < cnt; i++) { + String part = evalPop(ctx.fullselect_stmt_item(i)).toString(); + sql.append(part); + if (i + 1 != cnt) { + sql.append("\n" + getText(ctx.fullselect_set_clause(i)) + "\n"); + } + } + exec.stackPush(sql); + return 0; + } + + public Integer subselect(HplsqlParser.Subselect_stmtContext ctx) { + StringBuilder sql = new StringBuilder(); + if (ctx.T_SELECT() != null) { + sql.append(ctx.T_SELECT().getText()); + } + sql.append(" " + evalPop(ctx.select_list())); + if (ctx.from_clause() != null) { + sql.append(" " + evalPop(ctx.from_clause())); + } else { + sql.append(" FROM " + conf.dualTable); + } + if (ctx.where_clause() != null) { + sql.append(" " + evalPop(ctx.where_clause())); + } + if (ctx.group_by_clause() != null) { + sql.append(" " + getText(ctx.group_by_clause())); + } + if (ctx.having_clause() != null) { + sql.append(" " + getText(ctx.having_clause())); + } + if (ctx.order_by_clause() != null) { + sql.append(" " + getText(ctx.order_by_clause())); + } + if (ctx.select_options() != null) { + sql.append(" " + evalPop(ctx.select_options())); + } + if (ctx.select_list().select_list_limit() != null) { + sql.append(" LIMIT " + evalPop(ctx.select_list().select_list_limit().expr())); + } + exec.stackPush(sql); + return 0; + } + + /** + * SELECT list + */ + public Integer selectList(HplsqlParser.Select_listContext ctx) { + StringBuilder sql = new StringBuilder(); + if (ctx.select_list_set() != null) { + sql.append(exec.getText(ctx.select_list_set())).append(" "); + } + int cnt = ctx.select_list_item().size(); + for (int i = 0; i < cnt; i++) { + if (ctx.select_list_item(i).select_list_asterisk() == null) { + sql.append(evalPop(ctx.select_list_item(i))); + if (ctx.select_list_item(i).select_list_alias() != null) { + sql.append(" " + exec.getText(ctx.select_list_item(i).select_list_alias())); + } + } + else { + sql.append(exec.getText(ctx.select_list_item(i).select_list_asterisk())); + } + if (i + 1 < cnt) { + sql.append(", "); + } + } + exec.stackPush(sql); + return 0; + } + + /** + * FROM clause + */ + public Integer from(HplsqlParser.From_clauseContext ctx) { + StringBuilder sql = new StringBuilder(); + sql.append(ctx.T_FROM().getText()).append(" "); + sql.append(evalPop(ctx.from_table_clause())); + int cnt = ctx.from_join_clause().size(); + for (int i = 0; i < cnt; i++) { + sql.append(evalPop(ctx.from_join_clause(i))); + } + exec.stackPush(sql); + return 0; + } + + /** + * Single table name in FROM + */ + public Integer fromTable(HplsqlParser.From_table_name_clauseContext ctx) { + StringBuilder sql = new StringBuilder(); + sql.append(evalPop(ctx.table_name())); + if (ctx.from_alias_clause() != null) { + sql.append(" ").append(exec.getText(ctx.from_alias_clause())); + } + exec.stackPush(sql); + return 0; + } + + /** + * JOIN clause in FROM + */ + public Integer fromJoin(HplsqlParser.From_join_clauseContext ctx) { + StringBuilder sql = new StringBuilder(); + if (ctx.T_COMMA() != null) { + sql.append(", "); + sql.append(evalPop(ctx.from_table_clause())); + } + else if (ctx.from_join_type_clause() != null) { + sql.append(" "); + sql.append(exec.getText(ctx.from_join_type_clause())); + sql.append(" "); + sql.append(evalPop(ctx.from_table_clause())); + sql.append(" "); + sql.append(exec.getText(ctx, ctx.T_ON().getSymbol(), ctx.bool_expr().getStop())); + } + exec.stackPush(sql); + return 0; + } + + /** + * FROM TABLE (VALUES ...) clause + */ + public Integer fromTableValues(HplsqlParser.From_table_values_clauseContext ctx) { + StringBuilder sql = new StringBuilder(); + int rows = ctx.from_table_values_row().size(); + sql.append("("); + for (int i = 0; i < rows; i++) { + int cols = ctx.from_table_values_row(i).expr().size(); + int cols_as = ctx.from_alias_clause().L_ID().size(); + sql.append("SELECT "); + for (int j = 0; j < cols; j++) { + sql.append(evalPop(ctx.from_table_values_row(i).expr(j))); + if (j < cols_as) { + sql.append(" AS "); + sql.append(ctx.from_alias_clause().L_ID(j)); + } + if (j + 1 < cols) { + sql.append(", "); + } + } + sql.append(" FROM " + conf.dualTable); + if (i + 1 < rows) { + sql.append("\nUNION ALL\n"); + } + } + sql.append(") "); + if (ctx.from_alias_clause() != null) { + sql.append(ctx.from_alias_clause().ident().getText()); + } + exec.stackPush(sql); + return 0; + } + + /** + * WHERE clause + */ + public Integer where(HplsqlParser.Where_clauseContext ctx) { + StringBuilder sql = new StringBuilder(); + sql.append(ctx.T_WHERE().getText()); + sql.append(" " + evalPop(ctx.bool_expr())); + exec.stackPush(sql); + return 0; + } + + /** + * Get INTO clause + */ + HplsqlParser.Into_clauseContext getIntoClause(HplsqlParser.Select_stmtContext ctx) { + if (ctx.fullselect_stmt().fullselect_stmt_item(0).subselect_stmt() != null) { + return ctx.fullselect_stmt().fullselect_stmt_item(0).subselect_stmt().into_clause(); + } + return null; + } + + /** + * SELECT statement options - LIMIT n, WITH UR i.e + */ + public Integer option(HplsqlParser.Select_options_itemContext ctx) { + if (ctx.T_LIMIT() != null) { + exec.stackPush("LIMIT " + evalPop(ctx.expr())); + } + return 0; + } + + /** + * Evaluate the expression to NULL + */ + void evalNull() { + exec.stackPush(Var.Null); + } + + /** + * Evaluate the expression and pop value from the stack + */ + Var evalPop(ParserRuleContext ctx) { + exec.visit(ctx); + if (!exec.stack.isEmpty()) { + return exec.stackPop(); + } + return Var.Empty; + } + + /** + * Get node text including spaces + */ + String getText(ParserRuleContext ctx) { + return ctx.start.getInputStream().getText(new Interval(ctx.start.getStartIndex(), ctx.stop.getStopIndex())); + } + + /** + * Execute rules + */ + Integer visit(ParserRuleContext ctx) { + return exec.visit(ctx); + } + + /** + * Execute children rules + */ + Integer visitChildren(ParserRuleContext ctx) { + return exec.visitChildren(ctx); + } + + /** + * Trace information + */ + void trace(ParserRuleContext ctx, String message) { + exec.trace(ctx, message); + } +} \ No newline at end of file diff --git hplsql/src/main/java/org/apache/hive/hplsql/Signal.java hplsql/src/main/java/org/apache/hive/hplsql/Signal.java new file mode 100644 index 0000000..6330ae3 --- /dev/null +++ hplsql/src/main/java/org/apache/hive/hplsql/Signal.java @@ -0,0 +1,48 @@ +/** + * 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. + */ + +package org.apache.hive.hplsql; + +/** + * Signals and exceptions + */ +public class Signal { + public enum Type { LEAVE_LOOP, LEAVE_ROUTINE, SQLEXCEPTION, NOTFOUND, USERDEFINED }; + Type type; + String value = ""; + Exception exception = null; + + Signal(Type type, String value) { + this.type = type; + this.value = value; + this.exception = null; + } + + Signal(Type type, String value, Exception exception) { + this.type = type; + this.value = value; + this.exception = exception; + } + + /** + * Get the signal value (message text) + */ + public String getValue() { + return value; + } +} diff --git hplsql/src/main/java/org/apache/hive/hplsql/Stmt.java hplsql/src/main/java/org/apache/hive/hplsql/Stmt.java new file mode 100644 index 0000000..acc4907 --- /dev/null +++ hplsql/src/main/java/org/apache/hive/hplsql/Stmt.java @@ -0,0 +1,1021 @@ +/** + * 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. + */ + +package org.apache.hive.hplsql; + +import java.sql.ResultSet; +import java.sql.ResultSetMetaData; +import java.sql.SQLException; +import java.util.Stack; +import java.util.UUID; + +import org.antlr.v4.runtime.ParserRuleContext; +import org.apache.hive.hplsql.Var.Type; +import org.apache.hive.hplsql.HplsqlParser.Create_table_columns_itemContext; +import org.apache.hive.hplsql.HplsqlParser.Create_table_columnsContext; + +/** + * HPL/SQL statements execution + */ +public class Stmt { + + Exec exec = null; + Stack stack = null; + Conf conf; + + boolean trace = false; + + Stmt(Exec e) { + exec = e; + stack = exec.getStack(); + conf = exec.getConf(); + trace = exec.getTrace(); + } + + /** + * DECLARE cursor statement + */ + public Integer declareCursor(HplsqlParser.Declare_cursor_itemContext ctx) { + String name = ctx.ident().getText(); + if (trace) { + trace(ctx, "DECLARE CURSOR " + name); + } + Query query = new Query(); + if (ctx.expr() != null) { + query.setExprCtx(ctx.expr()); + } + else if (ctx.select_stmt() != null) { + query.setSelectCtx(ctx.select_stmt()); + } + exec.addVariable(new Var(name, Type.CURSOR, query)); + return 0; + } + + /** + * CREATE TABLE statement + */ + public Integer createTable(HplsqlParser.Create_table_stmtContext ctx) { + trace(ctx, "CREATE TABLE"); + StringBuilder sql = new StringBuilder(); + sql.append(exec.getText(ctx, ctx.T_CREATE().getSymbol(), ctx.T_OPEN_P().getSymbol())); + int cnt = ctx.create_table_columns().create_table_columns_item().size(); + int cols = 0; + for (int i = 0; i < cnt; i++) { + Create_table_columns_itemContext col = ctx.create_table_columns().create_table_columns_item(i); + if (col.create_table_column_cons() != null) { + continue; + } + if (cols > 0) { + sql.append(",\n"); + } + sql.append(col.ident().getText()); + sql.append(" "); + sql.append(exec.evalPop(col.dtype(), col.dtype_len())); + cols++; + } + sql.append("\n)"); + if (ctx.create_table_options() != null) { + sql.append(" " + evalPop(ctx.create_table_options()).toString()); + } + trace(ctx, sql.toString()); + Query query = exec.executeSql(ctx, sql.toString(), exec.conf.defaultConnection); + if (query.error()) { + exec.signal(query); + return 1; + } + exec.setSqlSuccess(); + exec.closeQuery(query, exec.conf.defaultConnection); + return 0; + } + + /** + * CREATE TABLE options for Hive + */ + public Integer createTableHiveOptions(HplsqlParser.Create_table_options_hive_itemContext ctx) { + if (ctx.create_table_hive_row_format() != null) { + createTableHiveRowFormat(ctx.create_table_hive_row_format()); + } + return 0; + } + + public Integer createTableHiveRowFormat(HplsqlParser.Create_table_hive_row_formatContext ctx) { + StringBuilder sql = new StringBuilder(); + sql.append("ROW FORMAT DELIMITED"); + int cnt = ctx.create_table_hive_row_format_fields().size(); + for (int i = 0; i < cnt; i++) { + HplsqlParser.Create_table_hive_row_format_fieldsContext c = ctx.create_table_hive_row_format_fields(i); + if (c.T_FIELDS() != null) { + sql.append(" FIELDS TERMINATED BY " + evalPop(c.expr(0)).toSqlString()); + } + else if (c.T_LINES() != null) { + sql.append(" LINES TERMINATED BY " + evalPop(c.expr(0)).toSqlString()); + } + } + evalString(sql); + return 0; + } + + /** + * DECLARE TEMPORARY TABLE statement + */ + public Integer declareTemporaryTable(HplsqlParser.Declare_temporary_table_itemContext ctx) { + String name = ctx.ident().getText(); + if (trace) { + trace(ctx, "DECLARE TEMPORARY TABLE " + name); + } + return createTemporaryTable(ctx, ctx.create_table_columns(), name); + } + + /** + * CREATE LOCAL TEMPORARY | VOLATILE TABLE statement + */ + public Integer createLocalTemporaryTable(HplsqlParser.Create_local_temp_table_stmtContext ctx) { + String name = ctx.ident().getText(); + if (trace) { + trace(ctx, "CREATE LOCAL TEMPORARY TABLE " + name); + } + return createTemporaryTable(ctx, ctx.create_table_columns(), name); + } + + /** + * Create a temporary table statement + */ + public Integer createTemporaryTable(ParserRuleContext ctx, Create_table_columnsContext colCtx, String name) { + String managedName = null; + String sql = null; + String columns = exec.getFormattedText(colCtx); + if (conf.tempTables == Conf.TempTables.NATIVE) { + sql = "CREATE TEMPORARY TABLE " + name + "\n(" + columns + "\n)"; + } else if (conf.tempTables == Conf.TempTables.MANAGED) { + managedName = name + "_" + UUID.randomUUID().toString().replace("-",""); + if (!conf.tempTablesSchema.isEmpty()) { + managedName = conf.tempTablesSchema + "." + managedName; + } + sql = "CREATE TABLE " + managedName + "\n(" + columns + "\n)"; + if (!conf.tempTablesLocation.isEmpty()) { + sql += "\nLOCATION '" + conf.tempTablesLocation + "/" + managedName + "'"; + } + if (trace) { + trace(ctx, "Managed table name: " + managedName); + } + } + if (sql != null) { + Query query = exec.executeSql(ctx, sql, exec.conf.defaultConnection); + if (query.error()) { + exec.signal(query); + return 1; + } + if (managedName != null) { + exec.addManagedTable(name, managedName); + } + exec.setSqlSuccess(); + exec.closeQuery(query, exec.conf.defaultConnection); + } + return 0; + } + + /** + * DROP statement + */ + public Integer drop(HplsqlParser.Drop_stmtContext ctx) { + trace(ctx, "DROP"); + String sql = null; + if (ctx.T_TABLE() != null) { + sql = "DROP TABLE "; + if (ctx.T_EXISTS() != null) { + sql += "IF NOT EXISTS "; + } + sql += evalPop(ctx.table_name()).toString(); + } + if (sql != null) { + trace(ctx, sql); + Query query = exec.executeSql(ctx, sql, exec.conf.defaultConnection); + if (query.error()) { + exec.signal(query); + return 1; + } + exec.setSqlSuccess(); + exec.closeQuery(query, exec.conf.defaultConnection); + } + return 0; + } + + /** + * OPEN cursor statement + */ + public Integer open(HplsqlParser.Open_stmtContext ctx) { + trace(ctx, "OPEN"); + Query query = null; + Var var = null; + String cursor = ctx.L_ID().toString(); + String sql = null; + // Dynamic SQL + if (ctx.T_FOR() != null) { + sql = evalPop(ctx.expr()).toString(); + if (trace) { + trace(ctx, cursor + ": " + sql); + } + query = new Query(sql); + var = new Var(cursor, Type.CURSOR, query); + exec.addVariable(var); + } + // Declared cursor + else { + var = exec.findVariable(cursor); + if (var != null && var.type == Type.CURSOR) { + query = (Query)var.value; + if (query.sqlExpr != null) { + sql = evalPop(query.sqlExpr).toString(); + query.setSql(sql); + } + else if (query.sqlSelect != null) { + sql = evalPop(query.sqlSelect).toString(); + query.setSql(sql); + } + if (trace) { + trace(ctx, cursor + ": " + sql); + } + } + } + // Open cursor now + if (query != null) { + exec.executeQuery(ctx, query, exec.conf.defaultConnection); + if (query.error()) { + exec.signal(query); + return 1; + } + else if (!exec.getOffline()) { + exec.setSqlCode(0); + } + } + else { + trace(ctx, "Cursor not found: " + cursor); + exec.setSqlCode(-1); + exec.signal(Signal.Type.SQLEXCEPTION); + return 1; + } + return 0; + } + + /** + * FETCH cursor statement + */ + public Integer fetch(HplsqlParser.Fetch_stmtContext ctx) { + trace(ctx, "FETCH"); + String name = ctx.L_ID(0).toString(); + Var cursor = exec.findVariable(name); + if (cursor == null || cursor.type != Type.CURSOR) { + trace(ctx, "Cursor not found: " + name); + exec.setSqlCode(-1); + exec.signal(Signal.Type.SQLEXCEPTION); + return 1; + } + else if (exec.getOffline()) { + exec.setSqlCode(100); + exec.signal(Signal.Type.NOTFOUND); + return 0; + } + // Assign values from the row to local variables + try { + Query query = (Query)cursor.value; + ResultSet rs = query.getResultSet(); + ResultSetMetaData rsm = null; + if(rs != null) { + rsm = rs.getMetaData(); + } + if(rs != null && rsm != null) { + int cols = ctx.L_ID().size() - 1; + if(rs.next()) { + for(int i=1; i <= cols; i++) { + Var var = exec.findVariable(ctx.L_ID(i).getText()); + if(var != null) { + var.setValue(rs, rsm, i); + if(trace) { + trace(ctx, "COLUMN: " + rsm.getColumnName(i) + ", " + rsm.getColumnTypeName(i)); + trace(ctx, "SET " + var.getName() + " = " + var.toString()); + } + } + else if(trace) { + trace(ctx, "Variable not found: " + ctx.L_ID(i).getText()); + } + } + exec.incRowCount(); + exec.setSqlSuccess(); + } + else { + exec.setSqlCode(100); + exec.signal(Signal.Type.NOTFOUND); + } + } + } + catch (SQLException e) { + exec.setSqlCode(e); + exec.signal(Signal.Type.SQLEXCEPTION, e.getMessage(), e); + } + return 0; + } + + /** + * CLOSE cursor statement + */ + public Integer close(HplsqlParser.Close_stmtContext ctx) { + trace(ctx, "CLOSE"); + String name = ctx.L_ID().toString(); + Var var = exec.findVariable(name); + if(var != null && var.type == Type.CURSOR) { + exec.closeQuery((Query)var.value, exec.conf.defaultConnection); + exec.setSqlCode(0); + } + else if(trace) { + trace(ctx, "Cursor not found: " + name); + } + return 0; + } + + /** + * INCLUDE statement + */ + public Integer include(HplsqlParser.Include_stmtContext ctx) { + String file = ctx.file_name().getText(); + trace(ctx, "INCLUDE " + file); + exec.includeFile(file); + return 0; + } + + /** + * IF statement (PL/SQL syntax) + */ + public Integer ifPlsql(HplsqlParser.If_plsql_stmtContext ctx) { + boolean trueExecuted = false; + trace(ctx, "IF"); + if (evalPop(ctx.bool_expr()).isTrue()) { + trace(ctx, "IF TRUE executed"); + visit(ctx.block()); + trueExecuted = true; + } + else if (ctx.elseif_block() != null) { + int cnt = ctx.elseif_block().size(); + for (int i = 0; i < cnt; i++) { + if (evalPop(ctx.elseif_block(i).bool_expr()).isTrue()) { + trace(ctx, "ELSE IF executed"); + visit(ctx.elseif_block(i).block()); + trueExecuted = true; + break; + } + } + } + if (!trueExecuted && ctx.else_block() != null) { + trace(ctx, "ELSE executed"); + visit(ctx.else_block()); + } + return 0; + } + + /** + * IF statement (Transact-SQL syntax) + */ + public Integer ifTsql(HplsqlParser.If_tsql_stmtContext ctx) { + trace(ctx, "IF"); + visit(ctx.bool_expr()); + if(exec.stackPop().isTrue()) { + trace(ctx, "IF TRUE executed"); + visit(ctx.single_block_stmt(0)); + } + else if(ctx.T_ELSE() != null) { + trace(ctx, "ELSE executed"); + visit(ctx.single_block_stmt(1)); + } + return 0; + } + + /** + * Assignment from SELECT statement + */ + public Integer assignFromSelect(HplsqlParser.Assignment_stmt_select_itemContext ctx) { + String sql = evalPop(ctx.select_stmt()).toString(); + if (trace) { + trace(ctx, sql.toString()); + } + String conn = exec.getStatementConnection(); + Query query = exec.executeQuery(ctx, sql.toString(), conn); + if (query.error()) { + exec.signal(query); + return 1; + } + exec.setSqlSuccess(); + try { + ResultSet rs = query.getResultSet(); + ResultSetMetaData rm = null; + if (rs != null) { + rm = rs.getMetaData(); + int cnt = ctx.ident().size(); + if (rs.next()) { + for (int i = 1; i <= cnt; i++) { + Var var = exec.findVariable(ctx.ident(i-1).getText()); + if (var != null) { + var.setValue(rs, rm, i); + if (trace) { + trace(ctx, "COLUMN: " + rm.getColumnName(i) + ", " + rm.getColumnTypeName(i)); + trace(ctx, "SET " + var.getName() + " = " + var.toString()); + } + } + else if(trace) { + trace(ctx, "Variable not found: " + ctx.ident(i-1).getText()); + } + } + exec.incRowCount(); + exec.setSqlSuccess(); + } + else { + exec.setSqlCode(100); + exec.signal(Signal.Type.NOTFOUND); + } + } + } + catch (SQLException e) { + exec.signal(query); + return 1; + } + finally { + exec.closeQuery(query, conn); + } + return 0; + } + + /** + * SQL INSERT statement + */ + public Integer insert(HplsqlParser.Insert_stmtContext ctx) { + exec.stmtConnList.clear(); + if (ctx.select_stmt() != null) { + return insertSelect(ctx); + } + return insertValues(ctx); + } + + /** + * SQL INSERT SELECT statement + */ + public Integer insertSelect(HplsqlParser.Insert_stmtContext ctx) { + trace(ctx, "INSERT SELECT"); + String table = evalPop(ctx.table_name()).toString(); + String select = evalPop(ctx.select_stmt()).toString(); + String sql = "INSERT INTO TABLE " + table + " " + select; + trace(ctx, sql); + Query query = exec.executeSql(ctx, sql, exec.conf.defaultConnection); + if (query.error()) { + exec.signal(query); + return 1; + } + exec.setSqlSuccess(); + exec.closeQuery(query, exec.conf.defaultConnection); + return 0; + } + + /** + * SQL INSERT VALUES statement + */ + public Integer insertValues(HplsqlParser.Insert_stmtContext ctx) { + trace(ctx, "INSERT VALUES"); + String table = evalPop(ctx.table_name()).toString(); + String conn = exec.getObjectConnection(ctx.table_name().getText()); + Conn.Type type = exec.getConnectionType(conn); + StringBuilder sql = new StringBuilder(); + if (type == Conn.Type.HIVE) { + sql.append("INSERT INTO TABLE " + table + " "); + if (conf.insertValues == Conf.InsertValues.NATIVE) { + sql.append("VALUES\n("); + } + } + else { + sql.append("INSERT INTO " + table); + if (ctx.insert_stmt_cols() != null) { + sql.append(" " + exec.getFormattedText(ctx.insert_stmt_cols())); + } + sql.append(" VALUES\n("); + } + int rows = ctx.insert_stmt_rows().insert_stmt_row().size(); + for (int i = 0; i < rows; i++) { + HplsqlParser.Insert_stmt_rowContext row =ctx.insert_stmt_rows().insert_stmt_row(i); + int cols = row.expr().size(); + for (int j = 0; j < cols; j++) { + String value = evalPop(row.expr(j)).toSqlString(); + if (j == 0 && type == Conn.Type.HIVE && conf.insertValues == Conf.InsertValues.SELECT ) { + sql.append("SELECT "); + } + sql.append(value); + if (j + 1 != cols) { + sql.append(", "); + } + } + if (type != Conn.Type.HIVE || conf.insertValues == Conf.InsertValues.NATIVE) { + if (i + 1 == rows) { + sql.append(")"); + } else { + sql.append("),\n("); + } + } + else if (type == Conn.Type.HIVE && conf.insertValues == Conf.InsertValues.SELECT) { + sql.append(" FROM " + conf.dualTable); + if (i + 1 < rows) { + sql.append("\nUNION ALL\n"); + } + } + } + if (trace) { + trace(ctx, sql.toString()); + } + Query query = exec.executeSql(ctx, sql.toString(), conn); + if (query.error()) { + exec.signal(query); + return 1; + } + exec.setSqlSuccess(); + exec.closeQuery(query, exec.conf.defaultConnection); + return 0; + } + + /** + * GET DIAGNOSTICS EXCEPTION statement + */ + public Integer getDiagnosticsException(HplsqlParser.Get_diag_stmt_exception_itemContext ctx) { + trace(ctx, "GET DIAGNOSTICS EXCEPTION"); + Signal signal = exec.signalPeek(); + if (signal == null || (signal != null && signal.type != Signal.Type.SQLEXCEPTION)) { + signal = exec.currentSignal; + } + if (signal != null) { + exec.setVariable(ctx.ident().getText(), signal.getValue()); + } + return 0; + } + + /** + * GET DIAGNOSTICS ROW_COUNT statement + */ + public Integer getDiagnosticsRowCount(HplsqlParser.Get_diag_stmt_rowcount_itemContext ctx) { + trace(ctx, "GET DIAGNOSTICS ROW_COUNT"); + exec.setVariable(ctx.ident().getText(), exec.getRowCount()); + return 0; + } + + /** + * USE statement + */ + public Integer use(HplsqlParser.Use_stmtContext ctx) { + if(trace) { + trace(ctx, "USE"); + } + String sql = ctx.T_USE().toString() + " " + evalPop(ctx.expr()).toString(); + if(trace) { + trace(ctx, "Query: " + sql); + } + Query query = exec.executeSql(ctx, sql, exec.conf.defaultConnection); + if(query.error()) { + exec.signal(query); + return 1; + } + exec.setSqlCode(0); + exec.closeQuery(query, exec.conf.defaultConnection); + return 0; + } + + /** + * VALUES statement + */ + public Integer values(HplsqlParser.Values_into_stmtContext ctx) { + trace(ctx, "VALUES statement"); + int cnt = ctx.ident().size(); // Number of variables and assignment expressions + int ecnt = ctx.expr().size(); + for (int i = 0; i < cnt; i++) { + String name = ctx.ident(i).getText(); + if (i < ecnt) { + visit(ctx.expr(i)); + Var var = exec.setVariable(name); + if (trace) { + trace(ctx, "SET " + name + " = " + var.toString()); + } + } + } + return 0; + } + + /** + * WHILE statement + */ + public Integer while_(HplsqlParser.While_stmtContext ctx) { + trace(ctx, "WHILE - ENTERED"); + String label = exec.labelPop(); + while (true) { + if (evalPop(ctx.bool_expr()).isTrue()) { + exec.enterScope(Scope.Type.LOOP); + visit(ctx.block()); + exec.leaveScope(); + if (canContinue(label)) { + continue; + } + } + break; + } + trace(ctx, "WHILE - LEFT"); + return 0; + } + + /** + * FOR cursor statement + */ + public Integer forCursor(HplsqlParser.For_cursor_stmtContext ctx) { + trace(ctx, "FOR CURSOR - ENTERED"); + exec.enterScope(Scope.Type.LOOP); + String cursor = ctx.L_ID().getText(); + String sql = evalPop(ctx.select_stmt()).toString(); + trace(ctx, sql); + Query query = exec.executeQuery(ctx, sql, exec.conf.defaultConnection); + if (query.error()) { + exec.signal(query); + return 1; + } + trace(ctx, "SELECT completed successfully"); + exec.setSqlSuccess(); + try { + ResultSet rs = query.getResultSet(); + if (rs != null) { + ResultSetMetaData rm = rs.getMetaData(); + int cols = rm.getColumnCount(); + Var[] vars = new Var[cols]; + for (int i = 0; i < cols; i++) { + vars[i] = new Var(); + vars[i].setName(cursor + "." + rm.getColumnName(i + 1)); + vars[i].setType(rm.getColumnType(i + 1)); + exec.addVariable(vars[i]); + if (trace) { + trace(ctx, "Column: " + vars[i].getName() + " " + rm.getColumnTypeName(i + 1)); + } + } + while (rs.next()) { + for (int i = 0; i < cols; i++) { + vars[i].setValue(rs, rm, i + 1); + } + visit(ctx.block()); + exec.incRowCount(); + } + } + } + catch (SQLException e) { + exec.signal(e); + exec.closeQuery(query, exec.conf.defaultConnection); + return 1; + } + exec.setSqlSuccess(); + exec.closeQuery(query, exec.conf.defaultConnection); + exec.leaveScope(); + trace(ctx, "FOR CURSOR - LEFT"); + return 0; + } + + /** + * FOR (integer range) statement + */ + public Integer forRange(HplsqlParser.For_range_stmtContext ctx) { + trace(ctx, "FOR RANGE - ENTERED"); + int start = evalPop(ctx.expr(0)).intValue(); + int end = evalPop(ctx.expr(1)).intValue(); + int step = evalPop(ctx.expr(2), 1L).intValue(); + exec.enterScope(Scope.Type.LOOP); + Var index = new Var(ctx.L_ID().getText(), new Long(start)); + exec.addVariable(index); + if (ctx.T_REVERSE() == null) { + for (int i = start; i <= end; i += step) { + visit(ctx.block()); + index.increment(new Long(step)); + } + } else { + for (int i = start; i >= end; i -= step) { + visit(ctx.block()); + index.decrement(new Long(step)); + } + } + exec.leaveScope(); + trace(ctx, "FOR RANGE - LEFT"); + return 0; + } + + /** + * EXEC, EXECUTE and EXECUTE IMMEDIATE statement to execute dynamic SQL + */ + public Integer exec(HplsqlParser.Exec_stmtContext ctx) { + if(trace) { + trace(ctx, "EXECUTE"); + } + Var vsql = evalPop(ctx.expr()); + String sql = vsql.toString(); + if(trace) { + trace(ctx, "Query: " + sql); + } + Query query = exec.executeSql(ctx, sql, exec.conf.defaultConnection); + if(query.error()) { + exec.signal(query); + return 1; + } + ResultSet rs = query.getResultSet(); + if(rs != null) { + try { + ResultSetMetaData rsm = rs.getMetaData(); + // Assign to variables + if(ctx.T_INTO() != null) { + int cols = ctx.L_ID().size(); + if(rs.next()) { + for(int i=0; i < cols; i++) { + Var var = exec.findVariable(ctx.L_ID(i).getText()); + if(var != null) { + var.setValue(rs, rsm, i+1); + if(trace) { + trace(ctx, "COLUMN: " + rsm.getColumnName(i+1) + ", " + rsm.getColumnTypeName(i+1)); + trace(ctx, "SET " + var.getName() + " = " + var.toString()); + } + } + else if(trace) { + trace(ctx, "Variable not found: " + ctx.L_ID(i).getText()); + } + } + exec.setSqlCode(0); + } + } + // Print the results + else { + int cols = rsm.getColumnCount(); + while(rs.next()) { + for(int i = 1; i <= cols; i++) { + if(i > 1) { + System.out.print("\t"); + } + System.out.print(rs.getString(i)); + } + System.out.println(""); + } + } + } + catch(SQLException e) { + exec.setSqlCode(e); + } + } + exec.closeQuery(query, exec.conf.defaultConnection); + return 0; + } + + /** + * EXIT statement (leave the specified loop with a condition) + */ + public Integer exit(HplsqlParser.Exit_stmtContext ctx) { + trace(ctx, "EXIT"); + String label = ""; + if (ctx.L_ID() != null) { + label = ctx.L_ID().toString(); + } + if (ctx.T_WHEN() != null) { + if (evalPop(ctx.bool_expr()).isTrue()) { + leaveLoop(label); + } + } else { + leaveLoop(label); + } + return 0; + } + + /** + * BREAK statement (leave the innermost loop unconditionally) + */ + public Integer break_(HplsqlParser.Break_stmtContext ctx) { + trace(ctx, "BREAK"); + leaveLoop(""); + return 0; + } + + /** + * LEAVE statement (leave the specified loop unconditionally) + */ + public Integer leave(HplsqlParser.Leave_stmtContext ctx) { + trace(ctx, "LEAVE"); + String label = ""; + if (ctx.L_ID() != null) { + label = ctx.L_ID().toString(); + } + leaveLoop(label); + return 0; + } + + /** + * Leave the specified or innermost loop unconditionally + */ + public void leaveLoop(String value) { + exec.signal(Signal.Type.LEAVE_LOOP, value); + } + + /** + * UPDATE statement + */ + public Integer update(HplsqlParser.Update_stmtContext ctx) { + trace(ctx, "UPDATE"); + String sql = exec.getFormattedText(ctx); + trace(ctx, sql); + Query query = exec.executeSql(ctx, sql, exec.conf.defaultConnection); + if (query.error()) { + exec.signal(query); + return 1; + } + exec.setSqlSuccess(); + exec.closeQuery(query, exec.conf.defaultConnection); + return 0; + } + + /** + * DELETE statement + */ + public Integer delete(HplsqlParser.Delete_stmtContext ctx) { + trace(ctx, "DELETE"); + String table = evalPop(ctx.table_name()).toString(); + StringBuilder sql = new StringBuilder(); + sql.append("DELETE FROM "); + sql.append(table); + if (ctx.where_clause() != null) { + boolean oldBuildSql = exec.buildSql; + exec.buildSql = true; + sql.append(" " + evalPop(ctx.where_clause()).toString()); + exec.buildSql = oldBuildSql; + } + trace(ctx, sql.toString()); + Query query = exec.executeSql(ctx, sql.toString(), exec.conf.defaultConnection); + if (query.error()) { + exec.signal(query); + return 1; + } + exec.setSqlSuccess(); + exec.closeQuery(query, exec.conf.defaultConnection); + return 0; + } + + /** + * MERGE statement + */ + public Integer merge(HplsqlParser.Merge_stmtContext ctx) { + trace(ctx, "MERGE"); + String sql = exec.getFormattedText(ctx); + trace(ctx, sql); + Query query = exec.executeSql(ctx, sql, exec.conf.defaultConnection); + if (query.error()) { + exec.signal(query); + return 1; + } + exec.setSqlSuccess(); + exec.closeQuery(query, exec.conf.defaultConnection); + return 0; + } + + /** + * PRINT Statement + */ + public Integer print(HplsqlParser.Print_stmtContext ctx) { + trace(ctx, "PRINT"); + if (ctx.expr() != null) { + visit(ctx.expr()); + System.out.println(stack.pop().toString()); + } + return 0; + } + + /** + * SIGNAL statement + */ + public Integer signal(HplsqlParser.Signal_stmtContext ctx) { + trace(ctx, "SIGNAL"); + Signal signal = new Signal(Signal.Type.USERDEFINED, ctx.ident().getText()); + exec.signal(signal); + return 0; + } + + /** + * RESIGNAL statement + */ + public Integer resignal(HplsqlParser.Resignal_stmtContext ctx) { + trace(ctx, "RESIGNAL"); + if (ctx.T_SQLSTATE() != null) { + String sqlstate = evalPop(ctx.expr(0)).toString(); + String text = ""; + if (ctx.T_MESSAGE_TEXT() != null) { + text = evalPop(ctx.expr(1)).toString(); + } + SQLException exception = new SQLException(text, sqlstate, -1); + Signal signal = new Signal(Signal.Type.SQLEXCEPTION, text, exception); + exec.setSqlCode(exception); + exec.resignal(signal); + } + else { + exec.resignal(); + } + return 0; + } + + /** + * RETURN statement + */ + public Integer return_(HplsqlParser.Return_stmtContext ctx) { + trace(ctx, "RETURN"); + if (ctx.expr() != null) { + eval(ctx.expr()); + } + exec.signal(Signal.Type.LEAVE_ROUTINE); + return 0; + } + + /** + * Check if an exception is raised or EXIT executed, and we should leave the block + */ + boolean canContinue(String label) { + Signal signal = exec.signalPeek(); + if (signal != null && signal.type == Signal.Type.SQLEXCEPTION) { + return false; + } + signal = exec.signalPeek(); + if (signal != null && signal.type == Signal.Type.LEAVE_LOOP) { + if (signal.value == null || signal.value.isEmpty() || + (label != null && label.equalsIgnoreCase(signal.value))) { + exec.signalPop(); + } + return false; + } + return true; + } + + /** + * Evaluate the expression and push the value to the stack + */ + void eval(ParserRuleContext ctx) { + exec.visit(ctx); + } + + /** + * Evaluate the expression to specified String value + */ + void evalString(String string) { + exec.stackPush(new Var(string)); + } + + void evalString(StringBuilder string) { + evalString(string.toString()); + } + + /** + * Evaluate the expression and pop value from the stack + */ + Var evalPop(ParserRuleContext ctx) { + visit(ctx); + if (!exec.stack.isEmpty()) { + return exec.stackPop(); + } + return Var.Empty; + } + + Var evalPop(ParserRuleContext ctx, long def) { + if (ctx != null) { + exec.visit(ctx); + return exec.stackPop(); + } + return new Var(def); + } + + /** + * Execute rules + */ + Integer visit(ParserRuleContext ctx) { + return exec.visit(ctx); + } + + /** + * Execute children rules + */ + Integer visitChildren(ParserRuleContext ctx) { + return exec.visitChildren(ctx); + } + + /** + * Trace information + */ + void trace(ParserRuleContext ctx, String message) { + exec.trace(ctx, message); + } +} diff --git hplsql/src/main/java/org/apache/hive/hplsql/StreamGobbler.java hplsql/src/main/java/org/apache/hive/hplsql/StreamGobbler.java new file mode 100644 index 0000000..d5a7cc4 --- /dev/null +++ hplsql/src/main/java/org/apache/hive/hplsql/StreamGobbler.java @@ -0,0 +1,51 @@ +/** + * 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. + */ + +package org.apache.hive.hplsql; + +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.BufferedReader; +import java.io.IOException; + +/** + * Read a stream from an external process + */ +public class StreamGobbler extends Thread { + InputStream is; + + StreamGobbler(InputStream is) { + this.is = is; + } + + public void run() { + try { + InputStreamReader isr = new InputStreamReader(is); + BufferedReader br = new BufferedReader(isr); + while(true) { + String line = br.readLine(); + if(line == null) { + break; + } + System.out.println(line); + } + } catch (IOException ioe) { + ioe.printStackTrace(); + } + } +} diff --git hplsql/src/main/java/org/apache/hive/hplsql/Timer.java hplsql/src/main/java/org/apache/hive/hplsql/Timer.java new file mode 100644 index 0000000..9330eb4 --- /dev/null +++ hplsql/src/main/java/org/apache/hive/hplsql/Timer.java @@ -0,0 +1,59 @@ +/** + * 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. + */ + +package org.apache.hive.hplsql; + +public class Timer { + long start = 0; + long stop = 0; + long elapsed = 0; + + /** + * Start the timer + */ + public long start() { + start = System.currentTimeMillis(); + return start; + } + + /** + * Get intermediate timer value + */ + public long current() { + return System.currentTimeMillis(); + } + + /** + * Stop the timer and return elapsed time + */ + public long stop() { + stop = System.currentTimeMillis(); + elapsed = stop - start; + return elapsed; + } + + /** + * Format the elapsed time + */ + public String format() { + if (elapsed < 1000) { + return String.valueOf(elapsed) + " ms"; + } + return String.format("%.2f", ((float)elapsed)/1000) + " sec"; + } +} diff --git hplsql/src/main/java/org/apache/hive/hplsql/Udf.java hplsql/src/main/java/org/apache/hive/hplsql/Udf.java new file mode 100644 index 0000000..9c29eeb --- /dev/null +++ hplsql/src/main/java/org/apache/hive/hplsql/Udf.java @@ -0,0 +1,117 @@ +/** + * 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. + */ + +package org.apache.hive.hplsql; + +import org.apache.hadoop.hive.ql.exec.Description; +import org.apache.hadoop.hive.ql.exec.UDFArgumentException; +import org.apache.hadoop.hive.ql.exec.UDFArgumentLengthException; +import org.apache.hadoop.hive.ql.metadata.HiveException; +import org.apache.hadoop.hive.ql.udf.generic.GenericUDF; +import org.apache.hadoop.hive.ql.udf.UDFType; +import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector; +import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory; +import org.apache.hadoop.hive.serde2.objectinspector.primitive.IntObjectInspector; +import org.apache.hadoop.hive.serde2.objectinspector.primitive.LongObjectInspector; +import org.apache.hadoop.hive.serde2.objectinspector.primitive.StringObjectInspector; + +@Description(name = "hplsql", value = "_FUNC_('query' [, :1, :2, ...n]) - Execute HPL/SQL query", extended = "Example:\n" + " > SELECT _FUNC_('CURRENT_DATE') FROM src LIMIT 1;\n") +@UDFType(deterministic = false) +public class Udf extends GenericUDF { + + Exec exec; + StringObjectInspector queryOI; + ObjectInspector[] argumentsOI; + + /** + * Initialize UDF + */ + @Override + public ObjectInspector initialize(ObjectInspector[] arguments) throws UDFArgumentException { + if (arguments.length == 0) { + throw new UDFArgumentLengthException("At least one argument must be specified"); + } + if (!(arguments[0] instanceof StringObjectInspector)) { + throw new UDFArgumentException("First argument must be a string"); + } + queryOI = (StringObjectInspector)arguments[0]; + argumentsOI = arguments; + return PrimitiveObjectInspectorFactory.javaStringObjectInspector; + } + + /** + * Execute UDF + */ + @Override + public Object evaluate(DeferredObject[] arguments) throws HiveException { + if (exec == null) { + exec = new Exec(); + String query = queryOI.getPrimitiveJavaObject(arguments[0].get()); + String[] args = { "-e", query, "-trace" }; + try { + exec.setUdfRun(true); + exec.init(args); + } catch (Exception e) { + throw new HiveException(e.getMessage()); + } + } + if (arguments.length > 1) { + setParameters(arguments); + } + Var result = exec.run(); + if (result != null) { + return result.toString(); + } + return null; + } + + /** + * Set parameters for the current call + */ + void setParameters(DeferredObject[] arguments) throws HiveException { + for (int i = 1; i < arguments.length; i++) { + String name = ":" + i; + if (argumentsOI[i] instanceof StringObjectInspector) { + String value = ((StringObjectInspector)argumentsOI[i]).getPrimitiveJavaObject(arguments[i].get()); + if (value != null) { + exec.setVariable(name, value); + } + } + else if (argumentsOI[i] instanceof IntObjectInspector) { + Integer value = (Integer)((IntObjectInspector)argumentsOI[i]).getPrimitiveJavaObject(arguments[i].get()); + if (value != null) { + exec.setVariable(name, new Var(new Long(value))); + } + } + else if (argumentsOI[i] instanceof LongObjectInspector) { + Long value = (Long)((LongObjectInspector)argumentsOI[i]).getPrimitiveJavaObject(arguments[i].get()); + if (value != null) { + exec.setVariable(name, new Var(value)); + } + } + else { + exec.setVariableToNull(name); + } + } + } + + @Override + public String getDisplayString(String[] children) { + return "hplsql"; + } +} diff --git hplsql/src/main/java/org/apache/hive/hplsql/Utils.java hplsql/src/main/java/org/apache/hive/hplsql/Utils.java new file mode 100644 index 0000000..da0d878 --- /dev/null +++ hplsql/src/main/java/org/apache/hive/hplsql/Utils.java @@ -0,0 +1,289 @@ +/** + * 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. + */ + +package org.apache.hive.hplsql; + +import java.sql.Date; +import java.sql.Timestamp; + +public class Utils { + + /** + * Unquote string and remove escape characters inside the script + */ + public static String unquoteString(String s) { + if(s == null) { + return null; + } + + int len = s.length(); + StringBuffer s2 = new StringBuffer(len); + + for (int i = 0; i < len; i++) { + char ch = s.charAt(i); + char ch2 = (i < len - 1) ? s.charAt(i+1) : 0; + + if((i == 0 || i == len -1) && (ch == '\'' || ch == '"')) + continue; + else + // \' and '' escape sequences + if((ch == '\\' && ch2 == '\'') || (ch == '\'' && ch2 == '\'')) + continue; + + s2.append(ch); + } + + return s2.toString(); + } + + /** + * Quote string and escape characters - ab'c -> 'ab''c' + */ + public static String quoteString(String s) { + if(s == null) { + return null; + } + int len = s.length(); + StringBuilder s2 = new StringBuilder(len + 2).append('\''); + + for (int i = 0; i < len; i++) { + char ch = s.charAt(i); + s2.append(ch); + if(ch == '\'') { + s2.append(ch); + } + } + s2.append('\''); + return s2.toString(); + } + + /** + * Merge quoted strings: 'a' 'b' -> 'ab'; 'a''b' 'c' -> 'a''bc' + */ + public static String mergeQuotedStrings(String s1, String s2) { + if(s1 == null || s2 == null) { + return null; + } + + int len1 = s1.length(); + int len2 = s2.length(); + + if(len1 == 0 || len2 == 0) { + return s1; + } + + return s1.substring(0, len1 - 1) + s2.substring(1); + } + + /** + * Convert String to Date + */ + public static Date toDate(String s) { + int len = s.length(); + if(len >= 10) { + int c4 = s.charAt(4); + int c7 = s.charAt(7); + // YYYY-MM-DD + if(c4 == '-' && c7 == '-') { + return Date.valueOf(s.substring(0, 10)); + } + } + return null; + } + + /** + * Convert String to Timestamp + */ + public static Timestamp toTimestamp(String s) { + int len = s.length(); + if(len >= 10) { + int c4 = s.charAt(4); + int c7 = s.charAt(7); + // YYYY-MM-DD + if(c4 == '-' && c7 == '-') { + // Convert DB2 syntax: YYYY-MM-DD-HH.MI.SS.FFF + if(len > 19) { + if(s.charAt(10) == '-') { + String s2 = s.substring(0, 10) + ' ' + s.substring(11, 13) + ':' + s.substring(14, 16) + ':' + + s.substring(17); + return Timestamp.valueOf(s2); + } + } + else if(len == 10) { + s += " 00:00:00.000"; + } + return Timestamp.valueOf(s); + } + } + return null; + } + + /** + * Compare two String values and return min or max + */ + public static String minMaxString(String s1, String s2, boolean max) { + if(s1 == null) { + return s2; + } + else if(s2 == null) { + return s1; + } + int cmp = s1.compareTo(s2); + if((max && cmp < 0) || (!max && cmp > 0)) { + return s2; + } + return s1; + } + + /** + * Compare two Int values and return min or max + */ + public static Long minMaxInt(Long i1, String s, boolean max) { + Long i2 = null; + try { + i2 = Long.parseLong(s); + } + catch(NumberFormatException e) {} + if(i1 == null) { + return i2; + } + else if(i2 == null) { + return i1; + } + if((max && i1.longValue() < i2.longValue()) || (!max && i1.longValue() > i2.longValue())) { + return i2; + } + return i1; + } + + /** + * Compare two Date values and return min or max + */ + public static Date minMaxDate(Date d1, String s, boolean max) { + Date d2 = Utils.toDate(s); + if(d1 == null) { + return d2; + } else if(d2 == null) { + return d1; + } + if((max && d1.before(d2)) || (!max && d1.after(d2))) { + return d2; + } + return d1; + } + + /** + * Convert String array to a string with the specified delimiter + */ + public static String toString(String[] a, char del) { + StringBuilder s = new StringBuilder(); + for(int i=0; i < a.length; i++) { + if(i > 0) { + s.append(del); + } + s.append(a[i]); + } + return s.toString(); + } + + /** + * Convert SQL datetime format string to Java SimpleDateFormat + */ + public static String convertSqlDatetimeFormat(String in) { + StringBuilder out = new StringBuilder(); + int len = in.length(); + int i = 0; + while (i < len) { + if (i + 4 <= len && in.substring(i, i + 4).compareTo("YYYY") == 0) { + out.append("yyyy"); + i += 4; + } + else if (i + 2 <= len && in.substring(i, i + 2).compareTo("mm") == 0) { + out.append("MM"); + i += 2; + } + else if (i + 2 <= len && in.substring(i, i + 2).compareTo("DD") == 0) { + out.append("dd"); + i += 2; + } + else if (i + 4 <= len && in.substring(i, i + 4).compareToIgnoreCase("HH24") == 0) { + out.append("HH"); + i += 4; + } + else if (i + 2 <= len && in.substring(i, i + 2).compareToIgnoreCase("MI") == 0) { + out.append("mm"); + i += 2; + } + else if (i + 2 <= len && in.substring(i, i + 2).compareTo("SS") == 0) { + out.append("ss"); + i += 2; + } + else { + out.append(in.charAt(i)); + i++; + } + } + return out.toString(); + } + + /** + * Get the executable directory + */ + public static String getExecDir() { + String dir = Hplsql.class.getProtectionDomain().getCodeSource().getLocation().getPath(); + if (dir.endsWith(".jar")) { + dir = dir.substring(0, dir.lastIndexOf("/") + 1); + } + return dir; + } + + /** + * Format size value specified in bytes + */ + public static String formatSizeInBytes(long bytes, String postfix) { + String out; + if (bytes < 1024) { + out = bytes + " bytes"; + } + else if (bytes < 1024 * 1024) { + out = String.format("%.1f", ((float)bytes)/1024) + " KB"; + } + else if (bytes < 1024 * 1024 * 1024) { + out = String.format("%.1f", ((float)bytes)/(1024 * 1024)) + " MB"; + } + else { + out = String.format("%.1f", ((float)bytes)/(1024 * 1024 * 1024)) + " GB"; + } + if (postfix != null && !postfix.isEmpty()) { + out += postfix; + } + return out; + } + + public static String formatSizeInBytes(long bytes) { + return Utils.formatSizeInBytes(bytes, null); + } + + /** + * Format bytes per second rate + */ + public static String formatBytesPerSec(long bytes, long msElapsed) { + float bytesPerSec = ((float)bytes)/msElapsed*1000; + return Utils.formatSizeInBytes((long)bytesPerSec, "/sec"); + } +} diff --git hplsql/src/main/java/org/apache/hive/hplsql/Var.java hplsql/src/main/java/org/apache/hive/hplsql/Var.java new file mode 100644 index 0000000..0a4ead2 --- /dev/null +++ hplsql/src/main/java/org/apache/hive/hplsql/Var.java @@ -0,0 +1,430 @@ +/** + * 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. + */ + +package org.apache.hive.hplsql; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.sql.ResultSet; +import java.sql.ResultSetMetaData; +import java.sql.SQLException; +import java.sql.Date; +import java.sql.Timestamp; + +/** + * Variable or the result of expression + */ +public class Var { + + // Data types + public enum Type {BOOL, CURSOR, DATE, DEC, FILE, IDENT, BIGINT, INTERVAL, STRING, STRINGLIST, TIMESTAMP, NULL}; + public static Var Empty = new Var(); + public static Var Null = new Var(Type.NULL); + + public String name; + public Type type; + public Object value; + + int len; + int scale; + + public Var() { + type = Type.NULL; + } + + public Var(Var var) { + name = var.name; + type = var.type; + value = var.value; + len = var.len; + scale = var.scale; + } + + public Var(Long value) { + this.type = Type.BIGINT; + this.value = value; + } + + public Var(BigDecimal value) { + this.type = Type.DEC; + this.value = value; + } + + public Var(String name, Long value) { + this.type = Type.BIGINT; + this.name = name; + this.value = value; + } + + public Var(String value) { + this.type = Type.STRING; + this.value = value; + } + + public Var(Date value) { + this.type = Type.DATE; + this.value = value; + } + + public Var(Timestamp value, int scale) { + this.type = Type.TIMESTAMP; + this.value = value; + this.scale = scale; + } + + public Var(Interval value) { + this.type = Type.INTERVAL; + this.value = value; + } + + public Var(ArrayList value) { + this.type = Type.STRINGLIST; + this.value = value; + } + + public Var(Boolean b) { + type = Type.BOOL; + value = b; + } + + public Var(Type type, String name) { + this.type = type; + this.name = name; + } + + public Var(Type type, Object value) { + this.type = type; + this.value = value; + } + + public Var(String name, Type type, Object value) { + this.name = name; + this.type = type; + this.value = value; + } + + public Var(Type type) { + this.type = type; + } + + public Var(String name, String type, String len, String scale, Var def) { + this.name = name; + setType(type); + if (len != null) { + this.len = Integer.parseInt(len); + } + if (scale != null) { + this.scale = Integer.parseInt(scale); + } + if (def != null) { + cast(def); + } + } + + /** + * Cast a new value to the variable + */ + public Var cast(Var val) { + if (val == null || val.value == null) { + value = null; + } + else if (type == val.type && type == Type.STRING) { + cast((String)val.value); + } + else if (type == val.type) { + value = val.value; + } + else if (type == Type.STRING) { + cast(val.toString()); + } + else if (type == Type.DATE) { + value = Utils.toDate(val.toString()); + } + else if (type == Type.TIMESTAMP) { + value = Utils.toTimestamp(val.toString()); + } + return this; + } + + /** + * Cast a new string value to the variable + */ + public Var cast(String val) { + if (type == Type.STRING) { + if (len != 0 ) { + int l = val.length(); + if (l > len) { + value = val.substring(0, len); + return this; + } + } + value = val; + } + return this; + } + + /** + * Set the new value + */ + public void setValue(String str) { + if(type == Type.STRING) { + value = str; + } + } + + public Var setValue(Long val) { + if (type == Type.BIGINT) { + value = val; + } + return this; + } + + /** + * Set the new value from a result set + */ + public Var setValue(ResultSet rs, ResultSetMetaData rsm, int idx) throws SQLException { + int type = rsm.getColumnType(idx); + if (type == java.sql.Types.CHAR || type == java.sql.Types.VARCHAR) { + cast(new Var(rs.getString(idx))); + } + else if (type == java.sql.Types.INTEGER || type == java.sql.Types.BIGINT) { + cast(new Var(new Long(rs.getLong(idx)))); + } + return this; + } + + /** + * Set the data type from string representation + */ + void setType(String type) { + this.type = defineType(type); + } + + /** + * Set the data type from JDBC type code + */ + void setType(int type) { + this.type = defineType(type); + } + + /** + * Define the data type from string representation + */ + public static Type defineType(String type) { + if (type == null) { + return Type.NULL; + } + else if (type.equalsIgnoreCase("INT") || type.equalsIgnoreCase("INTEGER")) { + return Type.BIGINT; + } + else if (type.equalsIgnoreCase("CHAR") || type.equalsIgnoreCase("VARCHAR") || type.equalsIgnoreCase("STRING")) { + return Type.STRING; + } + else if (type.equalsIgnoreCase("DATE")) { + return Type.DATE; + } + else if (type.equalsIgnoreCase("TIMESTAMP")) { + return Type.TIMESTAMP; + } + else if (type.equalsIgnoreCase("UTL_FILE.FILE_TYPE")) { + return Type.FILE; + } + return Type.NULL; + } + + /** + * Define the data type from JDBC type code + */ + public static Type defineType(int type) { + if (type == java.sql.Types.CHAR || type == java.sql.Types.VARCHAR) { + return Type.STRING; + } + else if (type == java.sql.Types.INTEGER || type == java.sql.Types.BIGINT) { + return Type.BIGINT; + } + return Type.NULL; + } + + /** + * Remove value + */ + public void removeValue() { + type = Type.NULL; + name = null; + value = null; + len = 0; + scale = 0; + } + + /* + * Compare values + */ + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + else if (obj == null || this.value == null) { + return false; + } + else if (getClass() != obj.getClass()) { + return false; + } + + Var var = (Var)obj; + if (type == Type.BIGINT && var.type == Type.BIGINT && + ((Long)value).longValue() == ((Long)var.value).longValue()) { + return true; + } + else if (type == Type.STRING && var.type == Type.STRING && + ((String)value).equals((String)var.value)) { + return true; + } + return false; + } + + /* + * Compare values + */ + public int compareTo(Var v) { + if (this == v) { + return 0; + } + else if (v == null) { + return -1; + } + else if (type == Type.BIGINT && v.type == Type.BIGINT) { + return ((Long)value).compareTo((Long)v.value); + } + else if (type == Type.STRING && v.type == Type.STRING) { + return ((String)value).compareTo((String)v.value); + } + return -1; + } + + /** + * Increment an integer value + */ + public Var increment(Long i) { + if (type == Type.BIGINT) { + value = new Long(((Long)value).longValue() + i); + } + return this; + } + + /** + * Decrement an integer value + */ + public Var decrement(Long i) { + if (type == Type.BIGINT) { + value = new Long(((Long)value).longValue() - i); + } + return this; + } + + /** + * Return an integer value + */ + public int intValue() { + if (type == Type.BIGINT) { + return ((Long)value).intValue(); + } + return -1; + } + + /** + * Return true/false for BOOL type + */ + public boolean isTrue() { + if(type == Type.BOOL && value != null) { + return ((Boolean)value).booleanValue(); + } + return false; + } + + /** + * Check if the variable contains NULL + */ + public boolean isNull() { + if (type == Type.NULL || value == null) { + return true; + } + return false; + } + + /** + * Convert value to String + */ + @Override + public String toString() { + if (type == Type.IDENT) { + return name; + } + else if (value == null) { + return null; + } + else if (type == Type.BIGINT) { + return ((Long)value).toString(); + } + else if (type == Type.STRING) { + return (String)value; + } + else if (type == Type.DATE) { + return ((Date)value).toString(); + } + else if (type == Type.TIMESTAMP) { + int len = 19; + String t = ((Timestamp)value).toString(); // .0 returned if the fractional part not set + if (scale > 0) { + len += scale + 1; + } + if (t.length() > len) { + t = t.substring(0, len); + } + return t; + } + return value.toString(); + } + + /** + * Convert value to SQL string - string literals are quoted and escaped, ab'c -> 'ab''c' + */ + public String toSqlString() { + if (value == null) { + return "NULL"; + } + else if (type == Type.STRING) { + return Utils.quoteString((String)value); + } + return toString(); + } + + /** + * Set variable name + */ + public void setName(String name) { + this.name = name; + } + + /** + * Get variable name + */ + public String getName() { + return name; + } +} diff --git hplsql/src/main/java/org/apache/hive/hplsql/functions/Function.java hplsql/src/main/java/org/apache/hive/hplsql/functions/Function.java new file mode 100644 index 0000000..9895b5e --- /dev/null +++ hplsql/src/main/java/org/apache/hive/hplsql/functions/Function.java @@ -0,0 +1,709 @@ +/** + * 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. + */ + +package org.apache.hive.hplsql.functions; + +import java.sql.ResultSet; +import java.sql.Date; +import java.sql.SQLException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.HashMap; +import java.util.Map; +import java.util.TimeZone; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.apache.commons.lang.StringUtils; +import org.antlr.v4.runtime.ParserRuleContext; +import org.apache.hive.hplsql.*; + +interface FuncCommand { + void run(HplsqlParser.Expr_func_paramsContext ctx); +} + +interface FuncSpecCommand { + void run(HplsqlParser.Expr_spec_funcContext ctx); +} + +/** + * HPL/SQL functions + */ +public class Function { + Exec exec; + HashMap map = new HashMap(); + HashMap specMap = new HashMap(); + HashMap specSqlMap = new HashMap(); + HashMap userMap = new HashMap(); + HashMap procMap = new HashMap(); + boolean trace = false; + + public Function(Exec e) { + exec = e; + trace = exec.getTrace(); + } + + /** + * Register functions + */ + public void register(Function f) { + } + + /** + * Execute a function + */ + public void exec(String name, HplsqlParser.Expr_func_paramsContext ctx) { + if (execUser(ctx, name)) { + return; + } + if (name.indexOf(".") != -1) { // Name can be qualified and spaces are allowed between parts + String[] parts = name.split("\\."); + StringBuilder str = new StringBuilder(); + for (int i = 0; i < parts.length; i++) { + if (i > 0) { + str.append("."); + } + str.append(parts[i].trim()); + } + name = str.toString(); + } + if (trace && ctx.parent.parent instanceof HplsqlParser.Expr_stmtContext) { + trace(ctx, "FUNC " + name); + } + FuncCommand func = map.get(name); + if (func != null) { + func.run(ctx); + } + else { + evalNull(); + } + } + + /** + * User-defined function in a SQL query + */ + public void execSql(String name, HplsqlParser.Expr_func_paramsContext ctx) { + if (execUserSql(ctx, name)) { + return; + } + StringBuilder sql = new StringBuilder(); + sql.append(name); + sql.append("("); + int cnt = ctx.expr().size(); + for (int i = 0; i < cnt; i++) { + sql.append(evalPop(ctx.expr(i))); + if (i + 1 < cnt) { + sql.append(", "); + } + } + sql.append(")"); + exec.stackPush(sql); + } + + /** + * Aggregate or window function in a SQL query + */ + public void execAggWindowSql(HplsqlParser.Expr_agg_window_funcContext ctx) { + exec.stackPush(exec.getFormattedText(ctx)); + } + + /** + * Execute a user-defined function + */ + public boolean execUser(HplsqlParser.Expr_func_paramsContext ctx, String name) { + HplsqlParser.Create_function_stmtContext userCtx = userMap.get(name.toUpperCase()); + if (userCtx == null) { + return false; + } + if (trace) { + trace(ctx, "EXEC FUNCTION " + name); + } + exec.enterScope(Scope.Type.ROUTINE); + setCallParameters(ctx, userCtx.create_routine_params(), null); + visit(userCtx.single_block_stmt()); + exec.leaveScope(); + return true; + } + + /** + * Execute a HPL/SQL user-defined function in a query + */ + public boolean execUserSql(HplsqlParser.Expr_func_paramsContext ctx, String name) { + HplsqlParser.Create_function_stmtContext userCtx = userMap.get(name.toUpperCase()); + if (userCtx == null) { + return false; + } + StringBuilder sql = new StringBuilder(); + sql.append("hplsql('"); + sql.append(name); + sql.append("("); + int cnt = ctx.expr().size(); + for (int i = 0; i < cnt; i++) { + sql.append(":" + (i + 1)); + if (i + 1 < cnt) { + sql.append(", "); + } + } + sql.append(")'"); + if (cnt > 0) { + sql.append(", "); + } + for (int i = 0; i < cnt; i++) { + sql.append(evalPop(ctx.expr(i))); + if (i + 1 < cnt) { + sql.append(", "); + } + } + sql.append(")"); + exec.stackPush(sql); + exec.registerUdf(); + return true; + } + + /** + * Execute a stored procedure as the entry point of the script (defined by -main option) + */ + public boolean execProc(String name) { + if (trace) { + trace("EXEC PROCEDURE " + name); + } + HplsqlParser.Create_procedure_stmtContext procCtx = procMap.get(name.toUpperCase()); + if (procCtx == null) { + trace("Procedure not found"); + return false; + } + exec.enterScope(Scope.Type.ROUTINE); + setCallParameters(procCtx.create_routine_params()); + visit(procCtx.single_block_stmt()); + exec.leaveScope(); + return true; + } + + /** + * Execute a stored procedure using CALL or EXEC statement passing parameters + */ + public boolean execProc(HplsqlParser.Expr_func_paramsContext ctx, String name) { + if (trace) { + trace(ctx, "EXEC PROCEDURE " + name); + } + HplsqlParser.Create_procedure_stmtContext procCtx = procMap.get(name.toUpperCase()); + if (procCtx == null) { + trace(ctx, "Procedure not found"); + return false; + } + HashMap out = new HashMap(); + exec.enterScope(Scope.Type.ROUTINE); + setCallParameters(ctx, procCtx.create_routine_params(), out); + visit(procCtx.single_block_stmt()); + exec.leaveScope(); + for (Map.Entry i : out.entrySet()) { // Set OUT parameters + exec.setVariable(i.getKey(), i.getValue()); + } + return true; + } + + /** + * Set parameters for user-defined function call + */ + void setCallParameters(HplsqlParser.Expr_func_paramsContext actual, + HplsqlParser.Create_routine_paramsContext formal, + HashMap out) { + int actualCnt = actual.expr().size(); + int formalCnt = formal.create_routine_param_item().size(); + for (int i = 0; i < actualCnt; i++) { + if (i >= formalCnt) { + break; + } + HplsqlParser.ExprContext a = actual.expr(i); + HplsqlParser.Create_routine_param_itemContext p = formal.create_routine_param_item(i); + String name = p.ident().getText(); + String type = p.dtype().getText(); + String len = null; + String scale = null; + if (p.dtype_len() != null) { + len = p.dtype_len().L_INT(0).getText(); + if (p.dtype_len().L_INT(1) != null) { + scale = p.dtype_len().L_INT(1).getText(); + } + } + Var value = evalPop(a); + Var var = setCallParameter(name, type, len, scale, value); + if (trace) { + trace(actual, "SET PARAM " + name + " = " + var.toString()); + } + if (out != null && a.expr_atom() != null && a.expr_atom().ident() != null && + (p.T_OUT() != null || p.T_INOUT() != null)) { + String actualName = a.expr_atom().ident().getText(); + if (actualName != null) { + out.put(actualName, var); + } + } + } + } + + /** + * Set parameters for entry-point call (Main procedure defined by -main option) + */ + void setCallParameters(HplsqlParser.Create_routine_paramsContext ctx) { + int cnt = ctx.create_routine_param_item().size(); + for (int i = 0; i < cnt; i++) { + HplsqlParser.Create_routine_param_itemContext p = ctx.create_routine_param_item(i); + String name = p.ident().getText(); + String type = p.dtype().getText(); + String len = null; + String scale = null; + if (p.dtype_len() != null) { + len = p.dtype_len().L_INT(0).getText(); + if (p.dtype_len().L_INT(1) != null) { + scale = p.dtype_len().L_INT(1).getText(); + } + } + Var value = exec.findVariable(name); + Var var = setCallParameter(name, type, len, scale, value); + if (trace) { + trace(ctx, "SET PARAM " + name + " = " + var.toString()); + } + } + } + + /** + * Create a function or procedure parameter and set its value + */ + Var setCallParameter(String name, String type, String len, String scale, Var value) { + Var var = new Var(name, type, len, scale, null); + var.cast(value); + exec.addVariable(var); + return var; + } + + /** + * Add a user-defined function + */ + public void addUserFunction(HplsqlParser.Create_function_stmtContext ctx) { + String name = ctx.ident().getText(); + if (trace) { + trace(ctx, "CREATE FUNCTION " + name); + } + userMap.put(name.toUpperCase(), ctx); + } + + /** + * Add a user-defined procedure + */ + public void addUserProcedure(HplsqlParser.Create_procedure_stmtContext ctx) { + String name = ctx.ident(0).getText(); + if (trace) { + trace(ctx, "CREATE PROCEDURE " + name); + } + procMap.put(name.toUpperCase(), ctx); + } + + /** + * Execute a special function + */ + public void specExec(HplsqlParser.Expr_spec_funcContext ctx) { + String name = ctx.start.getText().toUpperCase(); + if (trace && ctx.parent.parent instanceof HplsqlParser.Expr_stmtContext) { + trace(ctx, "FUNC " + name); + } + FuncSpecCommand func = specMap.get(name); + if (func != null) { + func.run(ctx); + } + else if(ctx.T_MAX_PART_STRING() != null) { + execMaxPartString(ctx); + } else if(ctx.T_MIN_PART_STRING() != null) { + execMinPartString(ctx); + } else if(ctx.T_MAX_PART_INT() != null) { + execMaxPartInt(ctx); + } else if(ctx.T_MIN_PART_INT() != null) { + execMinPartInt(ctx); + } else if(ctx.T_MAX_PART_DATE() != null) { + execMaxPartDate(ctx); + } else if(ctx.T_MIN_PART_DATE() != null) { + execMinPartDate(ctx); + } else if(ctx.T_PART_LOC() != null) { + execPartLoc(ctx); + } else if(ctx.T_SYSDATE() != null) { + execCurrentTimestamp(ctx, 0); + } else { + evalNull(); + } + } + + /** + * Execute a special function in executable SQL statement + */ + public void specExecSql(HplsqlParser.Expr_spec_funcContext ctx) { + String name = ctx.start.getText().toUpperCase(); + if (trace && ctx.parent.parent instanceof HplsqlParser.Expr_stmtContext) { + trace(ctx, "FUNC " + name); + } + FuncSpecCommand func = specSqlMap.get(name); + if (func != null) { + func.run(ctx); + } + else { + exec.stackPush(exec.getFormattedText(ctx)); + } + } + + /** + * Get the current date + */ + public void execCurrentDate(HplsqlParser.Expr_spec_funcContext ctx) { + if(trace) { + trace(ctx, "CURRENT_DATE"); + } + SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd"); + String s = f.format(Calendar.getInstance().getTime()); + exec.stackPush(new Var(Var.Type.DATE, Utils.toDate(s))); + } + + /** + * Get the current date and time + */ + public void execCurrentTimestamp(HplsqlParser.Expr_spec_funcContext ctx, int defPrecision) { + trace(ctx, "CURRENT_TIMESTAMP"); + int precision = evalPop(ctx.expr(0), defPrecision).intValue(); + String format = "yyyy-MM-dd HH:mm:ss"; + if(precision > 0 && precision <= 3) { + format += "." + StringUtils.repeat("S", precision); + } + SimpleDateFormat f = new SimpleDateFormat(format); + String s = f.format(Calendar.getInstance(TimeZone.getDefault()).getTime()); + exec.stackPush(new Var(Utils.toTimestamp(s), precision)); + } + + /** + * Execute MAX_PART_STRING function + */ + public void execMaxPartString(HplsqlParser.Expr_spec_funcContext ctx) { + if(trace) { + trace(ctx, "MAX_PART_STRING"); + } + execMinMaxPart(ctx, Var.Type.STRING, true /*max*/); + } + + /** + * Execute MIN_PART_STRING function + */ + public void execMinPartString(HplsqlParser.Expr_spec_funcContext ctx) { + if(trace) { + trace(ctx, "MIN_PART_STRING"); + } + execMinMaxPart(ctx, Var.Type.STRING, false /*max*/); + } + + /** + * Execute MAX_PART_INT function + */ + public void execMaxPartInt(HplsqlParser.Expr_spec_funcContext ctx) { + if(trace) { + trace(ctx, "MAX_PART_INT"); + } + execMinMaxPart(ctx, Var.Type.BIGINT, true /*max*/); + } + + /** + * Execute MIN_PART_INT function + */ + public void execMinPartInt(HplsqlParser.Expr_spec_funcContext ctx) { + if(trace) { + trace(ctx, "MIN_PART_INT"); + } + execMinMaxPart(ctx, Var.Type.BIGINT, false /*max*/); + } + + /** + * Execute MAX_PART_DATE function + */ + public void execMaxPartDate(HplsqlParser.Expr_spec_funcContext ctx) { + if(trace) { + trace(ctx, "MAX_PART_DATE"); + } + execMinMaxPart(ctx, Var.Type.DATE, true /*max*/); + } + + /** + * Execute MIN_PART_DATE function + */ + public void execMinPartDate(HplsqlParser.Expr_spec_funcContext ctx) { + if(trace) { + trace(ctx, "MIN_PART_DATE"); + } + execMinMaxPart(ctx, Var.Type.DATE, false /*max*/); + } + + /** + * Execute MIN or MAX partition function + */ + public void execMinMaxPart(HplsqlParser.Expr_spec_funcContext ctx, Var.Type type, boolean max) { + String tabname = evalPop(ctx.expr(0)).toString(); + String sql = "SHOW PARTITIONS " + tabname; + String colname = null; + int colnum = -1; + int exprnum = ctx.expr().size(); + // Column name + if (ctx.expr(1) != null) { + colname = evalPop(ctx.expr(1)).toString(); + } else { + colnum = 0; + } + // Partition filter + if (exprnum >= 4) { + sql += " PARTITION ("; + int i = 2; + while (i + 1 < exprnum) { + String fcol = evalPop(ctx.expr(i)).toString(); + String fval = evalPop(ctx.expr(i+1)).toSqlString(); + if (i > 2) { + sql += ", "; + } + sql += fcol + "=" + fval; + i += 2; + } + sql += ")"; + } + if (trace) { + trace(ctx, "Query: " + sql); + } + if (exec.getOffline()) { + evalNull(); + return; + } + Query query = exec.executeQuery(ctx, sql, exec.conf.defaultConnection); + if (query.error()) { + evalNullClose(query, exec.conf.defaultConnection); + return; + } + ResultSet rs = query.getResultSet(); + try { + String resultString = null; + Long resultInt = null; + Date resultDate = null; + while (rs.next()) { + String[] parts = rs.getString(1).split("/"); + // Find partition column by name + if (colnum == -1) { + for (int i = 0; i < parts.length; i++) { + String[] name = parts[i].split("="); + if (name[0].equalsIgnoreCase(colname)) { + colnum = i; + break; + } + } + // No partition column with the specified name exists + if (colnum == -1) { + evalNullClose(query, exec.conf.defaultConnection); + return; + } + } + String[] pair = parts[colnum].split("="); + if (type == Var.Type.STRING) { + resultString = Utils.minMaxString(resultString, pair[1], max); + } + else if (type == Var.Type.BIGINT) { + resultInt = Utils.minMaxInt(resultInt, pair[1], max); + } + else if (type == Var.Type.DATE) { + resultDate = Utils.minMaxDate(resultDate, pair[1], max); + } + } + if (resultString != null) { + evalString(resultString); + } + else if (resultInt != null) { + evalInt(resultInt); + } + else if (resultDate != null) { + evalDate(resultDate); + } + else { + evalNull(); + } + } catch (SQLException e) {} + exec.closeQuery(query, exec.conf.defaultConnection); + } + + /** + * Execute PART_LOC function + */ + public void execPartLoc(HplsqlParser.Expr_spec_funcContext ctx) { + String tabname = evalPop(ctx.expr(0)).toString(); + String sql = "DESCRIBE EXTENDED " + tabname; + int exprnum = ctx.expr().size(); + boolean hostname = false; + // Partition filter + if (exprnum > 1) { + sql += " PARTITION ("; + int i = 1; + while (i + 1 < exprnum) { + String col = evalPop(ctx.expr(i)).toString(); + String val = evalPop(ctx.expr(i+1)).toSqlString(); + if (i > 2) { + sql += ", "; + } + sql += col + "=" + val; + i += 2; + } + sql += ")"; + } + // With host name + if (exprnum % 2 == 0 && evalPop(ctx.expr(exprnum - 1)).intValue() == 1) { + hostname = true; + } + if (trace) { + trace(ctx, "Query: " + sql); + } + if (exec.getOffline()) { + evalNull(); + return; + } + Query query = exec.executeQuery(ctx, sql, exec.conf.defaultConnection); + if (query.error()) { + evalNullClose(query, exec.conf.defaultConnection); + return; + } + String result = null; + ResultSet rs = query.getResultSet(); + try { + while (rs.next()) { + if (rs.getString(1).startsWith("Detailed Partition Information")) { + Matcher m = Pattern.compile(".*, location:(.*?),.*").matcher(rs.getString(2)); + if (m.find()) { + result = m.group(1); + } + } + } + } catch (SQLException e) {} + if (result != null) { + // Remove the host name + if (!hostname) { + Matcher m = Pattern.compile(".*://.*?(/.*)").matcher(result); + if (m.find()) { + result = m.group(1); + } + } + evalString(result); + } + else { + evalNull(); + } + exec.closeQuery(query, exec.conf.defaultConnection); + } + + /** + * Evaluate the expression and push the value to the stack + */ + void eval(ParserRuleContext ctx) { + exec.visit(ctx); + } + + /** + * Evaluate the expression to the specified variable + */ + void evalVar(Var var) { + exec.stackPush(var); + } + + /** + * Evaluate the expression to NULL + */ + void evalNull() { + exec.stackPush(Var.Null); + } + + /** + * Evaluate the expression to specified String value + */ + void evalString(String string) { + exec.stackPush(new Var(string)); + } + + void evalString(StringBuilder string) { + evalString(string.toString()); + } + + /** + * Evaluate the expression to specified Int value + */ + void evalInt(Long i) { + exec.stackPush(new Var(i)); + } + + /** + * Evaluate the expression to specified Date value + */ + void evalDate(Date date) { + exec.stackPush(new Var(Var.Type.DATE, date)); + } + + /** + * Evaluate the expression to NULL and close the query + */ + void evalNullClose(Query query, String conn) { + exec.stackPush(Var.Null); + exec.closeQuery(query, conn); + if(trace) { + query.printStackTrace(); + } + } + + /** + * Evaluate the expression and pop value from the stack + */ + Var evalPop(ParserRuleContext ctx) { + exec.visit(ctx); + return exec.stackPop(); + } + + Var evalPop(ParserRuleContext ctx, int value) { + if (ctx != null) { + return evalPop(ctx); + } + return new Var(new Long(value)); + } + + /** + * Execute rules + */ + Integer visit(ParserRuleContext ctx) { + return exec.visit(ctx); + } + + /** + * Execute children rules + */ + Integer visitChildren(ParserRuleContext ctx) { + return exec.visitChildren(ctx); + } + + /** + * Trace information + */ + public void trace(ParserRuleContext ctx, String message) { + if (trace) { + exec.trace(ctx, message); + } + } + + public void trace(String message) { + trace(null, message); + } +} diff --git hplsql/src/main/java/org/apache/hive/hplsql/functions/FunctionDatetime.java hplsql/src/main/java/org/apache/hive/hplsql/functions/FunctionDatetime.java new file mode 100644 index 0000000..926eeeb --- /dev/null +++ hplsql/src/main/java/org/apache/hive/hplsql/functions/FunctionDatetime.java @@ -0,0 +1,151 @@ +/** + * 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. + */ + +package org.apache.hive.hplsql.functions; + +import java.sql.Timestamp; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.TimeZone; + +import org.apache.commons.lang.StringUtils; +import org.apache.hive.hplsql.*; + +public class FunctionDatetime extends Function { + public FunctionDatetime(Exec e) { + super(e); + } + + /** + * Register functions + */ + @Override + public void register(Function f) { + f.map.put("DATE", new FuncCommand() { public void run(HplsqlParser.Expr_func_paramsContext ctx) { date(ctx); }}); + f.map.put("TIMESTAMP_ISO", new FuncCommand() { public void run(HplsqlParser.Expr_func_paramsContext ctx) { timestampIso(ctx); }}); + f.map.put("TO_TIMESTAMP", new FuncCommand() { public void run(HplsqlParser.Expr_func_paramsContext ctx) { toTimestamp(ctx); }}); + + f.specMap.put("CURRENT_DATE", new FuncSpecCommand() { public void run(HplsqlParser.Expr_spec_funcContext ctx) { currentDate(ctx); }}); + f.specMap.put("CURRENT_TIMESTAMP", new FuncSpecCommand() { public void run(HplsqlParser.Expr_spec_funcContext ctx) { currentTimestamp(ctx); }}); + + f.specSqlMap.put("CURRENT_DATE", new FuncSpecCommand() { public void run(HplsqlParser.Expr_spec_funcContext ctx) { currentDateSql(ctx); }}); + f.specSqlMap.put("CURRENT_TIMESTAMP", new FuncSpecCommand() { public void run(HplsqlParser.Expr_spec_funcContext ctx) { currentTimestampSql(ctx); }}); + } + + /** + * CURRENT_DATE + */ + public void currentDate(HplsqlParser.Expr_spec_funcContext ctx) { + evalVar(currentDate()); + } + + public static Var currentDate() { + SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd"); + String s = f.format(Calendar.getInstance().getTime()); + return new Var(Var.Type.DATE, Utils.toDate(s)); + } + + /** + * CURRENT_DATE in executable SQL statement + */ + public void currentDateSql(HplsqlParser.Expr_spec_funcContext ctx) { + if (exec.getConnectionType() == Conn.Type.HIVE) { + evalString("TO_DATE(FROM_UNIXTIME(UNIX_TIMESTAMP()))"); + } + else { + evalString(exec.getFormattedText(ctx)); + } + } + + /** + * CURRENT_TIMESTAMP + */ + public void currentTimestamp(HplsqlParser.Expr_spec_funcContext ctx) { + int precision = evalPop(ctx.expr(0), 3).intValue(); + evalVar(currentTimestamp(precision)); + } + + public static Var currentTimestamp(int precision) { + String format = "yyyy-MM-dd HH:mm:ss"; + if (precision > 0 && precision <= 3) { + format += "." + StringUtils.repeat("S", precision); + } + SimpleDateFormat f = new SimpleDateFormat(format); + String s = f.format(Calendar.getInstance(TimeZone.getDefault()).getTime()); + return new Var(Utils.toTimestamp(s), precision); + } + + /** + * CURRENT_TIMESTAMP in executable SQL statement + */ + public void currentTimestampSql(HplsqlParser.Expr_spec_funcContext ctx) { + if (exec.getConnectionType() == Conn.Type.HIVE) { + evalString("FROM_UNIXTIME(UNIX_TIMESTAMP())"); + } + else { + evalString(exec.getFormattedText(ctx)); + } + } + + /** + * DATE function + */ + void date(HplsqlParser.Expr_func_paramsContext ctx) { + if (ctx.expr().size() != 1) { + evalNull(); + return; + } + Var var = new Var(Var.Type.DATE); + var.cast(evalPop(ctx.expr(0))); + evalVar(var); + } + + /** + * TIMESTAMP_ISO function + */ + void timestampIso(HplsqlParser.Expr_func_paramsContext ctx) { + if (ctx.expr().size() != 1) { + evalNull(); + return; + } + Var var = new Var(Var.Type.TIMESTAMP); + var.cast(evalPop(ctx.expr(0))); + evalVar(var); + } + + /** + * TO_TIMESTAMP function + */ + void toTimestamp(HplsqlParser.Expr_func_paramsContext ctx) { + if (ctx.expr().size() != 2) { + evalNull(); + return; + } + String value = evalPop(ctx.expr(0)).toString(); + String sqlFormat = evalPop(ctx.expr(1)).toString(); + String format = Utils.convertSqlDatetimeFormat(sqlFormat); + try { + long timeInMs = new SimpleDateFormat(format).parse(value).getTime(); + evalVar(new Var(Var.Type.TIMESTAMP, new Timestamp(timeInMs))); + } + catch (Exception e) { + exec.signal(e); + evalNull(); + } + } +} diff --git hplsql/src/main/java/org/apache/hive/hplsql/functions/FunctionMisc.java hplsql/src/main/java/org/apache/hive/hplsql/functions/FunctionMisc.java new file mode 100644 index 0000000..8d2456c --- /dev/null +++ hplsql/src/main/java/org/apache/hive/hplsql/functions/FunctionMisc.java @@ -0,0 +1,188 @@ +/** + * 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. + */ + +package org.apache.hive.hplsql.functions; + +import org.apache.hive.hplsql.*; + +public class FunctionMisc extends Function { + public FunctionMisc(Exec e) { + super(e); + } + + /** + * Register functions + */ + @Override + public void register(Function f) { + f.map.put("COALESCE", new FuncCommand() { public void run(HplsqlParser.Expr_func_paramsContext ctx) { nvl(ctx); }}); + f.map.put("DECODE", new FuncCommand() { public void run(HplsqlParser.Expr_func_paramsContext ctx) { decode(ctx); }}); + f.map.put("NVL", new FuncCommand() { public void run(HplsqlParser.Expr_func_paramsContext ctx) { nvl(ctx); }}); + f.map.put("NVL2", new FuncCommand() { public void run(HplsqlParser.Expr_func_paramsContext ctx) { nvl2(ctx); }}); + + f.specMap.put("ACTIVITY_COUNT", new FuncSpecCommand() { public void run(HplsqlParser.Expr_spec_funcContext ctx) { activityCount(ctx); }}); + f.specMap.put("CAST", new FuncSpecCommand() { public void run(HplsqlParser.Expr_spec_funcContext ctx) { cast(ctx); }}); + f.specMap.put("CURRENT", new FuncSpecCommand() { public void run(HplsqlParser.Expr_spec_funcContext ctx) { current(ctx); }}); + f.specMap.put("CURRENT_USER", new FuncSpecCommand() { public void run(HplsqlParser.Expr_spec_funcContext ctx) { currentUser(ctx); }}); + f.specMap.put("USER", new FuncSpecCommand() { public void run(HplsqlParser.Expr_spec_funcContext ctx) { currentUser(ctx); }}); + + f.specSqlMap.put("CURRENT", new FuncSpecCommand() { public void run(HplsqlParser.Expr_spec_funcContext ctx) { currentSql(ctx); }}); + } + + /** + * ACTIVITY_COUNT function (built-in variable) + */ + void activityCount(HplsqlParser.Expr_spec_funcContext ctx) { + evalInt(new Long(exec.getRowCount())); + } + + /** + * CAST function + */ + void cast(HplsqlParser.Expr_spec_funcContext ctx) { + if (ctx.expr().size() != 1) { + evalNull(); + return; + } + String type = ctx.dtype().getText(); + String len = null; + String scale = null; + if (ctx.dtype_len() != null) { + len = ctx.dtype_len().L_INT(0).getText(); + if (ctx.dtype_len().L_INT(1) != null) { + scale = ctx.dtype_len().L_INT(1).getText(); + } + } + Var var = new Var(null, type, len, scale, null); + var.cast(evalPop(ctx.expr(0))); + evalVar(var); + } + + /** + * CURRENT function + */ + void current(HplsqlParser.Expr_spec_funcContext ctx) { + if (ctx.T_DATE() != null) { + evalVar(FunctionDatetime.currentDate()); + } + else if (ctx.T_TIMESTAMP() != null) { + int precision = evalPop(ctx.expr(0), 3).intValue(); + evalVar(FunctionDatetime.currentTimestamp(precision)); + } + else if (ctx.T_USER() != null) { + evalVar(FunctionMisc.currentUser()); + } + else { + evalNull(); + } + } + + /** + * CURRENT function in executable SQL statement + */ + void currentSql(HplsqlParser.Expr_spec_funcContext ctx) { + if (ctx.T_DATE() != null) { + if (exec.getConnectionType() == Conn.Type.HIVE) { + evalString("TO_DATE(FROM_UNIXTIME(UNIX_TIMESTAMP()))"); + } + else { + evalString("CURRENT_DATE"); + } + } + else if (ctx.T_TIMESTAMP() != null) { + if (exec.getConnectionType() == Conn.Type.HIVE) { + evalString("FROM_UNIXTIME(UNIX_TIMESTAMP())"); + } + else { + evalString("CURRENT_TIMESTAMP"); + } + } + else { + evalString(exec.getFormattedText(ctx)); + } + } + + /** + * CURRENT_USER function + */ + void currentUser(HplsqlParser.Expr_spec_funcContext ctx) { + evalVar(currentUser()); + } + + public static Var currentUser() { + return new Var(System.getProperty("user.name")); + } + + /** + * DECODE function + */ + void decode(HplsqlParser.Expr_func_paramsContext ctx) { + int cnt = ctx.expr().size(); + if (cnt < 3) { + evalNull(); + return; + } + Var value = evalPop(ctx.expr(0)); + int i = 1; + while (i + 1 < cnt) { + Var when = evalPop(ctx.expr(i)); + if ((value.isNull() && when.isNull()) || value.equals(when)) { + eval(ctx.expr(i + 1)); + return; + } + i += 2; + } + if (i < cnt) { // ELSE expression + eval(ctx.expr(i)); + } + else { + evalNull(); + } + } + + /** + * NVL function - Return first non-NULL expression + */ + void nvl(HplsqlParser.Expr_func_paramsContext ctx) { + for (int i=0; i < ctx.expr().size(); i++) { + Var v = evalPop(ctx.expr(i)); + if (v.type != Var.Type.NULL) { + exec.stackPush(v); + return; + } + } + evalNull(); + } + + /** + * NVL2 function - If expr1 is not NULL return expr2, otherwise expr3 + */ + void nvl2(HplsqlParser.Expr_func_paramsContext ctx) { + if (ctx.expr().size() == 3) { + if (!evalPop(ctx.expr(0)).isNull()) { + eval(ctx.expr(1)); + } + else { + eval(ctx.expr(2)); + } + } + else { + evalNull(); + } + } +} diff --git hplsql/src/main/java/org/apache/hive/hplsql/functions/FunctionOra.java hplsql/src/main/java/org/apache/hive/hplsql/functions/FunctionOra.java new file mode 100644 index 0000000..fec891a --- /dev/null +++ hplsql/src/main/java/org/apache/hive/hplsql/functions/FunctionOra.java @@ -0,0 +1,231 @@ +/** + * 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. + */ + +package org.apache.hive.hplsql.functions; + +import java.io.IOException; +import java.io.EOFException; + +import org.apache.hive.hplsql.*; + +public class FunctionOra extends Function { + public FunctionOra(Exec e) { + super(e); + } + + /** + * Register functions + */ + @Override + public void register(Function f) { + f.map.put("DBMS_OUTPUT.PUT_LINE", new FuncCommand() { public void run(HplsqlParser.Expr_func_paramsContext ctx) { + execDbmsOutputPutLine(ctx); }}); + f.map.put("UTL_FILE.FOPEN", new FuncCommand() { public void run(HplsqlParser.Expr_func_paramsContext ctx) { + execUtlFileFopen(ctx); }}); + f.map.put("UTL_FILE.GET_LINE", new FuncCommand() { public void run(HplsqlParser.Expr_func_paramsContext ctx) { + execUtlFileGetLine(ctx); }}); + f.map.put("UTL_FILE.PUT_LINE", new FuncCommand() { public void run(HplsqlParser.Expr_func_paramsContext ctx) { + execUtlFilePutLine(ctx); }}); + f.map.put("UTL_FILE.PUT", new FuncCommand() { public void run(HplsqlParser.Expr_func_paramsContext ctx) { + execUtlFilePut(ctx); }}); + f.map.put("UTL_FILE.FCLOSE", new FuncCommand() { public void run(HplsqlParser.Expr_func_paramsContext ctx) { + execUtlFileFclose(ctx); }}); + } + + /** + * Print a text message + */ + void execDbmsOutputPutLine(HplsqlParser.Expr_func_paramsContext ctx) { + if (ctx.expr().size() > 0) { + visit(ctx.expr(0)); + System.out.println(exec.stackPop().toString()); + } + } + + /** + * Execute UTL_FILE.FOPEN function + */ + public void execUtlFileFopen(HplsqlParser.Expr_func_paramsContext ctx) { + String dir = ""; + String name = ""; + boolean write = true; + boolean overwrite = false; + int cnt = ctx.expr().size(); + // Directory + if (cnt > 0) { + dir = evalPop(ctx.expr(0)).toString(); + } + // File name + if (cnt > 1) { + name = evalPop(ctx.expr(1)).toString(); + } + // Mode + if (cnt >= 2) { + String mode = evalPop(ctx.expr(2)).toString(); + if (mode.equalsIgnoreCase("r")) { + write = false; + } + else if (mode.equalsIgnoreCase("w")) { + write = true; + overwrite = true; + } + } + File file = new File(); + if (write) { + file.create(dir, name, overwrite); + } + else { + file.open(dir, name); + } + exec.stackPush(new Var(Var.Type.FILE, file)); + } + + /** + * Read a text line from an open file + */ + void execUtlFileGetLine(HplsqlParser.Expr_func_paramsContext ctx) { + int cnt = ctx.expr().size(); + Var file = null; + Var str = null; + StringBuilder out = new StringBuilder(); + + // File handle + if(cnt > 0) { + visit(ctx.expr(0)); + file = exec.stackPop(); + } + // String variable + if(cnt > 1) { + visit(ctx.expr(1)); + str = exec.stackPop(); + } + + if(file != null && file.type == Var.Type.FILE) { + File f = (File)file.value; + + if(trace) { + trace(ctx, "File: " + f.toString()); + } + + try { + while(true) { + char c = f.readChar(); + if(c == '\n') { + break; + } + out.append(c); + } + } catch (IOException e) { + if(!(e instanceof EOFException)) { + out.setLength(0); + } + } + + // Set the new value to the output string variable + if(str != null) { + str.setValue(out.toString()); + + if(trace) { + trace(ctx, "OUT " + str.getName() + " = " + str.toString()); + } + } + } + else if(trace) { + trace(ctx, "Variable of FILE type not found"); + } + } + + /** + * Execute UTL_FILE.PUT_LINE function + */ + public void execUtlFilePutLine(HplsqlParser.Expr_func_paramsContext ctx) { + execUtlFilePut(ctx, true /*newline*/); + } + + /** + * Execute UTL_FILE.PUT function + */ + public void execUtlFilePut(HplsqlParser.Expr_func_paramsContext ctx) { + execUtlFilePut(ctx, false /*newline*/); + } + + /** + * Write a string to file + */ + void execUtlFilePut(HplsqlParser.Expr_func_paramsContext ctx, boolean newline) { + int cnt = ctx.expr().size(); + Var file = null; + String str = ""; + + // File handle + if(cnt > 0) { + visit(ctx.expr(0)); + file = exec.stackPop(); + } + // Text string + if(cnt > 1) { + visit(ctx.expr(1)); + str = exec.stackPop().toString(); + } + + if(file != null && file.type == Var.Type.FILE) { + File f = (File)file.value; + + if(trace) { + trace(ctx, "File: " + f.toString()); + } + + f.writeString(str); + + if(newline) { + f.writeString("\n"); + } + } + else if(trace) { + trace(ctx, "Variable of FILE type not found"); + } + } + + /** + * Execute UTL_FILE.FCLOSE function + */ + void execUtlFileFclose(HplsqlParser.Expr_func_paramsContext ctx) { + int cnt = ctx.expr().size(); + Var file = null; + + // File handle + if(cnt > 0) { + visit(ctx.expr(0)); + file = exec.stackPop(); + } + + if(file != null && file.type == Var.Type.FILE) { + File f = (File)file.value; + + if(trace) { + trace(ctx, "File: " + f.toString()); + } + + f.close(); + file.removeValue(); + } + else if(trace) { + trace(ctx, "Variable of FILE type not found"); + } + } +} diff --git hplsql/src/main/java/org/apache/hive/hplsql/functions/FunctionString.java hplsql/src/main/java/org/apache/hive/hplsql/functions/FunctionString.java new file mode 100644 index 0000000..610ff60 --- /dev/null +++ hplsql/src/main/java/org/apache/hive/hplsql/functions/FunctionString.java @@ -0,0 +1,276 @@ +/** + * 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. + */ + +package org.apache.hive.hplsql.functions; + +import org.apache.hive.hplsql.*; + +public class FunctionString extends Function { + public FunctionString(Exec e) { + super(e); + } + + /** + * Register functions + */ + @Override + public void register(Function f) { + f.map.put("CONCAT", new FuncCommand() { public void run(HplsqlParser.Expr_func_paramsContext ctx) { concat(ctx); }}); + f.map.put("CHAR", new FuncCommand() { public void run(HplsqlParser.Expr_func_paramsContext ctx) { char_(ctx); }}); + f.map.put("INSTR", new FuncCommand() { public void run(HplsqlParser.Expr_func_paramsContext ctx) { instr(ctx); }}); + f.map.put("LEN", new FuncCommand() { public void run(HplsqlParser.Expr_func_paramsContext ctx) { len(ctx); }}); + f.map.put("LENGTH", new FuncCommand() { public void run(HplsqlParser.Expr_func_paramsContext ctx) { length(ctx); }}); + f.map.put("LOWER", new FuncCommand() { public void run(HplsqlParser.Expr_func_paramsContext ctx) { lower(ctx); }}); + f.map.put("SUBSTR", new FuncCommand() { public void run(HplsqlParser.Expr_func_paramsContext ctx) { substr(ctx); }}); + f.map.put("SUBSTRING", new FuncCommand() { public void run(HplsqlParser.Expr_func_paramsContext ctx) { substr(ctx); }}); + f.map.put("TO_CHAR", new FuncCommand() { public void run(HplsqlParser.Expr_func_paramsContext ctx) { toChar(ctx); }}); + f.map.put("UPPER", new FuncCommand() { public void run(HplsqlParser.Expr_func_paramsContext ctx) { upper(ctx); }}); + + f.specMap.put("SUBSTRING", new FuncSpecCommand() { public void run(HplsqlParser.Expr_spec_funcContext ctx) { substring(ctx); }}); + f.specMap.put("TRIM", new FuncSpecCommand() { public void run(HplsqlParser.Expr_spec_funcContext ctx) { trim(ctx); }}); + } + + /** + * CONCAT function + */ + void concat(HplsqlParser.Expr_func_paramsContext ctx) { + StringBuilder val = new StringBuilder(); + int cnt = ctx.expr().size(); + boolean nulls = true; + for (int i = 0; i < cnt; i++) { + Var c = evalPop(ctx.expr(i)); + if (!c.isNull()) { + val.append(c.toString()); + nulls = false; + } + } + if (nulls) { + evalNull(); + } + else { + evalString(val); + } + } + + /** + * CHAR function + */ + void char_(HplsqlParser.Expr_func_paramsContext ctx) { + int cnt = ctx.expr().size(); + if (cnt != 1) { + evalNull(); + return; + } + String str = evalPop(ctx.expr(0)).toString(); + evalString(str); + } + + /** + * INSTR function + */ + void instr(HplsqlParser.Expr_func_paramsContext ctx) { + int cnt = ctx.expr().size(); + if (cnt < 2) { + evalNull(); + return; + } + String str = evalPop(ctx.expr(0)).toString(); + if (str == null) { + evalNull(); + return; + } + else if(str.isEmpty()) { + evalInt(new Long(0)); + return; + } + String substr = evalPop(ctx.expr(1)).toString(); + int pos = 1; + int occur = 1; + int idx = 0; + if (cnt >= 3) { + pos = evalPop(ctx.expr(2)).intValue(); + if (pos == 0) { + pos = 1; + } + } + if (cnt >= 4) { + occur = evalPop(ctx.expr(3)).intValue(); + if (occur < 0) { + occur = 1; + } + } + for (int i = occur; i > 0; i--) { + if (pos > 0) { + idx = str.indexOf(substr, pos - 1); + } + else { + str = str.substring(0, str.length() - pos*(-1)); + idx = str.lastIndexOf(substr); + } + if (idx == -1) { + idx = 0; + break; + } + else { + idx++; + } + if (i > 1) { + if (pos > 0) { + pos = idx + 1; + } + else { + pos = (str.length() - idx + 1) * (-1); + } + } + } + evalInt(new Long(idx)); + } + + /** + * LEN function (excluding trailing spaces) + */ + void len(HplsqlParser.Expr_func_paramsContext ctx) { + if (ctx.expr().size() != 1) { + evalNull(); + return; + } + int len = evalPop(ctx.expr(0)).toString().trim().length(); + evalInt(new Long(len)); + } + + /** + * LENGTH function + */ + void length(HplsqlParser.Expr_func_paramsContext ctx) { + if (ctx.expr().size() != 1) { + evalNull(); + return; + } + int len = evalPop(ctx.expr(0)).toString().length(); + evalInt(new Long(len)); + } + + /** + * LOWER function + */ + void lower(HplsqlParser.Expr_func_paramsContext ctx) { + if (ctx.expr().size() != 1) { + evalNull(); + return; + } + String str = evalPop(ctx.expr(0)).toString().toLowerCase(); + evalString(str); + } + + /** + * SUBSTR and SUBSTRING function + */ + void substr(HplsqlParser.Expr_func_paramsContext ctx) { + int cnt = ctx.expr().size(); + if (cnt < 2) { + evalNull(); + return; + } + String str = evalPop(ctx.expr(0)).toString(); + int start = evalPop(ctx.expr(1)).intValue(); + int len = -1; + if (start == 0) { + start = 1; + } + if (cnt > 2) { + len = evalPop(ctx.expr(2)).intValue(); + } + substr(str, start, len); + } + + void substr(String str, int start, int len) { + if (str == null) { + evalNull(); + return; + } + else if (str.isEmpty()) { + evalString(str); + return; + } + if (start == 0) { + start = 1; + } + if (len == -1) { + if (start > 0) { + evalString(str.substring(start - 1)); + } + } + else { + evalString(str.substring(start - 1, start - 1 + len)); + } + } + + /** + * SUBSTRING FROM FOR function + */ + void substring(HplsqlParser.Expr_spec_funcContext ctx) { + String str = evalPop(ctx.expr(0)).toString(); + int start = evalPop(ctx.expr(1)).intValue(); + int len = -1; + if (start == 0) { + start = 1; + } + if (ctx.T_FOR() != null) { + len = evalPop(ctx.expr(2)).intValue(); + } + substr(str, start, len); + } + + /** + * TRIM function + */ + void trim(HplsqlParser.Expr_spec_funcContext ctx) { + int cnt = ctx.expr().size(); + if (cnt != 1) { + evalNull(); + return; + } + String str = evalPop(ctx.expr(0)).toString(); + evalString(str.trim()); + } + + /** + * TO_CHAR function + */ + void toChar(HplsqlParser.Expr_func_paramsContext ctx) { + int cnt = ctx.expr().size(); + if (cnt != 1) { + evalNull(); + return; + } + String str = evalPop(ctx.expr(0)).toString(); + evalString(str); + } + + /** + * UPPER function + */ + void upper(HplsqlParser.Expr_func_paramsContext ctx) { + if (ctx.expr().size() != 1) { + evalNull(); + return; + } + String str = evalPop(ctx.expr(0)).toString().toUpperCase(); + evalString(str); + } +} diff --git pom.xml pom.xml index 9014d70..45a1642 100644 --- pom.xml +++ pom.xml @@ -39,6 +39,7 @@ contrib hbase-handler hcatalog + hplsql hwi jdbc metastore