diff --git a/build.gradle b/build.gradle index de289105c..43b75a34e 100644 --- a/build.gradle +++ b/build.gradle @@ -14,6 +14,7 @@ plugins { // download the RR tools which have no Maven Repository id "de.undercouch.download" version "latest.release" + id 'org.hidetake.ssh' version "latest.release" id "se.bjurr.gitchangelog.git-changelog-gradle-plugin" version "latest.release" } @@ -85,8 +86,8 @@ dependencies { testImplementation 'org.mockito:mockito-junit-jupiter:4.+' // enforce latest version of JavaCC - testImplementation 'net.java.dev.javacc:javacc:7.0.12' - javacc 'net.java.dev.javacc:javacc:7.0.12' + testImplementation 'net.java.dev.javacc:javacc:+' + javacc 'net.java.dev.javacc:javacc:+' } compileJavacc { @@ -98,6 +99,11 @@ java { withJavadocJar() } +javadoc { + options.addBooleanOption('html5', true) + options.addBooleanOption("Xdoclint:none", true) +} + test { environment = [ 'EXPORT_TEST_TO_FILE': 'True' ] useJUnitPlatform() @@ -231,7 +237,7 @@ spotless { format 'misc', { // define the files to apply `misc` to - target '*.gradle', '*.md', '.gitignore' + target '*.rst', '*.md', '.gitignore' // define the steps to apply to those files trimTrailingWhitespace() @@ -426,36 +432,33 @@ tasks.withType(JavaCompile) { options.encoding = 'UTF-8' } -task upload(type: Exec) { - dependsOn(build, gitChangelogTask) - - def versionStable = getVersion(false) - - if( findProperty("${project.name}.host")==null ) { - println( -""" -Property \"${project.name}.host\' not found. -Please define \"${project.name}.host\" in the Gradle configuration (e. g. \$HOME/.gradle/gradle.properties. -""" - ) - } else { - - // define the USERNAME and HOST properties in ~/.gradle/gradle.properties - args = ["sftp://${findProperty("${project.name}.username")}@${findProperty("${project.name}.host")}/download"] - - executable "sftp" - - standardInput = new ByteArrayInputStream("""< \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" +MAX_FD=maximum warn () { echo "$*" -} +} >&2 die () { echo echo "$*" echo exit 1 -} +} >&2 # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MSYS* | MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar @@ -87,9 +121,9 @@ CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACMD=$JAVA_HOME/jre/sh/java else - JAVACMD="$JAVA_HOME/bin/java" + JAVACMD=$JAVA_HOME/bin/java fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME @@ -98,7 +132,7 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else - JAVACMD="java" + JAVACMD=java which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the @@ -106,80 +140,105 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac fi -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. # For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) fi - i=`expr $i + 1` + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg done - case $i in - 0) set -- ;; - 1) set -- "$args0" ;; - 2) set -- "$args0" "$args1" ;; - 3) set -- "$args0" "$args1" "$args2" ;; - 4) set -- "$args0" "$args1" "$args2" "$args3" ;; - 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac fi -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=`save "$@"` +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index ac1b06f93..6689b85be 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -14,7 +14,7 @@ @rem limitations under the License. @rem -@if "%DEBUG%" == "" @echo off +@if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @@ -25,7 +25,8 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @@ -40,7 +41,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute +if %ERRORLEVEL% equ 0 goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -75,13 +76,15 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar :end @rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd +if %ERRORLEVEL% equ 0 goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% :mainEnd if "%OS%"=="Windows_NT" endlocal diff --git a/src/main/java/net/sf/jsqlparser/parser/feature/Feature.java b/src/main/java/net/sf/jsqlparser/parser/feature/Feature.java index d9fbe1811..540ad65a0 100644 --- a/src/main/java/net/sf/jsqlparser/parser/feature/Feature.java +++ b/src/main/java/net/sf/jsqlparser/parser/feature/Feature.java @@ -59,7 +59,7 @@ import net.sf.jsqlparser.statement.select.Top; import net.sf.jsqlparser.statement.select.UnPivot; import net.sf.jsqlparser.statement.select.ValuesList; -import net.sf.jsqlparser.statement.show.ShowTablesStatement; +import net.sf.jsqlparser.statement.show.*; import net.sf.jsqlparser.statement.truncate.Truncate; import net.sf.jsqlparser.statement.update.Update; import net.sf.jsqlparser.statement.upsert.Upsert; @@ -771,8 +771,8 @@ public enum Feature { allowBackslashEscapeCharacter(false), ; - private Object value; - private boolean configurable; + private final Object value; + private final boolean configurable; /** * a feature which can't configured within the parser @@ -785,7 +785,7 @@ public enum Feature { /** * a feature which can be configured by {@link FeatureConfiguration} * - * @param value + * @param value The Value Object of the Parameter. */ Feature(Object value) { this.value = value; diff --git a/src/main/java/net/sf/jsqlparser/statement/SetStatement.java b/src/main/java/net/sf/jsqlparser/statement/SetStatement.java index 11b597f83..f0614587f 100644 --- a/src/main/java/net/sf/jsqlparser/statement/SetStatement.java +++ b/src/main/java/net/sf/jsqlparser/statement/SetStatement.java @@ -10,8 +10,8 @@ package net.sf.jsqlparser.statement; import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; +import java.util.*; + import net.sf.jsqlparser.expression.Expression; import net.sf.jsqlparser.statement.select.PlainSelect; @@ -59,14 +59,15 @@ public SetStatement setUseEqual(int idx, boolean useEqual) { } public SetStatement withUseEqual(boolean useEqual) { - this.setUseEqual(useEqual); - return this; - } + this.setUseEqual(useEqual); + return this; + } public SetStatement setUseEqual(boolean useEqual) { return setUseEqual(0, useEqual); } + public Object getName() { return getName(0); } @@ -100,8 +101,8 @@ public void setExpressions(List expressions) { } private String toString(NameExpr ne) { - return ne.name + (ne.useEqual ? " = " : " ") + - PlainSelect.getStringList(ne.expressions, true, false); + return ne.name + (ne.useEqual ? " = " : " ") + + PlainSelect.getStringList(ne.expressions, true, false); } @Override @@ -123,16 +124,56 @@ public String toString() { return b.toString(); } + public List getKeyValuePairs() { + return values; + } + + public void addKeyValuePairs(Collection keyValuePairs) { + values.addAll(keyValuePairs); + } + + public void addKeyValuePairs(NameExpr... keyValuePairs) { + addKeyValuePairs(Arrays.asList(keyValuePairs)); + } + + public void clear() { + values.clear(); + effectParameter = null; + } + @Override public void accept(StatementVisitor statementVisitor) { statementVisitor.visit(this); } static class NameExpr implements Serializable { + Object name; + List expressions; + boolean useEqual; - private Object name; - private List expressions; - private boolean useEqual; + public Object getName() { + return name; + } + + public void setName(Object name) { + this.name = name; + } + + public List getExpressions() { + return expressions; + } + + public void setExpressions(List expressions) { + this.expressions = expressions; + } + + public boolean isUseEqual() { + return useEqual; + } + + public void setUseEqual(boolean useEqual) { + this.useEqual = useEqual; + } public NameExpr(Object name, List expressions, boolean useEqual) { this.name = name; @@ -148,6 +189,7 @@ public String getEffectParameter() { public void setEffectParameter(String effectParameter) { this.effectParameter = effectParameter; } + public SetStatement withEffectParameter(String effectParameter) { this.effectParameter = effectParameter; return this; diff --git a/src/main/java/net/sf/jsqlparser/statement/insert/InsertConflictTarget.java b/src/main/java/net/sf/jsqlparser/statement/insert/InsertConflictTarget.java index 4366507d2..070996483 100644 --- a/src/main/java/net/sf/jsqlparser/statement/insert/InsertConflictTarget.java +++ b/src/main/java/net/sf/jsqlparser/statement/insert/InsertConflictTarget.java @@ -12,53 +12,82 @@ import net.sf.jsqlparser.expression.Expression; import java.io.Serializable; +import java.util.*; /** * https://www.postgresql.org/docs/current/sql-insert.html + * *
  * conflict_target can be one of:
  *
  *     ( { index_column_name | ( index_expression ) } [ COLLATE collation ] [ opclass ] [, ...] ) [ WHERE index_predicate ]
  *     ON CONSTRAINT constraint_name
  * 
+ * * Currently, COLLATE is not supported yet. */ public class InsertConflictTarget implements Serializable { - String indexColumnName; + ArrayList indexColumnNames = new ArrayList<>(); Expression indexExpression; Expression whereExpression; String constraintName; - public InsertConflictTarget(String indexColumnName, Expression indexExpression, Expression whereExpression, String constraintName) { - this.indexColumnName = indexColumnName; + public InsertConflictTarget(String indexColumnName, Expression indexExpression, + Expression whereExpression, String constraintName) { + this.indexColumnNames.add(indexColumnName); this.indexExpression = indexExpression; this.whereExpression = whereExpression; this.constraintName = constraintName; } + public InsertConflictTarget(Collection indexColumnName, Expression indexExpression, + Expression whereExpression, String constraintName) { + this.indexColumnNames.addAll(indexColumnName); + this.indexExpression = indexExpression; + + this.whereExpression = whereExpression; + this.constraintName = constraintName; + } + + public List getIndexColumnNames() { + return indexColumnNames; + } + + @Deprecated public String getIndexColumnName() { - return indexColumnName; + return indexColumnNames.isEmpty() ? null : indexColumnNames.get(0); } - public void setIndexColumnName(String indexColumnName) { - this.indexColumnName = indexColumnName; + public String getIndexColumnName(int index) { + return indexColumnNames.size() > index ? indexColumnNames.get(index) : null; + } + + public boolean addIndexColumnName(String indexColumnName) { this.indexExpression = null; + return this.indexColumnNames.add(indexColumnName); } public InsertConflictTarget withIndexColumnName(String indexColumnName) { - setIndexColumnName(indexColumnName); + this.indexExpression = null; + this.indexColumnNames.add(indexColumnName); return this; } + public boolean addAllIndexColumnNames(Collection indexColumnName) { + this.indexExpression = null; + return this.indexColumnNames.addAll(indexColumnName); + } + + public Expression getIndexExpression() { return indexExpression; } public void setIndexExpression(Expression indexExpression) { this.indexExpression = indexExpression; - this.indexColumnName = null; + this.indexColumnNames.clear(); } public InsertConflictTarget withIndexExpression(Expression indexExpression) { @@ -93,18 +122,22 @@ public InsertConflictTarget withConstraintName(String constraintName) { } public StringBuilder appendTo(StringBuilder builder) { - if (constraintName==null) { + if (constraintName == null) { builder.append(" ( "); - //@todo: Index Expression is not supported yet - //if (indexColumnName != null) { - builder.append(indexColumnName); - //} else { - // builder.append(" ( ").append(indexExpression).append(" )"); - //} + // @todo: Index Expression is not supported yet + if (!indexColumnNames.isEmpty()) { + boolean insertComma = false; + for (String s : indexColumnNames) { + builder.append(insertComma ? ", " : " ").append(s); + insertComma |= true; + } + } else { + builder.append(" ( ").append(indexExpression).append(" )"); + } builder.append(" "); - //@todo: Collate is not supported yet + // @todo: Collate is not supported yet builder.append(") "); diff --git a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt index bd99ec238..326296a07 100644 --- a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt +++ b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt @@ -520,7 +520,7 @@ TOKEN: | <#Pc: ["‿"-"⁀","⁔","︳"-"︴","﹍"-"﹏","_"]> // CJK Unified Ideographs block according to https://en.wikipedia.org/wiki/CJK_Unified_Ideographs_(Unicode_block) -| <#CJK: ["\u4E00"-"\u9FFF"]> +| <#CJK: ["\uAC00"-"\uD7A3", "\u4E00"-"\u9FFF"]> | < #SPECIAL_ESC: "\\'" > /* Allowing this will break LIKE ... ESCAPE ... */ | < #ESC: "\\" ["n","t","b","r","f","\\","\""] > @@ -1458,7 +1458,8 @@ Insert Insert( List with ): InsertConflictTarget InsertConflictTarget(): { - String indexColumnName = null; + String indexColumnName; + ArrayList indexColumnNames = new ArrayList(); Expression indexExpression = null; Expression whereExpression = null; String constraintName = null ; @@ -1466,8 +1467,9 @@ InsertConflictTarget InsertConflictTarget(): { ( ( - "(" - indexColumnName = RelObjectNameExt2() + "(" + indexColumnName = RelObjectNameExt2() { indexColumnNames.add(indexColumnName); } + ( "," indexColumnName = RelObjectNameExt2() { indexColumnNames.add(indexColumnName); } )* // | // ( // "(" indexExpression = Expression() ")" @@ -1482,7 +1484,7 @@ InsertConflictTarget InsertConflictTarget(): ) ) - { return new InsertConflictTarget(indexColumnName, indexExpression, whereExpression, constraintName); } + { return new InsertConflictTarget(indexColumnNames, indexExpression, whereExpression, constraintName); } } InsertConflictAction InsertConflictAction(): @@ -4234,17 +4236,14 @@ JsonExpression JsonExpression() : { LOOKAHEAD(JsonAggregateFunction(), {!interrupted}) expr = JsonAggregateFunction() | LOOKAHEAD(FullTextSearch(), {!interrupted}) expr = FullTextSearch() - /* Do not parse Functions as this will result in a major performance loss - The Performance related tests will fail. | - LOOKAHEAD(Function(), {!interrupted}) expr=Function() - */ + LOOKAHEAD( 3 , {!interrupted && getAsBoolean(Feature.allowComplexParsing) } ) expr=SimpleFunction() | - LOOKAHEAD(2, {!interrupted}) expr=Column() + LOOKAHEAD( 2, {!interrupted} ) expr=Column() | token= { expr = new StringValue(token.image); } | - LOOKAHEAD("(" expr=SubSelect() ")", {!interrupted} ) "(" expr=SubSelect() ")" + LOOKAHEAD( {!interrupted} ) "(" expr=SubSelect() ")" ) ( "::" type=ColDataType() { @@ -4981,6 +4980,47 @@ Function InternalFunction(Function retval) : } } +Function SimpleFunction() #SimpleFunction : +{ + Function retval = new Function(); + List funcName; + Expression allColumnsExpression = null; + ExpressionList expressionList = null; + KeepExpression keep = null; + List orderByList; + boolean ignoreNulls = false; +} +{ + funcName = RelObjectNameList() + + "(" + [ + LOOKAHEAD(2) + [ + LOOKAHEAD(2)( { retval.setDistinct(true); } + | { retval.setAllColumns(true); } + | { retval.setUnique(true); }) + ] + ( + LOOKAHEAD(4) "*" { allColumnsExpression = new AllColumns(); expressionList = new ExpressionList(allColumnsExpression).withUsingBrackets(false); } + | + LOOKAHEAD(AllTableColumns()) allColumnsExpression=AllTableColumns() { expressionList = new ExpressionList(allColumnsExpression).withUsingBrackets(false); } + | + (expressionList=SimpleExpressionList(false) [ orderByList = OrderByElements() { retval.setOrderByElements(orderByList); } ]) + ) + ] + [ {retval.setIgnoreNulls(true); } ] + ")" + + [ LOOKAHEAD(2) keep = KeepExpression() ] + + { + retval.setParameters(expressionList); + retval.setName(funcName); + return retval; + } +} + XMLSerializeExpr XMLSerializeExpr(): { XMLSerializeExpr result; Expression expression; diff --git a/src/site/sphinx/changelog.rst b/src/site/sphinx/changelog.rst index af003fb7d..f82169468 100644 --- a/src/site/sphinx/changelog.rst +++ b/src/site/sphinx/changelog.rst @@ -8,6 +8,30 @@ Latest Changes since |JSQLPARSER_VERSION| ============================================================= + * **feat: `ConflictTarget` allows multiple `IndexColumnNames`** + + Andreas Reichel, 2023-03-18 + * **style: Appease PMD/Codacy** + + Andreas Reichel, 2023-03-17 + * **style: expose `SetStatement` key-value list** + + Andreas Reichel, 2023-03-17 + * **feat: Add support for Hangul "\uAC00"-"\uD7A3"** + + Andreas Reichel, 2023-03-17 + * **style: Remove unused variable** + + Andreas Reichel, 2023-03-14 + * **style: Reformat changed files and headers** + + Andreas Reichel, 2023-03-14 + * **fix: JSon Operator can use Simple Function** + + Andreas Reichel, 2023-03-14 + * **Assorted Fixes #6 (#1740)** + + manticore-projects, 2023-03-09 * **test: commit missing test** Andreas Reichel, 2023-03-07 @@ -23,6 +47,9 @@ Latest Changes since |JSQLPARSER_VERSION| * **[maven-release-plugin] prepare for next development iteration** Tobias Warneke, 2023-02-23 + * **Oracle Alternative Quoting (#1722)** + + manticore-projects, 2023-02-07 * **feat: Support more Statement Separators** Andreas Reichel, 2023-02-02 @@ -35,6 +62,12 @@ Latest Changes since |JSQLPARSER_VERSION| * **doc: fix the issue template** Andreas Reichel, 2023-02-01 + * **Issue1673 case within brackets (#1675)** + + manticore-projects, 2023-01-31 + * **Added support for SHOW INDEX from table (#1704)** + + Jayant Kumar Yadav, 2023-01-31 * **feat: CREATE VIEW ... REFRESH AUTO...** Andreas Reichel, 2023-01-30 @@ -89,41 +122,6 @@ Latest Changes since |JSQLPARSER_VERSION| * **Do not mark SpeedTest for concurrent execution** Andreas Reichel, 2023-01-21 - * **Reduce cyclomatic complexity in CreateView.toString** - - zaza, 2023-01-08 - * **Fixes #1684: Support CREATE MATERIALIZED VIEW with AUTO REFRESH** - - zaza, 2022-12-11 - -Version jsqlparser-4.6 -============================================================= - - - * **[maven-release-plugin] prepare release jsqlparser-4.6** - - Tobias Warneke, 2023-02-23 - * **actualized release plugin** - - Tobias Warneke, 2023-02-23 - * **actualized release plugin** - - Tobias Warneke, 2023-02-23 - * **Update build.gradle** - - Tobias, 2023-02-17 - * **Update README.md** - - Tobias, 2023-02-17 - * **Oracle Alternative Quoting (#1722)** - - manticore-projects, 2023-02-07 - * **Issue1673 case within brackets (#1675)** - - manticore-projects, 2023-01-31 - * **Added support for SHOW INDEX from table (#1704)** - - Jayant Kumar Yadav, 2023-01-31 * **Sphinx Website (#1624)** manticore-projects, 2023-01-20 @@ -133,6 +131,9 @@ Version jsqlparser-4.6 * **Support DROP MATERIALIZED VIEW statements (#1711)** Tomasz Zarna, 2023-01-12 + * **Reduce cyclomatic complexity in CreateView.toString** + + zaza, 2023-01-08 * **corrected readme** Tobias Warneke, 2023-01-04 @@ -145,6 +146,9 @@ Version jsqlparser-4.6 * **Assorted Fixes #4 (#1676)** manticore-projects, 2022-12-22 + * **Fixes #1684: Support CREATE MATERIALIZED VIEW with AUTO REFRESH** + + zaza, 2022-12-11 * **Fixed download war script in the renderRR task (#1659)** haha1903, 2022-12-10 @@ -212,6 +216,26 @@ Version jsqlparser-4.6 Tobias Warneke, 2022-07-22 +Version jsqlparser-4.6 +============================================================= + + + * **[maven-release-plugin] prepare release jsqlparser-4.6** + + Tobias Warneke, 2023-02-23 + * **actualized release plugin** + + Tobias Warneke, 2023-02-23 + * **actualized release plugin** + + Tobias Warneke, 2023-02-23 + * **Update build.gradle** + + Tobias, 2023-02-17 + * **Update README.md** + + Tobias, 2023-02-17 + Version jsqlparser-4.5 ============================================================= diff --git a/src/site/sphinx/syntax.rst b/src/site/sphinx/syntax.rst index bea6bc83c..37aa83331 100644 --- a/src/site/sphinx/syntax.rst +++ b/src/site/sphinx/syntax.rst @@ -186,7 +186,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
           | AlterSystemStatement
Referenced by: -
+ ====================================================================================================================== @@ -218,7 +218,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
Block    ::= 'BEGIN' ST_SEMICOLON* ( ( SingleStatement | Block ) ST_SEMICOLON )+ 'END' ST_SEMICOLON?
Referenced by: -
+ ====================================================================================================================== @@ -332,7 +332,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
Declare  ::= 'DECLARE' UserVariable ( 'TABLE' '(' ColumnDefinition ( ',' ColumnDefinition )* ')' | 'AS' RelObjectName | ColDataType ( '=' Expression )? ( ',' UserVariable ColDataType ( '=' Expression )? )* )
Referenced by: -
+ ====================================================================================================================== @@ -375,7 +375,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
Set      ::= 'SET' ( 'LOCAL' | 'SESSION' )? ( K_DATETIMELITERAL 'ZONE' | ( UserVariable | RelObjectNameExt ) '='? ) Expression ( ',' ( K_DATETIMELITERAL 'ZONE' | RelObjectNameExt '='? )? Expression )*
Referenced by: -
+ ====================================================================================================================== @@ -403,7 +403,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
Reset    ::= 'RESET' ( K_DATETIMELITERAL 'ZONE' | RelObjectName | 'ALL' )
Referenced by: -
+ ====================================================================================================================== @@ -445,7 +445,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= 'RENAME' 'TABLE'? ( 'IF' 'EXISTS' )? Table ( 'WAIT' S_LONG | 'NOWAIT' )? 'TO' Table ( ',' Table 'TO' Table )*
Referenced by: -
+ ====================================================================================================================== @@ -484,7 +484,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= 'PURGE' ( 'TABLE' Table | 'INDEX' Index | 'RECYCLEBIN' | 'DBA_RECYCLEBIN' | 'TABLESPACE' S_IDENTIFIER ( 'USER' S_IDENTIFIER )? )
Referenced by: -
+ ====================================================================================================================== @@ -507,7 +507,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
Describe ::= 'DESCRIBE' Table
Referenced by: -
+ ====================================================================================================================== @@ -532,7 +532,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
Referenced by: -
+ ====================================================================================================================== @@ -561,7 +561,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= ( 'TRUE' | 'FALSE' | 'ON' | 'OFF' )?
Referenced by: -
+ ====================================================================================================================== @@ -588,7 +588,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= ( 'XML' | 'JSON' | 'YAML' )?
Referenced by: -
+ ====================================================================================================================== @@ -621,7 +621,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= ( ( 'ANALYZE' | 'BUFFERS' | 'COSTS' | 'VERBOSE' ) ExplainOptionBoolean | 'FORMAT' ExplainFormatOption )*
Referenced by: -
+ ====================================================================================================================== @@ -646,7 +646,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
Use      ::= 'USE' 'SCHEMA'? RelObjectNameExt
Referenced by: -
+ ====================================================================================================================== @@ -674,7 +674,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= 'SHOW' 'COLUMNS' 'FROM' RelObjectNameExt
Referenced by: -
+ ====================================================================================================================== @@ -702,7 +702,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= 'SHOW' 'INDEX' 'FROM' RelObjectNameExt
Referenced by: -
+ ====================================================================================================================== @@ -742,7 +742,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= 'SHOW' 'EXTENDED'? 'FULL'? 'TABLES' ( ( 'FROM' | 'IN' ) RelObjectNameExt )? ( 'LIKE' SimpleExpression | 'WHERE' Expression )?
Referenced by: -
+ ====================================================================================================================== @@ -765,7 +765,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
Show     ::= 'SHOW' RelObjectNameExt
Referenced by: -
+ ====================================================================================================================== @@ -790,7 +790,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
Values   ::= ( 'VALUES' | 'VALUE' ) SimpleExpressionList
Referenced by: -
+ ====================================================================================================================== @@ -860,7 +860,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
Update   ::= 'UPDATE' 'LOW_PRIORITY'? 'IGNORE'? TableWithAlias JoinsList 'SET' ( Column '=' SimpleExpression ( ',' Column '=' SimpleExpression )* | '('? Column ( ',' Column )* ')'? '=' ( SubSelect | '(' ComplexExpressionList ')' | Expression ) ( ',' '('? Column ( ',' Column )* ')'? '=' ( SubSelect | '(' ComplexExpressionList ')' | Expression ) )* ) OutputClause? ( 'FROM' FromItem JoinsList )? WhereClause? OrderByElements? PlainLimit? ( 'RETURNING' SelectItemsList )?
Referenced by: -
+ ====================================================================================================================== @@ -962,7 +962,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|. Table ( 'AS'? RelObjectNameWithoutValue )? ( '(' Column ( ',' Column )* ')' )? OutputClause? ( 'SET' Column '=' SimpleExpression ( ',' Column '=' SimpleExpression )* | SelectWithWithItems ) ( 'ON' 'DUPLICATE' 'KEY' 'UPDATE' Column '=' SimpleExpression ( ',' Column '=' SimpleExpression )* )? ( 'ON' 'CONFLICT' InsertConflictTarget? InsertConflictAction )? ( 'RETURNING' SelectItemsList )?
Referenced by: -
+ ====================================================================================================================== @@ -995,7 +995,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
           | 'ON' 'CONSTRAINT' RelObjectNameExt2
Referenced by: -
+ ====================================================================================================================== @@ -1049,7 +1049,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= 'DO' ( 'NOTHING' | 'UPDATE' 'SET' ( Column '=' SimpleExpression ( ',' Column '=' SimpleExpression )* | '('? Column ( ',' Column )* ')'? '=' ( SubSelect | '(' ComplexExpressionList ')' | Expression ) ( ',' '('? Column ( ',' Column )* ')'? '=' ( SubSelect | '(' ComplexExpressionList ')' | Expression ) )* ) WhereClause? )
Referenced by: -
+ ====================================================================================================================== @@ -1080,7 +1080,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= 'OUTPUT' SelectItemsList ( 'INTO' ( UserVariable | Table ) ColumnsNamesList? )?
Referenced by: -
+ ====================================================================================================================== @@ -1159,7 +1159,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
Upsert   ::= ( 'UPSERT' | ( 'INSERT' 'OR' )? 'REPLACE' ) 'INTO'? Table ( '(' Column ( ',' Column )* ')' )? ( 'SET' Column '=' SimpleExpression ( ',' Column '=' SimpleExpression )* | ( ( 'VALUES' | 'VALUE' )? '(' SimpleExpression ( ',' SimpleExpression )* ( ')' ',' '(' SimpleExpression ( ',' SimpleExpression )* )* | '(' SelectWithWithItems ) ')' | SelectWithWithItems ) ( 'ON' 'DUPLICATE' 'KEY' 'UPDATE' Column '=' SimpleExpression ( ',' Column '=' SimpleExpression )* )?
Referenced by: -
+ ====================================================================================================================== @@ -1209,7 +1209,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
Delete   ::= 'DELETE' 'LOW_PRIORITY'? 'QUICK'? 'IGNORE'? ( ( TableWithAlias ( ',' TableWithAlias )* OutputClause? )? 'FROM' )? ( TableWithAlias JoinsList )? ( 'USING' TableWithAlias ( ',' TableWithAlias )* )? WhereClause? OrderByElements? PlainLimit? ( 'RETURNING' SelectItemsList )?
Referenced by: -
+ ====================================================================================================================== @@ -1257,7 +1257,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
Merge    ::= 'MERGE' 'INTO' TableWithAlias 'USING' ( Table | '(' SubSelect ')' ) Alias? 'ON' '(' Expression ')' ( MergeUpdateClause MergeInsertClause? | MergeInsertClause MergeUpdateClause? )?
Referenced by: -
+ ====================================================================================================================== @@ -1302,7 +1302,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= 'WHEN' 'MATCHED' 'THEN' 'UPDATE' 'SET' Column '=' SimpleExpression ( ',' Column '=' SimpleExpression )* ( 'WHERE' Expression )? ( 'DELETE' 'WHERE' Expression )?
Referenced by: -
+ ====================================================================================================================== @@ -1352,7 +1352,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= 'WHEN' 'NOT' 'MATCHED' 'THEN' 'INSERT' ( '(' Column ( ',' Column )* ')' )? 'VALUES' '(' SimpleExpression ( ',' SimpleExpression )* ')' ( 'WHERE' Expression )?
Referenced by: -
+ ====================================================================================================================== @@ -1381,7 +1381,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= RelObjectNameExt ( ( '.' | ':' ) '.'* RelObjectNameExt2 )*
+ ====================================================================================================================== @@ -1402,7 +1402,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|. + ====================================================================================================================== @@ -2072,7 +2072,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
           | 'ZONE'
+ ====================================================================================================================== @@ -2127,7 +2127,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
           | 'IGNORE'
+ ====================================================================================================================== @@ -2161,7 +2161,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
           | 'INTERVAL'
Referenced by: -
+ ====================================================================================================================== @@ -2237,7 +2237,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
           | 'ORDER'
+ ====================================================================================================================== @@ -2267,7 +2267,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
           | 'CURRENT'
+ ====================================================================================================================== @@ -2288,7 +2288,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|. + ====================================================================================================================== @@ -2312,7 +2312,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= Table Alias?
Referenced by: -
+ ====================================================================================================================== @@ -2344,7 +2344,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
           | WithList? Select
+ ====================================================================================================================== @@ -2365,7 +2365,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|. + ====================================================================================================================== @@ -2387,7 +2387,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= SetOperationList
+ ====================================================================================================================== @@ -2504,7 +2504,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= K_SELECT 'STRAIGHT_JOIN'? Skip? First? ( 'ALL' | 'DISTINCT' ( 'ON' '(' SelectItemsList ')' )? | 'UNIQUE' | 'SQL_CALC_FOUND_ROWS' | 'SQL_NO_CACHE' | 'SQL_CACHE' )? Top? SelectItemsList IntoClause? ( 'FROM' FromItem JoinsList )? KSQLWindowClause? WhereClause? OracleHierarchicalQueryClause? GroupByColumnReferences? Having? OrderByElements? ( 'WINDOW' RelObjectName 'AS' windowDefinition ( ',' RelObjectName 'AS' windowDefinition )* )? OrderByElements? ( 'EMIT' 'CHANGES' )? LimitWithOffset? Offset? LimitWithOffset? Fetch? WithIsolation? ( 'FOR' 'UPDATE' ( 'OF' Table )? Wait? ( 'NOWAIT' | 'SKIP' 'LOCKED' )? )? OptimizeFor? ( 'FOR' 'XML' 'PATH' '(' S_CHAR_LITERAL ')' )?
Referenced by: -
+ ====================================================================================================================== @@ -2555,7 +2555,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|. SelectBody ')' | PlainSelect | Values ) )* OrderByElements? LimitWithOffset? Offset? Fetch? WithIsolation?
Referenced by: -
+ ====================================================================================================================== @@ -2594,7 +2594,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|. ) '(' SelectBody ')' )+
Referenced by: -
+ ====================================================================================================================== @@ -2619,7 +2619,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
WithList ::= 'WITH' WithItem ( ',' WithItem )*
+ ====================================================================================================================== @@ -2658,7 +2658,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
WithItem ::= 'RECURSIVE'? RelObjectName ( '(' SelectItemsList ')' )? 'AS' '(' ( 'VALUES' SimpleExpressionList | SubSelect ) ')'
Referenced by: -
+ ====================================================================================================================== @@ -2682,7 +2682,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= SelectItem ( ',' SelectItem )*
+ ====================================================================================================================== @@ -2710,7 +2710,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= ( Condition | ConcatExpression | Expression ) Alias?
+ ====================================================================================================================== @@ -2738,7 +2738,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
           | SelectExpressionItem
Referenced by: -
+ ====================================================================================================================== @@ -2764,7 +2764,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= Table '.' '*'
Referenced by: -
+ ====================================================================================================================== @@ -2798,7 +2798,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|. + ====================================================================================================================== @@ -2829,7 +2829,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
           | 'NOLOCK'
Referenced by: -
+ ====================================================================================================================== @@ -2859,7 +2859,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= 'WITH' '(' SQLServerHint ( ',' SQLServerHint )* ')'
Referenced by: -
+ ====================================================================================================================== @@ -2899,7 +2899,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= ( 'USE' | 'SHOW' | 'IGNORE' | 'FORCE' ) ( 'INDEX' | 'KEY' ) '(' RelObjectNameWithoutValue ( ',' RelObjectNameWithoutValue )* ')'
Referenced by: -
+ ====================================================================================================================== @@ -2923,7 +2923,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= Function Alias?
Referenced by: -
+ ====================================================================================================================== @@ -2953,7 +2953,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
           | Column
Referenced by: -
+ ====================================================================================================================== @@ -2977,7 +2977,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= FunctionItem ( ',' FunctionItem )*
Referenced by: -
+ ====================================================================================================================== @@ -3001,7 +3001,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= PivotSelectExprItem ( ',' PivotSelectExprItem )*
Referenced by: -
+ ====================================================================================================================== @@ -3025,7 +3025,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= SimpleExpression Alias?
Referenced by: -
+ ====================================================================================================================== @@ -3052,7 +3052,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= '(' SimpleExpressionList ')' Alias?
Referenced by: -
+ ====================================================================================================================== @@ -3076,7 +3076,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= ExpressionListItem ( ',' ExpressionListItem )*
Referenced by: -
+ ====================================================================================================================== @@ -3116,7 +3116,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
Pivot    ::= 'PIVOT' '(' PivotFunctionItems 'FOR' PivotForColumns 'IN' '(' ( PivotSingleInItems | PivotMultiInItems ) ')' ')' Alias?
Referenced by: -
+ ====================================================================================================================== @@ -3161,7 +3161,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
PivotXml ::= 'PIVOT' 'XML' '(' PivotFunctionItems 'FOR' PivotForColumns 'IN' '(' ( 'ANY' | SelectBody | PivotSingleInItems | PivotMultiInItems ) ')' ')'
Referenced by: -
+ ====================================================================================================================== @@ -3205,7 +3205,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
UnPivot  ::= 'UNPIVOT' ( ( 'INCLUDE' | 'EXCLUDE' ) 'NULLS' )? '(' PivotForColumns 'FOR' PivotForColumns 'IN' '(' PivotSingleInItems ')' ')' Alias?
Referenced by: -
+ ====================================================================================================================== @@ -3231,7 +3231,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= 'INTO' Table ( ',' Table )*
Referenced by: -
+ ====================================================================================================================== @@ -3283,7 +3283,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|. + ====================================================================================================================== @@ -3330,7 +3330,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= '(' 'VALUES' ( '(' SimpleExpression ( ',' SimpleExpression )* ')' ( ',' '(' SimpleExpression ( ',' SimpleExpression )* ')' )* | SimpleExpression ( ',' SimpleExpression )* ) ')' ( Alias ( '(' RelObjectName ( ',' RelObjectName )* ')' )? )?
Referenced by: -
+ ====================================================================================================================== @@ -3358,7 +3358,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= 'LATERAL' '(' SubSelect ')'
Referenced by: -
+ ====================================================================================================================== @@ -3379,7 +3379,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
Referenced by: -
+ ====================================================================================================================== @@ -3401,7 +3401,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= JoinerExpression*
Referenced by: -
+ ====================================================================================================================== @@ -3423,7 +3423,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= JoinerExpression+
Referenced by: -
+ ====================================================================================================================== @@ -3496,7 +3496,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|. ) FromItem ( ( 'WITHIN' '(' JoinWindow ')' )? ( 'ON' Expression )+ | 'USING' '(' Column ( ',' Column )* ')' )?
Referenced by: -
+ ====================================================================================================================== @@ -3529,7 +3529,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= S_LONG ( S_IDENTIFIER | K_DATE_LITERAL ) ( ',' S_LONG ( S_IDENTIFIER | K_DATE_LITERAL ) )?
Referenced by: -
+ ====================================================================================================================== @@ -3582,7 +3582,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= 'WINDOW' ( 'HOPPING' '(' 'SIZE' S_LONG S_IDENTIFIER ',' 'ADVANCE' 'BY' | 'SESSION' '(' | 'TUMBLING' '(' 'SIZE' ) S_LONG S_IDENTIFIER ')'
Referenced by: -
+ ====================================================================================================================== @@ -3606,7 +3606,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= 'WHERE' Expression
+ ====================================================================================================================== @@ -3650,7 +3650,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= ( 'START' 'WITH' AndExpression 'CONNECT' 'BY' 'NOCYCLE'? | 'CONNECT' 'BY' 'NOCYCLE'? ( AndExpression 'START' 'WITH' )? ) AndExpression
Referenced by: -
+ ====================================================================================================================== @@ -3712,7 +3712,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= 'GROUP' 'BY' ( ( '(' ')' | ComplexExpressionList ) ( 'GROUPING' 'SETS' '(' ( '(' SimpleExpressionList? ')' | SimpleExpression ) ( ',' ( '(' SimpleExpressionList? ')' | SimpleExpression ) )* ')' )? | 'GROUPING' 'SETS' '(' ( '(' SimpleExpressionList? ')' | SimpleExpression ) ( ',' ( '(' SimpleExpressionList? ')' | SimpleExpression ) )* ')' )
Referenced by: -
+ ====================================================================================================================== @@ -3735,7 +3735,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
Having   ::= 'HAVING' Expression
Referenced by: -
+ ====================================================================================================================== @@ -3765,7 +3765,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= 'ORDER' 'SIBLINGS'? 'BY' OrderByElement ( ',' OrderByElement )*
+ ====================================================================================================================== @@ -3797,7 +3797,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= Expression ( 'ASC' | 'DESC' )? ( 'NULLS' ( 'FIRST' | 'LAST' )? )?
Referenced by: -
+ ====================================================================================================================== @@ -3821,7 +3821,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= '?' S_LONG?
+ ====================================================================================================================== @@ -3845,7 +3845,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= ':' RelObjectNameExt
Referenced by: -
+ ====================================================================================================================== @@ -3875,7 +3875,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
           | PlainLimit
Referenced by: -
+ ====================================================================================================================== @@ -3904,7 +3904,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= 'LIMIT' ( '(' SubSelect ')' | Expression )
Referenced by: -
+ ====================================================================================================================== @@ -3931,7 +3931,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
Offset   ::= 'OFFSET' Expression ( 'ROWS' | 'ROW' )?
Referenced by: -
+ ====================================================================================================================== @@ -3964,7 +3964,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
Fetch    ::= 'FETCH' ( 'FIRST' | 'NEXT' ) Expression ( 'ROWS' | 'ROW' ) 'ONLY'
Referenced by: -
+ ====================================================================================================================== @@ -3988,7 +3988,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= 'WITH' K_ISOLATION
Referenced by: -
+ ====================================================================================================================== @@ -4016,7 +4016,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= 'OPTIMIZE' 'FOR' S_LONG 'ROWS'
Referenced by: -
+ ====================================================================================================================== @@ -4053,7 +4053,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
Top      ::= 'TOP' ( S_LONG | SimpleJdbcParameter | ':' S_IDENTIFIER? | '(' AdditiveExpression ')' ) 'PERCENT'? 'WITH TIES'?
Referenced by: -
+ ====================================================================================================================== @@ -4080,7 +4080,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
Skip     ::= 'SKIP' ( S_LONG | S_IDENTIFIER | SimpleJdbcParameter )
Referenced by: -
+ ====================================================================================================================== @@ -4109,7 +4109,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
First    ::= ( 'FIRST' | 'LIMIT' ) ( S_LONG | S_IDENTIFIER | SimpleJdbcParameter )
Referenced by: -
+ ====================================================================================================================== @@ -4131,7 +4131,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= XorExpression
+ ====================================================================================================================== @@ -4155,7 +4155,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= OrExpression ( 'XOR' OrExpression )*
Referenced by: -
+ ====================================================================================================================== @@ -4179,7 +4179,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= AndExpression ( 'OR' AndExpression )*
Referenced by: -
+ ====================================================================================================================== @@ -4214,7 +4214,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= ( Condition | ( 'NOT' | '!' )? '(' XorExpression ')' ) ( ( 'AND' | '&&' ) ( Condition | ( 'NOT' | '!' )? '(' XorExpression ')' ) )*
+ ====================================================================================================================== @@ -4242,7 +4242,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= ( 'NOT' | '!' )? ( RegularCondition | SQLCondition )
+ ====================================================================================================================== @@ -4275,7 +4275,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= '(' SimpleExpressionListAtLeastTwoItems ')' 'OVERLAPS' '(' SimpleExpressionListAtLeastTwoItems ')'
Referenced by: -
+ ====================================================================================================================== @@ -4365,7 +4365,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|. | '<@' | '?' | '?|' | '?&' | OP_CONCAT | '-' | '-#' | '<->' | '<#>' ) 'PRIOR'? ComparisonItem ( '(' '+' ')' )?
Referenced by: -
+ ====================================================================================================================== @@ -4408,7 +4408,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
Referenced by: -
+ ====================================================================================================================== @@ -4451,7 +4451,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= SimpleExpression ( '(' '+' ')' )? 'NOT'? 'IN' ( S_CHAR_LITERAL | Function | '(' ( ComplexExpressionList | SubSelect ) ')' | SimpleExpression )
Referenced by: -
+ ====================================================================================================================== @@ -4511,7 +4511,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
Between  ::= 'NOT'? 'BETWEEN' SimpleExpression 'AND' SimpleExpression
Referenced by: -
+ ====================================================================================================================== @@ -4544,7 +4544,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= 'NOT'? ( 'LIKE' | 'ILIKE' ) SimpleExpression ( 'ESCAPE' ( S_CHAR_LITERAL | Expression ) )?
Referenced by: -
+ ====================================================================================================================== @@ -4575,7 +4575,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= 'NOT'? 'SIMILAR' 'TO' SimpleExpression ( 'ESCAPE' S_CHAR_LITERAL )?
Referenced by: -
+ ====================================================================================================================== @@ -4605,7 +4605,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= 'IS' 'NOT'? 'DISTINCT' 'FROM' SimpleExpression
Referenced by: -
+ ====================================================================================================================== @@ -4635,7 +4635,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
           | 'IS' 'NOT'? 'NULL'
Referenced by: -
+ ====================================================================================================================== @@ -4664,7 +4664,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= 'IS' 'NOT'? ( 'TRUE' | 'FALSE' )
Referenced by: -
+ ====================================================================================================================== @@ -4688,7 +4688,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= 'EXISTS' SimpleExpression
Referenced by: -
+ ====================================================================================================================== @@ -4736,7 +4736,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= SimpleExpression ( ',' SimpleExpression )*
+ ====================================================================================================================== @@ -4762,7 +4762,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|. + ====================================================================================================================== @@ -4797,7 +4797,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= ( 'BOTH' | 'LEADING' | 'TRAILING' ) SimpleExpression ( 'FROM' | 'IN' | 'PLACING' ) SimpleExpression
+ ====================================================================================================================== @@ -4834,7 +4834,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= SimpleExpression ( 'FROM' | 'IN' | 'PLACING' ) SimpleExpression ( ( 'FOR' | 'FROM' ) SimpleExpression ( 'FOR' SimpleExpression )? )?
+ ====================================================================================================================== @@ -4859,7 +4859,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= SimpleExpression ( ',' SimpleExpression )+
+ ====================================================================================================================== @@ -4893,7 +4893,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
           | PrimaryExpression
Referenced by: -
+ ====================================================================================================================== @@ -4929,7 +4929,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= ( 'ANY' | 'SOME' | 'ALL' ) '(' ( 'VALUES' SimpleExpressionList | SubSelect ) ')'
Referenced by: -
+ ====================================================================================================================== @@ -4956,7 +4956,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= ( UserVariable ( '=' | ':=' ) )? ConcatExpression
+ ====================================================================================================================== @@ -4980,7 +4980,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= BitwiseAndOr ( OP_CONCAT BitwiseAndOr )*
+ ====================================================================================================================== @@ -5010,7 +5010,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= AdditiveExpression ( ( '|' | '&' | '<<' | '>>' ) AdditiveExpression )*
Referenced by: -
+ ====================================================================================================================== @@ -5036,7 +5036,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= MultiplicativeExpression ( ( '+' | '-' ) MultiplicativeExpression )*
Referenced by: -
+ ====================================================================================================================== @@ -5066,7 +5066,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= BitwiseXor ( ( '*' | '/' | 'DIV' | '%' ) BitwiseXor )*
Referenced by: -
+ ====================================================================================================================== @@ -5090,7 +5090,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= PrimaryExpression ( '^' PrimaryExpression )*
Referenced by: -
+ ====================================================================================================================== @@ -5119,7 +5119,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= ( '[' SimpleExpression? ( ':' SimpleExpression? )? ']' )+
Referenced by: -
+ ====================================================================================================================== @@ -5248,7 +5248,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= ( 'NOT' | '!' )? ( '+' | '-' | '~' )? ( 'NULL' | CaseWhenExpression | SimpleJdbcParameter | JdbcNamedParameter | UserVariable | NumericBind | ExtractExpression | MySQLGroupConcat | XMLSerializeExpr | JsonExpression | JsonFunction | JsonAggregateFunction | FullTextSearch | Function AnalyticExpression? | IntervalExpression | S_DOUBLE | S_LONG | S_HEX | CastExpression | TryCastExpression | SafeCastExpression | K_TIME_KEY_EXPR | 'CURRENT' | DateTimeLiteralExpression | 'ARRAY' ArrayConstructor | NextValExpression | ConnectByRootOperator | 'ALL' | Column | S_CHAR_LITERAL | ( '{d' | '{t' | '{ts' ) S_CHAR_LITERAL '}' | '(' ( SubSelect ')' | ( ComplexExpressionList | SimpleExpressionList ) ')' ( '.' RelObjectNameExt )? ) ) ( 'COLLATE' S_IDENTIFIER )? IntervalExpressionWithoutInterval? ArrayExpression? ( '::' ColDataType )* ( 'AT' K_DATETIMELITERAL 'ZONE' PrimaryExpression )*
+ ====================================================================================================================== @@ -5272,7 +5272,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= 'CONNECT_BY_ROOT' Column
Referenced by: -
+ ====================================================================================================================== @@ -5296,7 +5296,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= K_NEXTVAL RelObjectNameList
Referenced by: -
+ ====================================================================================================================== @@ -5320,7 +5320,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= ':' RelObjectNameExt2
+ ====================================================================================================================== @@ -5345,7 +5345,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= RelObjectNameExt2 '=>' Expression
Referenced by: -
+ ====================================================================================================================== @@ -5373,7 +5373,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= ( '@' | '@@' ) RelObjectNameExt2 ( '.' RelObjectNameExt2 )*
+ ====================================================================================================================== @@ -5397,7 +5397,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= ':' S_LONG
Referenced by: -
+ ====================================================================================================================== @@ -5421,7 +5421,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= K_DATETIMELITERAL S_CHAR_LITERAL
Referenced by: -
+ ====================================================================================================================== @@ -5451,7 +5451,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= '[' ( ( SimpleExpression | ArrayConstructor ) ( ',' ( SimpleExpression | ArrayConstructor ) )* )? ']'
+ ====================================================================================================================== @@ -5509,7 +5509,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
Referenced by: -
+ ====================================================================================================================== @@ -5606,7 +5606,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|. ) 'UNIQUE' 'KEYS' )? | 'JSON_ARRAY' '(' ( 'NULL' 'ON' 'NULL' | Expression ( 'FORMAT' 'JSON' )? ( ',' Expression ( 'FORMAT' 'JSON' )? )* )* ( 'ABSENT' 'ON' 'NULL' )? ) ')' + ====================================================================================================================== @@ -5722,7 +5722,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|. ) 'UNIQUE' 'KEYS' )? | 'JSON_ARRAYAGG' '(' Expression ( 'FORMAT' 'JSON' )? OrderByElements? ( ( 'NULL' | 'ABSENT' ) 'ON' 'NULL' )? ) ')' ( 'FILTER' '(' 'WHERE' Expression ')' )? ( 'OVER' '(' ( 'PARTITION' 'BY' ( ComplexExpressionList | '(' ComplexExpressionList ')' ) )? OrderByElements? WindowElement? ')' )? + ====================================================================================================================== @@ -5764,7 +5764,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
Referenced by: -
+ ====================================================================================================================== @@ -5786,7 +5786,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= K_DATE_LITERAL
Referenced by: -
+ ====================================================================================================================== @@ -5819,7 +5819,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= 'KEEP' '(' S_IDENTIFIER ( 'FIRST' | 'LAST' ) OrderByElements ')'
Referenced by: -
+ ====================================================================================================================== @@ -5869,7 +5869,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= ( ( 'IGNORE' 'NULLS' )? 'OVER' | 'WITHIN' 'GROUP' ) ( RelObjectName | windowDefinition ( 'OVER' '(' ( 'PARTITION' 'BY' ( ComplexExpressionList | '(' ComplexExpressionList ')' ) )? ')' )? )
Referenced by: -
+ ====================================================================================================================== @@ -5907,7 +5907,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= '(' ( 'PARTITION' 'BY' ( ComplexExpressionList | '(' ComplexExpressionList ')' ) )? OrderByElements? WindowElement? ')'
Referenced by: -
+ ====================================================================================================================== @@ -5941,7 +5941,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
           | windowFun
Referenced by: -
+ ====================================================================================================================== @@ -5972,7 +5972,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= ( 'ROWS' | 'RANGE' ) ( 'BETWEEN' WindowOffset 'AND' )? WindowOffset
+ ====================================================================================================================== @@ -6005,7 +6005,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
           | 'CURRENT' 'ROW'
Referenced by: -
+ ====================================================================================================================== @@ -6038,7 +6038,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= 'EXTRACT' '(' ( RelObjectName | S_CHAR_LITERAL ) 'FROM' SimpleExpression ')'
Referenced by: -
+ ====================================================================================================================== @@ -6071,7 +6071,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= 'CAST' '(' SimpleExpression 'AS' ( RowConstructor | ColDataType ) ')'
Referenced by: -
+ ====================================================================================================================== @@ -6104,7 +6104,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= 'TRY_CAST' '(' SimpleExpression 'AS' ( RowConstructor | ColDataType ) ')'
Referenced by: -
+ ====================================================================================================================== @@ -6137,7 +6137,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= 'SAFE_CAST' '(' SimpleExpression 'AS' ( RowConstructor | ColDataType ) ')'
Referenced by: -
+ ====================================================================================================================== @@ -6173,7 +6173,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= 'CASE' Expression? WhenThenSearchCondition+ ( 'ELSE' ( '('? CaseWhenExpression ')'? | Expression ) )? 'END'
+ ====================================================================================================================== @@ -6205,7 +6205,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= 'WHEN' Expression 'THEN' ( '('? CaseWhenExpression ')'? | Expression )
Referenced by: -
+ ====================================================================================================================== @@ -6235,7 +6235,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= 'ROW'? '(' ColumnDefinition ( ',' ColumnDefinition )* ')'
+ ====================================================================================================================== @@ -6260,7 +6260,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= UserVariable '=' SimpleExpression
Referenced by: -
+ ====================================================================================================================== @@ -6297,7 +6297,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
Execute  ::= ( 'EXEC' | 'EXECUTE' | 'CALL' ) RelObjectNameList ( VariableExpression ( ',' VariableExpression )* | SimpleExpressionList | '(' SimpleExpressionList ')' )?
Referenced by: -
+ ====================================================================================================================== @@ -6347,7 +6347,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|. | 'IN BOOLEAN MODE' | 'WITH QUERY EXPANSION' )? ')' + ====================================================================================================================== @@ -6379,7 +6379,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
           | InternalFunction
+ ====================================================================================================================== @@ -6412,7 +6412,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
Referenced by: -
+ ====================================================================================================================== @@ -6451,22 +6451,22 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|. NULLS ) - - . - - Function - - RelObjectName + + . + + Function + + Column - KeepExpression + KeepExpression
-
         ::= RelObjectNameList '(' ( ( 'DISTINCT' | 'ALL' | 'UNIQUE' )? ( '*' | AllTableColumns | ( ComplexExpressionList | SimpleExpressionList ) OrderByElements? | SubSelect ) )? ( 'IGNORE' 'NULLS' )? ')' ( '.' ( Function | RelObjectName ) )? KeepExpression?
+
         ::= RelObjectNameList '(' ( ( 'DISTINCT' | 'ALL' | 'UNIQUE' )? ( '*' | AllTableColumns | ( ComplexExpressionList | SimpleExpressionList ) OrderByElements? | SubSelect ) )? ( 'IGNORE' 'NULLS' )? ')' ( '.' ( Function | Column ) )? KeepExpression?
Referenced by: -
+ ====================================================================================================================== @@ -6510,7 +6510,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= 'XMLSERIALIZE' '(' 'XMLAGG' '(' 'XMLTEXT' '(' SimpleExpression ')' OrderByElements? ')' 'AS' ColDataType ')'
Referenced by: -
+ ====================================================================================================================== @@ -6545,7 +6545,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= 'GROUP_CONCAT' '(' 'DISTINCT'? SimpleExpressionList OrderByElements? ( 'SEPARATOR' S_CHAR_LITERAL )? ')'
Referenced by: -
+ ====================================================================================================================== @@ -6571,7 +6571,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= '(' SimpleExpressionListAtLeastTwoItems ')'
Referenced by: -
+ ====================================================================================================================== @@ -6595,7 +6595,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= Function Alias?
Referenced by: -
+ ====================================================================================================================== @@ -6619,7 +6619,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= WithList? SelectBody
+ ====================================================================================================================== @@ -6649,7 +6649,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= '(' RelObjectName CreateParameter? ( ',' RelObjectName CreateParameter? )* ')'
Referenced by: -
+ ====================================================================================================================== @@ -6670,7 +6670,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
Referenced by: -
+ ====================================================================================================================== @@ -6707,7 +6707,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= 'CREATE' CreateParameter? 'INDEX' Index 'ON' Table ( 'USING' S_IDENTIFIER )? ColumnNamesWithParamsList CreateParameter*
Referenced by: -
+ ====================================================================================================================== @@ -6733,7 +6733,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|. + ====================================================================================================================== @@ -6772,7 +6772,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= 'CREATE' 'SCHEMA' ( S_IDENTIFIER | S_QUOTED_IDENTIFIER )? ( 'AUTHORIZATION' ( S_IDENTIFIER | S_QUOTED_IDENTIFIER ) )? PathSpecification? ( CreateTable | CreateView )*
Referenced by: -
+ ====================================================================================================================== @@ -6800,7 +6800,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= 'PATH' ( S_IDENTIFIER | S_QUOTED_IDENTIFIER ) ( ',' ( S_IDENTIFIER | S_QUOTED_IDENTIFIER ) )*
Referenced by: -
+ ====================================================================================================================== @@ -6937,7 +6937,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= 'CREATE' ( 'OR' 'REPLACE' )? 'UNLOGGED'? 'GLOBAL'? CreateParameter* 'TABLE' ( 'IF' 'NOT' 'EXISTS' )? Table ( '(' ( RelObjectName ( ',' RelObjectName )* | ColumnDefinition ( ',' ( ( 'INDEX' | 'UNIQUE'? 'FULLTEXT'? 'KEY' ) RelObjectName ColumnNamesWithParamsList CreateParameter* | ( 'CONSTRAINT' RelObjectName )? ( ( 'PRIMARY' 'KEY' | 'UNIQUE' 'KEY'? ) ColumnNamesWithParamsList CreateParameter* | 'FOREIGN' 'KEY' ColumnNamesWithParamsList 'REFERENCES' Table ColumnsNamesList ( 'ON' ( 'DELETE' | 'UPDATE' ) Action )? ( 'ON' ( 'DELETE' | 'UPDATE' ) Action )? | 'CHECK' ( '(' Expression ')' )* ) | 'EXCLUDE' 'WHERE' ( '(' Expression ')' )* | ColumnDefinition ) )* ) ')' )? CreateParameter* RowMovement? ( 'AS' SelectWithWithItems )? ( 'LIKE' ( '(' Table ')' | Table ) )? ( ',' SpannerInterleaveIn )?
Referenced by: -
+ ====================================================================================================================== @@ -6975,7 +6975,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= 'INTERLEAVE' 'IN' 'PARENT' Table ( 'ON' 'DELETE' ( 'NO' 'ACTION' | 'CASCADE' ) )?
Referenced by: -
+ ====================================================================================================================== @@ -7086,7 +7086,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= ( 'ARRAY' '<' ColDataType '>' | ( 'BYTES' | 'STRING' | 'JSON' ) '(' ( S_LONG | S_IDENTIFIER ) ')' | ( 'CHARACTER' | 'BIT' ) 'VARYING'? | 'DOUBLE' 'PRECISION'? | ( S_IDENTIFIER | S_QUOTED_IDENTIFIER | K_DATETIMELITERAL | K_DATE_LITERAL | 'XML' | 'INTERVAL' | DT_ZONE | 'CHAR' | 'SET' | 'BINARY' | 'JSON' | 'STRING' ) ( '.' ( S_IDENTIFIER | S_QUOTED_IDENTIFIER ) )? | ( 'UNSIGNED' | 'SIGNED' ) S_IDENTIFIER? ) ( '(' ( ( S_LONG ( 'BYTE' | 'CHAR' )? | S_CHAR_LITERAL | S_IDENTIFIER | 'CHAR' ) ','? )* ')' )? ( '[' S_LONG? ']' )* ( 'CHARACTER' 'SET' ( S_IDENTIFIER | 'BINARY' ) )?
+ ====================================================================================================================== @@ -7109,7 +7109,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
Analyze  ::= 'ANALYZE' Table
Referenced by: -
+ ====================================================================================================================== @@ -7174,7 +7174,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|. )? 'MATERIALIZED'? 'VIEW' Table ( 'AUTO' 'REFRESH' ( 'YES' | 'NO' ) )? ( 'IF' 'NOT' 'EXISTS' )? ColumnsNamesList? 'AS' SelectWithWithItems ( 'WITH' 'READ' 'ONLY' )?
Referenced by: -
+ ====================================================================================================================== @@ -7211,7 +7211,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
           | 'SET' ( 'NULL' | 'DEFAULT' )
Referenced by: -
+ ====================================================================================================================== @@ -7244,7 +7244,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= ( 'ALTER' | 'REPLACE' ) 'VIEW' Table ColumnsNamesList? 'AS' SelectBody
Referenced by: -
+ ====================================================================================================================== @@ -7437,7 +7437,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
           | '::' ColDataType
+ ====================================================================================================================== @@ -7466,7 +7466,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= ( 'ENABLE' | 'DISABLE' ) 'ROW' 'MOVEMENT'
Referenced by: -
+ ====================================================================================================================== @@ -7501,7 +7501,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
AList    ::= '(' ( ( S_LONG | S_DOUBLE | S_CHAR_LITERAL | RelObjectNameWithoutValue ) ( ',' | '=' )? )* ')'
Referenced by: -
+ ====================================================================================================================== @@ -7528,7 +7528,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= RelObjectName ( '(' S_LONG ')' )?
Referenced by: -
+ ====================================================================================================================== @@ -7556,7 +7556,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= '(' ColumnsNamesListItem ( ',' ColumnsNamesListItem )* ')'
+ ====================================================================================================================== @@ -7585,7 +7585,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= RelObjectName RelObjectName? ( '(' S_LONG ')' )?
Referenced by: -
+ ====================================================================================================================== @@ -7613,7 +7613,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= '(' ( FuncArgsListItem ( ',' FuncArgsListItem )* )? ')'
Referenced by: -
+ ====================================================================================================================== @@ -7668,7 +7668,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|. ( 'IF' 'EXISTS' )? Table FuncArgsList? ( S_IDENTIFIER | 'CASCADE' | 'RESTRICT' | 'ON' )*
Referenced by: -
+ ====================================================================================================================== @@ -7697,7 +7697,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
Truncate ::= 'TRUNCATE' 'TABLE'? 'ONLY'? Table 'CASCADE'?
Referenced by: -
+ ====================================================================================================================== @@ -7724,7 +7724,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= RelObjectName 'TYPE'? ColDataType CreateParameter*
Referenced by: -
+ ====================================================================================================================== @@ -7752,7 +7752,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= RelObjectName 'DROP' 'NOT'? 'NULL'
Referenced by: -
+ ====================================================================================================================== @@ -7778,7 +7778,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= RelObjectName 'DROP' 'DEFAULT'
Referenced by: -
+ ====================================================================================================================== @@ -7812,7 +7812,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|. )*
Referenced by: -
+ ====================================================================================================================== @@ -8055,7 +8055,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
           | captureRest
Referenced by: -
+ ====================================================================================================================== @@ -8091,7 +8091,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= 'ALTER' 'TABLE' 'ONLY'? ( 'IF' 'EXISTS' )? Table AlterExpression ( ',' AlterExpression )*
Referenced by: -
+ ====================================================================================================================== @@ -8175,7 +8175,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|. ( 'DML' | 'DDL' | 'QUERY' ) | 'SET' ) ( S_CHAR_LITERAL | S_IDENTIFIER | '=' | S_LONG | 'PARALLEL' )*
Referenced by: -
+ ====================================================================================================================== @@ -8255,7 +8255,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|. ) captureRest
Referenced by: -
+ ====================================================================================================================== @@ -8278,7 +8278,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
Wait     ::= 'WAIT' S_LONG
Referenced by: -
+ ====================================================================================================================== @@ -8302,7 +8302,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= 'SAVEPOINT' S_IDENTIFIER
Referenced by: -
+ ====================================================================================================================== @@ -8335,7 +8335,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= 'ROLLBACK' 'WORK'? ( 'TO' 'SAVEPOINT'? S_IDENTIFIER | 'FORCE' S_CHAR_LITERAL )?
Referenced by: -
+ ====================================================================================================================== @@ -8370,7 +8370,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
Comment  ::= 'COMMENT' 'ON' ( ( 'TABLE' | 'VIEW' ) Table | 'COLUMN' Column ) 'IS' S_CHAR_LITERAL
Referenced by: -
+ ====================================================================================================================== @@ -8403,7 +8403,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
Grant    ::= 'GRANT' ( ( readGrantTypes ( ',' readGrantTypes )* )? 'ON' RelObjectNameList | S_IDENTIFIER ) 'TO' UsersList
Referenced by: -
+ ====================================================================================================================== @@ -8428,7 +8428,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= RelObjectName ( ',' ColumnsNamesListItem )*
Referenced by: -
+ ====================================================================================================================== @@ -8468,7 +8468,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
           | 'DROP'
Referenced by: -
+ ====================================================================================================================== @@ -8489,7 +8489,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
Referenced by: -
+ ====================================================================================================================== @@ -8554,7 +8554,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|. | 'KEEP' | 'NOKEEP' | 'SESSION' | 'GLOBAL' )*
Referenced by: -
+ ====================================================================================================================== @@ -8582,7 +8582,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= 'CREATE' 'SEQUENCE' Sequence SequenceParameters
Referenced by: -
+ ====================================================================================================================== @@ -8610,7 +8610,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= 'ALTER' 'SEQUENCE' Sequence SequenceParameters
Referenced by: -
+ ====================================================================================================================== @@ -8642,7 +8642,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= 'CREATE' ( 'OR' 'REPLACE' )? ( 'FUNCTION' | 'PROCEDURE' ) captureRest
Referenced by: -
+ ====================================================================================================================== @@ -8677,7 +8677,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= 'CREATE' ( 'OR' 'REPLACE' )? 'PUBLIC'? 'SYNONYM' Synonym 'FOR' RelObjectNameList
Referenced by: -
+ ====================================================================================================================== @@ -8698,7 +8698,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
Referenced by: -
+ ====================================================================================================================== @@ -8720,7 +8720,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
Referenced by: -
+ ====================================================================================================================== @@ -8749,7 +8749,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= [ #x9#xD#xA]
+ ====================================================================================================================== @@ -8781,7 +8781,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
           | 'TIMESTAMPTZ'
+ ====================================================================================================================== @@ -8819,7 +8819,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
           | 'SECOND'
+ ====================================================================================================================== @@ -8851,7 +8851,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
           | 'CS'
+ ====================================================================================================================== @@ -8884,7 +8884,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= ( 'NEXTVAL' | 'NEXT' ' '+ 'VALUE' ) ' '+ 'FOR'
Referenced by: -
+ ====================================================================================================================== @@ -8909,7 +8909,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
           | 'SEL'
+ ====================================================================================================================== @@ -8944,7 +8944,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= 'CURRENT' ( '_' | ' '+ ) ( 'TIMESTAMP' | 'TIME' | 'DATE' ) '()'?
+ ====================================================================================================================== @@ -8979,7 +8979,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
           | 'OVERLAY'
+ ====================================================================================================================== @@ -9013,7 +9013,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
           | #xA ( [/#xA] #xA | 'go' )
Referenced by: -
+ ====================================================================================================================== @@ -9039,7 +9039,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= '>' WHITESPACE* '='
Referenced by: -
+ ====================================================================================================================== @@ -9065,7 +9065,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= '<' WHITESPACE* '='
Referenced by: -
+ ====================================================================================================================== @@ -9091,7 +9091,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= '<' WHITESPACE* '>'
Referenced by: -
+ ====================================================================================================================== @@ -9117,7 +9117,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= '!' WHITESPACE* '='
Referenced by: -
+ ====================================================================================================================== @@ -9143,7 +9143,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= '|' WHITESPACE* '|'
+ ====================================================================================================================== @@ -9185,7 +9185,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
DT_ZONE  ::= K_DATETIMELITERAL WHITESPACE* ( '(' S_LONG ')' )? WHITESPACE* ( 'WITH' | 'WITHOUT' ) WHITESPACE+ ( 'LOCAL' WHITESPACE+ )? 'TIME' WHITESPACE+ 'ZONE'
+ ====================================================================================================================== @@ -9241,7 +9241,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
           | S_LONG ( '.' ( [eE] [+#x2D]? S_LONG )? | [eE] [+#x2D]? S_LONG )
+ ====================================================================================================================== @@ -9262,7 +9262,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
S_LONG   ::= DIGIT+
+ ====================================================================================================================== @@ -9284,7 +9284,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
DIGIT    ::= [0-9]
Referenced by: -
+ ====================================================================================================================== @@ -9313,7 +9313,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
           | '0x' HEX_VALUE+
+ ====================================================================================================================== @@ -9338,7 +9338,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= [0-9A-F]
Referenced by: -
+ ====================================================================================================================== @@ -9422,7 +9422,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= LETTER PART_LETTER*
+ ====================================================================================================================== @@ -9453,7 +9453,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
           | [$_#x23]
Referenced by: -
+ ====================================================================================================================== @@ -9487,7 +9487,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
           | [$_@#x23]
Referenced by: -
+ ====================================================================================================================== @@ -9497,7 +9497,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|. .. raw:: html - + @@ -9513,7 +9513,9 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|. Lu - Nl + Nl + + CJK
@@ -9524,10 +9526,11 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
           | Lo
           | Lt
           | Lu
-
           | Nl
+
           | Nl
+
           | CJK
Referenced by: -
+ ====================================================================================================================== @@ -10781,7 +10784,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
Ll       ::= [a-z#xB5#xDF-#xF6#xF8-#xFF#x101#x103#x105#x107#x109#x10B#x10D#x10F#x111#x113#x115#x117#x119#x11B#x11D#x11F#x121#x123#x125#x127#x129#x12B#x12D#x12F#x131#x133#x135#x137-#x138#x13A#x13C#x13E#x140#x142#x144#x146#x148-#x149#x14B#x14D#x14F#x151#x153#x155#x157#x159#x15B#x15D#x15F#x161#x163#x165#x167#x169#x16B#x16D#x16F#x171#x173#x175#x177#x17A#x17C#x17E-#x180#x183#x185#x188#x18C-#x18D#x192#x195#x199-#x19B#x19E#x1A1#x1A3#x1A5#x1A8#x1AA-#x1AB#x1AD#x1B0#x1B4#x1B6#x1B9-#x1BA#x1BD-#x1BF#x1C6#x1C9#x1CC#x1CE#x1D0#x1D2#x1D4#x1D6#x1D8#x1DA#x1DC-#x1DD#x1DF#x1E1#x1E3#x1E5#x1E7#x1E9#x1EB#x1ED#x1EF-#x1F0#x1F3#x1F5#x1F9#x1FB#x1FD#x1FF#x201#x203#x205#x207#x209#x20B#x20D#x20F#x211#x213#x215#x217#x219#x21B#x21D#x21F#x221#x223#x225#x227#x229#x22B#x22D#x22F#x231#x233-#x239#x23C#x23F-#x240#x242#x247#x249#x24B#x24D#x24F-#x293#x295-#x2AF#x371#x373#x377#x37B-#x37D#x390#x3AC-#x3CE#x3D0-#x3D1#x3D5-#x3D7#x3D9#x3DB#x3DD#x3DF#x3E1#x3E3#x3E5#x3E7#x3E9#x3EB#x3ED#x3EF-#x3F3#x3F5#x3F8#x3FB-#x3FC#x430-#x45F#x461#x463#x465#x467#x469#x46B#x46D#x46F#x471#x473#x475#x477#x479#x47B#x47D#x47F#x481#x48B#x48D#x48F#x491#x493#x495#x497#x499#x49B#x49D#x49F#x4A1#x4A3#x4A5#x4A7#x4A9#x4AB#x4AD#x4AF#x4B1#x4B3#x4B5#x4B7#x4B9#x4BB#x4BD#x4BF#x4C2#x4C4#x4C6#x4C8#x4CA#x4CC#x4CE-#x4CF#x4D1#x4D3#x4D5#x4D7#x4D9#x4DB#x4DD#x4DF#x4E1#x4E3#x4E5#x4E7#x4E9#x4EB#x4ED#x4EF#x4F1#x4F3#x4F5#x4F7#x4F9#x4FB#x4FD#x4FF#x501#x503#x505#x507#x509#x50B#x50D#x50F#x511#x513#x515#x517#x519#x51B#x51D#x51F#x521#x523#x525#x527#x529#x52B#x52D#x52F#x560-#x588#x10D0-#x10FA#x10FD-#x10FF#x13F8-#x13FD#x1C80-#x1C88#x1D00-#x1D2B#x1D6B-#x1D77#x1D79-#x1D9A#x1E01#x1E03#x1E05#x1E07#x1E09#x1E0B#x1E0D#x1E0F#x1E11#x1E13#x1E15#x1E17#x1E19#x1E1B#x1E1D#x1E1F#x1E21#x1E23#x1E25#x1E27#x1E29#x1E2B#x1E2D#x1E2F#x1E31#x1E33#x1E35#x1E37#x1E39#x1E3B#x1E3D#x1E3F#x1E41#x1E43#x1E45#x1E47#x1E49#x1E4B#x1E4D#x1E4F#x1E51#x1E53#x1E55#x1E57#x1E59#x1E5B#x1E5D#x1E5F#x1E61#x1E63#x1E65#x1E67#x1E69#x1E6B#x1E6D#x1E6F#x1E71#x1E73#x1E75#x1E77#x1E79#x1E7B#x1E7D#x1E7F#x1E81#x1E83#x1E85#x1E87#x1E89#x1E8B#x1E8D#x1E8F#x1E91#x1E93#x1E95-#x1E9D#x1E9F#x1EA1#x1EA3#x1EA5#x1EA7#x1EA9#x1EAB#x1EAD#x1EAF#x1EB1#x1EB3#x1EB5#x1EB7#x1EB9#x1EBB#x1EBD#x1EBF#x1EC1#x1EC3#x1EC5#x1EC7#x1EC9#x1ECB#x1ECD#x1ECF#x1ED1#x1ED3#x1ED5#x1ED7#x1ED9#x1EDB#x1EDD#x1EDF#x1EE1#x1EE3#x1EE5#x1EE7#x1EE9#x1EEB#x1EED#x1EEF#x1EF1#x1EF3#x1EF5#x1EF7#x1EF9#x1EFB#x1EFD#x1EFF-#x1F07#x1F10-#x1F15#x1F20-#x1F27#x1F30-#x1F37#x1F40-#x1F45#x1F50-#x1F57#x1F60-#x1F67#x1F70-#x1F7D#x1F80-#x1F87#x1F90-#x1F97#x1FA0-#x1FA7#x1FB0-#x1FB4#x1FB6-#x1FB7#x1FBE#x1FC2-#x1FC4#x1FC6-#x1FC7#x1FD0-#x1FD3#x1FD6-#x1FD7#x1FE0-#x1FE7#x1FF2-#x1FF4#x1FF6-#x1FF7#x210A#x210E-#x210F#x2113#x212F#x2134#x2139#x213C-#x213D#x2146-#x2149#x214E#x2184#x2C30-#x2C5F#x2C61#x2C65-#x2C66#x2C68#x2C6A#x2C6C#x2C71#x2C73-#x2C74#x2C76-#x2C7B#x2C81#x2C83#x2C85#x2C87#x2C89#x2C8B#x2C8D#x2C8F#x2C91#x2C93#x2C95#x2C97#x2C99#x2C9B#x2C9D#x2C9F#x2CA1#x2CA3#x2CA5#x2CA7#x2CA9#x2CAB#x2CAD#x2CAF#x2CB1#x2CB3#x2CB5#x2CB7#x2CB9#x2CBB#x2CBD#x2CBF#x2CC1#x2CC3#x2CC5#x2CC7#x2CC9#x2CCB#x2CCD#x2CCF#x2CD1#x2CD3#x2CD5#x2CD7#x2CD9#x2CDB#x2CDD#x2CDF#x2CE1#x2CE3-#x2CE4#x2CEC#x2CEE#x2CF3#x2D00-#x2D25#x2D27#x2D2D#xA641#xA643#xA645#xA647#xA649#xA64B#xA64D#xA64F#xA651#xA653#xA655#xA657#xA659#xA65B#xA65D#xA65F#xA661#xA663#xA665#xA667#xA669#xA66B#xA66D#xA681#xA683#xA685#xA687#xA689#xA68B#xA68D#xA68F#xA691#xA693#xA695#xA697#xA699#xA69B#xA723#xA725#xA727#xA729#xA72B#xA72D#xA72F-#xA731#xA733#xA735#xA737#xA739#xA73B#xA73D#xA73F#xA741#xA743#xA745#xA747#xA749#xA74B#xA74D#xA74F#xA751#xA753#xA755#xA757#xA759#xA75B#xA75D#xA75F#xA761#xA763#xA765#xA767#xA769#xA76B#xA76D#xA76F#xA771-#xA778#xA77A#xA77C#xA77F#xA781#xA783#xA785#xA787#xA78C#xA78E#xA791#xA793-#xA795#xA797#xA799#xA79B#xA79D#xA79F#xA7A1#xA7A3#xA7A5#xA7A7#xA7A9#xA7AF#xA7B5#xA7B7#xA7B9#xA7BB#xA7BD#xA7BF#xA7C1#xA7C3#xA7C8#xA7CA#xA7D1#xA7D3#xA7D5#xA7D7#xA7D9#xA7F6#xA7FA#xAB30-#xAB5A#xAB60-#xAB68#xAB70-#xABBF#xFB00-#xFB06#xFB13-#xFB17#xFF41-#xFF5A]
Referenced by: -
+ ====================================================================================================================== @@ -10915,7 +10918,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
Lm       ::= [#x2B0-#x2C1#x2C6-#x2D1#x2E0-#x2E4#x2EC#x2EE#x374#x37A#x559#x640#x6E5-#x6E6#x7F4-#x7F5#x7FA#x81A#x824#x828#x8C9#x971#xE46#xEC6#x10FC#x17D7#x1843#x1AA7#x1C78-#x1C7D#x1D2C-#x1D6A#x1D78#x1D9B-#x1DBF#x2071#x207F#x2090-#x209C#x2C7C-#x2C7D#x2D6F#x2E2F#x3005#x3031-#x3035#x303B#x309D-#x309E#x30FC-#x30FE#xA015#xA4F8-#xA4FD#xA60C#xA67F#xA69C-#xA69D#xA717-#xA71F#xA770#xA788#xA7F2-#xA7F4#xA7F8-#xA7F9#xA9CF#xA9E6#xAA70#xAADD#xAAF3-#xAAF4#xAB5C-#xAB5F#xAB69#xFF70#xFF9E-#xFF9F]
Referenced by: -
+ ====================================================================================================================== @@ -11515,7 +11518,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
Lo       ::= [#xAA#xBA#x1BB#x1C0-#x1C3#x294#x5D0-#x5EA#x5EF-#x5F2#x620-#x63F#x641-#x64A#x66E-#x66F#x671-#x6D3#x6D5#x6EE-#x6EF#x6FA-#x6FC#x6FF#x710#x712-#x72F#x74D-#x7A5#x7B1#x7CA-#x7EA#x800-#x815#x840-#x858#x860-#x86A#x870-#x887#x889-#x88E#x8A0-#x8C8#x904-#x939#x93D#x950#x958-#x961#x972-#x980#x985-#x98C#x98F-#x990#x993-#x9A8#x9AA-#x9B0#x9B2#x9B6-#x9B9#x9BD#x9CE#x9DC-#x9DD#x9DF-#x9E1#x9F0-#x9F1#x9FC#xA05-#xA0A#xA0F-#xA10#xA13-#xA28#xA2A-#xA30#xA32-#xA33#xA35-#xA36#xA38-#xA39#xA59-#xA5C#xA5E#xA72-#xA74#xA85-#xA8D#xA8F-#xA91#xA93-#xAA8#xAAA-#xAB0#xAB2-#xAB3#xAB5-#xAB9#xABD#xAD0#xAE0-#xAE1#xAF9#xB05-#xB0C#xB0F-#xB10#xB13-#xB28#xB2A-#xB30#xB32-#xB33#xB35-#xB39#xB3D#xB5C-#xB5D#xB5F-#xB61#xB71#xB83#xB85-#xB8A#xB8E-#xB90#xB92-#xB95#xB99-#xB9A#xB9C#xB9E-#xB9F#xBA3-#xBA4#xBA8-#xBAA#xBAE-#xBB9#xBD0#xC05-#xC0C#xC0E-#xC10#xC12-#xC28#xC2A-#xC39#xC3D#xC58-#xC5A#xC5D#xC60-#xC61#xC80#xC85-#xC8C#xC8E-#xC90#xC92-#xCA8#xCAA-#xCB3#xCB5-#xCB9#xCBD#xCDD-#xCDE#xCE0-#xCE1#xCF1-#xCF2#xD04-#xD0C#xD0E-#xD10#xD12-#xD3A#xD3D#xD4E#xD54-#xD56#xD5F-#xD61#xD7A-#xD7F#xD85-#xD96#xD9A-#xDB1#xDB3-#xDBB#xDBD#xDC0-#xDC6#xE01-#xE30#xE32-#xE33#xE40-#xE45#xE81-#xE82#xE84#xE86-#xE8A#xE8C-#xEA3#xEA5#xEA7-#xEB0#xEB2-#xEB3#xEBD#xEC0-#xEC4#xEDC-#xEDF#xF00#xF40-#xF47#xF49-#xF6C#xF88-#xF8C#x1000-#x102A#x103F#x1050-#x1055#x105A-#x105D#x1061#x1065-#x1066#x106E-#x1070#x1075-#x1081#x108E#x1100-#x1248#x124A-#x124D#x1250-#x1256#x1258#x125A-#x125D#x1260-#x1288#x128A-#x128D#x1290-#x12B0#x12B2-#x12B5#x12B8-#x12BE#x12C0#x12C2-#x12C5#x12C8-#x12D6#x12D8-#x1310#x1312-#x1315#x1318-#x135A#x1380-#x138F#x1401-#x166C#x166F-#x167F#x1681-#x169A#x16A0-#x16EA#x16F1-#x16F8#x1700-#x1711#x171F-#x1731#x1740-#x1751#x1760-#x176C#x176E-#x1770#x1780-#x17B3#x17DC#x1820-#x1842#x1844-#x1878#x1880-#x1884#x1887-#x18A8#x18AA#x18B0-#x18F5#x1900-#x191E#x1950-#x196D#x1970-#x1974#x1980-#x19AB#x19B0-#x19C9#x1A00-#x1A16#x1A20-#x1A54#x1B05-#x1B33#x1B45-#x1B4C#x1B83-#x1BA0#x1BAE-#x1BAF#x1BBA-#x1BE5#x1C00-#x1C23#x1C4D-#x1C4F#x1C5A-#x1C77#x1CE9-#x1CEC#x1CEE-#x1CF3#x1CF5-#x1CF6#x1CFA#x2135-#x2138#x2D30-#x2D67#x2D80-#x2D96#x2DA0-#x2DA6#x2DA8-#x2DAE#x2DB0-#x2DB6#x2DB8-#x2DBE#x2DC0-#x2DC6#x2DC8-#x2DCE#x2DD0-#x2DD6#x2DD8-#x2DDE#x3006#x303C#x3041-#x3096#x309F#x30A1-#x30FA#x30FF#x3105-#x312F#x3131-#x318E#x31A0-#x31BF#x31F0-#x31FF#x4DBF#x9FFF-#xA014#xA016-#xA48C#xA4D0-#xA4F7#xA500-#xA60B#xA610-#xA61F#xA62A-#xA62B#xA66E#xA6A0-#xA6E5#xA78F#xA7F7#xA7FB-#xA801#xA803-#xA805#xA807-#xA80A#xA80C-#xA822#xA840-#xA873#xA882-#xA8B3#xA8F2-#xA8F7#xA8FB#xA8FD-#xA8FE#xA90A-#xA925#xA930-#xA946#xA960-#xA97C#xA984-#xA9B2#xA9E0-#xA9E4#xA9E7-#xA9EF#xA9FA-#xA9FE#xAA00-#xAA28#xAA40-#xAA42#xAA44-#xAA4B#xAA60-#xAA6F#xAA71-#xAA76#xAA7A#xAA7E-#xAAAF#xAAB1#xAAB5-#xAAB6#xAAB9-#xAABD#xAAC0#xAAC2#xAADB-#xAADC#xAAE0-#xAAEA#xAAF2#xAB01-#xAB06#xAB09-#xAB0E#xAB11-#xAB16#xAB20-#xAB26#xAB28-#xAB2E#xABC0-#xABE2#xD7A3#xD7B0-#xD7C6#xD7CB-#xD7FB#xF900-#xFA6D#xFA70-#xFAD9#xFB1D#xFB1F-#xFB28#xFB2A-#xFB36#xFB38-#xFB3C#xFB3E#xFB40-#xFB41#xFB43-#xFB44#xFB46-#xFBB1#xFBD3-#xFD3D#xFD50-#xFD8F#xFD92-#xFDC7#xFDF0-#xFDFB#xFE70-#xFE74#xFE76-#xFEFC#xFF66-#xFF6F#xFF71-#xFF9D#xFFA0-#xFFBE#xFFC2-#xFFC7#xFFCA-#xFFCF#xFFD2-#xFFD7#xFFDA-#xFFDC]
Referenced by: -
+ ====================================================================================================================== @@ -11555,7 +11558,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
Lt       ::= [#x1C5#x1C8#x1CB#x1F2#x1F88-#x1F8F#x1F98-#x1F9F#x1FA8-#x1FAF#x1FBC#x1FCC#x1FFC]
Referenced by: -
+ ====================================================================================================================== @@ -12785,7 +12788,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
Lu       ::= [A-Z#xC0-#xD6#xD8-#xDE#x100#x102#x104#x106#x108#x10A#x10C#x10E#x110#x112#x114#x116#x118#x11A#x11C#x11E#x120#x122#x124#x126#x128#x12A#x12C#x12E#x130#x132#x134#x136#x139#x13B#x13D#x13F#x141#x143#x145#x147#x14A#x14C#x14E#x150#x152#x154#x156#x158#x15A#x15C#x15E#x160#x162#x164#x166#x168#x16A#x16C#x16E#x170#x172#x174#x176#x178-#x179#x17B#x17D#x181-#x182#x184#x186-#x187#x189-#x18B#x18E-#x191#x193-#x194#x196-#x198#x19C-#x19D#x19F-#x1A0#x1A2#x1A4#x1A6-#x1A7#x1A9#x1AC#x1AE-#x1AF#x1B1-#x1B3#x1B5#x1B7-#x1B8#x1BC#x1C4#x1C7#x1CA#x1CD#x1CF#x1D1#x1D3#x1D5#x1D7#x1D9#x1DB#x1DE#x1E0#x1E2#x1E4#x1E6#x1E8#x1EA#x1EC#x1EE#x1F1#x1F4#x1F6-#x1F8#x1FA#x1FC#x1FE#x200#x202#x204#x206#x208#x20A#x20C#x20E#x210#x212#x214#x216#x218#x21A#x21C#x21E#x220#x222#x224#x226#x228#x22A#x22C#x22E#x230#x232#x23A-#x23B#x23D-#x23E#x241#x243-#x246#x248#x24A#x24C#x24E#x370#x372#x376#x37F#x386#x388-#x38A#x38C#x38E-#x38F#x391-#x3A1#x3A3-#x3AB#x3CF#x3D2-#x3D4#x3D8#x3DA#x3DC#x3DE#x3E0#x3E2#x3E4#x3E6#x3E8#x3EA#x3EC#x3EE#x3F4#x3F7#x3F9-#x3FA#x3FD-#x42F#x460#x462#x464#x466#x468#x46A#x46C#x46E#x470#x472#x474#x476#x478#x47A#x47C#x47E#x480#x48A#x48C#x48E#x490#x492#x494#x496#x498#x49A#x49C#x49E#x4A0#x4A2#x4A4#x4A6#x4A8#x4AA#x4AC#x4AE#x4B0#x4B2#x4B4#x4B6#x4B8#x4BA#x4BC#x4BE#x4C0-#x4C1#x4C3#x4C5#x4C7#x4C9#x4CB#x4CD#x4D0#x4D2#x4D4#x4D6#x4D8#x4DA#x4DC#x4DE#x4E0#x4E2#x4E4#x4E6#x4E8#x4EA#x4EC#x4EE#x4F0#x4F2#x4F4#x4F6#x4F8#x4FA#x4FC#x4FE#x500#x502#x504#x506#x508#x50A#x50C#x50E#x510#x512#x514#x516#x518#x51A#x51C#x51E#x520#x522#x524#x526#x528#x52A#x52C#x52E#x531-#x556#x10A0-#x10C5#x10C7#x10CD#x13A0-#x13F5#x1C90-#x1CBA#x1CBD-#x1CBF#x1E00#x1E02#x1E04#x1E06#x1E08#x1E0A#x1E0C#x1E0E#x1E10#x1E12#x1E14#x1E16#x1E18#x1E1A#x1E1C#x1E1E#x1E20#x1E22#x1E24#x1E26#x1E28#x1E2A#x1E2C#x1E2E#x1E30#x1E32#x1E34#x1E36#x1E38#x1E3A#x1E3C#x1E3E#x1E40#x1E42#x1E44#x1E46#x1E48#x1E4A#x1E4C#x1E4E#x1E50#x1E52#x1E54#x1E56#x1E58#x1E5A#x1E5C#x1E5E#x1E60#x1E62#x1E64#x1E66#x1E68#x1E6A#x1E6C#x1E6E#x1E70#x1E72#x1E74#x1E76#x1E78#x1E7A#x1E7C#x1E7E#x1E80#x1E82#x1E84#x1E86#x1E88#x1E8A#x1E8C#x1E8E#x1E90#x1E92#x1E94#x1E9E#x1EA0#x1EA2#x1EA4#x1EA6#x1EA8#x1EAA#x1EAC#x1EAE#x1EB0#x1EB2#x1EB4#x1EB6#x1EB8#x1EBA#x1EBC#x1EBE#x1EC0#x1EC2#x1EC4#x1EC6#x1EC8#x1ECA#x1ECC#x1ECE#x1ED0#x1ED2#x1ED4#x1ED6#x1ED8#x1EDA#x1EDC#x1EDE#x1EE0#x1EE2#x1EE4#x1EE6#x1EE8#x1EEA#x1EEC#x1EEE#x1EF0#x1EF2#x1EF4#x1EF6#x1EF8#x1EFA#x1EFC#x1EFE#x1F08-#x1F0F#x1F18-#x1F1D#x1F28-#x1F2F#x1F38-#x1F3F#x1F48-#x1F4D#x1F59#x1F5B#x1F5D#x1F5F#x1F68-#x1F6F#x1FB8-#x1FBB#x1FC8-#x1FCB#x1FD8-#x1FDB#x1FE8-#x1FEC#x1FF8-#x1FFB#x2102#x2107#x210B-#x210D#x2110-#x2112#x2115#x2119-#x211D#x2124#x2126#x2128#x212A-#x212D#x2130-#x2133#x213E-#x213F#x2145#x2183#x2C00-#x2C2F#x2C60#x2C62-#x2C64#x2C67#x2C69#x2C6B#x2C6D-#x2C70#x2C72#x2C75#x2C7E-#x2C80#x2C82#x2C84#x2C86#x2C88#x2C8A#x2C8C#x2C8E#x2C90#x2C92#x2C94#x2C96#x2C98#x2C9A#x2C9C#x2C9E#x2CA0#x2CA2#x2CA4#x2CA6#x2CA8#x2CAA#x2CAC#x2CAE#x2CB0#x2CB2#x2CB4#x2CB6#x2CB8#x2CBA#x2CBC#x2CBE#x2CC0#x2CC2#x2CC4#x2CC6#x2CC8#x2CCA#x2CCC#x2CCE#x2CD0#x2CD2#x2CD4#x2CD6#x2CD8#x2CDA#x2CDC#x2CDE#x2CE0#x2CE2#x2CEB#x2CED#x2CF2#xA640#xA642#xA644#xA646#xA648#xA64A#xA64C#xA64E#xA650#xA652#xA654#xA656#xA658#xA65A#xA65C#xA65E#xA660#xA662#xA664#xA666#xA668#xA66A#xA66C#xA680#xA682#xA684#xA686#xA688#xA68A#xA68C#xA68E#xA690#xA692#xA694#xA696#xA698#xA69A#xA722#xA724#xA726#xA728#xA72A#xA72C#xA72E#xA732#xA734#xA736#xA738#xA73A#xA73C#xA73E#xA740#xA742#xA744#xA746#xA748#xA74A#xA74C#xA74E#xA750#xA752#xA754#xA756#xA758#xA75A#xA75C#xA75E#xA760#xA762#xA764#xA766#xA768#xA76A#xA76C#xA76E#xA779#xA77B#xA77D-#xA77E#xA780#xA782#xA784#xA786#xA78B#xA78D#xA790#xA792#xA796#xA798#xA79A#xA79C#xA79E#xA7A0#xA7A2#xA7A4#xA7A6#xA7A8#xA7AA-#xA7AE#xA7B0-#xA7B4#xA7B6#xA7B8#xA7BA#xA7BC#xA7BE#xA7C0#xA7C2#xA7C4-#xA7C7#xA7C9#xA7D0#xA7D6#xA7D8#xA7F5#xFF21-#xFF3A]
Referenced by: -
+ ====================================================================================================================== @@ -12819,7 +12822,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
Nl       ::= [#x16EE-#x16F0#x2160-#x2182#x2185-#x2188#x3007#x3021-#x3029#x3038-#x303A#xA6E6-#xA6EF]
Referenced by: -
+ ====================================================================================================================== @@ -12829,7 +12832,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|. .. raw:: html - + @@ -12841,19 +12844,22 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|. Pc - Cf - -
+ Cf + + CJK + +
         ::= Mn
           | Mc
           | Nd
           | Pc
-
           | Cf
+
           | Cf
+
           | CJK
Referenced by: -
+
====================================================================================================================== @@ -12901,7 +12907,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
Cf       ::= [#xAD#x600-#x605#x61C#x6DD#x70F#x890-#x891#x8E2#x180E#x200B-#x200F#x202A-#x202E#x2060-#x2064#x2066-#x206F#xFEFF#xFFF9-#xFFFB]
Referenced by: -
+ ====================================================================================================================== @@ -13145,7 +13151,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
Mc       ::= [#x903#x93B#x93E-#x940#x949-#x94C#x94E-#x94F#x982-#x983#x9BE-#x9C0#x9C7-#x9C8#x9CB-#x9CC#x9D7#xA03#xA3E-#xA40#xA83#xABE-#xAC0#xAC9#xACB-#xACC#xB02-#xB03#xB3E#xB40#xB47-#xB48#xB4B-#xB4C#xB57#xBBE-#xBBF#xBC1-#xBC2#xBC6-#xBC8#xBCA-#xBCC#xBD7#xC01-#xC03#xC41-#xC44#xC82-#xC83#xCBE#xCC0-#xCC4#xCC7-#xCC8#xCCA-#xCCB#xCD5-#xCD6#xCF3#xD02-#xD03#xD3E-#xD40#xD46-#xD48#xD4A-#xD4C#xD57#xD82-#xD83#xDCF-#xDD1#xDD8-#xDDF#xDF2-#xDF3#xF3E-#xF3F#xF7F#x102B-#x102C#x1031#x1038#x103B-#x103C#x1056-#x1057#x1062-#x1064#x1067-#x106D#x1083-#x1084#x1087-#x108C#x108F#x109A-#x109C#x1715#x1734#x17B6#x17BE-#x17C5#x17C7-#x17C8#x1923-#x1926#x1929-#x192B#x1930-#x1931#x1933-#x1938#x1A19-#x1A1A#x1A55#x1A57#x1A61#x1A63-#x1A64#x1A6D-#x1A72#x1B04#x1B35#x1B3B#x1B3D-#x1B41#x1B43-#x1B44#x1B82#x1BA1#x1BA6-#x1BA7#x1BAA#x1BE7#x1BEA-#x1BEC#x1BEE#x1BF2-#x1BF3#x1C24-#x1C2B#x1C34-#x1C35#x1CE1#x1CF7#x302E-#x302F#xA823-#xA824#xA827#xA880-#xA881#xA8B4-#xA8C3#xA952-#xA953#xA983#xA9B4-#xA9B5#xA9BA-#xA9BB#xA9BE-#xA9C0#xAA2F-#xAA30#xAA33-#xAA34#xAA4D#xAA7B#xAA7D#xAAEB#xAAEE-#xAAEF#xAAF5#xABE3-#xABE4#xABE6-#xABE7#xABE9-#xABEA#xABEC]
Referenced by: -
+ ====================================================================================================================== @@ -13589,7 +13595,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
Mn       ::= [#x300-#x36F#x483-#x487#x591-#x5BD#x5BF#x5C1-#x5C2#x5C4-#x5C5#x5C7#x610-#x61A#x64B-#x65F#x670#x6D6-#x6DC#x6DF-#x6E4#x6E7-#x6E8#x6EA-#x6ED#x711#x730-#x74A#x7A6-#x7B0#x7EB-#x7F3#x7FD#x816-#x819#x81B-#x823#x825-#x827#x829-#x82D#x859-#x85B#x898-#x89F#x8CA-#x8E1#x8E3-#x902#x93A#x93C#x941-#x948#x94D#x951-#x957#x962-#x963#x981#x9BC#x9C1-#x9C4#x9CD#x9E2-#x9E3#x9FE#xA01-#xA02#xA3C#xA41-#xA42#xA47-#xA48#xA4B-#xA4D#xA51#xA70-#xA71#xA75#xA81-#xA82#xABC#xAC1-#xAC5#xAC7-#xAC8#xACD#xAE2-#xAE3#xAFA-#xAFF#xB01#xB3C#xB3F#xB41-#xB44#xB4D#xB55-#xB56#xB62-#xB63#xB82#xBC0#xBCD#xC00#xC04#xC3C#xC3E-#xC40#xC46-#xC48#xC4A-#xC4D#xC55-#xC56#xC62-#xC63#xC81#xCBC#xCBF#xCC6#xCCC-#xCCD#xCE2-#xCE3#xD00-#xD01#xD3B-#xD3C#xD41-#xD44#xD4D#xD62-#xD63#xD81#xDCA#xDD2-#xDD4#xDD6#xE31#xE34-#xE3A#xE47-#xE4E#xEB1#xEB4-#xEBC#xEC8-#xECE#xF18-#xF19#xF35#xF37#xF39#xF71-#xF7E#xF80-#xF84#xF86-#xF87#xF8D-#xF97#xF99-#xFBC#xFC6#x102D-#x1030#x1032-#x1037#x1039-#x103A#x103D-#x103E#x1058-#x1059#x105E-#x1060#x1071-#x1074#x1082#x1085-#x1086#x108D#x109D#x135D-#x135F#x1712-#x1714#x1732-#x1733#x1752-#x1753#x1772-#x1773#x17B4-#x17B5#x17B7-#x17BD#x17C6#x17C9-#x17D3#x17DD#x180B-#x180D#x180F#x1885-#x1886#x18A9#x1920-#x1922#x1927-#x1928#x1932#x1939-#x193B#x1A17-#x1A18#x1A1B#x1A56#x1A58-#x1A5E#x1A60#x1A62#x1A65-#x1A6C#x1A73-#x1A7C#x1A7F#x1AB0-#x1ABD#x1ABF-#x1ACE#x1B00-#x1B03#x1B34#x1B36-#x1B3A#x1B3C#x1B42#x1B6B-#x1B73#x1B80-#x1B81#x1BA2-#x1BA5#x1BA8-#x1BA9#x1BAB-#x1BAD#x1BE6#x1BE8-#x1BE9#x1BED#x1BEF-#x1BF1#x1C2C-#x1C33#x1C36-#x1C37#x1CD0-#x1CD2#x1CD4-#x1CE0#x1CE2-#x1CE8#x1CED#x1CF4#x1CF8-#x1CF9#x1DC0-#x1DFF#x20D0-#x20DC#x20E1#x20E5-#x20F0#x2CEF-#x2CF1#x2D7F#x2DE0-#x2DFF#x302A-#x302D#x3099-#x309A#xA66F#xA674-#xA67D#xA69E-#xA69F#xA6F0-#xA6F1#xA802#xA806#xA80B#xA825-#xA826#xA82C#xA8C4-#xA8C5#xA8E0-#xA8F1#xA8FF#xA926-#xA92D#xA947-#xA951#xA980-#xA982#xA9B3#xA9B6-#xA9B9#xA9BC-#xA9BD#xA9E5#xAA29-#xAA2E#xAA31-#xAA32#xAA35-#xAA36#xAA43#xAA4C#xAA7C#xAAB0#xAAB2-#xAAB4#xAAB7-#xAAB8#xAABE-#xAABF#xAAC1#xAAEC-#xAAED#xAAF6#xABE5#xABE8#xABED#xFB1E#xFE00-#xFE0F#xFE20-#xFE2F]
Referenced by: -
+ ====================================================================================================================== @@ -13683,7 +13689,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
Nd       ::= [0-9#x660-#x669#x6F0-#x6F9#x7C0-#x7C9#x966-#x96F#x9E6-#x9EF#xA66-#xA6F#xAE6-#xAEF#xB66-#xB6F#xBE6-#xBEF#xC66-#xC6F#xCE6-#xCEF#xD66-#xD6F#xDE6-#xDEF#xE50-#xE59#xED0-#xED9#xF20-#xF29#x1040-#x1049#x1090-#x1099#x17E0-#x17E9#x1810-#x1819#x1946-#x194F#x19D0-#x19D9#x1A80-#x1A89#x1A90-#x1A99#x1B50-#x1B59#x1BB0-#x1BB9#x1C40-#x1C49#x1C50-#x1C59#xA620-#xA629#xA8D0-#xA8D9#xA900-#xA909#xA9D0-#xA9D9#xA9F0-#xA9F9#xAA50-#xAA59#xABF0-#xABF9#xFF10-#xFF19]
+ ====================================================================================================================== @@ -13713,7 +13719,29 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
Pc       ::= [#x203F-#x2040#x2054#xFE33-#xFE34#xFE4D-#xFE4F#xFF3F]
Referenced by: -
+ + + +====================================================================================================================== + CJK +====================================================================================================================== + + +.. raw:: html + + + + + + [#x4E00-#x9FFF] + + +
+ +
CJK      ::= [#x4E00-#x9FFF]
+
====================================================================================================================== @@ -13749,7 +13777,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
ESC      ::= '\' [ntbrf\"]
Referenced by: -
+ ====================================================================================================================== @@ -13821,7 +13849,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
         ::= ( [UENRB] | 'RB' | '_utf8' )? ( "'" ( ( ESC | "\'" | [^'\] )* | ( "''" | [^'] )+ ) "'" | "q'{" .* "}'" | "q'(" .* ")'" | "q'[" .* "]'" | "q''" .* "''" )
+ ====================================================================================================================== @@ -13869,7 +13897,7 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
           | '[' [^#x5D#xA#xD]* ']'
+ ====================================================================================================================== @@ -13891,6 +13919,6 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
EOF      ::= $
Referenced by: -
+ \ No newline at end of file diff --git a/src/site/sphinx/usage.rst b/src/site/sphinx/usage.rst index 6a54b4e62..f454bf68f 100644 --- a/src/site/sphinx/usage.rst +++ b/src/site/sphinx/usage.rst @@ -106,7 +106,7 @@ Build Dependencies } -Parse a SQL Statements +Parse a SQL Statement ============================== Parse the SQL Text into Java Objects: @@ -195,7 +195,7 @@ Traverse the Java Object Tree using the Visitor Patterns: stmt.accept(statementVisitor); -Build a SQL Statements +Build a SQL Statement ============================== Build any SQL Statement from Java Code using a fluent API: diff --git a/src/test/java/net/sf/jsqlparser/statement/SetStatementTest.java b/src/test/java/net/sf/jsqlparser/statement/SetStatementTest.java index b838f2224..9fe5639d7 100644 --- a/src/test/java/net/sf/jsqlparser/statement/SetStatementTest.java +++ b/src/test/java/net/sf/jsqlparser/statement/SetStatementTest.java @@ -9,11 +9,13 @@ */ package net.sf.jsqlparser.statement; -import java.util.Collections; +import java.util.*; + import net.sf.jsqlparser.JSQLParserException; import net.sf.jsqlparser.expression.StringValue; import static net.sf.jsqlparser.test.TestUtils.assertSqlCanBeParsedAndDeparsed; -import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.*; + import org.junit.jupiter.api.Test; /** @@ -65,19 +67,30 @@ public void testValueOnIssue927() throws JSQLParserException { @Test public void testObject() { SetStatement setStatement = new SetStatement(); - setStatement.add("standard_conforming_strings", Collections.singletonList(new StringValue("ON")), false); + setStatement.add("standard_conforming_strings", + Collections.singletonList(new StringValue("ON")), false); setStatement.withUseEqual(0, true).remove(0); assertEquals(0, setStatement.getCount()); + + setStatement.addKeyValuePairs( + new SetStatement.NameExpr("test", Arrays.asList(new StringValue("1")), false)); + setStatement.getKeyValuePairs().get(0).setUseEqual(true); + + assertEquals("test", setStatement.getKeyValuePairs().get(0).getName()); + assertTrue(setStatement.getKeyValuePairs().get(0).isUseEqual()); + + setStatement.clear(); + assertEquals(0, setStatement.getCount()); } @Test public void testSettingUserVariable() throws JSQLParserException { - String sqlStr="set @Flag = 1"; + String sqlStr = "set @Flag = 1"; assertSqlCanBeParsedAndDeparsed(sqlStr, true); // issue #1237 - sqlStr="SET @@global.time_zone = '01:00'"; + sqlStr = "SET @@global.time_zone = '01:00'"; assertSqlCanBeParsedAndDeparsed(sqlStr, true); } } diff --git a/src/test/java/net/sf/jsqlparser/statement/insert/InsertTest.java b/src/test/java/net/sf/jsqlparser/statement/insert/InsertTest.java index c99c624bc..6af678f3b 100644 --- a/src/test/java/net/sf/jsqlparser/statement/insert/InsertTest.java +++ b/src/test/java/net/sf/jsqlparser/statement/insert/InsertTest.java @@ -47,7 +47,7 @@ public class InsertTest { - private CCJSqlParserManager parserManager = new CCJSqlParserManager(); + private final CCJSqlParserManager parserManager = new CCJSqlParserManager(); @Test public void testRegularInsert() throws JSQLParserException { @@ -59,24 +59,25 @@ public void testRegularInsert() throws JSQLParserException { assertEquals("col2", insert.getColumns().get(1).getColumnName()); assertEquals("col3", insert.getColumns().get(2).getColumnName()); assertEquals(3, ((ExpressionList) insert.getItemsList()).getExpressions().size()); - assertTrue(((ExpressionList) insert.getItemsList()).getExpressions().get(0) instanceof JdbcParameter); + assertTrue(((ExpressionList) insert.getItemsList()).getExpressions() + .get(0) instanceof JdbcParameter); assertEquals("sadfsd", - ((StringValue) ((ExpressionList) insert.getItemsList()).getExpressions().get(1)). - getValue()); - assertEquals(234, ((LongValue) ((ExpressionList) insert.getItemsList()).getExpressions(). - get(2)).getValue()); + ((StringValue) ((ExpressionList) insert.getItemsList()).getExpressions().get(1)) + .getValue()); + assertEquals(234, + ((LongValue) ((ExpressionList) insert.getItemsList()).getExpressions().get(2)) + .getValue()); assertEquals(statement, insert.toString()); - ExpressionList expressionList =new ExpressionList( - new JdbcParameter() - , new StringValue("sadfsd") - , new LongValue().withValue(234) - ); + ExpressionList expressionList = new ExpressionList(new JdbcParameter(), + new StringValue("sadfsd"), new LongValue().withValue(234)); - Select select = new Select().withSelectBody(new ValuesStatement().withExpressions(expressionList)); + Select select = + new Select().withSelectBody(new ValuesStatement().withExpressions(expressionList)); Insert insert2 = new Insert().withTable(new Table("mytable")) - .withColumns(Arrays.asList(new Column("col1"), new Column("col2"), new Column("col3"))) + .withColumns( + Arrays.asList(new Column("col1"), new Column("col2"), new Column("col3"))) .withSelect(select); assertDeparse(insert2, statement); @@ -85,9 +86,12 @@ public void testRegularInsert() throws JSQLParserException { insert = (Insert) parserManager.parse(new StringReader(statement)); assertEquals("myschema.mytable", insert.getTable().getFullyQualifiedName()); assertEquals(3, insert.getItemsList(ExpressionList.class).getExpressions().size()); - assertTrue(((ExpressionList) insert.getItemsList()).getExpressions().get(0) instanceof JdbcParameter); - assertEquals(2.3, ((DoubleValue) insert.getItemsList(ExpressionList.class).getExpressions() - .get(2)).getValue(), 0.0); + assertTrue(((ExpressionList) insert.getItemsList()).getExpressions() + .get(0) instanceof JdbcParameter); + assertEquals(2.3, + ((DoubleValue) insert.getItemsList(ExpressionList.class).getExpressions().get(2)) + .getValue(), + 0.0); assertEquals(statement, "" + insert); } @@ -100,8 +104,7 @@ public void testInsertWithKeywordValue() throws JSQLParserException { assertEquals(1, insert.getColumns().size()); assertEquals("col1", insert.getColumns().get(0).getColumnName()); assertEquals("('val1')", - (((ExpressionList) insert.getItemsList()).getExpressions().get(0)). - toString()); + (((ExpressionList) insert.getItemsList()).getExpressions().get(0)).toString()); assertEquals("INSERT INTO mytable (col1) VALUES ('val1')", insert.toString()); } @@ -118,7 +121,8 @@ public void testInsertFromSelect() throws JSQLParserException { assertNull(insert.getItemsList()); assertNotNull(insert.getSelect()); assertEquals("mytable2", - ((Table) ((PlainSelect) insert.getSelect().getSelectBody()).getFromItem()).getName()); + ((Table) ((PlainSelect) insert.getSelect().getSelectBody()).getFromItem()) + .getName()); // toString uses brackets String statementToString = "INSERT INTO mytable (col1, col2, col3) SELECT * FROM mytable2"; @@ -126,8 +130,8 @@ public void testInsertFromSelect() throws JSQLParserException { assertDeparse(new Insert().withTable(new Table("mytable")) .addColumns(new Column("col1"), new Column("col2"), new Column("col3")) - .withSelect(new Select().withSelectBody( - new PlainSelect().addSelectItems(new AllColumns()).withFromItem(new Table("mytable2")))), + .withSelect(new Select().withSelectBody(new PlainSelect() + .addSelectItems(new AllColumns()).withFromItem(new Table("mytable2")))), statement); } @@ -155,10 +159,12 @@ public void testInsertValuesWithDuplicateElimination() throws JSQLParserExceptio assertEquals("ID", insert.getColumns().get(0).getColumnName()); assertEquals("COUNTER", insert.getColumns().get(1).getColumnName()); assertEquals(2, ((ExpressionList) insert.getItemsList()).getExpressions().size()); - assertEquals(123, ((LongValue) ((ExpressionList) insert.getItemsList()).getExpressions(). - get(0)).getValue()); - assertEquals(0, ((LongValue) ((ExpressionList) insert.getItemsList()).getExpressions(). - get(1)).getValue()); + assertEquals(123, + ((LongValue) ((ExpressionList) insert.getItemsList()).getExpressions().get(0)) + .getValue()); + assertEquals(0, + ((LongValue) ((ExpressionList) insert.getItemsList()).getExpressions().get(1)) + .getValue()); assertEquals(1, insert.getDuplicateUpdateColumns().size()); assertEquals("COUNTER", insert.getDuplicateUpdateColumns().get(0).getColumnName()); assertEquals(1, insert.getDuplicateUpdateExpressionList().size()); @@ -193,10 +199,13 @@ public void testInsertMultiRowValue() throws JSQLParserException { assertSqlCanBeParsedAndDeparsed(statement); MultiExpressionList multiExpressionList = new MultiExpressionList() - .addExpressionLists( new ExpressionList().addExpressions(new Column("a")).addExpressions(new Column("b"))) - .addExpressionLists( new ExpressionList().addExpressions(new Column("d")).addExpressions(new Column("e"))); + .addExpressionLists(new ExpressionList().addExpressions(new Column("a")) + .addExpressions(new Column("b"))) + .addExpressionLists(new ExpressionList().addExpressions(new Column("d")) + .addExpressions(new Column("e"))); - Select select = new Select().withSelectBody(new ValuesStatement().withExpressions(multiExpressionList)); + Select select = new Select() + .withSelectBody(new ValuesStatement().withExpressions(multiExpressionList)); Insert insert = new Insert().withTable(new Table("mytable")) .withColumns(Arrays.asList(new Column("col1"), new Column("col2"))) @@ -207,8 +216,9 @@ public void testInsertMultiRowValue() throws JSQLParserException { @Test @Disabled - //@todo: Clarify, if and why this test is supposed to fail and if it is the Parser's job to decide - //What if col1 and col2 are Array Columns? + // @todo: Clarify, if and why this test is supposed to fail and if it is the Parser's job to + // decide + // What if col1 and col2 are Array Columns? public void testInsertMultiRowValueDifferent() throws JSQLParserException { assertThrowsExactly(JSQLParserException.class, new Executable() { @Override @@ -221,8 +231,7 @@ public void execute() throws Throwable { @Test @Disabled public void testOracleInsertMultiRowValue() throws JSQLParserException { - String sqlStr - = "INSERT ALL\n" + String sqlStr = "INSERT ALL\n" + " INTO suppliers (supplier_id, supplier_name) VALUES (1000, 'IBM')\n" + " INTO suppliers (supplier_id, supplier_name) VALUES (2000, 'Microsoft')\n" + " INTO suppliers (supplier_id, supplier_name) VALUES (3000, 'Google')\n" @@ -232,7 +241,8 @@ public void testOracleInsertMultiRowValue() throws JSQLParserException { @Test public void testSimpleInsert() throws JSQLParserException { - assertSqlCanBeParsedAndDeparsed("INSERT INTO example (num, name, address, tel) VALUES (1, 'name', 'test ', '1234-1234')"); + assertSqlCanBeParsedAndDeparsed( + "INSERT INTO example (num, name, address, tel) VALUES (1, 'name', 'test ', '1234-1234')"); } @Test @@ -247,19 +257,26 @@ public void testInsertWithReturning2() throws JSQLParserException { @Test public void testInsertWithReturning3() throws JSQLParserException { - assertSqlCanBeParsedAndDeparsed("INSERT INTO mytable (mycolumn) VALUES ('1') RETURNING id AS a1, id2 AS a2"); + assertSqlCanBeParsedAndDeparsed( + "INSERT INTO mytable (mycolumn) VALUES ('1') RETURNING id AS a1, id2 AS a2"); } @Test public void testInsertSelect() throws JSQLParserException { - assertSqlCanBeParsedAndDeparsed("INSERT INTO mytable (mycolumn) SELECT mycolumn FROM mytable"); - assertSqlCanBeParsedAndDeparsed("INSERT INTO mytable (mycolumn) (SELECT mycolumn FROM mytable)"); + assertSqlCanBeParsedAndDeparsed( + "INSERT INTO mytable (mycolumn) SELECT mycolumn FROM mytable"); + assertSqlCanBeParsedAndDeparsed( + "INSERT INTO mytable (mycolumn) (SELECT mycolumn FROM mytable)"); } @Test public void testInsertWithSelect() throws JSQLParserException { - assertSqlCanBeParsedAndDeparsed("INSERT INTO mytable (mycolumn) WITH a AS (SELECT mycolumn FROM mytable) SELECT mycolumn FROM a", true); - assertSqlCanBeParsedAndDeparsed("INSERT INTO mytable (mycolumn) (WITH a AS (SELECT mycolumn FROM mytable) SELECT mycolumn FROM a)", true); + assertSqlCanBeParsedAndDeparsed( + "INSERT INTO mytable (mycolumn) WITH a AS (SELECT mycolumn FROM mytable) SELECT mycolumn FROM a", + true); + assertSqlCanBeParsedAndDeparsed( + "INSERT INTO mytable (mycolumn) (WITH a AS (SELECT mycolumn FROM mytable) SELECT mycolumn FROM a)", + true); } @Test @@ -284,12 +301,14 @@ public void testHexValues3() throws JSQLParserException { @Test public void testDuplicateKey() throws JSQLParserException { - assertSqlCanBeParsedAndDeparsed("INSERT INTO Users0 (UserId, Key, Value) VALUES (51311, 'T_211', 18) ON DUPLICATE KEY UPDATE Value = 18"); + assertSqlCanBeParsedAndDeparsed( + "INSERT INTO Users0 (UserId, Key, Value) VALUES (51311, 'T_211', 18) ON DUPLICATE KEY UPDATE Value = 18"); } @Test public void testModifierIgnore() throws JSQLParserException { - assertSqlCanBeParsedAndDeparsed("INSERT IGNORE INTO `AoQiSurvey_FlashVersion_Single` VALUES (302215163, 'WIN 16,0,0,235')"); + assertSqlCanBeParsedAndDeparsed( + "INSERT IGNORE INTO `AoQiSurvey_FlashVersion_Single` VALUES (302215163, 'WIN 16,0,0,235')"); } @Test @@ -299,22 +318,21 @@ public void testModifierPriority1() throws JSQLParserException { @Test public void testModifierPriority2() throws JSQLParserException { - assertSqlCanBeParsedAndDeparsed("INSERT LOW_PRIORITY INTO kvPair (value, key) VALUES (?, ?)"); + assertSqlCanBeParsedAndDeparsed( + "INSERT LOW_PRIORITY INTO kvPair (value, key) VALUES (?, ?)"); } @Test public void testModifierPriority3() throws JSQLParserException { - assertSqlCanBeParsedAndDeparsed("INSERT HIGH_PRIORITY INTO kvPair (value, key) VALUES (?, ?)"); + assertSqlCanBeParsedAndDeparsed( + "INSERT HIGH_PRIORITY INTO kvPair (value, key) VALUES (?, ?)"); } @Test public void testIssue223() throws JSQLParserException { - String sqlStr="INSERT INTO user VALUES (2001, '\\'Clark\\'', 'Kent')"; - assertSqlCanBeParsedAndDeparsed( - sqlStr - , true - , parser -> parser.withBackslashEscapeCharacter(true) - ); + String sqlStr = "INSERT INTO user VALUES (2001, '\\'Clark\\'', 'Kent')"; + assertSqlCanBeParsedAndDeparsed(sqlStr, true, + parser -> parser.withBackslashEscapeCharacter(true)); } @Test @@ -324,7 +342,9 @@ public void testKeywordPrecisionIssue363() throws JSQLParserException { @Test public void testWithDeparsingIssue406() throws JSQLParserException { - assertSqlCanBeParsedAndDeparsed("insert into mytab3 (a,b,c) select a,b,c from mytab where exists(with t as (select * from mytab2) select * from t)", true); + assertSqlCanBeParsedAndDeparsed( + "insert into mytab3 (a,b,c) select a,b,c from mytab where exists(with t as (select * from mytab2) select * from t)", + true); } @Test @@ -346,186 +366,162 @@ public void testInsertSetWithDuplicateEliminationInDeparsing() throws JSQLParser @Test public void testInsertTableWithAliasIssue526() throws JSQLParserException { - assertSqlCanBeParsedAndDeparsed("INSERT INTO account t (name, addr, phone) SELECT * FROM user"); + assertSqlCanBeParsedAndDeparsed( + "INSERT INTO account t (name, addr, phone) SELECT * FROM user"); } @Test public void testInsertKeyWordEnableIssue592() throws JSQLParserException { - assertSqlCanBeParsedAndDeparsed("INSERT INTO T_USER (ID, EMAIL_VALIDATE, ENABLE, PASSWORD) VALUES (?, ?, ?, ?)"); + assertSqlCanBeParsedAndDeparsed( + "INSERT INTO T_USER (ID, EMAIL_VALIDATE, ENABLE, PASSWORD) VALUES (?, ?, ?, ?)"); } @Test public void testInsertKeyWordIntervalIssue682() throws JSQLParserException { - assertSqlCanBeParsedAndDeparsed("INSERT INTO BILLING_TASKS (TIMEOUT, INTERVAL, RETRY_UPON_FAILURE, END_DATE, MAX_RETRY_COUNT, CONTINUOUS, NAME, LAST_RUN, START_TIME, NEXT_RUN, ID, UNIQUE_NAME, INTERVAL_TYPE) VALUES (?, ?, ?, ?, ?, ?, ?, NULL, ?, ?, ?, ?, ?)"); + assertSqlCanBeParsedAndDeparsed( + "INSERT INTO BILLING_TASKS (TIMEOUT, INTERVAL, RETRY_UPON_FAILURE, END_DATE, MAX_RETRY_COUNT, CONTINUOUS, NAME, LAST_RUN, START_TIME, NEXT_RUN, ID, UNIQUE_NAME, INTERVAL_TYPE) VALUES (?, ?, ?, ?, ?, ?, ?, NULL, ?, ?, ?, ?, ?)"); } @Test public void testWithAtFront() throws JSQLParserException { - assertSqlCanBeParsedAndDeparsed("WITH foo AS ( SELECT attr FROM bar ) INSERT INTO lalelu (attr) SELECT attr FROM foo", true); + assertSqlCanBeParsedAndDeparsed( + "WITH foo AS ( SELECT attr FROM bar ) INSERT INTO lalelu (attr) SELECT attr FROM foo", + true); } @Test public void testNextVal() throws JSQLParserException { - assertSqlCanBeParsedAndDeparsed("INSERT INTO tracker (monitor_id, user_id, module_name, item_id, item_summary, team_id, date_modified, action, visible, id) VALUES (?, ?, ?, ?, ?, ?, to_date(?, 'YYYY-MM-DD HH24:MI:SS'), ?, ?, NEXTVAL FOR TRACKER_ID_SEQ)"); + assertSqlCanBeParsedAndDeparsed( + "INSERT INTO tracker (monitor_id, user_id, module_name, item_id, item_summary, team_id, date_modified, action, visible, id) VALUES (?, ?, ?, ?, ?, ?, to_date(?, 'YYYY-MM-DD HH24:MI:SS'), ?, ?, NEXTVAL FOR TRACKER_ID_SEQ)"); } @Test public void testNextValueFor() throws JSQLParserException { - assertSqlCanBeParsedAndDeparsed("INSERT INTO tracker (monitor_id, user_id, module_name, item_id, item_summary, team_id, date_modified, action, visible, id) VALUES (?, ?, ?, ?, ?, ?, to_date(?, 'YYYY-MM-DD HH24:MI:SS'), ?, ?, NEXT VALUE FOR TRACKER_ID_SEQ)"); + assertSqlCanBeParsedAndDeparsed( + "INSERT INTO tracker (monitor_id, user_id, module_name, item_id, item_summary, team_id, date_modified, action, visible, id) VALUES (?, ?, ?, ?, ?, ?, to_date(?, 'YYYY-MM-DD HH24:MI:SS'), ?, ?, NEXT VALUE FOR TRACKER_ID_SEQ)"); } @Test public void testNextValIssue773() throws JSQLParserException { - assertSqlCanBeParsedAndDeparsed("INSERT INTO tableA (ID, c1, c2) SELECT hibernate_sequence.nextval, c1, c2 FROM tableB"); + assertSqlCanBeParsedAndDeparsed( + "INSERT INTO tableA (ID, c1, c2) SELECT hibernate_sequence.nextval, c1, c2 FROM tableB"); } @Test public void testBackslashEscapingIssue827() throws JSQLParserException { - assertSqlCanBeParsedAndDeparsed("INSERT INTO my_table (my_column_1, my_column_2) VALUES ('my_value_1\\\\', 'my_value_2')"); + assertSqlCanBeParsedAndDeparsed( + "INSERT INTO my_table (my_column_1, my_column_2) VALUES ('my_value_1\\\\', 'my_value_2')"); } @Test public void testDisableKeywordIssue945() throws JSQLParserException { - assertSqlCanBeParsedAndDeparsed("INSERT INTO SOMESCHEMA.TEST (DISABLE, TESTCOLUMN) VALUES (1, 1)"); + assertSqlCanBeParsedAndDeparsed( + "INSERT INTO SOMESCHEMA.TEST (DISABLE, TESTCOLUMN) VALUES (1, 1)"); } @Test public void testWithListIssue282() throws JSQLParserException { - assertSqlCanBeParsedAndDeparsed("WITH myctl AS (SELECT a, b FROM mytable) INSERT INTO mytable SELECT a, b FROM myctl"); + assertSqlCanBeParsedAndDeparsed( + "WITH myctl AS (SELECT a, b FROM mytable) INSERT INTO mytable SELECT a, b FROM myctl"); } @Test public void testOracleHint() throws JSQLParserException { - assertOracleHintExists("INSERT /*+ SOMEHINT */ INTO mytable VALUES (1, 2, 3)", true, "SOMEHINT"); + assertOracleHintExists("INSERT /*+ SOMEHINT */ INTO mytable VALUES (1, 2, 3)", true, + "SOMEHINT"); - //@todo: add a testcase supposed to not finding a misplaced hint + // @todo: add a testcase supposed to not finding a misplaced hint } @Test public void testInsertTableArrays4() throws JSQLParserException { - assertSqlCanBeParsedAndDeparsed( - "INSERT INTO sal_emp\n" - + " VALUES ('Carol',\n" + assertSqlCanBeParsedAndDeparsed("INSERT INTO sal_emp\n" + " VALUES ('Carol',\n" + " ARRAY[20000, 25000, 25000, 25000],\n" - + " ARRAY[['breakfast', 'consulting'], ['meeting', 'lunch']])", - true); + + " ARRAY[['breakfast', 'consulting'], ['meeting', 'lunch']])", true); } - + @Test public void testKeywordDefaultIssue1470() throws JSQLParserException { - assertSqlCanBeParsedAndDeparsed("INSERT INTO mytable (col1, col2, col3) VALUES (?, 'sadfsd', default)"); + assertSqlCanBeParsedAndDeparsed( + "INSERT INTO mytable (col1, col2, col3) VALUES (?, 'sadfsd', default)"); } @Test public void testInsertUnionSelectIssue1491() throws JSQLParserException { - assertSqlCanBeParsedAndDeparsed( - "insert into table1 (tf1,tf2,tf2)\n" + - "select sf1,sf2,sf3 from s1\n" + - "union\n" + - "select rf1,rf2,rf2 from r1\n" - , true - ); + assertSqlCanBeParsedAndDeparsed("insert into table1 (tf1,tf2,tf2)\n" + + "select sf1,sf2,sf3 from s1\n" + "union\n" + "select rf1,rf2,rf2 from r1\n", + true); - assertSqlCanBeParsedAndDeparsed( - "insert into table1 (tf1,tf2,tf2)\n" + - "( select sf1,sf2,sf3 from s1\n" + - "union\n" + - "select rf1,rf2,rf2 from r1\n)" - , true - ); + assertSqlCanBeParsedAndDeparsed("insert into table1 (tf1,tf2,tf2)\n" + + "( select sf1,sf2,sf3 from s1\n" + "union\n" + "select rf1,rf2,rf2 from r1\n)", + true); - assertSqlCanBeParsedAndDeparsed( - "insert into table1 (tf1,tf2,tf2)\n" + - "(select sf1,sf2,sf3 from s1)" + - "union " + - "(select rf1,rf2,rf2 from r1)" - , true - ); + assertSqlCanBeParsedAndDeparsed("insert into table1 (tf1,tf2,tf2)\n" + + "(select sf1,sf2,sf3 from s1)" + "union " + "(select rf1,rf2,rf2 from r1)", true); - assertSqlCanBeParsedAndDeparsed( - "insert into table1 (tf1,tf2,tf2)\n" + - "((select sf1,sf2,sf3 from s1)" + - "union " + - "(select rf1,rf2,rf2 from r1))" - , true - ); + assertSqlCanBeParsedAndDeparsed("insert into table1 (tf1,tf2,tf2)\n" + + "((select sf1,sf2,sf3 from s1)" + "union " + "(select rf1,rf2,rf2 from r1))", + true); - assertSqlCanBeParsedAndDeparsed( - "(with a as (select * from dual) select * from a)" - , true - ); + assertSqlCanBeParsedAndDeparsed("(with a as (select * from dual) select * from a)", true); } @Test public void testInsertOutputClause() throws JSQLParserException { assertSqlCanBeParsedAndDeparsed( - "INSERT INTO dbo.EmployeeSales (LastName, FirstName, CurrentSales) \n" + - " OUTPUT INSERTED.EmployeeID,\n" + - " INSERTED.LastName, \n" + - " INSERTED.FirstName, \n" + - " INSERTED.CurrentSales,\n" + - " INSERTED.ProjectedSales\n" + - " INTO @MyTableVar \n" + - " SELECT c.LastName, c.FirstName, sp.SalesYTD \n" + - " FROM Sales.SalesPerson AS sp \n" + - " INNER JOIN Person.Person AS c \n" + - " ON sp.BusinessEntityID = c.BusinessEntityID \n" + - " WHERE sp.BusinessEntityID LIKE '2%' \n" + - " ORDER BY c.LastName, c.FirstName" - , true - ); + "INSERT INTO dbo.EmployeeSales (LastName, FirstName, CurrentSales) \n" + + " OUTPUT INSERTED.EmployeeID,\n" + " INSERTED.LastName, \n" + + " INSERTED.FirstName, \n" + " INSERTED.CurrentSales,\n" + + " INSERTED.ProjectedSales\n" + " INTO @MyTableVar \n" + + " SELECT c.LastName, c.FirstName, sp.SalesYTD \n" + + " FROM Sales.SalesPerson AS sp \n" + + " INNER JOIN Person.Person AS c \n" + + " ON sp.BusinessEntityID = c.BusinessEntityID \n" + + " WHERE sp.BusinessEntityID LIKE '2%' \n" + + " ORDER BY c.LastName, c.FirstName", + true); } // Samples taken from: https://www.postgresql.org/docs/current/sql-insert.html @Test public void testInsertOnConflictIssue1551() throws JSQLParserException { + assertSqlCanBeParsedAndDeparsed("INSERT INTO distributors (did, dname)\n" + + " VALUES (5, 'Gizmo Transglobal'), (6, 'Associated Computing, Inc')\n" + + " ON CONFLICT (did) DO UPDATE SET dname = EXCLUDED.dname\n", true); assertSqlCanBeParsedAndDeparsed( - "INSERT INTO distributors (did, dname)\n" + - " VALUES (5, 'Gizmo Transglobal'), (6, 'Associated Computing, Inc')\n" + - " ON CONFLICT (did) DO UPDATE SET dname = EXCLUDED.dname\n" - , true - ); - assertSqlCanBeParsedAndDeparsed( - "INSERT INTO distributors (did, dname) VALUES (7, 'Redline GmbH')\n" + - " ON CONFLICT (did) DO NOTHING" - , true - ); + "INSERT INTO distributors (did, dname) VALUES (7, 'Redline GmbH')\n" + + " ON CONFLICT (did) DO NOTHING", + true); assertSqlCanBeParsedAndDeparsed( - "-- Don't update existing distributors based in a certain ZIP code\n" + - "INSERT INTO distributors AS d (did, dname) VALUES (8, 'Anvil Distribution')\n" + - " ON CONFLICT (did) DO UPDATE\n" + - " SET dname = EXCLUDED.dname || ' (formerly ' || d.dname || ')'\n" + - " WHERE d.zipcode <> '21201'" - , true - ); + "-- Don't update existing distributors based in a certain ZIP code\n" + + "INSERT INTO distributors AS d (did, dname) VALUES (8, 'Anvil Distribution')\n" + + " ON CONFLICT (did) DO UPDATE\n" + + " SET dname = EXCLUDED.dname || ' (formerly ' || d.dname || ')'\n" + + " WHERE d.zipcode <> '21201'", + true); assertSqlCanBeParsedAndDeparsed( - "-- Name a constraint directly in the statement (uses associated\n" + - "-- index to arbitrate taking the DO NOTHING action)\n" + - "INSERT INTO distributors (did, dname) VALUES (9, 'Antwerp Design')\n" + - " ON CONFLICT ON CONSTRAINT distributors_pkey DO NOTHING" - , true - ); + "-- Name a constraint directly in the statement (uses associated\n" + + "-- index to arbitrate taking the DO NOTHING action)\n" + + "INSERT INTO distributors (did, dname) VALUES (9, 'Antwerp Design')\n" + + " ON CONFLICT ON CONSTRAINT distributors_pkey DO NOTHING", + true); assertSqlCanBeParsedAndDeparsed( - "-- This statement could infer a partial unique index on \"did\"\n" + - "-- with a predicate of \"WHERE is_active\", but it could also\n" + - "-- just use a regular unique constraint on \"did\"\n" + - "INSERT INTO distributors (did, dname) VALUES (10, 'Conrad International')\n" + - " ON CONFLICT (did) WHERE is_active DO NOTHING" - , true - ); + "-- This statement could infer a partial unique index on \"did\"\n" + + "-- with a predicate of \"WHERE is_active\", but it could also\n" + + "-- just use a regular unique constraint on \"did\"\n" + + "INSERT INTO distributors (did, dname) VALUES (10, 'Conrad International')\n" + + " ON CONFLICT (did) WHERE is_active DO NOTHING", + true); } @Test public void insertOnConflictObjectsTest() throws JSQLParserException { - String sqlStr = - "WITH a ( a, b , c ) \n" + - "AS (SELECT 1 , 2 , 3 )\n" + - "insert into test\n" + - "select * from a"; - Insert insert = (Insert) CCJSqlParserUtil.parse( sqlStr ); + String sqlStr = "WITH a ( a, b , c ) \n" + "AS (SELECT 1 , 2 , 3 )\n" + + "insert into test\n" + "select * from a"; + Insert insert = (Insert) CCJSqlParserUtil.parse(sqlStr); Expression whereExpression = CCJSqlParserUtil.parseExpression("a=1", false); Expression valueExpression = CCJSqlParserUtil.parseExpression("b/2", false); @@ -533,35 +529,60 @@ public void insertOnConflictObjectsTest() throws JSQLParserException { InsertConflictTarget conflictTarget = new InsertConflictTarget("a", null, null, null); insert.setConflictTarget(conflictTarget); - InsertConflictAction conflictAction = new InsertConflictAction(ConflictActionType.DO_NOTHING); + InsertConflictAction conflictAction = + new InsertConflictAction(ConflictActionType.DO_NOTHING); insert.setConflictAction(conflictAction); - assertStatementCanBeDeparsedAs(insert, sqlStr + " ON CONFLICT " + conflictTarget.toString() + conflictAction.toString(), true); + assertStatementCanBeDeparsedAs(insert, + sqlStr + " ON CONFLICT " + conflictTarget + conflictAction, true); - conflictTarget = new InsertConflictTarget(null, null, null, "testConstraint"); + conflictTarget = new InsertConflictTarget((String) null, null, null, "testConstraint"); conflictTarget = conflictTarget.withWhereExpression(whereExpression); assertNotNull(conflictTarget.withConstraintName("a").getConstraintName()); conflictTarget.setIndexExpression(valueExpression); assertNotNull(conflictTarget.getIndexExpression()); assertNotNull(conflictTarget.withIndexColumnName("b").getIndexColumnName()); - assertNull(conflictTarget.withIndexExpression(valueExpression).getIndexColumnName()); + assertTrue(conflictTarget.withIndexExpression(valueExpression).getIndexColumnNames() + .isEmpty()); assertNotNull(conflictTarget.withWhereExpression(whereExpression).getWhereExpression()); conflictAction = new InsertConflictAction(ConflictActionType.DO_UPDATE); conflictAction.addUpdateSet(new Column().withColumnName("a"), valueExpression); - UpdateSet updateSet=new UpdateSet(); + UpdateSet updateSet = new UpdateSet(); updateSet.add(new Column().withColumnName("b")); updateSet.add(valueExpression); - conflictAction=conflictAction.addUpdateSet(updateSet); + conflictAction = conflictAction.addUpdateSet(updateSet); - assertNotNull( conflictAction.withWhereExpression(whereExpression).getWhereExpression() ); + assertNotNull(conflictAction.withWhereExpression(whereExpression).getWhereExpression()); assertEquals(ConflictActionType.DO_UPDATE, conflictAction.getConflictActionType()); insert = insert.withConflictTarget(conflictTarget).withConflictAction(conflictAction); - assertStatementCanBeDeparsedAs(insert, sqlStr + " ON CONFLICT " + conflictTarget.toString() + conflictAction.toString(), true); + assertStatementCanBeDeparsedAs(insert, + sqlStr + " ON CONFLICT " + conflictTarget + conflictAction, true); } + + @Test + void testMultiColumnConflictTargetIssue1749() throws JSQLParserException { + String sqlStr = + "INSERT INTO re_rule_mapping ( id, created_time, last_modified_time, rule_item_id, department_id, scene, operation )\n" + + " VALUES\n" + + " ( '1', now( ), now( ), '1', '11', 'test', 'stop7' ),\n" + + " ( '2', now( ), now( ), '2', '22', 'test2', 'stop8' ) ON CONFLICT ( rule_item_id, department_id, scene ) \n" + + " DO UPDATE\n" + + " SET operation = excluded.operation"; + assertSqlCanBeParsedAndDeparsed(sqlStr, true); + } + + @Test + void testMultiColumnConflictTargetIssue955() throws JSQLParserException { + String sqlStr = + "INSERT INTO tableName (id,xxx0,xxx1,xxx2,is_deleted,create_time,update_time) " + + "VALUES (?, ?, ?, ?, ?, ?, ?) " + + "on conflict(xxx0, xxx1) do update set xxx1=?, update_time=?"; + assertSqlCanBeParsedAndDeparsed(sqlStr, true); + } } diff --git a/src/test/java/net/sf/jsqlparser/statement/select/FetchTest.java b/src/test/java/net/sf/jsqlparser/statement/select/FetchTest.java index 342431c1b..c0e94f42b 100644 --- a/src/test/java/net/sf/jsqlparser/statement/select/FetchTest.java +++ b/src/test/java/net/sf/jsqlparser/statement/select/FetchTest.java @@ -1,3 +1,12 @@ +/*- + * #%L + * JSQLParser library + * %% + * Copyright (C) 2004 - 2023 JSQLParser + * %% + * Dual licensed under GNU LGPL 2.1 or Apache License 2.0 + * #L% + */ package net.sf.jsqlparser.statement.select; import net.sf.jsqlparser.*; diff --git a/src/test/java/net/sf/jsqlparser/statement/select/PostgresTest.java b/src/test/java/net/sf/jsqlparser/statement/select/PostgresTest.java index 0751a5369..86acdaffc 100644 --- a/src/test/java/net/sf/jsqlparser/statement/select/PostgresTest.java +++ b/src/test/java/net/sf/jsqlparser/statement/select/PostgresTest.java @@ -30,27 +30,33 @@ public void testExtractFunction() throws JSQLParserException { @Test public void testExtractFunctionIssue1582() throws JSQLParserException { - String sqlStr = "" + - "select\n" + - " t0.operatienr\n" + - " , case\n" + - " when\n" + - " case when (t0.vc_begintijd_operatie is null or lpad((extract('hours' from t0.vc_begintijd_operatie::timestamp))::text,2,'0') ||':'|| lpad(extract('minutes' from t0.vc_begintijd_operatie::timestamp)::text,2,'0') = '00:00') then null\n" + - " else (greatest(((extract('hours' from (t0.vc_eindtijd_operatie::timestamp-t0.vc_begintijd_operatie::timestamp))*60 + extract('minutes' from (t0.vc_eindtijd_operatie::timestamp-t0.vc_begintijd_operatie::timestamp)))/60)::numeric(12,2),0))*60\n" + - " end = 0 then null\n" + - " else '25. Meer dan 4 uur'\n" + - " end \n" + - " as snijtijd_interval"; + String sqlStr = "" + "select\n" + " t0.operatienr\n" + " , case\n" + + " when\n" + + " case when (t0.vc_begintijd_operatie is null or lpad((extract('hours' from t0.vc_begintijd_operatie::timestamp))::text,2,'0') ||':'|| lpad(extract('minutes' from t0.vc_begintijd_operatie::timestamp)::text,2,'0') = '00:00') then null\n" + + " else (greatest(((extract('hours' from (t0.vc_eindtijd_operatie::timestamp-t0.vc_begintijd_operatie::timestamp))*60 + extract('minutes' from (t0.vc_eindtijd_operatie::timestamp-t0.vc_begintijd_operatie::timestamp)))/60)::numeric(12,2),0))*60\n" + + " end = 0 then null\n" + + " else '25. Meer dan 4 uur'\n" + + " end \n" + + " as snijtijd_interval"; TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true); } @Test public void testJSonExpressionIssue1696() throws JSQLParserException { - String sqlStr="SELECT '{\"key\": \"value\"}'::json -> 'key' AS X"; + String sqlStr = "SELECT '{\"key\": \"value\"}'::json -> 'key' AS X"; Select select = (Select) TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true); PlainSelect plainSelect = (PlainSelect) select.getSelectBody(); - SelectExpressionItem selectExpressionItem = (SelectExpressionItem) plainSelect.getSelectItems().get(0); - Assertions.assertEquals("'key'", selectExpressionItem.getExpression(JsonExpression.class).getIdents().get(0)); + SelectExpressionItem selectExpressionItem = + (SelectExpressionItem) plainSelect.getSelectItems().get(0); + Assertions.assertEquals("'key'", + selectExpressionItem.getExpression(JsonExpression.class).getIdents().get(0)); + } + + @Test + public void testJSonOperatorIssue1571() throws JSQLParserException { + String sqlStr = + "select visit_hour,json_array_elements(into_sex_json)->>'name',json_array_elements(into_sex_json)->>'value' from period_market"; + TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true); } } diff --git a/src/test/java/net/sf/jsqlparser/test/UnicodeTest.java b/src/test/java/net/sf/jsqlparser/test/UnicodeTest.java index 436e593d6..744b1ac5a 100644 --- a/src/test/java/net/sf/jsqlparser/test/UnicodeTest.java +++ b/src/test/java/net/sf/jsqlparser/test/UnicodeTest.java @@ -1,3 +1,12 @@ +/*- + * #%L + * JSQLParser library + * %% + * Copyright (C) 2004 - 2023 JSQLParser + * %% + * Dual licensed under GNU LGPL 2.1 or Apache License 2.0 + * #L% + */ package net.sf.jsqlparser.test; import net.sf.jsqlparser.*; @@ -14,4 +23,11 @@ void testCJKSetIssue1741() throws JSQLParserException { TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true); } + + @Test + void testCJKSetIssue1747() throws JSQLParserException { + String sqlStr = "SELECT 가 FROM 나"; + TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true); + + } }