Repository: s3team/Squirrel Branch: master Commit: 96810fd96cfb Files: 340 Total size: 3.8 MB Directory structure: gitextract_60nog_yi/ ├── .clang-format ├── .clang-tidy ├── .devcontainer/ │ ├── Dockerfile │ ├── devcontainer.json │ └── reinstall-cmake.sh ├── .github/ │ ├── linters/ │ │ └── .hadolint.yaml │ └── workflows/ │ ├── build.yml │ ├── code-format.yml_bak │ ├── docker-image.yml │ ├── lint.yml │ └── stale.yml ├── .gitignore ├── .gitmodules ├── .vscode/ │ ├── c_cpp_properties.json │ └── settings.json ├── CMakeLists.txt ├── CODEOWNERS ├── LICENSE ├── README.md ├── data/ │ ├── config_mariadb.yml │ ├── config_mysql.yml │ ├── config_postgresql.yml │ ├── config_sqlite.yml │ ├── fuzz_root/ │ │ ├── global_data_lib_mysql │ │ ├── global_data_lib_pqsql │ │ ├── init_lib/ │ │ │ ├── 1.txt │ │ │ ├── 10.txt │ │ │ ├── 11.txt │ │ │ ├── 12.txt │ │ │ ├── 13.txt │ │ │ ├── 14.txt │ │ │ ├── 15.txt │ │ │ ├── 16.txt │ │ │ ├── 17.txt │ │ │ ├── 18.txt │ │ │ ├── 19.txt │ │ │ ├── 2.txt │ │ │ ├── 20.txt │ │ │ ├── 21.txt │ │ │ ├── 3.txt │ │ │ ├── 4.txt │ │ │ ├── 5.txt │ │ │ ├── 6.txt │ │ │ ├── 7.txt │ │ │ ├── 8.txt │ │ │ ├── 9.txt │ │ │ ├── new_code │ │ │ └── sqltest │ │ ├── input/ │ │ │ ├── 1.txt │ │ │ ├── 10.txt │ │ │ ├── 11.txt │ │ │ ├── 12.txt │ │ │ ├── 13.txt │ │ │ ├── 14.txt │ │ │ ├── 15.txt │ │ │ ├── 16.txt │ │ │ ├── 17.txt │ │ │ ├── 18.txt │ │ │ ├── 19.txt │ │ │ ├── 2.txt │ │ │ ├── 20.txt │ │ │ ├── 21.txt │ │ │ ├── 22.txt │ │ │ ├── 23.txt │ │ │ ├── 24.txt │ │ │ ├── 25.txt │ │ │ ├── 26.txt │ │ │ ├── 3.txt │ │ │ ├── 4.txt │ │ │ ├── 5.txt │ │ │ ├── 6.txt │ │ │ ├── 7.txt │ │ │ ├── 8.txt │ │ │ ├── 9.txt │ │ │ ├── new1.txt │ │ │ ├── new2.txt │ │ │ ├── new3.txt │ │ │ └── new4.txt │ │ ├── mysql_init_lib/ │ │ │ ├── 1 │ │ │ ├── 10 │ │ │ ├── 100 │ │ │ ├── 1000 │ │ │ ├── 1001 │ │ │ ├── 1002 │ │ │ ├── 1003 │ │ │ ├── 1004 │ │ │ ├── 1005 │ │ │ ├── 1006 │ │ │ ├── 1007 │ │ │ ├── 1008 │ │ │ ├── 1009 │ │ │ ├── 101 │ │ │ ├── 1010 │ │ │ ├── 1011 │ │ │ ├── 1012 │ │ │ ├── 1013 │ │ │ ├── 1014 │ │ │ ├── 1015 │ │ │ ├── 1016 │ │ │ ├── 1017 │ │ │ ├── 1018 │ │ │ ├── 1019 │ │ │ ├── 102 │ │ │ ├── 1020 │ │ │ ├── 1021 │ │ │ ├── 1022 │ │ │ ├── 1023 │ │ │ ├── 1024 │ │ │ ├── 1025 │ │ │ ├── 103 │ │ │ ├── 104 │ │ │ ├── 105 │ │ │ ├── 106 │ │ │ ├── 107 │ │ │ ├── 108 │ │ │ ├── 109 │ │ │ ├── 11 │ │ │ ├── 110 │ │ │ ├── 111 │ │ │ ├── 112 │ │ │ ├── 113 │ │ │ ├── 114 │ │ │ ├── 115 │ │ │ ├── 116 │ │ │ ├── 117 │ │ │ ├── 118 │ │ │ ├── 119 │ │ │ ├── 12 │ │ │ ├── 120 │ │ │ ├── 121 │ │ │ ├── 122 │ │ │ ├── 123 │ │ │ ├── 124 │ │ │ ├── 125 │ │ │ ├── 126 │ │ │ ├── 127 │ │ │ ├── 128 │ │ │ ├── 129 │ │ │ ├── 13 │ │ │ ├── 130 │ │ │ ├── 131 │ │ │ ├── 132 │ │ │ ├── 133 │ │ │ ├── 134 │ │ │ ├── 135 │ │ │ ├── 136 │ │ │ ├── 137 │ │ │ ├── 138 │ │ │ ├── 139 │ │ │ ├── 14 │ │ │ ├── 140 │ │ │ ├── 141 │ │ │ ├── 142 │ │ │ ├── 143 │ │ │ ├── 144 │ │ │ ├── 145 │ │ │ ├── 146 │ │ │ ├── 147 │ │ │ ├── 148 │ │ │ ├── 149 │ │ │ ├── 15 │ │ │ ├── 150 │ │ │ ├── 151 │ │ │ ├── 152 │ │ │ ├── 153 │ │ │ ├── 154 │ │ │ ├── 155 │ │ │ ├── 156 │ │ │ ├── 157 │ │ │ ├── 158 │ │ │ ├── 159 │ │ │ ├── 16 │ │ │ ├── 160 │ │ │ ├── 161 │ │ │ ├── 162 │ │ │ ├── 163 │ │ │ ├── 164 │ │ │ ├── 165 │ │ │ ├── 166 │ │ │ ├── 167 │ │ │ ├── 168 │ │ │ ├── 169 │ │ │ ├── 17 │ │ │ ├── 170 │ │ │ ├── 171 │ │ │ ├── 172 │ │ │ ├── 173 │ │ │ ├── 174 │ │ │ ├── 175 │ │ │ ├── 176 │ │ │ ├── 177 │ │ │ ├── 178 │ │ │ ├── 179 │ │ │ ├── 18 │ │ │ ├── 180 │ │ │ ├── 181 │ │ │ ├── 182 │ │ │ ├── 183 │ │ │ ├── 184 │ │ │ ├── 185 │ │ │ ├── 186 │ │ │ ├── 187 │ │ │ ├── 188 │ │ │ ├── 189 │ │ │ ├── 19 │ │ │ ├── 190 │ │ │ ├── 191 │ │ │ ├── 192 │ │ │ ├── 193 │ │ │ ├── 194 │ │ │ ├── 195 │ │ │ ├── 196 │ │ │ ├── 197 │ │ │ ├── 198 │ │ │ ├── 199 │ │ │ ├── strip_mysql │ │ │ └── strip_trigger_collect │ │ ├── mysql_input/ │ │ │ ├── 2.txt │ │ │ ├── 3.txt │ │ │ ├── 4.txt │ │ │ ├── 5.txt │ │ │ ├── 6.txt │ │ │ ├── 7.txt │ │ │ ├── 8.txt │ │ │ ├── new │ │ │ └── z.txt │ │ ├── pqsql_init_lib/ │ │ │ ├── 1 │ │ │ ├── 1.txt │ │ │ ├── 2 │ │ │ ├── 2.txt │ │ │ ├── 3 │ │ │ ├── 3.txt │ │ │ ├── 4 │ │ │ ├── 4.txt │ │ │ ├── 5 │ │ │ ├── 5.txt │ │ │ ├── 6.txt │ │ │ ├── 7.txt │ │ │ ├── 8.txt │ │ │ ├── init │ │ │ ├── x1 │ │ │ └── x3 │ │ ├── pqsql_input/ │ │ │ ├── cs_is │ │ │ ├── cs_ss │ │ │ ├── ct_ci_in_drop │ │ │ ├── ct_ci_ri │ │ │ ├── ct_cv_in_sel │ │ │ ├── ct_cv_is │ │ │ ├── ct_cv_ss │ │ │ ├── ct_in_alter_select │ │ │ ├── ct_ins_drop │ │ │ ├── ct_is_ss │ │ │ ├── ct_is_up │ │ │ ├── ct_rn_is │ │ │ ├── ct_ss_ds │ │ │ ├── ct_st_re │ │ │ ├── ct_st_union │ │ │ └── trigger │ │ └── pragma │ └── run.sh ├── lint.cmake ├── scripts/ │ ├── .gitignore │ ├── .pylintrc │ ├── dockers/ │ │ ├── mariadb/ │ │ │ └── Dockerfile │ │ ├── mysql/ │ │ │ └── Dockerfile │ │ ├── postgresql/ │ │ │ └── Dockerfile │ │ └── sqlite/ │ │ └── Dockerfile │ ├── noxfile.py │ ├── pyproject.toml │ └── utils/ │ └── run.py ├── srcs/ │ ├── custom_mutator.cc │ ├── db.h │ ├── db_driver.cc │ ├── db_factory.cc │ ├── env.h │ ├── internal/ │ │ ├── client/ │ │ │ ├── client.cc │ │ │ ├── client.h │ │ │ ├── client_mysql.cc │ │ │ ├── client_mysql.h │ │ │ ├── client_postgresql.cc │ │ │ ├── client_postgresql.h │ │ │ └── test_client.cc │ │ ├── mysql/ │ │ │ ├── include/ │ │ │ │ ├── ast.h │ │ │ │ ├── define.h │ │ │ │ ├── mutator.h │ │ │ │ └── utils.h │ │ │ ├── mysql.cc │ │ │ ├── mysql.h │ │ │ ├── parser/ │ │ │ │ ├── Makefile │ │ │ │ ├── bison.y │ │ │ │ ├── bison_parser.cpp │ │ │ │ ├── bison_parser.h │ │ │ │ ├── bison_parser.output │ │ │ │ ├── flex.l │ │ │ │ ├── flex_lexer.cpp │ │ │ │ ├── flex_lexer.h │ │ │ │ └── parser_typedef.h │ │ │ └── srcs/ │ │ │ ├── ast.cpp │ │ │ ├── mutator.cpp │ │ │ └── utils.cpp │ │ ├── postgresql/ │ │ │ ├── include/ │ │ │ │ ├── ast.h │ │ │ │ ├── define.h │ │ │ │ ├── mutator.h │ │ │ │ └── utils.h │ │ │ ├── parser/ │ │ │ │ ├── Makefile │ │ │ │ ├── bison.y │ │ │ │ ├── bison_parser.cpp │ │ │ │ ├── bison_parser.h │ │ │ │ ├── bison_parser.output │ │ │ │ ├── flex.l │ │ │ │ ├── flex_lexer.cpp │ │ │ │ ├── flex_lexer.h │ │ │ │ └── parser_typedef.h │ │ │ ├── postgresql.cc │ │ │ ├── postgresql.h │ │ │ └── srcs/ │ │ │ ├── ast.cpp │ │ │ ├── mutator.cpp │ │ │ └── utils.cpp │ │ └── sqlite/ │ │ ├── include/ │ │ │ ├── ast.h │ │ │ ├── define.h │ │ │ ├── mutator.h │ │ │ └── utils.h │ │ ├── parser/ │ │ │ ├── Makefile │ │ │ ├── bison_parser.cpp │ │ │ ├── bison_parser.h │ │ │ ├── bison_parser.output │ │ │ ├── bison_parser.y │ │ │ ├── flex_lexer.cpp │ │ │ ├── flex_lexer.h │ │ │ ├── flex_lexer.l │ │ │ └── parser_typedef.h │ │ ├── sqlite.cc │ │ ├── sqlite.h │ │ └── srcs/ │ │ ├── ast.cpp │ │ ├── mutator.cpp │ │ └── utils.cpp │ └── utils/ │ ├── config_validate.cc │ └── config_validate.h └── tests/ ├── CMakeLists.txt └── db_config_test.cc ================================================ FILE CONTENTS ================================================ ================================================ FILE: .clang-format ================================================ --- Language: Cpp # BasedOnStyle: Google AccessModifierOffset: -1 AlignAfterOpenBracket: Align AlignArrayOfStructures: None AlignConsecutiveMacros: None AlignConsecutiveAssignments: None AlignConsecutiveBitFields: None AlignConsecutiveDeclarations: None AlignEscapedNewlines: Left AlignOperands: Align AlignTrailingComments: true AllowAllArgumentsOnNextLine: true AllowAllParametersOfDeclarationOnNextLine: true AllowShortEnumsOnASingleLine: true AllowShortBlocksOnASingleLine: Never AllowShortCaseLabelsOnASingleLine: false AllowShortFunctionsOnASingleLine: All AllowShortLambdasOnASingleLine: All AllowShortIfStatementsOnASingleLine: WithoutElse AllowShortLoopsOnASingleLine: true AlwaysBreakAfterDefinitionReturnType: None AlwaysBreakAfterReturnType: None AlwaysBreakBeforeMultilineStrings: true AlwaysBreakTemplateDeclarations: Yes AttributeMacros: - __capability BinPackArguments: true BinPackParameters: true BraceWrapping: AfterCaseLabel: false AfterClass: false AfterControlStatement: Never AfterEnum: false AfterFunction: false AfterNamespace: false AfterObjCDeclaration: false AfterStruct: false AfterUnion: false AfterExternBlock: false BeforeCatch: false BeforeElse: false BeforeLambdaBody: false BeforeWhile: false IndentBraces: false SplitEmptyFunction: true SplitEmptyRecord: true SplitEmptyNamespace: true BreakBeforeBinaryOperators: None BreakBeforeConceptDeclarations: true BreakBeforeBraces: Attach BreakBeforeInheritanceComma: false BreakInheritanceList: BeforeColon BreakBeforeTernaryOperators: true BreakConstructorInitializersBeforeComma: false BreakConstructorInitializers: BeforeColon BreakAfterJavaFieldAnnotations: false BreakStringLiterals: true ColumnLimit: 80 CommentPragmas: '^ IWYU pragma:' QualifierAlignment: Leave CompactNamespaces: false ConstructorInitializerIndentWidth: 4 ContinuationIndentWidth: 4 Cpp11BracedListStyle: true DeriveLineEnding: true DerivePointerAlignment: true DisableFormat: false EmptyLineAfterAccessModifier: Never EmptyLineBeforeAccessModifier: LogicalBlock ExperimentalAutoDetectBinPacking: false PackConstructorInitializers: NextLine BasedOnStyle: '' ConstructorInitializerAllOnOneLineOrOnePerLine: false AllowAllConstructorInitializersOnNextLine: true FixNamespaceComments: true ForEachMacros: - foreach - Q_FOREACH - BOOST_FOREACH IfMacros: - KJ_IF_MAYBE IncludeBlocks: Regroup IncludeCategories: - Regex: '^' Priority: 2 SortPriority: 0 CaseSensitive: false - Regex: '^<.*\.h>' Priority: 1 SortPriority: 0 CaseSensitive: false - Regex: '^<.*' Priority: 2 SortPriority: 0 CaseSensitive: false - Regex: '.*' Priority: 3 SortPriority: 0 CaseSensitive: false IncludeIsMainRegex: '([-_](test|unittest))?$' IncludeIsMainSourceRegex: '' IndentAccessModifiers: false IndentCaseLabels: true IndentCaseBlocks: false IndentGotoLabels: true IndentPPDirectives: None IndentExternBlock: AfterExternBlock IndentRequires: false IndentWidth: 2 IndentWrappedFunctionNames: false InsertTrailingCommas: None JavaScriptQuotes: Leave JavaScriptWrapImports: true KeepEmptyLinesAtTheStartOfBlocks: false LambdaBodyIndentation: Signature MacroBlockBegin: '' MacroBlockEnd: '' MaxEmptyLinesToKeep: 1 NamespaceIndentation: None ObjCBinPackProtocolList: Never ObjCBlockIndentWidth: 2 ObjCBreakBeforeNestedBlockParam: true ObjCSpaceAfterProperty: false ObjCSpaceBeforeProtocolList: true PenaltyBreakAssignment: 2 PenaltyBreakBeforeFirstCallParameter: 1 PenaltyBreakComment: 300 PenaltyBreakFirstLessLess: 120 PenaltyBreakOpenParenthesis: 0 PenaltyBreakString: 1000 PenaltyBreakTemplateDeclaration: 10 PenaltyExcessCharacter: 1000000 PenaltyReturnTypeOnItsOwnLine: 200 PenaltyIndentedWhitespace: 0 PointerAlignment: Left PPIndentWidth: -1 RawStringFormats: - Language: Cpp Delimiters: - cc - CC - cpp - Cpp - CPP - 'c++' - 'C++' CanonicalDelimiter: '' BasedOnStyle: google - Language: TextProto Delimiters: - pb - PB - proto - PROTO EnclosingFunctions: - EqualsProto - EquivToProto - PARSE_PARTIAL_TEXT_PROTO - PARSE_TEST_PROTO - PARSE_TEXT_PROTO - ParseTextOrDie - ParseTextProtoOrDie - ParseTestProto - ParsePartialTestProto CanonicalDelimiter: pb BasedOnStyle: google ReferenceAlignment: Pointer ReflowComments: true RemoveBracesLLVM: false SeparateDefinitionBlocks: Leave ShortNamespaceLines: 1 #SortIncludes: CaseSensitive SortJavaStaticImport: Before SortUsingDeclarations: true SpaceAfterCStyleCast: false SpaceAfterLogicalNot: false SpaceAfterTemplateKeyword: true SpaceBeforeAssignmentOperators: true SpaceBeforeCaseColon: false SpaceBeforeCpp11BracedList: false SpaceBeforeCtorInitializerColon: true SpaceBeforeInheritanceColon: true SpaceBeforeParens: ControlStatements SpaceBeforeParensOptions: AfterControlStatements: true AfterForeachMacros: true AfterFunctionDefinitionName: false AfterFunctionDeclarationName: false AfterIfMacros: true AfterOverloadedOperator: false BeforeNonEmptyParentheses: false SpaceAroundPointerQualifiers: Default SpaceBeforeRangeBasedForLoopColon: true SpaceInEmptyBlock: false SpaceInEmptyParentheses: false SpacesBeforeTrailingComments: 2 SpacesInAngles: Never SpacesInConditionalStatement: false SpacesInContainerLiterals: true SpacesInCStyleCastParentheses: false SpacesInLineCommentPrefix: Minimum: 1 Maximum: -1 SpacesInParentheses: false SpacesInSquareBrackets: false SpaceBeforeSquareBrackets: false BitFieldColonSpacing: Both Standard: Auto StatementAttributeLikeMacros: - Q_EMIT StatementMacros: - Q_UNUSED - QT_REQUIRE_VERSION TabWidth: 8 UseCRLF: false UseTab: Never WhitespaceSensitiveMacros: - STRINGIZE - PP_STRINGIZE - BOOST_PP_STRINGIZE - NS_SWIFT_NAME - CF_SWIFT_NAME ... ================================================ FILE: .clang-tidy ================================================ --- Checks: 'clang-diagnostic-*,clang-analyzer-*,performance-*,-performance-no-int-to-ptr' WarningsAsErrors: '*' HeaderFilterRegex: '' AnalyzeTemporaryDtors: false FormatStyle: file CheckOptions: - key: llvm-else-after-return.WarnOnConditionVariables value: 'false' - key: modernize-loop-convert.MinConfidence value: reasonable - key: modernize-replace-auto-ptr.IncludeStyle value: llvm - key: cert-str34-c.DiagnoseSignedUnsignedCharComparisons value: 'false' - key: google-readability-namespace-comments.ShortNamespaceLines value: '10' - key: cert-err33-c.CheckedFunctions value: '::aligned_alloc;::asctime_s;::at_quick_exit;::atexit;::bsearch;::bsearch_s;::btowc;::c16rtomb;::c32rtomb;::calloc;::clock;::cnd_broadcast;::cnd_init;::cnd_signal;::cnd_timedwait;::cnd_wait;::ctime_s;::fclose;::fflush;::fgetc;::fgetpos;::fgets;::fgetwc;::fopen;::fopen_s;::fprintf;::fprintf_s;::fputc;::fputs;::fputwc;::fputws;::fread;::freopen;::freopen_s;::fscanf;::fscanf_s;::fseek;::fsetpos;::ftell;::fwprintf;::fwprintf_s;::fwrite;::fwscanf;::fwscanf_s;::getc;::getchar;::getenv;::getenv_s;::gets_s;::getwc;::getwchar;::gmtime;::gmtime_s;::localtime;::localtime_s;::malloc;::mbrtoc16;::mbrtoc32;::mbsrtowcs;::mbsrtowcs_s;::mbstowcs;::mbstowcs_s;::memchr;::mktime;::mtx_init;::mtx_lock;::mtx_timedlock;::mtx_trylock;::mtx_unlock;::printf_s;::putc;::putwc;::raise;::realloc;::remove;::rename;::scanf;::scanf_s;::setlocale;::setvbuf;::signal;::snprintf;::snprintf_s;::sprintf;::sprintf_s;::sscanf;::sscanf_s;::strchr;::strerror_s;::strftime;::strpbrk;::strrchr;::strstr;::strtod;::strtof;::strtoimax;::strtok;::strtok_s;::strtol;::strtold;::strtoll;::strtoul;::strtoull;::strtoumax;::strxfrm;::swprintf;::swprintf_s;::swscanf;::swscanf_s;::thrd_create;::thrd_detach;::thrd_join;::thrd_sleep;::time;::timespec_get;::tmpfile;::tmpfile_s;::tmpnam;::tmpnam_s;::tss_create;::tss_get;::tss_set;::ungetc;::ungetwc;::vfprintf;::vfprintf_s;::vfscanf;::vfscanf_s;::vfwprintf;::vfwprintf_s;::vfwscanf;::vfwscanf_s;::vprintf_s;::vscanf;::vscanf_s;::vsnprintf;::vsnprintf_s;::vsprintf;::vsprintf_s;::vsscanf;::vsscanf_s;::vswprintf;::vswprintf_s;::vswscanf;::vswscanf_s;::vwprintf_s;::vwscanf;::vwscanf_s;::wcrtomb;::wcschr;::wcsftime;::wcspbrk;::wcsrchr;::wcsrtombs;::wcsrtombs_s;::wcsstr;::wcstod;::wcstof;::wcstoimax;::wcstok;::wcstok_s;::wcstol;::wcstold;::wcstoll;::wcstombs;::wcstombs_s;::wcstoul;::wcstoull;::wcstoumax;::wcsxfrm;::wctob;::wctrans;::wctype;::wmemchr;::wprintf_s;::wscanf;::wscanf_s;' - key: cert-oop54-cpp.WarnOnlyIfThisHasSuspiciousField value: 'false' - key: cert-dcl16-c.NewSuffixes value: 'L;LL;LU;LLU' - key: google-readability-braces-around-statements.ShortStatementLines value: '1' - key: cppcoreguidelines-non-private-member-variables-in-classes.IgnoreClassesWithAllMemberVariablesBeingPublic value: 'true' - key: google-readability-namespace-comments.SpacesBeforeComments value: '2' - key: modernize-loop-convert.MaxCopySize value: '16' - key: modernize-pass-by-value.IncludeStyle value: llvm - key: modernize-use-nullptr.NullMacros value: 'NULL' - key: llvm-qualified-auto.AddConstToQualified value: 'false' - key: modernize-loop-convert.NamingStyle value: CamelCase - key: llvm-else-after-return.WarnOnUnfixable value: 'false' - key: google-readability-function-size.StatementThreshold value: '800' ... ================================================ FILE: .devcontainer/Dockerfile ================================================ FROM mcr.microsoft.com/devcontainers/base:jammy ARG REINSTALL_CMAKE_VERSION_FROM_SOURCE="none" # Optionally install the cmake for vcpkg COPY ./reinstall-cmake.sh /tmp/ RUN if [ "${REINSTALL_CMAKE_VERSION_FROM_SOURCE}" != "none" ]; then \ chmod +x /tmp/reinstall-cmake.sh && /tmp/reinstall-cmake.sh ${REINSTALL_CMAKE_VERSION_FROM_SOURCE}; \ fi \ && rm -f /tmp/reinstall-cmake.sh # [Optional] Uncomment this section to install additional vcpkg ports. # RUN su vscode -c "${VCPKG_ROOT}/vcpkg install " # [Optional] Uncomment this section to install additional packages. RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ && apt-get -y install --no-install-recommends libmysqlclient-dev cmake ninja-build clang llvm llvm-dev clangd pkg-config clang-format libpq-dev ================================================ FILE: .devcontainer/devcontainer.json ================================================ // For format details, see https://aka.ms/devcontainer.json. For config options, see the // README at: https://github.com/devcontainers/templates/tree/main/src/ubuntu { "name": "C++", "build": { "dockerfile": "Dockerfile" }, "customizations": { "vscode": { "extensions": [ "xaver.clang-format", "llvm-vs-code-extensions.vscode-clangd", "twxs.cmake", "ms-vscode.cmake-tools" ] } }, // Features to add to the dev container. More info: https://containers.dev/features. // "features": {}, // Use 'forwardPorts' to make a list of ports inside the container available locally. // "forwardPorts": [], // Use 'postCreateCommand' to run commands after the container is created. "postCreateCommand": "git submodule update --init; cmake -G Ninja -S . -B build -DCMAKE_BUILD_TYPE=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS=1" // Configure tool-specific properties. // "customizations": {}, // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root. // "remoteUser": "root" } ================================================ FILE: .devcontainer/reinstall-cmake.sh ================================================ #!/usr/bin/env bash #------------------------------------------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the MIT License. See https://go.microsoft.com/fwlink/?linkid=2090316 for license information. #------------------------------------------------------------------------------------------------------------- # set -e CMAKE_VERSION=${1:-"none"} if [ "${CMAKE_VERSION}" = "none" ]; then echo "No CMake version specified, skipping CMake reinstallation" exit 0 fi # Cleanup temporary directory and associated files when exiting the script. cleanup() { EXIT_CODE=$? set +e if [[ -n "${TMP_DIR}" ]]; then echo "Executing cleanup of tmp files" rm -Rf "${TMP_DIR}" fi exit $EXIT_CODE } trap cleanup EXIT echo "Installing CMake..." apt-get -y purge --auto-remove cmake mkdir -p /opt/cmake architecture=$(dpkg --print-architecture) case "${architecture}" in arm64) ARCH=aarch64 ;; amd64) ARCH=x86_64 ;; *) echo "Unsupported architecture ${architecture}." exit 1 ;; esac CMAKE_BINARY_NAME="cmake-${CMAKE_VERSION}-linux-${ARCH}.sh" CMAKE_CHECKSUM_NAME="cmake-${CMAKE_VERSION}-SHA-256.txt" TMP_DIR=$(mktemp -d -t cmake-XXXXXXXXXX) echo "${TMP_DIR}" cd "${TMP_DIR}" curl -sSL "https://github.com/Kitware/CMake/releases/download/v${CMAKE_VERSION}/${CMAKE_BINARY_NAME}" -O curl -sSL "https://github.com/Kitware/CMake/releases/download/v${CMAKE_VERSION}/${CMAKE_CHECKSUM_NAME}" -O sha256sum -c --ignore-missing "${CMAKE_CHECKSUM_NAME}" sh "${TMP_DIR}/${CMAKE_BINARY_NAME}" --prefix=/opt/cmake --skip-license ln -s /opt/cmake/bin/cmake /usr/local/bin/cmake ================================================ FILE: .github/linters/.hadolint.yaml ================================================ ignored: - DL3004 ================================================ FILE: .github/workflows/build.yml ================================================ name: build on: push: branches: - master paths: - "srcs/**" jobs: linux: runs-on: "${{ matrix.os }}" strategy: matrix: os: [ubuntu-22.04] steps: - name: Setup cmake uses: jwlawson/actions-setup-cmake@v1.13 - uses: actions/checkout@v3 - name: Checkout submodules run: git submodule update --init - name: update run: sudo apt-get update && sudo apt-get upgrade -y - name: install packages run: sudo apt-get install -y -m -f --install-suggests build-essential git libtool libtool-bin automake bison libglib2.0-0 clang llvm-dev libc++-dev findutils libcmocka-dev python3-dev python3-setuptools ninja-build clang-tidy clang-format libyaml-cpp-dev - name: Run cmake run: cmake -S . -B build -DCMAKE_EXPORT_COMPILE_COMMANDS=ON - name: Build run: cmake --build build -j - name: Clang format run: cmake --build build --target formatcheck - name: Clang tidy run: cmake --build build --target lint - name: Tests run: cd build/tests && ctest ================================================ FILE: .github/workflows/code-format.yml_bak ================================================ name: Formatting on: push: branches: - stable - dev pull_request: branches: - dev # No need for stable-pull-request, as that equals dev-push jobs: code-format-check: name: Check code format if: ${{ 'false' == 'true' }} # Disable the job runs-on: ubuntu-22.04 container: docker.io/aflplusplus/aflplusplus:dev steps: - name: Checkout uses: actions/checkout@v3 - name: Format run: | git config --global --add safe.directory /__w/AFLplusplus/AFLplusplus apt-get update apt-get install -y clang-format-${LLVM_VERSION} make code-format - name: Check if code needed formatting run: | git --no-pager -c color.ui=always diff HEAD if ! git diff HEAD --quiet; then echo "[!] Please run 'make code-format' and push its changes." exit 1 fi ================================================ FILE: .github/workflows/docker-image.yml ================================================ name: Build docker on: push: paths: - "scripts/dockers/**" jobs: build: runs-on: ubuntu-latest strategy: matrix: database: ["sqlite", "mariadb", "mysql", "postgresql"] steps: - uses: actions/checkout@v3 - name: "Check file existence" id: check_files uses: andstor/file-existence-action@v2 with: files: "scripts/dockers/${{matrix.database}}/Dockerfile" - name: Get changed files in the docs folder id: changed-files-specific uses: tj-actions/changed-files@v34 with: files: "scripts/dockers/${{matrix.database}}/**" - name: Build the Docker image for each database if: steps.check_files.outputs.files_exists == 'true' && steps.changed-files-specific.outputs.any_changed == 'true' run: docker build . --file Dockerfile working-directory: "scripts/dockers/${{matrix.database}}" ================================================ FILE: .github/workflows/lint.yml ================================================ --- ################################# ################################# ## Super Linter GitHub Actions ## ################################# ################################# name: Lint Code Base ############################# # Start the job on all push # ############################# on: push: branches-ignore: [master, main] # Remove the line above to run when pushing to master #pull_request: #branches: [master, main] ############### # Set the Job # ############### jobs: lint: # Name the Job name: Lint Code Base # Set the agent to run on runs-on: ubuntu-latest ################## # Load all steps # ################## steps: ########################## # Checkout the code base # ########################## - name: Checkout Code uses: actions/checkout@v3 with: # Full git history is needed to get a proper # list of changed files within `super-linter` fetch-depth: 0 ################################ # Run Linter against code base # ################################ - name: Lint Code Base uses: github/super-linter@v4 env: VALIDATE_ALL_CODEBASE: false DEFAULT_BRANCH: master GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} FILTER_REGEX_EXCLUDE: .*data/fuzz_root.* ================================================ FILE: .github/workflows/stale.yml ================================================ name: 'Close stale issues and PRs' on: schedule: - cron: '30 1 * * *' jobs: stale: runs-on: ubuntu-latest steps: - uses: actions/stale@v7 with: stale-issue-message: 'This issue/pr is stale because it has been open 14 days with no activity. Remove stale label or comment or this will be closed in 3 days.' days-before-stale: 14 days-before-close: 3 ================================================ FILE: .gitignore ================================================ build output .cache Testing ================================================ FILE: .gitmodules ================================================ [submodule "AFLplusplus"] path = AFLplusplus url = https://github.com/AFLplusplus/AFLplusplus.git [submodule "third_party/abseil-cpp"] path = third_party/abseil-cpp url = https://github.com/abseil/abseil-cpp.git ================================================ FILE: .vscode/c_cpp_properties.json ================================================ { "configurations": [ { "name": "Linux", "includePath": [ "${workspaceFolder}/**" ], "defines": [], "compilerPath": "/usr/bin/clang", "cStandard": "c17", "cppStandard": "c++14", "intelliSenseMode": "linux-clang-x64", "configurationProvider": "ms-vscode.cmake-tools" } ], "version": 4 } ================================================ FILE: .vscode/settings.json ================================================ { "clang-format.fallbackStyle": "Google", "editor.formatOnSave": false, "editor.formatOnPaste": false } ================================================ FILE: CMakeLists.txt ================================================ cmake_minimum_required(VERSION 3.14) project(Squirrel) set(BUILD_SHARED_LIBS ON) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS} -g -O2 -fsanitize=address") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS} -O3") set(LINK_FLAGS "${LINK_FLAGS} -fsanitize=address") find_package(PkgConfig) option(ALL "Build all types of database" ON) option(SQLITE "Build sqlite" OFF) option(MYSQL "Build mysql" OFF) option(POSTGRESQL "Build postgresql" OFF) if(SQLITE OR MYSQL OR POSTGRESQL) set(ALL OFF) endif() if(ALL) set(SQLITE ON) set(MYSQL ON) set(POSTGRESQL ON) endif() if(SQLITE) list(APPEND DBMS sqlite) endif() if(MYSQL) list(APPEND DBMS mysql) pkg_check_modules(MySQL REQUIRED mysqlclient>=5.7) add_library(mysql_client OBJECT srcs/internal/client/client_mysql.cc) target_include_directories(mysql_client PUBLIC ${MySQL_INCLUDE_DIRS} srcs/internal/client) target_link_libraries(mysql_client PUBLIC ${MySQL_LIBRARIES} ${YAML_CPP_LIBRARIES}) target_compile_options(mysql_client PRIVATE -fPIC) list(APPEND LINK_CLIENT mysql_client) list(APPEND CLIENT_DEFINITION __SQUIRREL_MYSQL__) endif() if(POSTGRESQL) list(APPEND DBMS postgresql) find_package(PostgreSQL REQUIRED) add_library(postgresql_client OBJECT srcs/internal/client/client_postgresql.cc) target_include_directories(postgresql_client PUBLIC ${PostgreSQL_INCLUDE_DIRS} srcs/internal/client) target_link_libraries( postgresql_client PUBLIC ${PostgreSQL_LIBRARIES} ${YAML_CPP_LIBRARIES} absl::strings absl::str_format) target_compile_options(postgresql_client PRIVATE -fPIC) list(APPEND LINK_CLIENT postgresql_client) list(APPEND CLIENT_DEFINITION __SQUIRREL_POSTGRESQL__) endif() include(FetchContent) find_package(yaml-cpp REQUIRED) # FetchContent_Declare( ${YAML_CPP_LIBRARIES} URL # https://github.com/jbeder/${YAML_CPP_LIBRARIES}/archive/refs/tags/${YAML_CPP_LIBRARIES}-0.7.0.zip) # FetchContent_MakeAvailable(${YAML_CPP_LIBRARIES}) include_directories(${YAML_INCLUDE_DIRS}) # set_target_properties(${YAML_CPP_LIBRARIES} PROPERTIES COMPILE_FLAGS "-w") set(ABSL_PROPAGATE_CXX_STD ON) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w") add_subdirectory(third_party/abseil-cpp) string(REPLACE " -w" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") set(AFLPP_DIR ${CMAKE_CURRENT_SOURCE_DIR}/AFLplusplus/include) include_directories(${AFLPP_DIR}) foreach(dbms IN LISTS DBMS) add_library( ${dbms}_impl OBJECT srcs/internal/${dbms}/${dbms}.cc srcs/internal/${dbms}/${dbms}.h srcs/internal/${dbms}/srcs/ast.cpp srcs/internal/${dbms}/srcs/mutator.cpp srcs/internal/${dbms}/srcs/utils.cpp srcs/internal/${dbms}/parser/bison_parser.cpp srcs/internal/${dbms}/parser/flex_lexer.cpp) target_include_directories(${dbms}_impl PRIVATE srcs/internal/${dbms}/include srcs) target_compile_options(${dbms}_impl PRIVATE -fPIC) target_link_libraries(${dbms}_impl ${YAML_CPP_LIBRARIES} absl::strings absl::str_format) string(TOUPPER ${dbms} UPPER_CASE_DBMS) add_library(${dbms}_mutator SHARED srcs/custom_mutator.cc srcs/db_factory.cc) target_link_libraries(${dbms}_mutator ${dbms}_impl config_validator) target_include_directories(${dbms}_mutator PRIVATE srcs/internal/${dbms} srcs) # target_compile_options(${dbms}_mutator PRIVATE -fPIC) target_compile_definitions(${dbms}_mutator PRIVATE __SQUIRREL_${UPPER_CASE_DBMS}__) endforeach() if(MYSQL OR POSTGRESQL) add_executable(db_driver srcs/db_driver.cc) target_link_libraries(db_driver ${YAML_CPP_LIBRARIES} all_client absl::strings absl::str_format) add_executable(test_client srcs/internal/client/test_client.cc) target_link_libraries(test_client all_client ${YAML_CPP_LIBRARIES}) target_include_directories(test_client PUBLIC srcs/internal/client) add_library(all_client SHARED srcs/internal/client/client.cc) target_include_directories(all_client PUBLIC srcs/internal/client) target_link_libraries(all_client PUBLIC ${LINK_CLIENT}) target_compile_definitions(all_client PRIVATE ${CLIENT_DEFINITION}) endif() add_library(config_validator OBJECT srcs/utils/config_validate.cc) target_link_libraries(config_validator PRIVATE ${YAML_CPP_LIBRARIES} absl::strings absl::str_format) target_include_directories(config_validator PUBLIC srcs/utils) target_compile_options(config_validator PRIVATE -fPIC) include(lint.cmake) add_subdirectory(tests) ================================================ FILE: CODEOWNERS ================================================ * @Changochen @zr950624 ================================================ FILE: LICENSE ================================================ MIT License Copyright (c) 2020 Squirrel Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: README.md ================================================ # Squirrel, a coverage-guided DBMS fuzzer. [![build](https://github.com/s3team/Squirrel/actions/workflows/build.yml/badge.svg)](https://github.com/s3team/Squirrel/actions/workflows/build.yml) `Squirrel` is a fuzzer for database managment systems (DBMSs). `Squirrel` was first built on [AFL](https://github.com/google/AFL) and then migrated to [AFLplusplus](https://github.com/AFLplusplus/AFLplusplus) to enjoy the improvement of state-of-the-art fuzzing strategies. ## Currently supported DBMSs 1. SQLite 2. PostgreSQL 3. MySQL 4. MariaDB ## Build Instruction (Run in docker, recommended) 1. Go to the directory of the dockerfile: `cd scripts/docker/xxx/`, where `xxx` is the database name. 2. Build the docker: `docker build -t xxx .`. 3. Run: `docker run -it xxx`. ## Build Instruction (Run on localhost) ### Prerequisite For ubuntu 22.04: ``` sudo apt install libmysqlclient-dev cmake ninja-build clang pkg-config clang-format libpq-dev libyaml-cpp-dev ``` #### Build Squirrel 1. Clone this repo and run `git submodule update --init`. 2. `cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -Wno-dev`. If you want to compile only the mutator for the specific databases, add `-DXXXXX=ON`, `XXXXX` can be `SQLITE`, `MYSQL` and `POSTGRESQL`. `Mariadb` share the same interface with `MySQL`. 3. `cmake --build build -j`, the binaries are in `build/`. #### Build AFLplusplus and DBMSs 1. Build aflplusplus: `cd AFLplusplus && make -j && cd ..`. 2. Use `afl-cc` and `afl-c++` to instrument your database. ### Run #### Configuration 1. Set up a configuration file in `yaml`. Examples can be found in `data/*.yml`. 2. Set the enviroment variable ```bash export SQUIRREL_CONFIG=/path/to/config.yml export AFL_CUSTOM_MUTATOR_ONLY=1 export AFL_CUSTOM_MUTATOR_LIBRARY= REPO_DIR/build/libxxxx_mutator.so export AFL_DISABLE_TRIM=1 ``` #### Normal Mode (SQLite) Same as AFLplusplus: `afl-fuzz -i input -o output -- sqlite_harness`. #### Client/Server Mode (MySQL/MariaDB/PostgreSQL) 1. Dry run the database to get the `__afl_map_size` and set it to `AFL_MAP_SIZE`. 2. Run `afl-fuzz -i input -o output -- ./build/db_driver`, it will print the share memory id and wait for 30 seconds. 3. Start the databse server with `export __AFL_SHM_ID=xxxx`. ## Publications More details can be found in our [CCS 2020 paper](http://arxiv.org/abs/2006.02398). And the bugs found by `Squirrel` can be found in [here](https://github.com/s3team/Squirrel/wiki/Bug-List). ``` SQUIRREL: Testing Database Management Systems with Language Validity and Coverage Feedback @inproceedings{zhong:squirrel, title = {{SQUIRREL: Testing Database Management Systems with Language Validity and Coverage Feedback}}, author = {Rui Zhong and Yongheng Chen and Hong Hu and Hangfan Zhang and Wenke Lee and Dinghao Wu}, booktitle = {Proceedings of the 27th ACM Conference on Computer and Communications Security (CCS)}, month = nov, year = 2020, address = {Orlando, USA}, } ``` ## Special Thanks 1. Roel Van de Paar ([@mariadb-RoelVandePaar](https://github.com/mariadb-RoelVandePaar)): For his helpful feedback for improving Squirrel. ================================================ FILE: data/config_mariadb.yml ================================================ --- required: ["init_lib", "data_lib", "db", "passwd", "user_name", "host", "sock_path", "db_prefix", "startup_cmd"] should_exist: ["init_lib", "data_lib"] init_lib: /home/Squirrel/data/fuzz_root/mysql_init_lib data_lib: /home/Squirrel/data/fuzz_root/global_data_lib_mysql db: mysql passwd: '' user_name: dobigthing host: localhost sock_path: /tmp/mysql.sock db_prefix: test # It is important that the command should run on background startup_cmd: "/usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --log-error=err_log.err --pid-file=server_pid.pid --max_statement_time=1 &" ================================================ FILE: data/config_mysql.yml ================================================ --- required: ["init_lib", "data_lib", "db", "passwd", "user_name", "host", "sock_path", "db_prefix", "startup_cmd"] should_exist: ["init_lib", "data_lib"] init_lib: /home/Squirrel/data/fuzz_root/mysql_init_lib data_lib: /home/Squirrel/data/fuzz_root/global_data_lib_mysql db: mysql passwd: '' user_name: root host: localhost sock_path: /tmp/mysql.sock db_prefix: test # It is important that the command should run on background startup_cmd: "/usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --log-error=err_log.err --pid-file=server_pid.pid --max-execution-time=1000 &" ================================================ FILE: data/config_postgresql.yml ================================================ --- required: ["init_lib", "data_lib", "db", "passwd", "user_name", "host", "db_name", "startup_cmd"] should_exist: ["init_lib", "data_lib"] init_lib: /home/Squirrel/data/fuzz_root/pqsql_init_lib data_lib: /home/Squirrel/data/fuzz_root/pqsql_data_lib db: postgresql passwd: '' user_name: dobigthing db_name: postgres host: localhost port: 5432 startup_cmd: "/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data &" ================================================ FILE: data/config_sqlite.yml ================================================ --- required: ["init_lib", "pragma"] should_exist: ["init_lib", "pragma"] init_lib: /home/Squirrel/data/fuzz_root/init_lib pragma: /home/Squirrel/data/fuzz_root/pragma db: sqlite ================================================ FILE: data/fuzz_root/global_data_lib_mysql ================================================ DataFunctionName CUME_DIST DataFunctionName DENSE_RANK DataFunctionName FIRST_VALUE DataFunctionName LAG DataFunctionName LAST_VALUE DataFunctionName LEAD DataFunctionName NTH_VALUE DataFunctionName NTILE DataFunctionName PERCENT_RANK DataFunctionName RANK DataFunctionName ROW_NUMBER DataFunctionName AVG DataFunctionName BIT_AND DataFunctionName BIT_OR DataFunctionName BIT_XOR DataFunctionName COUNT DataFunctionName JSON_ARRAYAGG DataFunctionName JSON_OBJECTAGG DataFunctionName MAX DataFunctionName MIN DataFunctionName STDDEV_POP DataFunctionName STDDEV DataFunctionName STD DataFunctionName STDDEV_SAMP DataFunctionName SUM DataFunctionName VAR_POP DataFunctionName VARIANCE DataFunctionName VAR_SAMP ================================================ FILE: data/fuzz_root/global_data_lib_pqsql ================================================ DataFunctionName array_agg DataFunctionName avg DataFunctionName bit_and DataFunctionName bit_or DataFunctionName bool_and DataFunctionName bool_or DataFunctionName count DataFunctionName every DataFunctionName json_agg DataFunctionName jsonb_agg DataFunctionName json_object_agg DataFunctionName jsonb_object_agg DataFunctionName max DataFunctionName min DataFunctionName string_agg DataFunctionName sum DataFunctionName xmlagg DataFunctionName corr DataFunctionName covar_pop DataFunctionName covar_samp DataFunctionName regr_avgx DataFunctionName regr_avgy DataFunctionName regr_count DataFunctionName regr_intercept DataFunctionName regr_r2 DataFunctionName regr_slope DataFunctionName regr_sxx DataFunctionName regr_sxy DataFunctionName regr_syy DataFunctionName stddev DataFunctionName stddev_pop DataFunctionName stddev_samp DataFunctionName variance DataFunctionName var_pop DataFunctionName var_samp DataFunctionName mode DataFunctionName percentile_cont DataFunctionName percentile_disc DataFunctionName rank DataFunctionName dense_rank DataFunctionName percent_rank DataFunctionName cume_dist DataFunctionName GROUPING DataDatabase x ================================================ FILE: data/fuzz_root/init_lib/1.txt ================================================ CREATE TABLE t0(c0, c1 AS(c0 + c2), c2 AS(c1) CHECK(c2)); UPDATE t0 SET c0 = NULL ================================================ FILE: data/fuzz_root/init_lib/10.txt ================================================ CREATE TABLE t1(a, b); CREATE TABLE t2(c, d); CREATE TABLE t3(e, f); INSERT INTO t1 VALUES(1, 1); INSERT INTO t2 VALUES(1, 1); INSERT INTO t3 VALUES(1, 1); SELECT d IN (SELECT sum(c) OVER (ORDER BY e+c) FROM t3) FROM ( SELECT * FROM t2 ); ================================================ FILE: data/fuzz_root/init_lib/11.txt ================================================ ATTACH '' AS aux; CREATE TABLE aux.t1(a, b, c); CREATE TEMP TRIGGER tmp AFTER INSERT ON t1 BEGIN SELECT 'abc'; END; DETACH aux; DROP TRIGGER tmp; ================================================ FILE: data/fuzz_root/init_lib/12.txt ================================================ CREATE TABLE t1(a,b); INSERT INTO t1 VALUES(1,2); UPDATE t1 SET (a,a,a,b)=(SELECT 99,100); ================================================ FILE: data/fuzz_root/init_lib/13.txt ================================================ CREATE TABLE t0(c0); INSERT INTO t0(c0) VALUES (0); SELECT * FROM t0 WHERE EXISTS (SELECT MIN(c0) OVER (), CUME_DIST() OVER () FROM t0) BETWEEN 1 AND 1; ================================================ FILE: data/fuzz_root/init_lib/14.txt ================================================ CREATE TABLE t1(a); CREATE TABLE t2(b); CREATE TRIGGER r1 AFTER INSERT ON t2 BEGIN INSERT INTO t1(a) VALUES(99); END; DROP TABLE t1; ALTER TABLE t2 RENAME TO t3; ================================================ FILE: data/fuzz_root/init_lib/15.txt ================================================ CREATE TABLE artists ( id integer NOT NULL PRIMARY KEY AUTOINCREMENT, name varchar(255) ); CREATE TABLE albums ( id integer NOT NULL PRIMARY KEY AUTOINCREMENT, name varchar(255), artist_id integer REFERENCES artists ); INSERT INTO artists (name) VALUES ('Ar'); INSERT INTO albums (name, artist_id) VALUES ('Al', 1); SELECT artists.* FROM artists INNER JOIN artists AS 'b' ON (b.id = artists.id) WHERE (artists.id IN ( SELECT albums.artist_id FROM albums WHERE ((name = 'Al') AND (albums.artist_id IS NOT NULL) AND (albums.id IN ( SELECT id FROM ( SELECT albums.id, row_number() OVER ( PARTITION BY albums.artist_id ORDER BY name ) AS 'x' FROM albums WHERE (name = 'Al') ) AS 't1' WHERE (x = 1) )) AND (albums.id IN (1, 2))) )); ================================================ FILE: data/fuzz_root/init_lib/16.txt ================================================ CREATE TABLE "sqlite1234" ("id" integer); ALTER TABLE "sqlite1234" RENAME TO "User"; SELECT name, sql FROM sqlite_master WHERE sql IS NOT NULL; ================================================ FILE: data/fuzz_root/init_lib/17.txt ================================================ CREATE TABLE IF NOT EXISTS t1(id INTEGER PRIMARY KEY); INSERT INTO t1 VALUES(1); SELECT a.id FROM t1 AS a JOIN t1 AS b ON a.id=b.id WHERE a.id IN (1,2,3); ================================================ FILE: data/fuzz_root/init_lib/18.txt ================================================ CREATE TABLE t1(a INTEGER PRIMARY KEY); INSERT INTO t1(a) VALUES(1),(2),(3); CREATE TABLE t2(x INTEGER PRIMARY KEY, y INT); INSERT INTO t2(y) VALUES(2),(3); SELECT * FROM t1, t2 WHERE a=y AND y=3; ================================================ FILE: data/fuzz_root/init_lib/19.txt ================================================ SELECT +sum(0)OVER() ORDER BY +sum(0)OVER(); ================================================ FILE: data/fuzz_root/init_lib/2.txt ================================================ CREATE TABLE t0(c0 AS ((c4, 9, c4) < ('a', c1, 1)), c1 AS (1) NOT NULL, c2, c3 CHECK ((x'56', 0) = (c1, 0)), c4 NOT NULL); PRAGMA integrity_check; INSERT INTO t0 VALUES (0, 0, 0), (0, 0, 0); ================================================ FILE: data/fuzz_root/init_lib/20.txt ================================================ CREATE TABLE t1(aa, bb); CREATE INDEX t1x1 on t1(abs(aa), abs(bb)); INSERT INTO t1 VALUES(-2,-3),(+2,-3),(-2,+3),(+2,+3); SELECT * FROM (t1) WHERE ((abs(aa)=1 AND 1=2) OR abs(aa)=2) AND abs(bb)=3; ================================================ FILE: data/fuzz_root/init_lib/21.txt ================================================ CREATE TABLE t1(x); INSERT INTO t1 VALUES('a'), ('b'), ('c'); CREATE TABLE t2(a, b); INSERT INTO t2 VALUES('X', 1), ('X', 2), ('Y', 2), ('Y', 3); SELECT x, (SELECT sum(b) OVER (PARTITION BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 WHERE b 42) FROM ( SELECT id, (price * 2) as double_price FROM item ); ================================================ FILE: data/fuzz_root/init_lib/new_code ================================================ CREATE TABLE x ( x , x ) ; CREATE INDEX x ON x ( x ) ; CREATE INDEX x ON x ( x , x ) ; ANALYZE ; SELECT * FROM x ORDER BY 10 , 10 ; INSERT INTO x ( x , x , x , x , x , x ) VALUES ( 10 , 10 , 10 , 10 , 10 , 10 ) ; INSERT INTO x ( x , x , x , x , x , x ) VALUES ( 10 , 'y' , 'y' , 'y' , 'y' , 'y' ) ; SELECT x , typeof ( x ) FROM x ORDER BY x ; INSERT INTO x VALUES ( 'y' , 'y' ) ; CREATE TABLE x ( x , x , x INTEGER ) ; INSERT INTO x VALUES ( 10 , 10 , 10 ) ; SELECT * FROM x WHERE x = 'y' ORDER BY x ; DROP TABLE IF EXISTS x ; CREATE TABLE x ( x TEXT UNIQUE , x ) ; INSERT INTO x ( x ) VALUES ( 10 ) ; SELECT quote ( - 'y' ) , quote ( x ) , quote ( - 'y' >= x ) FROM x ; SELECT * FROM x WHERE - 'y' >= x ; SELECT 10 < x FROM x ; SELECT 10 FROM x WHERE 10 < x ; CREATE TABLE x ( x INT PRIMARY KEY ) ; INSERT INTO x ( x , x ) VALUES ( 10 , 10 ) ; INSERT INTO x ( x , x ) VALUES ( 10 , 0.1 ) ; PRAGMA x = x ; CREATE TABLE x ( x INT , x ) ; INSERT INTO x VALUES ( 10 , 'y' ) ; CREATE TABLE x ( x TEXT , x ) ; CREATE TABLE x AS SELECT * FROM x ; SELECT * FROM x JOIN x USING ( id ) ; CREATE TABLE x ( x ) ; INSERT INTO x VALUES ( 10 ) ; INSERT INTO x SELECT x + 10 FROM x ; INSERT INTO x SELECT x + 10 FROM x ORDER BY x LIMIT 10 ; SELECT x_count ( * ) FROM x ; SELECT x_count ( x ) FROM x ; CREATE TABLE x ( x INT ) ; INSERT INTO x ( x ) VALUES ( 10 ) ; SELECT ( SELECT sum ( x + ( SELECT x ) ) FROM x ) FROM x ; SELECT ( SELECT sum ( x + x ) FROM x ) FROM x ; CREATE TABLE x ( x INT ) ; INSERT INTO x VALUES ( 10 ) ,( 10 ) ,( 10 ) ,( 10 ) ,( 10 ) ; INSERT INTO x VALUES ( 10 ) ,( 10 ) ,( 10 ) ; SELECT min ( ( SELECT count ( x ) FROM x ) ) FROM x ; SELECT max ( ( SELECT x FROM SELECT count ( * ) AS a FROM x AS s ) ) FROM x ; INSERT INTO x VALUES ( 10 , 10 ) ; SELECT 'y' , * FROM x ; INSERT INTO x SELECT x , x , x FROM x WHERE x != 'y' ; SELECT x , x , x FROM x ORDER BY x , x DESC , x ; ALTER TABLE x RENAME TO x ; SELECT * FROM x ; DELETE FROM x ; INSERT INTO x SELECT x , x , x FROM x ; ATTACH 'y' AS x ; CREATE TABLE x ( x PRIMARY KEY , x , x ) ; CREATE TABLE x . x ( x PRIMARY KEY , x , x ) ; INSERT INTO x VALUES ( 'y' , 'y' , 'y' ) ; INSERT INTO x . x VALUES ( 'y' , 'y' , 'y' ) ; SELECT * FROM x WHERE x = 'y' ; ALTER TABLE x . x RENAME TO x ; SELECT * FROM x . x WHERE x = 'y' ; CREATE TABLE x ( x , x , x ) ; DROP TABLE x ; END ; DROP TRIGGER x ; UPDATE x SET x = 'y' WHERE x = 'y' ; INSERT INTO x VALUES ( NULL ) ; SELECT x FROM x ; SELECT x FROM x WHERE x = 10 ; SELECT * FROM x SELECT x , x SELECT typeof ( x ) , x , typeof ( x ) , x FROM x ; CREATE TABLE x ( x INTEGER ) ; SELECT sum ( x ) FROM x ; SELECT x , sum ( x ) FROM x GROUP BY x ; SELECT sqlite_rename_table ( 10 , 10 , 10 , 10 , 10 , 10 , 10 ) ; ALTER TABLE x ADD COLUMN x ; CREATE VIEW x AS SELECT * FROM x ; SELECT x FROM x WHERE x GLOB 'y' ORDER BY 10 ; CREATE TABLE x ( x UNIQUE ) ; ALTER TABLE x ADD COLUMN x UNIQUE ; ALTER TABLE x ADD COLUMN x PRIMARY KEY ; INSERT INTO x VALUES ( 'y' , 0.1 , 10 ) ; INSERT INTO x VALUES ( 'y' , 0.1 , 10 , 'y' ) ; SELECT * FROM x ORDER BY x ; UPDATE x SET x = 10 WHERE x = 10 ; SELECT x FROM x ORDER BY x ; SELECT * FROM x WHERE x = 10 ; SELECT sum ( x ) , x FROM x GROUP BY x ; UPDATE x SET x = 10 WHERE x IS NULL AND x < 10 ; SELECT typeof ( x ) FROM x ; INSERT INTO x VALUES ( 10 , 10 , NULL ) ; DROP VIEW x ; UPDATE x SET x = x * 10 WHERE x < 10 ; UPDATE x SET x = x * 10 ; CREATE TABLE x . x ( x , x ) ; SELECT * FROM x LIMIT 10 ; SELECT x , typeof ( x ) , x , typeof ( x ) , x , typeof ( x ) FROM x LIMIT 10 ; DELETE FROM x WHERE x = 10 ; INSERT INTO x VALUES ( 'y' ) ; SELECT quote ( x ) , quote ( x ) , quote ( x ) FROM x LIMIT 10 ; DELETE FROM x WHERE x = 'y' ; ALTER TABLE x ADD x ; SELECT x FROM x WHERE x = 'y' ; ALTER TABLE x ADD x CHECK( x > x ) ; SELECT x FROM x WHERE x = 'y' AND x = 'y' ; ALTER TABLE x ADD x PRIMARY KEY ; PRAGMA x = 10 ; PRAGMA x ; CREATE TABLE x . x AS SELECT * FROM x ; PRAGMA x . x = 10 ; SELECT x FROM x . x ; ALTER TABLE x . x ADD COLUMN x VARCHAR(128) ; SELECT * FROM x . x ; PRAGMA x . x ; DROP TABLE x . x ; VACUUM ; SELECT typeof ( x ) , x FROM x ; CREATE TABLE x ( x INTEGER PRIMARY KEY , x ) ; ALTER TABLE x RENAME x TO x ; ALTER TABLE x RENAME COLUMN x TO x ; UPDATE x SET x = x + 10 , x = 10 WHERE x = 10 ; INSERT INTO x ( x , x , x ) SELECT 10 , 10 , 10 WHERE 10 ; SELECT x FROM x WHERE x IN ( 'y' , 'y' ) ; SELECT x FROM x WHERE x IN ( 'y' , 'y' , 'y' ) ; INSERT INTO x VALUES ( 10 , 10 , 10 ) ,( 10 , 10 , 10 ) ; UPDATE x SET x = 10 ; CREATE VIEW x AS SELECT x , x , x FROM x ; CREATE VIEW x AS SELECT x , x + x , x , x + x FROM x , x ; CREATE TABLE x ( x INTEGER PRIMARY KEY , x , x ) ; CREATE VIEW x AS SELECT x + x CONCAT coalesce ( x , x ) FROM x , x WHERE x = x GROUP BY x HAVING x > 10 ; CREATE VIEW x AS SELECT x FROM x UNION ALL SELECT x FROM x ; CREATE VIEW x AS SELECT x , x FROM x ; CREATE VIRTUAL TABLE x USING echo ( x1 ) ; CREATE VIEW x AS SELECT x , x FROM x , x ; INSERT INTO x VALUES ( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ; CREATE VIEW x ( x , x ) AS SELECT * FROM x ; CREATE TABLE x ( x INTEGER , x TEXT UNIQUE ) ; CREATE TABLE x ( x UNIQUE , x , x ) ; DROP TRIGGER IF EXISTS x ; INSERT INTO x VALUES ( 'y' , 'y' , 'y' , 'y' , 'y' , 10 , 'y' , 10 ) ,( 'y' , 'y' , 'y' , 'y' , 'y' , 10 , 'y' , 10 ) ,( 'y' , 'y' , 'y' , 'y' , 'y' , 10 , 'y' , 10 ) ,( 'y' , 'y' , 'y' , 'y' , 'y' , 10 , 'y' , 10 ) ; SELECT sqlite_rename_column ( 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 ) ; SELECT x AS d FROM x WHERE x = 10 ; CREATE VIEW x AS SELECT x AS d FROM x WHERE x = 10 ; CREATE UNIQUE INDEX x ON x ( x ) ; CREATE TABLE x . x ( x ) ; CREATE VIEW x ( x ) AS SELECT coalesce ( x , x ) FROM x , x WHERE x = x ; CREATE INDEX x ON x ( x ) WHERE x > 10 ; CREATE VIEW x AS SELECT x , x , x , x FROM x AS one , x ; INSERT INTO x VALUES ( 'y' , 'y' , 'y' , NULL , 10 ) ,( 'y' , 'y' , NULL , 'y' , 10 ) ,( 'y' , NULL , 'y' , 'y' , 10 ) ; CREATE TABLE x . x ( x INTEGER PRIMARY KEY , x ) ; INSERT INTO x . x VALUES ( 10 , 10 ) ; INSERT INTO x . x VALUES ( NULL , 10 ) ; SELECT x FROM x . x WHERE x = 'y' ; CREATE TRIGGER x AFTER INSERT ON x WHEN x IS NULL BEGIN SELECT 10 , 10 , 10 ; END ; CREATE TEMP TRIGGER x AFTER INSERT ON x . x BEGIN SELECT 10 , 10 , 10 ; END ; CREATE TABLE x . x ( x , x , x ) ; INSERT INTO x . x VALUES ( 10 , 10 , 10 ) ; SELECT x , x FROM x ; CREATE VIRTUAL TABLE x USING tcl ( tcl_command ) ; SELECT sqlite_rename_table ( x , 10 , 10 , x , x , x , x ) FROM x ; CREATE TABLE x ( x INTEGER NOT NULL PRIMARY KEY ) ; CREATE VIEW x AS SELECT x FROM x ; CREATE TABLE x ( x INTEGER NOT NULL ) ; CREATE VIEW x AS SELECT x AS f1 FROM x ; UPDATE x SET x = 'y' WHERE x = 10 ; SELECT x , x FROM x WHERE x IS NOT NULL ; CREATE TABLE x ( x PRIMARY KEY , x ) ; SELECT x FROM x WHERE x LIKE 'y' ; CREATE TABLE x ( x , x , x , x , x , x ) ; CREATE TABLE x ( x , x , x , x ) ; SELECT x , * FROM x ; INSERT INTO x VALUES ( 10 , 10 , 10 , 10 , 10 , 10 ) ; SELECT x , x , x FROM x UNION SELECT x , x , x FROM x ORDER BY x , x ; SELECT x , x , x FROM x ; CREATE VIEW x AS SELECT * FROM x WHERE ( x = 10 AND 10 ) OR x = 10 ; SELECT x ; BEGIN ; COMMIT ; SELECT x , x , x , x FROM x WHERE x = 'y' AND x != 'y' ; WITH t4 AS ( SELECT * FROM x ) SELECT 10 ; ANALYZE x . x ; ANALYZE x ; SELECT x , x FROM x ORDER BY x ; CREATE TABLE x AS SELECT x , x , x AS c , 'y' AS d FROM x ; CREATE INDEX x ON x ( x , x , x , x ) ; INSERT INTO x VALUES ( NULL , NULL , NULL ) ; INSERT INTO x VALUES ( 10 , 10 , 10 , 10 ) ; INSERT INTO x SELECT x + 10 , x + 10 , x + 10 , x + 10 FROM x ; SELECT DISTINCT x FROM x ORDER BY 10 ; INSERT INTO x ( x ) VALUES ( 10 ) ,( 10 ) ,( 10 ) ,( 10 ) ,( 10 ) ; INSERT INTO x SELECT * FROM x ; INSERT INTO x ( x ) SELECT x FROM x ; CREATE VIRTUAL TABLE x USING wholenumber ; INSERT INTO x ( x , x , x ) VALUES ( 10 , 10 , 10 ) ,( 10 , 10 , 10 ) ,( 10 , 10 , 10 ) ,( 10 , 10 , 10 ) ,( 10 , 10 , 10 ) ,( 10 , 10 , 10 ) ; SELECT * , 'y' FROM x WHERE x BETWEEN 10 AND 10 ORDER BY x ; SELECT count ( x ) FROM x ; CREATE TABLE x ( x PRIMARY KEY ) ; INSERT INTO x VALUES ( 'y' , NULL , 'y' ) ; SELECT 10 FROM x WHERE x IN ( 10 , 10 , 10 ) ; ATTACH DATABASE 'y' AS x ; DETACH DATABASE x ; DETACH x ; UPDATE x SET x = x + 10 ; UPDATE x . x SET x = x + 10 ; SELECT x , x , x FROM x . x ; SELECT * FROM x WHERE x > 10 ; UPDATE x SET x = x + 10 WHERE x = 10 ; SELECT * FROM x . x UNION ALL SELECT * FROM x . x ; CREATE VIEW x AS SELECT x * 10 + x FROM x ; ATTACH printf ( 'y' , 10 ) AS x ; INSERT INTO x . x ( x , x ) VALUES ( 10 , 10 ) ,( 10 , 10 ) ; CREATE TABLE x ( x TEXT NOT NULL PRIMARY KEY ) ; CREATE TABLE x . x ( x INTEGER , x INTEGER , x INTEGER , x ) ; UPDATE x . x SET x = 10 ; ROLLBACK ; CREATE VIEW x . x AS SELECT * FROM x ; INSERT INTO x . x VALUES ( 'y' , 'y' ) ; DROP VIEW x . x ; DROP TRIGGER x . x ; SELECT count ( * ) FROM x ; INSERT INTO x . x VALUES ( 10 , 10 , 10 , 10 , 10 ) ; PRAGMA x . x = x ; CREATE VIEW x AS SELECT x + 10 , x + 10 FROM x ; DELETE FROM x WHERE x = 10 AND x = 10 AND x = 10 ; REINDEX x ; CREATE INDEX x ON x ( x , x , x ) ; SELECT x FROM x 'y' ORDER BY x ; CREATE VIEW x AS SELECT x + x AS x FROM x ; CREATE TABLE x ( x , x , x , x , x , x , x , x ) ; INSERT INTO x VALUES ( 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 ) ; INSERT INTO x VALUES ( NULL , 10 ) ; UPDATE x SET x = 10 WHERE x = 'y' ; UPDATE x SET x = NULL WHERE x = 'y' ; DELETE FROM x WHERE x >= 10 ; INSERT INTO x SELECT NULL , x + 10 FROM x ; INSERT INTO x SELECT NULL , x FROM x ; SELECT 10 , x FROM x WHERE x = 'y' ; SELECT 10 , * FROM x . x ; SELECT * FROM x UNION ALL SELECT * FROM x ; INSERT INTO x SELECT x + 10 , x FROM x ; INSERT INTO x ( x , x ) VALUES ( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ON CONFLICT ( x ) DO UPDATE SET = x x + 10 ; CREATE VIEW x AS SELECT x , sum ( x ) AS m FROM x GROUP BY x ; CREATE INDEX x ON x ( x , x , x , x , x , x ) ; INSERT INTO x VALUES ( 10 , 'y' ) ,( 10 , 'y' ) ,( 10 , 'y' ) ,( 10 , 'y' ) ; INSERT INTO x VALUES ( 10 , 'y' ) ,( 10 , 'y' ) ,( 10 , 'y' ) ; SELECT * , 'y' FROM x , x WHERE x = 10 AND x = 10 ; SELECT * , 'y' FROM x LEFT JOIN x ON x = 10 AND x = 10 ; SELECT * , 'y' FROM x LEFT JOIN x ON x = 10 WHERE x = 10 ; SELECT * , 'y' FROM x LEFT JOIN x WHERE x = 10 AND x = 10 ; CREATE TABLE x ( x TEXT ) ; CREATE TABLE x ( x TEXT , x TEXT ) ; CREATE INDEX x ON x ( x , x ) WHERE x = 'y' ; INSERT INTO x VALUES ( 'y' , 0.1 ) ; SELECT ( SELECT sum ( x ) FROM x WHERE x = 'y' ) FROM x ; INSERT INTO x ( x ) VALUES ( 'y' ) ; INSERT INTO x ( x , x ) VALUES ( 'y' , 10 ) ; CREATE TABLE x ( x ) ; INSERT INTO x ( x ) VALUES ( 10 ) ; INSERT INTO x VALUES ( 10 , 10 , 10 , 10 ) ,( 10 , 10 , 10 , 10 ) ; SELECT * FROM x WHERE ( x = 10 OR x = 10 ) AND x IN ( SELECT x FROM SELECT DISTINCT x FROM x WHERE x = 10 ) ; SELECT * , 'y' FROM x WHERE ( x = 10 OR x = 10 ) AND x = ( SELECT x FROM SELECT DISTINCT x FROM x WHERE x = 10 ) ; INSERT INTO x SELECT 'y' CONCAT x FROM x ; SELECT * FROM x WHERE x = 'y' AND x = 'y' AND x = 'y' ; INSERT INTO x SELECT randstr ( 10 , 10 ) , randstr ( 10 , 10 ) FROM x ; CREATE TABLE x ( x INT PRIMARY KEY , x TEXT ) ; UPDATE x SET x = 10 WHERE 10 ; BEGIN TRANSACTION ; END TRANSACTION ; CREATE TABLE x ( x INT , x INT , x INT ) ; SELECT x FROM x WHERE x = 'y' OR x = 'y' ORDER BY x ; SELECT * FROM x WHERE x < 10 ; CREATE TABLE x ( x INT UNIQUE , x , x ) ; SELECT md5sum ( x , x , x ) FROM x ; INSERT INTO x SELECT randstr ( 10 , 10 ) FROM x ; DELETE FROM x WHERE random () % 10 != 10 ; INSERT INTO x SELECT randstr ( 10 , 10 ) CONCAT x FROM x ; INSERT INTO x SELECT randstr ( 10 , 10 ) FROM x WHERE random () % 10 == 10 ; CREATE VIRTUAL TABLE x USING tcl ( vtab_command ) ; INSERT INTO x VALUES ( 10 , 'y' , 10 ) ; INSERT INTO x VALUES ( 10 , 10 , 'y' ) ; SELECT * FROM x WHERE x = AND x BETWEEN AND AND x IN ( 10 , 10 , 10 , 10 ) ; CREATE VIRTUAL TABLE x USING tcl ( vtab_cmd t1 {a b} ) ; CREATE VIRTUAL TABLE x USING tcl ( vtab_cmd t2 {c d} ) ; CREATE VIRTUAL TABLE x USING tcl ( vtab_cmd t3 {e f} ) ; CREATE VIRTUAL TABLE x USING tcl ( vtab_cmd 0 ) ; SELECT * FROM x WHERE x LIKE 'y' ; INSERT INTO x VALUES ( 10 , 'y' , 'y' ) ; CREATE TABLE x ( x INTEGER , x TEXT ) ; CREATE TABLE x ( x INT , x TEXT ) ; CREATE TABLE x ( x INT , x INT , x TEXT ) ; SELECT * FROM x LEFT JOIN x ON x = x WHERE x IS NULL ; CREATE TABLE x ( x INT , x INT , x INT , x INT ) ; CREATE TABLE x ( x TEXT , x TEXT , x TEXT ) ; SELECT x FROM x WHERE x == 'y' ; INSERT INTO x ( x , x , x ) VALUES ( 'y' , 'y' , 'y' ) ; UPDATE x SET x = x CONCAT x ; SELECT x , length ( x ) , x FROM x ; UPDATE x SET x = zeroblob ( 10 ) ; UPDATE x SET x = zeroblob ( 10 ) WHERE x = 10 ; SELECT * FROM x UNION SELECT * FROM x ; UPDATE x SET x = 'y' ; ROLLBACK TO x ; UPDATE x SET x = upper ( x ) ; INSERT INTO x SELECT x + 10 , x + 10 , x + 10 FROM x ; INSERT INTO x VALUES ( 'y' , 'y' , NULL ) ; INSERT INTO x VALUES ( 0.1 , 0.1 , 0.1 ) ; INSERT INTO x VALUES ( NULL , NULL , NULL , NULL , NULL ) ; INSERT INTO x VALUES ( 'y' , NULL , NULL , NULL , NULL ) ; INSERT INTO x VALUES ( 10 , NULL ) ; CREATE TABLE x ( x VARCHAR(10) , x INTEGER ) ; CREATE TABLE x ( x VARCHAR(15) , x FLOAT ) ; SELECT CAST ( 'y' AS INTEGER ) ; INSERT INTO x VALUES ( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ; SELECT 'y' - 10 ; SELECT 10 - 10 ; SELECT - 'y' ; SELECT 'y' + 10 ; DELETE FROM x WHERE x IS NULL OR x != 10 ; UPDATE x SET x = 10 WHERE x == 10 ; INSERT INTO x VALUES ( 10 , 0.1 , 'y' ) ; INSERT INTO x VALUES ( 0.1 , NULL , NULL ) ; INSERT INTO x VALUES ( NULL , 10 , NULL ) ; INSERT INTO x VALUES ( NULL , NULL , 0.1 ) ; INSERT INTO x VALUES ( 'y' , 'y' , 10 ) ; INSERT INTO x VALUES ( 'y' , 10 , 10 ) ; UPDATE x SET x = 10 , x = 10 ; INSERT OR IGNORE INTO x VALUES ( 10 , 0.1 ) ; INSERT INTO x VALUES ( 10 , 0.1 ) ; INSERT OR ROLLBACK INTO x VALUES ( 10 , 0.1 ) ; INSERT OR IGNORE INTO x VALUES ( 10 , 10 ) ; INSERT INTO x ( x , x , x , x ) VALUES ( 10 , 10 , 10 , 10 ) ,( 10 , 10 , 10 , 10 ) ,( 10 , 10 , 10 , 10 ) ; UPDATE x SET x = x * 10 WHERE x = 10 ; CREATE VIEW x ( x ) AS SELECT x FROM x ; INSERT INTO x ( x , x ) VALUES ( 10 , 'y' ) ; CREATE TABLE x ( x INTEGER PRIMARY KEY , x INTEGER ) ; SELECT count ( * ) , x FROM x WHERE x = 10 AND x <= 10 GROUP BY x ORDER BY 10 ; SELECT count ( * ) , x FROM x WHERE x = 10 AND x = 10 GROUP BY x ORDER BY 10 ; SELECT count ( * ) , x FROM x WHERE x = 10 AND x BETWEEN 10 AND 10 GROUP BY x ORDER BY 10 ; SELECT count ( * ) , min ( x ) , max ( x ) FROM x WHERE x = 10 ; SELECT x FROM x WHERE x IN ( 10 , 10 ) ORDER BY x ; CREATE TABLE x ( x INTEGER PRIMARY KEY , x TEXT NOT NULL , x INTEGER ) ; SELECT * FROM x , x WHERE x = x AND x = 10 AND x = 10 ; INSERT INTO x VALUES ( NULL , NULL ) ; SELECT x FROM x ORDER BY 10 ; INSERT INTO x VALUES ( 'y' , 10 ) ; SELECT * FROM x ORDER BY 10 ; SELECT x AS c1 , x AS c2 FROM x ORDER BY x ; SELECT x + 10 FROM x ORDER BY 10 ; SELECT x CONCAT 'y' FROM x ORDER BY 10 ; INSERT INTO x VALUES ( 10 , 'y' , 'y' , 'y' ) ; SELECT x FROM x WHERE x = 'y' ORDER BY x ; INSERT INTO x VALUES ( 10 , 10 ) ,( 'y' , 10 ) ,( 'y' , 10 ) ,( 'y' , 10 ) ; SELECT x FROM x WHERE x > 'y' ORDER BY 10 ; SELECT x FROM x WHERE x > 'y' ORDER BY 10 , x ; SELECT x FROM x WHERE x < 'y' ORDER BY 10 ; SELECT x FROM x WHERE x < 'y' ORDER BY 10 , x ; SELECT x FROM x WHERE x >= 'y' ORDER BY 10 ; SELECT x FROM x WHERE x >= 'y' ORDER BY 10 , x ; SELECT x FROM x WHERE x <= 'y' ORDER BY 10 ; SELECT x FROM x WHERE x <= 'y' ORDER BY 10 , x ; SELECT x FROM x WHERE x BETWEEN 'y' AND 'y' ORDER BY 10 ; SELECT x FROM x WHERE x BETWEEN 'y' AND 'y' ORDER BY 10 , x ; SELECT x FROM x WHERE x IN ( 'y' , 'y' ) ORDER BY 10 , x ; SELECT x FROM x WHERE x IN ( SELECT x FROM x WHERE x IN ( 'y' , 'y' ) ) ; SELECT x FROM x WHERE NOT x > 'y' ORDER BY 10 ; SELECT x FROM x WHERE NOT x > 'y' ORDER BY 10 , x ; SELECT x FROM x WHERE NOT x < 'y' ORDER BY 10 ; SELECT x FROM x WHERE NOT x < 'y' ORDER BY 10 , x ; SELECT x FROM x WHERE NOT x = 'y' ; SELECT x FROM x WHERE NOT x >= 'y' ORDER BY 10 ; SELECT x FROM x WHERE NOT x >= 'y' ORDER BY 10 , x ; SELECT x FROM x WHERE NOT x <= 'y' ORDER BY 10 ; SELECT x FROM x WHERE NOT x <= 'y' ORDER BY 10 , x ; SELECT x FROM x WHERE NOT CASE x WHEN 'y' THEN 10 ELSE 10 END ; SELECT x FROM x WHERE NOT x IN ( 'y' , 'y' ) ; SELECT x FROM x WHERE NOT x IN ( SELECT x FROM x WHERE x IN ( 'y' , 'y' ) ) ; SELECT x > 'y' FROM x ; SELECT x < 'y' FROM x ; SELECT x = 'y' FROM x ; SELECT x <= 'y' FROM x ; SELECT x >= 'y' FROM x ; SELECT x BETWEEN 'y' AND 'y' FROM x ; SELECT CASE x WHEN 'y' THEN 10 ELSE 10 END FROM x ; SELECT x IN ( 'y' , 'y' ) FROM x ; SELECT x IN ( SELECT x FROM x WHERE x IN ( 'y' , 'y' ) ) FROM x ; SELECT x FROM x , x WHERE x = x ; SELECT x FROM x JOIN x USING ( b ) ; SELECT x FROM x NATURAL JOIN x ; SELECT x FROM x LEFT OUTER JOIN x USING ( b ) ORDER BY x ; SELECT x , x FROM x LEFT OUTER JOIN x USING ( b ) ; SELECT count ( * ) FROM x GROUP BY x ; SELECT * FROM x GROUP BY x ; SELECT DISTINCT x FROM x ; SELECT x FROM x UNION SELECT x FROM x ; SELECT x FROM x EXCEPT SELECT x FROM x ; SELECT x FROM x INTERSECT SELECT x FROM x ; SELECT x FROM x UNION ALL SELECT x FROM x ; SELECT x FROM x UNION ALL SELECT x FROM x ORDER BY 10 ; DELETE FROM x WHERE 10 ; INSERT INTO x VALUES ( 'y' , NULL ) ; SELECT * FROM x , x WHERE x = x ; SELECT x FROM x WHERE x IN ( 'y' , 'y' ) ORDER BY x ; SELECT * FROM x NOT INDEXED NATURAL JOIN x NOT INDEXED ; SELECT * FROM x NATURAL JOIN x ; INSERT INTO x SELECT upper ( x ) FROM x ; SELECT min ( x ) FROM x ; SELECT max ( x ) FROM x ; SELECT max ( x , x ) FROM x ; SELECT max ( x , 'y' ) FROM x ; SELECT max ( 'y' , x ) FROM x ; CREATE TABLE x ( x INTEGER PRIMARY KEY ) ; SELECT DISTINCT x , x FROM x ; SELECT x , x FROM x UNION SELECT x , x FROM x ; SELECT x FROM x EXCEPT SELECT x FROM x WHERE x != 'y' ; SELECT x , x FROM x EXCEPT SELECT x , x FROM x ; SELECT x , x FROM x EXCEPT SELECT x , x FROM x WHERE x != 'y' ; SELECT x FROM x INTERSECT SELECT x FROM x WHERE x != 'y' ; SELECT x , x FROM x INTERSECT SELECT x , x FROM x ; SELECT x FROM x INTERSECT SELECT x FROM x ORDER BY 10 ; SELECT x , count ( * ) FROM x GROUP BY x ; SELECT x , x , count ( * ) FROM x GROUP BY x , x ORDER BY x , x ; PRAGMA x = 'y' ; SELECT * FROM x WHERE x < 'y' ; SELECT x AS x FROM x WHERE x = 'y' ; ; SELECT * FROM x , x , x WHERE x = x AND x = x AND x = 10 ; INSERT INTO x ( x ) VALUES ( 10 ) ,( 10 ) ,( 10 ) ; INSERT INTO x ( x , x ) VALUES ( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ; SELECT * , 'y' FROM x , x , x WHERE x = x AND x = x AND x = 10 ; SELECT * , 'y' FROM x , x , x WHERE x = x AND x = x AND 10 = x ; INSERT INTO x VALUES ( 'y' ) ,( 'y' ) ,( 'y' ) ; CREATE TABLE x ( x NOT NULL , x INTEGER PRIMARY KEY , x ) ; SELECT x , x , x , x FROM x , x ; SELECT x , x , x , x , * FROM x , x , x ; SELECT x , x FROM x , x ; SELECT * FROM x , x , x ; SELECT x , * FROM x ORDER BY 10 ; CREATE TABLE x AS SELECT x FROM SELECT x AS Bbb FROM x ; SELECT x FROM x 'y' ; SELECT ( SELECT avg ( x ) UNION SELECT min ( x ) OVER( ) ) FROM x ; CREATE TABLE x AS SELECT x FROM x ; PRAGMA x ( x ) ; CREATE TABLE x AS SELECT x FROM x GROUP BY 10 ; INSERT OR IGNORE INTO x VALUES ( 10 , 10 , 10 ) ; INSERT OR REPLACE INTO x VALUES ( 10 , 10 , 10 ) ; REPLACE INTO x VALUES ( 10 , 10 , 10 ) ; INSERT OR FAIL INTO x VALUES ( 10 , 10 , 10 ) ; INSERT OR ABORT INTO x VALUES ( 10 , 10 , 10 ) ; INSERT OR ROLLBACK INTO x VALUES ( 10 , 10 , 10 ) ; INSERT OR IGNORE INTO x VALUES ( 10 , 10 , NULL ) ; INSERT OR REPLACE INTO x VALUES ( 10 , 10 , NULL ) ; INSERT OR FAIL INTO x VALUES ( 10 , 10 , NULL ) ; INSERT OR ABORT INTO x VALUES ( 10 , 10 , NULL ) ; INSERT OR ROLLBACK INTO x VALUES ( 10 , 10 , NULL ) ; CREATE TABLE x ( x UNIQUE , x ) ; SELECT count ( * ) , min ( x ) , max ( x ) FROM x ; INSERT OR REPLACE INTO x VALUES ( 10 , 10 ) ; INSERT OR IGNORE INTO x SELECT * FROM x ; INSERT OR IGNORE INTO x SELECT x + 10 , x + 10 FROM x ; CREATE TABLE x ( x INTEGER UNIQUE ON CONFLICT IGNORE , x INTEGER UNIQUE ON CONFLICT FAIL , x INTEGER UNIQUE ON CONFLICT REPLACE , x INTEGER UNIQUE ON CONFLICT ABORT , x INTEGER UNIQUE ON CONFLICT ROLLBACK ) ; INSERT INTO x VALUES ( 10 , 10 , 10 , 10 , 10 ) ; INSERT OR ROLLBACK INTO x VALUES ( 10 , 10 ) ; INSERT OR ROLLBACK INTO x VALUES ( 10 ) ; INSERT INTO x SELECT 10 , 10 , 10 FROM x ; CREATE TABLE x ( x INTEGER PRIMARY KEY , x TEXT ) ; INSERT INTO x ( x , x ) VALUES ( 10 , 10 ) ,( 10 , 10 ) ; CREATE TABLE x ( x CHECK( x != 10 ) ) ; REPLACE INTO x VALUES ( 10 ) ; CREATE TABLE x ( x TEXT PRIMARY KEY NOT NULL , x TEXT NOT NULL , x INTEGER ) ; CREATE UNIQUE INDEX x ON x ( x , x ) ; REPLACE INTO x ( x , x , x ) VALUES ( 'y' , 'y' , 10 ) ; SELECT x , x FROM x INDEXED BY x ; SELECT x , x , x FROM x NOT INDEXED ; CREATE TABLE x ( x INTEGER PRIMARY KEY ON CONFLICT REPLACE , x UNIQUE ON CONFLICT IGNORE , x UNIQUE ON CONFLICT FAIL ) ; INSERT INTO x ( x , x , x ) VALUES ( 10 , 10 , 10 ) ,( 10 , 10 , 10 ) ; SELECT x , x , x FROM x ORDER BY x ; INSERT INTO x ( x , x , x ) VALUES ( 10 , 10 , 10 ) ; CREATE TABLE x ( x INT PRIMARY KEY ON CONFLICT REPLACE , x UNIQUE ON CONFLICT IGNORE , x UNIQUE ON CONFLICT FAIL ) ; CREATE TABLE x ( x UNIQUE ON CONFLICT IGNORE , x INT PRIMARY KEY ON CONFLICT REPLACE , x UNIQUE ON CONFLICT FAIL ) ; CREATE TABLE x ( x UNIQUE ON CONFLICT FAIL , x INT PRIMARY KEY ON CONFLICT REPLACE , x UNIQUE ON CONFLICT IGNORE ) ; CREATE TABLE x ( x UNIQUE ON CONFLICT REPLACE , x INTEGER PRIMARY KEY ON CONFLICT IGNORE , x UNIQUE ON CONFLICT FAIL ) ; CREATE TABLE x ( x UNIQUE ON CONFLICT REPLACE , x INT PRIMARY KEY ON CONFLICT IGNORE , x UNIQUE ON CONFLICT FAIL ) ; CREATE TABLE x ( x UNIQUE ON CONFLICT REPLACE , x UNIQUE ON CONFLICT IGNORE , x INTEGER PRIMARY KEY ON CONFLICT FAIL ) ; REPLACE INTO x VALUES ( NULL , 'y' ) ,( 10 , 'y' ) ; CREATE TABLE x ( x UNIQUE , x UNIQUE ) ; UPDATE x SET x = 'y' , x = 'y' CONCAT substr ( x , 10 , 10 ) WHERE x = 'y' ; BEGIN EXCLUSIVE ; UPDATE x SET x = NULL , x = NULL WHERE x = 'y' ; INSERT INTO x ( x ) SELECT x + 10 FROM x ; INSERT INTO x SELECT x , x * x FROM x ; INSERT INTO x SELECT randomblob ( 10 ) FROM x ; INSERT OR IGNORE INTO x SELECT x * 10 , x FROM x ; CREATE TABLE x AS SELECT x , 10 AS y FROM x WHERE x % 10 != 10 ORDER BY x ; INSERT INTO x SELECT str ( x + 10 ) FROM x ; INSERT INTO x ( x , x , x , x ) VALUES ( 10 , 'y' , 'y' , 'y' ) ; SELECT x FROM x WHERE x > 'y' ; DELETE FROM x WHERE x IN ( 10 , 10 ) ; SELECT sum ( x + length ( x ) ) FROM x WHERE x IN ( 10 , 10 , 10 ) AND x IS NULL ; CREATE TABLE x ( x , x , x , x INTEGER PRIMARY KEY ) ; INSERT INTO x ( x , x , x , x ) VALUES ( 10 , 10 , 10 , 10 ) ,( 10 , 10 , 10 , 10 ) ; SELECT * FROM x WHERE x <= 'y' ORDER BY x DESC ; DELETE FROM x WHERE x IN ( SELECT x FROM x ) ; SELECT CAST ( ( SELECT x FROM x WHERE 10 = x ) AS INT ) FROM x WHERE 10 = x ; CREATE VIEW x AS SELECT 10 , 10 ; CREATE TRIGGER x AFTER INSERT ON x BEGIN SELECT 10 ; END ; SELECT x , x , x , 'y' FROM x ; UPDATE x SET x = 'y' , x = 'y' WHERE x = 'y' ; UPDATE x SET x = 'y' , x = 'y' , x = 'y' WHERE x = 'y' ; SELECT * FROM x , x ; CREATE TABLE x ( x INTEGER PRIMARY KEY , x NOT NULL ) ; CREATE TABLE x ( x INTEGER PRIMARY KEY , x , x , x , x , x , x ) ; SELECT * FROM x WHERE likelihood ( x = , 0.1 ) AND x BETWEEN AND ; CREATE TABLE x ( x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x ) ; CREATE INDEX x ON x ( x , x , x , x , x , x , x , x , x , x ) ; SELECT x FROM SELECT count ( * ) AS a FROM x WHERE x == 10 ; INSERT INTO x VALUES ( 10 ) ,( 10 ) ; INSERT INTO x VALUES ( 10 ) ,( 10 ) ,( 'y' ) ; CREATE VIEW x ( x , x ) AS SELECT x , 10 FROM x UNION ALL SELECT x , 10 FROM x ; SELECT count ( * ) FROM x WHERE x != 10 ; CREATE INDEX x ON x ( x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x ) ; CREATE TABLE x ( x INTEGER PRIMARY KEY , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x ) ; SELECT * FROM x ORDER BY x , x ; UPDATE x SET x = randstr ( 10 , 10 ) ; INSERT INTO x . x SELECT * FROM x . x ; UPDATE x . x SET x = randstr ( 10 , 10 ) WHERE x >= 10 ; UPDATE x SET x = randstr ( 10 , 10 ) WHERE x >= 10 ; UPDATE x . x SET x = 'y' WHERE x = 10 ; SELECT x FROM x . x WHERE x = 10 ; UPDATE x SET x = randomblob ( 10 ) ; INSERT INTO x VALUES ( 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 ) ; SELECT * , 'y' FROM x ; SELECT sqlite_compileoption_used ( 'y' ) ; SELECT sqlite_compileoption_used ( x ) ; SELECT sqlite_compileoption_used () ; SELECT sqlite_compileoption_used ( NULL ) ; SELECT sqlite_compileoption_used ( 'y' , 10 ) ; SELECT sqlite_compileoption_used ( 10 ) ; SELECT sqlite_compileoption_used ( 0.1 ) ; SELECT sqlite_compileoption_get () ; SELECT sqlite_compileoption_get ( 10 , 10 ) ; SELECT sqlite_compileoption_used ( sqlite_compileoption_get ( 10 ) ) ; SELECT sqlite_compileoption_get ( 10 ) ; INSERT INTO x VALUES ( 0.1 ) ; INSERT INTO x ( x , x ) VALUES ( 'y' , 'y' ) ; INSERT INTO x ( x , x ) VALUES ( 10 , 'y' ) ,( 10 , 'y' ) ; INSERT INTO x ( x ) VALUES ( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ; CREATE INDEX x ON x ( x ) WHERE datetime ( x , x ) IS NOT NULL ; INSERT INTO x ( x ) VALUES ( 0.1 ) ; INSERT INTO x ( x , x ) VALUES ( 0.1 , 'y' ) ; INSERT INTO x ( x , x ) VALUES ( 'y' , 0.1 ) ; CREATE TABLE x ( x , x AS( x + julianday ( 'y' ) ) ) ; SELECT x , quote ( substr ( x , 10 , 10 ) ) FROM x 'y' ORDER BY x ; SELECT x , quote ( substr ( x , 10 , 10 ) ) FROM x WHERE x = 10 ; SELECT x , quote ( substr ( x , 10 , 10 ) ) FROM x 'y' ; INSERT INTO x ( x , x , x ) VALUES ( 10 , 'y' , 10 ) ,( 10 , 'y' , 10 ) ; INSERT INTO x ( x ) SELECT x FROM x WHERE x = 10 ; UPDATE x SET x = ( SELECT x FROM x ) WHERE x = 10 ; DELETE FROM x WHERE x < 10 ; CREATE TABLE x ( x INT UNIQUE , x INT ) ; SELECT * FROM x WHERE x = 'y' AND x = 'y' ; DELETE FROM x WHERE x = 'y' AND x = 'y' ; CREATE TABLE x ( x INTEGER PRIMARY KEY , x INT ) ; DELETE FROM x WHERE x = 'y' OR x = 'y' ; DELETE FROM x WHERE x = 10 OR x > 10 ; INSERT INTO x ( x , x , x ) SELECT x + 10 , 10 , x FROM x ; INSERT INTO x ( x , x , x ) SELECT x + 10 , 10 , x FROM x WHERE x = 10 ; DELETE FROM x WHERE EXISTS ( SELECT 10 FROM x AS v WHERE x = x + 10 ) ; DELETE FROM x WHERE x = 10 OR x = 10 ; UPDATE x SET x = ( SELECT x FROM x WHERE x = 'y' ) WHERE x = 'y' ; DELETE FROM x WHERE x IN ( 10 , 10 , 10 ) ; INSERT INTO x SELECT x + 10 , x + 10 FROM x ; SELECT x FROM x WHERE x > 10 AND x < 10 ; SELECT x FROM x WHERE x >= 10 AND x < 10 ; SELECT x FROM x WHERE x > 10 AND x <= 10 ; SELECT x FROM x WHERE x >= 10 AND x <= 10 ; INSERT INTO x VALUES ( 10 , NULL , NULL , 0.1 ) ; SELECT x FROM x WHERE x >= 10 ORDER BY x ; SELECT x FROM x WHERE x > 10 ORDER BY x ; SELECT x FROM x WHERE x = 10 AND x > 'y' ; SELECT x FROM x WHERE x = 10 AND x >= 'y' ; SELECT x FROM x WHERE x = 10 AND x < 'y' ; SELECT x FROM x WHERE x = 10 AND x <= 'y' ; SELECT x CONCAT x CONCAT x CONCAT x FROM x ORDER BY x , x , x , x ; SELECT x CONCAT x CONCAT x CONCAT x FROM x ORDER BY x DESC , x ASC , x DESC , x ASC ; SELECT x CONCAT x CONCAT x CONCAT x FROM x ORDER BY x ASC , x DESC , x ASC , x DESC ; CREATE TABLE x ( x INTEGER PRIMARY KEY , x , x , x , x ) ; INSERT INTO x VALUES ( 10 , NULL , NULL , NULL , NULL ) ; INSERT INTO x VALUES ( 10 , 0.1 , 0.1 , 0.1 , 0.1 ) ; INSERT INTO x VALUES ( 10 , 'y' , 'y' , 'y' , 'y' ) ; SELECT x FROM x ORDER BY x DESC ; SELECT x FROM x WHERE x > 10 ; SELECT x FROM x WHERE x IN ( 10 , 10 ) AND x > 10 AND x < 'y' ; CREATE TABLE x AS SELECT x AS a , x AS b FROM x ; CREATE TABLE x ( x PRIMARY KEY NOT NULL , x NOT NULL ) ; CREATE TABLE x ( x , x NOT NULL , x NOT NULL , x NOT NULL ) ; SELECT ( SELECT DISTINCT x FROM x AS i ) FROM x AS o ORDER BY x ; SELECT quote ( x ) FROM x ORDER BY 10 ; INSERT INTO x ( x ) VALUES ( 10 ) ,( 10 ) ,( 10 ) ,( 10 ) ,( 10 ) ,( 10 ) ,( 10 ) ,( 10 ) ,( 10 ) ; SELECT DISTINCT x FROM x ORDER BY x ASC ; SELECT DISTINCT x FROM x ORDER BY x DESC ; SELECT DISTINCT x FROM x ORDER BY x ; SELECT ( SELECT 'y' UNION SELECT DISTINCT max ( x ) ORDER BY 10 ) FROM x ; SELECT * , 'y' FROM x ORDER BY x , x ; CREATE TABLE x ( x TEXT UNIQUE NOT NULL ) ; SELECT * , 'y' FROM x ORDER BY 10 , 10 , 10 , 10 , 10 ; CREATE TABLE x ( x , x , x , x , x , x , x , x , x , x ) ; INSERT INTO x VALUES ( 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 ) ; SELECT DISTINCT x , x , x FROM x WHERE x = 10 AND x = 10 ; SELECT DISTINCT x , x , x , x FROM x WHERE x = 10 AND x = 10 ; SELECT DISTINCT x , x , x , x , x FROM x WHERE x = 10 AND x = 10 ; SELECT DISTINCT x , x , x , x , x , x FROM x WHERE x = 10 AND x = 10 ; CREATE TABLE x ( x INT , x INT ) ; INSERT INTO x ( x , x ) VALUES ( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ; SELECT DISTINCT x , x FROM x , x ; SELECT DISTINCT x , x + 10 FROM x ; SELECT DISTINCT x , x , x FROM x ; SELECT DISTINCT x , x , x FROM x WHERE x = 10 ; INSERT INTO x VALUES ( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ; SELECT DISTINCT x FROM x , x WHERE x = x AND x != 10 ; SELECT DISTINCT x FROM x , x WHERE x = x AND x != 10 ORDER BY x DESC ; SELECT DISTINCT x FROM x , x WHERE x = x ; INSERT INTO x ( x ) VALUES ( 10 ) ,( 10 ) ,( 10 ) ,( 10 ) ,( 10 ) ,( 10 ) ,( 10 ) ,( 10 ) ,( 10 ) ,( 10 ) ,( 10 ) ; SELECT DISTINCT x , x , x FROM x CROSS JOIN x ORDER BY x ; INSERT INTO x ( x ) VALUES ( NULL ) ,( NULL ) ,( NULL ) ,( NULL ) ,( NULL ) ,( NULL ) ,( NULL ) ,( NULL ) ,( NULL ) ,( NULL ) ,( NULL ) ; SELECT group_concat ( DISTINCT x , x ) FROM x ; SELECT * FROM x WHERE x IN ( 10 , 10 ) ; INSERT INTO x VALUES ( 'y' , 'y' , 'y' , 'y' , 'y' , 'y' ) ; CREATE TABLE x ( x INTEGER PRIMARY KEY , x , x UNIQUE ) ; CREATE TABLE x ( x INTEGER PRIMARY KEY , x TEXT , x INTEGER ) ; INSERT INTO x VALUES ( 10 , 'y' , NULL ) ; CREATE TABLE x ( x TEXT , x INTEGER PRIMARY KEY ) ; CREATE TABLE x ( x INTEGER PRIMARY KEY , x TEXT , x TEXT ) ; INSERT INTO x VALUES ( 'y' , 10 ) ,( 'y' , 10 ) ,( 'y' , 10 ) ,( 10 , 10 ) ; INSERT INTO x VALUES ( 'y' , 'y' ) ,( 'y' , 'y' ) ,( 'y' , 'y' ) ; DELETE FROM x WHERE x IN ( 'y' , 'y' ) ; SELECT my_changes ( 'y' ) ; INSERT INTO x VALUES ( 'y' ) ,( 'y' ) ; UPDATE x SET x = my_changes ( 'y' ) ; UPDATE x SET x = changes () ; SELECT 'y' ; UPDATE x SET x = x + 10 WHERE x % 10 ; CREATE TABLE x ( x FLOAT , x INTEGER ) ; INSERT INTO x VALUES ( 'y' , 10 , 'y' ) ; SELECT quote ( x ) , quote ( x ) , quote ( x ) FROM x ORDER BY x DESC LIMIT 10 ; SELECT quote ( x ) , quote ( x ) FROM x ORDER BY x DESC LIMIT 10 ; SELECT quote ( x ) , quote ( x ) , quote ( x ) , quote ( x ) , quote ( x ) , quote ( x ) , quote ( x ) , quote ( x ) , quote ( x ) , quote ( x ) , quote ( x ) FROM x ORDER BY x DESC LIMIT 10 ; SELECT quote ( x ) , quote ( x ) , quote ( x ) , quote ( x ) , quote ( x ) FROM x ; SELECT quote ( x ) , quote ( x ) FROM x ; SELECT quote ( x ) , quote ( x ) , quote ( x ) FROM x ; SELECT x , x , x FROM x ORDER BY x DESC LIMIT 10 ; INSERT INTO x VALUES ( 'y' , 'y' , 'y' , 'y' ) ; CREATE TABLE x ( x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x ) ; CREATE TABLE x ( x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x ) ; CREATE TABLE x ( x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x ) ; CREATE TABLE x ( x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x ) ; INSERT INTO x VALUES ( 0.1 , 'y' ) ; CREATE TABLE x ( x , x INTEGER PRIMARY KEY , x ) ; INSERT INTO x VALUES ( 10 , NULL , 10 ) ; UPDATE x SET x = NULL WHERE x = 10 ; CREATE TABLE x ( x , x INT PRIMARY KEY NOT NULL , x ) ; INSERT INTO x VALUES ( 0.1 , 0.1 ) ; CREATE TABLE x ( x TEXT , x INTEGER CHECK( x > 10 ) ) ; CREATE TABLE x ( x CHECK( x CONCAT x ) , x ) ; CREATE TABLE x ( x PRIMARY KEY ON CONFLICT ABORT , x ) ; CREATE TABLE x ( x PRIMARY KEY ON CONFLICT ROLLBACK , x ) ; CREATE TABLE x ( x PRIMARY KEY ON CONFLICT IGNORE , x ) ; CREATE TABLE x ( x PRIMARY KEY ON CONFLICT FAIL , x ) ; CREATE TABLE x ( x PRIMARY KEY ON CONFLICT REPLACE , x ) ; CREATE TABLE x ( x , x NOT NULL ON CONFLICT ABORT ) ; CREATE TABLE x ( x , x NOT NULL ON CONFLICT ROLLBACK ) ; CREATE TABLE x ( x , x NOT NULL ON CONFLICT IGNORE ) ; CREATE TABLE x ( x , x NOT NULL ON CONFLICT FAIL ) ; CREATE TABLE x ( x , x NOT NULL ON CONFLICT REPLACE ) ; CREATE TABLE x ( x , x NOT NULL ) ; INSERT INTO x SELECT ( ( x % 10 ) * x + 10 ) , 'y' FROM x ; CREATE TABLE x ( x , x INTEGER PRIMARY KEY ) ; CREATE TABLE x . x ( x , x ) ; INSERT INTO x . x VALUES ( 10 , 10 ) ; DELETE FROM x . x WHERE x > 10 ; SELECT count ( * ) FROM x . x UNION ALL SELECT count ( * ) FROM x . x ; SELECT count ( * ) FROM x . x ; CREATE VIEW x AS SELECT * FROM x AS x , x AS y ; SELECT CASE 10 WHEN 10 THEN 'y' WHEN 10 THEN 'y' ELSE 'y' END ; INSERT INTO x VALUES ( 'y' , 'y' , 10 , 0.1 ) ; SELECT CASE NULL WHEN 'y' THEN 'y' WHEN 'y' THEN 'y' ELSE 'y' END ; INSERT INTO x VALUES ( 10 , 10 , 'y' , 10 , 'y' , 'y' ) ; SELECT typeof ( x ) , x , typeof ( x ) , x , typeof ( x ) , x FROM x ; SELECT CASE WHEN NULL THEN 'y' ELSE 'y' END ; SELECT CASE WHEN 0.1 THEN 'y' ELSE 'y' END ; SELECT CASE WHEN 10 THEN 'y' ELSE 'y' END ; SELECT CASE WHEN 'y' THEN 'y' ELSE 'y' END ; CREATE TABLE x ( x , x , x , x , x ) ; INSERT INTO x SELECT * FROM x WHERE x = 'y' ; INSERT INTO x SELECT x FROM x ; INSERT INTO x . x SELECT x FROM x . x ; INSERT INTO x VALUES ( NULL , 0.1 ) ; INSERT INTO x VALUES ( 10 , NULL , 0.1 ) ; INSERT INTO x VALUES ( 'y' , 10 , 'y' , 'y' ) ; INSERT INTO x VALUES ( 'y' , 0.1 , 0.1 , NULL ) ; INSERT INTO x VALUES ( 'y' , 10 , 'y' , 0.1 ) ; INSERT INTO x VALUES ( 'y' , NULL , 0.1 , NULL ) ; INSERT INTO x VALUES ( 10 , 'y' , 'y' , 0.1 ) ; INSERT INTO x VALUES ( 10 , 10 , 0.1 , NULL ) ; INSERT INTO x VALUES ( 10 , NULL , 'y' , 'y' ) ; INSERT INTO x VALUES ( 10 , NULL , 0.1 , NULL ) ; INSERT INTO x VALUES ( 10 , 0.1 , 0.1 ) ; INSERT INTO x VALUES ( 0.1 , 0.1 , 'y' ) ; INSERT INTO x VALUES ( NULL , 10 , 'y' ) ; INSERT INTO x VALUES ( 0.1 , 10 ) ; CREATE TABLE x ( x PRIMARY KEY , x TEXT ) ; CREATE TABLE x ( x TEXT , x INTEGER , x ) ; INSERT INTO x VALUES ( 10 , 0.1 , NULL ) ; INSERT INTO x VALUES ( 'y' , 10 , 0.1 ) ; INSERT INTO x VALUES ( 'y' , 10 , NULL ) ; CREATE TABLE x ( x , x TEXT ) ; INSERT INTO x SELECT * FROM x WHERE x < 10 ; INSERT INTO x VALUES ( 10 , 10 ) ,( 10 , 10 ) ; INSERT OR REPLACE INTO x VALUES ( 'y' , 'y' ) ; CREATE TABLE x ( x , x UNIQUE ) ; INSERT INTO x . x VALUES ( 10 , 'y' ) ; DELETE FROM x . x ; INSERT INTO x . x VALUES ( NULL , 'y' ) ; INSERT INTO x ( x , x , x , x ) VALUES ( 10 , 10 , 10 , 10 ) ; SELECT 'y' , x FROM x . x WHERE x = 'y' ; SELECT 'y' , x FROM x WHERE x = 'y' ; CREATE TABLE x ( x PRIMARY KEY , x UNIQUE ) ; INSERT INTO x SELECT x + 10 , randomblob ( 10 ) FROM x ; DELETE FROM x WHERE x % 10 ; INSERT INTO x SELECT x , x FROM x WHERE x % 10 ; UPDATE x SET x = randomblob ( 10 ) WHERE ( x % 10 ) == 10 ; VACUUM INTO 'file_name' ; SELECT x , x FROM x . x ; UPDATE x SET x = x , x = random () ; SELECT count ( * ) FROM x , x , x , x , x , x , x ; SELECT count ( * ) FROM x , x LEFT JOIN x ; SELECT count ( * ) FROM x , x LEFT JOIN x , x ; SELECT * FROM x WHERE x IN ( 'y' , 'y' ) ; SELECT 10 FROM x . x LIMIT 10 ; CREATE TABLE x ( x INT , x INT , x CHAR(100) ) ; SELECT count ( * ) , max ( x ) FROM x ; INSERT INTO x SELECT x , x + 10 FROM x WHERE x < 10 ; SELECT x , test_eval ( 'y' CONCAT x ) , x FROM x ; UPDATE x SET x = 10 , x = 10 , x = 10 ; CREATE TABLE x ( x UNIQUE , x UNIQUE , x UNIQUE ) ; INSERT INTO x ( x , x ) SELECT randstr ( 10 , 10 ) , 10 FROM x ; UPDATE x SET x = x , x = 10 ; INSERT INTO x ( x ) SELECT randstr ( 10 , 10 ) FROM x ; SELECT 10 ; INSERT INTO x VALUES ( 10 ) ,( 10 ) ,( NULL ) ,( 0.1 ) ,( 'y' ) ,( 'y' ) ; INSERT INTO x SELECT randomblob ( 10 ) , randomblob ( 10 ) FROM x ; INSERT INTO x VALUES ( 10 ) ,( 10 ) ,( 10 ) ,( 10 ) ,( 10 ) ,( 10 ) ,( 10 ) ,( 10 ) ,( 10 ) ; SELECT sum ( x ) FILTER( WHEN x > 10 ) , sum ( x ) FILTER( WHEN x > 10 ) , sum ( x ) FILTER( WHEN x > 10 ) , sum ( x ) FILTER( WHEN x > 10 ) , sum ( x ) FILTER( WHEN x > 10 ) , sum ( x ) FILTER( WHEN x > 10 ) , sum ( x ) FILTER( WHEN x > 10 ) , sum ( x ) FILTER( WHEN x > 10 ) , sum ( x ) FILTER( WHEN x > 10 ) , sum ( x ) FILTER( WHEN x > 10 ) FROM x ; CREATE VIEW x AS SELECT sum ( x ) FILTER( WHEN x > 10 ) , sum ( x ) FILTER( WHEN x > 10 ) , sum ( x ) FILTER( WHEN x > 10 ) , sum ( x ) FILTER( WHEN x > 10 ) , sum ( x ) FILTER( WHEN x > 10 ) , sum ( x ) FILTER( WHEN x > 10 ) , sum ( x ) FILTER( WHEN x > 10 ) , sum ( x ) FILTER( WHEN x > 10 ) , sum ( x ) FILTER( WHEN x > 10 ) , sum ( x ) FILTER( WHEN x > 10 ) FROM x ; SELECT x , max ( x ) FILTER( WHEN x = 'y' ) FROM x ; SELECT x , x , max ( x ) FILTER( WHEN x = 'y' ) FROM x GROUP BY x ; SELECT avg ( x ) FILTER( WHEN x != 10 ) AS h FROM x GROUP BY x ORDER BY x ; SELECT avg ( x ) FILTER( WHEN x != 10 ) AS h FROM x GROUP BY x ORDER BY ( x + 0.1 ) ; SELECT x , avg ( x ) FILTER( WHEN x != 10 ) AS h FROM x GROUP BY x ORDER BY avg ( x ) ; INSERT INTO x VALUES ( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , NULL ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , NULL ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , NULL ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ; SELECT x / 10 , sum ( x ) FILTER( WHEN x % 10 = 10 ) , sum ( x ) FILTER( WHEN x % 10 = 10 ) , sum ( x ) FILTER( WHEN x % 10 = 10 ) , sum ( x ) FILTER( WHEN x % 10 = 10 ) , sum ( x ) FILTER( WHEN x % 10 = 10 ) FROM x GROUP BY ( x / 10 ) ORDER BY 10 ; CREATE TABLE x ( x TEXT PRIMARY KEY , x TEXT ) ; SELECT 10 , x FROM x ; INSERT INTO x VALUES ( 10 , NULL ) ,( 10 , 10 ) ,( 10 , 10 ) ; INSERT OR REPLACE INTO x ( x , x , x ) VALUES ( 10 , NULL , 'y' ) ; INSERT OR REPLACE INTO x ( x , x , x ) VALUES ( 10 , 10 , 'y' ) ; CREATE UNIQUE INDEX x ON x ( x ) WHERE x < 10 ; SELECT x , typeof ( x ) FROM x ; CREATE TABLE x ( x INT UNIQUE ) ; CREATE TABLE x ( x TEXT PRIMARY KEY ) ; CREATE VIEW x AS SELECT x AS y FROM x ; INSERT INTO x VALUES ( 10 , 10 , 'y' , 'y' , 'y' ) ; CREATE TABLE x ( x , x PRIMARY KEY ) ; REPLACE INTO x ( x , x , x , x ) VALUES ( 10 , 10 , 10 , 10 ) ; CREATE TABLE x . x ( x PRIMARY KEY ) ; UPDATE x SET x = x + 10 , x = x + 10 ; CREATE TABLE x ( x , x PRIMARY KEY , x ) ; INSERT INTO x VALUES ( 10 , NULL , NULL ) ; INSERT INTO x VALUES ( NULL , 10 , 10 , 10 ) ; INSERT INTO x VALUES ( NULL , 'y' , 10 , 'y' ) ; INSERT INTO x VALUES ( 10 , 'y' , 10 , 'y' ) ; UPDATE x SET x = 10 , x = 'y' WHERE x = 10 ; INSERT INTO x VALUES ( 'y' , 10 , 'y' , NULL ) ; INSERT INTO x VALUES ( 'y' , 10 , 'y' , 10 ) ; INSERT INTO x VALUES ( 10 , 'y' , 10 , NULL ) ; INSERT INTO x VALUES ( 10 , 'y' , 10 , 10 ) ; INSERT INTO x VALUES ( NULL , 'y' ) ; INSERT OR FAIL INTO x VALUES ( 10 ) ,( 10 ) ; INSERT OR REPLACE INTO x VALUES ( 10 , 'y' ) ; INSERT INTO x VALUES ( 10 , 'y' , 'y' , 'y' , NULL ) ; CREATE TABLE x ( x INTEGER PRIMARY KEY , x , x , x ) ; SELECT sum ( x ) , count ( x ) , round ( avg ( x ) , 10 ) , min ( x ) , max ( x ) , count ( * ) FROM x ; SELECT max ( 'y' CONCAT x CONCAT 'y' ) FROM x ; SELECT min ( 'y' CONCAT x CONCAT 'y' ) FROM x ; SELECT typeof ( random () ) ; SELECT randomblob ( 10 ) IS NOT NULL ; SELECT typeof ( randomblob ( 10 ) ) ; SELECT testfunc ( NULL , NULL ) ; SELECT testfunc ( 'y' , 'y' , 'y' , 10 ) ; SELECT testfunc ( 'y' , 'y' , 'y' , NULL ) ; SELECT testfunc ( 'y' , 'y' , 'y' , 0.1 ) ; SELECT testfunc ( 'y' , 'y' , 'y' , 10 , 'y' , 'y' , 'y' , NULL , 'y' , 'y' , 'y' , 0.1 , 'y' , 'y' , 'y' , 10 , 'y' , 'y' , 'y' , NULL , 'y' , 'y' , 'y' , 0.1 ) ; SELECT sqlite_version ( * ) ; SELECT test_destructor ( 'y' ) , test_destructor_count () ; SELECT test_destructor_count () ; SELECT min ( test_destructor ( x ) ) , max ( test_destructor ( x ) ) FROM x ; SELECT test_auxdata ( 'y' ) ; SELECT test_auxdata ( 'y' ) FROM x ; SELECT test_auxdata ( 'y' , 10 ) FROM x ; SELECT test_auxdata ( 'y' , x ) FROM x ; SELECT test_auxdata ( 'y' CONCAT 'y' , x ) FROM x ; SELECT testfunc1 ( 10 , 10 , 10 ) ; SELECT sum ( x ) , total ( x ) FROM x ; SELECT sum ( x ) FROM SELECT 10 AS x UNION ALL SELECT 10 AS x ; SELECT abs ( 10 ) ; SELECT 'y' MATCH 'y' ; SELECT typeof ( group_concat ( x , 'y' ) ) FROM SELECT 'y' AS x UNION ALL SELECT 'y' ; SELECT nullx_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789 ( 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 ) ; SELECT nullx_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789 ( 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 ) ; SELECT nullx_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_12345678a ( 10 ) ; SELECT nullx_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789a ( 10 ) ; CREATE TABLE x ( x , x , x , x , x , x , x , x , x ) ; SELECT typeof ( x ) , typeof ( x ) , typeof ( x ) , typeof ( x ) , typeof ( x ) , typeof ( x ) , typeof ( x ) FROM x ; SELECT length ( x ) , length ( x ) , length ( x ) , length ( x ) FROM x ; SELECT quote ( x ) , quote ( x ) , quote ( x ) , quote ( x ) FROM x ; SELECT test_frombind ( 10 , 10 , , 10 ) ; SELECT test_frombind ( 10 , ( ) , 10 , + 10 ) ; CREATE VIEW x ( x ) AS SELECT testdirectonly ( 10 ) ; SELECT * FROM SELECT testdirectonly ( 10 ) AS v33 ; SELECT likelihood ( 10 , 0.1 ) ; SELECT likelihood ( 0.1 , 0.1 ) ; SELECT likelihood ( NULL , 0.1 ) ; SELECT likelihood ( 'y' , 0.1 ) ; SELECT likelihood ( 10 , 0.1 ) , likelihood ( 10 , 0.1 ) ; SELECT likelihood ( 10 , 0.1 + 0.1 ) ; SELECT unlikely ( 10 ) ; SELECT unlikely ( 0.1 ) ; SELECT unlikely ( NULL ) ; SELECT unlikely ( 'y' ) ; SELECT likely ( CAST ( 10 AS INT ) ) == 'y' ; SELECT unlikely ( CAST ( 10 AS INT ) ) == 'y' ; SELECT likelihood ( CAST ( 10 AS INT ) , 0.1 ) == 'y' ; SELECT likely ( 10 ) ; SELECT likely ( 0.1 ) ; SELECT likely ( NULL ) ; SELECT likely ( 'y' ) ; SELECT tointeger ( NULL ) ; SELECT tointeger ( 'y' ) ; SELECT tointeger ( 10 ) ; SELECT tointeger ( 10 - 10 ) ; SELECT tointeger ( 10 + 10 ) ; SELECT toreal ( NULL ) ; SELECT toreal ( 'y' ) ; SELECT toreal ( 10 ) ; SELECT toreal ( 10 - 10 ) ; SELECT toreal ( 10 + 10 ) ; SELECT toreal ( tointeger ( 10 ) - 10 ) ; SELECT toreal ( tointeger ( 10 ) ) ; SELECT toreal ( tointeger ( 10 ) + 10 ) ; CREATE TABLE x ( x INTEGER CHECK( tointeger ( x ) IS NOT NULL ) ) ; INSERT INTO x ( x ) VALUES ( NULL ) ; SELECT tointeger ( toreal ( 'y' ) ) ; SELECT tointeger ( toreal ( 10 ) ) ; SELECT tointeger ( toreal ( 10 - 10 ) ) ; SELECT tointeger ( toreal ( 10 + 10 ) ) ; INSERT INTO x VALUES ( 10 , 'y' , 'y' , 10 ) ; INSERT INTO x VALUES ( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ; CREATE TABLE x ( x AS( TYPEOF ( x ) ) , x ) ; CREATE TABLE x ( x AS( typeof ( x ) ) , x ) ; INSERT INTO x ( x , x , x ) VALUES ( 10 , 'y' , 0.1 ) ,( 10 , 'y' , NULL ) ; SELECT x , x , x , 'y' FROM x ORDER BY x ; SELECT x FROM x WHERE x LIKE 'y' OR x = 'y' ORDER BY x ; CREATE INDEX x ON x ( x ) WHERE x BETWEEN 10 AND 10 ; SELECT x FROM x WHERE x = 'y' AND x BETWEEN 10 AND 10 ; UPDATE x SET x = x + 10 WHERE x < 10 ; SELECT x , x , 'y' FROM x ORDER BY x ; INSERT INTO x VALUES ( 10 , 'y' , 'y' ) ,( 10 , 10 , 10 ) ; UPDATE x SET x = x , x = x ; UPDATE x SET x = x , x = x + 10 ; REPLACE INTO x ( x , x , x ) VALUES ( 10 , 10 , 10 ) ,( 10 , 10 , 10 ) ; CREATE TABLE x ( x NOT NULL AS( x ) , x ) ; REPLACE INTO x ( x ) VALUES ( NULL ) ; CREATE TABLE x ( x GENERATED ALWAYS AS( 10 ) , x UNIQUE , x UNIQUE ) ; SELECT quote ( 10 = x OR x BETWEEN x AND 10 ) FROM x ; SELECT 10 FROM x WHERE 10 = x OR x BETWEEN x AND 10 ; CREATE TABLE x ( x , x AS( x + x ) , x AS( x ) CHECK( x ) ) ; UPDATE x SET x = NULL ; INSERT INTO x VALUES ( 'y' , 'y' ) ,( 'y' , 'y' ) ; SELECT typeof ( x ) , x , typeof ( x ) , x , 'y' FROM x ORDER BY x ; UPDATE x SET x = 'y' WHERE x = 10 OR x = 10 ; UPDATE x SET x = x CONCAT 'y' WHERE x = x ; DELETE FROM x WHERE x = x ; INSERT INTO x . x SELECT * FROM x ; DELETE FROM x WHERE x > 10 ; SELECT * FROM x INTERSECT SELECT * FROM x ; SELECT * FROM x EXCEPT SELECT * FROM x ; REPLACE INTO x VALUES ( 10 , 'y' ) ; SELECT ieee754 ( 10 , 10 ) IS NULL ; CREATE TABLE x ( x INTEGER PRIMARY KEY , x , x , x NOT NULL ) ; SELECT x FROM x WHERE x IS NOT NULL ; SELECT x , x , x , x FROM x EXCEPT SELECT x , x , x , x FROM x ; INSERT INTO x ( x , x , x , x , x ) VALUES ( 10 , 'y' , 10 , 10 , NULL ) ; UPDATE x SET x = 10 WHERE x IN ( 10 , 10 , 10 ) ; SELECT x FROM x WHERE x IN ( SELECT x FROM x ) ; SELECT x FROM x WHERE x IN ( 10 ) ; SELECT * FROM x WHERE x IN ( 10 ) ; SELECT * FROM x WHERE x IN ( 'y' ) ; SELECT * FROM x WHERE x IN ( SELECT x , x FROM x UNION ALL SELECT x , x FROM x ) ; SELECT * FROM x WHERE x IN ( SELECT x , x FROM x UNION SELECT x , x FROM x ) ; SELECT * FROM x WHERE x IN ( SELECT x , x FROM x EXCEPT SELECT x , x FROM x ) ; SELECT * FROM x WHERE x IN ( SELECT x , x FROM x INTERSECT SELECT x , x FROM x ) ; SELECT * FROM x WHERE x IN ( SELECT x , x FROM x UNION ALL SELECT x FROM x ) ; SELECT * FROM x WHERE x IN ( SELECT x , x FROM x UNION SELECT x FROM x ) ; SELECT * FROM x WHERE x IN ( SELECT x , x FROM x EXCEPT SELECT x FROM x ) ; SELECT * FROM x WHERE x IN ( SELECT x , x FROM x INTERSECT SELECT x FROM x ) ; SELECT * FROM x WHERE x IN ( SELECT x FROM x UNION ALL SELECT x , x FROM x ) ; SELECT * FROM x WHERE x IN ( SELECT x FROM x UNION SELECT x , x FROM x ) ; SELECT * FROM x WHERE x IN ( SELECT x FROM x EXCEPT SELECT x , x FROM x ) ; SELECT * FROM x WHERE x IN ( SELECT x FROM x INTERSECT SELECT x , x FROM x ) ; INSERT INTO x VALUES ( NULL , 10 , 10 ) ; SELECT x IN ( SELECT x FROM x AS inside WHERE x BETWEEN x + 10 AND x + 10 ) FROM x AS outside ORDER BY x ; SELECT * FROM x WHERE x IN ( SELECT x FROM x ) ; SELECT 10 WHERE ( SELECT 10 , 10 ) OR ( 10 IN ( 10 , 10 ) ) ; INSERT INTO x VALUES ( 10 ) ,( 10 ) ,( 10 ) ,( 10 ) ; SELECT x FROM x AS a JOIN x AS b ON x = x WHERE x IN ( 10 , 10 , 10 ) ; SELECT x , x IN ( 10 , 10 , 10 ) FROM x ORDER BY x ; SELECT CASE WHEN x NOT IN ( 10 , 10 , 10 ) THEN 'y' ELSE 'y' END FROM x ; SELECT CASE WHEN x NOT IN ( NULL , 10 , 10 ) THEN 'y' ELSE 'y' END FROM x ; SELECT CASE WHEN x NOT IN ( 10 , 10 , 10 ) OR x = 10 THEN 'y' ELSE 'y' END FROM x ; SELECT CASE WHEN x NOT IN ( NULL , 10 , 10 ) OR x = 10 THEN 'y' ELSE 'y' END FROM x ; SELECT x FROM x WHERE x NOT IN ( 10 , NULL , 10 ) ; CREATE TABLE x ( x INTEGER PRIMARY KEY , x TEXT , x INT ) ; INSERT INTO x VALUES ( 10 , 'y' ) ,( 10 , 'y' ) ; INSERT INTO x VALUES ( 10 , 'y' , 10 ) ,( 10 , 'y' , 10 ) ,( 10 , 'y' , 10 ) ; INSERT INTO x ( x ) VALUES ( 10 ) ,( 10 ) ,( 10 ) ,( 10 ) ,( 10 ) ,( 10 ) ; SELECT * FROM x WHERE x IN ( SELECT x FROM x WHERE ( x % 10 ) == 10 ) ORDER BY x DESC , x ; SELECT 10 IN ( 'y' ) ; SELECT 10 IN ( CAST ( 'y' AS TEXT ) ) ; SELECT * FROM x WHERE 'y' IN ( x ) ; SELECT 10 FROM x WHERE x IN ( 'y' ) ; SELECT x IN ( 'y' ) FROM x ; SELECT x IN ( 'y' , 10 , 10 ) FROM x ; INSERT INTO x ( x , x ) VALUES ( 10 , NULL ) ON CONFLICT ( x , x , x ) ; SELECT x FROM x WHERE x IN ( SELECT x FROM x WHERE x IN ( 10 , 10 ) ) ; CREATE TABLE x ( x INTEGER PRIMARY KEY , x INTEGER , x INTEGER , x VARCHAR(255) ) ; DELETE FROM x WHERE x IN ( SELECT x FROM x WHERE x LIKE 'y' CONCAT 'y' ) ; SELECT * FROM x WHERE x IN ( 'y' , 'y' , 'y' ) ; SELECT x FROM x WHERE x IN ( 10 , 10 ) ; SELECT x FROM x WHERE x IN ( 'y' ) ; SELECT * FROM x WHERE x = 10 AND x IN ( 10 ) ; SELECT * FROM x WHERE x IN ( 10 ) AND x = 10 ; SELECT * FROM x WHERE x IN ( 10 ) AND x IN ( 10 ) ; SELECT * FROM x WHERE x = 10 AND x NOT IN ( 10 ) ; SELECT * FROM x WHERE x NOT IN ( 10 ) AND x = 10 ; SELECT * FROM x WHERE x NOT IN ( 10 ) AND x NOT IN ( 10 ) ; SELECT * FROM x WHERE x NOT IN ( 10 , 10 , 10 ) ; SELECT * FROM x WHERE x NOT IN ( 10 ) ; SELECT x FROM x WHERE x = x ORDER BY x ; SELECT x FROM x WHERE ( x CONCAT 'y' ) = x ORDER BY x ; SELECT x FROM x WHERE ( x CONCAT 'y' ) = ( x CONCAT 'y' ) ORDER BY x ; SELECT x FROM x WHERE x IN ( x ) ORDER BY x ; SELECT x FROM x WHERE ( x CONCAT 'y' ) IN ( x ) ORDER BY x ; SELECT x FROM x WHERE x = x ; SELECT x FROM x WHERE x IN ( x ) ; SELECT 10 FROM x WHERE 'y' IN ( x ) ; SELECT * FROM x , x WHERE x = 10 AND x IN ( x ) ; CREATE TABLE x ( x INTEGER UNIQUE ) ; CREATE TABLE x ( x TEXT UNIQUE ) ; CREATE TABLE x ( x INTEGER , x INTEGER , x TEXT , x TEXT ) ; INSERT INTO x VALUES ( 10 , 10 , 'y' , 'y' ) ,( 10 , 10 , 'y' , 'y' ) ,( 10 , 10 , 'y' , 'y' ) ,( 10 , 10 , 'y' , 'y' ) ,( 10 , 10 , 'y' , 'y' ) ,( 10 , 10 , 'y' , 'y' ) ; SELECT count ( * ) FROM x WHERE x IN ( SELECT DISTINCT x FROM x LIMIT 10 ) ; SELECT count ( * ) FROM x WHERE x IN ( SELECT x FROM x LIMIT 10 ) ; CREATE TABLE x ( x INTEGER PRIMARY KEY , x VARCHAR(500) ) ; CREATE VIEW x ( x ) AS SELECT LOWER ( CAST ( 'y' AS TEXT ) ) FROM x ; SELECT lower ( 'y' ) FROM x WHERE x NOT IN ( 10 , 10 , lower ( 'y' ) ) ; SELECT lower ( 'y' ) FROM x WHERE x != lower ( 'y' ) ; CREATE TABLE x ( x INT UNIQUE , x TEXT ) ; INSERT INTO x ( x , x , x ) VALUES ( 10 , 0.1 , NULL ) ; PRAGMA x ( 10 ) ; CREATE TABLE x ( x INTEGER UNIQUE , x TEXT ) ; INSERT INTO x SELECT x , x FROM x ; UPDATE x SET x = ( SELECT x FROM x WHERE x = x ) ; INSERT INTO x SELECT x CONCAT x , x CONCAT x , x CONCAT x FROM x ; UPDATE x SET x = x , x = x , x = x ; PRAGMA x ( 'y' ) ; SELECT x FROM x WHERE x != 'y' ORDER BY x ; SELECT x FROM x WHERE x = 10 ORDER BY x ; SELECT x FROM x WHERE x = x AND x = x ; INSERT INTO x VALUES ( 'y' , NULL , 10 ) ; INSERT INTO x VALUES ( NULL , 'y' , 10 ) ; SELECT x FROM x ORDER BY x , x ; SELECT x FROM x WHERE x >= 'y' ; SELECT x FROM x WHERE x >= 10 ; SELECT x FROM x WHERE x < 'y' ; SELECT x FROM x WHERE x <= 'y' ; SELECT x FROM x WHERE typeof ( x ) IN ( 'y' , 'y' ) ORDER BY x ; CREATE TABLE x ( x UNIQUE PRIMARY KEY ) ; SELECT count ( * ) FROM x WHERE x = 'y' AND x = 'y' ; CREATE TRIGGER x BEFORE INSERT ON x BEGIN SELECT 10 ; END ; CREATE TABLE x ( x UNIQUE PRIMARY KEY ON CONFLICT ROLLBACK ) ; INSERT INTO x ( x , x ) VALUES ( 'y' , 10 ) ,( 'y' , 10 ) ; SELECT x , x , 'y' FROM x ; INSERT INTO x ( x , x ) VALUES ( 'y' , 'y' ) ,( 'y' , 'y' ) ; INSERT OR IGNORE INTO x ( x ) VALUES ( 0.1 ) ,( 10 ) ; CREATE INDEX x ON x ( x ) WHERE x IS NOT NULL ; SELECT count ( x ) , count ( x ) FROM x ; CREATE INDEX x ON x ( x , x ) WHERE x IS NOT NULL ; CREATE INDEX x ON x ( x , x ) WHERE EXISTS ( SELECT * FROM x ) ; CREATE INDEX x ON x ( x , x ) WHERE x != random () ; CREATE INDEX x ON x ( x , x ) WHERE x NOT LIKE 'y' ; UPDATE x SET x = x ; UPDATE x SET x = NULL WHERE x % 10 != 10 ; UPDATE x SET x = CASE WHEN x % 10 != 10 THEN x END ; DELETE FROM x WHERE x BETWEEN 10 AND 10 ; INSERT INTO x ( x , x ) SELECT x , x FROM x WHERE x < 10 ; UPDATE x SET x = NULL WHERE x % 10 == 10 ; SELECT count ( * ) FROM x WHERE x IS NOT NULL ; CREATE INDEX x ON x ( x ) WHERE x < 10 OR x > 10 ; SELECT x FROM x WHERE x = 10 AND x < 10 ; SELECT x FROM x WHERE x = 10 AND x > 10 ; INSERT INTO x SELECT x , x FROM x WHERE x < 10 ; UPDATE x SET x = 10 WHERE x % 10 != 10 ; CREATE UNIQUE INDEX x ON x ( x ) WHERE x != 10 ; SELECT count ( * ) FROM x WHERE x = 10 ; SELECT count ( * ) FROM x WHERE x BETWEEN 10 AND 10 ; SELECT x + 10 FROM x WHERE x = 'y' ; CREATE INDEX x ON x ( x ) WHERE x = 10 ; SELECT * FROM x LEFT JOIN x ON ( x = 10 ) ORDER BY x ; SELECT * FROM x JOIN x ON ( x = 10 ) ORDER BY x ; CREATE INDEX x ON x ( x ) WHERE x = 'y' ; CREATE INDEX x ON x ( x , x ) WHERE x IN ( 10 , 10 , 10 ) ; INSERT INTO x VALUES ( 10 , 10 , 10 ) ,( 10 , 10 , 10 ) ,( 10 , 10 , 10 ) ,( 10 , 10 , 10 ) ,( NULL , 10 , 10 ) ; UPDATE x SET x = x WHERE x IN ( 10 , 10 , 10 ) ; INSERT INTO x VALUES ( 10 , 10 , 10 ) ,( 10 , 10 , 10 ) ,( 10 , 10 , 10 ) ,( 10 , 10 , 10 ) ; CREATE TABLE x ( x , x , x , x , x INTEGER PRIMARY KEY ) ; INSERT INTO x VALUES ( 10 , 10 , 10 , 10 , 10 ) ,( 10 , 10 , 10 , 10 , 10 ) ,( 10 , 10 , 10 , 10 , 10 ) ,( 10 , 10 , 10 , 10 , 10 ) ; CREATE INDEX x ON x ( x ) WHERE x = 10 AND x = 10 AND x = 10 ; SELECT x FROM x WHERE x = 10 AND x = 10 AND x = 10 ORDER BY x ; SELECT x FROM x WHERE x = 10 AND 10 = x AND x = 10 ORDER BY x DESC ; SELECT x FROM x WHERE x = 10 AND x = 10 ORDER BY x DESC ; CREATE INDEX x ON x ( x ) WHERE x != 10 ; SELECT 'y' , * FROM x WHERE x IN ( SELECT x FROM x ) ; SELECT * FROM x WHERE x OR 10 ; INSERT INTO x ( x , x ) VALUES ( NULL , 'y' ) ; SELECT * FROM x WHERE CASE x WHEN 10 THEN 10 ELSE 10 END ; SELECT x <= x , x >= x FROM x ; SELECT 10 FROM x WHERE x >= x ; SELECT 10 FROM x WHERE x <= x ; SELECT COUNT ( * ) FROM x WHERE x GLOB x ; INSERT INTO x ( x , x , x ) VALUES ( 'y' , 10 , 10 ) ,( 'y' , 10 , 10 ) ,( 'y' , 10 , 10 ) ,( 'y' , 10 , 10 ) ; SELECT * FROM SELECT * FROM x WHERE x = 10 AND x = 'y' , x WHERE x = 'y' ; SELECT * FROM x WHERE x = 10 ORDER BY x , x LIMIT 10 ; SELECT x , x , x FROM x INDEXED BY x WHERE x = 10 AND x = 10 AND x = 10 ; SELECT x , x , x FROM x INDEXED BY x WHERE x = 10 AND x = 10 AND x = 'y' ; CREATE TABLE x ( x INTEGER PRIMARY KEY , x , x TEXT ) ; SELECT * FROM x INDEXED BY x ORDER BY 10 ; SELECT x , x , 'y' FROM x WHERE substr ( x , 10 , 10 ) == 'y' ORDER BY x , x ; SELECT x , x , 'y' FROM x WHERE 'y' == substr ( x , 10 , 10 ) ORDER BY x , x ; SELECT x FROM x WHERE x = 10 AND substr ( x , 10 , 10 ) = 'y' ORDER BY x ; SELECT x , substr ( x , x , 10 ) , 'y' FROM x ORDER BY 10 ; UPDATE x SET x = length ( x ) ; SELECT length ( x ) FROM x ORDER BY length ( x ) ; SELECT length ( x ) FROM x ORDER BY length ( x ) DESC ; INSERT INTO x ( x , x , x , x ) VALUES ( 10 , 'y' , 10 , 10 ) ,( 10 , 'y' , 10 , 10 ) ,( 10 , 'y' , 10 , 10 ) ,( 10 , 'y' , 10 , 10 ) ,( 10 , 'y' , 10 , 10 ) ,( 10 , 'y' , 10 , 10 ) ; CREATE TABLE x ( x , x , x ) ; INSERT INTO x VALUES ( 10 , 10 , 10 ) ; INSERT INTO x SELECT * FROM x WHERE x = 10 ; INSERT INTO x ( x ) SELECT printf ( 'y' , x ) FROM x ; INSERT INTO x VALUES ( 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 ) ; INSERT INTO x ( x , x , x ) VALUES ( 10 , 10 , 10 ) ,( 'y' , 'y' , 'y' ) ,( 10 , 10 , 10 ) ; INSERT INTO x ( x , x , x ) VALUES ( 10 , 10 , 10 ) ,( 10 , 10 , 10 ) ,( 10 , 10 , 10 ) ; INSERT INTO x ( x , x ) VALUES ( 10 , 'y' ) ,( 10 , 'y' ) ,( 10 , 'y' ) ; INSERT INTO x ( x , x , x , x , x ) VALUES ( 10 , 10 , 10 , 10 , 10 ) ; INSERT INTO x ( x , x , x , x , x ) VALUES ( 10 , NULL , NULL , NULL , NULL ) ; INSERT INTO x VALUES ( 10 , 10 , 10 ) ,( 10 , 10 , 10 ) ,( 10 , 10 , 10 ) ; UPDATE x SET x = 10 WHERE ( x IN ( 10 , 10 ) ) = 10 ; INSERT INTO x VALUES ( NULL ) ,( 10 ) ; SELECT 'y' , typeof ( x ) , x FROM x WHERE x < 10 ; SELECT 'y' , typeof ( x ) , x FROM x WHERE x + 10 < 10 ; SELECT x + x , x + x FROM x ORDER BY x + x , x + x ; SELECT 10 IN ( SELECT 10 ) FROM x ; SELECT 10 IN ( SELECT 10 UNION ALL SELECT 10 ) FROM x ; SELECT abs ( 10 + 10 ) IN ( SELECT 10 UNION ALL SELECT 10 ) FROM x ; CREATE TABLE x ( x INT PRIMARY KEY , x INT UNIQUE ) ; REPLACE INTO x ( x , x ) VALUES ( 10 , 10 ) ; REPLACE INTO x VALUES ( 10 , 10 ) ; REPLACE INTO x SELECT 10 , 10 ; CREATE TABLE x ( x INTEGER , x ) ; INSERT INTO x VALUES ( 'y' , 10 ) ,( 'y' , 10 ) ,( 'y' , 10 ) ; SELECT x + 10 , quote ( x + 10 ) FROM x ORDER BY 10 ; UPDATE x SET x = printf ( 'y' , x , x ) ; CREATE TABLE x ( x INTEGER , x INTEGER ) ; SELECT * FROM x WHERE abs ( x ) = 10 OR abs ( x ) = 10 ; INSERT INTO x VALUES ( 10 , 10 ) ,( 10 , 'y' ) ,( 10 , 'y' ) ,( 10 , 0.1 ) ,( 10 , 10 ) ; SELECT x , x FROM x WHERE x IS NULL ; INSERT INTO x SELECT x FROM x WHERE x = 10 ; CREATE TABLE x ( x INTEGER PRIMARY KEY , x UNIQUE ) ; INSERT INTO x SELECT max ( x ) FROM x ; INSERT INTO x ( x , x ) SELECT nullif ( x * 10 + 10 , 10 ) , x + 10 FROM x ; INSERT INTO x SELECT nullif ( x * 10 + 10 , 10 ) , x + 10 FROM x ; INSERT INTO x VALUES ( 10 , 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 , 10 ) ; CREATE TABLE x AS SELECT 'y' AS x ; CREATE TABLE x ( x , x , x , x , x , x , x ) ; INSERT INTO x VALUES ( 10 , 10 , 10 , 10 , 10 , 10 , 10 ) ; INSERT INTO x ( x , x , x , x , x , x , x ) SELECT * FROM x ; INSERT INTO x ( x , x , x ) SELECT 'y' , 10 , 'y' ; REPLACE INTO x SELECT x , 10 FROM x ; REPLACE INTO x SELECT x , x FROM x ; SELECT x , length ( x ) FROM x ; CREATE TABLE x ( x , x UNIQUE , x UNIQUE ) ; INSERT INTO x ( x , x , x ) VALUES ( 10 , 10 , 10 ) ,( 10 , 10 , 10 ) ,( 10 , 10 , 10 ) ,( 10 , 10 , 10 ) ; SELECT * , 'y' FROM x ORDER BY x ; CREATE TABLE x ( x INTEGER PRIMARY KEY , x INT , x INT , x INT ) ; CREATE UNIQUE INDEX x ON x ( x ) WHERE x <= x ; INSERT INTO x SELECT x , count ( * ) FROM x GROUP BY x ; INSERT INTO x SELECT x , count () FROM x GROUP BY x ; INSERT INTO x ( x , x ) SELECT * FROM x ; INSERT INTO x ( x , x , x ) SELECT x , 'y' , x FROM x ; INSERT INTO x SELECT x + ( SELECT max ( x ) FROM x ) , x FROM x ; UPDATE x SET x = 'y' CONCAT x CONCAT 'y' CONCAT x CONCAT 'y' ; INSERT INTO x SELECT x + ( SELECT max ( x ) + 10 FROM x ) , x FROM x ; DELETE FROM x WHERE x != 10 ; INSERT INTO x VALUES ( 10 , 10 , 10 , 10 , 10 , 'y' , 'y' ) ; INSERT INTO x SELECT DISTINCT NULL , x , x , x FROM x LEFT OUTER JOIN x ON x == x AND x == x AND x == x WHERE x IS NULL ; INSERT INTO x SELECT x , 10 FROM x WHERE x = 10 ; INSERT INTO x SELECT ( SELECT x FROM x ) , 10 ; INSERT INTO x ( x ) SELECT 10 UNION ALL SELECT 10 ORDER BY 10 ; INSERT INTO x SELECT x , x + 10 FROM x ; SELECT 'y' , x , x FROM x UNION ALL SELECT 'y' , x , x FROM x ORDER BY x ; SELECT 'y' , x , x FROM x UNION ALL SELECT 'y' , x , x FROM x ORDER BY x , x ; INSERT INTO x ( x ) SELECT 10 FROM x LIMIT 10 ; UPDATE x SET x = randstr ( 10 , 10 ) WHERE ( x % 10 ) == 10 ; INSERT INTO x SELECT randstr ( 10 , 10 ) , randstr ( 10 , 10 ) , x FROM x ; INSERT INTO x SELECT 10 , 10 ; INSERT INTO x SELECT * FROM x LIMIT 10 ; INSERT INTO x SELECT DISTINCT * FROM x ; CREATE TABLE x ( x CHECK( x != 'y' ) ) ; CREATE TABLE x ( x INTEGER PRIMARY KEY ) ; INSERT INTO x VALUES ( 10 ) ; CREATE TABLE x ( x INT ) ; INSERT INTO x VALUES ( 10 ) ; DELETE FROM x ; DELETE FROM x ; CREATE TABLE x ( x INTEGER PRIMARY KEY ON CONFLICT REPLACE , x ) ; CREATE TABLE x ( x INTEGER PRIMARY KEY ON CONFLICT IGNORE , x ) ; CREATE TABLE x ( x INTEGER PRIMARY KEY ON CONFLICT FAIL , x ) ; CREATE TABLE x ( x INTEGER PRIMARY KEY ON CONFLICT ABORT , x ) ; CREATE TABLE x ( x INTEGER PRIMARY KEY ON CONFLICT ROLLBACK , x ) ; INSERT INTO x SELECT * FROM x UNION ALL SELECT * FROM x WHERE EXISTS ( SELECT * FROM x WHERE x = x ) ; SELECT coalesce ( instr ( 'y' , NULL ) , 10 ) ; SELECT coalesce ( instr ( NULL , NULL ) , 10 ) ; SELECT instr ( x , x ) FROM x ; INSERT INTO x SELECT x + 10 , randstr ( 10 , 10 ) FROM x ; INSERT INTO x SELECT x + 10 , x CONCAT 'y' CONCAT x FROM x ; UPDATE x SET x = substr ( x , 10 , 10 ) ; SELECT md5sum ( x CONCAT x ) FROM x ; INSERT INTO x SELECT round ( x / 10 ) , randstr ( 10 , 10 ) , randstr ( 10 , 10 ) FROM x ; SELECT max ( min ( x , x ) ) , min ( max ( x , x ) ) , x FROM x GROUP BY x ORDER BY x ; SELECT * FROM x WHERE x == 10 ; INSERT INTO x VALUES ( 0.1 , 'y' , 'y' ) ; SELECT * FROM x WHERE x == 'y' ; SELECT * FROM x WHERE x > 'y' ; SELECT * FROM x WHERE x > 10 AND x < 10 ; SELECT * FROM x WHERE x >= 'y' AND x < 'y' ; SELECT * FROM x WHERE x == 'y' AND x > 10 ; SELECT * FROM x WHERE 10 < x ; SELECT * FROM x WHERE 10 < x AND 10 >= x ; SELECT * FROM x WHERE x < 10 AND x > 10 ; SELECT * FROM x WHERE x >= 10 ; SELECT x , x , x FROM x WHERE x == 'y' ; INSERT INTO x SELECT NULL , x , x FROM x ; SELECT x FROM x WHERE x = 0.1 + 0.1 ; CREATE TABLE x ( x INTEGER PRIMARY KEY , x INTEGER , x TEXT ) ; SELECT * FROM x WHERE x < x ; SELECT * FROM x WHERE x = x ; SELECT x FROM x WHERE x < 10 ; DELETE FROM x WHERE x = 10 OR x < 10 ; DELETE FROM x WHERE abs ( x ) IS NULL OR abs ( x ) < 10 ; UPDATE x SET x = 'y' WHERE abs ( x ) = 10 ; SELECT intreal ( 10 ) ; SELECT intreal ( 10 ) = 10 , 10 = intreal ( 10 ) ; SELECT intreal ( 10 ) = 0.1 , 0.1 = intreal ( 10 ) ; SELECT typeof ( intreal ( 10 ) ) ; SELECT 'y' CONCAT intreal ( 10 ) CONCAT 'y' ; SELECT max ( 0.1 , intreal ( 10 ) , 0.1 ) , max ( 10 , intreal ( 10 ) , 10 ) ; SELECT max ( 0.1 , intreal ( 10 ) , intreal ( 10 ) , 0.1 ) , max ( 10 , intreal ( 10 ) , intreal ( 10 ) , 10 ) ; INSERT INTO x ( x ) VALUES ( 10 ) ,( 10 ) ; INSERT INTO x VALUES ( 10 , 10 ) ,( 10 , 10 ) ,( 10 , NULL ) ; SELECT x FROM x WHERE x IS NULL ; SELECT x FROM x WHERE 10 ; INSERT INTO x VALUES ( 10 , 10 , 10 , NULL , NULL ) ; INSERT INTO x VALUES ( 10 , 10 , 10 , 10 , NULL ) ; INSERT INTO x VALUES ( 10 , 10 , 10 , NULL , 10 ) ; SELECT x , x , 'y' FROM x , x ON x = x ; SELECT * FROM x AS x NATURAL JOIN x ; SELECT * FROM x NATURAL JOIN x AS y ; SELECT * FROM x AS x INNER JOIN x USING ( b , c ) ; SELECT * FROM x INNER JOIN x AS y USING ( b , c ) ; SELECT * FROM x AS x INNER JOIN x AS y USING ( b , c ) ; SELECT * FROM x INNER JOIN x USING ( b ) ; SELECT * FROM x INNER JOIN x USING ( c ) ; SELECT * FROM x INNER JOIN x USING ( c , b ) ; SELECT * FROM x CROSS JOIN x USING ( b , c ) ; SELECT * FROM x INNER JOIN x USING ( b , c ) ; SELECT * FROM x NATURAL JOIN x NATURAL JOIN x ; SELECT * FROM x NATURAL JOIN x USING ( b ) ; SELECT * FROM x JOIN x ON x = x USING ( b ) ; SELECT * FROM x JOIN x USING ( a ) ; SELECT * FROM x JOIN x USING ( d ) ; SELECT * FROM x JOIN x ON x = x ; SELECT * FROM x LEFT x JOIN x ; SELECT * FROM x NATURAL AWK SED JOIN x ; SELECT * FROM x , x WHERE x < x ; SELECT * FROM x , x WHERE x > x ; CREATE TABLE x ( x INTEGER PRIMARY KEY , x , x , x INTEGER ) ; INSERT INTO x VALUES ( 10 , 'y' , 'y' , NULL ) ; SELECT coalesce ( x , 10 ) FROM x LEFT JOIN x ON x = x ; CREATE VIEW x AS SELECT x , x FROM x , x WHERE x = x ; SELECT * FROM x LEFT JOIN x ON ( x = x ) ; SELECT * FROM x LEFT JOIN SELECT x , x FROM x , x WHERE x = x ON ( x = x ) ; SELECT * FROM x LEFT JOIN SELECT 10 , x , x FROM x AS sub1 ON x = x ; CREATE VIEW x AS SELECT * FROM x WHERE x > 10 ; SELECT * FROM x LEFT JOIN x ; SELECT * FROM x LEFT JOIN SELECT * FROM x ; SELECT * FROM x LEFT JOIN x , x WHERE x = x ; SELECT * FROM SELECT 10 LEFT JOIN SELECT x + 10 FROM x GROUP BY 10 ; CREATE VIEW x AS SELECT x , 10 AS b FROM x ; SELECT * , 'y' FROM x LEFT JOIN x ON x = x WHERE x = 10 ; SELECT * , 'y' FROM x LEFT JOIN x ON x = x WHERE x + 10 = x ; SELECT * , 'y' FROM x LEFT JOIN x ON x = x ORDER BY x ; SELECT * , 'y' FROM x LEFT JOIN x WHERE NOT ( 'y' = 'y' AND x = 10 ) ; INSERT INTO x ( x , x ) VALUES ( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ; SELECT * FROM x LEFT JOIN SELECT abs ( 10 ) AS y FROM x ON x WHERE NOT ( x = 'y' ) ; CREATE VIEW x AS SELECT x FROM x LEFT JOIN x ; CREATE VIEW x ( x ) AS SELECT x FROM x LEFT JOIN x ; SELECT * FROM x LEFT JOIN x WHERE NULL IN ( x ) ; SELECT * FROM x LEFT JOIN x ON ( x = x ) JOIN x ON ( x = coalesce ( x , 10 ) ) ; SELECT * FROM x JOIN x ON ( x = x ) JOIN x ON ( x = x ) ; SELECT x , x FROM x LEFT JOIN x ON ( x = x ) LEFT JOIN x ON ( x = x ) ; SELECT x , x FROM x LEFT JOIN x ON ( x = x ) LEFT JOIN x ON ( x = x + 10 ) ; SELECT DISTINCT x , x FROM x LEFT JOIN x LEFT JOIN x ON ( x = x + 10 ) ; SELECT x , x FROM x LEFT JOIN x LEFT JOIN x ON ( x = x + 10 ) ; SELECT x FROM x LEFT JOIN x USING ( a ) ; SELECT x FROM x LEFT JOIN x ON ( x = x AND x = x AND x = x ) ; CREATE TABLE x ( x , x ) ; INSERT INTO x VALUES ( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ; CREATE TABLE x ( x , x ) ; INSERT INTO x VALUES ( 10 , 10 ) ,( 10 , 10 ) ; CREATE TABLE x ( x ) ; INSERT INTO x VALUES ( 10 ) ; CREATE TABLE x ( x INTEGER PRIMARY KEY , x INTEGER , x INTEGER ) ; CREATE TABLE x ( x NOT NULL ) ; SELECT * FROM x LEFT JOIN x LEFT JOIN x ON x = x ; CREATE TABLE x ( x TEXT NOT NULL , x TEXT ) ; CREATE TABLE x ( x TEXT NOT NULL , x TEXT NOT NULL ) ; SELECT * FROM x LEFT JOIN x JOIN x WHERE x = x ; SELECT count ( x ) FROM x LEFT JOIN x ON x GROUP BY x ; SELECT count ( x ) FROM SELECT * FROM x LEFT JOIN x ON x GROUP BY x ; SELECT * FROM x LEFT JOIN x ON x = 10 OR x = 10 WHERE x IS NULL ; SELECT ifnull ( x , 'y' ) FROM x LEFT JOIN x ON ( x = x ) ; SELECT * FROM x , x WHERE ( x >= 10 OR x < 10 ) AND x IN ( 10 , x ) ORDER BY 10 ; SELECT * FROM x LEFT JOIN x USING ( a ) LEFT JOIN x USING ( a ) ; SELECT x , x FROM x LEFT JOIN x ON x = x LEFT JOIN x ON x = x ; SELECT * FROM x JOIN x USING ( y ) JOIN x USING ( x ) ; SELECT * FROM x JOIN x NATURAL JOIN x ; SELECT * FROM x JOIN x USING ( y ) NATURAL JOIN x ; SELECT * FROM x NATURAL JOIN x JOIN x USING ( x , z ) ; SELECT * FROM x NATURAL JOIN x JOIN x USING ( x ) ; SELECT * FROM x NATURAL JOIN x JOIN x USING ( z ) ; INSERT INTO x SELECT x + 10 , x CONCAT x FROM x ; INSERT INTO x SELECT a_string ( 10 ) , a_string ( 10 ) FROM x ; CREATE TABLE x . x ( x INTEGER ) ; INSERT INTO x . x VALUES ( 10 ) ; INSERT OR IGNORE INTO x . x SELECT * FROM x . x ; INSERT INTO x SELECT randomblob ( 10 ) , randomblob ( 10 ) , randomblob ( 10 ) FROM x ; SELECT last_insert_rowid () ; UPDATE x SET x = x + 10 , x = 10 + last_insert_rowid () ; UPDATE x SET x = 10 + last_insert_rowid () ; DROP TABLE x ; DROP TABLE x ; DROP TRIGGER x ; UPDATE x SET x = last_insert_rowid () WHERE x = 10 ; SELECT changes () , total_changes () ; UPDATE x SET x = x + changes () WHERE x = 10 ; SELECT count () FROM x WHERE x = 10 ; SELECT changes () ; DROP TABLE x ; DROP TABLE x ; DROP TABLE x ; DELETE FROM x WHERE x IS NOT NULL ; SELECT total_changes () ; SELECT x FROM x WHERE x LIKE 'y' ORDER BY 10 ; SELECT x FROM x WHERE x MATCH 'y' ORDER BY 10 ; INSERT INTO x SELECT * FROM x ORDER BY x ; SELECT x FROM x WHERE x LIKE 'y' ORDER BY x ; INSERT INTO x ( x , x ) VALUES ( 'y' , 10 ) ,( 'y' , 10 ) ,( 'y' , 10 ) ,( 'y' , 10 ) ,( 'y' , 10 ) ,( 'y' , 10 ) ,( 'y' , 10 ) ,( 'y' , 10 ) ,( 'y' , 10 ) ,( 'y' , 10 ) ,( 'y' , 10 ) ; INSERT INTO x ( x ) VALUES ( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ; SELECT quote ( x ) FROM x WHERE x LIKE 'y' ORDER BY x ; SELECT quote ( x ) FROM x WHERE x LIKE 'y' ORDER BY x DESC ; SELECT quote ( x ) FROM x WHERE x LIKE 'y' ORDER BY x ASC ; INSERT INTO x ( x ) VALUES ( 'y' ) ,( 10 ) ,( 10 ) ; SELECT x FROM x WHERE x GLOB 'y' ; SELECT * FROM x WHERE ( x LIKE 'y' ) ; SELECT * FROM x WHERE x GLOB 'y' ; SELECT x GLOB 'y' FROM x ; CREATE TABLE x ( x TEXT , x , x , x ) ; CREATE VIEW x AS SELECT * FROM x LIMIT 10 ; SELECT count ( * ) FROM SELECT * FROM x ; CREATE TABLE x AS SELECT * FROM x LIMIT 10 ; SELECT x FROM SELECT x * 10 + x AS z FROM x ORDER BY x LIMIT 10 ORDER BY x LIMIT 10 ; INSERT INTO x SELECT x FROM x ORDER BY x LIMIT 10 OFFSET 10 ; INSERT INTO x SELECT x + ( SELECT max ( x ) FROM x ) FROM x ; SELECT x FROM x ORDER BY x DESC LIMIT 10 OFFSET 10 ; INSERT INTO x SELECT x - x , x + x FROM x WHERE x BETWEEN 10 AND 10 ORDER BY x LIMIT 10 ; INSERT INTO x SELECT x - x , x + x FROM x WHERE x BETWEEN 10 AND 10 ORDER BY x DESC LIMIT 10 ; INSERT INTO x SELECT x - x , x + x FROM x WHERE x ORDER BY x DESC LIMIT 10 ; SELECT * FROM x ORDER BY x LIMIT 10 ; SELECT * FROM x ORDER BY x DESC , x DESC LIMIT 10 ; SELECT count ( * ) , sum ( x ) , sum ( x ) , min ( x ) , max ( x ) , min ( x ) , max ( x ) FROM x ; SELECT * FROM x LIMIT 10 OFFSET 10 ; SELECT x FROM x UNION ALL SELECT x FROM x LIMIT 10 ; SELECT x FROM x UNION ALL SELECT x FROM x LIMIT 10 OFFSET 10 ; SELECT x FROM x UNION ALL SELECT x FROM x ORDER BY 10 LIMIT 10 OFFSET 10 ; SELECT x FROM x UNION SELECT x + 10 FROM x LIMIT 10 OFFSET 10 ; SELECT x FROM x UNION SELECT x + 10 FROM x ORDER BY 10 DESC LIMIT 10 OFFSET 10 ; SELECT x + 10 FROM x EXCEPT SELECT x FROM x LIMIT 10 ; SELECT x + 10 FROM x EXCEPT SELECT x FROM x ORDER BY 10 DESC LIMIT 10 ; SELECT x + 10 FROM x INTERSECT SELECT x FROM x LIMIT 10 ; SELECT x + 10 FROM x INTERSECT SELECT x FROM x LIMIT 10 OFFSET 10 ; SELECT x + 10 FROM x INTERSECT SELECT x FROM x ORDER BY 10 DESC LIMIT 10 OFFSET 10 ; SELECT DISTINCT CAST ( round ( x / 10 ) AS INTEGER ) FROM x LIMIT 10 ; SELECT DISTINCT CAST ( round ( x / 10 ) AS INTEGER ) FROM x LIMIT 10 OFFSET 10 ; SELECT * FROM SELECT * FROM x LIMIT 10 ; SELECT x , x , 'y' FROM x WHERE x IN ( 10 , 10 , 10 , 10 , 10 ) ORDER BY x LIMIT 10 ; INSERT INTO x ( x , x ) VALUES ( 'y' , 10 ) ,( 'y' , 10 ) ,( 'y' , 10 ) ,( 'y' , 10 ) ; SELECT x , x , 'y' FROM x , x WHERE x = 'y' AND x = x ORDER BY x LIMIT 10 ; SELECT x , x , 'y' FROM x WHERE x IN ( 10 , 10 , 10 , 10 , 10 ) ORDER BY x DESC LIMIT 10 ; SELECT * , 'y' FROM x , x WHERE x = x ORDER BY x LIMIT 10 ; SELECT * , 'y' FROM x LEFT JOIN x ON x = x ORDER BY x LIMIT 10 ; SELECT * , 'y' FROM x WHERE x = 10 AND ( x = 10 OR x = 10 ) ORDER BY x DESC ; SELECT * , 'y' FROM x WHERE x = 10 AND ( x = 10 OR x = 10 ) ORDER BY x DESC LIMIT 10 ; INSERT INTO x ( x , x ) VALUES ( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ; SELECT * , 'y' FROM x WHERE x IN ( 10 , 10 , 10 ) ORDER BY x DESC LIMIT 10 ; SELECT x FROM x WHERE x IN ( 10 , 10 , 10 , 10 , 10 ) ORDER BY x DESC LIMIT 10 ; SELECT x FROM x WHERE x IN ( 10 , 10 , 10 , 10 , 10 ) ORDER BY x LIMIT 10 ; CREATE TABLE x ( x INT PRIMARY KEY , x ) ; CREATE TABLE x ( x , x ) ; INSERT INTO x VALUES ( 10 , 10 ) ; SELECT x FROM x , x WHERE x = x AND x <= x ORDER BY x DESC ; INSERT INTO x ( x , x , x ) VALUES ( 'y' , 10 , 'y' ) ,( 'y' , 10 , 'y' ) ; INSERT INTO x VALUES ( 'y' , 'y' , 'y' ) ,( 'y' , 'y' , 'y' ) ,( 'y' , 'y' , 'y' ) ; CREATE TABLE x ( x , x , x , x VARCHAR(100) ) ; INSERT INTO x ( x , x , x ) VALUES ( 'y' , 10 , 'y' ) ; INSERT INTO x SELECT tx_exec ( 'y' ) ; UPDATE x SET x = tx_exec ( 'y' ) ; SELECT x * 10 FROM x ORDER BY x * 10 ; SELECT x FROM x WHERE x = 'y' ORDER BY 10 ; SELECT x FROM x UNION SELECT x FROM x ORDER BY 10 ; SELECT * FROM x ORDER BY x DESC ; INSERT INTO x SELECT x FROM x WHERE x BETWEEN 10 AND 10 ; SELECT count ( * ) FROM SELECT DISTINCT x FROM x ; CREATE VIRTUAL TABLE x USING rtree ( id , a , b , c , d ) ; SELECT x , count ( x ) , count ( * ) FROM SELECT NULL AS x , x + 10 AS y FROM x UNION SELECT * FROM x GROUP BY x ORDER BY x ; CREATE TABLE x ( x INTEGER UNIQUE NOT NULL ) ; SELECT coalesce ( min ( x ) , 10 ) FROM x ; SELECT coalesce ( max ( x ) , 10 ) FROM x ; SELECT coalesce ( max ( x ) , 10 ) FROM x WHERE x < 10 ; SELECT * FROM SELECT max ( x ) FROM x ; SELECT * FROM SELECT min ( x ) FROM x ; SELECT min ( x ) , max ( x ) FROM x ; SELECT ( SELECT min ( x ) FROM x ) , ( SELECT max ( x ) FROM x ) ; SELECT min ( x ) FROM x WHERE x = 10 ; SELECT max ( x ) FROM x WHERE x = 10 ; SELECT min ( x ) FROM x WHERE x = 10 AND x >= 0.1 ; SELECT max ( x ) FROM x WHERE x = 10 AND x >= 0.1 ; INSERT INTO x SELECT x , x , x * x FROM x ; INSERT INTO x SELECT x , x , x * x + 10 FROM x ; SELECT min ( x ) FROM x WHERE x = 10 AND x = 10 ; SELECT max ( x ) FROM x WHERE x = 10 AND x = 10 ; SELECT min ( x ) FROM x WHERE x = 10 AND x = 10 AND x = 10 ; SELECT max ( x ) FROM x WHERE x = 10 AND x = 10 AND x = 10 ; SELECT * FROM x ORDER BY x , x , x ; SELECT min ( x ) , count ( x ) FROM x WHERE x = 'y' ; SELECT min ( x ) FROM x WHERE x = 'y' AND x > 'y' ; INSERT INTO x ( x , x , x ) VALUES ( 10 , 10 , 10 ) ,( 10 , 10 , 10 ) ,( 10 , 10 , 10 ) ,( 10 , 10 , 10 ) ,( 10 , 10 , 10 ) ; SELECT max ( x + x ) FROM x ; SELECT x , max ( x + x ) FROM x ; SELECT x , min ( x + x ) FROM x ; INSERT INTO x ( x , x , x ) VALUES ( 10 , NULL , 10 ) ,( 10 , 10 , NULL ) ; SELECT min ( x ) , x FROM x ; SELECT min ( x ) , x FROM x WHERE x < 10 ; SELECT MIN ( x ) , x FROM x WHERE x ISNULL ; SELECT MIN ( x ) FROM x WHERE x = 10 ; SELECT min ( x ) , x , x FROM x WHERE x = 'y' ; SELECT x , MIN ( x ) FROM x ; CREATE TABLE x ( x TEXT , x TEXT , x TEXT , x TEXT ) ; UPDATE x SET x = x CONCAT x CONCAT x CONCAT x ; SELECT * ; CREATE TABLE x ( x UNIQUE NOT NULL , x UNIQUE NOT NULL ) ; CREATE TABLE x ( x INT UNIQUE , x TEXT UNIQUE ) ; INSERT OR IGNORE INTO x VALUES ( 0.1 , 'y' ) ; INSERT OR IGNORE INTO x VALUES ( 'y' , 10 ) ; CREATE TABLE x ( x INTEGER , x TEXT , x ) ; INSERT INTO x VALUES ( 0.1 , 10 , 10 ) ; INSERT INTO x VALUES ( 10 , 0.1 , 10 ) ; INSERT INTO x VALUES ( 0.1 , 0.1 , 10 ) ; SELECT DISTINCT x , x FROM x ORDER BY x ; SELECT min ( x ) , max ( x ) , count ( x ) FROM x GROUP BY x ORDER BY 10 ; CREATE TABLE x AS SELECT x ; CREATE TABLE x AS SELECT 10 ; UPDATE x SET x = x + 10 WHERE x = 10 OR x = 10 ; CREATE TABLE x AS SELECT * FROM x UNION ALL SELECT 10 ; REPLACE INTO x ( x ) VALUES ( 'y' ) ; SELECT x , quote ( x ) FROM x ; UPDATE x SET x = 10 , x = 10 , x = 10 , x = 10 , x = 10 , x = 10 ; CREATE UNIQUE INDEX x ON x ( x ) WHERE x = 10 ; SELECT x , * FROM SELECT * FROM x , x ; CREATE VIEW x AS SELECT * FROM x , x ; SELECT x FROM x WHERE x <= 10 ; SELECT x FROM x WHERE x < 10 ORDER BY 10 ; CREATE VIEW x AS SELECT x AS p , x AS q FROM x AS x1 , x AS x2 WHERE x = x ; SELECT * FROM x WHERE x >= 10 ORDER BY x ; SELECT * FROM x WHERE x > 10 ORDER BY x ; SELECT * FROM x WHERE x >= 10 AND x < 10 ORDER BY x DESC ; SELECT * FROM x WHERE x >= 10 AND x <= 10 ORDER BY x DESC ; INSERT INTO x ( x ) SELECT x CONCAT 'y' FROM x ; SELECT count ( x ) FROM x WHERE x IN ( SELECT x FROM x ) ; SELECT count ( x ) FROM x WHERE x IN ( SELECT x FROM x ORDER BY x + 10 ) ; SELECT x AS c , x , x FROM x LEFT JOIN SELECT x , max ( x ) + 10 AS c FROM x GROUP BY x USING ( c ) ; SELECT * FROM SELECT x AS c , x , x FROM x LEFT JOIN SELECT x , max ( x ) + 10 AS c FROM x GROUP BY x USING ( c ) ; CREATE TABLE x ( x INTEGER NOT NULL , x TEXT ) ; SELECT x , max ( x ) FROM x GROUP BY 10 , 10 ORDER BY 10 , 10 ; SELECT * FROM x , SELECT x FROM x AS x WHERE x = x ; CREATE TABLE x AS SELECT * FROM x , x ; SELECT x FROM x LEFT JOIN x ON ( x = x ) ; UPDATE x SET x = 10 WHERE x AND ( SELECT x FROM x WHERE x ) ; INSERT OR IGNORE INTO x SELECT x * 10 FROM x ; INSERT OR IGNORE INTO x SELECT x + 10 FROM x ; INSERT OR IGNORE INTO x SELECT - x FROM x ; SELECT * FROM x WHERE x >= ( SELECT x FROM x ) UNION ALL SELECT * FROM x LIMIT ( SELECT x FROM x ) ; SELECT quote ( eval ( 'y' , 'y' ) ) ; SELECT quote ( eval ( 'y' ) ) ; SELECT eval ( 'y' , 'y' ) ; SELECT x , coalesce ( x , eval ( 'y' ) ) , x INSERT INTO x VALUES ( 10 , 10 , 10 ) ,( 10 , 10 , 10 ) ,( 10 , NULL , 10 ) ; SELECT eval ( 'y' ) ; SELECT x , x , eval ( printf ( 'y' , x + x , x + x ) ) FROM x , x ; CREATE TABLE x ( x PRIMARY KEY , x UNIQUE , x ) ; INSERT OR IGNORE INTO x ( x , x , x , x ) VALUES ( 10 , 10 , 10 , 10 ) ; INSERT OR REPLACE INTO x ( x , x , x , x ) VALUES ( 10 , 10 , 10 , 10 ) ; INSERT OR ABORT INTO x ( x , x , x , x ) VALUES ( 10 , 10 , 10 , 10 ) ; INSERT INTO x ( x , x , x , x , x ) VALUES ( 10 , NULL , 10 , 10 , 10 ) ; INSERT OR IGNORE INTO x ( x , x , x , x , x ) VALUES ( 10 , NULL , 10 , 10 , 10 ) ; INSERT OR REPLACE INTO x ( x , x , x , x , x ) VALUES ( 10 , NULL , 10 , 10 , 10 ) ; INSERT INTO x ( x , x , x , x , x ) VALUES ( 10 , 10 , NULL , 10 , 10 ) ; INSERT OR IGNORE INTO x ( x , x , x , x , x ) VALUES ( 10 , 10 , NULL , 10 , 10 ) ; INSERT OR REPLACE INTO x ( x , x , x , x , x ) VALUES ( 10 , 10 , NULL , 10 , 10 ) ; INSERT OR ABORT INTO x ( x , x , x , x , x ) VALUES ( 10 , 10 , NULL , 10 , 10 ) ; INSERT OR ABORT INTO x ( x , x , x , x , x ) VALUES ( 10 , 10 , 10 , NULL , 10 ) ; INSERT INTO x ( x , x , x , x , x ) VALUES ( 10 , 10 , 10 , 10 , NULL ) ; INSERT OR REPLACE INTO x ( x , x , x , x , x ) VALUES ( 10 , 10 , 10 , NULL , 10 ) ; UPDATE x SET x = NULL , x = x , x = x ; CREATE TABLE x ( x NOT NULL UNIQUE ) ; CREATE TABLE x ( x UNIQUE NOT NULL ) ; CREATE TABLE x ( x PRIMARY KEY NOT NULL ) ; CREATE TABLE x ( x NOT NULL PRIMARY KEY ) ; CREATE TABLE x ( x PRIMARY KEY UNIQUE NOT NULL ) ; CREATE TABLE x ( x UNIQUE PRIMARY KEY NOT NULL ) ; SELECT ifnull ( x + x , 10 ) FROM x ; SELECT ifnull ( x * x , 10 ) FROM x ; SELECT ifnull ( CASE WHEN x != 10 THEN 10 ELSE 10 END , 10 ) FROM x ; SELECT ifnull ( CASE WHEN NOT x != 10 THEN 10 ELSE 10 END , 10 ) FROM x ; SELECT ifnull ( CASE WHEN x != 10 AND x != 10 THEN 10 ELSE 10 END , 10 ) FROM x ; SELECT ifnull ( CASE WHEN NOT ( x != 10 AND x != 10 ) THEN 10 ELSE 10 END , 10 ) FROM x ; SELECT ifnull ( CASE WHEN x != 10 OR x != 10 THEN 10 ELSE 10 END , 10 ) FROM x ; SELECT ifnull ( CASE WHEN NOT ( x != 10 OR x != 10 ) THEN 10 ELSE 10 END , 10 ) FROM x ; SELECT ifnull ( CASE x WHEN x THEN 10 ELSE 10 END , 10 ) FROM x ; SELECT count ( * ) , count ( x ) , count ( x ) , sum ( x ) , sum ( x ) , avg ( x ) , avg ( x ) , min ( x ) , max ( x ) FROM x ; SELECT x FROM x WHERE x < 10 AND x = 10 ; SELECT x FROM x WHERE NOT ( x < 10 AND x = 10 ) ; SELECT x FROM x UNION SELECT x FROM x ORDER BY x ; CREATE TABLE x ( x , x UNIQUE ON CONFLICT IGNORE ) ; SELECT x FROM x WHERE x = NULL ; SELECT x FROM x WHERE x IN ( 10 , NULL ) ; SELECT x FROM x WHERE x < 10 ORDER BY x ; SELECT x FROM x WHERE x != 10 ORDER BY x ; INSERT INTO x VALUES ( 10 , NULL , 'y' ) ; INSERT INTO x VALUES ( NULL , 'y' , 'y' ) ; SELECT * FROM x WHERE x = 10 AND x IS NULL ; SELECT * FROM x WHERE x IS NULL AND x = 'y' ; INSERT INTO x VALUES ( NULL ) ,( 10 ) ,( 10 ) ,( 10 ) ,( NULL ) ; CREATE VIRTUAL TABLE x USING echo ( tx ) ; SELECT * FROM x ORDER BY x NULLS FIRST ; SELECT * FROM x ORDER BY x NULLS LAST ; SELECT x , x FROM x WHERE x = 10 ORDER BY x NULLS LAST , x ; SELECT * FROM x WHERE x = 10 AND x = 10 ORDER BY x NULLS LAST ; SELECT * FROM x WHERE x = 10 AND x = 10 ORDER BY x DESC NULLS FIRST ; SELECT * FROM x ORDER BY x DESC NULLS FIRST ; DELETE FROM x WHERE x NOT IN ( 10 , 10 ) ; INSERT INTO x VALUES ( 10 , 'y' ) ,( 10 , 'y' ) ,( 10 , 'y' ) ,( 10 , 'y' ) ,( 10 , 'y' ) ; SELECT count ( * ) FROM x , x ; SELECT ( SELECT 'y' FROM SELECT 'y' ORDER BY 'y' ASC , 'y' DESC GROUP BY 10 HAVING length ( x ) ) FROM x ; SELECT ( SELECT x CONCAT x FROM x , x ORDER BY x , x ) ; INSERT INTO x VALUES ( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ; SELECT x , x , 'y' FROM x ORDER BY x , x LIMIT 10 ; SELECT x , x FROM x , x ORDER BY 10 , 10 ; SELECT x , x FROM x CROSS JOIN x ORDER BY 10 , 10 ; CREATE TABLE x ( x INTEGER PRIMARY KEY , x , x , x , x , x ) ; SELECT x , x , x FROM x ORDER BY x , x , x ; SELECT x , x , x FROM x ORDER BY x DESC , x , x ; SELECT x FROM x ORDER BY x , x LIMIT 10 OFFSET 10 ; SELECT x FROM x ORDER BY x DESC , x LIMIT 10 OFFSET 10 ; SELECT x FROM x ORDER BY x , x DESC LIMIT 10 OFFSET 10 ; SELECT x FROM x ORDER BY x , x , x , x , x ; SELECT x FROM x ORDER BY x , x , x , x , x DESC ; SELECT x FROM x ORDER BY x , x , x , x DESC , x ; SELECT x FROM x ORDER BY x , x , x DESC , x , x ; SELECT x FROM x ORDER BY x , x DESC , x , x , x ; SELECT x FROM x ORDER BY x DESC , x , x , x , x ; SELECT x FROM x ORDER BY x DESC , x DESC , x , x , x LIMIT 10 ; SELECT x FROM x ORDER BY x , x , x , x , x DESC LIMIT 10 OFFSET 10 ; SELECT x , x , sum ( x ) FROM x GROUP BY x , x ORDER BY x , x ; SELECT x , x , sum ( x ) FROM x GROUP BY x , x ORDER BY x DESC , x DESC ; SELECT x , x , sum ( x ) FROM x GROUP BY x , x ORDER BY x , x DESC ; SELECT x , x , sum ( x ) FROM x GROUP BY x , x ORDER BY x DESC , x ; SELECT x , x , sum ( x ) FROM x GROUP BY x , x ORDER BY x , x DESC NULLS FIRST ; SELECT x , x , sum ( x ) FROM x GROUP BY x , x ORDER BY x DESC , x NULLS LAST ; SELECT sum ( length ( x ) ) FROM x ; CREATE TABLE x ( x CHECK( x < 10 ) , x CHECK( x < 10 ) ) ; INSERT INTO x SELECT NULL , a_string ( 10 ) FROM x ; UPDATE x SET x = NULL WHERE x > 10 ; SELECT count ( * ) FROM x WHERE x < 10 ; RELEASE x ; CREATE TABLE x . x ( x UNIQUE , x UNIQUE ) ; REPLACE INTO x SELECT * FROM x ; INSERT INTO x SELECT * FROM x WHERE x <= 10 ; UPDATE x SET x = a_string ( 10 ) ; INSERT INTO x SELECT a_string ( ( SELECT 10 + max ( x ) FROM x ) ) FROM x ; INSERT INTO x ( x , x , x ) SELECT x + 10 , x , x FROM x ; INSERT INTO x SELECT a_string ( 10 ) , a_string ( 10 ) , a_string ( 10 ) FROM x ; UPDATE x SET x = a_string ( 10 ) WHERE x > 10 ; SELECT COALESCE ( max ( x ) , 10 ) FROM x ; INSERT INTO x SELECT x CONCAT x FROM x ; DELETE FROM x WHERE x % 10 != 10 ; INSERT INTO x VALUES ( 'y' , NULL ) ,( 'y' , 'y' ) ; INSERT INTO x VALUES ( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( NULL , 10 ) ,( NULL , 10 ) ; PRAGMA x . x ( x ) ; INSERT INTO x ( x ) SELECT x CONCAT x CONCAT x CONCAT x FROM x ; INSERT INTO x SELECT x + 10 , randomblob ( 10 ) , x + 10 , randomblob ( 10 ) FROM x ; CREATE TABLE x . x ( x INTEGER PRIMARY KEY , x , x , x ) ; INSERT INTO x VALUES ( 'y' , 10 ) ,( 'y' , 10 ) ,( 'y' , 10 ) ,( 'y' , 10 ) ,( 'y' , 10 ) ,( 'y' , 10 ) ,( 'y' , 10 ) ,( 'y' , 10 ) ,( 'y' , 10 ) ,( 'y' , 10 ) ,( 'y' , 10 ) ,( 'y' , 10 ) ,( 'y' , 10 ) ,( 'y' , 10 ) ,( 'y' , 10 ) ,( 'y' , 10 ) ,( 'y' , 10 ) ,( 'y' , 10 ) ,( 'y' , 10 ) ,( 'y' , 10 ) ,( 'y' , 10 ) ; SELECT printf ( 'y' ) ; SELECT printf ( 'y' , 10 , 10 , 10 ) ; SELECT printf ( 'y' , 10 , 'y' , 10 ) ; SELECT printf ( 'y' , 0.1 ) ; SELECT printf ( 'y' , 10 , 0.1 ) ; SELECT printf ( 'y' , 10 , 10 , 0.1 ) ; SELECT printf ( 'y' , 0.1 , 'y' ) ; SELECT printf ( 'y' , 10 ) ; SELECT printf ( 'y' , 10 , 'y' ) ; SELECT printf ( 'y' , 'y' ) ; SELECT printf ( 'y' , x , x , x ) FROM x ORDER BY x ; SELECT printf ( 'y' , x , x ) FROM x ORDER BY x ; SELECT printf ( 'y' , x ) FROM x ORDER BY x ; SELECT printf ( 'y' , 'y' , 'y' ) ; SELECT printf ( 'y' , 10 , 10 ) ; CREATE TABLE x ( x , x , x CHECK( x != x ) ) ; CREATE INDEX x ON x ( x ) WHERE x = x ; INSERT INTO x VALUES ( 10 , 'y' , 0.1 ) ; INSERT INTO x ( x , x , x ) VALUES ( 10 , 'y' , 0.1 ) ; INSERT INTO x ( x , x , x ) VALUES ( 10 , 'y' , 10 ) ; CREATE TABLE x ( x INTEGER , x INTEGER , x INTEGER , x INTEGER , x , x , x ) ; INSERT INTO x VALUES ( 10 , 10 , 10 , NULL , 10 , 10 , 10 ) ; INSERT INTO x VALUES ( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ; REINDEX x . x ; SELECT x FROM x WHERE x IS NULL ORDER BY 10 ; SELECT x FROM x WHERE x IS NULL AND x IN ( 10 , 10 , 10 , 10 , 10 ) ; SELECT sum ( x ) , sum ( length ( x ) ) FROM x ; UPDATE x SET x = randomblob ( 10 ) WHERE x = 10 ; SELECT 10 AS y FROM x , x ORDER BY x ; SELECT 10 AS yy FROM x , x ORDER BY x ; SELECT x AS y FROM x ORDER BY x ; SELECT x AS yy FROM x ORDER BY x ; SELECT x AS yy FROM x ORDER BY 10 ; SELECT 'y' , substr ( x , 10 ) AS m FROM x ORDER BY x ; SELECT 'y' , substr ( x , 10 ) AS m FROM x ORDER BY lower ( x ) ; CREATE TABLE x ( x CHAR(2) ) ; SELECT count ( * ) , substr ( x , 10 , 10 ) AS m FROM x GROUP BY x ORDER BY 10 , 10 ; SELECT count ( * ) , substr ( x , 10 , 10 ) AS mx FROM x GROUP BY x ORDER BY 10 , 10 ; SELECT min ( x ) FROM x GROUP BY lower ( x ) ; SELECT min ( x ) AS name FROM x GROUP BY lower ( x ) ; SELECT 10 AS x WHERE ( SELECT x AS y WHERE 10 > x ) ; CREATE TABLE x ( x UNIQUE ON CONFLICT ROLLBACK ) ; SELECT x FROM x WHERE ( x % 10 ) == 10 ORDER BY x DESC ; SELECT x FROM x WHERE ( x % 10 ) == 10 ORDER BY x ASC ; SELECT x FROM x WHERE x = 'y' OR x = 'y' OR x = 'y' ; SELECT x , * FROM x WHERE x > 10 ; SELECT x FROM x WHERE x NOT IN ( 10 , 10 , 10 , 10 , 10 ) ; SELECT x FROM x WHERE x NOT IN ( 10 , 10 , 10 , 10 , 10 ) ORDER BY x ; INSERT INTO x ( x , x ) SELECT - x , x FROM x ; SELECT count ( * ) FROM x WHERE x == 'y' ; SELECT x , x , addrow ( x + 10 ) , 'y' FROM x LIMIT 10 ; SELECT * FROM x WHERE x < 'y' ORDER BY x ASC ; SELECT * FROM x WHERE x < 'y' ORDER BY x DESC ; INSERT INTO x ( x , x ) VALUES ( 10 , 10 ) ,( 10 , NULL ) ; CREATE TABLE x ( x ) ; INSERT INTO x ( x ) VALUES ( 'y' ) ; CREATE TABLE x ( x TEXT , x TEXT , x TEXT , x TEXT , x TEXT , x TEXT ) ; CREATE INDEX x ON x ( x , x , x , x , x ) ; UPDATE x SET x = ( SELECT * FROM SELECT x , 10 ) < 10 ; UPDATE x SET x = NULL WHERE x < ( SELECT * FROM SELECT x , 10 ) ; DELETE FROM x WHERE x < ( SELECT * FROM SELECT x , 10 ) ; UPDATE x SET x = x WHERE x = 10 ; SELECT ( SELECT 10 , 10 UNION SELECT 10 , 10 ORDER BY 10 ) IN ( SELECT 10 , 10 ) ; SELECT ( SELECT 10 , 10 UNION SELECT 10 , 10 ORDER BY 10 DESC ) IN ( SELECT 10 , 10 ) ; CREATE TABLE x ( x INTEGER , x INTEGER , x INTEGER , x INTEGER ) ; INSERT INTO x VALUES ( NULL , NULL , 10 ) ; CREATE TABLE x ( x TEXT , x INTEGER ) ; INSERT INTO x ( x , x , x ) VALUES ( 10 , NULL , 10 ) ; INSERT INTO x ( x , x , x ) VALUES ( 10 , 10 , NULL ) ; INSERT INTO x ( x , x , x , x , x ) VALUES ( 10 , 'y' , 'y' , 10 , 10 ) ; CREATE TABLE x ( x TEXT PRIMARY KEY , x INT ) ; INSERT INTO x ( x , x , x , x ) VALUES ( 10 , 10 , 10 , 10 ) ,( 10 , 10 , 10 , 10 ) ,( 10 , 10 , 10 , 10 ) ,( 10 , 10 , 10 , 10 ) ; INSERT INTO x ( x , x , x , x ) VALUES ( 10 , 10 , 10 , 10 ) ,( 10 , 10 , 10 , 10 ) ,( 10 , 10 , 10 , 10 ) ,( 10 , 10 , 10 , 10 ) ,( 10 , 10 , 10 , 10 ) ,( 10 , 10 , 10 , 10 ) ; INSERT INTO x ( x , x , x , x ) VALUES ( 10 , 'y' , 10 , 10 ) ; SELECT x FROM x WHERE x = ( SELECT x FROM x WHERE x = x ) ; SELECT x FROM x WHERE x IN ( SELECT 10 + x FROM x ) ; INSERT INTO x VALUES ( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 'y' ) ,( 10 , 'y' ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ; CREATE VIRTUAL TABLE x USING echo ( t1 ) ; ROLLBACK TO SAVEPOINT x ; ROLLBACK TRANSACTION TO x ; ROLLBACK TRANSACTION TO SAVEPOINT x ; UPDATE x SET x = x CONCAT randstr ( 10 , 10 ) ; INSERT OR ROLLBACK INTO x VALUES ( 10 , 'y' ) ; UPDATE x SET x = randstr ( 10 , 10 ) WHERE random () % 10 ; INSERT INTO x SELECT x FROM x WHERE random () % 10 ; DELETE FROM x WHERE random () % 10 ; INSERT INTO x SELECT randstr ( 10 , 10 ) FROM x WHERE ( random () % 10 == 10 ) ; UPDATE x SET x = 'y' , x = 'y' ; SELECT * FROM x ORDER BY 10 , 10 DESC ; SELECT * FROM x ORDER BY 10 DESC , x ; SELECT * FROM x ORDER BY x DESC , 10 ; SELECT x , x FROM x AS x , x AS y ; SELECT x FROM x , x ; SELECT x FROM x AS x , x ; SELECT 10 , 10 UNION SELECT * FROM x ; SELECT * FROM x WHERE x = ( SELECT 10 ) ; SELECT x FROM SELECT x AS x , x AS y FROM x UNION SELECT x , x FROM x ORDER BY x , x ORDER BY x ; INSERT INTO x SELECT x + ( SELECT max ( x ) FROM x ) , x + ( SELECT max ( x ) FROM x ) , x + ( SELECT max ( x ) FROM x ) FROM x ; SELECT count ( ( SELECT x FROM x WHERE x = NULL AND x >= x ) ) FROM x AS upper ; SELECT * FROM x WHERE x <= 10 ; SELECT 10 IN ( SELECT x FROM x ) ; SELECT * FROM x , SELECT * FROM x WHERE x = 10 ORDER BY x , x ; SELECT * FROM x , SELECT * FROM x WHERE x = 10 ORDER BY x , x LIMIT 10 ; SELECT * FROM x , SELECT * FROM x WHERE x = 10 UNION ALL SELECT * FROM x WHERE x = 10 ORDER BY x , x LIMIT 10 ; SELECT * FROM x , x WHERE max ( x , x ) > 10 ; SELECT * FROM x CROSS JOIN x WHERE x ; SELECT * FROM x CROSS JOIN x WHERE NOT x ; SELECT * FROM x , x WHERE min ( x , x ) ; SELECT * FROM x , x WHERE NOT min ( x , x ) ; SELECT x , count ( * ) FROM x GROUP BY 10 ORDER BY x ; SELECT x , min ( x ) FROM x GROUP BY x ORDER BY x DESC ; SELECT x , min ( x ) FROM x GROUP BY x ORDER BY 10 ; SELECT x , min ( x ) FROM x GROUP BY x ORDER BY 10 DESC ; SELECT x , min ( x ) FROM x GROUP BY x ORDER BY x ; SELECT x , sum ( x ) FROM x WHERE x = 10 GROUP BY x ; SELECT x , sum ( x ) FROM x WHERE x = 10 ; SELECT typeof ( sum ( x ) ) FROM x ; SELECT typeof ( sum ( x ) ) FROM x GROUP BY x ; SELECT DISTINCT * FROM x WHERE ( x IS NULL ) ; SELECT 10 AS x ORDER BY ( SELECT x ORDER BY 10 ) ; SELECT * FROM SELECT NULL , 10 UNION ALL SELECT NULL , 10 ; SELECT DISTINCT * FROM SELECT NULL , 10 UNION ALL SELECT NULL , 10 ; SELECT DISTINCT * FROM SELECT 10 , 10 UNION ALL SELECT 10 , 10 ; CREATE TABLE x ( x TEXT , x FLOAT , x TEXT ) ; SELECT * FROM SELECT 10 , SELECT 10 ON likely ( 10 OR 10 ) OR 10 ; SELECT x FROM x GROUP BY x ; SELECT x FROM x WHERE x > 10 GROUP BY x ; SELECT x , x FROM x GROUP BY x , x ; SELECT x , x FROM x GROUP BY x ; SELECT x , count ( x ) FROM x , x WHERE x = x GROUP BY x ORDER BY x ; SELECT x , count ( x ) FROM x , x WHERE x < x GROUP BY x ORDER BY x ; SELECT x , count ( x ) FROM x , x WHERE x = x GROUP BY x ORDER BY 10 ; SELECT x , count ( x ) FROM x , x GROUP BY x ORDER BY 10 ; SELECT x , count ( * ) FROM x , x GROUP BY x ORDER BY 10 ; SELECT x FROM SELECT x FROM x LIMIT 10 OFFSET 10 ; SELECT x FROM SELECT x FROM x LIMIT 10 ; SELECT x FROM SELECT x FROM x LIMIT 10 LIMIT 10 ; SELECT * FROM SELECT * FROM x , x ; CREATE TABLE x ( x INT , x VARCHAR(8) ) ; INSERT INTO x ( x , x ) VALUES ( 10 , 'y' ) ,( 10 , 'y' ) ,( 10 , 'y' ) ,( 10 , 'y' ) ; SELECT x , x , ( SELECT x FROM x WHERE x = x ) , 'y' FROM SELECT count ( * ) AS cnt , x AS xyz FROM x GROUP BY 10 ORDER BY x , x ; SELECT x , x , lower ( ( SELECT x FROM x WHERE x = x ) ) , 'y' FROM SELECT count ( * ) AS cnt , x AS xyz FROM x GROUP BY 10 ORDER BY x , x ; SELECT x , x , 'y' FROM SELECT count ( * ) AS cnt , x AS xyz FROM x GROUP BY 10 WHERE ( SELECT x FROM x WHERE x = x ) != 'y' ORDER BY x , x ; SELECT x , x , 'y' FROM SELECT count ( * ) AS cnt , x AS xyz FROM x GROUP BY 10 ORDER BY lower ( ( SELECT x FROM x WHERE x = x ) ) ; SELECT ( SELECT x FROM x WHERE x = x ) FROM SELECT count ( * ) AS cnt FROM x ; CREATE TABLE x ( x INTEGER PRIMARY KEY , x TEXT NULL ) ; CREATE VIEW x AS SELECT * FROM x UNION SELECT * FROM x ; CREATE TABLE x ( x INTEGER PRIMARY KEY , x INT , x ) ; SELECT 10 IN ( SELECT x , x FROM x ) ; SELECT 10 IN ( SELECT * FROM x ) ; SELECT 10 IN ( SELECT x , x FROM x UNION SELECT x , x FROM x ) ; SELECT 10 IN ( SELECT * FROM x UNION SELECT * FROM x ) ; SELECT ( CASE WHEN x = 10 THEN 'y' ELSE x / 10 END ) AS t FROM x GROUP BY x ; CREATE TABLE x ( x TEXT , x INT ) ; SELECT typeof ( x ) , x FROM x GROUP BY x HAVING x < x ; SELECT lower ( ( SELECT x FROM x UNION ALL SELECT x FROM x ORDER BY 10 ) ) ; SELECT lower ( ( SELECT x FROM x INTERSECT SELECT x FROM x ORDER BY 10 ) ) ; SELECT lower ( ( SELECT x FROM x EXCEPT SELECT x FROM x ORDER BY 10 ) ) ; SELECT * FROM SELECT x FROM x UNION SELECT x FROM x WHERE x = x ; SELECT DISTINCT * FROM SELECT x FROM x UNION ALL SELECT x FROM x ORDER BY 10 ; SELECT x , count ( * ) FROM SELECT x FROM x UNION ALL SELECT x FROM x GROUP BY x ORDER BY 10 ; SELECT x , count ( * ) FROM SELECT x FROM x UNION ALL SELECT x FROM x GROUP BY x HAVING count ( * ) > 10 ; SELECT x , count ( ( NOT ( x IS NULL ) ) AND ( NOT ( x IS NULL ) ) ) FROM x WHERE ( CASE WHEN x != 'y' THEN 10 ELSE 10 END ) GROUP BY 10 ; SELECT x , max ( x CONCAT x ) FROM x WHERE ( x CONCAT x CONCAT x ) != 'y' GROUP BY x ; CREATE VIEW x AS SELECT x FROM x ORDER BY 10 ; CREATE TABLE x AS SELECT x FROM x UNION ALL SELECT x FROM x ; SELECT count ( * ) , max ( length ( x ) ) FROM x ; CREATE VIEW x AS SELECT * FROM x , x WHERE x = x GROUP BY x ORDER BY x ; INSERT INTO x ( x ) SELECT NULL FROM x ; UPDATE x SET x = x , x = 'y' ; CREATE VIEW x AS SELECT x , roman ( x ) FROM x ; SELECT count ( * ) , sum ( x ) FROM x ; CREATE TABLE x ( x TEXT , x INT , x INT , x INT ) ; INSERT INTO x VALUES ( 'y' , 10 , 10 , 10 ) ; SELECT x , x , x , x , 'y' FROM x WHERE x = 10 ORDER BY x ; SELECT x , x , x , x , 'y' FROM x WHERE x != 10 AND x = 10 ORDER BY x DESC ; SELECT x , x , x , x , 'y' FROM x WHERE x = 10 ORDER BY x , x , x ; SELECT x , x , x , x , 'y' FROM x WHERE x IN ( 10 , 10 ) ORDER BY x , x , x ; SELECT x , x , x , x , 'y' FROM x WHERE x BETWEEN 10 AND 10 ORDER BY x , x , x ; SELECT x , x , x , x , 'y' FROM x WHERE x IN ( 10 , 10 ) AND x BETWEEN 10 AND 10 ORDER BY x , x ; SELECT x , x , x , x , 'y' FROM x WHERE x != 10 AND x = 10 ORDER BY x ; CREATE INDEX x ON x ( x , x , x , x , x , x , x , x ) ; CREATE TABLE x ( x INTEGER PRIMARY KEY , x TEXT , x INTEGER , x INTEGER , x INTEGER , x INTEGER , x INTEGER ) ; CREATE TABLE x ( x , x , x , x , x , x , x , x VARCHAR(300) ) ; INSERT INTO x VALUES ( 10 , 10 , 10 , NULL ) ; SELECT DISTINCT quote ( x ) , quote ( x ) , quote ( x ) , quote ( x ) , 'y' FROM x WHERE x = 10 ; INSERT INTO x ( x , x , x ) SELECT x , x , x FROM x ; SELECT x FROM x WHERE x = 10 AND x = 10 ; INSERT INTO x VALUES ( 10 , 'y' , 10 , 'y' , 0.1 ) ; INSERT INTO x VALUES ( 10 , 'y' , 10 , 'y' , 10 ) ; UPDATE x SET x = 'y' CONCAT - x ; UPDATE x SET x = 'y' WHERE x == 'y' ; SELECT x FROM x ORDER BY substr ( x , 10 , 10 ) ; SELECT x FROM x ORDER BY substr ( x , 10 , 10 ) + 0.1 ; SELECT x FROM x ORDER BY substr ( x , 10 , 10 ) DESC ; SELECT x FROM x ORDER BY substr ( x , 10 , 10 ) + 0.1 DESC ; SELECT x , x FROM x ORDER BY x DESC ; SELECT x CONCAT 'y' FROM x ORDER BY 10 DESC ; SELECT x + 10 FROM x ORDER BY 10 DESC ; SELECT x FROM x ORDER BY 10 DESC ; SELECT substr ( x , 10 , 10 ) FROM x ORDER BY 10 ; SELECT x FROM x ORDER BY x , x DESC ; SELECT x FROM x ORDER BY x DESC , x ; SELECT x FROM x ORDER BY x DESC , x DESC ; CREATE TABLE x ( x INTEGER , x VARCHAR(30) ) ; SELECT x FROM x WHERE x <= 10 ORDER BY x DESC ; SELECT x FROM x WHERE x < 10 ORDER BY x DESC ; SELECT x FROM x , x WHERE x = 10 ORDER BY x , x ; CREATE UNIQUE INDEX x ON x ( x , x , x ) ; INSERT INTO x VALUES ( 10 , 10 , 10 , 'y' ) ; SELECT * FROM x LEFT JOIN x ON ( x = x ) ORDER BY x ; SELECT next_char ( 'y' , 'y' , 'y' ) ; SELECT next_char ( 'y' , 'y' , 'y' , NULL , 'y' ) ; SELECT next_char ( 'y' , 'y' , 'y' , NULL , NULL ) ; SELECT x , x , x FROM x WHERE x MATCH 'y' ORDER BY x LIMIT 10 ; CREATE VIRTUAL TABLE x USING spellfix1 ; SELECT x , x FROM x WHERE x MATCH 'y' LIMIT 10 ; SELECT x , x FROM x WHERE x = 10 ; SELECT x , x FROM x WHERE x = 10 AND x MATCH 'y' ; INSERT OR REPLACE INTO x ( x , x ) VALUES ( 10 , 'y' ) ; INSERT OR ABORT INTO x ( x , x ) VALUES ( 10 , 'y' ) ; INSERT OR ROLLBACK INTO x ( x , x ) VALUES ( 10 , 'y' ) ; INSERT OR FAIL INTO x ( x , x ) VALUES ( 10 , 'y' ) ; INSERT OR IGNORE INTO x ( x , x ) VALUES ( 10 , 'y' ) ; SELECT count ( * ) FROM x WHERE x MATCH 'y' AND x <= 10 ; SELECT x , x , x FROM x WHERE x MATCH 'y' AND x <= 10 ORDER BY x , x ; SELECT spellfix1_scriptcode ( 'y' ) ; INSERT INTO x VALUES ( 10 , 'y' , 'y' , 10 ) ,( 10 , 'y' , 'y' , 10 ) ,( 10 , 'y' , 'y' , 10 ) ,( 10 , 'y' , 'y' , 10 ) ,( 10 , 'y' , 'y' , 10 ) ; SELECT editdist3 ( 'y' ) ; SELECT editdist3 ( 'y' , 'y' ) ; INSERT INTO x VALUES ( 10 , 'y' , 'y' , 10 ) ,( 10 , 'y' , 'y' , 10 ) ; INSERT INTO x VALUES ( 10 , 'y' , 'y' , 10 ) ,( 10 , 'y' , 'y' , 10 ) ,( 10 , 'y' , 'y' , 10 ) ,( 10 , 'y' , 'y' , 10 ) ,( 10 , 'y' , 'y' , 10 ) ,( 10 , 'y' , 'y' , 10 ) ,( 10 , 'y' , 'y' , 10 ) ,( 10 , 'y' , 'y' , 10 ) ,( 10 , 'y' , 'y' , 10 ) ,( 10 , 'y' , 'y' , 10 ) ,( 10 , 'y' , 'y' , 10 ) ,( 10 , 'y' , 'y' , 10 ) ,( 10 , 'y' , 'y' , 10 ) ,( 10 , 'y' , 'y' , 10 ) ,( 10 , 'y' , 'y' , 10 ) ,( 10 , 'y' , 'y' , 10 ) ,( 10 , 'y' , 'y' , 10 ) ,( 10 , 'y' , 'y' , 10 ) ,( 10 , 'y' , 'y' , 10 ) ,( 10 , 'y' , 'y' , 10 ) ,( 10 , 'y' , 'y' , 10 ) ,( 10 , 'y' , 'y' , 10 ) ,( 10 , 'y' , 'y' , 10 ) ,( 10 , 'y' , 'y' , 10 ) ,( 10 , 'y' , 'y' , 10 ) ; INSERT INTO x VALUES ( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ; SELECT * FROM x WHERE x = 10 ORDER BY x ; UPDATE x SET x = x CONCAT hex ( randomblob ( 10 ) ) ; SELECT * , 'y' FROM x WHERE x = 10 ORDER BY x ; SELECT x , quote ( x ) , x , quote ( x ) , x , x , x , x , 'y' FROM x 'y' , 10 ; SELECT * FROM x 'y' ; SELECT * FROM x 10 ; SELECT x , x FROM x ORDER BY 10 ; SELECT x , x , x FROM x WHERE x LIKE 'y' AND NOT x ; SELECT count ( * ) FROM x WHERE NOT x ; SELECT count ( * ) FROM x WHERE x > 10 ; SELECT * FROM x WHERE NOT x ; SELECT x , x FROM x , x WHERE x = ( SELECT x ) ; SELECT count ( * ) FROM x WHERE x > ( SELECT count ( * ) FROM x ) ; SELECT ( x * 10 ) > x FROM x , x WHERE x = x ; SELECT x FROM x WHERE ( SELECT ( x * 10 ) > x FROM x WHERE x = x ) ; SELECT ( SELECT x ) , x FROM x ; SELECT * FROM SELECT ( SELECT x ) , x FROM x ; SELECT * FROM SELECT ( SELECT sum ( x ) FROM x ) ; CREATE TABLE x ( x INT , x TEXT PRIMARY KEY ) ; SELECT ( SELECT 10 ) ; SELECT x IN ( 0.1 , 10 ) FROM x ; CREATE VIEW x AS SELECT x FROM x WHERE x > 10 ; SELECT * FROM x WHERE EXISTS ( SELECT * FROM x WHERE x = x ) ; SELECT * FROM x WHERE EXISTS ( SELECT 10 ) ; SELECT ( SELECT x ) FROM x ; SELECT x , ( SELECT x ) FROM x GROUP BY x ; SELECT x , ( SELECT x FROM x WHERE x = x ) FROM x GROUP BY x ; SELECT max ( x ) , ( SELECT x FROM x WHERE x = x ) FROM x ; SELECT x , ( SELECT ( SELECT x FROM x WHERE x = x ) ) FROM x GROUP BY x ; SELECT x , ( SELECT count ( * ) FROM x WHERE x = x ) FROM x ; CREATE TABLE x ( x ) ; INSERT INTO x VALUES ( 10 ) ,( 10 ) ,( 10 ) ; CREATE TABLE x ( x ) ; INSERT INTO x VALUES ( 10 ) ,( 10 ) ; SELECT max ( ( SELECT avg ( x ) FROM x ) ) FROM x ; SELECT max ( ( SELECT count ( x ) FROM x ) ) FROM x ; SELECT max ( ( SELECT count () FROM x ) ) FROM x ; SELECT max ( ( SELECT x FROM SELECT count ( x ) AS a FROM x ) ) FROM x ; SELECT ( SELECT x FROM x ) ; SELECT ( SELECT 10 FROM SELECT * FROM x ) AS x WHERE x ; SELECT ( SELECT 10 FROM SELECT * FROM SELECT 10 ) AS x WHERE x ; SELECT x FROM SELECT x , x FROM SELECT * FROM x UNION ALL SELECT * FROM x WHERE x = 10 ORDER BY x ; SELECT x FROM SELECT 'y' , x FROM SELECT x FROM x UNION ALL SELECT x FROM x ORDER BY x ; SELECT x , x FROM SELECT x , x FROM SELECT * FROM x UNION ALL SELECT * FROM x ORDER BY x ; SELECT ( SELECT x FROM x WHERE x = x ORDER BY x , x ) FROM x ; SELECT 10 IN ( SELECT x FROM x ORDER BY x DESC ) ; INSERT INTO x SELECT x FROM x UNION ALL SELECT x FROM x ; SELECT sum ( x ) FROM SELECT x FROM x ORDER BY x LIMIT 10 ; SELECT sum ( x ) FROM SELECT x FROM x ORDER BY x DESC LIMIT 10 ; SELECT ( SELECT x FROM x ORDER BY x ) ; SELECT ( SELECT x FROM x ORDER BY x DESC ) ; SELECT ( SELECT x FROM x ORDER BY x LIMIT 10 ) ; SELECT ( SELECT x FROM x ORDER BY x DESC LIMIT 10 ) ; SELECT ( SELECT x FROM x ORDER BY x LIMIT 10 OFFSET 10 ) ; SELECT ( SELECT x FROM x ORDER BY x DESC LIMIT 10 OFFSET 10 ) ; SELECT x FROM x WHERE x IN ( SELECT x FROM x ORDER BY x DESC LIMIT 10 OFFSET 10 ) ; SELECT x FROM x WHERE x IN ( SELECT x FROM x ORDER BY x ) ; SELECT x FROM x WHERE x IN ( SELECT x FROM x ORDER BY x LIMIT 10 ) ; SELECT x FROM x WHERE x IN ( SELECT x FROM x ORDER BY x DESC LIMIT 10 ) ; SELECT test_getsubtype ( test_setsubtype ( 'y' , 10 ) ) ; SELECT typeof ( test_setsubtype ( 'y' , 10 ) ) ; SELECT test_setsubtype ( 'y' , 10 ) ; CREATE TABLE x . x ( x INTEGER PRIMARY KEY , x TEXT ) ; INSERT INTO x . x SELECT * FROM x WHERE x BETWEEN 10 AND 10 ; INSERT INTO x VALUES ( 'y' , 'y' , 10 , 10 ) ; SELECT * FROM x WHERE x BETWEEN 10 AND 10 ; INSERT INTO x . x VALUES ( 10 , NULL ) ; SELECT x FROM x WHERE x BETWEEN 10 AND 10 ORDER BY x ; SELECT x FROM x WHERE ( x % 10 ) = 10 ; SELECT * , 'y' FROM x WHERE x = 10 AND x = 10 AND x = 10 ; SELECT * , 'y' FROM x LIMIT 10 ; CREATE VIRTUAL TABLE x USING generate_series ; SELECT * FROM x 10 , 10 , 10 ; SELECT * FROM x 10 , 10 ; SELECT * FROM x 10 , 10 WHERE x = 10 ; SELECT * FROM x 10 , 10 , 10 , 10 ; SELECT * FROM x 10 , 10 , 10 ORDER BY x DESC ; SELECT x , * FROM x 10 , 10 , 10 ORDER BY x DESC ; CREATE VIEW x ( x ) AS SELECT x FROM x 10 , 10 ; SELECT * FROM x 10 ORDER BY x ; SELECT DISTINCT x FROM x 10 , x , x ORDER BY 10 ; SELECT typeof ( x ) , typeof ( x ) , typeof ( x ) , typeof ( x ) , typeof ( x ) , typeof ( x ) , typeof ( x ) , typeof ( x ) FROM x LIMIT 10 ; SELECT typeof ( x + x ) , typeof ( x CONCAT x ) , typeof ( x + x ) , typeof ( x CONCAT x ) FROM x LIMIT 10 ; CREATE TABLE x AS SELECT x , x , x AS i , ( SELECT x FROM x ) AS j FROM x ; SELECT x , x , x FROM x WHERE x = 10 ; INSERT INTO x SELECT x * 10 , x * 10 FROM x ; INSERT INTO x SELECT x * 10 + 10 , x * 10 + 10 FROM x ; INSERT INTO x VALUES ( 10 , 10 ) ,( 10 , NULL ) ,( 10 , 'y' ) ; SELECT quote ( add_i ( 10 , 10 ) ) ; SELECT quote ( add_r ( 10 , 10 ) ) ; SELECT quote ( add_t ( 10 , 10 ) ) ; SELECT quote ( add_b ( 10 , 10 ) ) ; SELECT quote ( add_a ( 10 , 10 ) ) ; SELECT quote ( add_i ( 0.1 , 0.1 ) ) ; SELECT quote ( add_r ( 0.1 , 0.1 ) ) ; SELECT quote ( add_t ( 0.1 , 0.1 ) ) ; SELECT quote ( add_b ( 0.1 , 0.1 ) ) ; SELECT quote ( add_a ( 0.1 , 0.1 ) ) ; SELECT quote ( ret_i ( 0.1 ) ) ; SELECT quote ( ret_r ( 0.1 ) ) ; SELECT quote ( ret_t ( 0.1 ) ) ; SELECT quote ( ret_b ( 0.1 ) ) ; SELECT quote ( ret_a ( 0.1 ) ) ; SELECT quote ( ret_i ( 'y' ) ) ; SELECT quote ( ret_r ( 'y' ) ) ; SELECT quote ( ret_t ( 'y' ) ) ; SELECT quote ( ret_b ( 'y' ) ) ; SELECT quote ( ret_a ( 'y' ) ) ; UPDATE x SET x = int2str ( 10 ) ; SELECT x = int2str ( 10 ) FROM x ; UPDATE x SET x = int2str ( x + 10 ) ; DELETE FROM x WHERE ( random () % 10 ) == 10 ; CREATE TEMP TRIGGER x BEFORE INSERT ON x BEGIN SELECT 10 , 10 , 10 ; END ; SELECT x , x , x , x FROM x . x ; SELECT * FROM SELECT x FROM x LIMIT 10 UNION ALL SELECT 10 ; CREATE VIEW x ( x , x ) AS SELECT DISTINCT x , 'y' FROM x ; SELECT count ( * ) FROM x WHERE x >= x ; SELECT count ( * ) FROM x WHERE NOT NOT ( x >= x ) ; SELECT count ( * ) FROM x WHERE ( ( x >= x ) OR 10 + 10 ) ; INSERT INTO x SELECT NULL , x CONCAT x FROM x ; CREATE TABLE x ( x INT PRIMARY KEY , x , x ) ; SELECT ( SELECT 10 FROM SELECT 10 FROM x WHERE x = 10 OR x = 'y' WHERE x = 'y' OR x IN ( SELECT x = ( 'y' IN ( SELECT 'y' ) ) ) ) FROM x ; CREATE TABLE x ( x TEXT UNIQUE , x TEXT UNIQUE , x ) ; SELECT * FROM x WHERE ( x = 'y' OR x = 'y' ) AND x IS NOT NULL ; INSERT INTO x VALUES ( 10 ) ,( 10 ) ,( 10 ) ,( 10 ) ,( 10 ) ,( 10 ) ; SELECT x FROM x WHERE x IN ( 10 , 10 , 10 ) ORDER BY x ASC ; SELECT x FROM x WHERE x IN ( 10 , 10 , 10 ) ORDER BY x DESC ; INSERT INTO x VALUES ( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ; SELECT x , x FROM x WHERE x = 10 AND x IN ( 10 , 10 , 10 ) ORDER BY x ASC , x ASC ; SELECT x , x FROM x WHERE x = 10 AND x IN ( 10 , 10 , 10 ) ORDER BY x ASC , x DESC ; SELECT x , x FROM x WHERE x = 10 AND x IN ( 10 , 10 , 10 ) ORDER BY x DESC , x ASC ; SELECT x , x FROM x WHERE x = 10 AND x IN ( 10 , 10 , 10 ) ORDER BY x DESC , x DESC ; SELECT x , x , x FROM x , x WHERE x = 10 AND x = 10 AND x IN ( 10 , 10 , 10 ) ORDER BY x , x ASC , x ASC ; SELECT x , x , x FROM x , x WHERE x = 10 AND x = 10 AND x IN ( 10 , 10 , 10 ) ORDER BY x ASC , x ASC ; SELECT x , x , x FROM x , x WHERE x = 10 AND x = 10 AND x IN ( 10 , 10 , 10 ) ORDER BY x , x ASC , x DESC ; SELECT x , x , x FROM x , x WHERE x = 10 AND x = 10 AND x IN ( 10 , 10 , 10 ) ORDER BY x ASC , x DESC ; SELECT x , x , x FROM x , x WHERE x = 10 AND x = 10 AND x IN ( 10 , 10 , 10 ) ORDER BY x , x DESC , x ASC ; SELECT x , x , x FROM x , x WHERE x = 10 AND x = 10 AND x IN ( 10 , 10 , 10 ) ORDER BY x DESC , x ASC ; SELECT x , x , x FROM x , x WHERE x = 10 AND x = 10 AND x IN ( 10 , 10 , 10 ) ORDER BY x , x DESC , x DESC ; SELECT x , x , x FROM x , x WHERE x = 10 AND x = 10 AND x IN ( 10 , 10 , 10 ) ORDER BY x DESC , x DESC ; SELECT x , x FROM x WHERE x = 10 AND x IN ( SELECT x FROM x ) ORDER BY x ASC , x ASC ; SELECT x , x FROM x WHERE x = 10 AND x IN ( SELECT x FROM x ) ORDER BY x ASC , x DESC ; SELECT x , x FROM x WHERE x = 10 AND x IN ( SELECT x FROM x ) ORDER BY x DESC , x ASC ; SELECT x , x FROM x WHERE x = 10 AND x IN ( SELECT x FROM x ) ORDER BY x DESC , x DESC ; SELECT x , x , x FROM x , x WHERE x = 10 AND x = 10 AND x IN ( SELECT x FROM x ) ORDER BY x , x ASC , x ASC ; SELECT x , x , x FROM x , x WHERE x = 10 AND x = 10 AND x IN ( SELECT x FROM x ) ORDER BY x ASC , x ASC ; SELECT x , x , x FROM x , x WHERE x = 10 AND x = 10 AND x IN ( SELECT x FROM x ) ORDER BY x , x ASC , x DESC ; SELECT x , x , x FROM x , x WHERE x = 10 AND x = 10 AND x IN ( SELECT x FROM x ) ORDER BY x ASC , x DESC ; SELECT x , x , x FROM x , x WHERE x = 10 AND x = 10 AND x IN ( SELECT x FROM x ) ORDER BY x , x DESC , x ASC ; SELECT x , x , x FROM x , x WHERE x = 10 AND x = 10 AND x IN ( SELECT x FROM x ) ORDER BY x DESC , x ASC ; SELECT x , x , x FROM x , x WHERE x = 10 AND x = 10 AND x IN ( SELECT x FROM x ) ORDER BY x , x DESC , x DESC ; SELECT x , x , x FROM x , x WHERE x = 10 AND x = 10 AND x IN ( SELECT x FROM x ) ORDER BY x DESC , x DESC ; SELECT x FROM x WHERE x IN ( SELECT x FROM x ) ORDER BY x ASC ; SELECT x FROM x WHERE x IN ( SELECT x FROM x ) ORDER BY x DESC ; SELECT 'y' , x , ( SELECT count ( * ) FROM x JOIN SELECT DISTINCT x AS p FROM x AS x ON x = x ) FROM x ; SELECT ( SELECT x FROM SELECT * FROM x WHERE x = x ORDER BY x LIMIT 10 OFFSET 10 WHERE x = x ) FROM x AS out ; CREATE TABLE x ( x VARCHAR(1) PRIMARY KEY , x INTEGER NOT NULL ) ; SELECT DISTINCT x FROM SELECT x , x FROM x ORDER BY x , x LIMIT 10 AS test ; SELECT x FROM x JOIN x ON x = x AS x JOIN x ON x = x AS y ; INSERT INTO x VALUES ( 10 , 10 , 10 , 10 , 'y' ) ; CREATE TABLE x ( x INTEGER PRIMARY KEY , x VARCHAR(36) , x INTEGER ) ; CREATE TABLE x ( x INTEGER PRIMARY KEY , x VARCHAR(36) ) ; INSERT INTO x VALUES ( 10 , 10 , 10 , 10 , 10 ) ,( 10 , 10 , 10 , 10 , 10 ) ; SELECT x / 10 , x / 10 FROM x ; SELECT x / 10 , x / 10 FROM SELECT * FROM x ; SELECT x / 10 , x / 10 FROM SELECT * FROM x LIMIT 10 OFFSET 10 ; SELECT x / 10 , x / 10 FROM SELECT * FROM x LIMIT 10 OFFSET 10 LIMIT 10 OFFSET 10 ; SELECT x / 10 , x / 10 FROM x AS a , x AS b WHERE x = x LIMIT 10 OFFSET 10 ; SELECT x FROM x WHERE x IN ( 0.1 ) ; SELECT x FROM x WHERE 10 IN ( x ) ; SELECT x FROM x WHERE 0.1 IN ( x ) ; SELECT x FROM x WHERE 'y' IN ( x ) ; SELECT x , x FROM x WHERE x IN ( 10 ) ; SELECT x , x FROM x WHERE x IN ( 0.1 ) ; SELECT x , x FROM x WHERE x IN ( 'y' ) ; SELECT x , x FROM x WHERE 10 IN ( x ) ; SELECT x , x FROM x WHERE 0.1 IN ( x ) ; SELECT x , x FROM x WHERE 'y' IN ( x ) ; SELECT * FROM x WHERE x = AND x = AND x = AND x = AND x = ; DELETE FROM x WHERE x = 10 AND x = 10 AND x = 10 AND x = 10 AND x = 10 AND x = 10 ; SELECT x == x FROM SELECT x , 'y' AS xyz FROM x , x ; SELECT 'y' == x FROM SELECT x , 'y' AS xyz FROM x , x ; SELECT SUM ( x ) FROM SELECT x BETWEEN x AND x AS count FROM x ; SELECT x BETWEEN x AND x AS count FROM x ; SELECT typeof ( x ) , typeof ( x ) FROM x WHERE 10 = x + 10 AND x == 'y' ; SELECT typeof ( x ) , typeof ( x ) FROM x WHERE 10 = x * 10 AND x == 'y' ; SELECT typeof ( x ) , typeof ( x ) FROM x WHERE 10 = x / 10 AND x == 'y' ; SELECT typeof ( x ) , typeof ( x ) FROM x WHERE 10 = x % 10 AND x == 'y' ; SELECT 10 + 0.1 ; SELECT 'y' / 'y' ; SELECT 'y' + 'y' ; SELECT 'y' - 'y' ; SELECT 'y' / 'y' , 'y' / 'y' , 'y' / 'y' ; INSERT INTO x SELECT x , CASE x WHEN 'y' THEN NULL ELSE x END FROM x ; INSERT INTO x SELECT x , coalesce ( x , x ) FROM x ; SELECT x , x BETWEEN 'y' AND 'y' FROM x ORDER BY x ; SELECT * FROM x GROUP BY x ORDER BY x ; SELECT * FROM x GROUP BY x ORDER BY x ASC ; SELECT * FROM x GROUP BY x ORDER BY x DESC ; SELECT DISTINCT x AS x , x AS y FROM x , x ; SELECT count ( * ) FROM x , x GROUP BY x , x ; SELECT x , force_rollback () , EXISTS ( SELECT 10 FROM x WHERE x = x ) FROM x ; SELECT ins () AS x FROM x UNION ALL SELECT ins () AS x FROM x ; SELECT count ( CASE WHEN x = 'y' THEN 10 END ) , count ( CASE WHEN x = 'y' THEN 10 END ) FROM x ; INSERT INTO x SELECT randomblob ( 10 ) , randomblob ( 10 ) ; INSERT INTO x VALUES ( 10 , 'y' , 10 , 10 , 0.1 , 10 , 10 ) ; INSERT INTO x VALUES ( NULL , 'y' , 'y' , 'y' ) ; CREATE TABLE x ( x INTEGER , x INTEGER , x INTEGER ) ; CREATE TABLE x ( x INTEGER , x INTEGER NOT NULL , x INTEGER NOT NULL , x INTEGER , x INTEGER , x INTEGER ) ; CREATE VIEW x AS SELECT * FROM x ORDER BY x ; SELECT * FROM x UNION ALL SELECT * FROM x ORDER BY 10 ; SELECT count ( * ) , sum ( x ) , sum ( x ) FROM x ; SELECT x FROM x WHERE max ( x ) < 10 GROUP BY x ; SELECT typeof ( x ) , typeof ( x ) FROM x ; SELECT * FROM x LEFT JOIN x ON x = x OR x = x ; SELECT * FROM x LEFT JOIN x ON x IN ( x , x ) ; SELECT * FROM x LEFT JOIN x ON x BETWEEN x AND x ; SELECT * FROM x LEFT JOIN x ON x GLOB 'y' WHERE x = 10 ; UPDATE x SET x = x CONCAT 'y' WHERE x % 10 == 10 ; UPDATE x SET x = CASE WHEN x < 10 THEN substr ( x , 10 , 10 ) ELSE 'y' END ; SELECT tkt2213func ( tkt2213func ( 'y' ) ) ; SELECT avg ( x ) , typeof ( avg ( x ) ) FROM x ; SELECT sum ( x ) , typeof ( sum ( x ) ) FROM x ; SELECT x , sum ( x ) , typeof ( sum ( x ) ) FROM x GROUP BY x ORDER BY x ; SELECT x , typeof ( x ) FROM x WHERE x = 10 ; SELECT count ( * ) FROM x WHERE x < 'y' ; CREATE TABLE x ( x INTEGER PRIMARY KEY , x UNIQUE , x ) ; SELECT count ( * ) FROM x WHERE x IS NOT NULL SELECT x , x , x FROM x UNION ALL SELECT x , x , x FROM x ORDER BY 10 ; SELECT x , CAST ( x AS TEXT ) , x FROM x UNION ALL SELECT x , x , x FROM x ORDER BY 10 ; SELECT x , x , x FROM x UNION ALL SELECT x , x , x FROM x ORDER BY x ; SELECT x , CAST ( x AS TEXT ) AS x , x FROM x UNION ALL SELECT x , x , x FROM x ORDER BY x ; SELECT x , CAST ( x AS TEXT ) AS x , x FROM x UNION ALL SELECT x , x , x FROM x ORDER BY CAST ( x AS TEXT ) ; SELECT x , x , x FROM x UNION ALL SELECT x AS x , x , x FROM x ORDER BY x ; SELECT x AS b , CAST ( x AS TEXT ) AS a , x FROM x UNION ALL SELECT x , x , x FROM x ORDER BY x ; SELECT x , x , x FROM x UNION ALL SELECT x AS b , CAST ( x AS TEXT ) AS a , x FROM x ORDER BY x ; SELECT x AS b FROM x ORDER BY x ; SELECT * FROM x ORDER BY 10 , 10 , 10 ; SELECT * FROM x ORDER BY 10 , 10 , 10 , 10 ; SELECT * FROM x ORDER BY 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 ; SELECT * FROM x ORDER BY 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 ; SELECT * FROM x ORDER BY 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 ; SELECT * FROM x ORDER BY 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 ; SELECT * FROM x ORDER BY 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 ; SELECT group_concat ( x ) FROM SELECT x FROM x ORDER BY x DESC ; SELECT group_concat ( x ) FROM SELECT x FROM x ORDER BY x ; SELECT group_concat ( x ) FROM SELECT x FROM x ; SELECT execsql ( x ) FROM x WHERE x = 10 ; CREATE VIRTUAL TABLE x USING echo ( t2 ) ; CREATE VIRTUAL TABLE x USING echo ( r1 ) ; CREATE VIRTUAL TABLE x USING echo ( r2 ) ; SELECT x , x FROM x AS l , x AS r WHERE x < x ; CREATE VIEW x AS SELECT x AS x , x + 10 AS y FROM x ; SELECT * , ( SELECT x FROM SELECT x AS z FROM x WHERE x = x + 10 ) FROM x ; SELECT x FROM SELECT x FROM x ORDER BY x LIMIT 10 WHERE x = 10 ; SELECT count ( * ) FROM SELECT x FROM x ORDER BY x LIMIT 10 WHERE x = 10 ; SELECT x FROM SELECT x FROM x ORDER BY x WHERE x = 10 ; SELECT count ( * ) FROM SELECT x FROM x ORDER BY x WHERE x = 10 ; SELECT x FROM SELECT x FROM x WHERE x = 10 ; SELECT count ( * ) FROM SELECT x FROM x WHERE x = 10 ; SELECT * FROM SELECT * FROM x WHERE 10 = x AS x ; SELECT * FROM x , x , x WHERE x = 10 AND x = x AND x = x ; CREATE TABLE x ( x INTEGER , x TEXT , x TEXT ) ; SELECT x FROM x WHERE x = 'y' LIMIT 10 ; SELECT x FROM x WHERE x = x LIMIT 10 ; SELECT x FROM x WHERE x = 10 LIMIT 10 ; CREATE TABLE x ( x INTEGER NOT NULL , x INTEGER ) ; SELECT x , CASE WHEN x = 10 THEN 'y' ELSE x END AS col1 FROM x ; SELECT DISTINCT x , CASE WHEN x = 10 THEN 'y' ELSE x END AS col1 FROM x ; SELECT DISTINCT x , CASE WHEN x = 'y' THEN 'y' ELSE x END AS col1 FROM x ; CREATE TABLE x ( x VARCHAR(80) , x VARCHAR(80) , x VARCHAR(80) , x VARCHAR(80) , x INTEGER , x VARCHAR(80) , x VARCHAR(80) , x VARCHAR(80) , x VARCHAR(80) , x VARCHAR(80) , x VARCHAR(80) ) ; UPDATE x SET x = x WHERE x = x AND x > x AND x <= x ; INSERT INTO x ( x , x ) SELECT x , x FROM x ; INSERT INTO x SELECT x + 10 , f1 ( x ) FROM x ; INSERT INTO x SELECT x + 10 , sql ( x == 10 , 'y' ) FROM x ; INSERT INTO x VALUES ( 10 , 10 , 'y' , 10 ) ; SELECT * FROM x JOIN x USING ( b ) ; CREATE TABLE x ( x INTEGER NOT NULL , x CHAR(25) NOT NULL , x INTEGER NOT NULL , x VARCHAR(152) ) ; CREATE TABLE x ( x INTEGER NOT NULL , x CHAR(25) NOT NULL , x VARCHAR(152) ) ; SELECT 10 , 10 , 10 ; SELECT sql ( 'y' ) ; SELECT * FROM x WHERE x = x AND x = x AND x = 'y' ; CREATE TABLE x ( x INTEGER , x INTEGER , x TEXT ) ; SELECT * FROM x WHERE x = x AND x = x AND x = 10 ; CREATE TABLE x ( x INTEGER UNIQUE , x ) ; SELECT 'y' FROM x LEFT JOIN x ON x = x JOIN x ON x = x ; CREATE TABLE x ( x INTEGER PRIMARY KEY , x INTEGER , x DOUBLE , x DOUBLE , x TEXT , x TEXT , x TEXT , x INTEGER ) ; INSERT INTO x VALUES ( 10 , 'y' , 'y' , 'y' , 'y' , 10 , 10 , 'y' , 10 , 10 , NULL ) ; INSERT INTO x VALUES ( 10 , 'y' , 'y' , 'y' , 'y' , NULL , NULL , NULL , NULL , NULL , 'y' ) ; CREATE TABLE x ( x INTEGER PRIMARY KEY , x INTEGER , x TEXT , x INTEGER , x TEXT , x TEXT ) ; INSERT INTO x VALUES ( 10 , 10 , 'y' , NULL , NULL , 'y' ) ; CREATE TABLE x ( x INTEGER PRIMARY KEY , x TEXT , x TEXT , x TEXT , x TEXT , x TEXT , x TEXT , x TEXT , x TEXT , x TEXT , x TEXT , x TEXT , x TEXT , x TEXT , x TEXT , x TEXT , x TEXT , x TEXT , x TEXT , x TEXT , x TEXT , x TEXT , x TEXT , x TEXT , x TEXT ) ; INSERT INTO x VALUES ( 10 , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , NULL , NULL , NULL , NULL , NULL , NULL ) ; CREATE TABLE x ( x INTEGER PRIMARY KEY , x INTEGER , x TEXT , x TEXT , x TEXT , x TEXT , x TEXT , x TEXT , x TEXT , x TEXT , x TEXT , x TEXT , x TEXT , x TEXT , x VARCHAR(24) , x VARCHAR(24) , x TEXT , x TEXT , x TEXT , x VARCHAR(24) , x TEXT , x TEXT , x TEXT , x TEXT , x TEXT , x TEXT , x INTEGER ) ; INSERT INTO x VALUES ( 10 , 10 , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , NULL , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , NULL , NULL , NULL , 10 ) ; CREATE TABLE x ( x INTEGER PRIMARY KEY , x INTEGER , x TEXT , x TEXT , x TEXT ) ; SELECT * FROM x WHERE x >= 'y' AND x < 'y' AND x = x ; SELECT * FROM x WHERE x = x AND x = 'y' ; CREATE TABLE x ( x TEXT , x INTEGER , x TEXT ) ; SELECT count ( * ) FROM x WHERE x = 'y' ; UPDATE x SET x = 'y' CONCAT x WHERE x = 10 OR x = 10 ; CREATE TABLE x . x ( x , x , x , x ) ; CREATE TRIGGER x BEFORE UPDATE ON x BEGIN SELECT 10 ; END ; CREATE TABLE x ( x TEXT PRIMARY KEY , x ) ; UPDATE x SET x = x , x = x + 10 WHERE x = 10 ; CREATE TRIGGER x BEFORE UPDATE ON x BEGIN SELECT x ; END ; UPDATE x SET x = CASE WHEN x = 10 THEN x ELSE x + 10 END WHERE x = 10 ; CREATE TEMP TRIGGER x AFTER INSERT ON x BEGIN UPDATE x SET x = x + 10 ; END ; CREATE TABLE x ( x , x , x UNIQUE ) ; CREATE UNIQUE INDEX x ON x ( x ) WHERE x ; REPLACE INTO x ( x , x , x ) VALUES ( 10 , 10 , 10 ) ; DELETE FROM x ; END ; CREATE TABLE x ( x INTEGER PRIMARY KEY , x , x , x , x , x , x , x , x ) ; CREATE VIEW x AS SELECT x , x , x , x FROM x , x ; UPDATE x SET x = 10 , x = 10 * 10 WHERE x = 10 ; UPDATE x SET x = x + 10 , x = x + 10 , x = x + 10 ; CREATE VIEW x ( x , x , x , x ) AS SELECT * FROM x ; UPDATE x SET x = x WHERE x = x ; UPDATE x SET x = counter ( 10 ) ; CREATE TRIGGER x AFTER UPDATE ON x BEGIN SELECT 10 ; END ; CREATE TRIGGER x AFTER DELETE ON x BEGIN SELECT 10 ; END ; CREATE TRIGGER x BEFORE DELETE ON x BEGIN SELECT 10 ; END ; CREATE VIEW x AS SELECT x , x AS c FROM x WHERE x > 'y' ; CREATE VIEW x AS SELECT DISTINCT x , x FROM x ; CREATE VIEW x AS SELECT x , x FROM x EXCEPT SELECT 10 , 'y' ; CREATE VIEW x AS SELECT sum ( x ) AS a , max ( x ) AS b FROM x GROUP BY x HAVING x > 'y' ; CREATE TABLE x ( x INTEGER PRIMARY KEY , x INT NOT NULL ) ; CREATE TABLE x ( x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x ) ; INSERT INTO x VALUES ( 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' , 'y' ) ; SELECT * FROM x ORDER BY x DESC LIMIT 10 ; CREATE TABLE x ( x INTEGER PRIMARY KEY , x UNIQUE , x , x , x ) ; CREATE TRIGGER x AFTER UPDATE ON x BEGIN UPDATE x SET x = x + 10 ; END ; INSERT INTO x ( x , x , x , x ) VALUES ( 0.1 , 0.1 , 0.1 , 0.1 ) ; INSERT INTO x ( x , x , x , x ) VALUES ( NULL , 0.1 , 0.1 , 0.1 ) ; UPDATE x SET x = 'y' , x = 'y' , x = 'y' ; UPDATE x SET x = 'y' , x = 10 ; CREATE TABLE x ( x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x ) ; INSERT INTO x VALUES ( 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 ) ; SELECT x , x , x IS NULL , x IS NULL FROM x ; END INSERT INTO x SELECT x * 10 + x FROM x WHERE x IN ( 10 , 10 , 10 , 10 ) ; SELECT typeof ( x ) , typeof ( x ) , typeof ( x ) , typeof ( x ) FROM x ; CREATE TABLE x ( x FLOAT ) ; SELECT x ISNULL FROM x ; INSERT INTO x VALUES ( NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL ) ; SELECT * FROM x WHERE x IN ( 10 , 10 , 10 ) ; INSERT INTO x VALUES ( NULL , 'y' , 10 , 10 ) ; CREATE VIRTUAL TABLE x USING unionvtab ( VALUES(NULL, 't1', 1, 100) ) ; CREATE VIRTUAL TABLE x . x USING unionvtab ( VALUES('', 't1', 1, 100) ) ; CREATE TABLE x . x ( x , x , x INTEGER PRIMARY KEY ) ; CREATE TABLE x ( x , x , x INTEGER PRIMARY KEY ) ; CREATE TABLE x ( x INT PRIMARY KEY , x INT UNIQUE , x TEXT ) ; SELECT * FROM x ORDER BY x , x , x , x ; DELETE FROM x WHERE x <= 10 ; UPDATE x SET x = 10 , x = 10 WHERE x = 10 ; UPDATE x SET x = 10 , x = 10 , x = 10 WHERE x = 10 ; UPDATE x SET x = x + 10 WHERE x IN ( SELECT x FROM x ) ; SELECT count ( * ) FROM x WHERE x = x ; SELECT count ( * ) FROM x WHERE x = x + 10 ; UPDATE x SET x = printf ( x , x ) WHERE x IS NULL ; CREATE TABLE x ( x INTEGER PRIMARY KEY ON CONFLICT REPLACE , x UNIQUE ) ; UPDATE x SET x = x + 10 WHERE x > 10 ; UPDATE x SET x = x + 10 WHERE x = 'y' ; UPDATE x SET x = x + 10 WHERE x > 10 OR x > 10 ; CREATE UNIQUE INDEX x ON x ( x ) WHERE x IS NOT NULL ; INSERT INTO x ( x ) VALUES ( NULL ) ,( NULL ) ; SELECT quote ( x ) , quote ( x ) , 'y' FROM x ; INSERT INTO x ( x , x ) VALUES ( 10 , 10 ) ON CONFLICT DO NOTHING ; INSERT INTO x ( x , x ) VALUES ( 10 , 10 ) ,( 10 , 10 ) ON CONFLICT DO NOTHING ; INSERT INTO x ( x , x ) VALUES ( 10 , 10 ) ON CONFLICT ( x ) ; INSERT INTO x ( x , x ) VALUES ( 10 , 10 ) ON CONFLICT ( x COLLATE x ) ; INSERT INTO x ( x , x ) VALUES ( 10 , 10 ) ON CONFLICT ( x + x ) ; INSERT INTO x ( x , x ) VALUES ( 10 , 10 ) ,( 10 , 10 ) ON CONFLICT ( x + x ) ; INSERT INTO x ( x , x ) VALUES ( 10 , 10 ) ,( 10 , 10 ) ON CONFLICT ( x ) ; CREATE UNIQUE INDEX x ON x ( x ) WHERE x > 10 ; INSERT INTO x ( x , x ) VALUES ( 10 , 10 ) ,( 10 , 10 ) ON CONFLICT ( x ) WHERE x != 10 ; INSERT INTO x ( x , x ) VALUES ( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ON CONFLICT ( x ) WHERE x > 10 ; INSERT INTO x ( x ) VALUES ( 'y' ) ,( 'y' ) ,( 'y' ) ; INSERT INTO x ( x ) VALUES ( 'y' ) ,( 'y' ) ,( 'y' ) ,( 'y' ) ON CONFLICT ( x ) DO UPDATE SET = x x + 10 ; CREATE TABLE x ( x INTEGER PRIMARY KEY , x INT UNIQUE ) ; INSERT OR IGNORE INTO x ( x ) VALUES ( 'y' ) ON CONFLICT ( x ) ; INSERT OR IGNORE INTO x ( x ) VALUES ( 'y' ) ,( 10 ) ON CONFLICT ( x ) ; CREATE TABLE x ( x INTEGER PRIMARY KEY , x INT , x INT , x INT , x INT ) ; INSERT INTO x ( x , x , x , x , x ) VALUES ( 10 , 10 , 10 , 10 , 10 ) ON CONFLICT ( x ) DO UPDATE SET = x x ; CREATE TABLE x ( x INT , x INT , x INT , x INT , x INT ) ; INSERT INTO x ( x ) VALUES ( 10 ) ON CONFLICT ( x ) DO UPDATE SET = x x ; INSERT INTO x ( x , x ) VALUES ( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ON CONFLICT ( x ) DO UPDATE SET = x x , = x x + 10 WHERE x < x ; INSERT INTO x ( x , x ) VALUES ( 10 , 10 ) ON CONFLICT ( x ) DO UPDATE SET = x x + 10 ; INSERT INTO x ( x , x ) VALUES ( 10 , 10 ) ON CONFLICT ( x ) DO UPDATE SET = x x + 10 WHERE x < 10 ; INSERT INTO x VALUES ( 10 , 'y' ) ON CONFLICT ( x ) ; INSERT INTO x VALUES ( 10 , 'y' ) ON CONFLICT ( x , x ) ; INSERT INTO x ( x , x ) VALUES ( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ON CONFLICT ( x , x ) DO UPDATE SET = x x + 10 ; INSERT INTO x VALUES ( 10 , NULL , 'y' ) ON CONFLICT DO NOTHING ; INSERT INTO x VALUES ( 10 , NULL , 'y' ) ON CONFLICT ( x ) DO UPDATE SET = x 10 ; INSERT INTO x VALUES ( 10 , NULL , 'y' ) ON CONFLICT ( x ) DO UPDATE SET = x 'y' ; CREATE TABLE x ( x INT PRIMARY KEY , x , x , x ) ; INSERT INTO x VALUES ( 10 , 'y' , NULL ) ON CONFLICT DO NOTHING ; INSERT INTO x VALUES ( 10 , 'y' , NULL ) ON CONFLICT ( 'y' CONCAT x ) ; INSERT INTO x VALUES ( 10 , 'y' , NULL ) ON CONFLICT ( ( 'y' CONCAT x ) COLLATE x ) ; INSERT INTO x VALUES ( 10 , 'y' , NULL ) ON CONFLICT ( x CONCAT 'y' ) ; INSERT INTO x VALUES ( 10 , 'y' , NULL ) ON CONFLICT ( ( ( 'y' CONCAT x ) ) ) ; INSERT OR REPLACE INTO x VALUES ( 10 , 10 , 'y' ) ON CONFLICT ( x ) ; CREATE TABLE x ( x INT PRIMARY KEY , x UNIQUE , x ) ; CREATE TABLE x ( x INTEGER PRIMARY KEY , x UNIQUE , x UNIQUE ) ; INSERT OR REPLACE INTO x VALUES ( 10 , 10 , 10 ) ON CONFLICT ( x ) ; INSERT OR REPLACE INTO x VALUES ( 10 , 10 , 10 ) ON CONFLICT ( x ) DO UPDATE SET = x x CONCAT 'y' ; INSERT INTO x VALUES ( 'y' , 10 , 10 , 10 ) ON CONFLICT ( x ) DO UPDATE SET = x x ; INSERT INTO x VALUES ( 'y' , 10 , 10 , 10 ) ON CONFLICT ( x , x ) DO UPDATE SET = x x CONCAT x ; INSERT INTO x VALUES ( 'y' , 10 , 10 , NULL ) ON CONFLICT ( x , x ) DO UPDATE SET = x x ; INSERT INTO x VALUES ( 10 ) ,( 10 ) ,( 10 ) ,( 10 ) ,( 10 ) ,( 10 ) ,( 10 ) ,( 10 ) ; UPDATE x SET x = x CONCAT 'y' CONCAT x ; INSERT INTO x ( x , x ) SELECT x CONCAT x , x CONCAT x FROM x ; SELECT count ( * ) , sum ( x ) , sum ( length ( x ) ) FROM x ; VACUUM x INTO 'file_name' ; INSERT INTO x SELECT NULL , x CONCAT 'y' CONCAT x , x CONCAT 'y' CONCAT x FROM x ; CREATE TABLE x ( x INT PRIMARY KEY , x INT NULL ) ; INSERT INTO x SELECT x , 10 FROM x ; DELETE FROM x WHERE ( x % 10 ) != 10 ; VACUUM x ; DROP VIEW IF EXISTS x ; CREATE VIEW x ( x ) AS SELECT * FROM x ; CREATE VIEW x ( x , x ) AS SELECT x , x + x , x - x FROM x ; CREATE VIEW x ( x , x , x , x ) AS SELECT x , x + x , x - x FROM x ; CREATE VIEW x AS SELECT x FROM x UNION SELECT x FROM x ORDER BY x ; SELECT x FROM x ORDER BY x LIMIT 10 ; SELECT 10 FROM x LIMIT 10 ; SELECT * FROM x AS a , x AS b WHERE x = x ; SELECT * FROM x AS b , x AS a WHERE x = x ; SELECT * FROM x AS a , x AS b , x AS c WHERE x = x AND x = x ; SELECT min ( x ) , min ( x ) , min ( x ) , min ( x ) , min ( x + x + x ) FROM x ; SELECT max ( x ) , max ( x ) , max ( x ) , max ( x ) , max ( x + x + x ) FROM x ; CREATE VIEW x ( x ) AS SELECT x + x FROM x ; CREATE VIEW x AS SELECT max ( x ) AS mx FROM SELECT x % 10 AS eo , count ( * ) AS cnt FROM x GROUP BY x ; SELECT x + 10 , x * 10 FROM x ; SELECT x + 10 , x FROM x , x WHERE x = 10 ; SELECT x + 10 , x FROM x , x WHERE x > 10 ; SELECT DISTINCT count ( * ) FROM x GROUP BY x ORDER BY 10 ; SELECT DISTINCT count ( * ) FROM x GROUP BY x ORDER BY 10 LIMIT 10 ; CREATE VIEW x AS SELECT DISTINCT count ( * ) FROM x GROUP BY x ORDER BY 10 LIMIT 10 ; SELECT * FROM x ORDER BY 10 DESC ; CREATE VIEW x AS SELECT DISTINCT x , count ( * ) FROM x GROUP BY x ORDER BY 10 LIMIT 10 ; SELECT * FROM SELECT * FROM x WHERE x = 'y' ; CREATE VIEW x AS SELECT x FROM x . x ; CREATE VIEW x AS SELECT x AS x , x AS y FROM x ; CREATE VIEW x AS SELECT x , * FROM x ; CREATE VIEW x AS SELECT x FROM SELECT x FROM x ; CREATE VIEW x AS SELECT x * 10 FROM x ; CREATE VIEW x AS SELECT max ( x ) AS mx , min ( x ) AS mn FROM x GROUP BY x ; SELECT * FROM x AS one , x AS two WHERE x = 10 ; CREATE VIEW x ( x , x ) AS SELECT x , AVG ( x ) FROM x ; SELECT x , typeof ( x ) , x , typeof ( x ) FROM x ; SELECT 10 IN ( x ) FROM x ; SELECT 10 IN ( x ) FROM SELECT x FROM x ; CREATE VIRTUAL TABLE x USING echo ; CREATE VIRTUAL TABLE x USING echo ( no_such_table ) ; CREATE VIRTUAL TABLE x USING echo ( treal ) ; CREATE VIRTUAL TABLE x USING echo ( treal , logmsg ) ; CREATE VIRTUAL TABLE x USING echo ( template ) ; CREATE TABLE x ( x INTEGER , x INTEGER , x ) ; SELECT x AS d , x AS e , x AS f FROM x ; SELECT * FROM x WHERE x >= 10 AND x <= 10 ; SELECT * FROM x WHERE x MATCH 'y' ; SELECT x FROM x ORDER BY x CONCAT 'y' ; SELECT * FROM x , x WHERE x = 10 ; UPDATE x SET x = 10 WHERE x < 10 ; UPDATE x SET x = x CONCAT x CONCAT x ; CREATE VIRTUAL TABLE x USING echo ( real_abc ) ; INSERT INTO x SELECT x CONCAT 'y' , x , x FROM x ; CREATE VIRTUAL TABLE x . x USING echo ( real_abc ) ; CREATE VIRTUAL TABLE x USING echo ( r , e_log ) ; CREATE VIRTUAL TABLE x USING echo ( del ) ; SELECT * FROM x WHERE x CONCAT 'y' MATCH 'y' ; CREATE VIRTUAL TABLE x USING echo ( c ) ; INSERT INTO x VALUES ( 'y' , 'y' , 'y' , 10 , 'y' ) ; CREATE VIRTUAL TABLE x USING echo_v2 ( t5 ) ; CREATE VIRTUAL TABLE x USING echo ( t6 ) ; CREATE VIRTUAL TABLE x USING echo ( t7 ) ; CREATE VIRTUAL TABLE x USING echo ( t8 ) ; CREATE VIRTUAL TABLE x USING echo ( t9 ) ; CREATE VIRTUAL TABLE x USING tclvar ; SELECT x , x , x FROM x WHERE x = 'y' ; UPDATE x SET x = ( SELECT x FROM x WHERE x = 'y' AND x ) ; CREATE VIRTUAL TABLE x USING echo ( elephant ) ; CREATE VIRTUAL TABLE x USING echo ( sreal ) ; CREATE TABLE x ( x VARCHAR(16) , x INTEGER , x FLOAT ) ; DELETE FROM x WHERE x > 'y' ; CREATE VIRTUAL TABLE x USING echo ( strings ) ; CREATE VIRTUAL TABLE x USING echo ( ab_r ) ; CREATE VIRTUAL TABLE x USING echo ( bc_r ) ; SELECT x , x , x FROM x NATURAL JOIN x ; CREATE VIRTUAL TABLE x USING echo ( abc ) ; CREATE VIRTUAL TABLE x USING echo ( def ) ; CREATE VIRTUAL TABLE x USING echo ( t2244 ) ; UPDATE x SET x = 'y' WHERE 10 ; CREATE VIRTUAL TABLE x USING echo ( t2250 ) ; CREATE VIRTUAL TABLE x USING echo ( t2260a_real ) ; CREATE VIRTUAL TABLE x USING echo ( t2260b_real ) ; SELECT * FROM x , x WHERE x = x AND x > 10 ; CREATE VIRTUAL TABLE x USING echo ( t0 ) ; INSERT INTO x SELECT 'y' ; INSERT INTO x VALUES ( NULL , 'y' , 0.1 ) ; INSERT INTO x ( x , x , x ) SELECT * FROM x ; INSERT INTO x SELECT 'y' , 'y' ; SELECT x , x , x , 'y' FROM x ORDER BY 10 ; SELECT * FROM x WHERE x = 10 AND NOT ( x < 10 ) ; SELECT x , x FROM x WHERE x = 'y' ORDER BY x ; SELECT x , x FROM x WHERE x = 'y' ; UPDATE x SET x = x CONCAT 'y' WHERE x = 'y' OR x = 'y' CONCAT 'y' ; UPDATE x SET x = x CONCAT 'y' WHERE x = 'y' OR x BETWEEN 'y' AND 'y' ; DELETE FROM x WHERE x BETWEEN 'y' AND 'y' OR x = 'y' ; INSERT INTO x SELECT blob ( 10 ) FROM x ; SELECT count ( x ) , sum ( x ) FROM x ; SELECT x >= 10 FROM x WHERE x = 'y' ; INSERT INTO x SELECT 10 - x , x , ( SELECT max ( x ) FROM x ) + 10 - x , x FROM x ; SELECT * FROM x WHERE x + 10 IN ( 10 , 10 , 10 , 10 ) ORDER BY 10 ; SELECT * FROM x WHERE x IN ( 10 , 10 , 10 , 10 ) ORDER BY 10 ; SELECT * FROM x WHERE x IN ( 10 , 10 , 10 , 10 , 10 ) ORDER BY 10 ; SELECT * FROM x WHERE x IN ( 10 , 10 , 10 , 10 ) ORDER BY 10 DESC ; SELECT * FROM x WHERE x IN ( SELECT x FROM x WHERE x IN ( 10 , 10 , 10 ) ) ORDER BY 10 ; SELECT * FROM x WHERE x + 10 IN ( SELECT x FROM x WHERE x IN ( 10 , 10 , 10 ) ) ORDER BY 10 ; SELECT * FROM x WHERE x IN ( 10 , 10 ) ORDER BY 10 ; SELECT * FROM x WHERE x + 10 IN ( 10 , 10 ) ORDER BY 10 ; SELECT * FROM x WHERE x = 10 AND x IN ( 10 , 10 ) ORDER BY 10 ; SELECT * FROM x WHERE x IN ( 10 , 10 ) AND x NOT IN ( 10 , 10 ) ORDER BY 10 ; SELECT * FROM x WHERE x IN ( 10 , 10 ) AND x IN ( 10 , 10 ) ORDER BY 10 ; INSERT INTO x SELECT x , 10 - x , x FROM x ; SELECT count ( * ) , sum ( x ) , sum ( x ) , sum ( x ) FROM x ; SELECT x FROM x ORDER BY x , x LIMIT 10 ; SELECT x FROM x ORDER BY x , x DESC LIMIT 10 ; SELECT x FROM x WHERE x > 10 ORDER BY x , x , x LIMIT 10 ; SELECT x FROM x WHERE x >= 10 ORDER BY x , x DESC , x LIMIT 10 ; SELECT x FROM x WHERE x > 10 AND x < 10 ORDER BY x ; SELECT x FROM x WHERE x >= 10 AND x <= 10 ORDER BY x ; SELECT x FROM x WHERE x = 10 ORDER BY x DESC ; SELECT x FROM x WHERE x = 10 AND x > 10 ORDER BY x LIMIT 10 ; SELECT x FROM x WHERE x = 10 AND x > 10 ORDER BY x DESC LIMIT 10 ; SELECT x FROM x WHERE x = 10 AND x > 10 ORDER BY x DESC ; SELECT x FROM x WHERE x = 10 AND x >= 10 ORDER BY x DESC ; SELECT x FROM x WHERE x = 10 AND x >= 10 AND x < 10 ORDER BY x DESC ; SELECT x FROM x WHERE x = 10 AND x >= 10 AND x <= 10 ORDER BY x DESC ; SELECT x FROM x WHERE x = 10 AND x > 10 AND x <= 10 ORDER BY x DESC ; SELECT x FROM x WHERE x = 10 AND x > 10 AND x < 10 ORDER BY x DESC ; SELECT x FROM x WHERE x = 10 AND x >= 10 AND x < 10 ORDER BY x ; SELECT x FROM x WHERE x = 10 AND x >= 10 AND x <= 10 ORDER BY x ; SELECT x FROM x WHERE x = 10 AND x > 10 AND x <= 10 ORDER BY x ; SELECT x FROM x WHERE x = 10 AND x > 10 AND x < 10 ORDER BY x ; SELECT x FROM x WHERE x = 10 AND x < 10 ORDER BY x ; SELECT x FROM x WHERE x = 10 AND x <= 10 ORDER BY x ; SELECT x FROM x WHERE x = 10 AND x > 10 ORDER BY x ; SELECT x FROM x WHERE x = 10 AND x >= 10 ORDER BY x ; SELECT x FROM x WHERE x = 10 AND x < 10 ORDER BY x DESC ; SELECT x FROM x WHERE x = 10 AND x <= 10 ORDER BY x DESC ; SELECT x FROM x WHERE x = 10 AND x < 10 ORDER BY x DESC LIMIT 10 ; SELECT * FROM x WHERE x < 10 ORDER BY x DESC ; SELECT count ( * ) FROM x WHERE tclvar ( 'y' ) ; DELETE FROM x WHERE ( x = 10 ) OR ( x = 10 ) OR ( x BETWEEN 10 AND 10 ) OR ( x = 10 ) OR ( x BETWEEN 10 AND 10 ) OR ( x = 10 ) OR ( x = 10 ) OR ( x = 10 ) OR ( x = 10 ) OR ( x BETWEEN 10 AND 10 ) OR ( x BETWEEN 10 AND 10 ) OR ( x = 10 ) OR ( x BETWEEN 10 AND 10 ) OR ( x BETWEEN 10 AND 10 ) OR ( x = 10 ) OR ( x = 10 ) OR ( x = 10 ) OR ( x BETWEEN 10 AND 10 ) OR ( x = 10 ) OR ( x = 10 ) OR ( x BETWEEN 10 AND 10 ) OR ( x = 10 ) OR ( x = 10 ) OR ( x BETWEEN 10 AND 10 ) OR ( x BETWEEN 10 AND 10 ) OR ( x = 10 ) OR ( x BETWEEN 10 AND 10 ) OR ( x BETWEEN 10 AND 10 ) OR ( x BETWEEN 10 AND 10 ) OR ( x BETWEEN 10 AND 10 ) OR ( x BETWEEN 10 AND 10 ) OR ( x BETWEEN 10 AND 10 ) OR ( x BETWEEN 10 AND 10 ) OR ( x BETWEEN 10 AND 10 ) OR ( x BETWEEN 10 AND 10 ) OR ( x = 10 ) OR ( x BETWEEN 10 AND 10 ) OR ( x = 10 ) OR ( x BETWEEN 10 AND 10 ) OR ( x BETWEEN 10 AND 10 ) OR ( x = 10 ) OR ( x = 10 ) OR ( x = 10 ) OR ( x = 10 ) OR ( x BETWEEN 10 AND 10 ) OR ( x BETWEEN 10 AND 10 ) OR ( x BETWEEN 10 AND 10 ) OR ( x = 10 ) OR ( x BETWEEN 10 AND 10 ) OR ( x = 10 ) OR ( x = 10 ) ; SELECT * FROM x ORDER BY x DESC , x DESC ; SELECT * FROM x ORDER BY x DESC , x ASC ; SELECT * FROM x ORDER BY x ASC , x DESC ; CREATE TABLE x ( x INTEGER PRIMARY KEY , x TEXT UNIQUE , x CHAR(100) ) ; SELECT x AS alias FROM x , x WHERE x = 10 ; SELECT * FROM x CROSS JOIN x WHERE x = 10 AND x = 'y' ; CREATE TABLE x ( x INTEGER PRIMARY KEY , x INTEGER NOT NULL ) ; SELECT x , x FROM x , x WHERE x > x ; SELECT DISTINCT x FROM x LEFT JOIN x ON x = x ORDER BY x IS NULL ; SELECT DISTINCT x FROM x LEFT JOIN x ON x = x ORDER BY x ; CREATE TABLE x ( x INT UNIQUE NOT NULL , x INT UNIQUE NOT NULL , x , x ) ; CREATE TABLE x ( x INTEGER PRIMARY KEY , x INT , x INT ) ; SELECT count ( * ) FROM x LEFT JOIN x ON ( x = x ) WHERE ifnull ( x , 10 ) >= 10 ; SELECT * FROM x WHERE x = ( SELECT * FROM SELECT count ( * ) FROM x LIMIT 10 ORDER BY 10 LIMIT 10 ) AND ( x = 10 OR x = 10 ) ; INSERT INTO x ( x ) VALUES ( NULL ) ,( NULL ) ,( 10 ) ,( NULL ) ,( NULL ) ; SELECT count ( * ) FROM x LEFT JOIN x ON x IS NOT NULL ; SELECT * FROM x , x WHERE x = x AND x = 10 ; SELECT x FROM x WHERE x > 10 ORDER BY x DESC ; SELECT x FROM x WHERE x > 10 AND x < 10 ORDER BY x DESC ; SELECT x FROM x WHERE x > AND x < 10 ; SELECT x FROM x WHERE x > AND x < 10 ORDER BY x ; SELECT x FROM x WHERE x > AND x < 10 ORDER BY x DESC ; SELECT x FROM x WHERE x > 10 AND x < ; SELECT x FROM x WHERE x > 10 AND x < ORDER BY x ; SELECT x FROM x WHERE x > 10 AND x < ORDER BY x DESC ; SELECT x FROM x WHERE x > AND x < ; SELECT x FROM x WHERE x > AND x < ORDER BY x ; SELECT x FROM x WHERE x > AND x < ORDER BY x DESC ; SELECT x FROM x WHERE x >= AND x <= 10 ; SELECT x FROM x WHERE x >= AND x <= 10 ORDER BY x ; SELECT x FROM x WHERE x >= AND x <= 10 ORDER BY x DESC ; SELECT x FROM x WHERE x >= 10 AND x <= ; SELECT x FROM x WHERE x >= 10 AND x <= ORDER BY x ; SELECT x FROM x WHERE x >= 10 AND x <= ORDER BY x DESC ; SELECT x FROM x WHERE x >= AND x <= ; SELECT x FROM x WHERE x >= AND x <= ORDER BY x ; SELECT x FROM x WHERE x >= AND x <= ORDER BY x DESC ; SELECT * FROM x WHERE 'y' BETWEEN 10 AND x ; SELECT * FROM x WHERE 'y' >= 10 AND 'y' <= x ; SELECT 'y' BETWEEN 10 AND x FROM x ; SELECT 'y' >= 10 AND 'y' <= x FROM x ; SELECT * FROM x WHERE x = 10 ORDER BY random () ; SELECT * FROM x WHERE x = 10 AND x = 10 ORDER BY random () ; SELECT * FROM x WHERE x = 10 AND x = 10 AND x = 10 ORDER BY random () ; SELECT x , x FROM x CROSS JOIN x WHERE x = x OR x = 'y' ; SELECT x , x FROM x CROSS JOIN x WHERE 'y' = x OR x = x ; SELECT x , x FROM x CROSS JOIN x WHERE x = 'y' OR x = x ; SELECT x FROM x WHERE x = 10 AND x = 10 ORDER BY x ; SELECT x FROM x WHERE x IN ( 10 , 10 , 10 , 10 , 10 ) ; SELECT x FROM x WHERE x = 10 OR ( x = 10 AND x = 10 ) ORDER BY x ; CREATE TABLE x ( x INTEGER PRIMARY KEY , x INT , x CHAR(100) ) ; SELECT * FROM x WHERE ( 10 = 10 AND x = 10 ) OR x = 10 ; INSERT INTO x ( x ) VALUES ( 10 ) ,( 10 ) ,( 10 ) ,( 10 ) ; SELECT * FROM x , x LEFT JOIN x ON x = x WHERE x = 10 AND x = x ; INSERT INTO x ( x , x , x ) VALUES ( 10 , 'y' , 'y' ) ; SELECT * FROM x WHERE x = 10 AND x IS NOT NULL ; SELECT x FROM x LEFT JOIN x ON x = x ; SELECT x FROM x LEFT JOIN x ON x = x WHERE x IS NULL ; SELECT x FROM x LEFT JOIN x ON x = x WHERE x IS NOT NULL ; SELECT x FROM x LEFT JOIN x ON x = x AND x IS NULL ; SELECT x FROM x LEFT JOIN x ON x = x AND x IS NOT NULL ; SELECT DISTINCT x FROM x LEFT JOIN x ON x = x ; SELECT x FROM x WHERE x IN ( 10 , 10 , 10 , 10 ) AND x IN ( 10 , 10 , NULL , 10 ) AND x != 10 ; SELECT x FROM x WHERE x IN ( 10 , 10 , NULL , 10 ) AND x IN ( 10 , 10 , 10 ) AND x != 10 ; SELECT * FROM x WHERE x = NULL AND x IN ( 'y' ) ; INSERT INTO x SELECT x * 10 FROM x ; SELECT sum ( ( SELECT x FROM x WHERE x = x AND x = x AND x < NULL ) ) FROM x ; SELECT * FROM x LEFT JOIN x ON x = x AND x = 10 ; SELECT * FROM x LEFT JOIN x ON x = x AND 10 = x ; SELECT * FROM x LEFT JOIN x ON x = x WHERE x = 10 ; SELECT * FROM x LEFT JOIN x ON x = x WHERE 10 = x ; SELECT * FROM x WHERE x < 10 OR x < 10 ORDER BY x ; DELETE FROM x WHERE x < 10 OR x < 10 ; CREATE TABLE x ( x , x TEXT , x ) ; INSERT INTO x VALUES ( 'y' , 'y' , 0.1 ) ; INSERT INTO x VALUES ( NULL , 0.1 , 'y' ) ; INSERT INTO x VALUES ( 0.1 , 10 , NULL ) ; INSERT INTO x VALUES ( 'y' , 0.1 , 'y' ) ; INSERT INTO x VALUES ( 0.1 , 10 , 0.1 ) ; INSERT INTO x VALUES ( 0.1 , NULL , 'y' ) ; INSERT INTO x VALUES ( 'y' , 0.1 , NULL ) ; INSERT INTO x VALUES ( 0.1 , 10 , 'y' ) ; INSERT INTO x VALUES ( 0.1 , 'y' , 10 ) ; INSERT INTO x VALUES ( 'y' , NULL , 0.1 ) ; INSERT INTO x VALUES ( 0.1 , 'y' , NULL ) ; SELECT x FROM x WHERE x = 'y' AND ( x = 10 OR x = 10 ) ORDER BY x ; SELECT x FROM x WHERE ( x = 'y' OR x = 'y' ) AND x = 10 ORDER BY x ; SELECT x FROM x WHERE x = 10 OR x > 10 ; CREATE TABLE x ( x INTEGER PRIMARY KEY , x , x INTEGER ) ; INSERT INTO x VALUES ( 10 , 10 , 'y' , 10 , 'y' ) ; SELECT x FROM x WHERE ( x = 10 AND x = 10 ) OR ( x = 10 AND x = 10 ) ; SELECT x , x FROM x WHERE ( x = 10 AND x = 10 ) OR ( x = 10 AND x = 10 ) ; SELECT x FROM x WHERE ( x = 10 AND x = 10 ) OR ( x = 10 AND x = 10 ) OR ( x = 10 AND x = 10 ) ; SELECT x FROM x WHERE ( x = 10 AND ( x = 10 OR x = 10 ) ) OR ( x = 10 AND x = 10 ) ; SELECT x , x FROM x JOIN x ON x = x OR x = 10 ORDER BY x , x ; CREATE TABLE x ( x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x ) ; UPDATE x SET x = x * x + 10 ; INSERT INTO x SELECT x + 10 , ( x + 10 ) * 10 FROM x ; CREATE UNIQUE INDEX x ON x ( x , x , x , x ) ; CREATE TABLE x ( x INTEGER PRIMARY KEY NOT NULL , x INTEGER ) ; INSERT INTO x ( x , x ) VALUES ( 10 , 10 ) ,( 10 , NULL ) ,( 10 , NULL ) ,( 10 , NULL ) ,( 10 , NULL ) ; INSERT INTO x ( x , x ) VALUES ( 10 , 10 ) ,( 10 , NULL ) ,( 10 , NULL ) ; SELECT * FROM x , x WHERE x = 10 AND x = x ; CREATE TABLE x ( x INT , x , x , x ) ; INSERT INTO x VALUES ( 10 , 10 , 10 , 10 ) ,( 10 , 10 , 10 , 10 ) ,( 10 , 10 , 10 , 10 ) ,( 10 , 10 , 10 , 10 ) ; SELECT count ( * ) FROM x LEFT JOIN x ON x = x AND x = 'y' ; SELECT count ( * ) FROM x LEFT JOIN x ON likely ( x = x ) AND x = 'y' ; SELECT likely ( x ) , x FROM x , x ORDER BY 10 , 10 ; SELECT unlikely ( x ) , x FROM x , x ORDER BY 10 , 10 ; SELECT likelihood ( x , 0.1 ) , x FROM x , x ORDER BY 10 , 10 ; SELECT coalesce ( x , x ) , x FROM x , x ORDER BY 10 , 10 ; SELECT LIKELY ( x ) <= 'y' FROM x ; SELECT * FROM x WHERE LIKELY ( x ) <= 'y' ; SELECT ( x ) <= 'y' FROM x ; SELECT * FROM x WHERE ( x ) <= 'y' ; SELECT unlikely ( x ) <= 'y' , likelihood ( x , 0.1 ) <= 'y' FROM x ; SELECT * FROM x WHERE unlikely ( x ) <= 'y' ; SELECT * FROM x WHERE likelihood ( x , 0.1 ) <= 'y' ; SELECT unlikely ( x <= 'y' ) , likely ( x <= 'y' ) , likelihood ( x <= 'y' , 0.1 ) FROM x ; SELECT * FROM x WHERE unlikely ( x <= 'y' ) ; SELECT * FROM x WHERE likelihood ( x <= 'y' , 0.1 ) ; INSERT INTO x VALUES ( 'y' , 10 , 10 , 'y' ) ; CREATE TABLE x ( x INT PRIMARY KEY , x , x , x , x ) ; CREATE VIEW x AS SELECT * FROM x UNION ALL SELECT * FROM x ; CREATE TABLE x ( x INTEGER PRIMARY KEY , x INTEGER NOT NULL , x INTEGER , x INTEGER ) ; SELECT x FROM x JOIN x ON x = x WHERE x = 10 AND x = 10 ; SELECT x , sum ( x ) OVER( PARTITION BY x ) FROM x ; SELECT x , sum ( x ) OVER( PARTITION BY x ) FROM x ORDER BY x ; SELECT x , sum ( x ) OVER( ) FROM x ORDER BY x ; SELECT x , sum ( x ) OVER( ORDER BY x ) FROM x ; SELECT ntile ( 10 ) OVER( ORDER BY x ) FROM x ; SELECT ntile ( 'y' ) OVER( ORDER BY x ) FROM x ; INSERT INTO x VALUES ( 10 ) ,( 10 ) ,( 10 ) ,( 10 ) ,( 10 ) ,( 10 ) ,( 10 ) ; SELECT x , count ( * ) OVER( ORDER BY x ) FROM x ; SELECT * FROM x , SELECT x , count ( * ) OVER( ORDER BY x ) FROM x ; SELECT nth_value ( x , 10 ) FROM x ; SELECT * FROM x WHERE nth_value ( x , 10 ) OVER( ORDER BY x ) ; SELECT count ( * ) FROM x GROUP BY x HAVING nth_value ( x , 10 ) OVER( ORDER BY x ) ; SELECT count ( * ) FROM x GROUP BY nth_value ( x , 10 ) OVER( ORDER BY x ) ; SELECT count ( * ) FROM x LIMIT nth_value ( x , 10 ) OVER( ) ; SELECT trim ( x ) OVER( ORDER BY x ) FROM x ; SELECT max ( x ) OVER x FROM x ; CREATE TABLE x ( x TEXT PRIMARY KEY , x , x ) ; INSERT INTO x VALUES ( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ; CREATE INDEX x ON x ( x ) WHERE sum ( x ) OVER( ) ; CREATE INDEX x ON x ( x ) WHERE lead ( x ) OVER( ) ; SELECT x , x , lead ( x , 10 ) OVER( ORDER BY x ) AS x FROM x WHERE x > 10 ORDER BY x LIMIT 10 ; SELECT x , rank () OVER( ORDER BY x ) FROM x ; SELECT x , rank () OVER( ORDER BY x DESC ) FROM x ; SELECT x , x + 10 , x + 10 FROM SELECT x IN ( SELECT ( row_number () OVER( ) ) FROM x ) AS y FROM x ; INSERT INTO x VALUES ( 'y' , 10 ) ,( 'y' , 10 ) ,( 'y' , 10 ) ,( 'y' , 10 ) ; SELECT x , sum ( x ) OVER( PARTITION BY x IN ( SELECT x FROM x ) ) FROM x ; SELECT x , sum ( x ) OVER x FROM x ; SELECT 10 + sum ( x ) OVER( ORDER BY x ) FROM x ORDER BY 10 + sum ( x ) OVER( ORDER BY x ) DESC ; CREATE TABLE x ( x INTEGER PRIMARY KEY , x TEXT , x TEXT , x INTEGER ) ; INSERT INTO x VALUES ( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 'y' , 10 ) ,( 'y' , 10 ) ,( 'y' , 10 ) ,( 'y' , 10 ) ,( 'y' , 10 ) ; SELECT x , sum ( x ) OVER( ORDER BY x RANGE BEWTEEN 10 PRECEDING AND 10 FOLLOWING ) FROM x ; SELECT x , sum ( x ) OVER( ORDER BY x DESC RANGE BEWTEEN 10 PRECEDING AND 10 FOLLOWING ) FROM x ORDER BY x ASC ; INSERT INTO x VALUES ( NULL , 10 ) ,( NULL , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 'y' , 10 ) ,( 'y' , 10 ) ,( 'y' , 10 ) ,( 'y' , 10 ) ,( 'y' , 10 ) ; INSERT INTO x VALUES ( NULL ) ,( 10 ) ,( 10 ) ,( 10 ) ,( 10 ) ,( 10 ) ; INSERT INTO x VALUES ( 10 , 'y' , 'y' , NULL ) ,( 10 , 'y' , 'y' , 'y' ) ,( 10 , 'y' , 'y' , NULL ) ; INSERT INTO x VALUES ( 10 , 'y' , 'y' , 0.1 ) ,( 10 , 'y' , 'y' , 0.1 ) ,( 10 , 'y' , 'y' , 0.1 ) ,( 10 , 'y' , 'y' , 0.1 ) ,( 10 , 'y' , 'y' , 0.1 ) ,( 10 , 'y' , 'y' , 0.1 ) ,( 10 , 'y' , 'y' , 0.1 ) ,( 10 , 'y' , 'y' , 0.1 ) ,( 10 , 'y' , 'y' , 0.1 ) ,( 10 , 'y' , 'y' , NULL ) ,( 10 , 'y' , 'y' , 'y' ) ,( 10 , 'y' , 'y' , 'y' ) ,( 10 , 'y' , 'y' , NULL ) ; SELECT x IN ( SELECT sum ( x ) OVER( ORDER BY x + x ) FROM x ) FROM SELECT * FROM x ; SELECT x IN ( SELECT sum ( x ) OVER( PARTITION BY x ORDER BY x + x ) FROM x ) FROM SELECT * FROM x ; SELECT x IN ( SELECT sum ( x ) OVER( ROWS BEWTEEN x FOLLOWING AND UNBOUNDED FOLLOWING ) FROM x ) FROM SELECT * FROM x ; SELECT x IN ( SELECT sum ( x ) OVER( ROWS BEWTEEN CURRENT ROW AND x FOLLOWING ) FROM x ) FROM SELECT * FROM x ; CREATE VIEW x AS SELECT NULL INTERSECT SELECT NULL ORDER BY s () OVER x ; SELECT x , sum ( x ) OVER( PARTITION BY x ORDER BY x ) FROM x ; SELECT sum ( x ) OVER( ) FROM x ; SELECT sum ( x ) OVER( PARTITION BY x ) FROM x ; INSERT INTO x ( x , x ) VALUES ( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ; SELECT x , sum ( x ) OVER( PARTITION BY ( x % 10 ) ORDER BY x ) FROM x ORDER BY x ; SELECT x , sum ( x ) OVER( RANGE BEWTEEN CURRENT ROW AND CURRENT ROW ) FROM x ORDER BY x ; SELECT x , sum ( x ) OVER( RANGE BEWTEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM x ORDER BY x ; SELECT x , sum ( x ) OVER( RANGE BEWTEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM x ORDER BY x ; SELECT x , sum ( x ) OVER( ROWS BEWTEEN CURRENT ROW AND CURRENT ROW ) FROM x ORDER BY 10 , 10 ; SELECT x , sum ( x ) OVER( ROWS BEWTEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM x ORDER BY 10 , 10 ; SELECT x , sum ( x ) OVER( ROWS BEWTEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM x ORDER BY 10 , 10 ; SELECT x , sum ( x ) OVER( ROWS BEWTEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM x ORDER BY 10 , 10 ; INSERT INTO x ( x , x ) VALUES ( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ; SELECT max ( x ) , max ( x ) OVER( ORDER BY x ) FROM x GROUP BY x ; SELECT max ( x ) OVER( ORDER BY max ( x ) ) FROM x GROUP BY x ; SELECT abs ( max ( x ) OVER( ORDER BY x ) ) FROM x GROUP BY x ; SELECT sum ( x ) OVER( ORDER BY x RANGE BEWTEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM x ; INSERT INTO x ( x , x , x ) VALUES ( 10 , 10 , 10 ) ,( 10 , 10 , NULL ) ,( 10 , 10 , 10 ) ,( 10 , 10 , NULL ) ,( 10 , 10 , 10 ) ,( 10 , 10 , 10 ) ; SELECT x , min ( x ) OVER( PARTITION BY x ORDER BY x ) FROM x ; SELECT x , lead ( x , 10 ) OVER( PARTITION BY x ORDER BY x ) FROM x ; SELECT x , lag ( x , 10 ) OVER( PARTITION BY x ORDER BY x ) FROM x ; SELECT NTILE ( 10 ) OVER( ORDER BY x ) - 10 AS nt FROM x ; CREATE VIEW x AS SELECT NTILE ( 10 ) OVER( ORDER BY x ) - 10 AS nt FROM x ; SELECT win ( x ) OVER( ORDER BY x ) , median ( x ) OVER( ORDER BY x ) FROM x ; SELECT sumint ( x ) OVER( ORDER BY x ) FROM x ORDER BY x ; SELECT sumint ( x ) OVER( ORDER BY x ROWS BEWTEEN 10 PRECEDING AND 10 FOLLOWING ) FROM x ORDER BY x ; SELECT sum ( x ) OVER( ORDER BY x ROWS BEWTEEN 10 PRECEDING AND CURRENT ROW ) FROM x ; CREATE TABLE x ( x , x INTEGER ) ; INSERT INTO x ( x , x ) VALUES ( 10 , 0.1 ) ,( 10 , 0.1 ) ,( 10 , 0.1 ) ,( 10 , 0.1 ) ,( 10 , 0.1 ) ; INSERT INTO x ( x , x ) VALUES ( 10 , 'y' ) ,( 'y' , 'y' ) ,( 10 , 'y' ) ; SELECT x , ( SELECT x FROM x WHERE x = x ) FROM x ORDER BY x ; SELECT x , ( SELECT x FROM x WHERE x = x ) , sum ( x ) OVER( ORDER BY x ) FROM x ORDER BY x ; INSERT INTO x VALUES ( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ; SELECT x , sum ( x ) FROM x GROUP BY x ORDER BY 10 ; SELECT x , sum ( x ) OVER( ORDER BY x GROUPS BEWTEEN CURRENT ROW AND CURRENT ROW ) FROM x ORDER BY 10 ; SELECT x , sum ( x ) OVER( ORDER BY x GROUPS BEWTEEN 10 PRECEDING AND 10 FOLLOWING ) FROM x ORDER BY 10 ; SELECT x , sum ( x ) OVER( ORDER BY x RANGE BEWTEEN 10 PRECEDING AND 10 FOLLOWING ) FROM x ORDER BY 10 ; SELECT x , sum ( x ) OVER( ORDER BY x DESC RANGE BEWTEEN 10 PRECEDING AND 10 FOLLOWING ) FROM x ORDER BY 10 ; CREATE TABLE x ( x TEXT , x TEXT , x INTEGER ) ; INSERT INTO x VALUES ( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ,( 'y' , 'y' , 10 ) ; SELECT x , x , sum ( x ) OVER( ORDER BY x GROUPS BEWTEEN UNBOUNDED PRECEDING AND 10 PRECEDING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN UNBOUNDED PRECEDING AND 10 PRECEDING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , rank () OVER( ORDER BY x GROUPS BEWTEEN UNBOUNDED PRECEDING AND 10 PRECEDING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , max ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN UNBOUNDED PRECEDING AND 10 PRECEDING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , min ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN UNBOUNDED PRECEDING AND 10 PRECEDING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x GROUPS BEWTEEN UNBOUNDED PRECEDING AND 10 PRECEDING EXCLUDE CURRENT ROW ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN UNBOUNDED PRECEDING AND 10 PRECEDING EXCLUDE CURRENT ROW ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x GROUPS BEWTEEN UNBOUNDED PRECEDING AND 10 PRECEDING EXCLUDE CURRENT ROW ) , sum ( x ) OVER( ORDER BY x GROUPS BEWTEEN UNBOUNDED PRECEDING AND 10 PRECEDING ) , sum ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN UNBOUNDED PRECEDING AND 10 PRECEDING EXCLUDE CURRENT ROW ) , sum ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN UNBOUNDED PRECEDING AND 10 PRECEDING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x GROUPS BEWTEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , rank () OVER( ORDER BY x GROUPS BEWTEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , max ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , min ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x GROUPS BEWTEEN UNBOUNDED PRECEDING AND CURRENT ROW EXCLUDE CURRENT ROW ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN UNBOUNDED PRECEDING AND CURRENT ROW EXCLUDE CURRENT ROW ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x GROUPS BEWTEEN UNBOUNDED PRECEDING AND CURRENT ROW EXCLUDE CURRENT ROW ) , sum ( x ) OVER( ORDER BY x GROUPS BEWTEEN UNBOUNDED PRECEDING AND CURRENT ROW ) , sum ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN UNBOUNDED PRECEDING AND CURRENT ROW EXCLUDE CURRENT ROW ) , sum ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x GROUPS BEWTEEN UNBOUNDED PRECEDING AND 10 FOLLOWING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN UNBOUNDED PRECEDING AND 10 FOLLOWING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , rank () OVER( ORDER BY x GROUPS BEWTEEN UNBOUNDED PRECEDING AND 10 FOLLOWING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , max ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN UNBOUNDED PRECEDING AND 10 FOLLOWING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , min ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN UNBOUNDED PRECEDING AND 10 FOLLOWING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x GROUPS BEWTEEN UNBOUNDED PRECEDING AND 10 FOLLOWING EXCLUDE CURRENT ROW ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN UNBOUNDED PRECEDING AND 10 FOLLOWING EXCLUDE CURRENT ROW ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x GROUPS BEWTEEN UNBOUNDED PRECEDING AND 10 FOLLOWING EXCLUDE CURRENT ROW ) , sum ( x ) OVER( ORDER BY x GROUPS BEWTEEN UNBOUNDED PRECEDING AND 10 FOLLOWING ) , sum ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN UNBOUNDED PRECEDING AND 10 FOLLOWING EXCLUDE CURRENT ROW ) , sum ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN UNBOUNDED PRECEDING AND 10 FOLLOWING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x GROUPS BEWTEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , rank () OVER( ORDER BY x GROUPS BEWTEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , max ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , min ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x GROUPS BEWTEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x GROUPS BEWTEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) , sum ( x ) OVER( ORDER BY x GROUPS BEWTEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) , sum ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) , sum ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x GROUPS BEWTEEN 10 PRECEDING AND 10 PRECEDING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN 10 PRECEDING AND 10 PRECEDING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , rank () OVER( ORDER BY x GROUPS BEWTEEN 10 PRECEDING AND 10 PRECEDING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , max ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN 10 PRECEDING AND 10 PRECEDING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , min ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN 10 PRECEDING AND 10 PRECEDING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x GROUPS BEWTEEN 10 PRECEDING AND 10 PRECEDING EXCLUDE CURRENT ROW ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN 10 PRECEDING AND 10 PRECEDING EXCLUDE CURRENT ROW ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x GROUPS BEWTEEN 10 PRECEDING AND 10 PRECEDING EXCLUDE CURRENT ROW ) , sum ( x ) OVER( ORDER BY x GROUPS BEWTEEN 10 PRECEDING AND 10 PRECEDING ) , sum ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN 10 PRECEDING AND 10 PRECEDING EXCLUDE CURRENT ROW ) , sum ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN 10 PRECEDING AND 10 PRECEDING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x GROUPS BEWTEEN 10 PRECEDING AND CURRENT ROW ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN 10 PRECEDING AND CURRENT ROW ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , rank () OVER( ORDER BY x GROUPS BEWTEEN 10 PRECEDING AND CURRENT ROW ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , max ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN 10 PRECEDING AND CURRENT ROW ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , min ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN 10 PRECEDING AND CURRENT ROW ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x GROUPS BEWTEEN 10 PRECEDING AND CURRENT ROW EXCLUDE CURRENT ROW ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN 10 PRECEDING AND CURRENT ROW EXCLUDE CURRENT ROW ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x GROUPS BEWTEEN 10 PRECEDING AND CURRENT ROW EXCLUDE CURRENT ROW ) , sum ( x ) OVER( ORDER BY x GROUPS BEWTEEN 10 PRECEDING AND CURRENT ROW ) , sum ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN 10 PRECEDING AND CURRENT ROW EXCLUDE CURRENT ROW ) , sum ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN 10 PRECEDING AND CURRENT ROW ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x GROUPS BEWTEEN 10 PRECEDING AND 10 FOLLOWING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN 10 PRECEDING AND 10 FOLLOWING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , rank () OVER( ORDER BY x GROUPS BEWTEEN 10 PRECEDING AND 10 FOLLOWING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , max ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN 10 PRECEDING AND 10 FOLLOWING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , min ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN 10 PRECEDING AND 10 FOLLOWING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x GROUPS BEWTEEN 10 PRECEDING AND 10 FOLLOWING EXCLUDE CURRENT ROW ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN 10 PRECEDING AND 10 FOLLOWING EXCLUDE CURRENT ROW ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x GROUPS BEWTEEN 10 PRECEDING AND 10 FOLLOWING EXCLUDE CURRENT ROW ) , sum ( x ) OVER( ORDER BY x GROUPS BEWTEEN 10 PRECEDING AND 10 FOLLOWING ) , sum ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN 10 PRECEDING AND 10 FOLLOWING EXCLUDE CURRENT ROW ) , sum ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN 10 PRECEDING AND 10 FOLLOWING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x GROUPS BEWTEEN 10 PRECEDING AND UNBOUNDED FOLLOWING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN 10 PRECEDING AND UNBOUNDED FOLLOWING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , rank () OVER( ORDER BY x GROUPS BEWTEEN 10 PRECEDING AND UNBOUNDED FOLLOWING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , max ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN 10 PRECEDING AND UNBOUNDED FOLLOWING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , min ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN 10 PRECEDING AND UNBOUNDED FOLLOWING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x GROUPS BEWTEEN 10 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN 10 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x GROUPS BEWTEEN 10 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) , sum ( x ) OVER( ORDER BY x GROUPS BEWTEEN 10 PRECEDING AND UNBOUNDED FOLLOWING ) , sum ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN 10 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) , sum ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN 10 PRECEDING AND UNBOUNDED FOLLOWING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x GROUPS BEWTEEN CURRENT ROW AND 10 FOLLOWING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN CURRENT ROW AND 10 FOLLOWING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , rank () OVER( ORDER BY x GROUPS BEWTEEN CURRENT ROW AND 10 FOLLOWING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , max ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN CURRENT ROW AND 10 FOLLOWING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , min ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN CURRENT ROW AND 10 FOLLOWING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x GROUPS BEWTEEN CURRENT ROW AND 10 FOLLOWING EXCLUDE CURRENT ROW ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN CURRENT ROW AND 10 FOLLOWING EXCLUDE CURRENT ROW ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x GROUPS BEWTEEN CURRENT ROW AND 10 FOLLOWING EXCLUDE CURRENT ROW ) , sum ( x ) OVER( ORDER BY x GROUPS BEWTEEN CURRENT ROW AND 10 FOLLOWING ) , sum ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN CURRENT ROW AND 10 FOLLOWING EXCLUDE CURRENT ROW ) , sum ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN CURRENT ROW AND 10 FOLLOWING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x GROUPS BEWTEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , rank () OVER( ORDER BY x GROUPS BEWTEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , max ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , min ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x GROUPS BEWTEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x GROUPS BEWTEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) , sum ( x ) OVER( ORDER BY x GROUPS BEWTEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) , sum ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN CURRENT ROW AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) , sum ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x GROUPS BEWTEEN 10 FOLLOWING AND 10 FOLLOWING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN 10 FOLLOWING AND 10 FOLLOWING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , rank () OVER( ORDER BY x GROUPS BEWTEEN 10 FOLLOWING AND 10 FOLLOWING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , max ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN 10 FOLLOWING AND 10 FOLLOWING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , min ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN 10 FOLLOWING AND 10 FOLLOWING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x GROUPS BEWTEEN 10 FOLLOWING AND 10 FOLLOWING EXCLUDE CURRENT ROW ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN 10 FOLLOWING AND 10 FOLLOWING EXCLUDE CURRENT ROW ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x GROUPS BEWTEEN 10 FOLLOWING AND 10 FOLLOWING EXCLUDE CURRENT ROW ) , sum ( x ) OVER( ORDER BY x GROUPS BEWTEEN 10 FOLLOWING AND 10 FOLLOWING ) , sum ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN 10 FOLLOWING AND 10 FOLLOWING EXCLUDE CURRENT ROW ) , sum ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN 10 FOLLOWING AND 10 FOLLOWING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x GROUPS BEWTEEN 10 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN 10 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , rank () OVER( ORDER BY x GROUPS BEWTEEN 10 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , max ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN 10 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , min ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN 10 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x GROUPS BEWTEEN 10 FOLLOWING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN 10 FOLLOWING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) FROM x ORDER BY 10 , 10 , 10 ; SELECT x , x , sum ( x ) OVER( ORDER BY x GROUPS BEWTEEN 10 FOLLOWING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) , sum ( x ) OVER( ORDER BY x GROUPS BEWTEEN 10 FOLLOWING AND UNBOUNDED FOLLOWING ) , sum ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN 10 FOLLOWING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW ) , sum ( x ) OVER( ORDER BY x , x GROUPS BEWTEEN 10 FOLLOWING AND UNBOUNDED FOLLOWING ) FROM x ORDER BY 10 , 10 , 10 ; INSERT INTO x VALUES ( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ; INSERT INTO x VALUES ( NULL , 10 ) ,( NULL , 10 ) ,( NULL , 10 ) ,( 10 , 10 ) ,( 10 , 10 ) ; SELECT sum ( x ) OVER( ORDER BY x RANGE BEWTEEN 10 PRECEDING AND 10 FOLLOWING ) FROM x ORDER BY 10 ; SELECT sum ( x ) OVER( ORDER BY x DESC RANGE BEWTEEN 10 PRECEDING AND 10 FOLLOWING ) FROM x ORDER BY 10 ; SELECT sum ( x ) OVER( ORDER BY x RANGE BEWTEEN 10 FOLLOWING AND 10 FOLLOWING ) FROM x ORDER BY 10 NULLS FIRST ; SELECT sum ( x ) OVER( ORDER BY x RANGE BEWTEEN 10 FOLLOWING AND 10 FOLLOWING ) FROM x ORDER BY 10 NULLS LAST ; SELECT sum ( x ) OVER( ORDER BY x DESC RANGE BEWTEEN 10 FOLLOWING AND 10 FOLLOWING ) FROM x ORDER BY 10 NULLS FIRST ; SELECT sum ( x ) OVER( ORDER BY x DESC RANGE BEWTEEN 10 FOLLOWING AND 10 FOLLOWING ) FROM x ORDER BY 10 NULLS LAST ; SELECT sum ( x ) OVER( ORDER BY x NULLS FIRST RANGE BEWTEEN UNBOUNDED PRECEDING AND 10 FOLLOWING ) FROM x ORDER BY 10 NULLS FIRST ; SELECT sum ( x ) OVER( ORDER BY x NULLS LAST RANGE BEWTEEN UNBOUNDED PRECEDING AND 10 FOLLOWING ) FROM x ORDER BY 10 NULLS LAST ; SELECT sum ( x ) OVER( ORDER BY x NULLS FIRST ROWS BEWTEEN 10 PRECEDING AND 10 FOLLOWING ) FROM x ORDER BY 10 NULLS FIRST ; SELECT sum ( x ) OVER( ORDER BY x NULLS LAST ROWS BEWTEEN 10 PRECEDING AND 10 FOLLOWING ) FROM x ORDER BY 10 NULLS LAST ; SELECT sum ( x ) OVER( ORDER BY x DESC NULLS LAST ROWS BEWTEEN 10 PRECEDING AND 10 FOLLOWING ) FROM x ORDER BY 10 NULLS FIRST ; SELECT sum ( x ) OVER( ORDER BY x DESC NULLS LAST ROWS BEWTEEN 10 PRECEDING AND 10 FOLLOWING ) FROM x ORDER BY 10 NULLS LAST ; SELECT sum ( x ) OVER( ORDER BY x ASC NULLS LAST RANGE BEWTEEN UNBOUNDED PRECEDING AND 10 FOLLOWING ) FROM x ORDER BY 10 NULLS LAST ; SELECT sum ( x ) OVER( ORDER BY x DESC NULLS FIRST RANGE BEWTEEN UNBOUNDED PRECEDING AND 10 FOLLOWING ) FROM x ORDER BY 10 NULLS LAST ; INSERT INTO x VALUES ( NULL , 'y' , 10 ) ,( NULL , 'y' , 10 ) ,( NULL , 'y' , 10 ) ,( 'y' , NULL , 10 ) ,( 'y' , NULL , 10 ) ,( 'y' , NULL , 10 ) ,( NULL , 'y' , 10 ) ,( NULL , NULL , 10 ) ,( NULL , NULL , 10 ) ; SELECT x , x , dense_rank () OVER( ORDER BY x ) FROM x ; SELECT x , x , dense_rank () OVER( PARTITION BY x ORDER BY x ) FROM x ; SELECT x , x , dense_rank () OVER( ORDER BY x ) , dense_rank () OVER( PARTITION BY x ORDER BY x ) FROM x ; SELECT x , x , dense_rank () OVER( ORDER BY x ) , dense_rank () OVER( PARTITION BY x ORDER BY x ) FROM x ORDER BY x ; SELECT EXISTS ( SELECT 10 FROM x ORDER BY sum ( x ) OVER( ) ) FROM x ; SELECT x , x + 10 , x + 10 FROM SELECT x IN ( SELECT min ( x ) OVER( ) , ( abs ( row_number () OVER( ) ) + 10 ) / 10 , max ( x ) OVER( ) FROM x ) AS y FROM x ; SELECT x , x = count ( * ) , 'y' FROM x GROUP BY x ; SELECT x , x = count ( * ) , group_concat ( x ) OVER( ) FROM x GROUP BY x ; SELECT sum ( x ) OVER( ) , sum ( x ) OVER( ORDER BY x ) , sum ( x ) OVER( PARTITION BY x ORDER BY x ) , sum ( x ) OVER( PARTITION BY x , x ORDER BY x ) , sum ( x ) OVER( PARTITION BY x , x , x ORDER BY x ) FROM x ; SELECT sum ( x ) OVER( PARTITION BY x ORDER BY x ) FROM x ORDER BY x ; CREATE TABLE x ( x INTEGER PRIMARY KEY , x CHAR(1) , x FLOAT ) ; INSERT INTO x VALUES ( 10 , 'y' , 0.1 ) ,( 10 , 'y' , 0.1 ) ,( 10 , 'y' , 0.1 ) ,( 10 , 'y' , 0.1 ) ,( 10 , 'y' , 0.1 ) ,( 10 , 'y' , NULL ) ,( 10 , 'y' , NULL ) ; WITH y AS ( SELECT Row_Number () OVER( x ) FROM x ) SELECT * FROM x ; SELECT x , sum ( x ) OVER( ORDER BY x RANGE BEWTEEN 10 PRECEDING AND 10 PRECEDING ) FROM x ; SELECT x , sum ( x ) OVER( ORDER BY x RANGE BEWTEEN 10 FOLLOWING AND 10 FOLLOWING ) FROM x ; SELECT x , sum ( x ) OVER( ORDER BY x RANGE BEWTEEN 10 PRECEDING AND 10 PRECEDING EXCLUDE NO OTHERS ) FROM x ; SELECT x , sum ( x ) OVER( ORDER BY x RANGE BEWTEEN 10 FOLLOWING AND 10 FOLLOWING EXCLUDE NO OTHERS ) FROM x ; SELECT x , max ( x ) OVER( ORDER BY x RANGE BEWTEEN 10 FOLLOWING AND 10 FOLLOWING ) FROM x ; SELECT x , min ( x ) OVER( ORDER BY x RANGE BEWTEEN 10 FOLLOWING AND 10 FOLLOWING ) FROM x ; SELECT x , max ( x ) OVER( ORDER BY x RANGE BEWTEEN 10 PRECEDING AND 10 PRECEDING ) FROM x ; SELECT x , min ( x ) OVER( ORDER BY x RANGE BEWTEEN 10 PRECEDING AND 10 PRECEDING ) FROM x ; SELECT sum ( x ) OVER( ) AS xyz FROM x ORDER BY sum ( x ) ; WITH tmp AS ( SELECT * FROM x ) SELECT x FROM x ; CREATE TABLE x ( x INTEGER NULL PRIMARY KEY , x TEXT ) ; CREATE VIEW x AS SELECT max ( x ) , min ( x ) FROM x GROUP BY x ; SELECT * FROM x . x AS a , x . x AS b , x . x AS c , x . x AS d ; WITH x1 AS ( SELECT * FROM x ) SELECT sum ( x ) FROM x ; WITH x1 AS ( SELECT * FROM x ) SELECT ( SELECT sum ( x ) FROM x ) ; CREATE TABLE x AS SELECT 10 AS x ; WITH x1 AS ( SELECT * FROM x ) SELECT ( SELECT sum ( x ) FROM x ) , ( SELECT max ( x ) FROM x ) ; WITH x1 AS ( SELECT * FROM x ) SELECT ( SELECT sum ( x ) FROM x ) , ( SELECT max ( x ) FROM x ) , x FROM x ; CREATE VIEW x AS SELECT * FROM x , x . x ; WITH tmp AS ( SELECT * FROM x ) SELECT * FROM x ; SELECT * , 'y' FROM x ORDER BY x DESC , x DESC ; REPLACE INTO x VALUES ( 'y' , 'y' , 'y' , 'y' ) ; UPDATE x SET x = 0.1 WHERE x = 'y' ; INSERT OR REPLACE INTO x SELECT * FROM x ; CREATE TABLE x ( x INT CHECK( x != 10 ) , x TEXT PRIMARY KEY ) ; INSERT INTO x ( x , x , x ) VALUES ( 10 , 10 , 'y' ) ; INSERT INTO x VALUES ( 'y' , 'y' , 0.1 , 'y' , 'y' , 0.1 ) ; INSERT INTO x VALUES ( NULL , 10 , 10 , 10 , 10 ) ; INSERT INTO x VALUES ( 10 , 10 , NULL , 10 , 10 ) ; SELECT x FROM x ORDER BY x DESC LIMIT 10 ; SELECT * , 'y' FROM x 'y' ; SELECT x FROM x WHERE x = zeroblob ( 10 ) ; SELECT CAST ( zeroblob ( 10 ) AS INTEGER ) ; SELECT CAST ( zeroblob ( 10 ) AS TEXT ) ; SELECT 'y' AS a , zeroblob ( 10 ) AS b FROM x ORDER BY x , x ; SELECT length ( zeroblob ( 10 ) ) ; SELECT zeroblob ( 10 * 10 * 10 ) ; SELECT quote ( zeroblob ( 10 * 10 * 10 ) ) ; SELECT quote ( zeroblob ( 10 ) ) ; SELECT quote ( test_zeroblob ( 10 ) ) ; SELECT x , quote ( x ) , length ( x ) , x FROM x ; INSERT INTO x ( x , x , x , x , x , x ) VALUES ( 'y' , 'y' , 10 , 10 , 'y' , 10 ) ; INSERT INTO x ( x , x , x , x , x ) VALUES ( 'y' , 10 , 10 , 'y' , 10 ) ; INSERT INTO x ( x , x , x , x ) VALUES ( 'y' , 10 , 'y' , 10 ) ; INSERT INTO x ( x , x , x ) VALUES ( 'y' , 'y' , 10 ) ; INSERT INTO x ( x , x , x , x , x ) VALUES ( 'y' , 'y' , 10 , 'y' , 10 ) ; INSERT INTO x ( x , x , x , x , x ) VALUES ( 'y' , NULL , 10 , 'y' , 10 ) ; SELECT x , x , x , x FROM x 'y' ; SELECT zipfile_cds ( x ) FROM x 'y' ; SELECT x , x , x , x , x FROM x 'y' ; INSERT INTO x ( x , x ) VALUES ( 'y' , NULL ) ; REPLACE INTO x ( x , x ) VALUES ( 'y' , 'y' ) ,( 'y' , 'y' ) ; INSERT OR IGNORE INTO x ( x , x ) VALUES ( 'y' , 'y' ) ,( 'y' , 'y' ) ; UPDATE x SET x = x CONCAT 'y' ; SELECT x FROM x 'y' ORDER BY 10 ; SELECT x FROM x JOIN x JOIN x x ORDER BY 10 ; SELECT x FROM x JOIN x JOIN x 'y' , x ORDER BY 10 ; CREATE VIRTUAL TABLE x USING zipfile ( testzip ) ; ================================================ FILE: data/fuzz_root/init_lib/sqltest ================================================ SELECT * FROM fdt WHERE c1 IN (1, 2, 3) SELECT * FROM fdt WHERE c1 IN (SELECT c1 FROM t2) SELECT * FROM fdt WHERE c1 IN (SELECT c3 FROM t2 WHERE c2 = fdt.c1 + 10) SELECT * FROM fdt WHERE c1 BETWEEN (SELECT c3 FROM t2 WHERE c2 = fdt.c1 + 10) AND 100 SELECT * FROM fdt WHERE EXISTS (SELECT c1 FROM t2 WHERE c2 > fdt.c1) SELECT * FROM test1 SELECT x FROM test1 GROUP BY x SELECT x, sum(y) FROM test1 GROUP BY x SELECT product_id, p.name, (sum(s.units) * p.price) AS sales FROM products p LEFT JOIN sales s USING (product_id) GROUP BY product_id, p.name, p.price SELECT x, sum(y) FROM test1 GROUP BY x HAVING sum(y) > 3 SELECT x, sum(y) FROM test1 GROUP BY x HAVING x < 'c' SELECT product_id, p.name, (sum(s.units) * (p.price - p.cost)) AS profit FROM products p LEFT JOIN sales s USING (product_id) WHERE s.datex > CURRENT_DATE - INTERVAL '4 weeks' GROUP BY product_id, p.name, p.price, p.cost HAVING sum(p.price * s.units) > 5000 SELECT a, b, c FROM t SELECT tbl1.a, tbl2.a, tbl1.b FROM t SELECT tbl1.*, tbl2.a FROM t SELECT a AS value, b + c AS sum FROM t SELECT a "value", b + c AS sum FROM t SELECT DISTINCT select_list t VALUES (1, 'one'), (2, 'two'), (3, 'three') SELECT 1 AS column1, 'one' AS column2 UNION ALL SELECT 2, 'two' UNION ALL SELECT 3, 'three' SELECT CNTRYCODE, COUNT(*) AS NUMCUST, SUM(C_ACCTBAL) AS TOTACCTBAL FROM (SELECT SUBSTRING(C_PHONE,1,2) AS CNTRYCODE, C_ACCTBAL FROM CUSTOMER WHERE SUBSTRING(C_PHONE,1,2) IN ('13', '31', '23', '29', '30', '18', '17') AND C_ACCTBAL > (SELECT AVG(C_ACCTBAL) FROM CUSTOMER WHERE C_ACCTBAL > 0.00 AND SUBSTRING(C_PHONE,1,2) IN ('13', '31', '23', '29', '30', '18', '17')) AND NOT EXISTS ( SELECT * FROM ORDERS WHERE O_CUSTKEY = C_CUSTKEY)) AS CUSTSALE GROUP BY CNTRYCODE ORDER BY CNTRYCODE; SELECT * FROM orders; SELECT a FROM foo WHERE a > 12 OR b > 3 AND NOT c LIMIT 10 SELECT a FROM some_schema.foo WHERE a > 12 OR b > 3 AND NOT c LIMIT 10 SELECT col1 AS myname, col2, 'test' FROM "table", foo AS t WHERE age > 12 AND zipcode = 12345 GROUP BY col1; SELECT * from "table" JOIN table2 ON a = b WHERE (b OR NOT a) AND a = 12.5 (SELECT a FROM foo WHERE a > 12 OR b > 3 AND c NOT LIKE 's%' LIMIT 10); SELECT * FROM "table" LIMIT 10 OFFSET 10; SELECT * FROM another; SELECT * FROM t1 UNION SELECT * FROM t2 ORDER BY col1; SELECT * FROM (SELECT * FROM t1); SELECT * FROM t1 UNION (SELECT * FROM t2 UNION SELECT * FROM t3) ORDER BY col1; SELECT * FROM t1 ORDER BY col1, col2; SELECT a, MAX(b), MAX(c, d), CUSTOM(q, UP(r)) AS f FROM t1; SELECT * FROM t WHERE a BETWEEN 1 and c; SELECT * FROM t WHERE a = 1 AND b = 1.2; SELECT City.name, Product.category, SUM(price) FROM fact INNER JOIN City ON fact.city_id = City.id INNER JOIN Product ON fact.product_id = Product.id GROUP BY City.name, Product.category; SELECT SUBSTR(a, 3, 5) FROM t; SELECT t1.a, t1.b, t2.c FROM "table" AS t1 JOIN (SELECT * FROM foo JOIN bar ON foo.id = bar.id) t2 ON t1.a = t2.b WHERE (t1.b OR NOT t1.a) AND t2.c = 12.5 SELECT * FROM t1 JOIN t2 ON c1 = c2; SELECT a, SUM(b) FROM t2 GROUP BY a HAVING SUM(b) > 100; CREATE TABLE "table" FROM TBL FILE 'students.tbl' CREATE TABLE IF NOT EXISTS "table" FROM TBL FILE 'students.tbl' CREATE TABLE students (name TEXT, student_number INTEGER, city TEXT, grade DOUBLE) CREATE TABLE teachers (name VARCHAR(30), student_number LONG, city CHAR(10), grade FLOAT) CREATE TABLE students_2 AS SELECT * FROM students CREATE TABLE students_3 AS SELECT city, grade FROM students WHERE grade > 3.0 CREATE TABLE "table" FROM TBL FILE 'students.tbl'; SELECT * FROM "table"; TRUNCATE students UPDATE students SET grade = 1.3 WHERE name = 'Max Mustermann'; UPDATE students SET grade = 1.3, name='Felix Fürstenberg' WHERE name = 'Max Mustermann'; UPDATE students SET grade = 1.0; UPDATE some_schema.students SET grade = 1.0; DROP TABLE students; DROP TABLE IF EXISTS students; DROP VIEW IF EXISTS students; PREPARE prep_inst FROM '!INSERT INTO test VALUES (1, 'a', 1.2)'; PREPARE prep2 FROM '!INSERT INTO test VALUES (1, 0, 0); !INSERT INTO test VALUES (0, 1, 0); !INSERT INTO test VALUES (0, 0, null);'; EXECUTE prep_inst(1, 2, 3); EXECUTE prep; DEALLOCATE PREPARE prep; SELECT * FROM test WITH HINT(NO_CACHE); SELECT * FROM test WITH HINT(NO_CACHE, NO_SAMPLING); SELECT * FROM test WITH HINT(NO_CACHE, SAMPLE_RATE(0.1), OMW(1.0, 'test')); SHOW TABLES; SHOW COLUMNS students; DESCRIBE students; SELECT L_RETURNFLAG, L_LINESTATUS, SUM(L_QUANTITY) AS SUM_QTY, SUM(L_EXTENDEDPRICE) AS SUM_BASE_PRICE, SUM(L_EXTENDEDPRICE*(1-L_DISCOUNT)) AS SUM_DISC_PRICE, SUM(L_EXTENDEDPRICE*(1-L_DISCOUNT)*(1+L_TAX)) AS SUM_CHARGE, AVG(L_QUANTITY) AS AVG_QTY, AVG(L_EXTENDEDPRICE) AS AVG_PRICE, AVG(L_DISCOUNT) AS AVG_DISC, COUNT(*) AS COUNT_ORDER FROM LINEITEM WHERE L_SHIPDATE <= dateadd(dd, -90, cast('1998-12-01' as datetime)) GROUP BY L_RETURNFLAG, L_LINESTATUS ORDER BY L_RETURNFLAG,L_LINESTATUS SELECT S_ACCTBAL, S_NAME, N_NAME, P_PARTKEY, P_MFGR, S_ADDRESS, S_PHONE, S_COMMENT FROM PART, SUPPLIER, PARTSUPP, NATION, REGION WHERE P_PARTKEY = PS_PARTKEY AND S_SUPPKEY = PS_SUPPKEY AND P_SIZE = 15 AND P_TYPE LIKE '%%BRASS' AND S_NATIONKEY = N_NATIONKEY AND N_REGIONKEY = R_REGIONKEY AND R_NAME = 'EUROPE' AND PS_SUPPLYCOST = (SELECT MIN(PS_SUPPLYCOST) FROM PARTSUPP, SUPPLIER, NATION, REGION WHERE P_PARTKEY = PS_PARTKEY AND S_SUPPKEY = PS_SUPPKEY AND S_NATIONKEY = N_NATIONKEY AND N_REGIONKEY = R_REGIONKEY AND R_NAME = 'EUROPE') ORDER BY S_ACCTBAL DESC, N_NAME, S_NAME, P_PARTKEY SELECT L_ORDERKEY, SUM(L_EXTENDEDPRICE*(1-L_DISCOUNT)) AS REVENUE, O_ORDERDATE, O_SHIPPRIORITY FROM CUSTOMER, ORDERS, LINEITEM WHERE C_MKTSEGMENT = 'BUILDING' AND C_CUSTKEY = O_CUSTKEY AND L_ORDERKEY = O_ORDERKEY AND O_ORDERDATE < '1995-03-15' AND L_SHIPDATE > '1995-03-15' GROUP BY L_ORDERKEY, O_ORDERDATE, O_SHIPPRIORITY ORDER BY REVENUE DESC, O_ORDERDATE; SELECT O_ORDERPRIORITY, COUNT(*) AS ORDER_COUNT FROM ORDERS WHERE O_ORDERDATE >= '1993-07-01' AND O_ORDERDATE < dateadd(mm,3, cast('1993-07-01' as datetime)) AND EXISTS (SELECT * FROM LINEITEM WHERE L_ORDERKEY = O_ORDERKEY AND L_COMMITDATE < L_RECEIPTDATE) GROUP BY O_ORDERPRIORITY ORDER BY O_ORDERPRIORITY SELECT N_NAME, SUM(L_EXTENDEDPRICE*(1-L_DISCOUNT)) AS REVENUE FROM CUSTOMER, ORDERS, LINEITEM, SUPPLIER, NATION, REGION WHERE C_CUSTKEY = O_CUSTKEY AND L_ORDERKEY = O_ORDERKEY AND L_SUPPKEY = S_SUPPKEY AND C_NATIONKEY = S_NATIONKEY AND S_NATIONKEY = N_NATIONKEY AND N_REGIONKEY = R_REGIONKEY AND R_NAME = 'ASIA' AND O_ORDERDATE >= '1994-01-01' AND O_ORDERDATE < DATEADD(YY, 1, cast('1994-01-01' as datetime)) GROUP BY N_NAME ORDER BY REVENUE DESC SELECT SUM(L_EXTENDEDPRICE*L_DISCOUNT) AS REVENUE FROM LINEITEM WHERE L_SHIPDATE >= '1994-01-01' AND L_SHIPDATE < dateadd(yy, 1, cast('1994-01-01' as datetime)) AND L_DISCOUNT BETWEEN .06 - 0.01 AND .06 + 0.01 AND L_QUANTITY < 24 SELECT SUPP_NATION, CUST_NATION, L_YEAR, SUM(VOLUME) AS REVENUE FROM ( SELECT N1.N_NAME AS SUPP_NATION, N2.N_NAME AS CUST_NATION, datepart(yy, L_SHIPDATE) AS L_YEAR, L_EXTENDEDPRICE*(1-L_DISCOUNT) AS VOLUME FROM SUPPLIER, LINEITEM, ORDERS, CUSTOMER, NATION N1, NATION N2 WHERE S_SUPPKEY = L_SUPPKEY AND O_ORDERKEY = L_ORDERKEY AND C_CUSTKEY = O_CUSTKEY AND S_NATIONKEY = N1.N_NATIONKEY AND C_NATIONKEY = N2.N_NATIONKEY AND ((N1.N_NAME = 'FRANCE' AND N2.N_NAME = 'GERMANY') OR (N1.N_NAME = 'GERMANY' AND N2.N_NAME = 'FRANCE')) AND L_SHIPDATE BETWEEN '1995-01-01' AND '1996-12-31' ) AS SHIPPING GROUP BY SUPP_NATION, CUST_NATION, L_YEAR ORDER BY SUPP_NATION, CUST_NATION, L_YEAR SELECT O_YEAR, SUM(CASE WHEN NATION = 'BRAZIL' THEN VOLUME ELSE 0 END)/SUM(VOLUME) AS MKT_SHARE FROM (SELECT datepart(yy,O_ORDERDATE) AS O_YEAR, L_EXTENDEDPRICE*(1-L_DISCOUNT) AS VOLUME, N2.N_NAME AS NATION FROM "PART", SUPPLIER, LINEITEM, ORDERS, CUSTOMER, NATION N1, NATION N2, REGION WHERE P_PARTKEY = L_PARTKEY AND S_SUPPKEY = L_SUPPKEY AND L_ORDERKEY = O_ORDERKEY AND O_CUSTKEY = C_CUSTKEY AND C_NATIONKEY = N1.N_NATIONKEY AND N1.N_REGIONKEY = R_REGIONKEY AND R_NAME = 'AMERICA' AND S_NATIONKEY = N2.N_NATIONKEY AND O_ORDERDATE BETWEEN '1995-01-01' AND '1996-12-31' AND P_TYPE= 'ECONOMY ANODIZED STEEL') AS ALL_NATIONS GROUP BY O_YEAR ORDER BY O_YEAR SELECT NATION, O_YEAR, SUM(AMOUNT) AS SUM_PROFIT FROM (SELECT N_NAME AS NATION, datepart(yy, O_ORDERDATE) AS O_YEAR, L_EXTENDEDPRICE*(1-L_DISCOUNT)-PS_SUPPLYCOST*L_QUANTITY AS AMOUNT FROM "PART", SUPPLIER, LINEITEM, PARTSUPP, ORDERS, NATION WHERE S_SUPPKEY = L_SUPPKEY AND PS_SUPPKEY= L_SUPPKEY AND PS_PARTKEY = L_PARTKEY AND P_PARTKEY= L_PARTKEY AND O_ORDERKEY = L_ORDERKEY AND S_NATIONKEY = N_NATIONKEY AND P_NAME LIKE '%%green%%') AS PROFIT GROUP BY NATION, O_YEAR ORDER BY NATION, O_YEAR DESC SELECT C_CUSTKEY, C_NAME, SUM(L_EXTENDEDPRICE*(1-L_DISCOUNT)) AS REVENUE, C_ACCTBAL, N_NAME, C_ADDRESS, C_PHONE, C_COMMENT FROM CUSTOMER, ORDERS, LINEITEM, NATION WHERE C_CUSTKEY = O_CUSTKEY AND L_ORDERKEY = O_ORDERKEY AND O_ORDERDATE>= '1993-10-01' AND O_ORDERDATE < dateadd(mm, 3, cast('1993-10-01' as datetime)) AND L_RETURNFLAG = 'R' AND C_NATIONKEY = N_NATIONKEY GROUP BY C_CUSTKEY, C_NAME, C_ACCTBAL, C_PHONE, N_NAME, C_ADDRESS, C_COMMENT ORDER BY REVENUE DESC SELECT PS_PARTKEY, SUM(PS_SUPPLYCOST*PS_AVAILQTY) AS VALUE FROM PARTSUPP, SUPPLIER, NATION WHERE PS_SUPPKEY = S_SUPPKEY AND S_NATIONKEY = N_NATIONKEY AND N_NAME = 'GERMANY' GROUP BY PS_PARTKEY HAVING SUM(PS_SUPPLYCOST*PS_AVAILQTY) > (SELECT SUM(PS_SUPPLYCOST*PS_AVAILQTY) * 0.0001000000 FROM PARTSUPP, SUPPLIER, NATION WHERE PS_SUPPKEY = S_SUPPKEY AND S_NATIONKEY = N_NATIONKEY AND N_NAME = 'GERMANY') ORDER BY VALUE DESC; SELECT L_SHIPMODE, SUM(CASE WHEN O_ORDERPRIORITY = '1-URGENT' OR O_ORDERPRIORITY = '2-HIGH' THEN 1 ELSE 0 END) AS HIGH_LINE_COUNT, SUM(CASE WHEN O_ORDERPRIORITY <> '1-URGENT' AND O_ORDERPRIORITY <> '2-HIGH' THEN 1 ELSE 0 END ) AS LOW_LINE_COUNT FROM ORDERS, LINEITEM WHERE O_ORDERKEY = L_ORDERKEY AND L_SHIPMODE IN ('MAIL','SHIP') AND L_COMMITDATE < L_RECEIPTDATE AND L_SHIPDATE < L_COMMITDATE AND L_RECEIPTDATE >= '1994-01-01' AND L_RECEIPTDATE < dateadd(mm, 1, cast('1995-09-01' as datetime)) GROUP BY L_SHIPMODE ORDER BY L_SHIPMODE; SELECT C_COUNT, COUNT(*) AS CUSTDIST FROM (SELECT C_CUSTKEY, COUNT(O_ORDERKEY) FROM CUSTOMER left outer join ORDERS on C_CUSTKEY = O_CUSTKEY AND O_COMMENT not like '%%special%%requests%%' GROUP BY C_CUSTKEY) AS C_ORDERS (C_CUSTKEY, C_COUNT) GROUP BY C_COUNT ORDER BY CUSTDIST DESC, C_COUNT DESC; SELECT 100.00* SUM(CASE WHEN P_TYPE LIKE 'PROMO%%' THEN L_EXTENDEDPRICE*(1-L_DISCOUNT) ELSE 0 END) / SUM(L_EXTENDEDPRICE*(1-L_DISCOUNT)) AS PROMO_REVENUE FROM LINEITEM, PART WHERE L_PARTKEY = P_PARTKEY AND L_SHIPDATE >= '1995-09-01' AND L_SHIPDATE < dateadd(mm, 1, '1995-09-01'); CREATE VIEW REVENUE0 (SUPPLIER_NO, TOTAL_REVENUE) AS SELECT L_SUPPKEY, SUM(L_EXTENDEDPRICE*(1-L_DISCOUNT)) FROM LINEITEM WHERE L_SHIPDATE >= '1996-01-01' AND L_SHIPDATE < dateadd(mm, 3, cast('1996-01-01' as datetime)) GROUP BY L_SUPPKEY; SELECT S_SUPPKEY, S_NAME, S_ADDRESS, S_PHONE, TOTAL_REVENUE FROM SUPPLIER, REVENUE0 WHERE S_SUPPKEY = SUPPLIER_NO AND TOTAL_REVENUE = (SELECT MAX(TOTAL_REVENUE) FROM REVENUE0) ORDER BY S_SUPPKEY; DROP VIEW REVENUE0; SELECT SUM(L_EXTENDEDPRICE)/7.0 AS AVG_YEARLY FROM LINEITEM, "PART" WHERE P_PARTKEY = L_PARTKEY AND P_BRAND = 'Brand#23' AND P_CONTAINER = 'MED BOX' AND L_QUANTITY < (SELECT 0.2*AVG(L_QUANTITY) FROM LINEITEM WHERE L_PARTKEY = P_PARTKEY); SELECT C_NAME, C_CUSTKEY, O_ORDERKEY, O_ORDERDATE, O_TOTALPRICE, SUM(L_QUANTITY) FROM CUSTOMER, ORDERS, LINEITEM WHERE O_ORDERKEY IN (SELECT L_ORDERKEY FROM LINEITEM GROUP BY L_ORDERKEY HAVING SUM(L_QUANTITY) > 300) AND C_CUSTKEY = O_CUSTKEY AND O_ORDERKEY = L_ORDERKEY GROUP BY C_NAME, C_CUSTKEY, O_ORDERKEY, O_ORDERDATE, O_TOTALPRICE ORDER BY O_TOTALPRICE DESC, O_ORDERDATE; SELECT SUM(L_EXTENDEDPRICE* (1 - L_DISCOUNT)) AS REVENUE FROM LINEITEM, "PART" WHERE (P_PARTKEY = L_PARTKEY AND P_BRAND = 'Brand#12' AND P_CONTAINER IN ('SM CASE', 'SM BOX', 'SM PACK', 'SM PKG') AND L_QUANTITY >= 1 AND L_QUANTITY <= 1 + 10 AND P_SIZE BETWEEN 1 AND 5 AND L_SHIPMODE IN ('AIR', 'AIR REG') AND L_SHIPINSTRUCT = 'DELIVER IN PERSON') OR (P_PARTKEY = L_PARTKEY AND P_BRAND ='Brand#23' AND P_CONTAINER IN ('MED BAG', 'MED BOX', 'MED PKG', 'MED PACK') AND L_QUANTITY >=10 AND L_QUANTITY <=10 + 10 AND P_SIZE BETWEEN 1 AND 10 AND L_SHIPMODE IN ('AIR', 'AIR REG') AND L_SHIPINSTRUCT = 'DELIVER IN PERSON') OR (P_PARTKEY = L_PARTKEY AND P_BRAND = 'Brand#34' AND P_CONTAINER IN ( 'LG CASE', 'LG BOX', 'LG PACK', 'LG PKG') AND L_QUANTITY >=20 AND L_QUANTITY <= 20 + 10 AND P_SIZE BETWEEN 1 AND 15 AND L_SHIPMODE IN ('AIR', 'AIR REG') AND L_SHIPINSTRUCT = 'DELIVER IN PERSON'); SELECT S_NAME, S_ADDRESS FROM SUPPLIER, NATION WHERE S_SUPPKEY IN (SELECT PS_SUPPKEY FROM PARTSUPP WHERE PS_PARTKEY in (SELECT P_PARTKEY FROM "PART" WHERE P_NAME like 'forest%%') AND PS_AVAILQTY > (SELECT 0.5*sum(L_QUANTITY) FROM LINEITEM WHERE L_PARTKEY = PS_PARTKEY AND L_SUPPKEY = PS_SUPPKEY AND L_SHIPDATE >= '1994-01-01' AND L_SHIPDATE < dateadd(yy,1,'1994-01-01'))) AND S_NATIONKEY = N_NATIONKEY AND N_NAME = 'CANADA' ORDER BY S_NAME; SELECT S_NAME, COUNT(*) AS NUMWAIT FROM SUPPLIER, LINEITEM L1, ORDERS, NATION WHERE S_SUPPKEY = L1.L_SUPPKEY AND O_ORDERKEY = L1.L_ORDERKEY AND O_ORDERSTATUS = 'F' AND L1.L_RECEIPTDATE> L1.L_COMMITDATE AND EXISTS (SELECT * FROM LINEITEM L2 WHERE L2.L_ORDERKEY = L1.L_ORDERKEY AND L2.L_SUPPKEY <> L1.L_SUPPKEY) AND NOT EXISTS (SELECT * FROM LINEITEM L3 WHERE L3.L_ORDERKEY = L1.L_ORDERKEY AND L3.L_SUPPKEY <> L1.L_SUPPKEY AND L3.L_RECEIPTDATE > L3.L_COMMITDATE) AND S_NATIONKEY = N_NATIONKEY AND N_NAME = 'SAUDI ARABIA' GROUP BY S_NAME ORDER BY NUMWAIT DESC, S_NAME; SELECT CNTRYCODE, COUNT(*) AS NUMCUST, SUM(C_ACCTBAL) AS TOTACCTBAL FROM (SELECT SUBSTRING(C_PHONE,1,2) AS CNTRYCODE, C_ACCTBAL FROM CUSTOMER WHERE SUBSTRING(C_PHONE,1,2) IN ('13', '31', '23', '29', '30', '18', '17') AND C_ACCTBAL > (SELECT AVG(C_ACCTBAL) FROM CUSTOMER WHERE C_ACCTBAL > 0.00 AND SUBSTRING(C_PHONE,1,2) IN ('13', '31', '23', '29', '30', '18', '17')) AND NOT EXISTS ( SELECT * FROM ORDERS WHERE O_CUSTKEY = C_CUSTKEY)) AS CUSTSALE GROUP BY CNTRYCODE ORDER BY CNTRYCODE; CREATE TABLE x ( x CHAR(0) ) CREATE TABLE x ( x CHAR(1) ) CREATE TABLE x ( x CHAR(1) , x CHAR(1) , x INT ) CREATE TABLE x ( x CHAR(10) ) CREATE TABLE x ( x CHAR(100) ) CREATE TABLE x ( x CHAR(100) , x CHAR(100) ) CREATE TABLE x ( x CHAR(15) ) CREATE TABLE x ( x CHAR(200) ) CREATE TABLE x ( x CHAR(30) ) CREATE TABLE x ( x CHAR(30) , x CHAR(20) ) CREATE TABLE x ( x CHAR(30) , x CHAR(20) , x CHAR(10) ) CREATE TABLE x ( x CHAR(30) , x CHAR(20) , x INT , x VARCHAR(10) ) CREATE TABLE x ( x CHAR(30) , x CHAR(30) ) CREATE TABLE x ( x CHAR(30) , x VARCHAR(20) , x INT , x VARCHAR(10) ) CREATE TABLE x ( x CHAR(50) ) CREATE TABLE x ( x DOUBLE ) CREATE TABLE x ( x DOUBLE , x DOUBLE ) CREATE TABLE x ( x DOUBLE , x DOUBLE , x DOUBLE ) CREATE TABLE x ( x DOUBLE , x DOUBLE , x INT , x VARCHAR(10) ) CREATE TABLE x ( x DOUBLE , x FLOAT , x INT , x VARCHAR(10) ) CREATE TABLE x ( x DOUBLE , x INT , x INT , x VARCHAR(10) ) CREATE TABLE x ( x DOUBLE , x INTEGER , x INT , x VARCHAR(10) ) CREATE TABLE x ( x FLOAT ) CREATE TABLE x ( x FLOAT , x DOUBLE , x INT , x VARCHAR(10) ) CREATE TABLE x ( x FLOAT , x FLOAT ) CREATE TABLE x ( x FLOAT , x FLOAT , x FLOAT ) CREATE TABLE x ( x FLOAT , x FLOAT , x INT , x VARCHAR(10) ) CREATE TABLE x ( x FLOAT , x INT , x INT , x VARCHAR(10) ) CREATE TABLE x ( x FLOAT , x INTEGER , x INT , x VARCHAR(10) ) CREATE TABLE x ( x INT ) CREATE TABLE x ( x INT , x CHAR(100) ) CREATE TABLE x ( x INT , x CHAR(100) , x FLOAT ) CREATE TABLE x ( x INT , x DOUBLE , x INT , x VARCHAR(10) ) CREATE TABLE x ( x INT , x FLOAT , x INT , x VARCHAR(10) ) CREATE TABLE x ( x INT , x INT ) CREATE TABLE x ( x INT , x INT , x INT ) CREATE TABLE x ( x INT , x INT , x INT , x VARCHAR(10) ) CREATE TABLE x ( x INT , x INTEGER , x INT , x VARCHAR(10) ) CREATE TABLE x ( x INT , x VARCHAR(100) ) CREATE TABLE x ( x INT , x VARCHAR(100) , x FLOAT ) CREATE TABLE x ( x INTEGER ) CREATE TABLE x ( x INTEGER , x DOUBLE , x INT , x VARCHAR(10) ) CREATE TABLE x ( x INTEGER , x FLOAT , x INT , x VARCHAR(10) ) CREATE TABLE x ( x INTEGER , x INT , x INT , x VARCHAR(10) ) CREATE TABLE x ( x INTEGER , x INTEGER ) CREATE TABLE x ( x INTEGER , x INTEGER , x INT , x VARCHAR(10) ) CREATE TABLE x ( x INTEGER , x INTEGER , x INTEGER ) CREATE TABLE x ( x TEXT ) CREATE TABLE x ( x VARCHAR(0) ) CREATE TABLE x ( x VARCHAR(1) ) CREATE TABLE x ( x VARCHAR(1) , x VARCHAR(1) , x INT ) CREATE TABLE x ( x VARCHAR(10) ) CREATE TABLE x ( x VARCHAR(10) , x VARCHAR(10) , x INT ) CREATE TABLE x ( x VARCHAR(10) , x VARCHAR(10) , x INTEGER ) CREATE TABLE x ( x VARCHAR(100) ) CREATE TABLE x ( x VARCHAR(100) , x VARCHAR(100) ) CREATE TABLE x ( x VARCHAR(15) ) CREATE TABLE x ( x VARCHAR(200) ) CREATE TABLE x ( x VARCHAR(30) ) CREATE TABLE x ( x VARCHAR(30) , x CHAR(20) , x INT , x VARCHAR(10) ) CREATE TABLE x ( x VARCHAR(30) , x VARCHAR(20) ) CREATE TABLE x ( x VARCHAR(30) , x VARCHAR(20) , x INT , x VARCHAR(10) ) CREATE TABLE x ( x VARCHAR(30) , x VARCHAR(20) , x VARCHAR(10) ) CREATE TABLE x ( x VARCHAR(30) , x VARCHAR(30) ) CREATE TABLE x ( x VARCHAR(50) ) CREATE TABLE x . x ( x INTEGER ) DEALLOCATE PREPARE x SHOW TABLES ; PREPARE x FROM 'y' SELECT ( SELECT x ( x ) FROM x ) SELECT ( SELECT x ( x ) FROM x ) FROM x SELECT ( SELECT x , x FROM x ) FROM x SELECT * FROM x . x ORDER BY x SELECT * FROM x LIMIT 10 SELECT * FROM x ORDER BY x SELECT * FROM x WHERE x ( 10 , 10 ) = ( SELECT x , x FROM x WHERE x = 10 ) SELECT * FROM x WHERE x = 'y' AND x = 'y' LIMIT 10 SELECT * FROM x WHERE x = 'y' LIMIT 10 SELECT * FROM x WHERE x = 'y' ORDER BY x , x , x SELECT * FROM x WHERE x = 'y' ORDER BY x , x , x DESC SELECT * FROM x WHERE x = ( SELECT x FROM x ) SELECT * FROM x WHERE x IN ( SELECT x FROM x ORDER BY x LIMIT 10 ) SELECT * FROM x WHERE x IS NULL SELECT DISTINCT x , x , x FROM x SELECT DISTINCT x , x , x FROM x WHERE x . x = 'y' SELECT DISTINCT x , x , x FROM x WHERE x . x = 'y' AND x . x = 'y' SELECT DISTINCT x , x FROM x SELECT DISTINCT x , x FROM x WHERE x . x = 'y' SELECT DISTINCT x , x FROM x WHERE x . x = 'y' AND x . x = 'y' SELECT DISTINCT x FROM x SELECT DISTINCT x FROM x WHERE x . x = 'y' SELECT DISTINCT x FROM x WHERE x . x = 'y' AND x . x = 'y' SELECT x ( ( SELECT x FROM x WHERE x = 10 ) ) FROM x SELECT x ( * ) FROM x SELECT x ( * ) FROM x , x AS x SELECT x ( * ) FROM x , x AS x WHERE x . x = 'y' SELECT x ( * ) FROM x , x AS x WHERE x . x = 'y' AND x . x = x . x SELECT x ( * ) FROM x , x AS x WHERE x . x = 'y' AND x . x = x . x AND x . x = x . x SELECT x ( * ) FROM x WHERE x = 'y' SELECT x ( * ) FROM x WHERE x = 'y' AND x = 'y' SELECT x ( * ) FROM x WHERE x = 'y' OR x = 'y' SELECT x ( x ) , x ( x ) , x ( x ) FROM x SELECT x ( x ) , x ( x ) FROM x SELECT x ( x ) , x ( x ) FROM x WHERE x != 10 SELECT x ( x ) , x ( x ) FROM x WHERE x < 10 SELECT x ( x ) , x ( x ) FROM x WHERE x <= 10 SELECT x ( x ) , x ( x ) FROM x WHERE x = 10 SELECT x ( x ) , x ( x ) FROM x WHERE x >= 10 SELECT x ( x ) , x , x FROM x SELECT x ( x ) AS x FROM x SELECT x ( x ) AS x FROM x WHERE x != 10 SELECT x ( x ) AS x FROM x WHERE x < 0.1 SELECT x ( x ) AS x FROM x WHERE x < 10 SELECT x ( x ) AS x FROM x WHERE x <= 10 SELECT x ( x ) AS x FROM x WHERE x = 0.1 SELECT x ( x ) AS x FROM x WHERE x = 10 SELECT x ( x ) AS x FROM x WHERE x > 0.1 SELECT x ( x ) AS x FROM x WHERE x > 10 SELECT x ( x ) AS x FROM x WHERE x >= 10 SELECT x ( x ) AS x FROM x WHERE x IS NOT NULL SELECT x ( x ) AS x FROM x WHERE x IS NULL SELECT x ( x ) FROM x SELECT x ( x ) FROM x WHERE x = 'y' SELECT x , x ( * ) , x ( x ) FROM x WHERE x = 'y' GROUP BY x SELECT x , x ( * ) , x ( x ) FROM x WHERE x = 'y' GROUP BY x HAVING x ( * ) = 10 SELECT x , x ( * ) , x ( x ) FROM x WHERE x = 'y' OR x = 'y' GROUP BY x SELECT x , x ( * ) , x ( x ) FROM x WHERE x = 'y' OR x = 'y' GROUP BY x HAVING x ( * ) = 10 SELECT x , x ( * ) FROM x GROUP BY x SELECT x , x ( * ) FROM x GROUP BY x HAVING x ( * ) = 10 SELECT x , x ( x ) FROM x GROUP BY x SELECT x , x , x ( * ) , x ( x ) FROM x WHERE x = 'y' GROUP BY x , x SELECT x , x , x ( * ) , x ( x ) FROM x WHERE x = 'y' GROUP BY x , x HAVING x ( * ) = 10 SELECT x , x , x ( * ) , x ( x ) FROM x WHERE x = 'y' OR x = 'y' GROUP BY x , x SELECT x , x , x ( * ) , x ( x ) FROM x WHERE x = 'y' OR x = 'y' GROUP BY x , x HAVING x ( * ) = 10 SELECT x , x , x ( * ) FROM x GROUP BY x , x SELECT x , x , x ( * ) FROM x GROUP BY x , x HAVING x ( * ) = 10 SELECT x , x , x ( x ) FROM x . x WHERE x = 'y' ORDER BY x , x SELECT x , x , x FROM x ORDER BY x DESC LIMIT 10 SELECT x , x , x FROM x WHERE x = ( SELECT x ( x ) FROM x ) SELECT x , x , x FROM x WHERE x = ( SELECT x ( x . x ) FROM x AS x WHERE x . x = x . x ) SELECT x , x FROM x GROUP BY x , x SELECT x , x FROM x GROUP BY x , x HAVING x ( * ) = 10 SELECT x . x , x . x FROM x , x WHERE x . x != x . x SELECT x . x , x . x FROM x , x WHERE x . x < x . x SELECT x . x , x . x FROM x , x WHERE x . x <= x . x SELECT x . x , x . x FROM x , x WHERE x . x = x . x SELECT x . x , x . x FROM x , x WHERE x . x >= x . x SELECT x . x , x . x FROM x CROSS JOIN x ON x . x = x . x SELECT x . x , x . x FROM x CROSS JOIN x ON x . x = x . x WHERE x . x != 10 SELECT x . x , x . x FROM x CROSS JOIN x ON x . x = x . x WHERE x . x < 10 SELECT x . x , x . x FROM x CROSS JOIN x ON x . x = x . x WHERE x . x <= 10 SELECT x . x , x . x FROM x CROSS JOIN x ON x . x = x . x WHERE x . x = 10 SELECT x . x , x . x FROM x CROSS JOIN x ON x . x = x . x WHERE x . x >= 10 SELECT x . x , x . x FROM x CROSS JOIN x USING ( x ) SELECT x . x , x . x FROM x INNER JOIN x ON x . x = x . x SELECT x . x , x . x FROM x INNER JOIN x ON x . x = x . x WHERE x . x != 10 SELECT x . x , x . x FROM x INNER JOIN x ON x . x = x . x WHERE x . x < 10 SELECT x . x , x . x FROM x INNER JOIN x ON x . x = x . x WHERE x . x <= 10 SELECT x . x , x . x FROM x INNER JOIN x ON x . x = x . x WHERE x . x = 10 SELECT x . x , x . x FROM x INNER JOIN x ON x . x = x . x WHERE x . x >= 10 SELECT x . x , x . x FROM x INNER JOIN x USING ( x ) SELECT x . x , x . x FROM x LEFT JOIN x ON x . x = x . x ORDER BY x . x , x . x SELECT x . x , x . x FROM x LEFT JOIN x ON x . x = x . x WHERE x . x != 10 ORDER BY x . x , x . x SELECT x . x , x . x FROM x LEFT JOIN x ON x . x = x . x WHERE x . x < 10 ORDER BY x . x , x . x SELECT x . x , x . x FROM x LEFT JOIN x ON x . x = x . x WHERE x . x <= 10 ORDER BY x . x , x . x SELECT x . x , x . x FROM x LEFT JOIN x ON x . x = x . x WHERE x . x = 10 ORDER BY x . x , x . x SELECT x . x , x . x FROM x LEFT JOIN x ON x . x = x . x WHERE x . x >= 10 ORDER BY x . x , x . x SELECT x . x , x . x FROM x LEFT JOIN x USING ( x ) ORDER BY x . x , x . x SELECT x . x , x . x FROM x LEFT OUTER JOIN x ON x . x = x . x ORDER BY x . x , x . x SELECT x . x , x . x FROM x LEFT OUTER JOIN x ON x . x = x . x WHERE x . x != 10 ORDER BY x . x , x . x SELECT x . x , x . x FROM x LEFT OUTER JOIN x ON x . x = x . x WHERE x . x < 10 ORDER BY x . x , x . x SELECT x . x , x . x FROM x LEFT OUTER JOIN x ON x . x = x . x WHERE x . x <= 10 ORDER BY x . x , x . x SELECT x . x , x . x FROM x LEFT OUTER JOIN x ON x . x = x . x WHERE x . x = 10 ORDER BY x . x , x . x SELECT x . x , x . x FROM x LEFT OUTER JOIN x ON x . x = x . x WHERE x . x >= 10 ORDER BY x . x , x . x SELECT x . x , x . x FROM x RIGHT JOIN x ON x . x = x . x SELECT x . x , x . x FROM x RIGHT JOIN x ON x . x = x . x WHERE x . x != 10 SELECT x . x , x . x FROM x RIGHT JOIN x ON x . x = x . x WHERE x . x < 10 SELECT x . x , x . x FROM x RIGHT JOIN x ON x . x = x . x WHERE x . x <= 10 SELECT x . x , x . x FROM x RIGHT JOIN x ON x . x = x . x WHERE x . x = 10 SELECT x . x , x . x FROM x RIGHT JOIN x ON x . x = x . x WHERE x . x >= 10 SELECT x . x , x . x FROM x RIGHT OUTER JOIN x ON x . x = x . x SELECT x . x , x . x FROM x RIGHT OUTER JOIN x ON x . x = x . x WHERE x . x != 10 SELECT x . x , x . x FROM x RIGHT OUTER JOIN x ON x . x = x . x WHERE x . x < 10 SELECT x . x , x . x FROM x RIGHT OUTER JOIN x ON x . x = x . x WHERE x . x <= 10 SELECT x . x , x . x FROM x RIGHT OUTER JOIN x ON x . x = x . x WHERE x . x = 10 SELECT x . x , x . x FROM x RIGHT OUTER JOIN x ON x . x = x . x WHERE x . x >= 10 SELECT x FROM x . x WHERE x = 'y' SELECT x FROM x GROUP BY x SELECT x FROM x GROUP BY x HAVING x ( * ) = 10 SELECT x FROM x UNION SELECT x FROM x SELECT x FROM x WHERE EXISTS ( SELECT * FROM x WHERE x . x = x . x ) SELECT x FROM x WHERE EXISTS ( SELECT 10 ) SELECT x FROM x WHERE x = 'y' UNION SELECT x FROM x WHERE x != 'y' SELECT x FROM x WHERE x = 'y' UNION SELECT x FROM x WHERE x = 'y' SELECT x FROM x WHERE x = ( SELECT x ( x ) FROM x ) SELECT x FROM x WHERE x IN ( SELECT x FROM x ) UPDATE x SET x = 'y' WHERE x = 'y' UPDATE x SET x = ( SELECT x ( x ) FROM x ) UPDATE x SET x = 10 UPDATE x SET x = 10 WHERE x = 10 UPDATE x SET x = 10 WHERE x = 10 OR x = 10 UPDATE x SET x = 10 WHERE x = NULL UPDATE x SET x = 10 WHERE x >= 10 UPDATE x SET x = x ( 10 ) WHERE x = 10 UPDATE x SET x = x () + 10 WHERE x = x () UPDATE x SET x = x () WHERE x >= x ( x () , 'y' ) UPDATE x SET x = x + 10 WHERE x != 10 UPDATE x SET x = x + 10 WHERE x < 10 UPDATE x SET x = x + 10 WHERE x <= 10 UPDATE x SET x = x + 10 WHERE x = 10 UPDATE x SET x = x + 10 WHERE x >= 10 UPDATE x SET x = x + x . x WHERE x = 10 WITH RECURSIVE cnt(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM cnt WHERE x<1000000) SELECT x FROM cnt; ================================================ FILE: data/fuzz_root/input/1.txt ================================================ CREATE TABLE t0(c0, c1 AS(c0 + c2), c2 AS(c1) CHECK(c2)); UPDATE t0 SET c0 = NULL ================================================ FILE: data/fuzz_root/input/10.txt ================================================ CREATE TABLE t1(a, b); CREATE TABLE t2(c, d); CREATE TABLE t3(e, f); INSERT INTO t1 VALUES(1, 1); INSERT INTO t2 VALUES(1, 1); INSERT INTO t3 VALUES(1, 1); SELECT d IN (SELECT sum(c) OVER (ORDER BY e+c) FROM t3) FROM ( SELECT * FROM t2 ); ================================================ FILE: data/fuzz_root/input/11.txt ================================================ ATTACH '' AS aux; CREATE TABLE aux.t1(a, b, c); CREATE TEMP TRIGGER tmp AFTER INSERT ON t1 BEGIN SELECT 'abc'; END; DETACH aux; DROP TRIGGER tmp; ================================================ FILE: data/fuzz_root/input/12.txt ================================================ CREATE TABLE t1(a,b); INSERT INTO t1 VALUES(1,2); UPDATE t1 SET (a,a,a,b)=(SELECT 99,100); ================================================ FILE: data/fuzz_root/input/13.txt ================================================ CREATE TABLE t0(c0); INSERT INTO t0(c0) VALUES (0); SELECT * FROM t0 WHERE EXISTS (SELECT MIN(c0) OVER (), CUME_DIST() OVER () FROM t0) BETWEEN 1 AND 1; ================================================ FILE: data/fuzz_root/input/14.txt ================================================ CREATE TABLE t1(a); CREATE TABLE t2(b); CREATE TRIGGER r1 AFTER INSERT ON t2 BEGIN INSERT INTO t1(a) VALUES(99); END; DROP TABLE t1; ALTER TABLE t2 RENAME TO t3; ================================================ FILE: data/fuzz_root/input/15.txt ================================================ CREATE TABLE artists ( id integer NOT NULL PRIMARY KEY AUTOINCREMENT, name varchar(255) ); CREATE TABLE albums ( id integer NOT NULL PRIMARY KEY AUTOINCREMENT, name varchar(255), artist_id integer REFERENCES artists ); INSERT INTO artists (name) VALUES ('Ar'); INSERT INTO albums (name, artist_id) VALUES ('Al', 1); SELECT artists.* FROM artists INNER JOIN artists AS 'b' ON (b.id = artists.id) WHERE (artists.id IN ( SELECT albums.artist_id FROM albums WHERE ((name = 'Al') AND (albums.artist_id IS NOT NULL) AND (albums.id IN ( SELECT id FROM ( SELECT albums.id, row_number() OVER ( PARTITION BY albums.artist_id ORDER BY name ) AS 'x' FROM albums WHERE (name = 'Al') ) AS 't1' WHERE (x = 1) )) AND (albums.id IN (1, 2))) )); ================================================ FILE: data/fuzz_root/input/16.txt ================================================ CREATE TABLE "sqlite1234" ("id" integer); ALTER TABLE "sqlite1234" RENAME TO "User"; SELECT name, sql FROM sqlite_master WHERE sql IS NOT NULL; ================================================ FILE: data/fuzz_root/input/17.txt ================================================ CREATE TABLE IF NOT EXISTS t1(id INTEGER PRIMARY KEY); INSERT INTO t1 VALUES(1); SELECT a.id FROM t1 AS a JOIN t1 AS b ON a.id=b.id WHERE a.id IN (1,2,3); ================================================ FILE: data/fuzz_root/input/18.txt ================================================ CREATE TABLE t1(a INTEGER PRIMARY KEY); INSERT INTO t1(a) VALUES(1),(2),(3); CREATE TABLE t2(x INTEGER PRIMARY KEY, y INT); INSERT INTO t2(y) VALUES(2),(3); SELECT * FROM t1, t2 WHERE a=y AND y=3; ================================================ FILE: data/fuzz_root/input/19.txt ================================================ SELECT +sum(0)OVER() ORDER BY +sum(0)OVER(); ================================================ FILE: data/fuzz_root/input/2.txt ================================================ CREATE TABLE t0(c0 AS ((c4, 9, c4) < ('a', c1, 1)), c1 AS (1) NOT NULL, c2, c3 CHECK ((x'56', 0) = (c1, 0)), c4 NOT NULL); PRAGMA integrity_check; INSERT INTO t0 VALUES (0, 0, 0), (0, 0, 0); ================================================ FILE: data/fuzz_root/input/20.txt ================================================ CREATE TABLE t1(aa, bb); CREATE INDEX t1x1 on t1(abs(aa), abs(bb)); INSERT INTO t1 VALUES(-2,-3),(+2,-3),(-2,+3),(+2,+3); SELECT * FROM (t1) WHERE ((abs(aa)=1 AND 1=2) OR abs(aa)=2) AND abs(bb)=3; ================================================ FILE: data/fuzz_root/input/21.txt ================================================ CREATE TABLE t1(x); INSERT INTO t1 VALUES('a'), ('b'), ('c'); CREATE TABLE t2(a, b); INSERT INTO t2 VALUES('X', 1), ('X', 2), ('Y', 2), ('Y', 3); SELECT x, (SELECT sum(b) OVER (PARTITION BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM t2 WHERE b 42) FROM ( SELECT id, (price * 2) as double_price FROM item ); ================================================ FILE: data/fuzz_root/input/new1.txt ================================================ CREATE TABLE v1040911821 ( v1040911822 , v1040911823 ) ; CREATE TABLE v1040911827 ( v1040911829 TEXT , v1040911828 ) ; CREATE TABLE v1040911824 ( v1040911825 FLOAT , v1040911826 FLOAT ) ; INSERT INTO v1040911824 VALUES ( 10 , 9223372036854775807 ) ; INSERT INTO v1040911821 VALUES ( 10 , 9223372036854775807 ) ; UPDATE v1040911821 SET v1040911822 = 'testtest' ; SELECT DISTINCT 'bbbbbbbbaaaaaaaaaaaaaaaaaaaabbbbbbbbaaaaaaaaaaaaaaaaaaaa' IN ( SELECT DISTINCT sum ( v1040911821 . v1040911822 ) OVER( ) FROM v1040911821 ORDER BY 1 ) GROUP BY 1 ; ================================================ FILE: data/fuzz_root/input/new2.txt ================================================ CREATE TABLE v1019944032 ( v1019944040 FLOAT UNIQUE , v1019944035 UNIQUE GENERATED ALWAYS AS( v1019944037 ) , v1019944034 INT , v1019944033 INT UNIQUE GENERATED ALWAYS AS( NULL ) , v1019944039 INTEGER UNIQUE , v1019944038 DOUBLE PRIMARY KEY CHECK( v1019944035 ) , v1019944037 VARCHAR(20) UNIQUE , v1019944036 UNIQUE ) ; INSERT INTO v1019944032 ( v1019944037 ) VALUES ( 0.100000 ) ,( 9223372036854775807 ) ,( 1 ) ; DELETE FROM v1019944032 WHERE NULL BETWEEN ( SELECT v1019944035 FROM v1019944032 AS x GROUP BY v1019944035 ) AND 0 ; INSERT INTO v1019944032 ( v1019944037 ) VALUES ( 10 ) ,( 9223372036854775808.000000 ) ; SELECT DISTINCT 9223372036854775807 , v1019944036 + 127 , 10 FROM v1019944032 UNION SELECT DISTINCT * FROM v1019944032 ORDER BY v1019944034 ; ================================================ FILE: data/fuzz_root/input/new3.txt ================================================ CREATE TABLE v190436516 ( v190436517 DOUBLE PRIMARY KEY , v190436518 UNIQUE AS( v190436517 ) ) ; INSERT INTO v190436516 VALUES ( 9223372036854775807 ) ,( 3 ) ,( 10 ) ; DELETE FROM v190436516 WHERE v190436517 < ( SELECT v190436518 FROM v190436516 WHERE v190436516 . v190436518 = v190436516 . v190436518 GROUP BY v190436516 . v190436518 , v190436518 ) IN ( 12.100000 , 10 , 10 ) ; INSERT INTO v190436516 ( v190436517 ) VALUES ( 1 ) ,( 1 ) ; SELECT DISTINCT ( SELECT DISTINCT 'MED P' , 1 , 8 , 1.100000 ) LIMIT 10 OFFSET 10 ; ================================================ FILE: data/fuzz_root/input/new4.txt ================================================ CREATE TABLE v191110750 ( v191110752 , v191110751 INTEGER AS( '199419' ) CHECK( 10 ) CHECK( v191110752 NOT LIKE 'LG CASEaaaaaaaaaaaa' ) NOT NULL UNIQUE ) ; INSERT INTO v191110750 VALUES ( 1 ) ; SELECT v191110750 . v191110752 FROM v191110750 AS a JOIN v191110750 ON NULL = v191110750 . v191110751 WHERE v191110750 . v191110751 IN ( v191110750 . v191110751 , 0 , v191110750 . v191110752 ) ; ================================================ FILE: data/fuzz_root/mysql_init_lib/1 ================================================ CREATE TABLE v0 ( v2 INT , v1 INT ) ; INSERT INTO v0 ( v1 , v2 ) VALUES ( 3 , 0 ) ; SELECT * , '1995-03-15' FROM v0 WHERE v1 NOT IN ( 10 ) AND v2 NOT IN ( 3 ) ORDER BY v2 DESC ; ================================================ FILE: data/fuzz_root/mysql_init_lib/10 ================================================ CREATE TABLE v0 ( v1 INTEGER PRIMARY KEY ) ; INSERT INTO v0 VALUES ( 10 ) ; SELECT v1 FROM v0 UNION SELECT 2.100000 * AVG ( v1 ) FROM v0 LIMIT 4294967295 OFFSET 2 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/100 ================================================ CREATE TABLE v0 ( v1 INTEGER UNIQUE PRIMARY KEY , v2 INT ) ; INSERT INTO v0 ( v1 , v2 ) VALUES ( 0 , 1 ) ; UPDATE v0 SET v1 = ( SELECT 1 FROM v0 WHERE unlikely ( v1 <= '29' ) ) ; ================================================ FILE: data/fuzz_root/mysql_init_lib/1000 ================================================ CREATE TABLE v0 ( v1 INTEGER UNIQUE ) ; INSERT INTO v0 VALUES ( 10 ) ; SELECT v1 FROM v0 WHERE v1 > 9223372036854775807 OR v1 > 10 AND v1 NOT LIKE 'Max Mustermann' ; ================================================ FILE: data/fuzz_root/mysql_init_lib/1001 ================================================ CREATE TABLE v0 ( v1 VARCHAR(1) , v2 INT ) ; INSERT INTO v0 ( v1 , v1 ) VALUES ( 10 , 4294967295 ) ; SELECT COALESCE ( datetime ( v1 , v1 ) , 1 ) FROM v0 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/1002 ================================================ CREATE TABLE v0 ( v1 INTEGER ) ; INSERT INTO v0 ( v1 , v1 , v1 ) VALUES ( 10 , 100 , 10 ) ,( 0 , 1 , NULL ) ,( 10.100000 , '17' , 1 ) ,( 10 , 10 , NULL ) ; SELECT * FROM v0 AS one , v0 AS two NATURAL JOIN v0 NATURAL JOIN v0 ORDER BY random () ; SELECT min ( v1 ) FROM v0 ORDER BY v1 * 1 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/1003 ================================================ INSERT INTO v0 ( v1 , v2 ) VALUES ( 'PROMO%%' , 1 ) ,( 'PROMO%%' , 42 ) ,( '13' , 3 ) ,( 'AIR REG' , 0 ) ,( 'EUROPE' , 9223372036854775807 ) ,( 'LG PACK' , 10 ) ,( 'X' , 9 ) ,( '1994-01-01' , 9 ) ,( 'Brand#12' , 3 ) ,( 'abc' , 9223372036854775807 ) ,( 'y' , 10 ) ; INSERT INTO v3 VALUES ( 1 ) ; SELECT count ( CASE WHEN v9 != random () THEN 10 END ) , count ( CASE WHEN v10 = 's%' THEN 10 END ) FROM v8 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/1004 ================================================ CREATE TABLE v0 ( v1 INTEGER PRIMARY KEY CHECK( v1 ) ) ; INSERT INTO v0 VALUES ( 3 ) ; SELECT count ( * ) OVER( ORDER BY v1 ) , max ( v1 ) FROM v0 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/1005 ================================================ CREATE TABLE v0 ( v1 INTEGER PRIMARY KEY ) ; INSERT INTO v0 VALUES ( 0 ) ; SELECT v1 , min ( v1 ) OVER( ORDER BY v1 ) FROM v0 GROUP BY v1 ORDER BY v1 DESC ; ================================================ FILE: data/fuzz_root/mysql_init_lib/1006 ================================================ CREATE TABLE v0 ( v1 INTEGER PRIMARY KEY ) ; CREATE TABLE v2 AS SELECT v1 FROM v0 ; CREATE TABLE v3 ( v5 INTEGER PRIMARY KEY , v4 INT ) ; INSERT INTO v3 ( v4 ) VALUES ( 10 ) ,( 10 ) ; SELECT * FROM v2 , v3 WHERE v5 = v5 AND v4 = 10 GROUP BY v5 , v5 , v4 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/1007 ================================================ CREATE TABLE v0 ( v1 INTEGER ) ; SELECT v1 , v1 FROM v0 WHERE ( v1 = 'LG CASEaaaaaaaaaaaa' AND 9223372036854775808.000000 BETWEEN 10 AND 10 ) OR ( v1 = v1 AND v1 = v1 ) ; SELECT julianday ( 10.100000 ) , v1 FROM v0 WHERE v1 IS NOT NULL ; ================================================ FILE: data/fuzz_root/mysql_init_lib/1008 ================================================ CREATE TABLE v0 ( v1 FLOAT PRIMARY KEY ) ; INSERT INTO v0 VALUES ( 10 ) ; SELECT v1 FROM v0 WHERE v1 IN ( 10.100000 ) ORDER BY random () ; ================================================ FILE: data/fuzz_root/mysql_init_lib/1009 ================================================ CREATE TABLE v0 ( v1 INTEGER ) ; SELECT instr ( v1 , v1 ) FROM v0 ; SELECT v1 , v1 FROM v0 WHERE - 'MED BOX' >= v1 + v1 LIKE abs ( v1 ) IS NOT NULL ; ================================================ FILE: data/fuzz_root/mysql_init_lib/101 ================================================ SELECT v3 FROM v2 WHERE v5 IN ( 0 , v4 NOT LIKE 'AIR REG' , 10 , 9223372036854775807 , 10 ) ORDER BY v6 DESC LIMIT 3 ; SELECT v10 FROM v9 WHERE v11 >= 1 AND v12 <= 3 ; DROP TRIGGER tmp ; ================================================ FILE: data/fuzz_root/mysql_init_lib/1010 ================================================ CREATE TABLE v0 ( v1 INTEGER ) ; INSERT INTO v0 VALUES ( 10 ) ,( 2147483647 ) ,( 99 ) ,( 1 ) ,( 1 ) ,( 3 ) ; SELECT instr ( v1 , v1 ) FROM v0 ; SELECT min ( v1 ) FROM v0 ORDER BY v1 * 1 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/1011 ================================================ SELECT CAST ( zeroblob ( 1 ) AS TEXT ) ; SELECT DISTINCT count () LIMIT 10 OFFSET 10 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/1012 ================================================ CREATE TABLE v0 ( v1 INTEGER PRIMARY KEY ) ; INSERT INTO v0 VALUES ( 1 ) ; SELECT quote ( quote ( substr ( v1 , 2 , 1 ) ) ) FROM v0 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/1013 ================================================ CREATE TABLE v0 ( v1 INTEGER PRIMARY KEY ) ; INSERT INTO v0 VALUES ( 3 ) ; SELECT DISTINCT CAST ( round ( v1 / 10 ) AS INTEGER ) FROM v0 LIMIT 99 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/1014 ================================================ CREATE TABLE v0 ( v1 INTEGER PRIMARY KEY ) ; CREATE TABLE v2 AS SELECT ( SELECT DISTINCT * , 1 , 2 , 1.100000 ) LIMIT 1 OFFSET 1 ; CREATE TABLE v3 ( v5 INTEGER PRIMARY KEY , v4 INT ) ; INSERT INTO v3 ( v4 ) VALUES ( 10 ) ,( 10 ) ; SELECT * FROM v2 , v0 WHERE v1 = v1 AND v1 = 10 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/1015 ================================================ CREATE TABLE v0 ( v1 INTEGER ) ; SELECT instr ( 3.100000 * AVG ( v1 ) , 10 ) FROM v0 ; SELECT v1 , v1 FROM v0 WHERE v1 IS NOT NULL ; ================================================ FILE: data/fuzz_root/mysql_init_lib/1016 ================================================ CREATE TABLE v0 ( v1 FLOAT PRIMARY KEY ) ; INSERT INTO v0 VALUES ( 99 ) ; SELECT * FROM v0 AS myname , v0 NATURAL JOIN v0 NATURAL JOIN v0 ORDER BY v1 ASC ; ================================================ FILE: data/fuzz_root/mysql_init_lib/1017 ================================================ CREATE TABLE v0 ( v1 INTEGER ) ; INSERT INTO v0 ( v1 , v1 , v1 ) VALUES ( 10 , 1 , 10 ) ,( 10 , 0 , 3 ) ; SELECT SUM ( v1 * ( 3 - v1 ) ) FROM v0 ; SELECT DISTINCT v1 , v1 FROM v0 WHERE v1 = 'MED P' ORDER BY v1 ASC , v1 DESC , v1 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/1018 ================================================ CREATE TABLE v0 ( v1 INTEGER ) ; SELECT instr ( v1 , v1 ) FROM v0 ; SELECT v1 , v1 FROM v0 WHERE - '' >= v1 IS NOT NULL ; ================================================ FILE: data/fuzz_root/mysql_init_lib/1019 ================================================ CREATE TABLE v0 ( v1 INTEGER PRIMARY KEY ) ; INSERT INTO v0 ( v1 , v1 ) VALUES ( 'LG PACK' , '18' ) ; SELECT quote ( zeroblob ( 127 ) ) ; ================================================ FILE: data/fuzz_root/mysql_init_lib/102 ================================================ CREATE TABLE v0 ( v1 INTEGER PRIMARY KEY ) ; CREATE VIEW v2 ( v3 , v4 , v5 , v6 ) AS WITH y AS ( SELECT Row_Number () OVER( x ) FROM v0 ) SELECT * FROM v0 ; SELECT v6 , rank () OVER( ORDER BY v4 DESC ) FROM v2 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/1020 ================================================ CREATE TABLE v0 ( v1 INTEGER ) ; INSERT INTO v0 ( v1 , v1 , v1 ) VALUES ( 99 , 1 , 1 ) ,( 10 , 1 , 0 ) ; SELECT instr ( v1 , v1 ) FROM v0 GROUP BY '!INSERT INTO test VALUES (1, 0, 0); !INSERT INTO test VALUES (0, 1, 0); !INSERT INTO test VALUES (0, 0, null);' , 'testtest' , v1 + v1 ; SELECT v1 , v1 FROM v0 WHERE v1 IS NOT NULL ; ================================================ FILE: data/fuzz_root/mysql_init_lib/1021 ================================================ CREATE TABLE v0 ( v2 INT , v1 INT ) ; INSERT INTO v0 ( v1 , v1 ) VALUES ( 1 , 3 ) ; UPDATE v0 SET v2 = ( SELECT min ( v2 ) FROM v0 WHERE min ( v1 , v1 ) ) ; ================================================ FILE: data/fuzz_root/mysql_init_lib/1022 ================================================ CREATE TABLE v0 ( v2 INT , v1 INT ) ; INSERT INTO v0 ( v2 , v2 ) VALUES ( 2 , 10 ) ; SELECT * , 'MED PKG' FROM v0 WHERE v1 NOT IN ( 1 , NULL , 0 , 2 , lower ( 's%' ) ) ORDER BY v1 DESC ; ================================================ FILE: data/fuzz_root/mysql_init_lib/1023 ================================================ CREATE TABLE v0 ( v1 INTEGER PRIMARY KEY UNIQUE ) ; INSERT INTO v0 VALUES ( 9223372036854775807 ) ; SELECT v1 FROM v0 WHERE v1 IN ( '' , 'testtest' , v1 + v1 ) ; ================================================ FILE: data/fuzz_root/mysql_init_lib/1024 ================================================ CREATE TABLE v0 ( v2 INT , v1 INT ) ; INSERT INTO v0 ( v2 , v2 ) VALUES ( 1 , 10 ) ; SELECT abs ( 10 + 10 ) IN ( SELECT 10 UNION SELECT 1 ) FROM v0 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/1025 ================================================ SELECT CAST ( zeroblob ( 10 ) AS DOUBLE ) WHERE last_insert_rowid () ; SELECT DISTINCT ( SELECT total_changes () ) LIMIT 10 OFFSET 1 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/103 ================================================ CREATE TABLE v0 ( v1 INTEGER PRIMARY KEY ) ; CREATE TABLE v2 AS SELECT v4 FROM v2 AS a , v0 AS b , v2 AS c ; CREATE TABLE v5 ( v6 INTEGER PRIMARY KEY , v7 INT ) ; INSERT INTO v5 ( v7 ) VALUES ( 10 ) ,( 10 ) ; SELECT * FROM v5 , v5 WHERE v7 = v7 AND v6 = 1 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/104 ================================================ CREATE TABLE v0 ( v1 INTEGER ) ; SELECT printf ( count ( ( NOT ( v1 IS NULL ) ) AND ( NOT ( NOT ( '%%green%%' = '23' AND v1 = 1 ) ) ) ) , 10.100000 , 'GERMANY' ) ; SELECT v1 , sum ( v1 ) OVER( PARTITION BY v1 ) FROM v0 AS REVENUE ; ================================================ FILE: data/fuzz_root/mysql_init_lib/105 ================================================ CREATE TABLE v0 ( v1 INTEGER ) ; INSERT INTO v0 VALUES ( 10 ) ,( 9223372036854775807 ) ,( 10 ) ,( 1 ) ,( 9 ) ,( 10 ) ,( 1 ) ; SELECT SUM ( v1 * ( 1 - v1 ) ) FROM v0 ; SELECT printf ( count ( lower ( '23' ) ) OVER( ) , 0.100000 , 'c' ) FROM v0 WHERE v1 IS NOT NULL ; ================================================ FILE: data/fuzz_root/mysql_init_lib/106 ================================================ CREATE TABLE v0 ( v1 INTEGER PRIMARY KEY ) ; INSERT INTO v0 ( v1 ) VALUES ( 2 ) ,( 10 ) ,( 1 ) ; CREATE TABLE v2 ( v3 INTEGER PRIMARY KEY , echo_v2 INT ) ; INSERT INTO v2 ( v3 ) VALUES ( 10 ) ,( 3 ) ; SELECT * FROM v0 , v2 WHERE v3 = v3 AND v3 = 1 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/107 ================================================ CREATE TABLE v0 ( v1 INTEGER PRIMARY KEY ) ; SELECT sqlite_compileoption_used ( 'bbbbbbbbaaaaaaaaaaaaaaaaaaaabbbbbbbbaaaaaaaaaaaaaaaaaaaa' ) ; CREATE TABLE v2 ( v4 INTEGER PRIMARY KEY UNIQUE NOT NULL , v3 INT ) ; INSERT INTO v2 ( v3 ) VALUES ( 10 ) ,( 10 ) ; SELECT * FROM v0 , v2 WHERE LIKELY ( v3 ) <= '199419' = v4 AND v4 = 10 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/108 ================================================ CREATE TABLE v0 ( v1 FLOAT ) ; INSERT INTO v0 VALUES ( 0 ) ; SELECT v1 FROM v0 WHERE v1 IN ( 9223372036854775808.000000 ) ORDER BY random () ; ================================================ FILE: data/fuzz_root/mysql_init_lib/109 ================================================ CREATE TABLE v0 ( v1 INTEGER PRIMARY KEY ) ; INSERT INTO v0 VALUES ( 0 ) ; SELECT count ( * ) , substr ( v1 , count ( v1 ) , NULL ) AS mx FROM v0 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/11 ================================================ SELECT - '199419' ; INSERT INTO v0 ( v2 , v3 , v1 ) VALUES ( 10 , 1 , 10 ) ,( 3 , 0 , NULL ) ,( 3.100000 , '%%green%%' , 1 ) ,( 9223372036854775807 , 1 , NULL ) ,( 0 , 10 , 1 ) ,( 1 , 10 , 3 ) ,( 1 , 10 , 1 ) ,( 1 , 1 , 2 ) ; SELECT * FROM v4 AS one , v5 AS two NATURAL JOIN v6 NATURAL JOIN v7 ORDER BY random () ; SELECT min ( v11 ) FROM v10 ORDER BY v12 * 10 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/110 ================================================ CREATE TABLE v0 ( v1 INTEGER ) ; INSERT INTO v0 ( v1 , v1 , v1 ) VALUES ( 3 , 10 , 1 ) ,( 1 , 12 , 10 ) ; SELECT instr ( v1 , julianday ( 10.100000 ) ) FROM v0 ; SELECT v1 , v1 FROM v0 WHERE v1 IS NOT NULL ; ================================================ FILE: data/fuzz_root/mysql_init_lib/111 ================================================ CREATE TABLE v0 ( v1 INTEGER PRIMARY KEY ) ; INSERT INTO v0 ( v1 ) VALUES ( 2 ) ,( 0 ) ,( 3 ) ; CREATE TABLE v2 ( v4 INTEGER PRIMARY KEY , v3 INT ) ; INSERT INTO v2 ( v3 ) VALUES ( 10 ) ,( 10 ) ; SELECT * FROM v2 , v0 WHERE LIKELY ( v1 ) <= 'Brand#23' = v1 AND v1 = 9223372036854775807 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/112 ================================================ CREATE TABLE v0 ( v1 INTEGER ) ; SELECT v1 AS VALUE , v1 FROM v0 WHERE ( v1 = 'Brand#23' AND v1 BETWEEN 10 AND 10 ) OR ( v1 = 10 AND v1 = 10 ) ; SELECT julianday ( 1.100000 ) , v1 FROM v0 WHERE v1 IS NOT NULL ; ================================================ FILE: data/fuzz_root/mysql_init_lib/113 ================================================ CREATE TABLE v0 ( v1 INTEGER ) ; INSERT INTO v0 ( v1 , v1 , v1 ) VALUES ( 9 , 2 , 1 ) ,( 1 , 10 , NULL ) ,( 9223372036854775808.000000 , '23' , 3 ) ,( 1 , 0 , NULL ) ,( 3 , 3 , 9223372036854775807 ) ,( 10 , 3 , 3 ) ,( 10 , 3 , 10 ) ; SELECT * FROM v0 AS one , v0 AS two NATURAL JOIN v0 NATURAL JOIN v0 ORDER BY random () ; SELECT lead ( 2 , 10 ) OVER( ORDER BY v1 ) AS x FROM v0 ORDER BY v1 * 4294967295 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/114 ================================================ CREATE TABLE v0 ( v2 INT , v1 INT ) ; INSERT INTO v0 ( v1 , v1 ) VALUES ( 2 , 10 ) ; SELECT COALESCE ( v1 , datetime ( v2 , v2 ) IS NOT NULL , v2 , 10 ) FROM v0 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/115 ================================================ CREATE TABLE v0 ( v1 INTEGER PRIMARY KEY ) ; INSERT INTO v0 ( v1 ) VALUES ( 9223372036854775807 ) ,( 10 ) ,( 1 ) ; CREATE TABLE v2 ( v4 INTEGER PRIMARY KEY , v3 INT ) ; SELECT v3 FROM v2 , v0 , v0 , v2 AS myname WHERE v3 IN ( 2.100000 ) ; INSERT INTO v0 ( v1 ) VALUES ( 10 ) ,( 0 ) ; SELECT * FROM v2 , v0 WHERE v1 = v1 AND v1 = 10 ORDER BY v1 DESC , v1 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/116 ================================================ CREATE TABLE v0 ( v1 VARCHAR(0) ) ; INSERT INTO v0 ( v1 , v1 , v1 ) VALUES ( 10 , 10 , 1 ) ,( 10 , 0 , NULL ) ,( 10.100000 , 'LG PKG' , 0 ) ,( 3 , 1 , NULL ) ,( 10 , 10 , 10 ) ,( 1 , 1 , 1 ) ,( 10 , 1 , 9223372036854775807 ) ,( 10 , 1 , 10 ) ; SELECT * FROM v0 , v0 AS alias ORDER BY random () ; SELECT min ( v1 ) FROM v0 ORDER BY v1 * 1 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/117 ================================================ CREATE TABLE v0 ( v1 VARCHAR(0) ) ; INSERT INTO v0 ( v1 , v1 , v1 ) VALUES ( 1 , 2 , 100 ) ,( 10 , 10 , NULL ) ,( 1.100000 , 'MED PACK' , 0 ) ,( 10 , 9223372036854775807 , NULL ) ,( 10 , 1 , 10 ) ,( 0 , 10 , 2 ) ,( 10 , 10 , 1 ) ; SELECT * FROM v0 AS one , v0 AS two NATURAL JOIN v0 NATURAL JOIN v0 ORDER BY v1 ASC ; SELECT max ( ( v1 NOT IN ( v1 ) AND v1 IS NOT NULL NOT IN ( 10 ) ) , v1 ) FROM v0 ORDER BY v1 * 10 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/118 ================================================ CREATE TABLE v0 ( v1 INTEGER ) ; SELECT * FROM v0 NATURAL JOIN v0 USING ( b ) ; SELECT julianday ( 10.100000 ) , v1 FROM v0 WHERE v1 IS NOT NULL ; ================================================ FILE: data/fuzz_root/mysql_init_lib/119 ================================================ CREATE TABLE v0 ( v1 INTEGER PRIMARY KEY ) ; CREATE TABLE v2 AS SELECT NULL FROM v0 GROUP BY v1 , v1 , v1 ; CREATE TABLE v3 ( v5 INTEGER PRIMARY KEY , v4 INT ) ; INSERT INTO v3 ( v5 ) VALUES ( 10 ) ,( 9223372036854775807 ) ; DROP TABLE v3 ; SELECT DISTINCT * FROM v3 AS b , v3 AS a , v3 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/12 ================================================ CREATE TABLE v0 ( v1 INTEGER ) ; INSERT INTO v0 ( v1 , v1 , v1 ) VALUES ( 4294967295 , 10 , 10 ) ,( 10 , 1 , NULL ) ,( 1.100000 , '' , 1 ) ,( 10 , 10 , NULL ) ,( 1 , 10 , 10 ) ,( 2 , 10 , 0 ) ,( 3 , 10 , 10 ) ; SELECT * FROM v0 NOT INDEXED NATURAL JOIN v0 UNION SELECT DISTINCT * FROM v0 ORDER BY v1 DESC ; SELECT min ( random () ) FROM v0 ORDER BY v1 * 10 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/120 ================================================ CREATE TABLE v0 ( v1 INTEGER PRIMARY KEY , v2 TEXT , v3 INT ) ; INSERT INTO v0 ( v1 ) VALUES ( 16 ) ,( 18446744073709551615 ) ,( 2 ) ; CREATE TABLE v4 ( v6 INTEGER PRIMARY KEY , v5 INT ) ; INSERT INTO v4 ( v6 ) VALUES ( 10 ) ,( 99 ) ; SELECT * FROM v4 , v4 WHERE v5 = v6 AND v6 = 0 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/121 ================================================ CREATE TABLE v0 ( v1 INTEGER ) ; INSERT INTO v0 ( v1 , v1 , v1 ) VALUES ( 10 , 1 , 1 ) ,( 1 , 10 , NULL ) ,( 2.100000 , 'b' , 10 ) ,( 10 , 1 , NULL ) ,( 2147483647 , 2 , 0 ) ,( 0 , 9 , 10 ) ,( 10.100000 , '29' , 3 ) ,( 10 , 3 , NULL ) ,( 0 , 10 , 10 ) ,( 12 , 10 , 10 ) ,( 1 , 10 , 0 ) ; SELECT DISTINCT zeroblob ( ( SELECT CAST ( zeroblob ( DISTINCT v1 ) AS DOUBLE ) ) ) FROM v0 ORDER BY random () ; SELECT min ( random () ) FROM v0 ORDER BY v1 * 1 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/122 ================================================ CREATE TABLE v0 ( v1 INTEGER ) ; INSERT INTO v0 ( v1 , v1 , v1 ) VALUES ( 10 , 1 , 1 ) ,( 10.100000 , 10 , 10 ) ; SELECT * FROM v0 AS one , v0 AS two NATURAL JOIN v0 NATURAL JOIN v0 ORDER BY random () ; SELECT DISTINCT * FROM v0 , v0 AS t ORDER BY v1 ; SELECT * FROM v0 NATURAL JOIN v0 UNION SELECT DISTINCT * FROM v0 ORDER BY v1 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/123 ================================================ CREATE TABLE v0 ( v1 INTEGER PRIMARY KEY ) ; INSERT INTO v0 ( v1 ) VALUES ( 255 ) ,( 10 ) ,( 2 ) ; CREATE TABLE v2 ( v4 INTEGER PRIMARY KEY , v3 INT ) ; INSERT INTO v2 ( v4 ) VALUES ( 2 ) ,( 2 ) ; SELECT * FROM v0 , v2 WHERE v3 = v4 AND ( SELECT 3 ) = 10 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/124 ================================================ CREATE TABLE v0 ( v1 INTEGER PRIMARY KEY ) ; CREATE TABLE v2 AS SELECT v3 , v4 , x ( * ) , x ( v5 ) FROM v2 ; CREATE TABLE v6 ( v8 INTEGER PRIMARY KEY , v7 INT ) ; INSERT INTO v6 ( v7 ) VALUES ( 10 ) ,( 3 ) ; SELECT * FROM v0 , v2 WHERE v10 = v9 AND v11 = 4294967295 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/125 ================================================ SELECT CAST ( zeroblob ( 9223372036854775807 ) AS TEXT ) FROM v0 AS a , v1 AS b , v2 AS c ; SELECT DISTINCT ( SELECT DISTINCT 'Al' , 1 , 1 , 2.100000 ) LIMIT 10 OFFSET 0 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/126 ================================================ CREATE TABLE v0 ( v1 INTEGER PRIMARY KEY ) ; CREATE TABLE v2 AS SELECT v1 FROM v0 ORDER BY 1 , 9 , 1 , 10 ; CREATE TABLE v4 ( v6 INTEGER PRIMARY KEY , v5 INT ) ; INSERT INTO v0 ( v1 ) VALUES ( 10 ) ,( 9223372036854775808 ) ; SELECT * FROM v0 , v4 WHERE v5 = v5 AND v5 = 10 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/127 ================================================ CREATE TABLE v0 ( v1 INTEGER PRIMARY KEY ) ; CREATE TABLE v2 AS SELECT min ( v1 ) FROM v0 ; CREATE TABLE v3 ( v5 INTEGER PRIMARY KEY , v4 INT ) ; INSERT INTO v3 ( v4 ) VALUES ( 1 ) ,( 10 ) ; SELECT * FROM v3 AS a JOIN v0 ON NULL = 1.100000 WHERE v1 = v1 AND v1 = 1 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/128 ================================================ CREATE TABLE v0 ( v1 INTEGER ) ; INSERT INTO v0 ( v1 , v1 , v1 ) VALUES ( 3 , 9223372036854775808 , 3 ) ,( 3 , 0 , NULL ) ,( 0.100000 , 'Al' , 1 ) ,( 0 , 10 , NULL ) ,( 1 , 1 , 2 ) ,( 9223372036854775807 , 10 , 1 ) ,( 10 , 3 , 10 ) ; SELECT * FROM v0 AS one , v0 AS two NATURAL JOIN v0 NATURAL JOIN v0 ORDER BY v1 ASC ; SELECT min ( v1 ) FROM v0 ORDER BY v1 * 0 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/129 ================================================ CREATE TABLE v0 ( v1 INTEGER UNIQUE UNIQUE UNIQUE PRIMARY KEY UNIQUE NOT NULL ) ; SELECT v1 , v1 FROM v0 WHERE ( v1 = 'AIR REG' AND v1 BETWEEN 10 AND 10 ) OR ( v1 = 10 AND v1 = 10 ) ORDER BY 10.100000 DESC ; SELECT julianday ( 1.100000 ) , v1 FROM v0 WHERE v1 IS NOT NULL ; ================================================ FILE: data/fuzz_root/mysql_init_lib/13 ================================================ CREATE TABLE v0 ( v1 FLOAT ) ; INSERT INTO v0 VALUES ( 10 ) ,( 1 ) ,( 1 ) ,( 0 ) ,( 10 ) ,( 10 ) ; SELECT substr ( TYPEOF ( DISTINCT v1 ) , 9223372036854775807 , ( v1 NOT IN ( 0 ) AND v1 NOT IN ( 0 ) ) ) FROM v0 ; SELECT printf ( v1 , v1 ) FROM v0 ORDER BY PROMO_REVENUE * 1 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/130 ================================================ CREATE TABLE v0 ( v1 INTEGER PRIMARY KEY ) ; INSERT INTO v0 VALUES ( 9223372036854775807 ) ; SELECT v1 , min ( v1 ) FROM v0 GROUP BY v1 HAVING v1 < '30' ORDER BY v1 DESC ; ================================================ FILE: data/fuzz_root/mysql_init_lib/131 ================================================ CREATE TABLE v0 ( v1 VARCHAR(0) ) ; INSERT INTO v0 ( v1 , v1 , v1 ) VALUES ( 10 , 10 , 1 ) ,( 3 , 10 , NULL ) ,( 10.100000 , 'Brand#23' , 1 ) ,( 42 , 127 , NULL ) ,( 3 , 1 , 2 ) ,( 0 , 9223372036854775807 , 1 ) ,( 10 , 10 , 10 ) ; SELECT * FROM v0 AS one , v0 AS two NATURAL JOIN v0 NATURAL JOIN v0 ORDER BY random () ; SELECT min ( v1 ) FROM v0 ORDER BY v1 * 10 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/132 ================================================ CREATE TABLE v0 ( v1 VARCHAR(0) ) ; INSERT INTO v0 ( v1 , v1 , v1 ) VALUES ( 1 , 4294967295 , 10 ) ,( 9 , 10 , NULL ) ,( 10.100000 , '%%green%%' , 0 ) ,( 1 , 2 , NULL ) ,( 10 , 1 , 1 ) ,( 1 , 1 , 1 ) ,( 2 , 10 , 3 ) ; SELECT 9223372036854775807 AS d FROM v0 AS one , v0 AS two NATURAL JOIN v0 NATURAL JOIN v0 ORDER BY random () ; SELECT min ( v1 ) FROM v0 ORDER BY v1 * 10 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/133 ================================================ CREATE TABLE v0 ( v1 INTEGER PRIMARY KEY ) ; CREATE TABLE v2 AS SELECT NULL FROM v0 GROUP BY v1 , ( 0 = 10 AND ( random () % 10 AND 127 ) ) , v1 >= v1 ; CREATE TABLE v3 ( v4 INTEGER PRIMARY KEY , v5 INT ) ; INSERT INTO v3 ( v4 ) VALUES ( 10 ) ,( 10 ) ; SELECT * FROM v2 , v3 WHERE v4 = v5 AND v4 = 1 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/134 ================================================ CREATE TABLE v0 ( v1 INTEGER PRIMARY KEY ) ; INSERT INTO v0 VALUES ( 10 ) ; SELECT * FROM v0 NOT INDEXED NATURAL JOIN v0 NOT INDEXED WHERE ( v1 >= v1 OR v1 < 1 ) AND v1 IN ( 10 , v1 ) ; ================================================ FILE: data/fuzz_root/mysql_init_lib/135 ================================================ CREATE TABLE v0 ( v1 INT , v2 INT ) ; INSERT INTO v0 ( v2 , v2 ) VALUES ( 10 , 10 ) ; SELECT * , '1995-09-01' FROM v0 WHERE v1 = 10 AND ( ( v1 = 1 AND v2 = 10 ) OR v2 = 10 ) ORDER BY v1 DESC ; ================================================ FILE: data/fuzz_root/mysql_init_lib/136 ================================================ CREATE TABLE v0 ( v1 INTEGER PRIMARY KEY ) ; SELECT sqlite_compileoption_used ( 'LG PACK' ) ; CREATE TABLE v2 ( v3 INTEGER PRIMARY KEY , v4 INT ) ; INSERT INTO v0 ( v1 ) VALUES ( 10 ) ,( 9223372036854775807 ) ; SELECT v1 , v1 , sum ( v1 ) FROM v0 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/137 ================================================ CREATE TABLE v0 ( v1 INTEGER ) ; INSERT INTO v0 ( v1 , v1 , v1 ) VALUES ( 0 , 1 , 0 ) ,( 0 , 1 , 10 ) ; SELECT instr ( v1 , v1 ) FROM v0 GROUP BY v1 , v1 ; SELECT v1 , v1 FROM v0 WHERE v1 IS NOT NULL ; ================================================ FILE: data/fuzz_root/mysql_init_lib/138 ================================================ SELECT count ( * ) OVER( ORDER BY 3 NULLS LAST ) ; SELECT DISTINCT count () OVER( ) ORDER BY count ( * ) OVER( ORDER BY 1 NULLS LAST ) LIMIT 10 OFFSET 9223372036854775807 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/139 ================================================ SELECT CASE 10 WHEN 0 THEN 'SM CASE' WHEN 10 THEN 'b' ELSE '1995-09-01' END ; ================================================ FILE: data/fuzz_root/mysql_init_lib/14 ================================================ CREATE TABLE v0 ( v1 INT , v2 INT ) ; INSERT INTO v0 ( v1 , v2 ) VALUES ( 3 , 1 ) ; SELECT * , '**%s**' FROM v0 WHERE v1 NOT IN ( v2 , v1 , lower ( 'PROMO%%' ) ) ORDER BY v2 DESC ; ================================================ FILE: data/fuzz_root/mysql_init_lib/140 ================================================ SELECT CAST ( zeroblob ( 'Al' ) AS TEXT ) ; SELECT DISTINCT count () LIMIT 1 OFFSET 1 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/141 ================================================ CREATE TABLE v0 ( v1 INTEGER ) ; INSERT INTO v0 ( v1 , v1 , v1 ) VALUES ( 10 , 10 , 0 ) ,( 10 , 99 , NULL ) ,( 10.100000 , 'Brand#34' , 10 ) ,( 0 , 0 , NULL ) ,( 10 , 1 , 10 ) ,( 10 , 10 , 10 ) ,( 0 , 10 , 10 ) ; SELECT * FROM v0 AS one , v0 AS two NATURAL JOIN v0 NATURAL JOIN v0 ORDER BY v1 NULLS LAST , v1 ; SELECT min ( v1 ) FROM v0 ORDER BY v1 * 9223372036854775807 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/142 ================================================ CREATE TABLE v0 ( v1 INTEGER PRIMARY KEY ) ; INSERT INTO v0 VALUES ( 10 ) ; SELECT count ( * ) , substr ( lower ( '**%s**' ) , 2 ) AS mx FROM v0 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/143 ================================================ CREATE TABLE v0 ( v1 INTEGER PRIMARY KEY ) ; UPDATE v0 SET v1 = v1 , v1 = 'abc' ; CREATE TABLE v2 ( v4 INTEGER PRIMARY KEY , v3 INT ) ; INSERT INTO v2 ( v4 ) VALUES ( 18446744073709551488 ) ,( 1 ) ; SELECT * FROM v0 , v0 WHERE v1 = v1 AND v1 = 10 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/144 ================================================ CREATE TABLE v0 ( v1 INT UNIQUE NOT NULL ) ; SELECT v1 , v1 FROM v0 WHERE ( v1 = 10 AND v1 = 9223372036854775807 ) OR ( v1 = 1 AND v1 = 3 ) ; SELECT v1 , v1 FROM v0 WHERE v1 IS NOT NULL ; ================================================ FILE: data/fuzz_root/mysql_init_lib/145 ================================================ CREATE TABLE v0 ( v1 INTEGER PRIMARY KEY ) ; INSERT INTO v0 VALUES ( 3 ) ; SELECT v1 , nth_value ( v1 , 10 ) OVER( ) , lead ( v1 ) OVER( ) FROM v0 GROUP BY v1 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/146 ================================================ CREATE TABLE v0 ( v1 INTEGER PRIMARY KEY CHECK( v1 ) ) ; INSERT INTO v0 VALUES ( 10 ) ; SELECT v1 + 1 FROM v0 INTERSECT SELECT v1 FROM v0 LIMIT 0 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/147 ================================================ CREATE TABLE v0 ( v1 INTEGER ) ; SELECT v1 , v1 FROM v0 WHERE ( v1 = v1 AND v1 = 1 ) OR ( v1 = 10 AND v1 = 9223372036854775807 ) ; SELECT v1 , v1 FROM v0 WHERE v1 IS NOT NULL ; ================================================ FILE: data/fuzz_root/mysql_init_lib/148 ================================================ CREATE TABLE v0 ( v1 INTEGER , v2 DOUBLE , v3 INTEGER ) ; INSERT INTO v0 ( v2 ) VALUES ( 10.100000 ) ,( 3 ) ,( 10 ) ; SELECT coalesce ( min ( v3 ) , 10 ) FROM v0 ; INSERT INTO v0 ( v2 ) VALUES ( 3 ) ,( 1.100000 ) ; SELECT * FROM v0 NOT INDEXED NATURAL JOIN v0 UNION SELECT DISTINCT * FROM v0 ORDER BY v3 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/149 ================================================ CREATE TABLE v0 ( v1 INTEGER PRIMARY KEY ) ; CREATE TABLE v2 AS SELECT v1 , v1 AS c FROM v0 ; CREATE TABLE v4 ( v6 INTEGER PRIMARY KEY , v5 INT ) ; INSERT INTO v2 ( v7 ) VALUES ( 3 ) ,( 10 ) ; SELECT * FROM v4 , v0 WHERE v1 = v1 AND v1 = 2 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/15 ================================================ CREATE TABLE v0 ( v1 INTEGER ) ; INSERT INTO v0 ( v1 , v1 , v1 ) VALUES ( 1 , 10 , 0 ) ,( 10 , 1 , NULL ) ,( 1.100000 , 'LG CASEaaaaaaaaaaaa' , 1 ) ,( 0 , 10 , NULL ) ,( 10 , 10 , 10 ) ,( 10 , 10 , 1 ) ,( 0 , 9 , 1 ) ; SELECT * FROM v0 AS one , v0 AS two NATURAL JOIN v0 NATURAL JOIN v0 ORDER BY random () ; SELECT v1 , AVG ( v1 ) OVER( PARTITION BY v1 ) FROM v0 ORDER BY v1 * 0 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/150 ================================================ CREATE TABLE v0 ( v1 INTEGER PRIMARY KEY ) ; INSERT INTO v0 VALUES ( 3 ) ; SELECT count ( CASE WHEN v1 != random () THEN 1 END ) , count ( CASE WHEN v1 = 'DELIVER IN PERSON' THEN 10 END ) FROM v0 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/151 ================================================ CREATE TABLE v0 ( v1 INTEGER PRIMARY KEY ) ; INSERT INTO v0 VALUES ( 1 ) ; SELECT v1 FROM v0 INTERSECT SELECT v1 + 10 FROM v0 LIMIT 10 OFFSET 10 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/152 ================================================ CREATE TABLE v0 ( v1 INTEGER PRIMARY KEY ) ; INSERT INTO v0 ( v1 , v1 , v1 ) VALUES ( 1 , 10 , 10 ) ,( 10 , 12 , NULL ) ,( 0 , 10 , 1 ) ,( 9223372036854775807 , 1 , NULL ) ,( 99 , 0 , 10 ) ,( 1 , 9223372036854775807 , 10 ) ON CONFLICT DO NOTHING ; SELECT v1 , ifnull ( v1 , 1 ) AS p FROM v0 GROUP BY v1 HAVING v1 < '%%BRASS' ORDER BY v1 DESC ; ================================================ FILE: data/fuzz_root/mysql_init_lib/153 ================================================ CREATE TABLE v0 ( v1 INTEGER PRIMARY KEY ) ; INSERT INTO v0 VALUES ( 10 ) ; SELECT count ( * ) , substr ( v1 , 10 , 1 ) AS mx FROM v0 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/154 ================================================ CREATE TABLE v0 ( v1 INTEGER PRIMARY KEY ) ; SELECT v1 FROM v0 WHERE v1 < 2 ORDER BY v1 DESC ; SELECT v1 FROM v0 WHERE 10 > v1 OR v1 > 0 AND NOT v1 LIMIT 1 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/155 ================================================ CREATE TABLE v0 ( v1 INTEGER ) ; INSERT INTO v0 ( v1 , v1 , v1 ) VALUES ( 1 , 0 , 1 ) ,( 10 , 3 , NULL ) ,( 10.100000 , 'SM PKG' , 2 ) ,( 10 , 10 , NULL ) ,( 1 , 10 , 2 ) ,( 1 , 1 , 0 ) ,( 9223372036854775807 , 9223372036854775807 , NULL ) ,( 10 , 10 , 10 ) ,( 10 , 1 , 10 ) ; SELECT instr ( typeof ( v1 ) , v1 ) FROM v0 ; SELECT min ( v1 ) FROM v0 ORDER BY v1 * 9223372036854775807 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/156 ================================================ CREATE TABLE v0 AS SELECT v1 FROM v0 ( v1 , v3 , v2 ) ; SELECT * FROM v0 WHERE v1 = 'EUROPE' AND v1 = 'Al' LIMIT 10 ; UPDATE v0 SET v3 = ( SELECT 10 WHERE ( SELECT coalesce ( v2 , v2 ) FROM v0 AS x GROUP BY v3 ) != 'abc' ) ; ================================================ FILE: data/fuzz_root/mysql_init_lib/157 ================================================ CREATE TABLE v0 ( v1 INTEGER PRIMARY KEY ) ; INSERT INTO v0 VALUES ( 1 ) ; SELECT v1 FROM v0 , v0 , v0 , v0 AS myname WHERE v1 IN ( 10.100000 ) ; ================================================ FILE: data/fuzz_root/mysql_init_lib/158 ================================================ CREATE TABLE v0 ( v1 FLOAT ) ; INSERT INTO v0 ( v1 ) VALUES ( 10 ) ,( 10 ) ,( 10 ) ; INSERT INTO v0 VALUES ( 10 ) ,( 10 ) ,( 10 ) ,( 9 ) ,( 10 ) ,( 0 ) ; SELECT instr ( 'LG PACK' , typeof ( v1 ) ) FROM v0 ; SELECT printf ( v1 , v1 ) FROM v0 ORDER BY v1 * 10 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/159 ================================================ CREATE TABLE v0 ( v1 INTEGER PRIMARY KEY ) ; SELECT sqlite_compileoption_used ( 'b' ) ; CREATE TABLE v2 ( v4 INTEGER PRIMARY KEY , v3 INT ) ; INSERT INTO v0 ( v1 ) VALUES ( 10 ) ,( 1 ) ; SELECT * FROM v2 , v0 WHERE ( v1 ) <= 'MED PKG' = v1 AND v1 = 9223372036854775808 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/16 ================================================ CREATE TABLE v0 ( v1 INTEGER PRIMARY KEY ) ; INSERT INTO v0 VALUES ( 1 ) ; SELECT min ( v1 ) OVER( ORDER BY v1 , v1 , v1 DESC , 9 DESC , v1 ) FROM v0 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/160 ================================================ CREATE TABLE v0 ( v1 INTEGER PRIMARY KEY ) ; INSERT INTO v0 VALUES ( 2 ) ; SELECT nth_value ( v1 , 2 ) OVER( ) , count ( CASE WHEN v1 = 'LG CASE' THEN 1 END ) FROM v0 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/161 ================================================ CREATE TABLE v0 ( v1 INTEGER PRIMARY KEY ) ; CREATE TABLE v2 AS SELECT count ( * ) OVER( ORDER BY v1 DESC , v1 ASC ) FROM v0 GROUP BY v1 , v1 , v1 ; CREATE TABLE v3 ( v5 INTEGER PRIMARY KEY , v4 INT ) ; INSERT INTO v3 ( v5 ) VALUES ( 0 ) ,( 0 ) ; SELECT * FROM v0 , v3 WHERE v5 = v5 AND v4 = 1 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/162 ================================================ SELECT CAST ( zeroblob ( 10 ) AS DOUBLE ) ; SELECT DISTINCT ( SELECT DISTINCT '%%green%%' , 0 , 1 , 10.100000 ) GROUP BY printf ( 'Ar' , 9 ) <= 'BUILDING' LIMIT 1 OFFSET 10 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/163 ================================================ CREATE TABLE v0 ( v1 INTEGER , v3 DOUBLE , v2 INTEGER ) ; INSERT INTO v0 ( v2 ) VALUES ( 10.100000 ) ,( 10 ) ,( 10 ) ; SELECT instr ( v2 , quote ( substr ( v3 , 1 , 10 ) ) ) FROM v0 ; INSERT INTO v0 ( v2 ) VALUES ( 10 ) ,( 10.100000 ) ; SELECT * FROM v0 NOT INDEXED NATURAL JOIN v0 UNION SELECT DISTINCT * FROM v0 ORDER BY v1 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/164 ================================================ CREATE TABLE v0 ( v2 INT , v1 INT ) ; INSERT INTO v0 ( v1 , v1 ) VALUES ( 10 , 10 ) ; SELECT nth_value ( v2 , 0 ) OVER( ORDER BY v1 ) FROM v0 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/165 ================================================ CREATE TABLE v0 ( v1 FLOAT ) ; INSERT INTO v0 ( v1 , v1 , v1 ) VALUES ( 8 , 1 , 10 ) ,( 1 , 10 , NULL ) ,( 1.100000 , '' , 0 ) ,( 3 , 1 , NULL ) ,( 1 , 2 , 2 ) ,( 10 , 0 , 10 ) ,( 10 , 10 , NULL ) ,( 10 , 12 , 0 ) ,( 0 , 99 , 10 ) ; SELECT instr ( typeof ( v1 ) , v1 ) FROM v0 ; SELECT min ( v1 ) FROM v0 ORDER BY v1 * 10 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/166 ================================================ CREATE TABLE v0 ( v1 INTEGER ) ; INSERT INTO v0 ( v1 , v1 , v1 ) VALUES ( 3 , 2 , 1 ) ,( 10 , 10 , 10 ) ; SELECT v1 , v1 , dense_rank () OVER( ORDER BY v1 ) , changes () FROM v0 ; SELECT min ( v1 ) FROM v0 ORDER BY v1 * 10 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/167 ================================================ CREATE TABLE v0 ( v1 TEXT ) ; INSERT INTO v0 VALUES ( 10 ) ; SELECT v1 FROM v0 WHERE v1 IN ( 1.100000 ) ; ================================================ FILE: data/fuzz_root/mysql_init_lib/168 ================================================ CREATE TABLE v0 ( v1 INTEGER PRIMARY KEY CHECK( v1 ) ) ; INSERT INTO v0 VALUES ( 127 ) ; SELECT min ( v1 NOT LIKE abs ( v1 ) ) , max ( typeof ( v1 ) ) FROM v0 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/169 ================================================ CREATE TABLE v0 ( v1 INTEGER PRIMARY KEY CHECK( v1 ) ) ; INSERT INTO v0 VALUES ( 1 ) ; SELECT printf ( 's%' , 10 , 10 , 10 ) ; ================================================ FILE: data/fuzz_root/mysql_init_lib/17 ================================================ CREATE TABLE v0 ( v1 INTEGER PRIMARY KEY ) ; INSERT INTO v0 VALUES ( 10 ) ; SELECT count ( * ) , substr ( v1 , 3 , NULL ) AS mx FROM v0 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/170 ================================================ CREATE TABLE v0 ( v2 INT , v1 INT ) ; INSERT INTO v0 ( v1 , v2 ) VALUES ( 4294967295 , 10 ) ; SELECT COALESCE ( DISTINCT max ( v1 ) OVER( ORDER BY v1 ) , 10 ) FROM v0 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/171 ================================================ CREATE TABLE v0 ( v1 INTEGER ) ; INSERT INTO v0 ( v1 , v1 , v1 ) VALUES ( 9 , 1 , 10 ) ,( 10 , 3 , NULL ) ,( 10.100000 , '31' , 3 ) ,( 2 , 1 , NULL ) ,( 127 , 10 , 1 ) ,( 3 , 10 , 0 ) ,( 10 , 10 , 10 ) ; SELECT * FROM v0 AS one , v0 AS two NATURAL JOIN v0 NATURAL JOIN v0 ORDER BY random () NULLS LAST ; SELECT likelihood ( v1 <= 'MED PKG' , 9223372036854775808.000000 ) FROM v0 ORDER BY v1 * 1 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/172 ================================================ CREATE TABLE v0 ( v1 INTEGER PRIMARY KEY ) ; CREATE TABLE v2 AS SELECT CASE 10 WHEN 8 THEN 'MED PKG' WHEN 2 THEN '29' ELSE 'MED P' END GROUP BY printf ( 'AIR' , 10 ) <= 'BUILDING' ; CREATE TABLE v3 ( v5 INTEGER PRIMARY KEY , v4 INT ) ; INSERT INTO v3 ( v5 ) VALUES ( 10 ) ,( 0 ) ; SELECT * FROM v3 , v2 WHERE v6 = v7 AND v8 = 99 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/173 ================================================ CREATE TABLE v0 ( v1 INTEGER ) ; INSERT INTO v0 ( v1 , v1 , v1 ) VALUES ( 1 , 3 , 3 ) ,( 0 , 10 , NULL ) ,( 3.100000 , 'Brand#34' , 3 ) ,( 10 , 0 , NULL ) ,( 10 , 10 , NULL ) ,( 9 , 3 , 10 ) ,( 2 , 10 , 2 ) ,( 99 , 0 , 9223372036854775807 ) ; SELECT * FROM v0 AS one , v0 AS two NATURAL JOIN v0 NATURAL JOIN v0 ORDER BY random () ; SELECT min ( v1 ) FROM v0 ORDER BY v1 * 1 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/174 ================================================ CREATE TABLE v0 ( v1 FLOAT ) ; INSERT INTO v0 VALUES ( 1 ) ,( 2 ) ,( 2 ) ,( 10 ) ,( 3 ) ,( 0 ) ; SELECT instr ( v1 , typeof ( v1 ) ) FROM v0 AS PROMO_REVENUE ; SELECT min ( v1 ) FROM v0 ORDER BY v1 * 10 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/175 ================================================ CREATE TABLE v0 ( v1 INTEGER ) ; INSERT INTO v0 ( v1 , v1 , v1 ) VALUES ( 10 , 9 , 127 ) ,( 10 , 0 , 1 ) ; SELECT v1 , v1 , dense_rank () OVER( ORDER BY v1 ) , dense_rank () OVER( PARTITION BY v1 ORDER BY v1 ) FROM v0 ; SELECT min ( v1 ) OVER( ORDER BY count ( * ) OVER( ) ) FROM v0 ORDER BY v1 * 10 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/176 ================================================ CREATE TABLE v0 ( v1 INTEGER ) ; SELECT instr ( v1 , v1 ) FROM v0 GROUP BY v1 HAVING ( 9223372036854775807 = 3 AND ( random () % 10 AND 10 ) ) ; SELECT v1 , v1 FROM v0 WHERE v1 IS NOT NULL ; ================================================ FILE: data/fuzz_root/mysql_init_lib/177 ================================================ CREATE TABLE v0 ( v1 INT , v2 INT ) ; CREATE TABLE v3 ( v5 INTEGER PRIMARY KEY , v4 INT ) ; INSERT INTO v0 ( v1 , v2 ) VALUES ( 10 , 10 ) ; SELECT * , 'MED PKG' FROM v3 WHERE v5 NOT IN ( v5 , 2 , lower ( 'PROMO%%' ) ) ORDER BY v4 DESC ; ================================================ FILE: data/fuzz_root/mysql_init_lib/178 ================================================ CREATE TABLE v0 ( v1 INTEGER ) ; INSERT INTO v0 ( v1 , v1 , v1 ) VALUES ( 10 , 3 , 10 ) ,( 3 , 1 , NULL ) ,( 10.100000 , 'Max Mustermann' , 2 ) ,( 9223372036854775808 , 8 , NULL ) ,( 9223372036854775808 , 0 , 8 ) ,( 9223372036854775807 , 10 , NULL ) ,( 10.100000 , 'BUILDING' , 10 ) ,( 10 , 2 , NULL ) ,( 0 , 10 , 0 ) ,( 1 , 3 , 1 ) ,( 0 , 9223372036854775807 , NULL ) ; SELECT instr ( zeroblob ( 9 ) , v1 ) FROM v0 ; SELECT min ( v1 ) FROM v0 ORDER BY v1 * 10 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/179 ================================================ CREATE TABLE v0 ( v1 INTEGER ) ; INSERT INTO v0 VALUES ( 10 ) ,( 10 ) ,( 9223372036854775807 ) ,( 9223372036854775807 ) ,( 10 ) ,( 3 ) ,( 3 ) ; SELECT SUM ( v1 * ( 10 - v1 ) ) FROM v0 ; SELECT v1 , v1 FROM v0 WHERE v1 IS NOT NULL ; ================================================ FILE: data/fuzz_root/mysql_init_lib/18 ================================================ CREATE TABLE v0 ( v1 INTEGER ) ; INSERT INTO v0 VALUES ( 10 ) ,( 10 ) ,( 0 ) ,( 8 ) ,( 127 ) ,( 10 ) ; SELECT instr ( v1 , zeroblob ( v1 ) ) FROM v0 ; SELECT min ( 10 AS PROMO_REVENUE , v1 ) FROM v0 ORDER BY v1 * 1 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/180 ================================================ CREATE VIEW v0 AS SELECT COUNT ( * ) OVER( ORDER BY ( SELECT CAST ( zeroblob ( 3 ) AS DOUBLE ) ) ) , 2 ; SELECT * FROM v0 AS a JOIN tclvar ON NULL = 10.100000 NOT LIKE '31' ; ================================================ FILE: data/fuzz_root/mysql_init_lib/181 ================================================ CREATE TABLE v0 ( v1 INTEGER PRIMARY KEY ) ; INSERT INTO v0 VALUES ( 10 ) ; SELECT v1 , v1 = count ( * ) , group_concat ( v1 ) OVER( ) FROM v0 GROUP BY v1 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/182 ================================================ SELECT CAST ( zeroblob ( 10 ) AS DOUBLE ) ; SELECT DISTINCT ( SELECT DISTINCT '**%s**' , 10 , 0 , 10.100000 ) ORDER BY 'test' , 'testtest' LIMIT 9223372036854775807 OFFSET 9 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/183 ================================================ SELECT 1 IN ( CAST ( 'SM PKG' AS TEXT ) ) ; SELECT v8 , v7 FROM v4 WHERE ( v6 = 1 AND v5 = 10 ) OR ( v10 = 2 AND v9 = 10 ) ; SELECT v17 , v18 FROM v15 WHERE v16 IS NOT NULL ; ================================================ FILE: data/fuzz_root/mysql_init_lib/184 ================================================ CREATE TABLE v0 ( v1 CHAR(25) PRIMARY KEY ) ; INSERT INTO v0 VALUES ( 0 ) ; SELECT count ( * ) , substr ( lower ( '%%BRASS' ) , 9223372036854775807 ) AS mx FROM v0 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/185 ================================================ CREATE TABLE v0 ( v1 INTEGER PRIMARY KEY ) ; INSERT INTO v0 VALUES ( 10 ) ; SELECT min ( v1 ) OVER( ORDER BY v1 , v1 , v1 DESC , v1 , v1 ) FROM v0 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/186 ================================================ CREATE TABLE v0 ( v1 INTEGER ) ; INSERT INTO v0 ( v1 , v1 , v1 ) VALUES ( 1 , 10 , 10 ) ,( 10 , 10 , 10 ) ,( 10.100000 , 'MED BOX' , 1 ) ,( 0 , 1 , NULL ) ,( 10 , 10 , 2 ) ,( 3 , 10 , 1 ) ,( 0 , 10 , 0 ) ; SELECT * FROM v0 AS one , v0 AS two NATURAL JOIN v0 NATURAL JOIN v0 ORDER BY random () ; SELECT min ( v1 ) FROM v0 ORDER BY v1 * 10 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/187 ================================================ CREATE TABLE v0 ( v1 INTEGER ) ; INSERT INTO v0 ( v1 , v1 , v1 ) VALUES ( 9223372036854775807 , 12 , 0 ) ,( 0 , 10 , 0 ) ; SELECT instr ( v1 , v1 ) FROM v0 ; SELECT v1 , v1 FROM v0 WHERE v1 IS NOT NULL ; ================================================ FILE: data/fuzz_root/mysql_init_lib/188 ================================================ CREATE TABLE v0 ( v1 INTEGER ) ; INSERT INTO v0 ( v1 , v1 , v1 ) VALUES ( 10 , 0 , 10 ) ,( 3 , 2 , NULL ) ,( 1.100000 , '23' , 0 ) ,( 10 , 10 , NULL ) ,( 12 , 10 , 1 ) ,( 9223372036854775807 , 12 , 99 ) ; SELECT v1 , v1 , dense_rank () OVER( ORDER BY v1 ) , dense_rank () OVER( PARTITION BY v1 ORDER BY v1 ) FROM v0 ; SELECT min ( v1 ) FROM v0 ORDER BY v1 * 0 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/189 ================================================ CREATE TABLE v0 ( v1 INT , v2 INT ) ; INSERT INTO v0 ( v1 , v1 ) VALUES ( 1 , 10 ) ; SELECT min ( v1 , v1 ) FROM v0 WHERE v2 IS NULL AND v2 IN ( 10 , 12 , 10 , 10 , 10 ) ; ================================================ FILE: data/fuzz_root/mysql_init_lib/19 ================================================ CREATE TABLE v0 ( v1 INTEGER PRIMARY KEY ) ; INSERT INTO v0 VALUES ( 10 ) ; SELECT v1 FROM v0 WHERE v1 IN ( 10 , 10 , NULL , 3 ) ; ================================================ FILE: data/fuzz_root/mysql_init_lib/190 ================================================ CREATE TABLE v0 ( v1 TEXT PRIMARY KEY ) ; INSERT INTO v0 VALUES ( 8 ) ; SELECT v1 , v1 = count ( * ) , group_concat ( v1 ) OVER( ) FROM v0 GROUP BY v1 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/191 ================================================ CREATE TABLE v0 ( v1 INTEGER ) ; INSERT INTO v0 VALUES ( 9223372036854775807 ) ,( 10 ) ,( 10 ) ,( 9 ) ,( 10 ) ,( 10 ) ,( 10 ) ; SELECT SUM ( v1 * ( ( random () % 9223372036854775807 ) + v1 ) ) FROM v0 ORDER BY length ( v1 ) DESC ; SELECT v1 , v1 FROM v0 WHERE v1 IS NOT NULL ; ================================================ FILE: data/fuzz_root/mysql_init_lib/192 ================================================ CREATE TABLE v0 ( v1 INTEGER PRIMARY KEY CHECK( v1 ) ) ; INSERT INTO v0 VALUES ( 10 ) ; SELECT printf ( 'SM BOX' , 9223372036854775807 , 9223372036854775808 , 4294967295 ) GROUP BY v1 HAVING ( 9 = 9223372036854775808 AND v1 = 8 ) ; ================================================ FILE: data/fuzz_root/mysql_init_lib/193 ================================================ CREATE TABLE v0 ( v2 INT , v1 INT ) ; SELECT * FROM v0 GROUP BY v2 ORDER BY v2 , v2 DESC NULLS FIRST LIMIT 10 ; SELECT COALESCE ( max ( v1 ) , 0 ) FROM v0 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/194 ================================================ CREATE VIEW v0 ( v12 , v11 , v1 , v13 , v14 , v15 , v6 , v3 , v4 , v5 , v19 , v16 , v17 , v18 , v10 , v7 , v8 , v9 , v2 ) AS SELECT COUNT ( * ) OVER( ) , 3 ; SELECT * FROM v0 AS one , v0 AS two NATURAL JOIN v0 NATURAL JOIN v0 ORDER BY '1995-03-15' ; ================================================ FILE: data/fuzz_root/mysql_init_lib/195 ================================================ CREATE TABLE v0 ( v1 INTEGER ) ; INSERT INTO v0 ( v1 , v1 , v1 ) VALUES ( 8 , 10 , 2 ) ,( 10 , 9 , 1 ) ; SELECT * FROM v0 AS one , v0 AS two NATURAL JOIN v0 NATURAL JOIN v0 ORDER BY random () ; SELECT min ( v1 ) FROM v0 ORDER BY v1 * 10 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/196 ================================================ CREATE TABLE v0 ( v1 TEXT , v2 INT , v3 INT , v4 INT ) ; CREATE INDEX v5 ON v0 ( v3 , v2 , v2 , v1 , v4 , v1 , v3 , v1 , v3 , v2 , v1 , v4 , v3 , v1 ) ; SELECT * FROM v0 WHERE v1 = ( SELECT 10 ) ; SELECT * , 'DELIVER IN PERSON' FROM v0 WHERE v2 = 2 AND ( v2 = 10 OR v3 = 0 ) ORDER BY v2 DESC ; ================================================ FILE: data/fuzz_root/mysql_init_lib/197 ================================================ CREATE TABLE v0 ( v1 INTEGER ) ; SELECT lead ( v1 , 10 ) OVER( ORDER BY v1 ) AS x FROM v0 ; SELECT v1 , sum ( v1 ) OVER( PARTITION BY 10 , 10 , 10 , 99 ) FROM v0 AS REVENUE ; ================================================ FILE: data/fuzz_root/mysql_init_lib/198 ================================================ CREATE TABLE v0 ( v3 INTEGER , v2 DOUBLE , v1 INTEGER ) ; INSERT INTO v0 ( v3 ) VALUES ( 9.100000 ) ,( 10 ) ,( 0 ) ; SELECT nth_value ( v2 , zeroblob ( 1 ) ) OVER( ORDER BY v2 ) FROM v0 ; INSERT INTO v0 ( v2 ) VALUES ( 9 ) ,( 3.100000 ) ; SELECT DISTINCT 9223372036854775807 , v3 + 99 , 10 FROM v0 UNION SELECT DISTINCT * FROM v0 ORDER BY v1 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/199 ================================================ CREATE TABLE v0 ( v2 INT , v1 INT ) ; INSERT INTO v0 ( v1 , v2 ) VALUES ( 2 , 3 ) ; SELECT ( SELECT v1 AS y WHERE 1 > v2 ) FROM v0 NOT INDEXED NATURAL JOIN v0 ; ================================================ FILE: data/fuzz_root/mysql_init_lib/strip_mysql ================================================ CREATE VIEW x AS SELECT 1 ; SELECT x , x FROM x WHERE x = 'x' ; DROP TABLE x ; CREATE TABLE x ( x INT ) ; DROP VIEW x ; SELECT 'x' AS x , x ( x ) AS x FROM x ; SELECT x , x ( x ) FROM x ; SELECT 'x' AS x , x ( x ) AS x , x AS x FROM x ; SELECT 'x' AS x , x ( x ) FROM x ; SELECT 'x' AS x , x ( x ) FROM x WHERE x ( x ) ; SELECT 'x' AS x , x AS x , x ( x ( x ) ) AS x FROM x WHERE x ( x ) ; SELECT 'x' AS x , x ( x , 1.000000 ) FROM x ; SELECT x , x ( 1 , x ) FROM x WHERE x >= 'x' ; SELECT x , x ( 1 , x ) FROM x WHERE x < 'x' ; INSERT INTO x ( x , x ) SELECT x , x ( x * 1 , x * 1 ) FROM x ( 1 , 1 ) x ; INSERT INTO x ( x , x ) SELECT x + 1 , x ( x * 1 + 1 , x * 1 + 1 ) FROM x ( 1 , 1 ) x ; INSERT INTO x ( x ) SELECT x ( x ( x , x ) , x ( x + x , x + x ) ) FROM x ( 1 , 1 , 1 ) x , x ( 1 , 1 , 1 ) x , x ( 1 , 1 ) x ; SELECT x , x , x ( 'x' ) FROM x ORDER BY x LIMIT 1 ; SELECT x ( 'x' ) ; SELECT x , x , x ( 1 , 1 ) FROM x ORDER BY x LIMIT 1 ; SELECT x ( x ) AS x , x ( x ) + x ( ) * 1 AS x FROM x GROUP BY x ORDER BY x LIMIT 1 ; SELECT x ( 'x' , 'x' , 'x' ) ; SELECT * FROM x ( 'x' , 'x' , 'x' ) ; DROP TABLE IF EXISTS x ; CREATE TABLE x ( x INT , x TEXT ) ; DROP VIEW IF EXISTS x ; CREATE VIEW x AS SELECT * FROM x ; DROP INDEX x ; CREATE INDEX x ON x ( x ) ; INSERT INTO x VALUES ( 'x' , 'x' ) ; INSERT INTO x ( x ) VALUES ( 'x' ) ; SELECT * FROM x ; SELECT * FROM x WHERE x = 1 ; SELECT * FROM x WHERE x < 1 ; SELECT * FROM x WHERE x > 1 ; SELECT * FROM x WHERE x <= 1 ; SELECT * FROM x WHERE x >= 1 ; SELECT * FROM x WHERE 1 = x ; SELECT * FROM x WHERE 1 < x ; SELECT * FROM x WHERE 1 > x ; SELECT * FROM x WHERE 1 <= x ; SELECT * FROM x WHERE 1 >= x ; SELECT 'x' AS x , x AS x , - x AS x FROM x ; SELECT 'x' AS x , x , x , x + x AS x FROM x ; SELECT 'x' AS x , x , x , x - x AS x FROM x ; SELECT 'x' AS x , x , x , x * x AS x FROM x ; SELECT 'x' AS x , x , x , x * x AS x FROM x WHERE x < 1 OR ( x > 1 AND x < 1 ) ; SELECT 'x' AS x , x , x , x / x AS x , x % x AS x FROM x ; SELECT 'x' AS x , x , x ( x ) FROM x ; SELECT 1 + x AS x FROM x ; SELECT 1 - x AS x FROM x ; SELECT x ( x ) , x ( x ) FROM x ; SELECT 'x' AS x , x ( x , 'x' ) , x ( x , 'x' ) FROM x ; SELECT 'x' AS x , x ( ( x * 1 ) , 'x' ) , x ( ( x * 1 ) , 'x' ) FROM x ; SELECT 'x' AS x , x ( x , 'x' ) FROM x ; SELECT x , EXTRACT ( YEAR FROM x ) , x ( * ) FROM x GROUP BY 1 , 1 ORDER BY 1 , 1 ; CREATE TABLE x ( x INT , x INT , x TEXT ) ; INSERT INTO x VALUES ( 1 , ( ( 1.000000 , 1.000000 ) , ( 1.000000 , 1.000000 ) ) ) ; INSERT INTO x VALUES ( 1 , ( ( NULL , 1.000000 ) , ( 1.000000 , 1.000000 ) ) ) ; INSERT INTO x VALUES ( x ( 'x' , 1 ) ) ; INSERT INTO x SELECT 'x' , NULL FROM x ( 1 , 1 ) ; SELECT x , x FROM x WHERE ( x , x ) > ( 'x' , 'x' ) ORDER BY x , x ; INSERT INTO x VALUES ( 'x' ) ; INSERT INTO x VALUES ( 1 , FALSE , 1 ) , ( 1 , FALSE , 1 ) , ( 1 , TRUE , 1.000000 ) ; SELECT CAST ( x AS TEXT ) FROM x ; SELECT x ( x ) FROM x x ; ALTER TABLE x ADD COLUMN x TEXT ; SELECT x ( x ) FROM ( SELECT x , x FROM x ) AS x ; SELECT x ( x ) FROM ( SELECT x AS x , x AS x FROM x ) AS x ; INSERT INTO x VALUES ( 1 , 1 ) ; CREATE TABLE x ( x TEXT , x TEXT ) ; INSERT INTO x ( x , x ) VALUES ( 'x' , 'x' ) ; SELECT x ( * ) AS x FROM x ; SELECT x ( ) ; SELECT x , x , x , x , x x WHERE x = 'x' ; SELECT x ( x ( ) ) ; CREATE TABLE x ( x INTEGER PRIMARY KEY ) ; INSERT INTO x VALUES ( 1 ) ; SELECT x ( 'x' , 'x' ) ; SELECT * FROM x ( 'x' , 'x' ) ; CREATE TABLE x ( x TEXT ) ; SELECT 'x' AS x , * FROM x ; SELECT x ( 1 ) ; SELECT x ( 1 , 1 , 1 , 'x' , TRUE , FALSE , x ( 'x' , 'x' ) ) ; SELECT x ( 'x' , 1 , 1 , 1 , 'x' , TRUE , FALSE , x ( 'x' , 'x' ) ) ; SELECT x ( 'x' , 1 , 1 , NULL , 1 ) ; SELECT x ( NULL , 1 , 1 , NULL , 1 ) IS NULL ; SELECT x ( 'x' , 1 ) ; SELECT x ( 'x' , 'x' , 1 , 'x' ) ; SELECT x ( 'x' , 'x' , NULL , 'x' ) ; SELECT x ( 'x' , 'x' , 1 , NULL ) ; SELECT x ( 'x' , NULL , 1 , 'x' ) ; SELECT x ( 'x' , 1 , 1 , 1 ) ; SELECT x ( 'x' , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ) ; SELECT x ( 'x' , NULL ) ; SELECT x ( 'x' , 1 , 'x' ) ; SELECT x ( 'x' , 1 , NULL ) ; SELECT x ( 'x' , NULL , 'x' ) ; INSERT INTO x DEFAULT VALUES ; INSERT INTO x VALUES ( 'x' ) , ( 'x' ) ; INSERT INTO x VALUES ( NULL , 'x' ) ; SELECT * FROM x WHERE x IS NULL ; INSERT INTO x VALUES ( ARRAY [ 1 ] ) ; SELECT x ( x ) FROM x ; SELECT x ( x [ 1 ] ) FROM x ; SELECT x ( x [ 1 ] [ 1 ] ) FROM x ; SELECT x ( ( x [ 1 ] ) [ 1 ] ) FROM x ; SELECT x , x [ 1 ] , ( x [ 1 ] ) [ 1 ] FROM x ; INSERT INTO x VALUES ( 'x' , 'x' , 'x' , 'x' , 'x' ) ; INSERT INTO x VALUES ( NULL , 'x' , 'x' , 'x' , 'x' ) ; INSERT INTO x VALUES ( 'x' , NULL , 'x' , 'x' , 'x' ) ; INSERT INTO x VALUES ( 'x' , 'x' , NULL , 'x' , 'x' ) ; DROP TABLE x CASCADE ; UPDATE x SET x = NULL ; INSERT INTO x ( x ) VALUES ( 1 ) ; UPDATE x SET x = 1 ; CREATE TABLE x ( x INTEGER ) ; INSERT INTO x ( x ) VALUES ( NULL ) ; CREATE TABLE x ( x INT , x INT ) ; SELECT x ( 1.000000 ) ; INSERT INTO x VALUES ( NULL ) ; INSERT INTO x VALUES ( x ) ; SELECT x ( * ) > 1 FROM x ; SELECT x ( x ) AS x FROM x x ; SELECT 1 ^ 1 + 1 ^ 1 + 1 ^ 1.000000 + 1 ^ 1.000000 ; CREATE TABLE x ( x INT NOT NULL PRIMARY KEY , x TEXT NOT NULL , x NUMERIC NOT NULL ) ; INSERT INTO x VALUES ( 1 , 'x' , 1 ) , ( 1 , 'x' , 1 ) , ( 1 , 'x' , 1 ) , ( 1 , 'x' , 1 ) , ( 1 , 'x' , 1 ) ; CREATE VIEW x AS SELECT x , x ( x ) AS x FROM x GROUP BY x ; SELECT * FROM x ORDER BY x ; CREATE UNIQUE INDEX x ON x ( x ) ; CREATE UNIQUE INDEX x ON x ( ( x > 1 ) ) ; CREATE VIEW x AS SELECT x ( x ) AS x FROM x ; INSERT INTO x VALUES ( 1 , 'x' , 1 ) ; CREATE VIEW x AS SELECT 1 x ; DROP VIEW x CASCADE ; INSERT INTO x SELECT * FROM x ; INSERT INTO x VALUES ( 1 , 1 , 1 ) ; INSERT INTO x ( x ) VALUES ( 'x' ) , ( 'x' ) , ( 'x' ) ; UPDATE x SET x = 'x' WHERE x = 1 ; UPDATE x SET x = 1 WHERE x = 1 ; CREATE TABLE x AS SELECT x ( 1 , 1 ) AS x ; SELECT x ( * ) FROM x ; INSERT INTO x VALUES ( 'x' , 'x' , 'x' ) , ( 'x' , 'x' , 'x' ) ; UPDATE x SET x = 'x' ; INSERT INTO x ( x , x ) VALUES ( 'x' , 1 ) ; INSERT INTO x ( x ) SELECT x FROM x WHERE x BETWEEN 'x' AND 'x' OR x BETWEEN 'x' AND 'x' ; SELECT x ( * ) AS x FROM x WHERE x = 'x' ; INSERT INTO x VALUES ( 1.000000 ) ; INSERT INTO x VALUES ( 1 ) , ( 1 ) ; SELECT x FROM x ; CREATE TABLE x ( x INT PRIMARY KEY , x TEXT ) ; INSERT INTO x VALUES ( 1 , 1 , 'x' ) ; INSERT INTO x ( x , x ) VALUES ( 1 , 1 ) ; INSERT INTO x SELECT x , x + 1 , x FROM x ; UPDATE x SET ( x , x ) = ( 'x' , x + x ) , x = x + 1 WHERE x = 1 ; UPDATE x SET ( x , x ) = ( SELECT x , x FROM x WHERE x = 1 AND x = 'x' ) WHERE x = 1 AND x = 1 ; UPDATE x SET ( x , x ) = ( SELECT x + 1 , x FROM x ) ; UPDATE x SET ( x , x ) = ( SELECT x + 1 , x FROM x WHERE x = 1 ) WHERE x = 1 ; UPDATE x SET x = x ( 'x' , 1 ) WHERE x = 'x' ; SELECT x , x , x ( x ) FROM x ; INSERT INTO x VALUES ( 1 , 'x' ) ; CREATE TABLE x ( x VARCHAR , x NUMERIC , x TEXT , x BIGINT , x INT ) ; UPDATE x SET x = x - 1 ; ALTER TABLE x DROP COLUMN x ; ALTER TABLE x ADD COLUMN x BIGINT ; CREATE TABLE x ( x VARCHAR , x INT , x NUMERIC , x BIGINT , x TEXT ) ; UPDATE x SET x = x - 1 , x = x WHERE x = 1 ; UPDATE x SET x = x - 1 WHERE x > 1 ; UPDATE x SET x = x ; UPDATE x SET x = x + 1 WHERE x = 1 ; CREATE VIEW x AS SELECT * FROM x WHERE ( SELECT x > x FROM x ) WITH CHECK OPTION ; UPDATE x SET x = 'x' , x = 1 , x = 1 WHERE x = 1 ; UPDATE x SET x = 'x' , x = 1 WHERE x = 1 ; UPDATE x SET x = ( CASE WHEN x = 1 THEN 1 ELSE x + 1 END ) WHERE x = 'x' AND x > 1 AND x >= 1 ; UPDATE x SET x = x + 1 WHERE x = 'x' AND x > 1 AND x >= 1 ; UPDATE x SET x = 'x' , x = 1 WHERE x = 'x' AND x = 1 ; INSERT INTO x VALUES ( 'x' , 1 ) ; UPDATE x SET x = 'x' WHERE x = 'x' ; UPDATE x SET x = x + x WHERE x = 1 ; INSERT INTO x VALUES ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) ; UPDATE x SET x = 1 , x = 1 WHERE x = 1 ; UPDATE x SET x = x - 1 WHERE x = 1 ; CREATE UNIQUE INDEX x ON x ( x ( x ) ) ; CREATE TABLE x ( x BIGINT , x BIGINT ) ; CREATE UNIQUE INDEX x ON x ( x ( x , 1 ) ) ; INSERT INTO x VALUES ( 1 , 1 ) ON CONFLICT ( x ) WHERE x ( x , 1 ) > 1 DO NOTHING ; CREATE VIEW x AS SELECT * FROM x WITH CASCADED CHECK OPTION ; INSERT INTO x VALUES ( 'x' , 1 , 1 ) ; CREATE TABLE x ( x INT PRIMARY KEY , x INT ) ; INSERT INTO x VALUES ( 1 , 1 ) , ( 1 , 1 ) ON CONFLICT DO NOTHING ; INSERT INTO x VALUES ( 1 , 'x' ) ON CONFLICT DO NOTHING ; CREATE TABLE x ( x CHAR , x INT UNIQUE ) ; CREATE TABLE x ( x TEXT , x INT , x INT , x TEXT ) ; SELECT FALSE <= 1 BETWEEN 1 AND 1 ; SELECT FALSE >= 1 BETWEEN 1 AND 1 ; SELECT x ( * ) FROM x WHERE x = ( SELECT x FROM x WHERE x = 'x' ) ; ALTER TABLE x ADD COLUMN x CHAR ; ALTER TABLE x ADD COLUMN x BOOLEAN ; INSERT INTO x ( x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x ) VALUES ( 1 , 'x' , 'x' , 1.000000 , 1.000000 , 1 , 'x' , 'x' , 1 , 'x' , 'x' , 'x' , TRUE , 'x' , 'x' , 'x' , 'x' , 'x' , 'x' , 'x' , 'x' , 'x' ) ; CREATE INDEX x ON x ( x , ( x + x ) , x ) ; ALTER TABLE x RENAME TO x ; CREATE VIEW x ( x ) AS SELECT x FROM x ; SELECT x FROM x WHERE x < 1 ; CREATE TABLE x ( x INT PRIMARY KEY ) ; INSERT INTO x VALUES ( 1 , 1 ) , ( 1 , 1 ) ; CREATE TABLE x ( x INT , x INT , x INT ) ; INSERT INTO x ( x , x , x ) VALUES ( 1 , 1 , 1 ) ; ALTER TABLE x RENAME x TO x ; ALTER TABLE x DROP x ; ALTER TABLE x ADD x INT ; UPDATE x SET x = 1 WHERE x IS NULL ; ALTER TABLE x ADD COLUMN x INT PRIMARY KEY ; INSERT INTO x ( x , x ) VALUES ( NULL , 1 ) ; INSERT INTO x ( x , x ) VALUES ( 1 , NULL ) ; INSERT INTO x ( x , x ) VALUES ( NULL , NULL ) ; CREATE TABLE x ( x INT NOT NULL ) ; INSERT INTO x VALUES ( NULL , 1 ) ; INSERT INTO x VALUES ( 1 , NULL ) ; INSERT INTO x ( x , x ) VALUES ( NULL , 'x' ) ; INSERT INTO x VALUES ( 1 , 1 , 1 , 1 ) ; SELECT * FROM x ORDER BY 'x' ; SELECT * FROM x GROUP BY x ; SELECT * FROM x GROUP BY 'x' ; SELECT x , x , x FROM x ; SELECT x , x , x , x FROM x ; SELECT 'x' FROM x ; SELECT 'x' , x , x , x FROM x ; SELECT * FROM x WHERE 'x' = 1 ; UPDATE x SET x = 1 WHERE 'x' = 1 ; INSERT INTO x ( x , x , x , x ) VALUES ( 1 , 1 , 1 , 1 ) ; CREATE TABLE x AS SELECT * FROM x ; ALTER TABLE x RENAME COLUMN x TO x ; ALTER TABLE x ADD COLUMN x INT ; CREATE TABLE x ( x INT , x TEXT , x INT ) ; ALTER TABLE x ADD x TEXT ; UPDATE x SET x = x + 1 , x = x ( x ) ; INSERT INTO x VALUES ( 'x' , 'x' , 'x' ) ; SELECT x , x ( x ) FROM x GROUP BY x ; CREATE TABLE x ( x INT PRIMARY KEY , x INT UNIQUE , x INT , x INT , x INT ) ; CREATE TABLE x ( x TEXT , x INT ) ; CREATE VIEW x AS SELECT * FROM x x ; CREATE VIEW x AS SELECT * , x ( x ) AS x FROM x x ; CREATE OR REPLACE VIEW x AS SELECT * , 1 + 1 AS x FROM x x ; SELECT * FROM x ORDER BY 1 ; SELECT x ( NULL ) ; INSERT INTO x ( x ) VALUES ( 'x' ) , ( 'x' ) ; UPDATE x SET x = - x ; ALTER TABLE x ADD COLUMN x INTEGER ; CREATE TABLE x ( x CHAR ( 1 ) , x INT NOT NULL ) ; CREATE TABLE x ( x INT NOT NULL CHECK ( x = 1 ) , x INT NOT NULL CHECK ( x >= 1 AND x <= 1 ) ) ; CREATE TABLE x ( x INT NOT NULL CHECK ( x = 1 ) , x INT NOT NULL CHECK ( x >= 1 AND x < 1 ) ) ; INSERT INTO x ( x , x ) VALUES ( 1 , 'x' ) ; ALTER TABLE x ADD x INT NOT NULL ; SELECT x ( x ( x ) , FALSE ) FROM ( SELECT x AS x , x * 1 AS x FROM x ( 1 , 1 ) x ) x ; SELECT x ( x ( x ) , TRUE ) FROM ( SELECT x AS x , x * 1 AS x FROM x ( 1 , 1 ) x ) x ; SELECT x ( x ( x ) , FALSE ) FROM x ( 1 , 1 ) x ; INSERT INTO x VALUES ( 'x' , 'x' ) , ( 'x' , 'x' ) , ( 'x' , 'x' ) ; SELECT * FROM x ( 'x' ) x ; SELECT x ( 'x' , 'x' , 'x' ) IS NULL AS x ; SELECT x ( 1 , 1 ) ; SELECT x ( NULL , 1 ) ; SELECT x ( x , 1 ) FROM ( SELECT 1 AS x , 1 AS x ) x ; INSERT INTO x VALUES ( 1 , 'x' , 'x' ) ; SELECT x ( 'x' , x ( x , x ( 'x' , x , 'x' , x ) ) ) FROM x ; SELECT x ( x , x ) FROM x ; INSERT INTO x VALUES ( 1 , NULL , 'x' ) ; SELECT x , x , x ( x ) FROM x ORDER BY 1 , 1 ; SELECT * FROM x ( 1 ) ; SELECT x ( x ) AS x FROM x ; SELECT x ( x ) AS x FROM x WHERE x < 1 ; SELECT x ( 1.000000 ) , x ( 1.000000 ) ; SELECT x ( x , x ) , x ( x , x ) FROM x ; INSERT INTO x VALUES ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) ; SELECT x ( * ) , x ( x ) , x ( x , x ) , x ( x ) , x ( x , x ) , x ( x , x ) FROM x WHERE x IN ( 1 , 1 , 1 , 1 ) ; SELECT x ( * ) , x ( x ) , x ( x , x ) , x ( x ) , x ( x , x ) , x ( x , x ) FROM x ; SELECT x ( * ) , x ( x ) , x ( x , x ) , x ( x ) , x ( x , x ) , x ( x , x ) FROM x WHERE x IN ( 1 , 1 , 1 ) ; SELECT x ( * ) , x ( x ) , x ( x , x ) , x ( x ) , x ( x , x ) , x ( x , x ) FROM x WHERE x IN ( 1 , 1 ) ; SELECT x ( DISTINCT x ) AS x FROM x ; SELECT x ( x ) FROM x WHERE x < 1 ; SELECT x ( x ) FROM x WHERE x > 1 ; SELECT x ( x ) FROM x WHERE x = 1 ; SELECT x , ( SELECT x ( x ) FROM x WHERE x > x ) AS x FROM x ; SELECT DISTINCT x ( x ) FROM x ; SELECT x ( x ) FROM x ORDER BY 1 ; SELECT x ( x ) FROM x ORDER BY x ( x ) ; SELECT x ( x ) FROM x ORDER BY x ( x ) + 1 ; SELECT x ( x ) , x ( 1 , 1 ) AS x FROM x ORDER BY x DESC ; SELECT x ( 1 ) FROM x ; CREATE INDEX x ON x ( x DESC ) ; SELECT DISTINCT x ( x ) , x ( x ) FROM x ; SELECT x ( x ( x ) ) FROM x ; SELECT ( SELECT x ( x ( x ) ) FROM x ) FROM x ; SELECT x ( x , 'x' ) FROM x ; INSERT INTO x VALUES ( x ( 'x' , 'x' ) ) ; SELECT x ( x , NULL ) FROM x ; SELECT x ( x , x ( 'x' , 'x' ) ) FROM x ; SELECT x ( x ) FILTER ( WHERE x > 1 ) FROM x ; SELECT x ( 1 / x ) FILTER ( WHERE x > 1 ) FROM x ; INSERT INTO x ( x , x ) VALUES ( 1 , x ( 'x' , 1 ) ) ; SELECT x ( 1 , 1 , 1 ) ; SELECT x ( 1 , 1 , 1.000000 ) ; CREATE TABLE x ( x INT , x INT , x CHAR ( 1 ) , x CHAR ) ; INSERT INTO x VALUES ( 1 , 1 , 'x' , 'x' ) ; SELECT x ( * ) FROM x GROUP BY x ORDER BY x ; SELECT x FROM x ORDER BY x ; SELECT x ( * ) FROM x GROUP BY x ORDER BY x DESC ; SELECT x ( * ) FROM x ORDER BY 1 DESC ; SELECT x , x ( * ) FROM x GROUP BY 1 ORDER BY 1 ; SELECT x , x ( * ) FROM x GROUP BY 1 ; SELECT x , x FROM x ORDER BY x ; SELECT x / 1 , x / 1 FROM x ORDER BY x / 1 ; SELECT x / 1 , x / 1 FROM x GROUP BY x / 1 ORDER BY x / 1 ; SELECT x ( x ) FROM x GROUP BY x ORDER BY x ; SELECT x ( x ) FROM x GROUP BY x / 1 ORDER BY x / 1 ; SELECT x FROM x ORDER BY x ( x ) ; SELECT x ( x ) FROM x GROUP BY ( x + 1 ) / 1 ORDER BY ( x + 1 ) / 1 DESC ; CREATE TABLE x ( x INTEGER , x INTEGER , x TEXT ) ; CREATE TABLE x ( x INTEGER , x INTEGER ) ; INSERT INTO x VALUES ( NULL , NULL , 'x' ) ; INSERT INTO x VALUES ( NULL , 1 , 'x' ) ; INSERT INTO x VALUES ( NULL , NULL ) ; CREATE TABLE x ( x TEXT , x INTEGER ) ; SELECT x , x , x , x FROM x x JOIN x ON x = x WHERE x < x AND x IS NULL ; INSERT INTO x SELECT x , x ( 'x' , 1 ) FROM x ( 1 , 1 ) x ; INSERT INTO x VALUES ( 1 ) , ( 1 ) , ( 1 ) ; INSERT INTO x ( x , x ) VALUES ( 'x' , NULL ) ; INSERT INTO x VALUES ( 1 , TRUE , TRUE ) ; INSERT INTO x VALUES ( 1 , TRUE , FALSE ) ; INSERT INTO x VALUES ( 1 , FALSE , FALSE ) ; INSERT INTO x VALUES ( 1 , 1 , TRUE , TRUE ) ; INSERT INTO x VALUES ( 1 , 1 , TRUE , FALSE ) ; INSERT INTO x VALUES ( 1 , 1 , FALSE , FALSE ) ; INSERT INTO x VALUES ( 1 , 1 , TRUE ) ; INSERT INTO x VALUES ( 1 , 1 , FALSE ) ; SELECT * FROM x ( 1 , 1 ) ; INSERT INTO x VALUES ( 1 , 1 ) , ( 1 , NULL ) ; INSERT INTO x VALUES ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) ; SELECT * , ( SELECT x FROM ( SELECT x AS x ) x , ( SELECT x AS x ) x ) FROM x ; SELECT x , x FROM x x , ( SELECT x AS x ) x ; INSERT INTO x VALUES ( 1 , 1 , 'x' ) , ( 1 , 1 , 'x' ) ; CREATE TABLE x ( x INT , x INT , x VARCHAR ) ; INSERT INTO x SELECT x / 1 , x % 1 , x FROM x ( 1 , 1 ) x ; INSERT INTO x SELECT x / 1 , x % 1 FROM x ( 1 , 1 ) x ; CREATE TABLE x AS SELECT x , x FROM x ; SELECT * FROM x ( NULL ) ; SELECT x , x , x , x FROM x ( 'x' ) ; SELECT * FROM x ( 'x' ) ; CREATE VIEW x AS SELECT x , x , x , 1 * x AS x FROM x ; CREATE OR REPLACE VIEW x AS SELECT * FROM x WHERE x > 1 ; CREATE OR REPLACE VIEW x AS SELECT x , x FROM x WHERE x > 1 ORDER BY x DESC ; CREATE OR REPLACE VIEW x AS SELECT 1 , * FROM x ; CREATE OR REPLACE VIEW x AS SELECT x , x , 1 AS x FROM x ; CREATE TEMPORARY TABLE x ( x INT , x INT ) ; CREATE VIEW x AS SELECT * FROM x WHERE x IN ( SELECT x FROM x ) ; CREATE VIEW x AS SELECT * FROM x WHERE EXISTS ( SELECT 1 FROM x ) ; CREATE VIEW x AS SELECT * FROM x WHERE NOT EXISTS ( SELECT 1 FROM x ) ; CREATE VIEW x AS SELECT * FROM x WHERE EXISTS ( SELECT 1 ) ; CREATE VIEW x AS SELECT TRUE FROM x ; SELECT x FROM x WHERE x LIKE 'x' AND x = ( SELECT x FROM x WHERE x = 'x' ) ORDER BY x ; SELECT x FROM x WHERE x LIKE 'x' AND x IN ( SELECT x FROM x WHERE x LIKE 'x' ) ORDER BY x ; SELECT x ( * ) FROM x WHERE x = 'x' AND x IN ( SELECT x FROM x WHERE x = 'x' ) ; SELECT x ( * ) FROM x WHERE x LIKE 'x' AND x IN ( SELECT x FROM x WHERE x LIKE 'x' ) ; CREATE VIEW x AS SELECT * FROM x WHERE x = 1 ; CREATE OR REPLACE VIEW x AS SELECT * FROM x WHERE x = 1 ; CREATE VIEW x AS SELECT * FROM x NATURAL JOIN x ; CREATE VIEW x AS SELECT * FROM ( x NATURAL JOIN x ) x ; CREATE VIEW x AS SELECT * FROM x JOIN x USING ( x , x ) JOIN x USING ( x ) ; CREATE VIEW x AS SELECT * FROM ( x JOIN x USING ( x , x ) JOIN x USING ( x ) ) x ; SELECT x ( 'x' , TRUE ) ; CREATE VIEW x AS SELECT x , x , x FROM x JOIN x USING ( x ) ; CREATE VIEW x AS SELECT x , x , x , x FROM ( x JOIN x USING ( x ) ) JOIN x USING ( x ) ; CREATE TABLE x ( x TEXT , x TEXT , x TEXT , x TEXT ) ; INSERT INTO x VALUES ( 'x' , 'x' , 'x' , 'x' ) ; SELECT x , x FROM x ; SELECT x ( x ( 'x' ) , x ( x x , 'x' ) , x ( 'x' ) ) ; SELECT x ( NULL , NULL ) ; SELECT x ( x x , x ( 1 AS x , 'x' AS x ) , 'x' ) ; SELECT x ( x x , x ( 'x' ) ) ; SELECT x ( x x , x ( x x , 'x' ) ) ; SELECT x ( x x , x ( x , x , x AS x ) ) FROM x ; SELECT x ( x x , x ( 1 AS x , 1 AS x , 1 AS x ) ) ; SELECT x ( x x , 1 ) ; SELECT x ( x x , ARRAY [ 1 , 1 , 1 ] ) ; SELECT x ( x x , x ( TRUE AS x ) ) ; SELECT x ( x x ) ; SELECT x ( x x , 'x' ) ; SELECT x ( x x , NULL ) ; SELECT x ( x x , x ( x ( x x , x ) ) ) FROM x ; CREATE VIEW x AS SELECT x ( 'x' ) ; CREATE VIEW x AS SELECT x ( 'x' , 'x' ) ; CREATE VIEW x AS SELECT x ( x x , x ( x , x , x AS x ) ) FROM x ; CREATE VIEW x AS SELECT x ( x x , 'x' ) ; SELECT x ( 'x' , x ) FROM x ; SELECT x ( NULL , NULL ) IS NULL FROM x ; SELECT x ( 'x' , 'x' , ARRAY [ ARRAY [ 'x' , 'x' ] ] ) ; SELECT x ( x ) FROM x WHERE x ( 'x' , x ) ; SELECT x ( x ) FROM x WHERE x ( 'x' , x , ARRAY [ ARRAY [ 'x' , 'x' ] ] ) ; INSERT INTO x VALUES ( 1 , 'x' , 1 , 1 ) ; UPDATE x SET x = x + 1 WHERE x = 'x' ; UPDATE x SET x = NULL WHERE x > 1 ; CREATE TEMPORARY TABLE x ( x INTEGER ) ; INSERT INTO x ( x , x , x ) VALUES ( 'x' , 1 , 1 ) ; SELECT x ( * ) >= 1 AS x FROM x ; SELECT x ( * ) > 1 AS x FROM x ; SELECT x ( * ) = 1 AS x FROM x ; SELECT x , x FROM x WHERE x LIKE 'x' ; SELECT x ( DISTINCT x ) >= 1 AS x FROM x ; SELECT x ( 'x' , ( SELECT x FROM x WHERE x = 'x' ) , 'x' ) ; SELECT x ( ( SELECT x FROM x WHERE x = 'x' ) , ( SELECT x FROM x WHERE x = 'x' ) , 'x' ) ; SELECT x ( ( SELECT x FROM x WHERE x = 'x' ) , 'x' ) ; SELECT x ( ( SELECT x FROM x WHERE x = 'x' ) , 'x' , 'x' ) ; ALTER TABLE x ADD COLUMN x INTEGER NOT NULL ; ALTER TABLE x ADD x CHAR ; INSERT INTO x VALUES ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( NULL ) , ( NULL ) , ( 1 ) ; SELECT * FROM x ORDER BY x DESC ; SELECT * FROM x ORDER BY x DESC NULLS LAST ; SELECT * FROM x ORDER BY x NULLS FIRST ; SELECT * FROM x WHERE x = 1 AND x = 'x' ; SELECT x FROM x WHERE x = 1 AND x = 'x' ; SELECT * FROM x WHERE x = 1 AND x < 'x' ; SELECT x FROM x WHERE x = 1 AND x < 'x' ; SELECT x , x FROM x WHERE ( x = 1 OR x = 1 ) AND x < 'x' ; SELECT x , x FROM x WHERE ( x = 1 AND x < 'x' ) OR x = 1 ; SELECT 1 AS x ORDER BY x ; SELECT x ( 1 ) ORDER BY 1 ; SELECT x , x , x , x , x FROM x ORDER BY 1 ; SELECT x , x , x , x , x FROM x ; SELECT x FROM x ORDER BY 1 ; INSERT INTO x VALUES ( 1 , 'x' ) , ( 1 , 'x' ) , ( 1 , 'x' ) ; SELECT x FROM x WHERE x = 'x' ; INSERT INTO x SELECT x , x % 1 , x ( x , 'x' ) FROM x ( 1 , 1 ) x WHERE x % 1 = 1 ; INSERT INTO x SELECT x % 1 , x , x ( x , 'x' ) FROM x ( 1 , 1 ) x WHERE x % 1 = 1 ; INSERT INTO x SELECT x , x , x % 1 FROM x ( 1 , 1 , 1 ) x ; CREATE INDEX x ON x ( ( ( x + x ) / 1 ) ) ; INSERT INTO x SELECT x , x , x ( x / 1 , 'x' ) FROM x ( 1 , 1 , 1 ) x ; INSERT INTO x SELECT x , x % 1 , x ( x % 1 , 'x' ) FROM x ( 1 , 1 , 1 ) x ; INSERT INTO x SELECT x % 1 , x , x ( x % 1 , 'x' ) FROM x ( 1 , 1 , 1 ) x ; INSERT INTO x SELECT x , x , x ( x , 'x' ) FROM x ( 1 , 1 , 1 ) x ; UPDATE x SET x = x + 1 ; UPDATE x SET x = x ( x ) ; CREATE VIEW x AS SELECT * FROM x WHERE x > 1 ; CREATE VIEW x AS SELECT x AS x , x AS x FROM x WHERE x > 1 ; CREATE VIEW x AS SELECT x AS x , x AS x FROM x WHERE x < 1 ; CREATE VIEW x AS SELECT x AS x , x AS x FROM x ; CREATE TABLE x ( x INT , x TEXT , x FLOAT ) ; INSERT INTO x VALUES ( 1 , 'x' , 1.000000 ) ; CREATE VIEW x AS SELECT x AS x , x AS x , x AS x FROM x ; INSERT INTO x VALUES ( 'x' , 1.000000 , 1 ) ; CREATE VIEW x AS SELECT * FROM x ORDER BY x + x ; INSERT INTO x VALUES ( 1 , ARRAY [ 1 ] ) , ( 1 , ARRAY [ 1 ] ) ; CREATE TABLE x ( x FLOAT ) ; CREATE VIEW x AS SELECT x , x ( x ) x , x , x ( x ) x FROM x WHERE x != 1 ORDER BY x ( x ) ; INSERT INTO x SELECT * FROM x ( 1 , 1 ) ; SELECT * FROM x x ORDER BY x ; CREATE VIEW x AS SELECT * FROM x WHERE x < x WITH LOCAL CHECK OPTION ; CREATE VIEW x AS SELECT * FROM x WITH CHECK OPTION ; CREATE VIEW x AS SELECT * FROM x WHERE x = x ( x ) WITH CHECK OPTION ; CREATE VIEW x AS SELECT * FROM x WHERE x < x WITH CHECK OPTION ; CREATE VIEW x AS SELECT x FROM x WHERE x < x ; CREATE VIEW x AS SELECT * FROM x WHERE x > 1 WITH LOCAL CHECK OPTION ; CREATE VIEW x AS SELECT x , 1 AS x FROM x ; CREATE VIEW x AS SELECT * FROM x WHERE x > x WITH LOCAL CHECK OPTION ; CREATE VIEW x AS SELECT x FROM x WHERE x = 'x' ; SELECT * FROM x WHERE x ( x ) ; UPDATE x SET x = x WHERE x ( x ) ; CREATE TABLE x ( x INT PRIMARY KEY , x TEXT , x BOOLEAN ) ; INSERT INTO x VALUES ( 1 , 'x' , FALSE ) , ( 1 , 'x' , TRUE ) ; CREATE TABLE x ( x INT , x FLOAT , x TEXT ) ; UPDATE x SET x = 1 WHERE x ( x ) AND x ( x ) AND x < 1 AND x != 1 ; UPDATE x SET x = x + 1 WHERE x ( x ) AND x ( x ) AND x = 1 ; CREATE VIEW x AS SELECT x FROM x WHERE EXISTS ( SELECT 1 FROM x JOIN x ON x = x ) ; CREATE OR REPLACE VIEW x AS SELECT * FROM x WHERE x > 1 WITH CHECK OPTION ; CREATE VIEW x AS SELECT * FROM x WHERE x = 1 WITH CHECK OPTION ; CREATE TABLE x ( x TEXT , x INT , x INT ) ; INSERT INTO x VALUES ( 1 , 'x' ) , ( 1 , 'x' ) ; CREATE TABLE x ( x TEXT UNIQUE , x FLOAT ) ; CREATE TABLE x ( x INT UNIQUE , x TEXT ) ; CREATE TABLE x ( x INT UNIQUE , x TEXT , x FLOAT ) ; CREATE VIEW x AS SELECT x , x , x FROM x ; SELECT * FROM x ORDER BY x , x NULLS LAST ; INSERT INTO x ( x , x ) VALUES ( x ( 'x' ) , 'x' ) ; SELECT 'x' AS x , x AS x , x AS x FROM x ; SELECT 'x' AS x , x AS x , x ( x ) , x AS x , x ( x ) FROM x ; SELECT 'x' AS x , x AS x , x AS x FROM x WHERE x = x ; SELECT x ( x ) AS x , x ( x ) AS x FROM x ; SELECT x ( x , x ) FROM x WHERE x ( x , x ) ; SELECT x FROM x ORDER BY x ASC ; SELECT x FROM x ORDER BY x DESC ; SELECT x ( * ) FROM x WHERE x = 'x' ; SELECT x ( * ) FROM x WHERE x < 'x' ; SELECT x ( * ) FROM x WHERE x <= 'x' ; SELECT x ( * ) FROM x WHERE x > 'x' ; SELECT x ( * ) FROM x WHERE x >= 'x' ; SELECT x ( * ) FROM x WHERE x = 'x' AND x LIKE 'x' ; INSERT INTO x ( x ) VALUES ( x ( ) ) ; SELECT x ( DISTINCT x ) FROM x ; SELECT x , x , x ( x , x ) , x ( x ) , x ( * ) , x ( x ) FROM x GROUP BY x ( x , x ) ORDER BY x , x ; SELECT x , x , x ( x , x ) , x ( x ) , x ( * ) , x ( x ) FROM x GROUP BY x ( x , x ) ORDER BY x DESC , x ; SELECT x , x , x ( x , x ) , x ( x ) , x ( * ) , x ( x ) FROM x GROUP BY x ( x , x ) ORDER BY x ( x , 1 ) + x ( x , 1 ) ; SELECT x , x , x ( x ) , x ( x ( x ) ) OVER ( ORDER BY x , x ) AS x FROM x GROUP BY x ( x , x ) ORDER BY x , x , x ; SELECT x AS x , x AS x FROM x ( 1 , 1 ) x GROUP BY x , x ( x ) ; CREATE VIEW x AS SELECT x , x , x ( x , x ) , x ( x ) , x ( * ) , x ( x ) FROM x GROUP BY x ( ( x , x , x ) , ( x , x ) ) ; SELECT ( SELECT x ( x , x ) FROM x ) FROM x GROUP BY x , x ; SELECT x , x ( * ) FROM x GROUP BY x ( x ) ORDER BY x ; SELECT x ( * ) FROM x GROUP BY x ( x , x ) ; SELECT x , x , x ( x , x ) , x ( x ) , x ( * ) , x ( x ) FROM x GROUP BY x ( x , x ) ORDER BY 1 , 1 , 1 ; INSERT INTO x SELECT x % 1 , x % 1 , x ( x % 1 , 'x' ) , x % 1 FROM x ( 1 , 1 ) x ; SELECT x , x ( x ) , x ( x ) , x ( * ) , x ( x ) , x ( x ) FROM x GROUP BY x HAVING x ( x ) < 1 ORDER BY 1 , 1 , 1 ; SELECT x , x ( x ) FROM x WHERE 1 = 1 GROUP BY x ; SELECT x , x ( x ) FROM x WHERE x = 'x' GROUP BY x ; SELECT x , x ( x ) , x ( x ) , x ( * ) FROM x GROUP BY 1 HAVING x ( x ) < 1 ORDER BY 1 , 1 , 1 ; SELECT x FROM x GROUP BY x ORDER BY 1 ; SELECT x FROM x WHERE x < 1 GROUP BY x ORDER BY 1 ; INSERT INTO x SELECT x % 1 , x % 1 FROM x ( 1 , 1 , 1 ) x ; INSERT INTO x SELECT x % 1 , x % 1 , x % 1 FROM x ( 1 , 1 ) x ; SELECT x , x ( x ) , x ( x ) , x ( * ) FROM x GROUP BY x HAVING x ( x ) < 1 ORDER BY 1 , 1 , 1 ; SELECT x , x ( x ) , x ( x ) , x ( * ) FROM x GROUP BY x , ( x + x ) / 1 HAVING x ( x ) < 1 ORDER BY 1 , 1 , 1 ; SELECT x , x , x ( x ) , x ( x ) , x ( * ) FROM x GROUP BY ( x + x ) / 1 , 1 , 1 HAVING x ( x ) = 1 AND x ( x ) > 1 ORDER BY 1 , 1 , 1 ; INSERT INTO x SELECT x % 1 , x % 1 , x ( x % 1 , 'x' ) FROM x ( 1 , 1 ) x ; SELECT x , x ( x ) , x ( DISTINCT x ) , x ( * ) FROM x GROUP BY x HAVING x ( x ) < 1 ORDER BY 1 , 1 , 1 ; SELECT x , x ( x ) , x ( * ) FROM x GROUP BY x HAVING x ( x ) < 1 ORDER BY 1 , 1 , 1 ; SELECT x , x ( x ) , x ( * ) FROM x GROUP BY x , x , x HAVING x ( x ) > 1 ORDER BY 1 , 1 , 1 ; INSERT INTO x SELECT x % 1 , x % 1 FROM x ( 1 , 1 ) x ; INSERT INTO x SELECT x , 1 * x , 1 * x , x ( 'x' ) FROM x ( 1 , 1 ) AS x ; INSERT INTO x SELECT 1 , 1 , 1 * x , x ( 'x' ) FROM x ( 1 , 1 ) AS x ; INSERT INTO x SELECT 1 , 1 * x , 1 * x , x ( 'x' ) FROM x ( 1 , 1 ) AS x ; INSERT INTO x SELECT 1 , NULL , 1 * x , x ( 'x' ) FROM x ( 1 , 1 ) AS x ; INSERT INTO x SELECT x , 1 * x , NULL , NULL FROM x ( 1 , 1 ) AS x ; SELECT * FROM x WHERE ( x , x , x ) < ( 1 , 1 , 1 ) ; SELECT * FROM x WHERE ( x , x , x ) < ( 1 , 1 , 1 ) LIMIT 1 ; SELECT x FROM x WHERE x = 'x' ORDER BY x ; CREATE INDEX x ON x ( x , x ) ; SELECT x ( * ) FROM x WHERE x IS NULL ; SELECT * FROM x WHERE x = 'x' ORDER BY x ; INSERT INTO x SELECT ARRAY [ 1 , x % 1 , x ] FROM x ( 1 , 1 ) x ; CREATE UNIQUE INDEX x ON x ( x ( x , x ) ) ; CREATE UNIQUE INDEX x ON x ( ( x + 1 ) , x ) ; CREATE TABLE x ( x INT , x VARCHAR ( 1 ) , x CHAR ) ; CREATE UNIQUE INDEX x ON x ( x , x ) ; INSERT INTO x ( x , x ) VALUES ( NULL , 1 ) , ( NULL , NULL ) ; SELECT x ( * ) FROM x WHERE x IS NULL AND x IS NULL ; SELECT x ( * ) FROM x WHERE x IS NOT NULL ; SELECT x ( * ) FROM x WHERE x IS NULL AND x IS NOT NULL ; SELECT x ( * ) FROM x WHERE x IS NOT NULL AND x > 1 ; SELECT x ( * ) FROM x WHERE x IS NULL AND x > 1 ; CREATE UNIQUE INDEX x ON x ( x DESC , x ) ; SELECT x , x FROM x ORDER BY x LIMIT 1 ; SELECT x , x FROM x WHERE x >= 1 ORDER BY x LIMIT 1 ; SELECT x , x FROM x ORDER BY x DESC LIMIT 1 ; SELECT x , x FROM x WHERE x >= 1 ORDER BY x DESC LIMIT 1 ; SELECT x , x FROM x WHERE x < 1 ORDER BY x DESC LIMIT 1 ; SELECT * FROM x WHERE x = 1 AND ( x = 1 OR x = 1 OR x = 1 ) ; SELECT x ( * ) FROM x WHERE x = 1 AND ( x = 1 OR x = 1 ) ; CREATE INDEX x ON x ( x , x , x ) ; SELECT x , x , x FROM x ( 'x' ) ORDER BY x , x ; CREATE TABLE x ( x INT , x BOOLEAN ) ; INSERT INTO x ( x , x ) VALUES ( 1 , FALSE ) , ( 1 , TRUE ) , ( 1 , FALSE ) ; INSERT INTO x SELECT x ( 1 , 1 ) ; INSERT INTO x SELECT x ( 1 , 1 ) , 'x' ; CREATE TABLE x AS SELECT x , x , x , x FROM x WHERE x = ( SELECT x FROM x WHERE x = 'x' ) ; SELECT x , x , x FROM x WHERE x = 'x' ORDER BY 1 , 1 ; INSERT INTO x VALUES ( 'x' , NULL ) ; SELECT x , x FROM x WHERE x = 1 ; INSERT INTO x VALUES ( 'x' ) , ( 'x' ) , ( 'x' ) , ( 'x' ) ; SELECT * FROM x WHERE x LIKE 'x' ; CREATE TABLE x ( x BIGINT , x BIGINT , x BIGINT , x BIGINT ) ; INSERT INTO x SELECT x , 1 , 1 , 1 FROM x ( 1 , 1 ) x ; SELECT * FROM x WHERE x = 'x' ; CREATE TABLE x ( x INT PRIMARY KEY , x TEXT NOT NULL , x TEXT , x TEXT ) ; INSERT INTO x VALUES ( 1 , 'x' , 'x' , 'x' ) , ( 1 , 'x' , 'x' , 'x' ) , ( 1 , 'x' , 'x' , 'x' ) ; INSERT INTO x VALUES ( 1 , 'x' , 1 ) , ( 1 , 'x' , 1 ) , ( 1 , 'x' , 1 ) ; INSERT INTO x VALUES ( 1 , 'x' , 1 ) , ( 1 , 'x' , 1 ) , ( 1 , 'x' , 1 ) , ( 1 , 'x' , 1 ) , ( 1 , 'x' , 1 ) , ( 1 , 'x' , 1 ) , ( 1 , 'x' , 1 ) , ( 1 , 'x' , 1 ) , ( 1 , 'x' , 1 ) ; CREATE VIEW x AS SELECT * FROM x WHERE x = x ; CREATE VIEW x AS SELECT * FROM x x NATURAL JOIN x x ; SELECT * FROM x x WHERE x ( 'x' ) AND x ( x ) ; SELECT * FROM x WHERE x ( x ) AND x >= 'x' AND x < 'x' ; SELECT x ( 1 ) , x ( 1 ) , x ( 1 , 1 ) , x ( 1 , 1 ) ; SELECT x , x , x , x , x , x FROM x WHERE x = 'x' ORDER BY x , x , x ; SELECT x ( 1 ) , x ( 1 ) , x ( 1 ) , x ( 1 ) , x ( 1 , 1 ) , x ( 1 , 1 ) , x ( 1 , 1 ) , x ( 1 , 1 ) ; INSERT INTO x ( x , x , x ) VALUES ( 1 , 1 ) ; INSERT INTO x ( x ) VALUES ( 1 , 1 ) ; INSERT INTO x VALUES ( 1 , 1 , x ( 'x' , 1 ) ) ; CREATE TABLE x ( x BIGINT , x TEXT ) ; INSERT INTO x VALUES ( x ( 1 , 1 ) ) ; CREATE TABLE x ( x INT NOT NULL , x INT NOT NULL ) ; CREATE TABLE x ( x INT NOT NULL , x TEXT , x INT NOT NULL ) ; INSERT INTO x ( x , x , x ) VALUES ( 1 , 1 , 'x' ) ; CREATE TABLE x ( x INT , x INT , x TEXT , x INT ) ; INSERT INTO x VALUES ( 1 , 1 , 'x' , 1 ) ; INSERT INTO x VALUES ( NULL , NULL , NULL ) ; CREATE TABLE x ( x TEXT , x TEXT , x INT ) ; INSERT INTO x VALUES ( 'x' , 1 ) , ( 'x' , 1 ) , ( 'x' , 1 ) , ( 'x' , 1 ) , ( 'x' , 1 ) , ( 'x' , 1 ) , ( 'x' , 1 ) , ( 'x' , 1 ) , ( 'x' , 1 ) , ( 'x' , 1 ) , ( 'x' , 1 ) ; CREATE TABLE x AS SELECT x ( x , x ) AS x FROM x ; INSERT INTO x VALUES ( NULL ) , ( NULL ) , ( NULL ) ; INSERT INTO x SELECT 'x' FROM x ( 1 , 1 ) ; INSERT INTO x ( x , x ) VALUES ( 1 , 1.000000 ) ; INSERT INTO x VALUES ( 1 , NULL , 1.000000 ) ; SELECT 'x' AS x , x ( 'x' ) ; INSERT INTO x VALUES ( 'x' , 'x' , FALSE , 1 ) ; INSERT INTO x VALUES ( 'x' , 'x' , TRUE , 1 ) ; INSERT INTO x ( x , x , x , x ) VALUES ( 1 , 'x' , 1 , 1 ) ; INSERT INTO x VALUES ( NULL , 'x' , NULL ) ; INSERT INTO x VALUES ( 1 , 'x' , NULL ) ; INSERT INTO x ( x ) SELECT x FROM x ; INSERT INTO x SELECT * FROM x WHERE x = 'x' ; INSERT INTO x ( x , x ) SELECT x , 1 FROM x WHERE x = 'x' ; UPDATE x SET x = NULL WHERE x = 1 ; UPDATE x SET x = - x , x = - x ; UPDATE x SET x = x , x = x ; UPDATE x SET x = 1 WHERE x = 1 AND x = 'x' ; CREATE TABLE x ( x INT CONSTRAINT the_constraint CHECK ( x > 1 ) ) ; INSERT INTO x ( x ) SELECT x ( 1 ) ; SELECT x ( x , 1 , 1 ) FROM x ; SELECT x ( x , 1 ) FROM x ; INSERT INTO x ( x ) SELECT x ( 'x' ) ; INSERT INTO x SELECT ( x % 1 ) , ( x % 1 ) , 'x' FROM x ( 1 , 1 ) x ; SELECT x ( * ) FROM x WHERE x = 1 AND x = 1 ; SELECT x ( * ) FROM x WHERE x = 1 OR x = 1 ; INSERT INTO x VALUES ( 'x' , 'x' ) , ( 'x' , 'x' ) ; CREATE TABLE x ( x TEXT , x TEXT , x TEXT ) ; CREATE TABLE x ( x INTEGER , x TEXT ) ; SELECT 'x' AS x , x FROM x WHERE x ( x ) < 1 ; SELECT 'x' AS x , x FROM x WHERE x ( x ) >= 1 ; INSERT INTO x SELECT x , 1 * x , 1 * x , x ( x ( x , x + 1 ) , x ( 1 * x , 1 * x + 1 ) ) FROM x ( 1 , 1 ) AS x ; INSERT INTO x SELECT x , 1 * x , 1 * x , x ( x ( 1 * x , 1 * x ) , x ( 1 * x + 1 , 1 * x + 1 ) ) FROM x ( 1 , 1 ) AS x ; SELECT 1 AS x ; INSERT INTO x ( x , x , x ) VALUES ( 'x' , TRUE , 1 ) ; INSERT INTO x ( x , x , x ) VALUES ( 'x' , FALSE , 1 ) ; INSERT INTO x ( x , x , x ) VALUES ( 'x' , NULL , 1 ) ; INSERT INTO x VALUES ( FALSE , TRUE , NULL ) ; SELECT x AND x AND x FROM x ; SELECT x OR x OR x FROM x ; SELECT 'x' AS x , x ( x ) , x ( x ) FROM x ; INSERT INTO x SELECT x ( x ( x , x ) , x ( x * 1 , x * 1 ) ) FROM x ( 1 , 1 ) AS x ; INSERT INTO x VALUES ( NULL ) , ( 'x' ) , ( 'x' ) , ( 'x' ) , ( 'x' ) , ( 'x' ) ; INSERT INTO x SELECT ( x - 1 ) * 1 + x , x ( x ( x * 1 , x * 1 ) , x ( x * 1 + 1 , x * 1 + 1 ) ) FROM x ( 1 , 1 ) x , x ( 1 , 1 ) x ; INSERT INTO x SELECT x , 'x' FROM x ( 1 , 1 ) AS x ; SELECT x ( 'x' , 'x' ) IS NULL ; SELECT x , x FROM x WHERE NOT x ( x ) ; SELECT x , * FROM x ; SELECT x , * FROM x WHERE x = 'x' ; SELECT x , * FROM x WHERE 'x' = x ; SELECT x , * FROM x WHERE x = 'x' OR 'x' = x ; SELECT x FROM x WHERE x < 1 ORDER BY x ; SELECT 1 ; SELECT 1 / 1 ; SELECT 1 + 1 AS x ; SELECT 1 - 1 AS x ; SELECT 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 AS x ; SELECT 1 + 1 / 1 AS x ; SELECT ( 1 + 1 ) / 1 AS x ; SELECT x FROM x WHERE x LIKE 'x' ; INSERT INTO x SELECT x , 1 , x ( x ( x ) ) FROM x ; INSERT INTO x SELECT x , 1 , x ( x ( x ) ) FROM x WHERE x != 'x' ; CREATE TABLE x ( x CHAR ( 1 ) , x TEXT ) ; CREATE TABLE x ( x CHAR ( 1 ) , x CHAR ( 1 ) , x CHAR ( 1 ) , x CHAR ( 1 ) ) ; CREATE TABLE x ( x CHAR ( 1 ) , x TEXT , x CHAR ( 1 ) , x CHAR ( 1 ) ) ; CREATE TABLE x ( x CHAR ( 1 ) , x CHAR ( 1 ) , x TEXT , x CHAR ( 1 ) ) ; CREATE TABLE x ( x CHAR ( 1 ) , x TEXT , x INTEGER ) ; CREATE TABLE x ( x CHAR ( 1 ) , x CHAR ( 1 ) , x INTEGER , x CHAR ( 1 ) ) ; CREATE TABLE x ( x CHAR ( 1 ) , x TEXT , x TEXT , x CHAR ( 1 ) ) ; CREATE TABLE x ( x CHAR ( 1 ) , x TEXT , x CHAR ( 1 ) ) ; INSERT INTO x VALUES ( 'x' , 'x' , 1 ) ; INSERT INTO x VALUES ( 'x' , 'x' , 1 , 'x' ) ; INSERT INTO x ( x ) VALUES ( x ) ; SELECT x ( 1 , 'x' ) ; CREATE TABLE x ( x INT , x INT , x INT , x INT ) ; INSERT INTO x VALUES ( 1 , 1 , 1 , 1 ) , ( 1 , 1 , 1 , 1 ) ; SELECT x ( 1 , 1 , 1 , 1 , 1 ) ; SELECT x ( 1.000000 , 1.000000 , 1.000000 ) ; SELECT x ( 1.000000 , 1 , 1 ) ; SELECT * FROM x ( FALSE ) ; SELECT * FROM x ( TRUE ) ; SELECT x ( ARRAY [ 1 , 1 , 1 , 1 ] ) ; SELECT x ( x ( 1 ) ) ; SELECT x ( x ) , x FROM x ( 1 ) x ; INSERT INTO x ( x ) SELECT x ( 1 , 1 ) ; INSERT INTO x ( x , x ) SELECT x , x / 1 + 1 AS x FROM x ( 1 , 1 ) x ; INSERT INTO x ( x , x , x ) SELECT 1 , x , 1 FROM x ; SELECT * FROM x ( 1 ) AS x ; SELECT x ( 1 , 1 , 1 , NULL ) ; CREATE TABLE x ( x INT UNIQUE ) ; UPDATE x x SET x = 'x' WHERE x = 'x' ; UPDATE x SET x = 'x' WHERE x LIKE 'x' ; UPDATE x SET x = x + 1 WHERE FALSE ; UPDATE x SET x = x + 1 WHERE x IN ( SELECT x FROM x ) ; INSERT INTO x VALUES ( 1 , 'x' ) , ( 1 , 'x' ) , ( 1 , 'x' ) , ( 1 , 'x' ) ; SELECT * FROM x ORDER BY 1 , 1 ; INSERT INTO x SELECT x , x FROM x ( 1 , 1 ) x ; SELECT * FROM x JOIN ( SELECT x FROM x LIMIT 1 ) x ON x = x ; CREATE INDEX x ON x ( ( 1 - x ) ) ; SELECT * FROM x ORDER BY 1 - x ; SELECT x ( 1 - x ) FROM x ; SELECT x ( x ) , x ( x ) FROM x WHERE x = 'x' ; CREATE INDEX x ON x ( x , x ( x ) , x ) ; SELECT x ( 'x' , 'x' , 'x' , 'x' ) ; SELECT x , x ( x ) FROM x ( 'x' , 'x' ) AS x ; SELECT x , x ( x ) FROM x ( 'x' , 'x' , 'x' ) AS x ; SELECT 'x' LIKE 'x' AS x , 'x' LIKE 'x' AS x , 'x' LIKE 'x' AS x ; SELECT 'x' LIKE 'x' AS x ; CREATE TABLE x ( x TEXT PRIMARY KEY , x INT ) ; SELECT x ( x ) = 1 AS x FROM x WHERE x = 'x' ; INSERT INTO x VALUES ( x ( x ( 'x' , 1 ) , 'x' ) ) ; CREATE TABLE x ( x CHAR ( 1 ) ) ; SELECT 'x' AS x , 'x' AS x , 'x' AS x , 'x' AS x , 'x' AS x , 'x' AS x ; SELECT 1 AS x WHERE 1 IN ( SELECT 1 ) ; SELECT 1 AS x WHERE 1 NOT IN ( SELECT 1 ) ; SELECT * FROM ( SELECT 1 AS x ) x ; SELECT * FROM ( ( SELECT 1 AS x ) ) x ; SELECT ( SELECT ARRAY [ 1 , 1 , 1 ] ) [ 1 ] ; SELECT ( ( SELECT ARRAY [ 1 , 1 , 1 ] ) ) [ 1 ] ; SELECT ( ( ( SELECT ARRAY [ 1 , 1 , 1 ] ) ) ) [ 1 ] ; CREATE TABLE x ( x INTEGER , x INTEGER , x FLOAT ) ; INSERT INTO x VALUES ( 1 , 1 , NULL ) ; SELECT x , x ( x ( * ) ) / ( SELECT x ( * ) FROM x ) FROM x GROUP BY x ORDER BY x ; SELECT * , x ( x ) FROM ( SELECT 'x' AS x FROM x ( 1 , 1 ) ) x ORDER BY 1 ; SELECT x ( * ) FROM ( SELECT 1 FROM x x WHERE x IN ( SELECT x FROM x x ) ) x ; SELECT x ( * ) FROM ( SELECT 1 FROM x x WHERE x IN ( SELECT DISTINCT x FROM x x ) ) x ; SELECT * FROM x WHERE x IN ( SELECT x FROM ( SELECT DISTINCT x , x FROM x ) AS x ) ; SELECT * FROM x WHERE x IN ( SELECT x FROM ( SELECT x , x FROM x GROUP BY x , x ) AS x ) ; SELECT * FROM x WHERE x IN ( SELECT x FROM ( SELECT x , x FROM x UNION SELECT x , x FROM x ) AS x ) ; SELECT * FROM x WHERE x IN ( SELECT x FROM ( SELECT x FROM x GROUP BY x ) AS x ) ; SELECT * FROM x WHERE x IN ( SELECT x FROM ( SELECT x FROM x UNION SELECT x FROM x ) AS x ) ; CREATE TABLE x ( x INTEGER , x INTEGER , x BOOLEAN ) ; INSERT INTO x ( x , x , x ) VALUES ( 1 , 1 , ( SELECT x FROM x WHERE x = 'x' ) ) ; INSERT INTO x VALUES ( 1 ) , ( 1.000000 ) , ( 1 ) , ( 1 ) ; SELECT * FROM x WHERE x IN ( SELECT x FROM x ) ; SELECT ( SELECT x ) FROM x ; SELECT ( SELECT ( SELECT x ) ) FROM x ; SELECT x FROM ( SELECT x ( x ) FROM x GROUP BY x ORDER BY x ) x ; WITH x AS ( SELECT x ( x ) FROM x GROUP BY x ORDER BY x ) SELECT x FROM x ; SELECT * FROM x WHERE ( x , x ) NOT IN ( SELECT * FROM x ) ; INSERT INTO x VALUES ( NULL ) , ( 1 ) ; SELECT * FROM x WHERE x NOT IN ( SELECT x FROM x ) ; SELECT EXISTS ( SELECT * FROM x ) ; SELECT * FROM x WHERE ( CASE WHEN x IN ( SELECT x FROM x x ) THEN x ELSE NULL END ) IN ( SELECT x FROM x x ) ; SELECT * FROM x x WHERE ( x , x ) IN ( SELECT x , x ( 1 , 1 ) / 1 x FROM x x GROUP BY x ) ; SELECT * FROM ( SELECT DISTINCT x FROM x ) x WHERE x < 1 + x ( 'x' ) ORDER BY 1 ; SELECT * FROM ( SELECT 1 AS x , x ( ARRAY [ 1 , 1 , 1 , 1 , 1 , 1 ] ) AS x ) x WHERE x ( x , 1 ) ; SELECT * FROM ( SELECT 1 AS x , x ( ARRAY [ 1 , 1 , 1 , 1 , 1 , 1 ] ) AS x ) x WHERE x ( x , x ) ; CREATE TABLE x ( x INT PRIMARY KEY , x INT , x INT ) ; INSERT INTO x VALUES ( 1 , 1 , 1 ) , ( 1 , 1 , 1 ) , ( 1 , 1 , 1 ) , ( 1 , 1 , 1 ) , ( 1 , 1 , 1 ) , ( 1 , 1 , 1 ) , ( 1 , 1 , 1 ) , ( 1 , 1 , 1 ) ; SELECT * FROM ( SELECT x , x FROM x ORDER BY x , x ) AS x LIMIT 1 ; INSERT INTO x ( x , x , x , x , x , x ) VALUES ( 'x' , 1 , 1 , 1 , 1 , 1 ) , ( 'x' , 1 , 1 , 1 , 1 , 1 ) ; SELECT * FROM x ORDER BY x ASC ; SELECT x , x IN ( 1 , 1 ) AS x , x FROM x ; INSERT INTO x VALUES ( 1 , NULL ) , ( NULL , NULL ) ; SELECT x ( 'x' ) > 1 ; SELECT x ( 'x' ) = 1 ; INSERT INTO x SELECT 1 LIMIT 1 ; SELECT x , x , * FROM x ; CREATE TABLE IF NOT EXISTS x ( x INT PRIMARY KEY , x NUMERIC ) ; UPDATE x SET x = x + 1 WHERE x IN ( 1 , 1 ) ; SELECT x ( * ) FROM x WHERE x = 1 ; SELECT x , x , x , x , x , x FROM x WHERE x LIKE 'x' ORDER BY x ; INSERT INTO x ( x ) VALUES ( 'x' ) , ( 'x' ) , ( 'x' ) , ( 'x' ) , ( 'x' ) ; SELECT x FROM x x ORDER BY x ; INSERT INTO x VALUES ( NULL , NULL , 1 ) ; INSERT INTO x VALUES ( NULL , 1 , 1 ) ; INSERT INTO x VALUES ( 1 , NULL , 1 ) ; INSERT INTO x VALUES ( 1 , 1 , 1 , 'x' ) ; INSERT INTO x VALUES ( NULL , 1 , 1 , 1 ) ; INSERT INTO x VALUES ( 1 , NULL , 1 , 1 ) ; INSERT INTO x VALUES ( 1 , 1 , NULL , 'x' ) ; INSERT INTO x VALUES ( 1 , NULL , 1 , 'x' ) ; UPDATE x SET x = 1 WHERE x = 1 AND x = 1 ; UPDATE x SET x = 1 , x = 1 , x = 1 WHERE x = 1 ; CREATE TABLE x ( x NUMERIC PRIMARY KEY ) ; UPDATE x SET x = x * 1 ; UPDATE x SET x = x * 1 WHERE x < 1 ; CREATE TABLE x ( x INT NOT NULL , x INT ) ; INSERT INTO x VALUES ( 1 , 1 , NULL , NULL ) ; INSERT INTO x VALUES ( 1 , 1 , 1 , NULL ) ; UPDATE x SET x = x WHERE x = 1 ; INSERT INTO x ( x , x ) VALUES ( 1 , 1 ) , ( 1 , 1 ) ; INSERT INTO x VALUES ( 1 , 1 , 1 , 1 , 1 ) ; CREATE TABLE x ( x INT , x INT , x INT , x INT , x INT ) ; INSERT INTO x VALUES ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) ; INSERT INTO x SELECT 1 , x FROM x ( 1 , 1 ) x ; INSERT INTO x ( x , x ) SELECT 1 , x FROM x ( 1 , 1 ) x ; INSERT INTO x VALUES ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) ; INSERT INTO x VALUES ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) ; CREATE TABLE x ( x INT , x INT NOT NULL ) ; CREATE TABLE IF NOT EXISTS x ( x TEXT ) ; CREATE TABLE x AS SELECT * FROM x WHERE x = 'x' ; CREATE TABLE IF NOT EXISTS x AS SELECT * FROM x WHERE x = 'x' ; CREATE INDEX x ON x ( ( x = 1 ) ) ; SELECT x , x , x FROM x WHERE x NOT IN ( 'x' , 'x' ) ; SELECT x , x , x * 1 AS x FROM x ORDER BY x ; SELECT x , x FROM x WHERE x = 1 ORDER BY x ; WITH x AS ( SELECT * FROM x ) SELECT * FROM x ; INSERT INTO x ( x ) VALUES ( 1 ) , ( 1 ) , ( 1 ) , ( NULL ) ; INSERT INTO x ( x ) VALUES ( 'x' ) , ( 'x' ) , ( 'x' ) , ( NULL ) ; INSERT INTO x ( x ) VALUES ( 1 ) , ( 1 ) ; CREATE INDEX x ON x ( ( x * 1 ) ) ; SELECT * FROM x WHERE x * 1 = 1 ; SELECT * FROM x WHERE x = 1 AND x > 1 ; INSERT INTO x ( x ) VALUES ( 1 ) , ( 1 ) , ( 1 ) ; CREATE TABLE x ( x BIGINT ) ; CREATE VIEW x ( x , x ) AS SELECT * FROM x , x ; CREATE VIEW x AS SELECT ( SELECT x FROM x LIMIT 1 ) FROM x ; CREATE VIEW x AS SELECT * FROM x WHERE x IN ( SELECT * FROM x ) ; CREATE VIEW x AS SELECT * FROM ( SELECT * FROM x ) x ; CREATE OR REPLACE VIEW x AS SELECT * FROM x ; SELECT x = x ( ) ; SELECT x ; SELECT x ( * ) FROM x WHERE x BETWEEN 'x' AND 'x' ; SELECT x ( * ) FROM x WHERE x NOT BETWEEN 'x' AND 'x' ; SELECT 'x' ; SELECT x ( 'x' , 'x' , 1 ) ; SELECT x ( x ( 'x' , 'x' ) , 'x' ) ; SELECT x ( ARRAY [ 'x' , 'x' , 'x' , 'x' , 'x' ] ) ; SELECT x ( ARRAY [ 'x' , 'x' , 'x' , 'x' , NULL ] ) ; SELECT x ( ARRAY [ 'x' , 'x' , 'x' , 'x' ] ) ; CREATE TABLE x AS SELECT x ( x ) FROM x GROUP BY x ( x ) ; INSERT INTO x VALUES ( 'x' , 1 , 1 , 'x' ) , ( 'x' , 1 , 1 , 'x' ) , ( 'x' , 1 , 1 , 'x' ) , ( 'x' , 1 , 1 , 'x' ) , ( 'x' , 1 , 1 , 'x' ) , ( 'x' , 1 , 1 , 'x' ) , ( 'x' , 1 , 1 , 'x' ) , ( 'x' , 1 , 1 , 'x' ) , ( 'x' , 1 , 1 , 'x' ) , ( 'x' , 1 , 1 , 'x' ) ; SELECT x , x , x , x ( x ) OVER ( PARTITION BY x ) FROM x ORDER BY x , x ; SELECT x , x , x , x ( ) OVER ( PARTITION BY x ORDER BY x ) FROM x ; SELECT x , x , x , x ( x ) OVER w FROM x WINDOW x AS ( PARTITION BY x ) ; SELECT x , x , x , x ( ) OVER w FROM x WINDOW x AS ( PARTITION BY x ORDER BY x ) ORDER BY x ( ) OVER w ; SELECT x ( * ) OVER ( ) FROM x WHERE x < 1 ; SELECT x ( * ) OVER w FROM x WHERE x < 1 WINDOW x AS ( ) ; SELECT x FROM x WHERE FALSE WINDOW x AS ( PARTITION BY x ) ; SELECT x ( x ) OVER ( PARTITION BY x ORDER BY x ) AS x , x , x FROM x WHERE x < 1 ; SELECT x ( ) OVER ( ORDER BY x ) FROM x WHERE x < 1 ; SELECT x ( ) OVER ( PARTITION BY x ORDER BY x ) AS x , x , x FROM x WHERE x < 1 ; SELECT x ( ) OVER ( PARTITION BY x ORDER BY x ) , x , x FROM x WHERE x < 1 ; SELECT x ( 1 ) OVER ( ORDER BY x , x ) , x , x FROM x WHERE x < 1 ; SELECT x ( NULL ) OVER ( ORDER BY x , x ) , x , x FROM x LIMIT 1 ; SELECT x ( x ) OVER ( PARTITION BY x ORDER BY x ) , x , x FROM x WHERE x < 1 ; SELECT x ( x , x ) OVER ( PARTITION BY x ORDER BY x ) , x , x FROM x WHERE x < 1 ; SELECT x ( x , x , 1 ) OVER ( PARTITION BY x ORDER BY x ) , x , x FROM x WHERE x < 1 ; SELECT x ( x * 1 , 1 ) OVER ( PARTITION BY x ORDER BY x ) , x , x FROM x WHERE x < 1 ; SELECT x ( x * 1 , 1 , 1 ) OVER ( PARTITION BY x ORDER BY x ) , x , x FROM x WHERE x < 1 ; SELECT x ( x ) OVER ( ORDER BY x ) , x , x FROM x WHERE x < 1 ; SELECT x ( x ) OVER ( PARTITION BY x ) , x , x FROM ( SELECT * FROM x WHERE x < 1 ORDER BY x , x ) x ORDER BY x , x ; SELECT x ( x , x + 1 ) OVER ( PARTITION BY x ) , x , x FROM ( SELECT * FROM x WHERE x < 1 ORDER BY x , x ) x ; SELECT x ( * ) OVER ( PARTITION BY x ) , x FROM ( SELECT * FROM x WHERE x = 1 ) x WHERE x < 1 ; SELECT x ( x ) OVER ( PARTITION BY x ORDER BY x / 1 ) FROM x WHERE x < 1 ; SELECT x ( x ) , x ( ) OVER ( ORDER BY x ) , x ( x ( x ) ) OVER ( ORDER BY x DESC ) FROM x GROUP BY x ; SELECT x ( x ) OVER w1 , x ( * ) OVER w2FROM x WINDOW x AS ( ORDER BY x ) , x AS ( ORDER BY x ) ; SELECT x ( * ) OVER ( PARTITION BY x ) FROM ( SELECT * FROM x WHERE FALSE ) x ; SELECT x ( x ) OVER w , x ( ) OVER w FROM x WINDOW x AS ( PARTITION BY x ORDER BY x DESC ) ; SELECT x , x , x , x , x , x ( x ) OVER ( ORDER BY x ) , x ( x ) OVER ( ) FROM ( SELECT * , CASE WHEN x < 'x' THEN 1 - EXTRACT ( YEAR FROM x ) END * 1 AS x , CASE WHEN x ( x ) OVER ( PARTITION BY x ) < x THEN 1 END AS x FROM x ) x ; SELECT x ( x ( x ) ) OVER ( ) FROM x WHERE x = 1 ; SELECT x , x , x ( x ) OVER ( PARTITION BY x ORDER BY x ) , x ( x ) OVER ( PARTITION BY x ORDER BY x ) FROM ( SELECT DISTINCT x , x FROM x ) x ; SELECT x , x , x ( x ) OVER ( PARTITION BY x ORDER BY x RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) , x ( x ) OVER ( PARTITION BY x ORDER BY x RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM ( SELECT DISTINCT x , x FROM x ) x ; SELECT x , x , x ( x ) OVER ( PARTITION BY x ORDER BY x RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) , x ( x ) OVER ( PARTITION BY x ORDER BY x RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM ( SELECT DISTINCT x , x FROM x ) x ; SELECT x , x / 1 AS x , x ( x / 1 ) OVER ( PARTITION BY x ORDER BY x / 1 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) , x ( x / 1 ) OVER ( PARTITION BY x ORDER BY x / 1 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM ( SELECT DISTINCT x , x FROM x ) x ; SELECT x , x / 1 AS x , x ( x / 1 ) OVER ( PARTITION BY x ORDER BY x / 1 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) , x ( x / 1 ) OVER ( PARTITION BY x ORDER BY x / 1 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FROM ( SELECT DISTINCT x , x FROM x ) x ; SELECT x ( x ) OVER ( ORDER BY x RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) , x , x x WHERE x < 1 ; SELECT x ( x ) OVER ( ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) , x , x x WHERE x < 1 ; SELECT x ( x ) OVER ( ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING ) , x , x x WHERE x < 1 ; SELECT x ( x ) OVER ( ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING ) , x , x x WHERE x < 1 ; SELECT x ( x ) OVER ( ROWS BETWEEN 1 FOLLOWING AND 1 FOLLOWING ) , x , x x WHERE x < 1 ; SELECT x ( x ) OVER ( ROWS BETWEEN UNBOUNDED PRECEDING AND 1 FOLLOWING ) , x , x x WHERE x < 1 ; SELECT x ( x ) OVER ( x RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) , x , x x WHERE x < 1 WINDOW x AS ( ORDER BY x ) ; SELECT x ( x ) OVER w , x ( x , 1 ) OVER w AS x , x ( x ) OVER w , x , x x WHERE x < 1 WINDOW x AS ( ORDER BY x RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) ; SELECT x ( x ) OVER ( ORDER BY x ROWS ( SELECT x FROM x ORDER BY x LIMIT 1 ) + 1 PRECEDING ) , x x WHERE x < 1 ; SELECT x ( x ) OVER ( ORDER BY x RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING ) , x ( x ) OVER ( ORDER BY x RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING ) , x ( x , 1 ) OVER ( ORDER BY x RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING ) , x FROM x ; SELECT x ( x ) OVER ( ORDER BY x RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING ) , x ( x ) OVER ( ORDER BY x RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING ) , x FROM x ; SELECT x , x ( x ) OVER ( ORDER BY x RANGE BETWEEN CURRENT ROW AND 1 FOLLOWING ) FROM x ( 1 , 1 ) x ; SELECT x , x ( x ) OVER ( ORDER BY x DESC RANGE BETWEEN CURRENT ROW AND 1 FOLLOWING ) FROM x ( 1 , 1 ) x ; INSERT INTO x VALUES ( 1 , 'x' , 'x' , 'x' , 'x' , 'x' ) , ( 1 , 'x' , 'x' , 'x' , 'x' , 'x' ) , ( 1 , 'x' , 'x' , 'x' , 'x' , 'x' ) , ( 1 , 'x' , 'x' , 'x' , 'x' , 'x' ) , ( 1 , 'x' , 'x' , 'x' , 'x' , 'x' ) , ( 1 , 'x' , 'x' , 'x' , 'x' , 'x' ) , ( 1 , 'x' , 'x' , 'x' , 'x' , 'x' ) , ( 1 , 'x' , 'x' , 'x' , 'x' , 'x' ) , ( 1 , 'x' , 'x' , 'x' , 'x' , 'x' ) , ( 1 , 'x' , 'x' , 'x' , 'x' , 'x' ) ; SELECT x ( x ) OVER ( ORDER BY x GROUPS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) , x , x x WHERE x < 1 ; SELECT x ( x ) OVER ( ORDER BY x GROUPS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) , x , x x WHERE x < 1 ; SELECT x ( x ) OVER ( ORDER BY x GROUPS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) , x , x x WHERE x < 1 ; SELECT x ( x ) OVER ( ORDER BY x GROUPS BETWEEN 1 PRECEDING AND UNBOUNDED FOLLOWING ) , x , x x WHERE x < 1 ; SELECT x ( x ) OVER ( ORDER BY x GROUPS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING ) , x , x x WHERE x < 1 ; SELECT x ( x ) OVER ( ORDER BY x GROUPS BETWEEN UNBOUNDED PRECEDING AND 1 FOLLOWING ) , x , x x WHERE x < 1 ; SELECT x ( x ) OVER ( ORDER BY x GROUPS BETWEEN 1 PRECEDING AND 1 PRECEDING ) , x , x x WHERE x < 1 ; SELECT x ( x ) OVER ( ORDER BY x GROUPS BETWEEN 1 PRECEDING AND 1 FOLLOWING ) , x , x x WHERE x < 1 ; SELECT x ( x ) OVER ( PARTITION BY x ORDER BY x GROUPS BETWEEN 1 PRECEDING AND 1 FOLLOWING ) , x , x , x x WHERE x < 1 ; SELECT x ( x ) OVER ( ORDER BY x GROUPS BETWEEN 1 PRECEDING AND 1 FOLLOWING ) , x ( x ) OVER ( ORDER BY x GROUPS BETWEEN 1 PRECEDING AND 1 FOLLOWING ) , x ( x , 1 ) OVER ( ORDER BY x GROUPS BETWEEN 1 PRECEDING AND 1 FOLLOWING ) , x , x FROM x ; SELECT x ( x ) OVER ( ORDER BY x GROUPS BETWEEN 1 PRECEDING AND 1 FOLLOWING ) , x ( x ) OVER ( ORDER BY x GROUPS BETWEEN 1 PRECEDING AND 1 FOLLOWING ) , x , x FROM x ; SELECT x , x ( x ) OVER ( PARTITION BY x ORDER BY x RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING ) FROM x WHERE x = x ; SELECT x , x ( x ) OVER ( PARTITION BY x , x ORDER BY x RANGE BETWEEN 1 PRECEDING AND 1 PRECEDING ) FROM x WHERE x = x ; SELECT x , x ( x ) OVER ( PARTITION BY x , x ORDER BY x RANGE BETWEEN 1 FOLLOWING AND 1 FOLLOWING ) FROM x WHERE x = x ; SELECT x , x ( x ) OVER ( PARTITION BY x ORDER BY x GROUPS BETWEEN 1 PRECEDING AND 1 FOLLOWING ) FROM x WHERE x = x ; SELECT x , x ( x ) OVER ( PARTITION BY x , x ORDER BY x GROUPS BETWEEN 1 PRECEDING AND 1 PRECEDING ) FROM x WHERE x = x ; SELECT x , x ( x ) OVER ( PARTITION BY x , x ORDER BY x GROUPS BETWEEN 1 FOLLOWING AND 1 FOLLOWING ) FROM x WHERE x = x ; SELECT x ( ) OVER ( ORDER BY x ( 'x' ) ) ; SELECT x ( ) OVER ( ORDER BY x ( ) OVER ( ORDER BY x ( ) ) ) ; SELECT * FROM x WHERE x ( ) OVER ( ORDER BY x ) < 1 ; SELECT x ( ) OVER ( ORDER BY 1 ) , x ( * ) FROM x GROUP BY 1 ; SELECT x ( * ) OVER w FROM x WINDOW x AS ( ORDER BY x ) , x AS ( ORDER BY x ) ; SELECT x ( ) OVER ( ) FROM x ; SELECT x ( 1 , 1 ) OVER ( ) FROM x ; SELECT x ( 1 ) OVER ( ORDER BY x ) , x , x FROM x ; SELECT x ( x , 1 ) OVER ( ORDER BY x ) , x , x FROM x ; SELECT x ( x ) OVER ( PARTITION BY x ) , x , x FROM ( SELECT * FROM x WHERE x < 1 ORDER BY x , x ) x ; SELECT 1 AS x UNION SELECT 1 ORDER BY 1 ; SELECT 1 AS x UNION SELECT 1 UNION SELECT 1 ORDER BY 1 ; SELECT 1.000000 AS x UNION SELECT 1.000000 ORDER BY 1 ; SELECT 1.000000 AS x UNION SELECT 1 ORDER BY 1 ; SELECT 1 AS x UNION SELECT 1.000000 ORDER BY 1 ; SELECT 1.000000 AS x UNION SELECT 1 UNION SELECT 1 ORDER BY 1 ; SELECT x FROM x INTERSECT SELECT x FROM x ORDER BY 1 ; SELECT x FROM x EXCEPT SELECT x FROM x ORDER BY 1 ; SELECT x ( * ) FROM ( SELECT x FROM x INTERSECT SELECT x FROM x ) x ; SELECT x FROM x EXCEPT SELECT x FROM x WHERE x != 1 ; SELECT x FROM x EXCEPT SELECT x FROM x ORDER BY x LIMIT 1 ; ( ( ( ( ( SELECT * FROM x ) ) ) ) ) ; INSERT INTO x VALUES ( 'x' , 'x' ) , ( 'x' , 'x' ) , ( 'x' , 'x' ) , ( 'x' , 'x' ) ; CREATE INDEX x ON x ( x ( x ) ) ; SELECT 'x' AS x , x AS x FROM x WHERE x ( x ) ; INSERT INTO x ( x , x , x ) VALUES ( 'x' , x ( 'x' , 1 ) , x ( 'x' , 1 ) ) ; INSERT INTO x ( x , x , x ) VALUES ( 'x' , NULL , x ( 'x' , 1 ) ) ; INSERT INTO x ( x , x , x ) VALUES ( 'x' , x ( 'x' , 1 ) , NULL ) ; SELECT * FROM x WHERE x > 'x' ORDER BY x ; SELECT * FROM x WHERE x >= 'x' ORDER BY x ; SELECT * FROM x WHERE x < 'x' ORDER BY x ; SELECT * FROM x WHERE x <= 'x' ORDER BY x ; SELECT x ( x ) FROM x WHERE x < 'x' ; SELECT x ( x ) FROM x WHERE x >= 1 AND x < 1 ORDER BY x ; SELECT x , x ; UPDATE x SET x = 1 WHERE x = 'x' ; CREATE TABLE x ( x VARCHAR ( 1 ) , x BOOLEAN ) ; SELECT * FROM x WHERE ( x IN ( SELECT x FROM x ) ) ; CREATE TABLE x AS SELECT x AS x , 1 - x AS x FROM x ( 1 , 1 ) x ; CREATE TABLE x ( x INT , x INT UNIQUE , x INT , x INT UNIQUE ) ; SELECT x ( 1 , 'x' , 'x' ) ; SELECT x ( x , 'x' , 'x' ) ; INSERT INTO x VALUES ( 'x' , 1 ) , ( 'x' , 1 ) , ( 'x' , 1 ) , ( 'x' , 1 ) ; INSERT INTO x VALUES ( 1 , 1 , 1 , 'x' , 'x' ) , ( 1 , 1 , 1 , 'x' , 'x' ) , ( 1 , 1 , 1 , 'x' , 'x' ) , ( 1 , 1 , 1 , 'x' , 'x' ) , ( 1 , 1 , 1 , 'x' , 'x' ) , ( 1 , 1 , 1 , 'x' , 'x' ) , ( 1 , 1 , 1 , 'x' , 'x' ) , ( 1 , 1 , 1 , 'x' , 'x' ) , ( 1 , 1 , 1 , 'x' , 'x' ) , ( 1 , 1 , 1 , 'x' , 'x' ) ; SELECT * FROM x WHERE x = 'x' AND x = 'x' ORDER BY x ; SELECT * FROM x WHERE x ( x ) ORDER BY x ; SELECT * FROM x NATURAL JOIN x WHERE x ( x ) ORDER BY x ; INSERT INTO x VALUES ( 1 , 1 , 1 , x , 'x' ) ; CREATE TABLE x ( x INT NOT NULL PRIMARY KEY , x INT , x TEXT , x TEXT ) ; SELECT * , x FROM x ; SELECT * FROM x WHERE x = 'x' AND x LIKE 'x' ORDER BY x ; CREATE VIEW x AS SELECT * FROM x WHERE x LIKE 'x' ; SELECT ( SELECT x FROM x LIMIT 1 ) x , * FROM x WHERE x LIKE 'x' ; SELECT * FROM x ORDER BY x , x ; UPDATE x SET x = 'x' WHERE x = 1 AND x ( x ) ; CREATE VIEW x AS SELECT * FROM x WHERE x ( x ) ; CREATE TABLE x ( x INT , x TEXT , x TEXT ) ; INSERT INTO x VALUES ( 1 , 'x' , 'x' ) , ( 1 , 'x' , 'x' ) , ( 1 , 'x' , 'x' ) , ( 1 , 'x' , 'x' ) , ( 1 , 'x' , 'x' ) , ( 1 , 'x' , 'x' ) , ( 1 , 'x' , 'x' ) , ( 1 , 'x' , 'x' ) ; SELECT * FROM x WHERE x ( x ) ORDER BY x ASC ; SELECT * FROM x WHERE x ( 'x' ) ; SELECT * FROM x JOIN x ON ( x = x ) WHERE x ( x ) ; CREATE TABLE x ( x INTEGER , x TEXT , x TEXT ) ; INSERT INTO x VALUES ( 1 , 'x' , 'x' ) , ( 1 , 'x' , 'x' ) , ( 1 , 'x' , 'x' ) , ( 1 , 'x' , 'x' ) , ( 1 , 'x' , 'x' ) ; INSERT INTO x VALUES ( 1 , 'x' ) , ( 1 , 'x' ) , ( 1 , 'x' ) , ( 1 , 'x' ) , ( 1 , 'x' ) , ( 1 , 'x' ) ; SELECT x , x , x FROM x JOIN x ON x = x ; INSERT INTO x VALUES ( 1 , x ( 'x' ) ) ; INSERT INTO x VALUES ( 1 , 'x' , 'x' ) , ( 1 , 'x' , 'x' ) , ( 1 , 'x' , 'x' ) , ( 1 , 'x' , 'x' ) ; SELECT x , x FROM x WHERE x = 'x' ORDER BY 1 ; SELECT x ( * ) = 1 FROM x WHERE x = ( SELECT x FROM x WHERE x = 'x' ) AND x = ( SELECT x FROM x WHERE x = 'x' ) ; INSERT INTO x SELECT x / 1 FROM x ( 1 , 1 ) x ; INSERT INTO x SELECT 1 , 1 , 1 ; INSERT INTO x SELECT * FROM ( SELECT x , x FROM x ORDER BY x ) x ; INSERT INTO x SELECT 1 FROM x ( 1 , 1 ) ; INSERT INTO x VALUES ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) ; CREATE TABLE x ( x INT NOT NULL , x INT NOT NULL , x INT NOT NULL ) ; INSERT INTO x VALUES ( 1 , 1 , 1 ) , ( 1 , 1 , 1 ) , ( 1 , 1 , 1 ) ; INSERT INTO x VALUES ( 'x' ) , ( 'x' ) , ( 'x' ) ; SELECT x ( x ) , x ( x ) , x ( x ) FROM x ORDER BY x ; SELECT x ( ) >= x ( x ( ) ) ; SELECT x ( x ( ) , x ( ) ) ; SELECT x ( ) IS NULL ; SELECT x , x ( x ) AS x FROM x ; INSERT INTO x SELECT ARRAY [ 1 , 1 , x ] FROM x ( 1 , 1 ) x ; INSERT INTO x VALUES ( 1 , 'x' , 'x' ) , ( 1 , 'x' , 'x' ) ; SELECT x , x ( x ) , x ( x ) , x ( x ) , x ( x ) , x ( x ) , x ( x ) FROM x ; SELECT x , x , x FROM x ORDER BY x ( x ) , x ; SELECT x , x ( x , 'x' ) FROM x ORDER BY 1 ; SELECT x , x ( x ( x , 'x' ) ) , x ( x ( x , 'x' ) ) FROM x ; SELECT x , x , x ( x , 'x' ) FROM x ORDER BY 1 ; SELECT x , x , x , x ( x ( x , 'x' ) ) , x ( x ( x , 'x' ) ) FROM x ; SELECT x , CASE x WHEN 'x' THEN 'x' ELSE x END FROM x ORDER BY 1 ; SELECT x , x FROM x UNION SELECT x , x FROM x ORDER BY 1 ; SELECT x , x FROM x WHERE x < 1 INTERSECT SELECT x , x FROM x WHERE x > 1 ORDER BY 1 ; SELECT x , x FROM x EXCEPT SELECT x , x FROM x WHERE x < 1 ORDER BY 1 ; SELECT * FROM x WHERE ( x , x ) NOT IN ( SELECT x , x FROM x ) ; SELECT x , CAST ( x AS VARCHAR ) FROM x ORDER BY 1 ; SELECT x , x ( x ) FROM x ORDER BY 1 ; INSERT INTO x VALUES ( 1 , 1.000000 ) ; SELECT CASE WHEN 1 = 1 THEN 1 / 1 WHEN 1 = 1 THEN 1 ELSE 1 / 1 END ; SELECT CASE 1 WHEN 1 THEN 1 / 1 WHEN 1 THEN 1 ELSE 1 / 1 END ; SELECT CASE WHEN x > 1 THEN 1 / 1 ELSE 1 END FROM x ; SELECT CASE 'x' WHEN 'x' THEN 1 ELSE 1 END ; SELECT * FROM x WHERE x ( x , x ) = 1 ; UPDATE x SET x = CASE WHEN x >= 1 THEN ( - x ) ELSE ( 1 * x ) END ; UPDATE x SET x = CASE WHEN x >= 1 THEN ( 1 * x ) ELSE ( 1 * x ) END ; SELECT CASE ( CASE x ( 'x' ) WHEN 'x' THEN 'x' WHEN x ( NULL ) THEN 'x' WHEN 'x' THEN 'x' END ) WHEN 'x' THEN 'x' WHEN 'x' THEN 'x' ELSE 'x' END ; SELECT x , x FROM x WHERE x LIKE 'x' ORDER BY x , x ; SELECT x , x NOT LIKE 'x' AS x FROM x WHERE x LIKE 'x' ORDER BY x ; INSERT INTO x ( x , x ) VALUES ( x ( 1 , 1 ) , x ( 'x' , 1 ) ) ; SELECT x ( 1 , 1 , 1 , 1 , 1 , 1.000000 ) ; INSERT INTO x ( x , x , x ) VALUES ( 1 , 'x' , x ( 'x' , 1 ) ) ; CREATE INDEX x ON x ( ( - x ) , x ) ; CREATE INDEX x ON x ( ( x ( x ) ) ) ; SELECT * FROM x WHERE x ( x ) = 'x' ; SELECT * FROM x WHERE - x = 1 ORDER BY - x , x ; INSERT INTO x VALUES ( x ( x ( 1 , 1 ) , x ( 1 , 1 ) ) ) ; SELECT x ( NULL , 'x' ) ; INSERT INTO x SELECT ( x - 1 ) * 1 + x , x ( x ( x ( x * 1 , x * 1 ) , 1 + ( x + x ) % 1 ) ) FROM x ( 1 , 1 ) x , x ( 1 , 1 ) x ; INSERT INTO x VALUES ( 1 , NULL ) , ( 1 , NULL ) , ( 1 , NULL ) ; INSERT INTO x VALUES ( x , x ) ; SELECT * FROM x EXCEPT SELECT * FROM x ; INSERT INTO x SELECT x , 1 , 'x' FROM x ( 1 , 1 ) x ; SELECT x FROM x WHERE x > 1 ; CREATE TEMPORARY TABLE x ( x INT ) ; SELECT x FROM x WHERE x IN ( 1 , 1 , 1 ) ; SELECT x FROM x WHERE x BETWEEN 1 AND 1 ; UPDATE x SET x = x ( ) + 1 WHERE x > 1 ; INSERT INTO x VALUES ( x ( 1 ) ) ; SELECT x ( 'x' , FALSE , FALSE , 'x' ) ; SELECT x ( 'x' , TRUE , FALSE , 'x' ) ; SELECT x ( 'x' , FALSE , TRUE , 'x' ) ; SELECT x ( 'x' , TRUE , TRUE , 'x' ) ; SELECT x ( 1 , 1 ) , x ( 1 , 1 ) ; SELECT x ( 1 , x ( 1 , 1 ) ) ; SELECT * FROM x ( 1 , x ( 1 , 1 ) ) ; SELECT x ( x ( 1 , 1 ) , x ( 1 , 1 ) ) ; SELECT x ( 1 , x ( 1 , 1 ) ) , x ( 1 , 1 ) ; INSERT INTO x VALUES ( 1 , 'x' , 'x' ) , ( 1 , 'x' , 'x' ) , ( 1 , 'x' , 'x' ) ; SELECT x ( ARRAY [ 1 , 1 ] ) FROM x WHERE FALSE ; SELECT x , x ( 1 , 1 ) , x ( * ) FROM x GROUP BY 1 HAVING x ( * ) > 1 ; SELECT x , x ( 1 , 1 ) , x ( * ) FROM x GROUP BY 1 , 1 HAVING x ( * ) > 1 ; SELECT x , CASE WHEN x > 1 THEN x ( 1 , 1 ) ELSE 1 END FROM x ; SELECT x , x ( x ( 1 , 1 ) , 1 ) FROM x ; SELECT x ( x ( 1 , 1 ) ) FROM x ; SELECT x ( x ( 1 , 1 ) ) OVER ( ) FROM x ; SELECT x , x ( x ) OVER ( ) , x ( * ) OVER ( ) , x ( 1 , 1 ) FROM x ; SELECT x ( x ( * ) ) OVER ( PARTITION BY x ( 1 , 1 ) ORDER BY x ( 1 , 1 ) ) , x ( 1 , 1 ) x FROM x GROUP BY x ; SELECT x , x x , x ( 1 , 1 ) x , x ( * ) FROM x GROUP BY x ( x , x ) ; SELECT x , x x , x ( 1 , 1 ) x , x ( * ) FROM x GROUP BY x ( x , x ) ORDER BY x ; SELECT x , x x , x ( 1 , 1 ) x , x ( * ) FROM x GROUP BY x ( x , x , x ) ; SELECT x , x x , x ( 1 , 1 ) x , x ( * ) FROM x GROUP BY x ( x , x , x ) ORDER BY x ; SELECT 'x' AS x , x ( 1 , 1 ) AS x FROM x ORDER BY 1 ; UPDATE x SET x = x ( 1 , 1 ) ; SELECT x ( x ( 1 , 1 ) , 1 ) ; SELECT * FROM x ( x ( 1 , 1 ) , 1 ) ; SELECT 1 LIMIT x ( 1 , 1 ) ; SELECT x ( 1 , 1 ) AS x , x ( 1 , 1 ) + 1 AS x ; SELECT x ( 1 , 1 ) + 1 ORDER BY x ( 1 , 1 ) ; INSERT INTO x VALUES ( x , x , x , x [ 1 ] , x , x ) ; SELECT x = 'x' ; SELECT x ( FALSE ) ; SELECT x ( 'x' ) , x ( 'x' ) ; SELECT x ( 1 ) , x ( 'x' ) ; SELECT x ( 'x' , FALSE ) ; SELECT DISTINCT x FROM x ORDER BY 1 ; SELECT x ( * ) FROM ( SELECT DISTINCT x , x , x FROM x ) x ; SELECT x [ 1 ] , x [ 1 ] [ 1 ] [ 1 ] , x [ 1 ] , x [ 1 ] [ 1 ] , x [ 1 ] FROM x ; SELECT x ( x ) AS x , x ( x ) AS x , x ( x ) AS x FROM x ; SELECT x FROM x WHERE x [ 1 ] IS NULL ; INSERT INTO x VALUES ( ARRAY [ 1 , 1 , NULL , 1 ] , ARRAY [ 'x' , 'x' , NULL , 'x' ] ) ; SELECT ARRAY [ ARRAY [ 'x' ] , ARRAY [ 'x' ] ] ; SELECT ARRAY [ 1 , NULL , 1 ] ; SELECT x ( ARRAY [ 1 , 1 , 1 , 1 , 1 ] , 1 ) ; SELECT x ( ARRAY [ 'x' , 'x' , 'x' , 'x' , 'x' , 'x' , 'x' ] , 'x' ) ; SELECT x ( ARRAY [ 'x' , 'x' , 'x' , 'x' , 'x' , 'x' , 'x' ] , NULL ) ; SELECT x ( ARRAY [ 'x' , 'x' , 'x' , 'x' , 'x' , NULL , 'x' , 'x' ] , NULL ) ; SELECT x ( ARRAY [ 'x' , 'x' , 'x' , 'x' , 'x' , NULL , 'x' , 'x' ] , 'x' ) ; SELECT x ( ARRAY [ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ] , 1 ) ; SELECT x ( ARRAY [ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ] , NULL ) ; SELECT x ( ARRAY [ 1 , 1 , 1 , NULL , 1 , 1 , 1 , 1 , 1 , NULL , 1 , 1 ] , NULL ) ; SELECT 1 = x ( 'x' ) ; SELECT 1.000000 = x ( ARRAY [ 1 , 1 , 1 ] ) ; SELECT 1 * x ( 'x' ) ; SELECT 1 * x ( 1 ) ; SELECT * FROM x WHERE x > 'x' AND x <= 'x' ; SELECT * FROM x WHERE x >= 'x' AND x < 'x' ; INSERT INTO x ( x , x , x ) VALUES ( 'x' , 'x' , 'x' ) ; SELECT x ( x ) , x ( x ) , x ( x ) , x ( x ) , x ( x ) , x ( x ) FROM x ; INSERT INTO x ( x , x , x ) VALUES ( 'x' , 'x' , NULL ) ; SELECT * FROM x ( ARRAY [ 1 , 1 , 1 ] ) ; SELECT x ( 1 , ARRAY [ 1 , 1 ] , ARRAY [ 1 , 1 ] ) ; SELECT x ( 1 , ARRAY [ 1 , 1 ] ) ; SELECT x , x = 'x' AS x , x ( x ) FROM ( SELECT x ( 1 , ARRAY [ 1 ] ) AS x ) x ; SELECT x , x = 'x' AS x , x ( x ) FROM ( SELECT x ( 1 , 'x' ) AS x ) x ; SELECT x , x = 'x' AS x , x ( x ) FROM ( SELECT x ( 1 , 'x' , 'x' ) AS x ) x ; SELECT x ( 1 , NULL , ARRAY [ 1 , 1 ] ) ; SELECT x ( 1 , ARRAY [ 1 , 1 ] , NULL ) ; SELECT x ( 1 , ARRAY [ 1 , 1 ] , 'x' ) ; SELECT x ( 1 , ARRAY [ 1 , 1 ] , ARRAY [ 1 , 1 , 1 ] ) ; SELECT x ( 1 , ARRAY [ 1 , 1 , NULL ] ) ; SELECT x ( NULL , 'x' ) IS NULL ; SELECT x ( ARRAY [ 1 , 1 , 1 , 1 , NULL , 1 ] , 'x' ) ; SELECT x ( ARRAY [ 1 , 1 , 1 , 1 , NULL , 1 ] , 'x' , 'x' ) ; SELECT x ( ARRAY [ 1 , 1 , 1 , 1 , NULL , 1 ] , NULL ) ; SELECT x ( ARRAY [ 1 , 1 , 1 , 1 , NULL , 1 ] , 'x' , NULL ) ; SELECT x ( ARRAY [ 1 , 1 , 1 ] , 1 ) ; SELECT x ( ARRAY [ 1 , 1 , 1 ] ) ; SELECT x ( x ) FROM ( SELECT x FROM x WHERE x < 1 ORDER BY x ) x ; SELECT x ( x ( x , 1 ) ) FROM ( SELECT x FROM x WHERE x < 1 ORDER BY x ) x ; SELECT x ( ARRAY [ 1 , 1 , 1 , NULL , 1 , NULL , NULL , 1 , 1 ] ) ; SELECT x ( x ( ARRAY [ 1 , 1 , NULL , 1 ] ) ) ; SELECT x ( ARRAY [ 1 , 1 , 1 , 1 ] , 1 ) ; SELECT x ( ARRAY [ 1 , NULL , NULL , 1 ] , NULL ) ; SELECT x ( ARRAY [ 'x' , 'x' , 'x' , 'x' , 'x' ] , 'x' ) ; SELECT x ( ARRAY [ 1 , 1 , 1 , 1 ] , 1 , 1 ) ; SELECT x ( ARRAY [ 1 , 1 , 1 , 1 ] , 1 , NULL ) ; SELECT x ( ARRAY [ 1 , 1 , NULL , 1 , NULL ] , NULL , 1 ) ; SELECT x ( ARRAY [ 'x' , 'x' , 'x' , 'x' ] , 'x' , 'x' ) ; SELECT x ( ARRAY [ 1 , NULL , 1 ] , NULL , NULL ) ; SELECT x ( ARRAY [ 'x' , NULL , 'x' ] , NULL , 'x' ) ; SELECT x ( 1 , ARRAY [ 1 ] ) ; SELECT x ( 1 , ARRAY [ ARRAY [ 1 , 1 ] , ARRAY [ 1 , 1 ] ] ) ; CREATE TABLE x ( x VARCHAR ( 1 ) ) ; SELECT x , x , x , x , x , x , x , x , x , x , x FROM x WHERE x = 'x' ; SELECT x , x , x FROM x WHERE x NOT IN ( 'x' , 'x' , 'x' ) ; SELECT x ( x ( x ) ) , x ( x ) FROM x x ; SELECT x ( ) ORDER BY 1 ; SELECT x ( x ) FROM x GROUP BY x ( x ) ; SELECT x ( * ) FROM x WHERE ( x , x ) NOT IN ( SELECT x , x FROM x WHERE x > 1 ) ; SELECT x ( ( x ) ) FROM x WHERE x > 1 ; SELECT x ( * ) FROM x WHERE x > 1 ; INSERT INTO x SELECT x , 'x' FROM x ( 1 , 1 ) x ; SELECT x ( * ) FROM x GROUP BY x ; SELECT x ( * ) , x ( 1 , 1 ) FROM x GROUP BY x ; SELECT x FROM x ORDER BY x LIMIT 1 ; SELECT x ( x ) FROM ( SELECT x ( 1 , 1 ) x ) x ORDER BY x ; INSERT INTO x VALUES ( 'x' , ARRAY [ 1 , 1 ] , 'x' ) ; INSERT INTO x ( x , x , x , x ) SELECT x , x , x , x FROM x WHERE ( x < 1 OR x > 1 ) AND x % 1 = 1 AND x IS NOT NULL ; SELECT x , x FROM x ORDER BY x NULLS FIRST LIMIT 1 ; SELECT x , x , x FROM x ORDER BY x LIMIT 1 ; INSERT INTO x VALUES ( x ( 1.000000 , 1.000000 ) ) ; INSERT INTO x VALUES ( x ( 1.000000 , 1.000000 , 'x' ) ) ; SELECT x , x ( x ) , x ( x ) , x ( x ) FROM x ; SELECT x , x ( x ) , x ( x ) , x ( x ) , x ( x ) FROM x ; SELECT * FROM x WHERE x ( x , x ( 1.000000 , 1.000000 ) ) ; SELECT * FROM x WHERE x ( x ( 1 x , 1.000000 ) , x ) ; SELECT * FROM x WHERE x < 'x' ; SELECT * FROM x WHERE x < x ( 1.000000 , 1.000000 , 'x' ) ; SELECT * FROM x WHERE x <= 'x' ; SELECT * FROM x WHERE x >= 'x' ; SELECT * FROM x WHERE x > 'x' ; SELECT * FROM x WHERE x > x ( 1.000000 , 1.000000 , 'x' ) ; SELECT x ( 1.000000 , 1.000000 ) ; SELECT x ( x ( 1.000000 , 1.000000 ) , x ( 1.000000 , 1.000000 ) ) ; SELECT x ( x ( 1.000000 , 1.000000 ) , x ( 1.000000 , NULL ) ) ; SELECT x ( x ( 1.000000 , 1.000000 , 'x' ) , x ( 1.000000 , 1.000000 , 'x' ) ) ; SELECT x ( 1.000000 , 1.000000 ) - x ( 1.000000 , 1.000000 ) ; SELECT x ( 1.000000 , 1.000000 , 'x' ) - x ( 1.000000 , 1.000000 ) ; SELECT x ( 1.000000 , 1.000000 ) < x ( 1.000000 , 1.000000 ) ; SELECT x ( 1.000000 , 1.000000 ) + x ( 1.000000 , 1.000000 ) ; SELECT x ( 1.000000 , 1.000000 ) * x ( 1.000000 , 1.000000 ) ; SELECT * FROM x WHERE x = x ( 1.000000 , 1.000000 ) ; SELECT * FROM x NATURAL JOIN x ORDER BY x ; SELECT x ( 1 , 1 , 'x' ) ; INSERT INTO x SELECT x ( x , x + 1 ) FROM x ( 1 , 1 ) x ; INSERT INTO x SELECT x ( NULL , x * 1 , 'x' ) FROM x ( 1 , 1 ) x ; INSERT INTO x SELECT x ( x * 1 , NULL , 'x' ) FROM x ( 1 , 1 ) x ; SELECT x ( * ) FROM x WHERE x = x ( 1 , 1 ) ; INSERT INTO x SELECT x FROM x ( 1 , 1 ) x ; INSERT INTO x VALUES ( x ( 1 , 1 , 'x' ) , x ( 1 , 1 , 'x' ) , 'x' ) ; INSERT INTO x VALUES ( x ( 1.000000 , 'x' ) , 1 ) ; SELECT x ( ARRAY [ 1 , 1 ] , x ( 1 , 1 ) ) ; SELECT x ( x ( 1 , 1 ) ) ; SELECT x ( x ( 1.000000 , 1.000000 ) ) ; SELECT x ( x ( 1 , 1 ) , ARRAY [ 1 , 1 ] ) ; INSERT INTO x VALUES ( 1 , ARRAY [ x ( 1 , 1 ) , x ( 1 , 1 ) ] ) ; SELECT x ( ARRAY [ 1 , 1 ] , ARRAY [ 1 , 1 ] ) ; SELECT * FROM x ( x ( 1 , 1 ) ) ; INSERT INTO x ( x , x , x ) SELECT x , x , x FROM x ( 1 , 1 ) x ; SELECT x , x FROM x JOIN x ON x = x WHERE x LIKE 'x' ORDER BY x ; SELECT x , x FROM x WHERE x LIKE 'x' ORDER BY x ; CREATE TABLE x ( x INT , x INT , x INT , x INT , x INT , x INT ) ; CREATE TABLE x ( x INT NOT NULL , x INT PRIMARY KEY ) ; INSERT INTO x VALUES ( 1 , 'x' ) , ( 1 , 'x' ) , ( 1 ^ 1 , 'x' ) ; INSERT INTO x SELECT 1 ^ x , x ( 'x' , x ) FROM x ( 1 , 1 ) x ; INSERT INTO x ( x , x ) VALUES ( 'x' , 1 ) , ( 'x' , 1 ) ; SELECT x , x FROM x GROUP BY x , x HAVING x ( * ) = 1 ORDER BY x , x ; SELECT x , x FROM x GROUP BY x , x HAVING x = 1 ORDER BY x , x ; SELECT x ( x ) , x ( x ) FROM x GROUP BY x ( x ) HAVING x ( * ) > 1 OR x ( x ) = x ( x ) ORDER BY x ( x ) ; SELECT x , x ( x ) FROM x GROUP BY x HAVING x ( * ) > 1 OR x ( x ) = x ( x ) ORDER BY x ; CREATE TABLE x ( x CHAR ) ; INSERT INTO x ( x ) SELECT x ( * ) FROM x WHERE x ( ) < 1.000000 / 1 ; SELECT x , x ( x ) FROM x GROUP BY x HAVING x ( x ) > 1 ; CREATE TABLE x ( x NUMERIC ) ; SELECT x ( 1.000000 , 1.000000 , 1.000000 , 1 ) ; SELECT x ( 'x' , 1.000000 , 1.000000 , 1 ) ; SELECT x , x ( x , 1 , 1 , 1 ) AS x , x ( x , 1 , 1 , 1 ) AS x , x ( x , 1 , 1 , 1 ) AS x , x ( x , 1 , 1 , 1 ) AS x , x ( x , 1 , 1 , 1 ) AS x , x ( x , 1 , 1 , 1 ) AS x , x ( x , 1.000000 , 1.000000 , 1 ) AS x , x ( x , 1.000000 , 1.000000 , 1 ) AS x , x ( x , 1 , 1 , 1 ) AS x , x ( x , 1 , 1 , 1 ) AS x FROM x ; SELECT 'x' AS x , x ( 'x' , 'x' ) ; SELECT 1 * 1 ; SELECT x ( 1.000000 , 1 ) ; SELECT 1.000000 / 1 ; SELECT 1 % 1 ; SELECT x ( 1 , 1 ) * 1 + 1 % 1 ; SELECT 1.000000 ^ 1 AS x ; SELECT 1.000000 ^ 1 ; SELECT 1.000000 ^ ( 1 ) ; SELECT 1.000000 ^ 1.000000 ; SELECT ( 1.000000 ) ^ 1.000000 ; SELECT 1.000000 ^ ( 1.000000 ) ; SELECT x ( 1.000000 x ) ; SELECT x ( 1.000000 , 1.000000 x ) ; SELECT x , x , x FROM x ORDER BY x ; CREATE TABLE x ( x INTEGER , x INTEGER , x INTEGER ) ; SELECT x ( x ) FROM x WHERE x = 'x' ; INSERT INTO x SELECT x , x % 1 FROM x ( 1 , 1 ) x ; SELECT x ( x [ 1 ] ) , x ( x [ 1 ] ) FROM x ( 'x' ) AS x ; INSERT INTO x ( x , x ) SELECT x , x FROM x ; SELECT * FROM x WHERE x ISNULL ; UPDATE x SET x = x + 1 WHERE x ISNULL ; UPDATE x SET x = 1 WHERE x < 1 ; UPDATE x SET x = x + 1 WHERE x > 1 ; UPDATE x SET x = 'x' , x = 'x' WHERE x = 'x' ; UPDATE x SET x = x + 'x' ; INSERT INTO x SELECT * FROM x WHERE x < 1 ; INSERT INTO x SELECT x + 1 , x FROM x WHERE x IN ( 1 , 1 , 1 ) ; CREATE VIEW x AS SELECT x , x FROM x WHERE x ; CREATE VIEW x AS SELECT x , x , x ( x ) AS x FROM x ; INSERT INTO x SELECT * FROM x WHERE 1 > x ; INSERT INTO x SELECT * FROM x WHERE x > 1 AND x = 1 ; CREATE TABLE x ( x TEXT , x CHAR ( 1 ) , x FLOAT ) ; CREATE TABLE x ( x CHAR ( 1 ) , x FLOAT ) ; INSERT INTO x VALUES ( 'x' , 1.000000 ) ; INSERT INTO x VALUES ( 'x' , 'x' , 1.000000 ) ; INSERT INTO x VALUES ( 'x' , 1 , 'x' , 1.000000 , 1.000000 , 'x' ) ; INSERT INTO x VALUES ( 'x' , 1 , 'x' , 1.000000 , 'x' ) ; INSERT INTO x VALUES ( 'x' , 1 , 'x' , 1 , 'x' ) ; SELECT * FROM x WHERE x >= 1 ORDER BY 1 ; CREATE TABLE x ( x CHAR ( 1 ) , x INTEGER ) ; CREATE VIEW x AS SELECT * FROM x WHERE NOT EXISTS ( SELECT x FROM x WHERE x = x ) ; INSERT INTO x VALUES ( 'x' , 1 , 'x' , 1.000000 , 'x' , 1.000000 ) ; INSERT INTO x VALUES ( 'x' , 1 , 'x' , 1.000000 , 'x' , 1.000000 ) ON CONFLICT DO NOTHING ; INSERT INTO x VALUES ( 1 , 1 , 1 , 'x' ) ON CONFLICT DO NOTHING ; CREATE VIEW x AS SELECT * FROM x ORDER BY x ; INSERT INTO x SELECT * FROM x ( 1 , 1 , 1 ) x ; SELECT * FROM x x ; UPDATE x SET x = x / 1 ; SELECT x , x , x FROM x WHERE x = 'x' ; SELECT * FROM x WHERE x IN ( 'x' , 'x' , 'x' ) ORDER BY x ; CREATE UNIQUE INDEX x ON x ( ( x + 1 ) ) ; CREATE UNIQUE INDEX x ON x ( ( x + 1 + 1 ) ) ; SELECT x ( 1 , 1 , 1 , 1 , 1 , 1.000000 , 'x' ) ; SELECT x ( 1 , 1 , 1 , 1 , 1 , 1 , 'x' ) ; CREATE TABLE x ( x INT NOT NULL PRIMARY KEY ) ; INSERT INTO x SELECT * FROM x ( 1 , 1 ) x ; SELECT x , x FROM x WHERE x = 1 LIMIT 1 ; SELECT x , x FROM x WHERE x = 'x' LIMIT 1 ; SELECT * FROM x ORDER BY x , x , x LIMIT 1 ; SELECT * FROM x WHERE x > 1 ORDER BY x , x , x LIMIT 1 ; SELECT * FROM x WHERE x LIKE 'x' ORDER BY x ; SELECT x FROM x WHERE x = 1 ; INSERT INTO x ( x , x , x ) VALUES ( 1 , 1 , NULL ) ; INSERT INTO x VALUES ( 1 , 'x' ) , ( 1 , 'x' ) , ( 1 , 'x' ) , ( 1 , 'x' ) , ( 1 , 'x' ) , ( 1 , 'x' ) , ( 1 , 'x' ) , ( 1 , 'x' ) , ( 1 , 'x' ) , ( 1 , 'x' ) ; SELECT x ( 'x' , 'x' ) AS x ; SELECT x FROM x WHERE x LIKE 'x' ORDER BY 1 ; SELECT x FROM x UNION SELECT x FROM x ORDER BY x ; SELECT x FROM x INTERSECT SELECT x FROM x ; SELECT x FROM x EXCEPT SELECT x FROM x ; SELECT DISTINCT x FROM x ORDER BY x ; SELECT x , x ( * ) FROM x GROUP BY x ORDER BY x ; SELECT x , x ( ) OVER ( ORDER BY x ) , x ( ) OVER ( ORDER BY x ) FROM x ORDER BY x ; SELECT x FROM x INTERSECT SELECT x FROM x ORDER BY x ; SELECT ( SELECT x ( * ) FROM x ) = ( SELECT x ( * ) FROM x ) ; CREATE UNIQUE INDEX x ON x ( x , x , ( 1 ) ) ; SELECT * FROM x ( 'x' ) ORDER BY x DESC , x DESC , x LIMIT 1 ; SELECT * FROM x ( 'x' , 'x' ) ORDER BY x DESC , x DESC , x ; SELECT x ( x ( 'x' , 'x' ) ) ; SELECT x ( x ( x ( 'x' ) ) , x ( 'x' ) ) ; UPDATE x SET x = x ( 'x' , x ) ; SELECT x ( x ( 'x' , 'x' , 'x' ) , 'x' , 'x' ) ; SELECT x ( x ( 'x' ) , x ( 'x' ) , x ( 'x' ) ) ; SELECT x ( x , 'x' ) FROM x ( 'x' , 'x' ) AS x ; SELECT x ( x ( 'x' , 'x' ) , 'x' , 'x' ) ; UPDATE x SET x = NULL WHERE x = 'x' ; INSERT INTO x VALUES ( x ( 'x' ) ) ; INSERT INTO x SELECT 1 FROM x ( 1 , 1 ) x ; INSERT INTO x VALUES ( 1.000000 , 1 ) ; SELECT 'x' AS x ; INSERT INTO x VALUES ( 'x' , 'x' , 'x' , 'x' , 'x' ) , ( 'x' , 'x' , 'x' , 'x' , 'x' ) , ( 'x' , 'x' , 'x' , 'x' , 'x' ) , ( 'x' , 'x' , 'x' , 'x' , 'x' ) , ( 'x' , 'x' , 'x' , 'x' , 'x' ) , ( 'x' , 'x' , 'x' , 'x' , 'x' ) , ( 'x' , 'x' , 'x' , 'x' , 'x' ) , ( 'x' , 'x' , 'x' , 'x' , 'x' ) , ( 'x' , 'x' , 'x' , 'x' , 'x' ) , ( 'x' , 'x' , 'x' , 'x' , 'x' ) , ( 'x' , 'x' , 'x' , 'x' , 'x' ) , ( 'x' , 'x' , 'x' , 'x' , 'x' ) , ( 'x' , 'x' , 'x' , 'x' , 'x' ) , ( 'x' , 'x' , 'x' , 'x' , 'x' ) , ( 'x' , 'x' , 'x' , 'x' , 'x' ) , ( 'x' , 'x' , 'x' , 'x' , 'x' ) , ( 'x' , 'x' , 'x' , 'x' , 'x' ) , ( 'x' , 'x' , 'x' , 'x' , 'x' ) , ( 'x' , 'x' , 'x' , 'x' , 'x' ) , ( 'x' , 'x' , 'x' , 'x' , 'x' ) , ( 'x' , 'x' , 'x' , 'x' , 'x' ) , ( 'x' , 'x' , 'x' , 'x' , 'x' ) , ( 'x' , 'x' , 'x' , 'x' , 'x' ) , ( 'x' , 'x' , 'x' , 'x' , 'x' ) , ( 'x' , 'x' , 'x' , 'x' , 'x' ) , ( 'x' , 'x' , 'x' , 'x' , 'x' ) , ( 'x' , 'x' , 'x' , 'x' , 'x' ) , ( 'x' , 'x' , 'x' , 'x' , 'x' ) , ( 'x' , 'x' , 'x' , 'x' , 'x' ) , ( 'x' , 'x' , 'x' , 'x' , 'x' ) , ( 'x' , 'x' , 'x' , 'x' , 'x' ) , ( 'x' , 'x' , 'x' , 'x' , 'x' ) , ( 'x' , 'x' , 'x' , 'x' , 'x' ) , ( 'x' , 'x' , 'x' , 'x' , 'x' ) , ( 'x' , 'x' , 'x' , 'x' , 'x' ) , ( 'x' , 'x' , 'x' , 'x' , 'x' ) , ( 'x' , 'x' , 'x' , 'x' , 'x' ) , ( 'x' , 'x' , 'x' , 'x' , 'x' ) , ( 'x' , 'x' , 'x' , 'x' , 'x' ) , ( 'x' , 'x' , 'x' , 'x' , 'x' ) , ( 'x' , 'x' , 'x' , 'x' , 'x' ) , ( 'x' , 'x' , 'x' , 'x' , 'x' ) , ( 'x' , 'x' , 'x' , 'x' , 'x' ) , ( 'x' , 'x' , 'x' , 'x' , 'x' ) , ( 'x' , 'x' , 'x' , 'x' , 'x' ) , ( 'x' , 'x' , 'x' , 'x' , 'x' ) ; UPDATE x SET x = 'x' WHERE x IS NOT NULL ; CREATE TABLE x AS SELECT x ( 1 , 1 ) AS x , 'x' ; INSERT INTO x SELECT 1 AS x , 'x' FROM x ( 1 , 1 ) ; UPDATE x SET x = 1 , x = x ( 'x' ) / 1 WHERE x = 'x' ; CREATE TABLE x AS SELECT x ( 1 , 1 ) AS x , x ( 'x' , 1 , 'x' ) AS x ; SELECT x + 'x' FROM x ; SELECT x - 'x' FROM x ; SELECT x * 1 FROM x ; SELECT 1 * x FROM x ; SELECT x / 1 FROM x ; SELECT x = 'x' FROM x ; SELECT x != 'x' FROM x ; SELECT x <= 'x' FROM x ; SELECT x >= 'x' FROM x ; SELECT x < 'x' FROM x ; SELECT x > 'x' FROM x ; SELECT x ( x + 'x' ) FROM x ; WITH x ( x , x ) AS ( SELECT 1 , 1 ) SELECT * FROM x , x AS x ; SELECT x ( * ) FROM ( WITH x ( x ) AS ( SELECT x ( ) FROM x ( 1 , 1 ) ) SELECT * FROM x UNION SELECT * FROM x ) x ; WITH RECURSIVE x ( x ) AS ( SELECT 1 UNION SELECT 1 - x FROM x ) SELECT * FROM x ; WITH RECURSIVE x ( x ) AS ( SELECT 1 UNION SELECT x + 1 FROM x ) SELECT * FROM x LIMIT 1 ; WITH x ( x , x ) AS ( SELECT x , x ( x ) FROM x GROUP BY x ) SELECT x ( * ) FROM x WHERE x > ( SELECT x ( x ) / 1 FROM x x ) ; INSERT INTO x VALUES ( 1 , 1 , 'x' ) , ( 1 , 1 , 'x' ) , ( 1 , 1 , 'x' ) , ( 1 , 1 , 'x' ) , ( 1 , 1 , 'x' ) , ( 1 , 1 , 'x' ) ; WITH RECURSIVE x ( x ) AS ( SELECT 1 INTERSECT SELECT x + 1 FROM x ) SELECT * FROM x ; WITH RECURSIVE x ( x ) AS ( SELECT 1 EXCEPT SELECT x + 1 FROM x ) SELECT * FROM x ; WITH RECURSIVE x ( x ) AS ( SELECT x FROM x ) SELECT * FROM x ; WITH x ( x ) AS ( SELECT 1 ) SELECT * FROM ( ( SELECT x FROM x ) ) x ; WITH x AS ( SELECT 1 ) INSERT INTO x VALUES ( 1 ) ; WITH x AS ( SELECT 1 ) INSERT INTO x SELECT * FROM x ; SELECT * FROM x ( ARRAY [ 1 , 1 ] , ARRAY [ 'x' , 'x' ] , ARRAY [ 1.000000 ] ) ; CREATE VIEW x AS SELECT * FROM x ( 1 ) ; SELECT x ( 'x' , 1 , FALSE ) , x ( 'x' , 1 , FALSE ) ; SELECT x , x ( x , x / 1 ) FROM x ; SELECT x ( 'x' , 'x' ) LIMIT 1 ; SELECT x ( ARRAY [ 'x' , 'x' ] ) ; INSERT INTO x VALUES ( 'x' , 1 , 'x' , TRUE , 1 , TRUE ) ; INSERT INTO x VALUES ( 1 , ARRAY [ 1 ] , 'x' ) ; SELECT x , x ( x ) FROM x GROUP BY x ORDER BY x ; SELECT x ( x , x + 1 ) FROM x ; SELECT x , x ( x > 1 , x ( x ) , x ( x + 1 ) ) FROM x ; SELECT x , x ( x > 1 , x , x + 1 ) FROM x ; SELECT x ( x ) FROM x ( 1 , 1 ) x ; SELECT x ( x ) OVER ( ORDER BY x ) FROM x ( 1 , 1 ) x ; SELECT x ( 1 , 1 , 1 , 1 ) ; SELECT x ( 'x' , 1 , 1 , 1 , 1 , 1 ) ; SELECT * FROM x ( 'x' , 1 ) ; SELECT x ( 'x' , ARRAY [ 'x' , 'x' ] ) ; SELECT x ( 'x' ) AS x ; SELECT x ( 'x' , 'x' , 'x' , FALSE ) ; SELECT x ( 'x' , 'x' , 'x' , TRUE ) ; UPDATE x SET x = 1 , x = 'x' WHERE x = 1 AND x = 'x' ; SELECT * FROM x WHERE x <= 1 AND x > 1 AND x = 1 ; CREATE TABLE x ( x INT UNIQUE , x INT ) ; UPDATE x SET x = x + 1 WHERE x < 1 ; UPDATE x SET x = 1 , x = 1 ; CREATE TABLE x ( x BOOLEAN NOT NULL ) ; INSERT INTO x VALUES ( TRUE ) ; UPDATE x SET x = TRUE ; UPDATE x SET x = FALSE ; CREATE TABLE x ( x INT , x VARCHAR ) ; INSERT INTO x SELECT x , x ( 'x' , 1 ) , 'x' FROM x ( 1 , 1 ) x ; INSERT INTO x VALUES ( 'x' , 1 , 1 ) , ( 'x' , 'x' , NULL ) ; CREATE VIEW x AS SELECT x , x FROM x ; UPDATE x SET x = 1 WHERE FALSE ; INSERT INTO x VALUES ( 1 , 'x' , 'x' , 'x' , 'x' , 1 ) ; SELECT * FROM x ; SELECT * FROM x ; INSERT INTO x VALUES ( 1 , 'x' ) , ( 1 , 'x' ) , ( 1 , 'x' ) , ( 1 , 'x' ) , ( 1 , 'x' ) , ( 1 , 'x' ) , ( 1 , 'x' ) , ( 1 , 'x' ) , ( 1 , 'x' ) , ( 1 , 'x' ) , ( 1 , 'x' ) , ( 1 , 'x' ) ; INSERT INTO x VALUES ( 'x' , 1 ) , ( 'x' , 1 ) , ( 'x' , 1 ) ; INSERT INTO x VALUES ( 'x' , 1 , 'x' ) ; INSERT INTO x VALUES ( 1 , NULL ) , ( 1 , 1 ) , ( 1 , 1 ) ; INSERT INTO x VALUES ( 1 , NULL ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) ; INSERT INTO x ( x ) SELECT x ( x ) FROM x ; SELECT 'x' AS x , x FROM x ORDER BY x ; INSERT INTO x ( x ) SELECT x ( x ) FROM x WHERE ( x > 1 ) AND ( x < 1 ) ; INSERT INTO x ( x ) SELECT x ( x ) FROM x WHERE ( x >= 1 ) AND ( x <= 1 ) ; SELECT DISTINCT x AS x FROM x ORDER BY 1 ; SELECT x AS x , x ( x ) AS x , x ( x ) AS x FROM x GROUP BY x ORDER BY x , x , x ; SELECT x AS x , ( x ( x ) + 1 ) AS x , ( x ( x ) - 1 ) AS x FROM x GROUP BY x ORDER BY x , x ; SELECT x AS x , x ( x ) + x ( x ) AS x , x ( x ) - 1 AS x FROM x GROUP BY x ORDER BY x , x ; ================================================ FILE: data/fuzz_root/mysql_init_lib/strip_trigger_collect ================================================ CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 1.000000 ) , ( 1 ) , ( 1 ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 1 ) , ( 1.000000 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT 1 , x + 1 , 1 FROM x UNION SELECT DISTINCT * ORDER BY x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x , x AS x NATURAL JOIN x NATURAL JOIN x ORDER BY x ( ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW ALTER TABLE x RENAME TO x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x VALUES ( 'x' ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x VALUES ( 'x' , 1 ) , ( 'x' , 1 ) , ( 'x' , 1 ) , ( 'x' , 1 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x ( * ) ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE INDEX x ON x ( x , x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT DISTINCT * FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT ( x NOT IN ( 1 ) AND x NOT IN ( 1 ) ) , x + x FROM x WHERE x ORDER BY x DESC LIMIT 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 1 ) , ( 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT 1 FROM x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x AS x , x AS x FROM x ORDER BY x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( 'x' ) FROM x WHERE x != x ( 'x' ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE TABLE x ( x INTEGER , x DOUBLE , x INTEGER ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 1 ) , ( 1 , 1 , NULL ) , ( 1.000000 , 'x' , 1 ) , ( 1 , 1 , NULL ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 , NULL ) , ( 1 , 1 ) , ( 1 , 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT * FROM x UNION SELECT * FROM x ORDER BY x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = x ( x ( x , x ) ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT 1 AS x , 1 , 1 = x / 1 , 1 FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x NOT LIKE x ( x ) ) FROM x WHERE x != 1 GROUP BY x ( x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT x FROM x AS x , x AS x NATURAL JOIN x NATURAL JOIN x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x , x AS x NATURAL JOIN x NATURAL JOIN x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( ) , x ( x ) , x ( x ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x ( x , x ) SELECT * FROM x UNION SELECT * FROM x ORDER BY x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = x ( x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x > 1 OR x > 1 AND - x ( 1 ) >= x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT DISTINCT 1 , x + 1 , 1 FROM x UNION SELECT DISTINCT * FROM x ORDER BY x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x % 1 ) FROM x WHERE x != 1 GROUP BY x ( DISTINCT x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 'x' ) , ( 1.000000 ) , ( 'x' ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( x / 1.000000 ) , x ( 1 ) , x ( 1 ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE TABLE x ( x INTEGER PRIMARY KEY CHECK ( - 1.000000 >= x IS NOT NULL ) ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( * ) OVER ( ORDER BY x , x DESC , x ASC , x ASC ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW WITH x AS ( SELECT - 'x' FROM x ) SELECT x FROM x WHERE x = 1 OR x > 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x , x AS x , x LIMIT 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT 1 , x + 1 , * FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 1 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 1 ) , ( 1 , 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = x ( 1 , 1 , x ( x ) ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT 1 FROM x GROUP BY 1.000000 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS WITH x AS ( SELECT x ( DISTINCT 'x' ) AS x FROM x ) SELECT x ( ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x ( x ) OVER ( PARTITION BY x ) FROM x ORDER BY x NULLS LAST ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = x ( x + 1 = x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x BETWEEN ( SELECT DISTINCT x ( * ) OVER ( ) FROM x AS x ) AND x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( 'x' ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT ( SELECT DISTINCT 'x' , 1 , 1.000000 ) LIMIT 1 OFFSET 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x NOT LIKE x ( x ) ) FROM x WHERE x != 1 GROUP BY x ( DISTINCT x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( ) IS NOT NULL , x , x ( x , 1 ) OVER ( ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ( x ( DISTINCT x ) ) , x ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 1 , 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( * ) FROM x WHERE x != 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT 'x' , * FROM x WHERE x IN ( SELECT 'x' FROM x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE TABLE x ( x INT UNIQUE UNIQUE UNIQUE PRIMARY KEY UNIQUE NOT NULL , x INT ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( ) , x ( 1 ) , x ( x ( x ) ) FROM x AS x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = x ( x , x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' / 1 ) , x ( 1 ) , x ( 1 ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = x + x WHERE x = 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = NULL ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x , x FROM x EXCEPT SELECT x , x FROM x WHERE x != 'x' ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x , x AS x , x ORDER BY x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE TABLE x ( x INT , x INT ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ) OVER ( ) IN ( SELECT 1 INTERSECT SELECT 1 ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT * FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x UNION SELECT x FROM x ORDER BY x ( ) OVER x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW ALTER TABLE x RENAME x TO x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x FROM x WHERE x IS NOT NULL ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = NULL WHERE x IN ( SELECT DISTINCT x FROM x WHERE x = x + 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x * x ) OVER ( ORDER BY x DESC , x ASC ) ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x FROM x WHERE x IN ( 1.000000 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x ( ) , x ( 1 ) , x ( 1 ) FROM x AS x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER PRIMARY KEY ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x WHERE ( x = 1 ) OR ( x = 1 ) OR ( x BETWEEN 1 AND 1 ) OR ( x = 1 ) LIMIT 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT DISTINCT x FROM x WHERE x = ( SELECT x ( x ) FROM x WHERE NULL = x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x , x AS x , x AS x NATURAL JOIN x AS x NATURAL JOIN x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x WHERE x = 1 LIMIT 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x AS WITH x AS ( SELECT * FROM x ) SELECT 1 , 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( x ( x , 1 , 1 ) ) , x = x , x = x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x , x = x ( x ) , x ( x ) FROM x GROUP BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = x ( x ( ) ISNULL , x ( x ) , x , x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x NOT LIKE x ( x ) ) FROM x WHERE x != 1 GROUP BY ( x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW DROP TABLE x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x DOUBLE ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT * FROM x AS x , x AS x NATURAL JOIN x NATURAL JOIN x ORDER BY x ( ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT ( 'x' / 1 ) , x ( 1 ) , x ( 1 ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT 'x' , x + 1 , x FROM x UNION SELECT DISTINCT * FROM x ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 1 ) , ( 1 ) , ( 1 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE TABLE x ( x INTEGER PRIMARY KEY , x INT ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x , x WHERE x = x AND x ( 'x' , 1 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x FROM x WHERE ( x = 1 AND ( x = 1 OR x = 1 ) ) OR ( 1 = 1 AND x = 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT 'x' IN ( SELECT DISTINCT x ( DISTINCT x / 1 ) FROM x ORDER BY 1 ) GROUP BY 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE TABLE x ( x INTEGER PRIMARY KEY CHECK ( x ( x ) IS NULL + x IS NOT NULL ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT 1 AS x , 1 LIMIT 1 OFFSET 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT ( x ) FROM x WHERE x = ( x % 1 ) OR ( x = 1 AND x = 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x ) OVER ( ORDER BY x ) FROM x ) WHERE x LIKE x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( 'x' , 1 , 'x' ) GROUP BY 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x AS SELECT NULL FROM x GROUP BY x , ( 1 = 1 AND ( x ( ) % 1 AND 1 ) ) , x >= x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x CHAR ( 1 ) , x DOUBLE , x INTEGER ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x , 1 ) OVER ( ) FROM x WHERE x != 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x ( ) , x ( 1 ) , x ( x ) FROM x GROUP BY x ( ) ISNULL ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( ) ISNULL , x ( 'x' ) , 1 FROM x WHERE x != 1 GROUP BY x ( DISTINCT x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' / 1.000000 ) , x ( 1 ) , x ( 1 ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT ( ( x OR NOT x ) BETWEEN 1 AND 1 ) + x ISNULL FROM x WHERE x != 1 GROUP BY x ( DISTINCT x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT x FROM x WHERE x > 1 OR x = x AND x = 'x' LIMIT 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER , x DOUBLE , x VARCHAR ( 1 ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( x , x ) , x ( 1 ) , x ( x ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT 1 , x + 1 , 1 FROM x INTERSECT SELECT DISTINCT * FROM x ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT x FROM x WHERE ( SELECT x FROM x AS x GROUP BY x ) LIKE 'x' ORDER BY x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE TABLE x ( x FLOAT , x FLOAT ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( ( NOT ( x IS NULL ) ) AND ( NOT ( x IS NULL ) ) ) FROM x WHERE x LIKE 'x' ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x FROM x ORDER BY x , x DESC , x , x LIMIT 1 OFFSET 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT x ( x ( 1 ) , x ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x ( x ) , x ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x SELECT * FROM x LIMIT 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x GROUP BY x UNION SELECT x FROM x ORDER BY 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x VARCHAR ( 1 ) ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT * FROM x NATURAL JOIN x INTERSECT SELECT DISTINCT * FROM x ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x WHERE x IN ( 'x' , 'x' ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT x ( ( NOT ( x IS NULL ) ) AND ( NOT ( x IS NULL ) ) ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x FROM x WHERE x ( ) GROUP BY ( SELECT 1 ) , x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( 'x' , 'x' ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT ( x * 1 ) > x FROM x ON x ( x ) WHERE x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE TABLE x ( x FLOAT , x VARCHAR ( 1 ) ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT 'x' IN ( SELECT x FROM x , x WHERE x = 1 LIMIT 1 ) GROUP BY 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x ) WHERE x != 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , x ( x ) OVER ( PARTITION BY x ORDER BY x DESC NULLS LAST , 'x' ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ) FROM x WHERE x != 1 GROUP BY x ( x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 1 ) , ( 1 , 1 , NULL ) , ( 1.000000 , 'x' , 1 ) , ( 1 , 1 , NULL ) , ( 1.000000 , 'x' , 1 ) , ( 1 , 1 , NULL ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( ( x ( x ( ) ISNULL ) AND x ) , x ( x ) ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x ) FROM x ORDER BY x * 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT DISTINCT 1 AS x , 1 , 1 LIMIT 1 OFFSET 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x AS x , x WHERE x = 1 LIMIT 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x NOT INDEXED NATURAL JOIN x NOT INDEXED ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE UNIQUE INDEX x ON x ( x , x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x ) FROM x ORDER BY CAST ( x AS TEXT ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x > 1 OR x > 1 AND - x ( x NOT LIKE x ( x ) IS NULL + x IS NOT NULL ) >= x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT 'x' AS x , * FROM x WHERE x IN ( SELECT 'x' FROM x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x % 1 ) FROM x AS x WHERE x != 1 GROUP BY x ( DISTINCT x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT ( SELECT x AS x WHERE 1.000000 NOT LIKE 'x' > x ) FROM x ORDER BY x ( x ) OVER ( ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = x ( ( x NOT IN ( 1 ) AND x IS NOT NULL NOT IN ( 1 ) ) , x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT 1 , x / 1 , 1 FROM x UNION SELECT DISTINCT * FROM x ORDER BY x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT * FROM x WHERE x < 'x' ORDER BY x ASC ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT 'x' IN ( SELECT DISTINCT x ( x ) OVER ( ) FROM x ORDER BY 1 ) GROUP BY 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' , x ) , x ( 1 ) , x ( 1 ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x UNION SELECT x FROM x ORDER BY 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x WHERE ( x = x AND x = x AND x = 1 AND x LIKE 'x' ) OR x = 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x , x AS x , x NATURAL JOIN x AS x NATURAL JOIN x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x > 1 OR x = x OR x = 'x' ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( * ) , x ( x ) , x ( x ) FROM x WHERE x = 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x WHERE x ( x <= 'x' ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x ) , x ( x ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x NATURAL JOIN x INTERSECT SELECT DISTINCT * FROM x ORDER BY x DESC NULLS FIRST ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( 1 ) WHERE x IN ( SELECT 'x' FROM x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 'x' ) , ( 1 ) , ( 'x' ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT ( x = 1 OR x = 1 ) FROM x UNION SELECT x FROM x ORDER BY 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT 1 FROM x , x GROUP BY 1.000000 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE TABLE x ( x INTEGER ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' / 1 ) , x ( 1 ) , x ( x ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * , 'x' FROM x WHERE ( x BETWEEN 1 AND 1 ) + x AND ( x = 1 OR x = 1 ) ORDER BY x DESC ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 'x' , 1 ) , ( 'x' , 1 ) , ( 'x' , 1 ) , ( 'x' , 1 ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = ( ( SELECT x FROM x AS x GROUP BY x ) AND x ( x ) IS NULL ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = x ( x ( x NOT LIKE 'x' ) ISNULL , x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = x ( x ( x ) , x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x , x ( x ) , x FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ( ) , 1.000000 , 1 , x ) FROM x ORDER BY x ( * ) OVER ( ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 'x' ) , ( 1 ) , ( 'x' ) , ( 1 ) , ( 'x' ) , ( 1 ) , ( 'x' ) , ( 1.000000 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = x + 1 , x = 1 + x ( ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 1 ) , ( 1 ) ON CONFLICT DO NOTHING ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x WHERE ( x = 1 AND ( x = 1 OR x = 1 ) ) OR ( x = 1 AND x = 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 1 , 1 ) , ( 1 , 1 , NULL ) , ( 1.000000 , 'x' , 1 ) , ( 1 , 1 , NULL ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT DISTINCT x , 'x' FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( ( SELECT x ( x ) FROM x ) ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ) , x FROM x WHERE x ISNULL ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x WHERE x = 'x' OR x = 'x' OR x = 'x' ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x WHERE x = 'x' AND x = 'x' ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x WHERE x = 1 AND x = 1 ORDER BY x DESC NULLS FIRST ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT 1 , x LIKE x , 1 FROM x UNION SELECT DISTINCT * FROM x ORDER BY x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW WITH x AS ( SELECT * ) SELECT x ( x > 'x' ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT 'x' AS x , x ( x , 1 ) OVER ( ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = NULL WHERE x = ( SELECT x WHERE x = x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x ( x ) / 1.000000 AS x , x ( 1 ) , x ( 1 ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ) OVER ( ORDER BY x ) , x FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT * , x IN ( 1 , 1 ) FROM x ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x WHERE x <= 'x' ORDER BY x DESC ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x , x ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x AS x , x ( x ) OVER ( PARTITION BY x ) FROM x AS x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ) , x FROM x WHERE x ( x ) <= 'x' = x ISNULL ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT x , x * 1 AS x , x = x ( 1 ) FROM x AS x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x ) OVER ( PARTITION BY x ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x * x ) FROM x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT x FROM x AS x , x AS x NATURAL JOIN x NATURAL JOIN x ORDER BY x ( ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ) OVER ( ORDER BY x ( x ) , x ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 1 ) , ( 1 ) , ( 1 ) ON CONFLICT DO NOTHING ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x ( x ) , 1 , x ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x , x AS x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x WHERE x IN ( SELECT DISTINCT x FROM x ORDER BY NULL LIMIT 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 1.000000 , 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT CAST ( x ( x / 1 ) AS INTEGER ) FROM x LIMIT 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT ( x % 1 ) FROM x WHERE x != 1 GROUP BY x ( DISTINCT x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 1 ) , ( 'x' ) , ( 1.000000 ) , ( 'x' ) , ( 1.000000 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( x / 1.000000 ) , x ( DISTINCT 1 ) , x ( 1 ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ( 1 ) , x ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x ( x ) OVER ( PARTITION BY x ) FROM x ORDER BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ) OVER ( ORDER BY x , x DESC , x , x ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x UNION SELECT x + 1 FROM x ORDER BY 1 DESC ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x AS SELECT * FROM x UNION SELECT * FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT * FROM x AS x JOIN x ON NULL = 1.000000 NOT LIKE 'x' NATURAL JOIN x ORDER BY x ( ) NULLS LAST ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT 1 , 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x WHERE ( x = 1 AND ( x = 1 OR x = 1 ) ) OR ( x = 1 AND x = 1 ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x > 1 OR x > 1 AND x NOT LIKE - 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x AS x NATURAL JOIN x NATURAL JOIN x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = x ( x ( ) , x ( ) ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x > 1 OR 'x' > 1 AND - x ( 1 ) >= x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 1 ) , ( 1 , 1 , NULL ) , ( 1.000000 , 'x' , 1 ) , ( 1 , 1 , NULL ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 , NULL ) , ( 1.000000 , 'x' , 1 ) , ( 1 , 1 , NULL ) , ( 1 , 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x AS SELECT x FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT * FROM x , x WHERE x = x AND x = 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 'x' ) , ( 1.000000 ) , ( 'x' ) , ( 1.000000 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( DISTINCT x ) , x FROM x WHERE x ISNULL GROUP BY x NOT LIKE x ( x ) ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ( * ) , x ) FROM x ORDER BY x NULLS LAST ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT DISTINCT x ( * ) ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x VALUES ( 'x' , 'x' , 1 ) , ( 'x' , 'x' , 1 ) , ( 'x' , 'x' , 1 ) , ( 'x' , 'x' , 1 ) , ( 'x' , 'x' , 1 ) , ( 'x' , 'x' , 1 ) , ( 'x' , 'x' , 1 ) , ( 'x' , 'x' , 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x % 1 ) FROM x WHERE x != 1 GROUP BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( x / 1.000000 ) , x ( 1 ) , x ( x ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x NATURAL JOIN x UNION SELECT DISTINCT * FROM x ORDER BY x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x NOT LIKE x , x FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT DISTINCT * FROM x NATURAL JOIN x WHERE x = x AND x = 1 ORDER BY x ( ) NULLS LAST LIMIT 1 OFFSET 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x NOT LIKE x ( ) ) FROM x WHERE x != 1 GROUP BY x ( x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = x ( 1 >= ( SELECT x ( * ) FROM x ) ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT ( x % 1 ) = 1 FROM x NOT INDEXED NATURAL JOIN x NOT INDEXED ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT * FROM x NATURAL JOIN x UNION SELECT DISTINCT * FROM x ORDER BY x DESC ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x FROM x WHERE x = ( SELECT x FROM x WHERE x = x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 1 , 1 ) , ( 1 , NULL ) , ( 1 , 'x' ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x ( x ) OVER ( PARTITION BY x ORDER BY x DESC , 'x' ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x ( x ) , x ( 1 ) , x ( 1 ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ) , x ( x ) , 'x' FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( ) AS x FROM x WHERE x = 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE TABLE x ( x CHAR ( 1 ) , x CHAR ( 1 ) PRIMARY KEY ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT * FROM x AS x , x AS x , x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x ( ) , 1 , 1 , x ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) SELECT x ( x * 1 + 1 , 1 ) , x + x FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( 'x' ) FROM x WHERE x != 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 1.000000 ) , ( 1 ) , ( 1.000000 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x ( x % 1 ) OVER ( ORDER BY x ) , 1 ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT 'x' , * FROM x WHERE x IN ( SELECT 'x' FROM x GROUP BY x HAVING 1.000000 + 1.000000 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT 'x' , x ( x ) FROM x WHERE x IN ( 'x' ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT 'x' IN ( SELECT DISTINCT x ( x , x ) FROM x ORDER BY 1 ) GROUP BY 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT DISTINCT * FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE NULL BETWEEN ( SELECT x AS x FROM x AS x GROUP BY x ) AND 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT DISTINCT x , x ( * ) OVER ( ORDER BY x DESC , x ASC ) , x * x FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x , x AS x JOIN x NATURAL JOIN x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 1 ) , ( 1 , 1 , NULL ) , ( 1.000000 , 'x' , 1 ) , ( 1 , 1 , NULL ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ( x ) OVER ( ORDER BY x ) , 1 ) FROM x WHERE x IS NOT NULL ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 'x' ) ON CONFLICT DO NOTHING ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = 1 + ( SELECT x FROM x AS x WHERE x = 'x' OR x = 'x' OR x = 'x' GROUP BY x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x , x WHERE x = x AND x = 1 ORDER BY x DESC , x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER , x VARCHAR ( 1 ) , x VARCHAR ( 1 ) ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT DISTINCT 1 , x + 1 , 1 FROM x UNION SELECT DISTINCT * FROM x ORDER BY x NULLS LAST ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( ) WHERE ( SELECT x , * FROM x WHERE x GROUP BY x ORDER BY x DESC NULLS FIRST ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT * FROM x NOT INDEXED NATURAL JOIN x UNION SELECT DISTINCT * FROM x ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( ( SELECT x FROM x AS x GROUP BY x ) AND x ( 1 = 1.000000 ) IS NULL ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT ( x ( x ) = x OR x = 1 ) NOT LIKE 'x' FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x FROM x UNION SELECT * FROM x WHERE ( x ) <= 'x' LIMIT 1 OFFSET 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = x ( x ( DISTINCT x ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT 1 FROM x , x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ( DISTINCT x ) , x ) FROM x ORDER BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( NULL ) , ( NULL ) , ( 1 ) , ( NULL ) , ( NULL ) ON CONFLICT DO NOTHING ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = x * 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( * ) GROUP BY 1 HAVING 1.000000 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE TABLE x ( x FLOAT , x CHAR ( 1 ) ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x FROM x WHERE x > 1 GROUP BY x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x , x ( 1.000000 ) ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER PRIMARY KEY CHECK ( x ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT * FROM x AS x UNION SELECT * FROM x ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x NATURAL JOIN x UNION SELECT DISTINCT * FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW WITH x AS ( SELECT * FROM x ) SELECT x ( x ( 1 ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x , x AS x NATURAL JOIN x AS x NATURAL JOIN x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT 1 AS x , 1 , 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( DISTINCT 'x' / 1 ) , x ( x ) , x ( 1 ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' / x ) , x ( 1 ) , x ( 1 ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x , x ( x ) FROM x GROUP BY x HAVING x < 'x' ORDER BY x DESC NULLS FIRST ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT * FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x , CAST ( x AS TEXT ) , x FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 1 , 1 ) , ( 1 , 1 , NULL ) , ( 1.000000 , 'x' , 1 ) , ( 1 , 1 , NULL ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x ( x ) , 1 ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = x ( x ( DISTINCT x ) , 1 , ( x NOT IN ( 1 ) AND x NOT IN ( 1 ) ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( DISTINCT x * x ) FROM x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) SELECT x , x FROM x WHERE x < 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE TABLE x ( x INTEGER UNIQUE ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 'x' ) , ( 1 ) , ( 'x' ) , ( 1 ) , ( 'x' ) , ( 1.000000 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = x ( x ( ) , 1 , x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT 1 AS x , 1 , 1 GROUP BY x ( ) HAVING x ( ) OVER ( ) ORDER BY x ( ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT ( SELECT x ( ) FROM x WHERE x = 'x' ) FROM x LIMIT 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x NOT INDEXED NATURAL JOIN x NOT INDEXED ORDER BY x ( x , 1 , 1 ) + 1.000000 DESC ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS WITH x AS ( SELECT * FROM x ) SELECT x FROM x WHERE x = 1.000000 + 1.000000 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT 'x' , * FROM x AS x WHERE x IN ( SELECT 'x' FROM x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x , x ( x ) OVER ( ORDER BY x ) FROM x GROUP BY x ORDER BY x DESC ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x , x IN ( 1 , 1 ) FROM x ORDER BY x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT * FROM x WHERE x < 1 ORDER BY x DESC ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( ) INTERSECT SELECT 1 ORDER BY x ( ) OVER ( ) , 1 , 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT 1 WHERE x != 'x' ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT ( SELECT x FROM x WHERE x = x ) FROM x AS x GROUP BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT 'x' AS x , 'x' , 'x' , 1 , 1 LIMIT 1 OFFSET 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = CASE WHEN x = 1 THEN x ELSE x + 1 END ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x NATURAL JOIN x UNION SELECT DISTINCT * FROM x ORDER BY x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS WITH x AS ( SELECT x WHERE x = 1 OR ( x = x AND x = 1 ) ) SELECT x ( ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , x ( x ) OVER ( PARTITION BY x ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT 1 , NOT 1.000000 , 1 FROM x UNION SELECT DISTINCT * FROM x ORDER BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ( x ) ) , x ( x ) , 'x' FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x FROM x WHERE x = 1.000000 + 1.000000 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x <= 'x' ) FROM x UNION SELECT x FROM x ORDER BY 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x FROM x ORDER BY x DESC LIMIT 1 OFFSET 1 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x ) OVER ( ) , x ( x ) OVER ( ORDER BY x DESC , x ASC ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( * ) OVER ( ORDER BY x ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = x ( * , x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) SELECT * FROM x INTERSECT SELECT * FROM x ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = x ( ( SELECT x ( 'x' + x ( DISTINCT x ( x ) ) ) FROM x ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( ) FROM x ORDER BY x * 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x + 1 , x ( 1 ) , x + 1 , x ( 1 ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( * ) OVER ( ORDER BY x , x ) FROM x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( * ) FROM x WHERE ( SELECT x WHERE x = x GROUP BY x , x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 1.000000 ) , ( 1 ) , ( 1 ) ON CONFLICT DO NOTHING ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * , 'x' FROM x WHERE ( x BETWEEN 1 AND 1 ) + x AND ( x = 1 OR x = ( x % 1 ) ) ORDER BY x DESC ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT * FROM x WHERE x <= 'x' ORDER BY x ( ) NULLS LAST ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 1 ) , ( 'x' ) , ( 1 ) , ( 1 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT * FROM x NOT INDEXED NATURAL JOIN x NOT INDEXED ORDER BY x ( x , 1 ) OVER ( ORDER BY x ) + 1.000000 DESC ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( 1 ) OVER ( ORDER BY x ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) SELECT x ( x * 1 + 1 , 1 ) , x + 1 FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( 'x' ) OVER ( ORDER BY x ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x WHERE ( x = 1 AND 1 ) OR x = 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 1 ) , ( 1 , 1 , NULL ) , ( 1.000000 , 'x' , 1 ) , ( 1 , 1 , NULL ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1.000000 , 'x' , 1 ) , ( 1 , 1 , NULL ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT 1 AS x , 1 , 1 GROUP BY x ( ) HAVING x ( ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT ( SELECT x ( x ) FROM x WHERE x = 'x' ) FROM x LIMIT 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT * FROM x AS x , x AS x USING ( x , x ) , x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT * AS x FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x WHERE x = 'x' OR x = 'x' OR x = 'x' ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x WHERE x IN ( 1 , 1 ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT 1 , x + x , 1 FROM x UNION SELECT DISTINCT * FROM x ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( * ) OVER ( ORDER BY x ) , x FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x * ( SELECT 1 ) + x ) FROM x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x AS x WHERE ( ( x OR NOT x ) OR x = 1 ) NOT LIKE 'x' OR x > 1 AND NOT x LIMIT 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW DROP TRIGGER x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 'x' ) , ( 1 ) , ( 'x' ) , ( 1.000000 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x AS WITH x AS ( SELECT x ( x ) AS x FROM x INDEXED BY x ) SELECT 1 , 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT * FROM x AS x , x AS x , x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x WHERE ( ( SELECT x FROM x WHERE x ) AND 1 ) OR x = 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x FROM x AS x WHERE x ( ) GROUP BY ( SELECT 1 ) , x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x ( x ) FROM x GROUP BY x ORDER BY 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x % 1 ) FROM x WHERE 'x' != 1 GROUP BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT 1 FROM x WHERE x IN ( 1 , 1 ) AND x IN ( 1 , 1 , NULL , 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW DROP TRIGGER IF EXISTS x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT DISTINCT 1 AS x , 1 , 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x AS x , x AS x NATURAL JOIN x NATURAL JOIN x GROUP BY NULL ORDER BY x ( ) NULLS LAST ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT CASE 1 WHEN 1 THEN 'x' ELSE 'x' END ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( * ) FROM x WHERE x > 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT ( SELECT x FROM x ORDER BY x DESC LIMIT 1 OFFSET 1 ) WHERE x ORDER BY x DESC LIMIT 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( 1 ) , x ( 1 ) , x ( 1 ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x % 1 ) FROM x WHERE x != 1 GROUP BY x ( DISTINCT 'x' ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( DISTINCT x ( ) , x ) ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x AS WITH x AS ( SELECT x ( 'x' ) AS x FROM x ) SELECT 1 , 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS WITH x AS ( SELECT x ( ) OVER ( x ) FROM x ) SELECT * AS x FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x = 1 OR ( SELECT x FROM x AS x GROUP BY x + 1 , x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( * ) FROM x WHERE x BETWEEN 1 AND 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x IN ( 1 , 1 ) AND x NOT IN ( 1 , 1 ) AND x = 1 AND x = 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( ( x NOT IN ( 1 ) AND x NOT IN ( 1 ) ) , x ) FROM x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x = 1 OR ( x = 1 AND x = ( SELECT x ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT DISTINCT x ( x , x , 'x' >= x IS NOT NULL , x ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x NATURAL JOIN x UNION SELECT DISTINCT * FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x , x WHERE 1 = x AND x = 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x JOIN x NATURAL JOIN x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( ) , x ( 1 ) , x ( x ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( ) IS NOT NULL FROM x WHERE ( x ) GROUP BY x HAVING x > 'x' ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = x , x = x , x = x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x > 1 OR x > 1 AND - x ( ( - 'x' >= x AND x = 1 ) ) >= x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = x ( x ( 1 ) , x , x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x , x ) FROM x WHERE x ( x ( x , x ) ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x , x AS x USING ( x , x ) NATURAL JOIN x NATURAL JOIN x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT * FROM x ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT 1 AS x , 1 , 1 GROUP BY x ( ) HAVING x ( ) ORDER BY x ( ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT ( SELECT DISTINCT x AS x , x , 1 , 1.000000 ) LIMIT 1 OFFSET 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x VALUES ( 1 ) ON CONFLICT DO NOTHING ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT NULL , x FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT * FROM x , x WHERE x = 1 AND x IN ( x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 1 ) , ( 1 ) , ( 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x BETWEEN ( SELECT DISTINCT x ( * ) OVER ( ) FROM x AS x GROUP BY 1 HAVING 1.000000 ) AND x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 1 ) , ( 1 , 1 , NULL ) , ( 1.000000 , 'x' , 1 ) , ( 1 , 1 , NULL ) , ( 1 , 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x FROM x WHERE x = 1 AND x >= 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT * FROM x , x WHERE x ( x ) <= 'x' = x AND x = 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER PRIMARY KEY UNIQUE , x INT ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT * FROM x NATURAL JOIN x NATURAL JOIN x ORDER BY x ( ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * , x IN ( x ( x ) , x , 1 ) FROM x ORDER BY x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT * FROM x NATURAL JOIN x NATURAL JOIN x ORDER BY 1.000000 DESC ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x SELECT * FROM x UNION SELECT x ( 'x' ) FROM x ORDER BY x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( 1 , 1 , NULL , x ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 'x' , 1 ) , ( 'x' , 1 ) , ( 'x' , 1 ) , ( 'x' , 1 ) , ( 'x' , 1 ) , ( 'x' , 1 ) , ( 'x' , 1 ) , ( 'x' , 1 ) , ( 'x' , 1 ) , ( 'x' , 1 ) , ( 'x' , 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT x ( x ) OVER ( ) FROM x AS x , x AS x JOIN x NATURAL JOIN x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x ( x * x ) AS x , 1 , 1 AS x , 1 LIMIT 1 OFFSET 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT * FROM x JOIN x ON x = x USING ( x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x WHERE ( x < x ( x , x ) IS NOT NULL AND x = 1 ) OR x = 1 ORDER BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x >= x ) FROM x WHERE x LIKE 'x' ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x AS WITH x AS ( SELECT x ( ) OVER ( x ) FROM x ) SELECT 1 , 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x >= x ) FROM x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE TABLE x AS SELECT x ( ) INTERSECT SELECT 1 ORDER BY x ( ) NULLS LAST ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = 1.000000 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT 'x' , * FROM x WHERE x IN ( SELECT CAST ( x ( x ) AS DOUBLE ) ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT * FROM x WHERE x NOT IN ( 1 ) ORDER BY x , x DESC , x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x , x ORDER BY x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x AS SELECT x , x FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT DISTINCT 'x' IN ( SELECT DISTINCT x ( DISTINCT x ) OVER ( ) FROM x ORDER BY 1 ) GROUP BY 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x WHERE x IN ( 1.000000 ) ORDER BY x ( ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT 1 AS x , 1 , 1 FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x INT PRIMARY KEY CHECK ( x ( x ( ( NOT ( x IS NULL ) ) AND ( NOT ( x IS NULL ) ) ) ) IS NULL + x IS NOT NULL ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x WHERE x LIKE 'x' ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW WITH x AS ( SELECT - 'x' FROM x ) SELECT x FROM x WHERE x = 1 OR x = 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x AS SELECT x ( ) INTERSECT SELECT 1 AS x ORDER BY 1 , 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT DISTINCT x ( x ( x ) , x , 'x' >= x IS NOT NULL , x ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x WHERE x IN ( SELECT DISTINCT x FROM x ORDER BY x LIMIT 1 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x ( ) , NULL , NULL , x ) FROM x ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT * FROM x WHERE x IN ( 1 ) AND x IN ( 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( 1 ) , x FROM x WHERE x IS NOT NULL ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = x ( x , 1 , x ( 1 ) ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 'x' ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x AS x JOIN x ON NULL = 1.000000 NOT LIKE 'x' WHERE x LIKE 'x' ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT DISTINCT x ( x , x , NULL , x ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( x = 1 OR x = 1 ) NOT LIKE 'x' ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT ( SELECT x FROM x ) , 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = NULL WHERE x = ( SELECT x FROM x ON x ( x ) WHERE x = x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' / 1 ) , x ( x ) , x ( 1 ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x , x ( DISTINCT x ) FROM x GROUP BY x HAVING x < 'x' ORDER BY x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT * FROM x , x WHERE x = x AND x = 1 ORDER BY x DESC , 'x' ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' / 1 ) , x ( 'x' ) , x ( x ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( * ) OVER ( ) , 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT 1 AS x , 1 , x ( ) ISNULL , 1 ORDER BY x ( ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 1 ) , ( 1 , 1 , NULL ) , ( 1.000000 , 'x' , 1 ) , ( 1 , 1 , NULL ) , ( 1.000000 , 1 , 1 ) , ( 1 , 1 , NULL ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT 'x' , * FROM x WHERE x IN ( SELECT x FROM x WHERE x OR x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = 1.000000 , x = x , x = x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x ( ) , 1 , 1 ) FROM x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x BETWEEN ( SELECT DISTINCT x ( * ) FROM x AS x GROUP BY x ) AND x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x INT PRIMARY KEY ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = NULL WHERE ( SELECT x FROM x AS x GROUP BY x ( ) , 1 , 1 , x , x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE TABLE x ( x VARCHAR ( 1 ) , x INTEGER ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT DISTINCT x , x * 1 AS x , x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 1 , 1 ) , ( 'x' , 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT x ( x ) , x ( x ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x ) OVER ( ORDER BY x ) FROM x AS x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT x ( x <= 'x' ) FROM x UNION SELECT x FROM x ORDER BY 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT 1 , 1 + 1 , 1 FROM x UNION SELECT DISTINCT * FROM x ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( x * 1 ) , x ( 1 ) , x ( 'x' ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x , x ( x ( ) ) ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = x * 1 WHERE NULL BETWEEN ( SELECT x FROM x AS x GROUP BY - 'x' >= x ) AND 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( ( SELECT x FROM x AS x WHERE x IN ( 'x' ) GROUP BY x ) ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x ) , x FROM x WHERE x < x ( x , x ) IS NOT NULL = x ISNULL ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 1.000000 ) , ( 'x' ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ( ) , x , NULL , x ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = x ( x ( x , 1 , 1 ) ) , x = x , x = x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x AS SELECT 1 , 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT DISTINCT x ( 'x' / 1 ) , x ( 1 ) , x ( 1 ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT ( x NOT IN ( 1 ) AND x NOT IN ( 1 ) ) , x + x AS x FROM x WHERE x ORDER BY x DESC LIMIT 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 1.000000 ) , ( 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x WHERE 1 > x OR ( 1 = x AND x = 1 ) AND ( 1 < x AND x = 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , x ( x ) OVER ( PARTITION BY x ( x , x ) ) FROM x ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = x ( x ( x ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x WHERE ( x LIKE 'x' ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 'x' ) , ( 1 ) , ( 1.000000 ) , ( 1.000000 ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x JOIN x NATURAL JOIN x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x FROM x AS x GROUP BY x ( 'x' ) , x , x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x , 1 ) OVER ( ORDER BY ( x > 1 OR x > 1 AND NOT x ) ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x ) , x ( x ) , x ( x ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT DISTINCT * FROM x NATURAL JOIN x WHERE x = 'x' AND x BETWEEN 1 AND 1 ORDER BY x LIMIT - 'x' OFFSET 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x WHERE ( 1 = 1 AND x = 1 ) OR x = 1 ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x ) OVER ( ORDER BY x ) FROM x AS x ) WHERE x LIKE 'x' ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x , x AS x , x AS x ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( ) AS x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x AS SELECT x ( * ) , x ( DISTINCT x ) , x ( DISTINCT x ) , x FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( ) IS NOT NULL FROM x WHERE x ( x <= 'x' ) GROUP BY x HAVING x > 'x' ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 1 ) , ( 1 , 1 , NULL ) , ( 1 , 1 , NULL ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT * FROM x AS x , x AS x NATURAL JOIN x NATURAL JOIN x ORDER BY x ( ) NULLS LAST ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x WHERE x >= 1 AND x < 1 ORDER BY x DESC ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x ) OVER ( ) AS x FROM x GROUP BY NOT x > 'x' ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 'x' ) , ( 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT x , * FROM x ORDER BY x , x DESC , x NULLS LAST ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( 1.000000 , 1.000000 ) WHERE x IN ( 1 , 1 ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT 1 , 1 FROM x ON x ( x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x NATURAL JOIN x UNION SELECT DISTINCT * FROM x ORDER BY x + 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT CAST ( 'x' AS INTEGER ) FROM x WHERE x IS NOT NULL ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , x ( x ) FROM x GROUP BY x ( 1 ) HAVING x < 'x' ORDER BY x DESC ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x FROM x JOIN x USING ( x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x > 1 OR x > 1 AND x IS NULL + x IS NOT NULL >= x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( x , x ) , x ( 1 ) , x ( 1 ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW WITH x AS ( SELECT * FROM x ) SELECT x ( x , 1 ) OVER ( ORDER BY x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT x ( ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( ( SELECT x FROM x WHERE x = 1 ) ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT ( SELECT DISTINCT 'x' , 1 , 1.000000 ) GROUP BY x ( 'x' , 1 ) <= 'x' LIMIT 1 OFFSET 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x WHERE x ( x , x ) AND x = 1 OR x = 'x' ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * , x IN ( 1.000000 * x ( x ) , x , x , 1 ) FROM x ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x < x ( x , 1 , 'x' ) AS x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x VALUES ( 1.000000 , 1.000000 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x AS SELECT x ( * ) OVER ( ORDER BY x DESC , x ASC ) FROM x GROUP BY x , x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( ) IS NOT NULL FROM x WHERE x ( ( x = 1 OR x = 1 ) ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( * ) , x ( x ) , x ( x ) , x FROM x WHERE NULL ISNULL ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE TABLE x AS SELECT CASE WHEN x NOT IN ( NULL , 1 , 1 ) OR x = 1 THEN 'x' ELSE 'x' END FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x AS x , x ( x ) , 'x' FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT 1 FROM x WHERE 1 < x ORDER BY CAST ( x AS TEXT ) LIMIT 1 OFFSET 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x AS WITH x AS ( SELECT * FROM x , x AS x ) SELECT 1 , 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x VALUES ( 1 , 1.000000 , 1.000000 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x UNION SELECT 1.000000 * x ( x ) FROM x LIMIT 1 OFFSET 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT 1 , x + 1 , 1 FROM x UNION SELECT DISTINCT * FROM x ORDER BY x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( ( x = x AND 1 ) ) OVER ( ORDER BY x ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x WHERE ( x = x AND ( x = 1 OR - 'x' >= x ) ) OR ( x = 1 AND x = 1 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x % 1 ) FROM x AS x WHERE x != x GROUP BY x ( DISTINCT x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT DISTINCT 1 , x + 1 , 1 FROM x UNION SELECT DISTINCT * FROM x ORDER BY x DESC ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x NOT LIKE x ( ) ) , x FROM x GROUP BY 'x' , x ( x ) , x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT x FROM x ORDER BY x , x DESC LIMIT 1 OFFSET 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER PRIMARY KEY CHECK ( NOT ( x >= x ) ) ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = NULL WHERE x = ( SELECT x FROM x WHERE x = x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE 1 > x OR x > 1 AND - x ( 1 ) >= x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' / x ) , x ( x ) , x ( 1 ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT ( SELECT DISTINCT x NOT LIKE 'x' , 1 , 1.000000 ) LIMIT 1 OFFSET 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT x ( ) AS x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x WHERE ( SELECT 1 ) = 1 OR x = 'x' OR x = 'x' ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = NULL WHERE x < ( SELECT ( x ( 1 ) ) WHERE x IN ( SELECT x WHERE x OR x ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT x ( ( SELECT CAST ( x ( DISTINCT x ) AS DOUBLE ) ) ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x NATURAL JOIN x NATURAL JOIN x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x ( x ) , x ( ) , x ( 1 ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x VALUES ( 'x' ) , ( 1 ) , ( 'x' ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE INDEX x ON x ( x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x CHAR ( 1 ) PRIMARY KEY , x VARCHAR ( 1 ) ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x VALUES ( NULL , 1 ) , ( NULL , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 'x' , 1 ) , ( 'x' , 1 ) , ( 'x' , 1 ) , ( 'x' , 1 ) , ( 'x' , 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT DISTINCT * FROM x AS x , x AS x JOIN x NATURAL JOIN x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT 1 AS x , 1 , 1 GROUP BY x ( x ( 'x' ) ) HAVING x ( ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 1 , NULL , 1 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x AS WITH x AS ( SELECT * FROM x ) SELECT CAST ( x ( ) AS DOUBLE ) WHERE x ( ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT DISTINCT * FROM x AS x , x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x AS x , x AS x , x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = x ( ( x ( 'x' ) = 1 OR x = x ) NOT LIKE 'x' , x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 'x' ) , ( 1 , 'x' ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT * FROM x WHERE x = 'x' AND x = 'x' LIMIT 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT 1 FROM x WHERE x != 'x' GROUP BY x ( 'x' , 1 ) <= 'x' ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT * FROM x AS x , x AS x NATURAL JOIN x NOT INDEXED ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( NULL , 1 ) , ( NULL , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 'x' , 1 ) , ( 'x' , 1 ) , ( 1 , 1 ) , ( 'x' , 1 ) , ( 'x' , 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x WHERE x OR 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x ) OVER ( ORDER BY x ) , x FROM x WHERE x ISNULL ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x FROM x WHERE x = 1 ORDER BY x DESC ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = x ( x ( ( SELECT x FROM x AS x GROUP BY x ( ) ISNULL , x ) ) ISNULL , x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x ( x , 1 ) OVER ( PARTITION BY x ORDER BY x ) FROM x GROUP BY 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( * ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE TABLE x ( x INTEGER , x INT , x INTEGER ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = 1 * 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x NOT LIKE x ( x ) , 1 , 1 ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT - 'x' , 1 FROM x UNION SELECT DISTINCT * FROM x ORDER BY x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x NOT LIKE x , x FROM x ORDER BY x + x ( * ) , x NULLS LAST ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 'x' ) , ( 1 ) , ( 1 ) , ( 1.000000 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT 'x' , 'x' , x ( x , 1 ) OVER ( ) FROM x WHERE x IS NOT NULL ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x SELECT DISTINCT * FROM x NATURAL JOIN x WHERE x = x AND x = 1 ORDER BY x LIMIT - 'x' OFFSET 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x WHERE x IN ( 1 , 1 ) ORDER BY x DESC ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( 1 , 1 , x ) FROM x ORDER BY x DESC ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW WITH x AS ( SELECT * FROM x ) SELECT x ( x ) , x FROM x WHERE x ISNULL ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT ( SELECT 1 ) = 1 LIMIT 1 OFFSET 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 'x' ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * , 'x' FROM x WHERE x = 1 AND ( x = 1 OR x = 1 ) ORDER BY x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT 1 FROM x WHERE x != 'x' ) WHERE x = ( SELECT x FROM x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = x ( x ( x ) , x ( x ) , x ( x ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , x FROM x WHERE - 'x' >= x IS NOT NULL ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x SELECT * FROM x UNION SELECT * FROM x ORDER BY 1 , 1 DESC ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( * ) OVER ( ORDER BY x ( x ( * ) ) , x ASC ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( ) ISNULL FROM x WHERE x != 1 GROUP BY x ( DISTINCT x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x NOT LIKE ( x ) ) FROM x WHERE x != 1 GROUP BY x ( x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( NULL ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x UNION SELECT 1.000000 * x ( x ) FROM x ORDER BY 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ( 'x' ) OVER ( ORDER BY x ) , 1 ) FROM x WHERE x IS NOT NULL ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x AS x WHERE ( x = 1 ) OR ( x = 1 ) OR ( x BETWEEN x AND 1 ) OR ( x = 1 ) LIMIT 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( * ) OVER ( ORDER BY x DESC , 'x' ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = NULL WHERE x = ( SELECT x AS x FROM x WHERE x = x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x , x AS x , x USING ( x , x ) LIMIT 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x , x ( x ( x , 1 , 1 ) ) ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = NULL WHERE x = ( SELECT x FROM x WHERE x ( 'x' ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x = 1 OR x < 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT * FROM x UNION SELECT * FROM x ORDER BY x DESC NULLS FIRST ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x AS x FROM x GROUP BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT DISTINCT x ( 'x' / 1 ) , x ( x ) , x ( 1 ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER NOT NULL , x INTEGER ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = NULL WHERE ( SELECT x FROM x WHERE ( 'x' ) ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x AS SELECT x AS x , x + 1 AS x FROM x ( x , x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT 1 FROM x WHERE x != 'x' ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( ) ISNULL FROM x WHERE x != 1 GROUP BY x ( 1 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x , 1 ) OVER ( ORDER BY - 1 DESC ) FROM x WHERE x LIKE 'x' ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE TABLE x ( x FLOAT PRIMARY KEY ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x = ( SELECT x ( x ) OVER ( ) FROM x ) OR x = 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( * ) FROM x AS x , x AS x , x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x AS WITH x AS ( SELECT * FROM x AS x , x AS x ) SELECT 1 , 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( 1 ) OVER ( ORDER BY x DESC , x ASC ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * , x IN ( 1 , 1 ) FROM x ORDER BY x NULLS LAST ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x ( 1 ) , x ( 1 ) , x ( x ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x , 1 , NULL , x ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x CHAR ( 1 ) PRIMARY KEY CHECK ( x ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( ) FROM x AS x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( ) IS NOT NULL FROM x WHERE x ( x ) GROUP BY x ( ) , 1 , 1 HAVING x > 'x' ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT DISTINCT NULL FROM x , x AS x , x USING ( x , x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT 1 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE TABLE x ( x TEXT ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = x ( x BETWEEN 1 AND 1 ) + x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = x ( x ( x ( x ) , 1 ) ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE TABLE x ( x INTEGER UNIQUE UNIQUE UNIQUE PRIMARY KEY UNIQUE NOT NULL ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x FROM x WHERE ( x = 'x' AND x BETWEEN 1 AND 1 ) OR ( x = 1 AND x = 1 ) ORDER BY 1.000000 DESC ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER PRIMARY KEY UNIQUE ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT DISTINCT 1 , x + 1 , x FROM x UNION SELECT DISTINCT * FROM x ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x FROM x NATURAL JOIN x WHERE x = 1 AND x <= x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( * ) OVER ( ORDER BY ( SELECT x ORDER BY 1 ) ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ( ) , 1.000000 , 1 , x ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x INT , x CHAR ( 1 ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 1 , 1 ) ON CONFLICT DO NOTHING ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE TABLE x ( x CHAR ( 1 ) ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x FROM x , x JOIN x USING ( x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( * ) FROM x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x FROM x NATURAL JOIN x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 1 ) , ( 'x' ) , ( 1.000000 ) , ( 'x' ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' / 1.000000 ) , x ( 1 ) , x ( 'x' ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ) OVER ( ORDER BY CAST ( x AS FLOAT ) , x ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x NATURAL JOIN x NATURAL JOIN x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT DISTINCT * FROM x NATURAL JOIN x ORDER BY x LIMIT 1 OFFSET 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x + 1 < 1 ) , x FROM x WHERE x ISNULL ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = x ( x ( ) ISNULL , x , x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x , x AS x NATURAL JOIN x NATURAL JOIN x ORDER BY x ASC , x DESC ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x , x ORDER BY x DESC , 'x' ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x + 1 , x ( 1 ) , x FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( x ) FROM x WHERE x = 1 AND x = 1 AND x = 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x ( x ) , 1 , 1 , x ) FROM x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT x , x ( 'x' ) , x FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 1 , 'x' , 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x NOT LIKE x ( x ) ) FROM x WHERE x != 1 GROUP BY x ( ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' / 1 ) , x ( 1 ) , x ( * ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( DISTINCT NOT x ( x , x ) , x ) FROM x AS x ORDER BY x NULLS FIRST ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = NULL WHERE x NOT LIKE 'x' ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x ) OVER ( ORDER BY x NULLS LAST ) FROM x WHERE x != 1 GROUP BY x ( DISTINCT x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x AS SELECT * FROM x UNION SELECT * FROM x ORDER BY x , x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x AS x , x AS x JOIN x NATURAL JOIN x ORDER BY x ( ) NULLS LAST ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x FROM x WHERE x LIKE 'x' OR x > 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT DISTINCT 1 , NULL , 1 , 1 , x ( 'x' ) LIMIT 1 OFFSET 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x ) SELECT x FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( * ) OVER ( ORDER BY x ( x ) , x ASC ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER , x DOUBLE , x CHAR ( 1 ) ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = x ( 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ) , x + 1 = x , 'x' FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( ) FROM x WHERE x != 1 GROUP BY x ( x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = 1 WHERE x = 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT * FROM x ORDER BY x ( x , 1 ) OVER ( ORDER BY x ) + 1.000000 DESC ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 1.000000 , 'x' , 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' / 1 ) , x ( x ) , x ( x ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT 'x' IN ( SELECT * FROM x , x WHERE x < x ORDER BY 1 ) GROUP BY 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT 1 AS x , x ( x ) , 1 = x / 1 , 1 FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE 1 = 1 AND ( x ( ) % 1 AND 1 ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT ( SELECT DISTINCT 'x' , ( x >= x ) , 1 , 1.000000 ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 'x' ) , ( 1.000000 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( * ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = x , x = x ( ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x WHERE x ( x ) = 1 OR x ( x ) = 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x TEXT NOT NULL ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT x ( x * x ) AS x FROM x USING ( x , x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 'x' , 1 , 1 ) , ( 1 , 'x' , 1 , 1 ) , ( 1 , 'x' , 1 , 1 ) , ( 1 , 'x' , 1 , 1 ) , ( 1 , 'x' , 1 , 1 ) , ( 1 , 'x' , 1 , 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT 1 FROM x UNION SELECT x + 1 FROM x ORDER BY 1 DESC ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( NULL ) , ( NULL ) , ( NULL ) , ( NULL ) , ( NULL ) , ( NULL ) , ( NULL ) , ( NULL ) , ( NULL ) , ( NULL ) , ( NULL ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x > 1 OR x > 1 AND - x ( ) >= x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT 1 FROM x WHERE x != ( SELECT 1 FROM x WHERE * = x ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , x ( ) OVER ( ORDER BY x DESC ) FROM x ORDER BY x ( x ) OVER ( ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( 1.000000 ) FROM x WHERE x != 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 'x' ) , ( 1 ) , ( 'x' ) , ( 1 ) , ( 'x' ) , ( 1 ) , ( 'x' ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( * ) OVER ( ORDER BY x ) FROM x WHERE x != 1 GROUP BY x ( DISTINCT x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW WITH x AS ( SELECT * FROM x ) SELECT 'x' AS x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x WHERE EXISTS ( SELECT * FROM x WHERE x = x ) ORDER BY x * 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ( x ( x , 1 , 1 ) ) ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x FLOAT UNIQUE ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) , ( NULL , 1 , 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = x ( 1.000000 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( * ) , x ( x ) , x ( x ) , x FROM x WHERE x ISNULL ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT * FROM x AS x NATURAL JOIN x NATURAL JOIN x ORDER BY x + 1 NULLS FIRST ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x AS SELECT * FROM x AS x , x AS x , x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x SELECT DISTINCT x FROM x ORDER BY x LIMIT x NOT LIKE x ( x ) OFFSET x < 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x FROM x AS x GROUP BY x ( 'x' ) , x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x > x OR x > 1 AND - x ( 1 ) >= x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 'x' , 1 ) , ( 'x' , 1 ) , ( 'x' , 1 ) , ( 1.000000 , 'x' ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x , x ) IS NOT NULL FROM x WHERE x ( x <= x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x WHERE ( x = 1 AND ( x = x OR x = x ) ) OR ( x = 1 AND x = 1 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x FROM x WHERE x < 1 ORDER BY x DESC ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x WHERE 1 > x OR x > 1 AND x ( 'x' ) LIMIT 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x AS WITH x AS ( SELECT x ( 'x' ) OVER y AS x FROM x ) SELECT 1 , 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT * FROM x AS x , x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT x FROM x AS x , x AS x USING ( x , x ) GROUP BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT 1 IN ( SELECT x FROM x ) AS x GROUP BY NULL ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW WITH x AS ( SELECT - 'x' FROM x ) SELECT x FROM x WHERE x = 1 OR 'x' = x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE TABLE x ( x INTEGER NOT NULL , x CHAR ( 1 ) NOT NULL , x INTEGER NOT NULL , x VARCHAR ( 1 ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x WHERE NOT x IN ( SELECT x FROM x WHERE x IN ( 'x' , 'x' ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x AS x , x , 'x' FROM x , x AS x WHERE x > 1 AND x = 1 GROUP BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 1 , NULL , NULL ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = x + x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x , 1 ) OVER ( ORDER BY x ) , x ( x , 1 ) OVER ( ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 1 ) , ( 'x' ) , ( 1 ) , ( 'x' ) , ( 1 ) , ( 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x * 1 ) FROM x WHERE x != 1 GROUP BY x ( x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 'x' , 1 , 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT x , x * x FROM x GROUP BY x HAVING x < x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x = 1 AND x IN ( 1 , 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x TEXT , x VARCHAR ( 1 ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' / 1.000000 ) , x ( DISTINCT 1 ) , x ( 1 ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( * ) OVER ( ORDER BY x NULLS LAST ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x NOT LIKE x , x FROM x AS x ORDER BY x + x , x NULLS LAST ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT 1 FROM x GROUP BY x , x HAVING ( 1 = 1 AND ( x = 1 ) = 1 ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT ( SELECT 1 ) , x ( x , 1 ) OVER ( ORDER BY x ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ) OVER ( ORDER BY x ) , 1 AS x FROM x ORDER BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = x ( x ( x , 1 , 1 ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT * FROM x ORDER BY x * - 1.000000 >= x IS NOT NULL LIMIT 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT DISTINCT x , x ( x ) FROM x GROUP BY x ORDER BY x DESC ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x NOT LIKE 'x' FROM x WHERE x > 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x ) OVER ( ORDER BY x ) FROM x ) WHERE x LIKE 'x' ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS WITH x AS ( SELECT x >= x , x FROM x ) SELECT x ( ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER PRIMARY KEY CHECK ( x ( ) IS NULL + ( x = 1 OR CASE WHEN x = 1 THEN 'x' ELSE x END = 1 ) NOT LIKE NOT ( 'x' = x AND x = 1 ) ) ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x , x AS x JOIN x NATURAL JOIN x ORDER BY x DESC NULLS LAST , x NULLS LAST ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( x * 1 ) , x ( 1 ) , x ( 1 ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT 'x' IN ( SELECT DISTINCT x FROM x WHERE x = 1 LIMIT 1 ) GROUP BY 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( 'x' ) OVER ( ORDER BY x ( x ) DESC ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT * , x IN ( 1 , 1 ) FROM x AS x WHERE NOT ( 'x' = x AND x = 1 ) ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x WHERE x <= 'x' ORDER BY x ( x , 1 , 1 ) DESC NULLS LAST ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT 1 , x + 1 , 1 FROM x UNION SELECT DISTINCT * FROM x ORDER BY x DESC NULLS FIRST ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ( 'x' ) , x ) FROM x ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x TEXT , x CHAR ( 1 ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER , x INT PRIMARY KEY , x INTEGER ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 'x' , 1 ) , ( 'x' , 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( * ) OVER ( ORDER BY x ) FROM x WHERE x != 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x AS x , x ( x ) OVER ( PARTITION BY x ) FROM x AS x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER UNIQUE PRIMARY KEY , x INT ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( 1 , 1 ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x NOT LIKE x , x FROM x ORDER BY x + x , x NULLS LAST ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , x ( x , 1 ) OVER ( ) , x ( x ) OVER ( ) FROM x GROUP BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = x + 1 WHERE ( SELECT x FROM x AS x ) IN ( SELECT x FROM x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS WITH x AS ( SELECT * FROM x ) SELECT x ( ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x ) , x FROM x WHERE x ( x , NULL ) <= 'x' = x ISNULL ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT * FROM x AS x , x AS x NATURAL JOIN x NATURAL JOIN x ORDER BY x NULLS FIRST ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x ) OVER ( ) AS x FROM x ORDER BY x ( x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = x ( x , 1 , 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = x ( CASE x WHEN 1 THEN x ELSE 1 END ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x AS x , x AS x NATURAL JOIN x NATURAL JOIN x ORDER BY x ASC ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x ( x ) , x , x ( 1 ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT ( SELECT DISTINCT 'x' , 1 , 1 , x ( 'x' , 1 , x ) ) LIMIT 1 OFFSET 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x AS WITH x AS ( SELECT x ( NOT x > 'x' ) AS x FROM x ) SELECT 1 , 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS WITH x AS ( SELECT x ( ) OVER ( x ) FROM x ) SELECT * FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 1 ) , ( 1 , 1 , NULL ) , ( 1 , 'x' , 1 ) , ( 1 , 1 , NULL ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( NULL , 1.000000 , 'x' ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x WHERE x = 1 AND x = 1.000000 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT * FROM x UNION SELECT * FROM x ORDER BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x CHAR ( 1 ) , x INTEGER ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( 'x' ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( * ) OVER ( ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT * FROM x WHERE x = ( SELECT x ( x ) FROM x ) AND x = 'x' ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x NATURAL JOIN x NATURAL JOIN x ORDER BY x ASC ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x ) OVER ( ORDER BY ( SELECT x ORDER BY 1 ) ) FROM x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x AS SELECT x ( x , 1 ) OVER ( ORDER BY x ( * ) OVER ( ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT x , x FROM x WHERE x = 1 AND x = 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE TABLE x ( x INTEGER PRIMARY KEY , x INTEGER , x DOUBLE , x DOUBLE , x TEXT , x TEXT ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x WHERE x >= 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x INT UNIQUE , x INT ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x ) FROM x , x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x AS x , x AS x NATURAL JOIN x NATURAL JOIN x ORDER BY x ( ) OVER ( ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x FROM x UNION SELECT x FROM x ORDER BY x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = x ( x ) WHERE x IN ( SELECT x ( 1 ) OVER ( ORDER BY x ) - x AS x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE TABLE x AS SELECT x ( x * ( 1 - x ) ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' / 1 ) , x ( 1 ) , x ( 1 ) FROM x NOT INDEXED ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE TABLE x ( x INTEGER , x DOUBLE , x CHAR ( 1 ) PRIMARY KEY ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT DISTINCT 1 AS x , 1 , 1 FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT DISTINCT * FROM x ORDER BY x ( ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 1.000000 ) , ( 1.000000 ) , ( 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 'x' ) , ( 1 ) , ( 1 ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE TABLE x AS SELECT x FROM x WHERE ( x = 'x' AND x BETWEEN 1 AND 1 ) OR ( x LIKE 'x' AND x != x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT * FROM x UNION SELECT * FROM x AS x ORDER BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( ) ISNULL FROM x WHERE x != x / 1 GROUP BY x ( DISTINCT x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x FROM x WHERE x = 1 AND x ( x , 1 , 1 ) = 'x' ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x ( x , x ) SELECT x + 1 , 1 , x FROM x WHERE x = 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = x ( x , 1.000000 NOT LIKE 'x' ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x WHERE x IS NULL AND x IN ( 1 , 1 ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = x ( 1 ) WHERE EXISTS ( SELECT 1 FROM x AS x WHERE x = x + 1 ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE ( x = 1 ) OR ( x = 1 ) OR ( x BETWEEN 1 AND 1 ) OR ( x = 1 ) OR ( x BETWEEN 1 AND 1 ) OR ( x = 1.000000 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x AS x NATURAL JOIN x NATURAL JOIN x ORDER BY x ( ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( DISTINCT x ( ) , x ) FROM x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT x , * FROM x ORDER BY x , x DESC , x DESC ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x UNION SELECT x + 1 FROM x LIMIT 1 OFFSET 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT DISTINCT x ( x , x , NULL , x ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT x ( x ) OVER ( ) AS x FROM x AS x , x AS x JOIN x NATURAL JOIN x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW WITH x AS ( SELECT * ) SELECT CASE WHEN 1 THEN 'x' WHEN 1 THEN 'x' ELSE 'x' END ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT 1 FROM x ) WHERE x = x AND x = x AND x = 'x' ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ( x ( x , 1 , x ) ) ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT 1 AS x FROM x AS x , x AS x NATURAL JOIN x NATURAL JOIN x ORDER BY x ( ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x NOT LIKE x , x FROM x AS x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = x ( x ( x ( ) , 1 , 1 ) ISNULL ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW WITH x AS ( SELECT x ( ) OVER ( x ) FROM x ) SELECT x FROM x JOIN x USING ( x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x AS x , x AS x , x AS x ORDER BY x ( ) NULLS LAST ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x FROM x WHERE ( SELECT x FROM x AS x GROUP BY x ) LIKE 'x' ORDER BY x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x , x ( x ) , 1 , x ) FROM x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ( ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x % 1 ) FROM x WHERE x != 1 GROUP BY NOT x > x % x % 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE TABLE x AS SELECT * FROM x AS x , x AS x WHERE x = 1 AND x = 1 ORDER BY x DESC NULLS FIRST ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x VALUES ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 'x' ) , ( 1 , 'x' ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER PRIMARY KEY CHECK ( x ( ) IS NULL + x IS NOT NULL ) ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE TABLE x ( x INTEGER PRIMARY KEY , x INT , x INT ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( * ) OVER ( ORDER BY x ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x IS NULL FROM x WHERE x = 1 OR ( ( x AND x = 1 ) = 1 AND x = 1 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x FROM x WHERE x ( ) GROUP BY x HAVING x < 'x' ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x % 1 ) FROM x WHERE x != 1 GROUP BY x = - x ( x ( ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT 'x' , ( SELECT x FROM x AS x GROUP BY x , x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT * FROM x LIMIT 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 1 ) , ( 1 , 1 , NULL ) , ( 1 , 1 ) , ( 1 , 1 , NULL ) , ( 1 , 1 ) , ( 1 , 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ) , x ( x ( x ) ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x AS SELECT EXISTS ( SELECT 1 FROM x ORDER BY x ( x ) OVER ( ) ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = x , x = x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x WHERE ( SELECT x FROM x AS x GROUP BY x ) LIKE 'x' LIMIT 1 OFFSET 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x WHERE x IN ( SELECT DISTINCT x FROM x GROUP BY 'x' ORDER BY x LIMIT 1 ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( ) IS NOT NULL , x , x ( x , 1 ) OVER ( ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x NOT LIKE x , 'x' , 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x FROM x WHERE x LIKE 'x' AND NOT x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x AS SELECT * FROM x ORDER BY x DESC NULLS LAST , x NULLS LAST ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x UNION SELECT DISTINCT * FROM x GROUP BY x HAVING x > x ORDER BY x DESC ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT 'x' , * FROM x WHERE 1 IN ( SELECT x FROM x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x WHERE x = 1 AND x = x AND x = 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x = x ( * ) , x ( x ) OVER ( ) FROM x GROUP BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x ORDER BY x , x DESC ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT 1 WHERE ( SELECT 1 , 1 ) OR ( 1 IN ( 1 , 1 ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT 1 , x , x ( 1 ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x IN ( x NOT LIKE x ( x ) IS NULL + x IS NOT NULL ) AND x NOT IN ( 1 , 1 ) AND x = 1 AND x = 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( 'x' , 1 , 1 ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x SELECT DISTINCT * FROM x NATURAL JOIN x WHERE x = x AND x = 1 ORDER BY x LIMIT 1 OFFSET 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x + 1 < 1 ) FROM x WHERE x != 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 1 ) , ( 'x' ) , ( 1 ) , ( 'x' ) , ( 1 ) , ( 1 ) , ( 1 ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x FROM x WHERE x = 'x' ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( * ) OVER ( ORDER BY x DESC , x ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x AS x , x AS x JOIN x NATURAL JOIN x GROUP BY NULL ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x SELECT DISTINCT x FROM x AS x ORDER BY x LIMIT 1 OFFSET 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW WITH x AS ( SELECT * FROM x ) SELECT x ( x ) , x , x FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( 1.000000 ) , x ( x ) , x ( x ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT 1 FROM x WHERE 1 = x OR x BETWEEN x AND 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( 1 AS x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x TEXT NOT NULL , x TEXT NOT NULL ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT CAST ( x ( x , 1 , x ( 'x' ) ) OVER ( ) AS FLOAT ) FROM x LIMIT 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( DISTINCT x ( x , 1 , 1 ) , x ) FROM x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x FROM x WHERE x > x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = x ( DISTINCT x , 1 , 1 ) = x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x , x AS x , x AS x NATURAL JOIN x NATURAL JOIN x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x FROM x WHERE x = 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' / 1.000000 ) , x ( x ) , x ( 1 ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x FROM x WHERE x <= 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , x ( * ) OVER ( ) FROM x GROUP BY x , x ORDER BY x , x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x ( x , x ) IS NOT NULL , 1 ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x NOT LIKE x , x FROM x GROUP BY 'x' , x ( x ) , x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x ( DISTINCT 'x' / 1 ) , x ( 1 ) , x ( 1 ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x , x AS x JOIN x NATURAL JOIN x ORDER BY x ( ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW WITH x AS ( SELECT x ( ) OVER ( x ) FROM x ) SELECT x FROM x WHERE x = 1 LIMIT 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT 1 , x + 1 , x FROM x UNION SELECT DISTINCT * FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x NATURAL JOIN x ORDER BY x ( ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , x ( x , 1 ) OVER ( PARTITION BY x ORDER BY x ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT 1.000000 * x ( x ) , x ( x ) OVER ( PARTITION BY 'x' , 1 , NULL ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x > 1 OR x > 1 AND - x ( x , x , ( x NOT IN ( 1 ) AND x NOT IN ( x ) ) ) >= x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x CHAR ( 1 ) PRIMARY KEY ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT * FROM x WHERE x < 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT x , x * x FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x WHERE ( x >= x ) OR 1 + 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = x ( x , - x ( 1 ) >= x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = NULL WHERE x IN ( SELECT CAST ( x ( 1 ) AS TEXT ) FROM x AS x , x AS x , x AS x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( ( SELECT x FROM x WHERE 1 = x ) ) FROM x WHERE x != 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x FROM x WHERE - 'x' >= x AND x = 1 OR x = 'x' ORDER BY x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT 1 FROM x , x USING ( x , x ) , x USING ( x , x ) ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT * FROM x , x WHERE 1 = x AND x = 1 GROUP BY x HAVING x ( x ) > 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( DISTINCT x ( ) , x ) FROM x AS x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 1 ) , ( 1 , 1 , NULL ) , ( 1.000000 , 'x' , 1 ) , ( 1 , 1 , NULL ) , ( 1 , 1 ) , ( 1 , 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x INT UNIQUE NOT NULL ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , x FROM x WHERE ( x = 1 AND x = 1 ) OR ( x = 1 AND x = 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 'x' ) , ( 1.000000 ) , ( 'x' ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * , x IN ( 1 , 1 ) FROM x AS x ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( ( SELECT x FROM x WHERE 1 = x ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x WHERE ( x = 1 AND 1 ) OR 1 = x + 1 OR x = 'x' ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT 1 , 1 , * , x FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( ( SELECT x FROM x WHERE 1 = x ) ) FROM x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( ) ISNULL , x ( x ) , x ( 1 ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x , x ( x ) OVER ( PARTITION BY 'x' , 1 , NULL ) FROM x AS x , x AS x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ( ) ) FROM x ORDER BY x * 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( * ) , x ( x ( 'x' ) , 1 ) AS x FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x BETWEEN ( SELECT DISTINCT x ( * ) FROM x AS x ) AND x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x FROM x WHERE x = 'x' OR x = 'x' OR x ( x ) IS NULL + x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( * ) FROM x WHERE x + x LIKE 'x' ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' / 1.000000 ) , x ( 'x' ) , x ( 1 ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x , x = x ( * ) , x ( x ) FROM x GROUP BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ( x ( ) ) OVER ( ) , 1.000000 , 'x' ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = x ( x ( ( SELECT 1 FROM x WHERE x = x ) , 1 , 1 ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x WHERE x IN ( SELECT x FROM x ORDER BY x DESC LIMIT 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT 'x' IN ( SELECT DISTINCT x ( x ( 1 ) ) LIMIT 1 ) GROUP BY 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER , x INTEGER ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x WHERE x = 1 LIMIT ( x IN ( 1 , 1 ) ) = 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 'x' ) , ( 1.000000 ) , ( 1 ) , ( 'x' ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x , x ( ) FROM x GROUP BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ) , x FROM x , x ORDER BY 1 , 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT CAST ( x ( x / 1 ) AS FLOAT ) FROM x LIMIT 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 1 ) , ( 1 , NULL ) , ( 1 , NULL ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT * FROM x UNION SELECT * FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = x ( x , x ) WHERE x IS NULL ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x JOIN x USING ( x , x ) ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 1 ) , ( 1 , 1 , NULL ) , ( 1.000000 , 'x' , 1 ) , ( 1 , 1 , NULL ) , ( 1 , 1 ) , ( 1 , 1 ) ON CONFLICT DO NOTHING ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x AS x WHERE ( x = 1 ) OR ( x = 1 ) OR ( x BETWEEN 1 AND 1 ) OR ( x = 1 ) LIMIT 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x NOT LIKE x ( 1 ) ) FROM x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT DISTINCT 'x' , x , 1 FROM x UNION SELECT DISTINCT * FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT 1 , x ( x ) OVER ( ) AS x FROM x WHERE x != 1 GROUP BY x ( DISTINCT x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x WHERE ( x = x AND x = x AND x = x AND x = x ) OR x = 1 LIMIT 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x , 1 , x ( 'x' ) ) OVER ( ORDER BY x ) AS x FROM x WHERE x != 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x DOUBLE PRIMARY KEY CHECK ( x ( x ) IS NULL + x IS NOT NULL ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT x ( x ( ( x NOT IN ( 1 ) AND x NOT IN ( 1 ) ) , x ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x AS x , x AS x JOIN x NATURAL JOIN x ORDER BY x ( ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 'x' ) , ( 1.000000 ) , ( 'x' ) , ( 1.000000 ) , ( 'x' ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT x , x = x ( x ) , x ( x ) FROM x GROUP BY x IS NULL ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x , x AS x NATURAL JOIN x NATURAL JOIN x ORDER BY x ASC , x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 1 ) , ( 'x' ) , ( 1 ) , ( 'x' ) , ( 1 , 1 , NULL ) , ( 'x' ) , ( 1 ) , ( 'x' ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x + x ( x ) ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = NULL WHERE x IN ( SELECT x ( x % 1 ) OVER ( ORDER BY ( 1 < x AND x = 1 ) ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW WITH x AS ( SELECT * ) SELECT x ( x NOT LIKE x , 'x' , 1 ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT x ( * ) OVER ( ORDER BY 1 NULLS LAST ) ORDER BY x ( * ) OVER ( ORDER BY 1 NULLS LAST ) LIMIT 1 OFFSET 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = x ( ( x NOT IN ( 1 ) AND x NOT IN ( 1 ) ) , x ) , x = 'x' ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT 1 FROM x WHERE x != ( SELECT 1 FROM x WHERE x = x ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT DISTINCT 1 FROM x JOIN x USING ( x , x ) JOIN x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( ) ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x FROM x AS x WHERE x GROUP BY x ( ) ISNULL , x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x AS WITH x AS ( SELECT 1 AS x FROM x INDEXED BY x ) SELECT 1 , 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x , x IN ( 1 , 1 , NULL ) FROM x ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x WHERE 1 > x OR x > 1 AND NOT x LIMIT 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x AS x FROM x UNION SELECT DISTINCT * FROM x ORDER BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x ( x ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x FROM x ORDER BY x DESC , x , x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x OR x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , x ( x ) OVER ( PARTITION BY x ) FROM x AS x ORDER BY x ( ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT * FROM x UNION SELECT x ( ) , x FROM x ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT ( SELECT DISTINCT * AS x , 1.000000 FROM x AS x , x AS x ) LIMIT 1 OFFSET 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( DISTINCT x / 1.000000 ) , x ( 1 ) , x ( 1 ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = x ( DISTINCT x ( x , x ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x , x AS x NATURAL JOIN x AS x NATURAL JOIN x ORDER BY x ( ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( 1 , 1 ) OVER ( ORDER BY x ) AS x FROM x WHERE x != 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , x ( x ) , x ( x ) FROM x WHERE x = 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( 1 ) IS NOT NULL FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = x ( ( SELECT x ( 1.000000 , 1 ) OVER ( ORDER BY x ) FROM x ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( * ) WHERE x IN ( 1 , 1 ) ) != 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x , x AS x NATURAL JOIN x NATURAL JOIN x ORDER BY 'x' , x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT DISTINCT x , x + 1 , 1 FROM x UNION SELECT DISTINCT * FROM x ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x WHERE x ( ( x = 1 OR x = 1 ) ) OR x = 'x' OR x = 'x' ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , x ( ) OVER ( ORDER BY x ) , x ( ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT x ( * ) OVER ( ) FROM x UNION SELECT DISTINCT * FROM x ORDER BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x , x AS x JOIN x NATURAL JOIN x GROUP BY 1 HAVING 1.000000 + 1.000000 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = NULL WHERE x IN ( SELECT x ( x NOT LIKE 'x' ) OVER ( ORDER BY ( 1 < x AND x = 1 ) ) ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT 1 IN ( SELECT 1 INTERSECT SELECT 1 ) FROM x AS x , x AS x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x != 'x' FROM x WHERE 1 = x OR x BETWEEN x AND 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x ( x , x ) , x ( 1 ) , ( x ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 1 ) , ( 1 , 1 , NULL ) , ( 1.000000 , 'x' , 1 ) , ( 1 , 1 , NULL ) , ( 1 , 1 ) , ( 1 , 1 , NULL ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT ( x = 'x' OR x = 'x' ) AS x , x = x ( * ) , 'x' FROM x GROUP BY x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x , x FROM x WHERE x IS NOT NULL GROUP BY x HAVING x ( x ) > 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , NULL , 1 ) , ( 1 , 1 , NULL ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x CHAR ( 1 ) , x INT ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( * ) FROM x AS x GROUP BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x NOT LIKE x , 'x' , 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( DISTINCT x / 1 ) FROM x WHERE x != 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x AS SELECT x , x ( x ) OVER ( PARTITION BY x ORDER BY x ( ) OVER x ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x * ( SELECT 1 FROM x AS x ) + x ) FROM x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ) , x FROM x WHERE x ( ) ISNULL ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x WHERE x < 'x' ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( DISTINCT x ) , x FROM x WHERE x ISNULL GROUP BY x NOT LIKE x ( x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 'x' , 1 ) , ( 'x' , 1 ) , ( 'x' , 1 ) , ( 1 , 1 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x FROM x AS x WHERE x > 1 OR x = 'x' OR x = 1.000000 + 1.000000 OR x = 'x' LIMIT 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT ( SELECT DISTINCT 'x' , x , 1 , 1.000000 ) LIMIT 1 OFFSET 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( ( SELECT x NOT LIKE x , x FROM x GROUP BY x ) ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x FROM x WHERE x < 'x' ORDER BY 1 , x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( * ) OVER ( ORDER BY x ASC , x DESC , x , x ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x ) FROM x GROUP BY x HAVING x ( x ) > 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW WITH x AS ( SELECT * FROM x ) SELECT DISTINCT x , x FROM x , x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' / 1 ) , x ( 1 ) , x ( 'x' ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( NULL ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x VALUES ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 'x' ) , ( 1 , 'x' ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) ON CONFLICT DO NOTHING ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x NATURAL JOIN x NATURAL JOIN x ORDER BY 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( DISTINCT ( SELECT CAST ( x ( x ) AS DOUBLE ) ) , x ) FROM x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) SELECT * FROM x UNION SELECT * FROM x ORDER BY x NULLS FIRST ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ) OVER ( ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x ( * ) FROM x UNION SELECT * FROM x ORDER BY x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x FROM x GROUP BY x , x ORDER BY x DESC LIMIT 1 OFFSET 1 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT DISTINCT x ( x , 1 , ( x NOT IN ( 1 ) AND x NOT IN ( 1 ) ) ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ( 1 ) ) LIMIT 1 OFFSET 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , x ( x ) OVER ( PARTITION BY 'x' , 1 , NULL ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x FROM x NATURAL JOIN x WHERE x = 1 AND x <= 'x' ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW WITH x AS ( SELECT * FROM x ) SELECT x ( * ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x VARCHAR ( 1 ) , x VARCHAR ( 1 ) , x INT , x VARCHAR ( 1 ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x , x ( x , 1 ) OVER ( ) FROM x ORDER BY x LIMIT 1 OFFSET 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT DISTINCT * FROM x , x AS x , x USING ( x , x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x ) FROM x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x WHERE x IN ( 1 , 1 ) ORDER BY x LIMIT 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT x ( * ) OVER ( ) , 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' / 1.000000 ) , x ( * ) AS x , x ( 1 ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x WHERE EXISTS ( SELECT 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , x ( x ) FROM x GROUP BY x HAVING x ( x ) > 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x FROM x WHERE ( x = 1 AND x = 1 ) OR ( x NOT IN ( 1 ) AND x NOT IN ( 1 ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = NULL WHERE x IN ( SELECT DISTINCT x WHERE x = x + 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 1 ) , ( 'x' ) , ( 1 ) , ( 'x' ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( * ) FROM x WHERE x = 1 AND x = 1 ORDER BY x DESC NULLS FIRST ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 'x' , 'x' ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( DISTINCT x ) , x ( 1 ) , x ( 1 ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ( 1 ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER PRIMARY KEY , x INT , x CHAR ( 1 ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW WITH x AS ( SELECT * FROM x ) SELECT DISTINCT x , x * 1 AS x , x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( ) OVER ( ORDER BY x ( * ) OVER ( ORDER BY x ( x <= 'x' , 1.000000 ) OVER x ) ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x IN ( 'x' ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT 1 AS x , 1 , 1 = x / 1 , 1 FROM x ORDER BY x ( ) NULLS LAST ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' / 1 ) , x ( 1 ) , x ( 1 ) AS x FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x % 1 ) OVER ( ORDER BY x ) FROM x WHERE x = 1 AND x = 1 ORDER BY x DESC NULLS FIRST ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x INT , x CHAR ( 1 ) , x FLOAT ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x ORDER BY x , x DESC , x , x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = 'x' , x = 'x' ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x , x ( ) FROM x WHERE x = 1.000000 + 1.000000 GROUP BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT * FROM x UNION SELECT * FROM x ORDER BY x ( x ) DESC ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x VALUES ( 'x' , 1.000000 , NULL ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x AS WITH x AS ( SELECT * FROM x ) SELECT 1 , 'x' ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x , x AS x , x NATURAL JOIN x NATURAL JOIN x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x FROM x WHERE CASE WHEN 1 THEN 1 ELSE 1 END IN ( 1 , 1 ) ORDER BY x DESC ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS WITH x AS ( SELECT * FROM x , x AS x ) SELECT x ( ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x , x JOIN x NATURAL JOIN x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT 1 = 1 FROM x WHERE x ( ) GROUP BY ( x ( x ( ) ISNULL ) AND x ) , x ( x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( ( SELECT x AS x WHERE 1 > x ) ) OVER ( ORDER BY x ) FROM x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ) AS x , x ( x ) AS x FROM x GROUP BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x , x AS x NATURAL JOIN x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x AS SELECT x FROM x WHERE x = x OR x = x OR x = 'x' OR x = 'x' ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x AS SELECT DISTINCT * FROM x NATURAL JOIN x GROUP BY x HAVING x + x LIKE x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT 1 AS x , 1 , 1 = x / 1 , 1 FROM x ORDER BY x ( ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT 1 IN ( SELECT x , x ( x ) OVER ( PARTITION BY 1 , 1 ) FROM x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x AS SELECT NULL INTERSECT SELECT NULL ORDER BY x ( ) OVER x NULLS FIRST ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 1 , 'x' , NULL ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x ( ) , x ( 1 ) , x ( 1 ) FROM x AS x GROUP BY NULL ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT ( SELECT x FROM x ORDER BY ( x = 1 AND x = 1 ) DESC LIMIT 1 OFFSET 1 ) ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT ( ( x * 1 ) > x AND x = 1 ) FROM x WHERE x = 1.000000 + 1.000000 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x , x AS x , x ORDER BY 'x' , 'x' LIMIT 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ( x ) ) FROM x GROUP BY x ORDER BY x * 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) SELECT x + 1 , 1 , x FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x INTERSECT SELECT * FROM x ORDER BY x DESC , 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x FROM x WHERE ( x = 1 AND ( x + x ( ) OR x = 1 ) ) OR ( x = 1 AND x = 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT 'x' IN ( SELECT x FROM x AS x GROUP BY x ) GROUP BY 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x , x ORDER BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x <= x , x >= x FROM x WHERE x IN ( SELECT x FROM x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE TABLE x AS SELECT x ( ) INTERSECT SELECT 1 ORDER BY x , x DESC ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x ) FROM x WHERE x ( x , x ) ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( * ) , x ( x ) , x ( x ) FROM x WHERE x ISNULL ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT x , x ( x <= 'x' ) FROM x WHERE x IS NOT NULL ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT DISTINCT x , x FROM x WHERE x = 1 AND x = 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x , x ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = x ( ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x INTERSECT SELECT * FROM x ORDER BY x + 1 , 'x' ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x WHERE ( x = x AND ( x = 1 OR x = 1 ) ) OR ( x = 1 AND x = 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ) , x FROM x WHERE x ( ) IS NULL + x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT x FROM x WHERE x = 'x' AND x = 'x' ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 1 , 1 ) , ( 1 , 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x * x ) FROM x ) WHERE x = x AND x = 1 AND x = 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x FROM x INTERSECT SELECT x FROM x AS x , x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT 'x' , x ( x ) FROM x WHERE x IS NOT NULL ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x = x ( * ) OVER ( ORDER BY x ) , 'x' FROM x GROUP BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( 'x' ) OVER ( ORDER BY ( x IN ( 1 , 1 ) ) ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT 1 FROM x ON x ( x ) WHERE x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT 1 AS x FROM x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT ( 'x' = 'x' AND x = 1 ) , x ( x ) OVER ( PARTITION BY x ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x , x ( x ) ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( DISTINCT x ( x ) , x ) FROM x AS x ORDER BY x NULLS FIRST ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x + x , x ( x ) OVER ( PARTITION BY NOT x >= 'x' ORDER BY x DESC NULLS LAST , 'x' ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x ( x ) , x ( x , 1 ) OVER ( ) ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x - x , x + x FROM x WHERE x ORDER BY x DESC LIMIT 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT * FROM x UNION SELECT * FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT x ( ) OVER ( ) FROM x AS x GROUP BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x NOT INDEXED NATURAL JOIN x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ( ) , x , 1 , x ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x , x FROM x WHERE x IS NOT NULL ORDER BY x , x ASC ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT DISTINCT x , x * x FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x ( x ( x ) , x ) ISNULL ) FROM x WHERE x != 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x AS SELECT 1 , x ( x ) IS NOT NULL ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x FROM x WHERE x = 'x' OR x = 'x' OR x = 'x' GROUP BY x HAVING x > 'x' ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT 1 , x NOT LIKE 'x' , 1 , 1 FROM x GROUP BY x ORDER BY 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x AS WITH x AS ( SELECT 1 AS x , 1 , 1 AS x ) SELECT 1 , 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x > 1 OR x > 1 AND x NOT LIKE - x ( x ( 'x' ) > 1 , x ) IS NOT NULL ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( DISTINCT x NOT LIKE x ( x ) ) FROM x WHERE x != 1 GROUP BY x ( x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( ) FROM x WHERE x = 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 1 , 1 ) , ( 1 , 1 , NULL ) , ( 1.000000 , 'x' , 1 ) , ( 1 , 1 , NULL ) , ( 1 , 1 ) , ( 'x' ) , ( 1.000000 ) , ( 'x' ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 ) , ( 1.000000 ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = x ( DISTINCT 'x' , x ( 'x' , 1 ) , x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x ( * ) ) FROM x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x ( ) , 1 , 1 , x ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x AS WITH x AS ( SELECT x ( DISTINCT 'x' ) AS x FROM x ) SELECT 1 , 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x ) FROM x WHERE x != 1 GROUP BY x ( 'x' = x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x , x ( ) OVER ( PARTITION BY x ORDER BY x ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT CASE WHEN x NOT IN ( 1 , 1 ) OR x = 1 THEN 'x' ELSE 'x' END FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x , 1 ) OVER ( ORDER BY x ) FROM x WHERE x LIKE 'x' ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x > 1 OR x > 1 AND CASE x WHEN 1 THEN 1 ELSE 1 END != x ( 'x' ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x FROM x AS x GROUP BY x ( x , x ) ISNULL , x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 'x' , 1 ) , ( 1 , 1 , NULL ) , ( 'x' , 1 ) , ( 'x' , 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT 'x' IN ( SELECT DISTINCT x ( DISTINCT x / 1 ) FROM x ORDER BY x NULLS FIRST ) GROUP BY 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT DISTINCT x ( x , x ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x , 1 ) OVER ( ) FROM x WHERE x LIKE 'x' ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT 1 FROM x GROUP BY x , x ORDER BY x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( DISTINCT x * x ) FROM x ) WHERE x BETWEEN x AND 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x WHERE ( 1 >= x = 1 AND 1 ) OR x = 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER PRIMARY KEY , x INT , x INT , x INT ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x , CAST ( ( SELECT x FROM x WHERE 1 = x ) AS INT ) ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x DOUBLE PRIMARY KEY ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' / 1 ) , ( 1 ) , x ( 1 ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x , 1 , ( x NOT IN ( 1 ) AND x NOT IN ( 1 ) ) ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x , x ( x <= x ) IS NOT NULL , 1 ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x FROM x WHERE x ( ) GROUP BY ( SELECT 1 ) , 1.000000 NOT LIKE 'x' ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x NATURAL JOIN x UNION SELECT DISTINCT * FROM x AS x ORDER BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE ( x ( 1.000000 ) = 1 OR x = x ) = 1 OR x = 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT 1 WHERE ( SELECT x FROM x WHERE x != 1 GROUP BY x ) != 'x' ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER , x INT , x VARCHAR ( 1 ) ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( - 'x' ) , x ( x ) , x ( - 'x' >= x ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x , x ( x ) OVER ( x ORDER BY x ) FROM x GROUP BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x WHERE x IN ( 1 , 1 ) AND x IN ( 1 , 1 ) ORDER BY x + x , x NULLS LAST ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = NULL WHERE x < ( SELECT * FROM x USING ( x , x ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 'x' ) , ( 'x' , 'x' ) , ( 1 , 'x' ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x AS x JOIN x ON ( 1 IN ( 1 , 1 ) ) NOT LIKE 'x' ORDER BY x , x ASC ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x % 1 AS x FROM x WHERE x IN ( 1 , 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT 'x' , x , 1 AS x FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE TABLE x ( x DOUBLE PRIMARY KEY CHECK ( x NOT LIKE x ( x NOT LIKE x ( x ) ) ) ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' / 1 ) AS x , x ( 1 ) , x ( 1 ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x FROM x WHERE x = 'x' OR x = x OR x = 'x' OR x = 'x' ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS WITH x AS ( SELECT x ( ) OVER ( x ORDER BY x DESC ) FROM x ) SELECT x ( ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT x ( x , 1 ) OVER ( ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x ) , x FROM x WHERE x ( ) % 1 != 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' / 1 ) , x ( 1 ) AS x , x ( 1 ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT 1 , 1 AS x , 1 ORDER BY x ASC , x ASC ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x > 1 OR ( x IS NULL ) AND - x ( 1 ) >= x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT x ( ( x ( ) % 1 ) ) FROM x WHERE x != 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = x + 1 WHERE x > 1 OR x > 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT 1 , x + 1 , 1 FROM x UNION SELECT DISTINCT * FROM x ORDER BY 'x' NULLS FIRST ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( ) FROM x AS x , x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x WHERE x != x ( 'x' ) LIMIT 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x > 1 OR x = ( SELECT x ( * ) WHERE x IN ( 1 , 1 ) ) OR x = 'x' ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ( 'x' ) OVER ( ORDER BY x NULLS LAST ) , 1 ) FROM x WHERE x IS NOT NULL ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x NOT LIKE x , x FROM x ORDER BY x DESC NULLS LAST , x NULLS LAST ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = NOT x < 'x' ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x AS WITH x AS ( SELECT x ( 'x' ) AS x FROM x ) SELECT * FROM x LIMIT 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x , x = x ( * ) , x ( x ) FROM x GROUP BY x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x FROM x ORDER BY x , x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT DISTINCT * FROM x JOIN x USING ( x , x ) LIMIT 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x , 1 , NULL , x ) FROM x GROUP BY x ( ) % x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT * FROM x , x USING ( x , x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT DISTINCT ( SELECT DISTINCT ( 1 = 1 AND x = 1 ) , 1 , 1.000000 ) LIMIT 1 OFFSET 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * , x IN ( 1 , 1 , x ) FROM x ORDER BY x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT * FROM x WHERE - 'x' >= x AND x = 1 ORDER BY x DESC NULLS FIRST ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x AS SELECT x ( CASE WHEN NOT ( x != 1 OR x != 1 ) THEN 1 ELSE 1 END , 1 ) FROM x LIMIT 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = 1 + x ( ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x * ( SELECT x > 1.000000 ) + x ) FROM x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT 1 , x + 1 , 1 FROM x INTERSECT SELECT DISTINCT * FROM x ORDER BY x DESC NULLS FIRST ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT * FROM x NOT INDEXED NATURAL JOIN x NOT INDEXED WHERE x >= 'x' AND x < 'x' AND x = x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER PRIMARY KEY CHECK ( ( x = 1 AND 1 ) ) ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT * FROM x WHERE x <= 'x' GROUP BY x ( x NOT LIKE 'x' ) ISNULL ORDER BY x ( ) NULLS LAST ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' / 1 ) , x ( 1 ) , x ( 1 ) FROM x AS x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x , x ( x ) OVER ( PARTITION BY x ) FROM x ORDER BY x * 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT * FROM x WHERE x = 'x' ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT ( SELECT DISTINCT * , 1 , * , 1.000000 ) LIMIT 1 OFFSET 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 1 ) , ( 1 , NULL ) , ( 1 , NULL ) , ( 1 , NULL ) , ( 1 , NULL ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) SELECT * UNION SELECT * FROM x ORDER BY x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x ( ) , x ( 1 ) , x ( * ) FROM x GROUP BY x ( ) ISNULL ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x ( x ( ) ISNULL , x ( 'x' ) , x ( ) ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE TABLE x ( x INTEGER PRIMARY KEY , x INT , x TEXT UNIQUE ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x ORDER BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x AS x WHERE x = 'x' OR x = 'x' OR x = 'x' GROUP BY x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT x ( x ) , 1 , 1 = x / 1 , 1 FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x AS SELECT x ( ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x AS x , x AS x NATURAL JOIN x NATURAL JOIN x ORDER BY x NULLS LAST , x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE TABLE x ( x INTEGER PRIMARY KEY , x INTEGER , x TEXT , x TEXT , x TEXT , x TEXT , x TEXT , x TEXT , x FLOAT ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT ( SELECT * FROM x NOT INDEXED NATURAL JOIN x NOT INDEXED ) , x FROM x GROUP BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , x ( x , x >= 1 ) OVER ( PARTITION BY x ORDER BY x ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x AS SELECT * FROM x LIMIT 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT x FROM x WHERE x ( ( x = 1 OR x = 1 ) ) OR x = 'x' OR x = 'x' ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x , 1 ) OVER ( ORDER BY x ) FROM x GROUP BY x , x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x > 1 OR x > 1 AND 1 >= ( SELECT x ( * ) FROM x ) IS NULL ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW WITH x AS ( SELECT - 'x' FROM x ) SELECT x FROM x WHERE x ( 'x' ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' / 1 ) , x ( 1 ) , - 1 FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = x + 1 , x = 1 WHERE x > 1 OR x > 1 AND - x ( 1 ) >= x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x ) OVER ( ORDER BY x , x DESC ) FROM x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x FROM x WHERE x IN ( 1.000000 ) ORDER BY x DESC NULLS FIRST , x NULLS LAST ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW WITH x AS ( SELECT * FROM x ) SELECT x FROM x AS x , x AS x LIMIT 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x , x AS x , x AS x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x INT , x INT , x INT ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x WHERE ( 1 = 1 AND x = 1 ) OR x = 1 ORDER BY x ASC , x DESC , x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = x ( x ( ) , 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = NULL WHERE x = ( SELECT x FROM x WHERE ( 'x' ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT 1.000000 * x ( x ) , x AS x FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x FROM x WHERE x IN ( 'x' ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x WHERE x IN ( 1 , 1 , NULL , 1 ) AND x IN ( 1 , 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT x * 1 + x FROM x WHERE x IN ( 1 , 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER , x INTEGER , x INT , x VARCHAR ( 1 ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , x ( x ) OVER ( PARTITION BY x ORDER BY x ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x WHERE x = ( SELECT x FROM x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x > 1 OR x > 1 AND x ( x , 'x' ) ISNULL ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = NULL WHERE NULL BETWEEN ( SELECT x FROM x AS x GROUP BY - 'x' >= x ) AND 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( 'x' , 'x' AS x , 'x' ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x = x ( * ) , 'x' FROM x GROUP BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x ( ) , 1 , 1 , x ) FROM x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT x AS x , x , 'x' FROM x UNION SELECT DISTINCT * FROM x ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x , x WHERE x ( x ) <= 'x' = x AND x > 1.000000 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = NULL , x = NULL WHERE x = 'x' ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER PRIMARY KEY , x DOUBLE NOT NULL UNIQUE , x TEXT UNIQUE ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( ( SELECT x FROM x AS x WHERE x IN ( 'x' ) GROUP BY x ( ) ) ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE TABLE x ( x INTEGER , x INT PRIMARY KEY , x FLOAT ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x FROM x ORDER BY 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ) , x ( x ( 'x' ) , 1 ) AS x FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT 'x' IN ( SELECT DISTINCT x >= 'x' FROM x ORDER BY 1 ) GROUP BY 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x FROM x WHERE x ( ) GROUP BY x ( * ) OVER ( ORDER BY x ) , x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT 1 , * FROM x WHERE x IN ( SELECT 'x' FROM x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = x * 1 WHERE x = 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x % 1 ) FROM x WHERE x != x GROUP BY x ( DISTINCT x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x ) FROM x WHERE x != 1 GROUP BY x ( DISTINCT x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT 'x' , * FROM x WHERE x IN ( SELECT 'x' FROM x ) GROUP BY x ( ) ISNULL , x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x = 1 OR x = 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT 1 AS x , x , 1 , 1 FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , NULL , NULL ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x AS SELECT NULL INTERSECT SELECT NULL ORDER BY x ( ) OVER tcl ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( 'x' ) FROM x GROUP BY NOT x > 'x' ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x FROM x AS x GROUP BY x ( - 1 ) , x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x ) OVER ( ORDER BY x ) FROM x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT 'x' IN ( SELECT 1 FROM x LIMIT 1 ) GROUP BY 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( * ) OVER ( ORDER BY x ) FROM x WHERE x != 1 ORDER BY x DESC , x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x , x ) FROM x GROUP BY x , x ORDER BY x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ) , x FROM x GROUP BY NOT x > 'x' ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT NULL , 1 , 1 FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT 1.000000 * x ( x ) , x ( x ( x ) OVER ( ) , 1 ) AS x FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( - 'x' >= x IS NOT NULL , x ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( CASE x WHEN 1 THEN 1 ELSE 1 END != 1 ) FROM x WHERE x != 1 GROUP BY x ( x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( x / 1.000000 ) , x ( 1 ) , x ( 1 AS x ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x WHERE x IN ( 1 , 1 ) AND x IN ( 1 , 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = x ( x ( NOT x > 'x' , 1 , 1 ) ) , x = 'x' ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT ( SELECT x FROM x ORDER BY x DESC LIMIT 1 OFFSET 1 ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT 1 FROM x GROUP BY x , x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x FROM x WHERE x > 1 OR x > 1 AND x NOT LIKE 'x' ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x FROM x NATURAL JOIN x WHERE x = 'x' OR ( x = 1 AND x = 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x ( x ) OVER ( PARTITION BY NOT x >= 'x' ORDER BY x NULLS LAST , 'x' ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT ( SELECT DISTINCT 'x' , 1 , 1.000000 ORDER BY x ) LIMIT 1 OFFSET 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x * x ) OVER ( ORDER BY x DESC , x ASC ) ORDER BY 'x' NULLS LAST ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE 1 OR ( 1 IN ( 1 , 1 ) ) OR ( x BETWEEN 1 AND 1 ) OR ( x = 1 ) OR ( x BETWEEN 1 AND 1 ) OR ( x = 1 ) OR ( x = 1 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x AS SELECT * FROM x AS x , x AS x ORDER BY x DESC NULLS LAST , x NULLS LAST ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT 'x' / 'x' FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS WITH x AS ( SELECT * FROM x GROUP BY x HAVING x ( ) ) SELECT x ( ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT 1 IN ( SELECT 1 ) FROM x GROUP BY 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT - 1 FROM x AS x , x AS x NATURAL JOIN x NATURAL JOIN x ORDER BY x ( ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x , x AS x , x USING ( x , x ) LIMIT 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , x ( x ) OVER ( PARTITION BY NOT x >= 'x' ORDER BY x DESC NULLS LAST , * ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x FROM x WHERE ( x = 'x' AND x BETWEEN 1 AND 1 ) OR ( x = 1 AND x = 1 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( 1.000000 ) , x FROM x WHERE x IS NOT NULL ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x , x AS x NATURAL JOIN x NATURAL JOIN x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT 1 FROM x GROUP BY 'x' , ( x * 1 ) > x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x , CAST ( ( SELECT x FROM x WHERE x OR x ) AS INT ) ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x INT UNIQUE NOT NULL , x INT UNIQUE NOT NULL , x FLOAT , x INT PRIMARY KEY CHECK ( x ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT 'x' IN ( SELECT ( SELECT 1 ) ORDER BY 1 ) GROUP BY 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x WHERE EXISTS ( SELECT * FROM x WHERE x = x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( x , x ) AS x , x ( 1 ) , ( x ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x , x IN ( 1 , x , 1 ) FROM x ORDER BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = NULL WHERE x IN ( SELECT x ( x % 1 ) OVER ( ORDER BY x ( x ) ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT x ( 'x' ) OVER ( ORDER BY x ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = x ( x ( x ( DISTINCT x ) ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x AS SELECT x , x ( x , 1 ) OVER ( ORDER BY x ) AS x , 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = x ( x , x ( x NOT LIKE 'x' , x ) IS NOT NULL , x , x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x AS SELECT x ( 1 ) OVER ( ORDER BY x ) - 1 AS x FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS WITH x AS ( SELECT 1 AS x FROM x INDEXED BY x ) SELECT x ( ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x FROM x ORDER BY x , x DESC NULLS FIRST , x , x LIMIT 1 OFFSET 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x INT , x DOUBLE , x INTEGER ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( NULL ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x VARCHAR ( 1 ) , x INT ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT * , x AS x , x FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( x ) OVER ( ORDER BY x ( x ) ) FROM x GROUP BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ) , x FROM x WHERE x < x ( x , x ) IS NOT NULL = 'x' ISNULL ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x ( ) , 1 , 'x' , 1 , x ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x VARCHAR ( 1 ) , x VARCHAR ( 1 ) , x INTEGER ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' / 1 ) , x ( 1 ) , x ( 1 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x FROM x NATURAL JOIN x WHERE x = 'x' OR ( x = 1 AND x = 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x ORDER BY x , x DESC LIMIT 1 OFFSET 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' / 1 ) , x ( 1 ) , x ( x ( ) ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT ( SELECT x AS x WHERE 1 > x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x ORDER BY x LIMIT 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x > 1 OR - 1.000000 >= x IS NOT NULL = 1 AND - x ( 1 ) >= x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( ) , x ( 1 ) , x ( 1 ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x = x AND x = x AND x = 1 AND x LIKE 'x' ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( ) , x FROM x WHERE x ISNULL ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT x ( x ) OVER ( ) AS x FROM x AS x , x JOIN x NATURAL JOIN x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x % 1 ) FROM x WHERE 'x' != 1 GROUP BY x ORDER BY x DESC NULLS FIRST , 'x' ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 1.000000 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ) , x LIMIT 1 OFFSET 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x , x AS x JOIN x NATURAL JOIN x LIMIT 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x = x ( * ) , x ( x ) FROM x GROUP BY ( x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x AS WITH x AS ( SELECT x ( 'x' ) AS x FROM x INDEXED BY x ) SELECT 1 , 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE TABLE x ( x TEXT , x FLOAT ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( ( x * 1 ) > x ) GROUP BY 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( x = 'x' ) , x ( 1 ) , x ( 1 ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( 1 , 1.000000 , x ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = x ( ( x NOT IN ( 1 ) AND x NOT IN ( 1 ) ) , x = 1.000000 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x AS x , x AS x FROM x ORDER BY x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x AS SELECT * FROM x , x ORDER BY ( SELECT x ORDER BY 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT DISTINCT * FROM x ORDER BY x , x DESC , x , x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x * x ) OVER ( ORDER BY ( SELECT 1 , 1 ) DESC , x ASC ) ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT 1.000000 * x ( x ) , x FROM x WHERE x != 1 GROUP BY x ( x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x ) FROM x ORDER BY x , x ASC , x DESC ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT x , x * x FROM x ORDER BY x ( x , 1 , 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x , x AS x , x AS x NATURAL JOIN x NATURAL JOIN x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT * FROM x WHERE x ( x <= 'x' ) ORDER BY x DESC , 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = x ( ( SELECT CAST ( ( x ) AS DOUBLE ) ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x , x WHERE x = x AND x = 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x AS x GROUP BY x ( x ) , x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT 1 , x + * , 1 FROM x UNION SELECT DISTINCT * FROM x ORDER BY x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE TABLE x AS SELECT x FROM x WHERE x > x OR x = x AND x = 'x' LIMIT 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT CASE WHEN x NOT IN ( x ( x ) , 1 , 1 ) OR x = 1 THEN 'x' ELSE 'x' END FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 1 ) , ( 1 , 1 , NULL ) , ( 1.000000 , 'x' , 1 ) , ( 1 , 1 , NULL ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT ( SELECT DISTINCT 1.000000 AS x , 1.000000 ) LIMIT 1 OFFSET 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x > 1 OR x > 1 AND - x ( ( SELECT CAST ( x ( DISTINCT x ) AS DOUBLE ) ) ) >= x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT 1 WHERE ( SELECT x ( x , x ) FROM x AS x GROUP BY x ) != 'x' ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT x ( x ) , x ( x ) FROM x GROUP BY x ( x ) , x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x = 'x' OR x = x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = NULL WHERE x = ( SELECT x FROM x WHERE x = x ORDER BY x , x DESC , x ASC ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = x ( DISTINCT x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( 'x' ) FROM x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ( ) , 1 , x , x ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x NOT LIKE x , x FROM x AS x GROUP BY 'x' , x ( x ) , x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x AS x FROM x JOIN x USING ( x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , x ( x ) OVER ( ORDER BY x DESC , x ASC ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x AS SELECT * FROM x ORDER BY ( x < 1 ) DESC NULLS LAST , x NULLS LAST ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = NULL WHERE x = ( SELECT DISTINCT x , CASE WHEN x = 1 THEN 'x' ELSE x END AS x FROM x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ) , x ( x ) OVER ( ORDER BY x DESC , x ASC ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x != 'x' FROM x WHERE 1 = x OR x ( x NOT LIKE x ( x ) ) BETWEEN x AND 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x > 1 OR ( x = 1 AND ( x = x OR x = x ) ) OR ( x = 1 AND x = 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT 1 , 1 FROM x ON x ( x , 1 ) OVER ( ORDER BY x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( ) FROM x AS x , x AS x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 'x' ) , ( 1 ) , ( 'x' ) , ( 1 ) , ( 1 ) , ( 'x' ) , ( 1 ) , ( 'x' ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT ( x NOT IN ( 1 ) AND x NOT IN ( 1 ) ) , x FROM x WHERE x != 1 GROUP BY x ( x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT DISTINCT x - x , x + x FROM x WHERE x ORDER BY x DESC LIMIT 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x ) OVER ( ORDER BY x ) FROM x WHERE x = 1 AND x = 1 ORDER BY x DESC NULLS FIRST ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE ( x = 1 AND x = 1 AND x = 1 AND x = 1 AND x = 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT CASE 1 WHEN 1 THEN 'x' WHEN 1 THEN 'x' ELSE 'x' END GROUP BY x ( 'x' , 1 ) <= 'x' ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ) , x ( x ) OVER ( ORDER BY x ) FROM x GROUP BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW WITH x AS ( SELECT * FROM x ) SELECT x ( x ( NULL ) ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( NOT x <= 'x' ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 1 ) , ( 'x' ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( DISTINCT x ( x <= 'x' ) ) ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x NOT LIKE x , x FROM x GROUP BY ( SELECT DISTINCT CAST ( x ( x ) AS DOUBLE ) ) HAVING x > 'x' ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT x ( x ( * ) OVER ( ) , 1.000000 , 'x' ) GROUP BY x HAVING ( 1 = 1 AND ( x ( ) % 1 AND 1 ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ( 'x' ) OVER ( ORDER BY x NULLS LAST ) , 1 ) FROM x ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x BETWEEN ( SELECT DISTINCT x ( * ) OVER ( ) FROM x AS x GROUP BY x ( ) ISNULL , x ) AND x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x % 1 ) FROM x WHERE NOT CASE x WHEN 'x' THEN 1 ELSE 1 END GROUP BY x ( DISTINCT x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x VALUES ( 1.000000 , 'x' , 1 , 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x GROUP BY x , ( 1 = 1 AND ( x ( ) % 1 AND 1 ) ) , x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW WITH x AS ( SELECT x ( ) OVER ( x ORDER BY x DESC ) FROM x ) SELECT x ( 'x' , 1 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x , x ( x ) FROM x GROUP BY x , x ORDER BY x DESC , x DESC ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT * FROM x UNION SELECT * FROM x ORDER BY x , x ASC ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( * ) OVER ( ORDER BY x ) , x FROM x WHERE x ISNULL GROUP BY 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( * ) OVER ( ) FROM x AS x GROUP BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 'x' , 1 , 'x' ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = x ( x , ( SELECT x FROM x AS x GROUP BY x ( ) % - 1.000000 >= x IS NOT NULL ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ) , x ( x ) , x ( x ) FROM x GROUP BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( 'x' , 1 , x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT * FROM x WHERE EXISTS ( SELECT * FROM x WHERE x = x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 1 ) , ( 1 , 1 , NULL ) , ( 1.000000 , 'x' , 1 ) , ( 1 , 1 , NULL ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x FROM x GROUP BY x ( ) ISNULL UNION SELECT x FROM x ORDER BY 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , x FROM x WHERE ( x = x AND x BETWEEN 1 AND 1 ) OR ( x = x AND x = 1 ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' / 1.000000 ) , x ( 1 ) , x ( ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT 1 , 1 AS x , 1 LIMIT 1 OFFSET 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x AS SELECT x , x ( x ) OVER ( PARTITION BY x ORDER BY x DESC NULLS FIRST ) FROM x GROUP BY x , x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x , x AS x , x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE TABLE x ( x TEXT , x INT , x INT , x INT ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 1 , NULL , 'x' ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = NULL WHERE x IN ( SELECT DISTINCT x FROM x WHERE - 'x' >= x IS NOT NULL = ( 1 < x AND x < 'x' ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * , 'x' FROM x WHERE x NOT IN ( 1 ) AND x NOT IN ( 1 ) ORDER BY x DESC ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT 1 AS x , 1 , 1 = x / 1 , x FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x , x ) FROM x ORDER BY x ( x , 1 , 1 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( ) ISNULL , x ( 'x' ) , 1 AS x FROM x WHERE x != 1 GROUP BY x ( DISTINCT x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT NOT x IN ( SELECT x FROM x WHERE x IN ( 'x' , 'x' ) ) GROUP BY 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 'x' ) , ( 1 ) , ( 'x' ) , ( 1 ) , ( 'x' ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( ( x ( x ( ) ISNULL ) AND x ) , ( x ) ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE NULL BETWEEN ( SELECT ( SELECT 1 , 1 ) FROM x AS x GROUP BY 1 ) AND 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER PRIMARY KEY NOT NULL , x INT ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT ( x NOT LIKE x ( x ) ) FROM x WHERE x != 1 GROUP BY x ( DISTINCT x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ( 'x' ) OVER ( ORDER BY x ) , 1 ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( DISTINCT x % 1 ) FROM x WHERE x != 1 GROUP BY x ( DISTINCT x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT x , * FROM x ORDER BY x , x DESC NULLS LAST , x NULLS LAST ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( x + 1 ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x NATURAL JOIN x GROUP BY x UNION SELECT DISTINCT * FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( ( SELECT x ( ) FROM x ) ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = x ( x ( - 1 , x , ( x NOT IN ( 1 ) AND x NOT IN ( 1 ) ) ) ISNULL , x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT DISTINCT 1 FROM x JOIN x JOIN x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( x / 1.000000 ) , x ( 1 ) , x ( 1 ) FROM x AS x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = 1 , x = 1 * 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x WHERE x >= 1 AND x <= 1 ORDER BY CAST ( x AS TEXT ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) SELECT * FROM x UNION SELECT DISTINCT * FROM x ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x INT PRIMARY KEY CHECK ( x ( x ) IS NULL + x IS NOT NULL ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x WHERE ( x = 1 ) OR ( x = 1 ) OR ( x BETWEEN 1 AND 1 ) OR ( x = 1 ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x ( x ) OVER ( ORDER BY x ) FROM x ORDER BY 1 , 1 DESC ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = x ( ( SELECT x ( x + x ( DISTINCT x ( x ) ) ) FROM x ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 1 , 'x' , 'x' , NULL ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ) , x ( ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT x , x FROM x WHERE x = 'x' ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = x ( x LIKE x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x ( x ) OVER ( PARTITION BY 'x' , * ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = x ( * ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 1.000000 , 1.000000 , 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = x ( ( x * 1 ) > x AND x = 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT 'x' ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( ( x NOT IN ( x ) AND x NOT IN ( NOT x > x % x % 1 ) ) , x ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x > 1 OR x > 1 AND - x ( x ) >= x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT 1 , x + 1 , x FROM x UNION SELECT * FROM x ORDER BY x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x ) OVER ( ORDER BY x ) FROM x ORDER BY x ( * ) OVER ( ) ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x ) OVER ( ORDER BY x ) FROM x ORDER BY x * 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT x FROM x WHERE x = ( SELECT x FROM x WHERE NULL = x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( ) WHERE ( SELECT x FROM x AS x GROUP BY x ORDER BY x ( 1.000000 ) , x NULLS LAST ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT CASE WHEN x NOT IN ( x ( ) , x , 1 , 1 ) OR x = 1 THEN 'x' ELSE 'x' END FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER PRIMARY KEY , x INT , x DOUBLE ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x WHERE x NOT IN ( ( x NOT IN ( 1 ) AND x NOT IN ( 1 ) ) , NULL , 1 ) GROUP BY x , x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 1 ) , ( 1 , 1 ) , ( 1.000000 , 'x' , 1 ) , ( 1 , 1 , NULL ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x ) , x ( x ) FROM x WHERE 1 = x / 1 AND x = 'x' ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT ( SELECT DISTINCT x FROM x AS x ) FROM x AS x ORDER BY x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x ( 1.000000 , 1.000000 ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT x ( x ) OVER ( ) FROM x NATURAL JOIN x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x NOT LIKE 'x' FROM x WHERE x IN ( 1 , x NOT LIKE 'x' , 1 , 1 ) ORDER BY x DESC LIMIT 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x ORDER BY x , x DESC LIMIT ( SELECT x FROM x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE ( x = 1 ) OR ( x = 1 ) OR ( x BETWEEN 1 AND 1 ) OR ( x = 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT 1 FROM x WHERE ( 'x' = 1 AND x = 1 ) = x OR x BETWEEN x AND 1 GROUP BY x HAVING x < x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( DISTINCT x / ( x % 1 ) != 1 ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT * FROM x , x WHERE x = x AND x = 1 GROUP BY x , x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x ( x , 1 ) OVER ( PARTITION BY x ORDER BY x ) FROM x GROUP BY NOT x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x , x ) FROM x WHERE x != 1 GROUP BY x ( x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x INT UNIQUE NOT NULL , x INT UNIQUE NOT NULL , x FLOAT ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x , x ) FROM x WHERE x IS NOT NULL ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x FROM x WHERE x BETWEEN 'x' AND 'x' ORDER BY 1 , x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x * x ) FROM x AS x GROUP BY x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x , 1 ) OVER ( ORDER BY x ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT NULL AS x , 1 , 1 = x / 1 , 1 FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x ( x ) OVER ( PARTITION BY NOT x >= 'x' ORDER BY x DESC NULLS LAST , 'x' ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( * ) FROM x JOIN x ON x = x WHERE x != 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x NOT LIKE x ( x ) ) FROM x WHERE x != 1 GROUP BY x ( ) ISNULL , x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( 1 / 1 ) , x ( 1 ) , x ( 1 ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( * ) , x ( x ) , x ( x ( x ) ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT CAST ( x ( x ) OVER ( ) AS INTEGER ) FROM x LIMIT 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ) , x FROM x WHERE x <= 'x' ORDER BY x DESC ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = x ( x ( x ) IS NULL + x , x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT 1 , x + 1 , x FROM x UNION SELECT * FROM x ORDER BY x NULLS LAST ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ) OVER ( ) FROM x WHERE x != 1 GROUP BY x HAVING x < 'x' ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( * ) FROM x WHERE x != 1 GROUP BY x ( x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x AS SELECT x ( x * x ) AS x FROM x USING ( x , x ) ORDER BY x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( CASE WHEN NOT x != 1 THEN 1 ELSE 1 END , 1 ) FROM x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x IN ( SELECT x ( x ) OVER ( ORDER BY x + x ) FROM x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER PRIMARY KEY , x INTEGER , x DOUBLE , x DOUBLE , x TEXT , x TEXT , x TEXT , x INTEGER ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT 1 AS x , 1 , 1 , * AS x FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x FROM x WHERE x = x LIMIT 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = 1 WHERE ( x IN ( 1 , 1 ) ) = 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x TEXT , x INT ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 1 ) , ( 1 , 1 ) ON CONFLICT DO NOTHING ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT 1 , x + 1 , 1 FROM x UNION SELECT DISTINCT * FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ) , x ( x ) OVER ( ORDER BY - 1.000000 , x ASC ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT x , x FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x FROM x WHERE x > 1 AND x < 1 ORDER BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 1 ) , ( 1 , 1 , NULL ) , ( 1.000000 , 'x' , 1 ) , ( 1 , 1 , NULL ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 , NULL ) , ( 1 , 1 ) , ( 1 , 1 ) ON CONFLICT DO NOTHING ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 'x' , 'x' , 1.000000 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( * ) FROM x WHERE NOT x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ) OVER ( ) FROM x WHERE x != 1 GROUP BY x ( x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT * FROM x , x AS x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT * FROM x NATURAL JOIN x JOIN x USING ( x ) ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT 1 AS x , 1 , x + CASE x WHEN 1 THEN 1 ELSE 1 END != 1 , 1 FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x AS x , x AS x NATURAL JOIN x NATURAL JOIN x ORDER BY x DESC NULLS FIRST ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x > 1 OR x > 1 AND - x ( ( SELECT CAST ( x ( x ) AS INT ) ) ) >= x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' / 1 ) , x ( DISTINCT 1 ) , x ( 1 ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x WHERE ( x = 1 AND ( x = 1 OR x = x ) ) OR ( x = 1 AND x = 1 ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT ( x ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT * FROM x NATURAL JOIN x NATURAL JOIN x ORDER BY x ( * ) OVER ( ORDER BY 1 NULLS LAST ) NULLS FIRST ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT DISTINCT x , x * 1 AS x , x FROM x JOIN x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = x ( ( SELECT DISTINCT CAST ( x ( x ) AS DOUBLE ) ) , x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x AS SELECT 1 , 1 WHERE x = ( SELECT x FROM x WHERE x ( 'x' ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x WHERE ( x = 'x' AND x BETWEEN 1 AND 1 ) OR ( x = 1 AND x = 1 ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT CASE WHEN NULL THEN 'x' ELSE 'x' END ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' / 1.000000 ) , x ( 1 ) , x ( 1 ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x ( x ( x ( 1 ) , x ) ) ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW WITH x AS ( SELECT * ) SELECT 1 , 1 AS x , 1 LIMIT 1 OFFSET 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( x / 1.000000 ) , x ( 1 ) AS x , x ( 1 ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 1 ) , ( 1 , 1 , NULL ) , ( 1 , 1 ) , ( 1 , 1 , NULL ) , ( 1 , 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( 1 ) UNION SELECT DISTINCT * FROM x ORDER BY x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT 1 , NOT x , 1 FROM x UNION SELECT DISTINCT * FROM x ORDER BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x WHERE x = x + 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( 'x' ) FROM x WHERE x NOT IN ( 1 , 1 , x ( 'x' ) ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x , x ( x + x ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ( x ) , x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x % 1 ) OVER ( ORDER BY x ) FROM x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x FROM x AS x GROUP BY x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x AS SELECT x , x ( x ) OVER ( PARTITION BY 1 , 1 , NULL ) FROM x ORDER BY x LIMIT 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x DOUBLE , x INTEGER , x INT , x VARCHAR ( 1 ) ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT * FROM x AS x JOIN x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x , x ) , x ( x ) , x ( x ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = x ( x ( x , 'x' ) ISNULL ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x , 1 ) OVER ( ) FROM x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW WITH x AS ( SELECT * FROM x ) SELECT x ( x ( 1 ) ) GROUP BY x , x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT ( SELECT x FROM x ORDER BY x DESC LIMIT 1 OFFSET 1 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT * FROM x AS x , x AS x NATURAL JOIN x NATURAL JOIN x ORDER BY 'x' ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x NOT INDEXED NATURAL JOIN x ORDER BY x ( ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( 1.000000 , 1.000000 ) WHERE x IN ( 1 , 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT ( SELECT x FROM x ORDER BY x DESC ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = x ( x ( x , x , 1 ) , ( x = 1 AND 1 ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x JOIN x AS x NATURAL JOIN x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x AS x FROM x UNION SELECT x + 1 FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 1.000000 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x WHERE x IN ( 1 ) UNION SELECT DISTINCT * FROM x ORDER BY x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT 1 , 1 FROM x ON x ( x ) USING ( x , x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x WHERE x + x LIKE 'x' LIMIT 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x FROM x AS x WHERE x IN ( 'x' = x ) ORDER BY x + x , x + x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT x FROM x WHERE x > x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x ORDER BY x ASC , x DESC ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT 1 FROM x , x USING ( x , x ) , x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x FROM x WHERE x NOT IN ( 1 , 1 ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 1 ) , ( 1 , 1 , NULL ) , ( 1.000000 , 'x' , 1 ) , ( 1 , 1 , NULL ) , ( 1 , 1 ) , ( 1.000000 , 'x' , 1 ) , ( 1 , 1 , NULL ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , x FROM x WHERE ( SELECT x ( * ) OVER ( ) FROM x AS x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( NULL , 'x' ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x ( x ( x , x ) ) OVER ( PARTITION BY x ) FROM x ORDER BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW WITH x AS ( SELECT * ) SELECT x ( x ( 1 ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * , x IN ( 1 , 1 ) FROM x ORDER BY x ( x ) NULLS FIRST ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = x ( x ( x ( ) IS NOT NULL , x ) , ( x = 1 AND 1 ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT ( 'x' / 1.000000 ) , x ( 1 ) , x ( 1 ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT x FROM x WHERE x = 1 AND 1 = x AND x = 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( DISTINCT ( SELECT 'x' - 'x' WHERE x = x ) , x ) ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT 1 FROM x WHERE 1 < x ORDER BY CAST ( x AS TEXT ) LIMIT 1 OFFSET 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( * ) OVER ( ORDER BY x ) , x FROM x GROUP BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 1 ) , ( 'x' ) , ( 1 ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT 1.000000 FROM x AS x , x AS x NATURAL JOIN x NATURAL JOIN x ORDER BY x ( ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = x + 1 WHERE x = 1 OR x = 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT ( SELECT DISTINCT x , x , 1.000000 ) LIMIT 1 OFFSET 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = x ( x > x ( ) IS NOT NULL ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER NOT NULL CHECK ( x != 'x' ) , x INTEGER ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = x ( x ( x ( x ) ) ISNULL ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x ( x ) , 1.000000 * x ( x ) ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x FROM x WHERE x >= 1 AND x < 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ( 1 * 1 * 1 ) ) FROM x AS x JOIN x ON NULL = 1.000000 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x ( ) OVER ( PARTITION BY x ORDER BY x ) FROM x GROUP BY x HAVING x > 'x' ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x VARCHAR ( 1 ) , x VARCHAR ( 1 ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x * x ) OVER ( ORDER BY x DESC , x ASC ) GROUP BY x ( 1.000000 ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ( 1.000000 , 1.000000 ) ) UNION SELECT DISTINCT * FROM x ORDER BY x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = x * 1 WHERE x < x ( x , x ) IS NOT NULL ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT DISTINCT x , x * x FROM x ORDER BY x , x DESC , x ASC ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x , CAST ( ( x = 1 ) = 1 AS DOUBLE ) ) FROM x ORDER BY x ( ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x AS SELECT x ( ) INTERSECT SELECT 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x AS SELECT NULL WHERE ( SELECT 1 , 1 ) OR ( 1 IN ( 1 , 1 ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x WHERE x = 'x' OR x = 'x' OR x = 'x' ORDER BY x ( ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( * ) OVER ( ORDER BY x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x INT , x INTEGER ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) SELECT * FROM x UNION SELECT * FROM x AS x ORDER BY x ON CONFLICT DO NOTHING ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT DISTINCT x , x ( x ) FROM x GROUP BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT x / 1 , x / 1 FROM x UNION SELECT DISTINCT * FROM x ORDER BY x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x , x ) FROM x ORDER BY x ( x , 1 , 1 ) DESC ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x AS x GROUP BY x ORDER BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x , x WHERE ( SELECT x WHERE x = x ) = x AND x = 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x AS SELECT * FROM x UNION SELECT 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * , x IN ( x ( x ) , x , x ) FROM x ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = x ( 1 ) WHERE x = 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x AS SELECT x FROM x WHERE x = 'x' AND ( x = 1 OR x = 1 ) GROUP BY x , x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT ( SELECT * FROM x WHERE x < 1 AND x > 1 ) ORDER BY x ( * ) OVER ( ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT * FROM x WHERE x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x SELECT * FROM x GROUP BY 1 , 1 ORDER BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x ( x * ( 1 - x ) ) AS x , x FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE TABLE x ( x INTEGER , x INT , x FLOAT ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT x ( x ( * ) OVER ( ) , 1.000000 , 'x' ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x , x ( x ) OVER ( PARTITION BY x ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x FROM x AS x JOIN x AS x ON x = x JOIN x USING ( x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x TEXT PRIMARY KEY ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER PRIMARY KEY UNIQUE , x VARCHAR ( 1 ) ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( * ) FROM x AS x , x AS x WHERE x != 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x AS SELECT NULL FROM x GROUP BY x , x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 1 , 1 ) , ( 1.000000 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x FROM x WHERE x IN ( 'x' = x ) ORDER BY x + x , x + x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT CAST ( x ( 1 ) AS TEXT ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x , x ) FROM x GROUP BY 'x' , 'x' , x + x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x DOUBLE , x INT , x INT , x VARCHAR ( 1 ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 'x' , 1 , 'x' ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE TABLE x ( x FLOAT ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS WITH x AS ( SELECT DISTINCT x ( 'x' ) AS x FROM x ) SELECT x ( ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE TABLE x ( x FLOAT , x INT , x INT , x VARCHAR ( 1 ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x ( x , 1 ) OVER ( PARTITION BY x ORDER BY x ) FROM x ORDER BY x ( ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE TABLE x ( x INTEGER , x DOUBLE , x INTEGER UNIQUE UNIQUE UNIQUE PRIMARY KEY ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ( ( NOT ( x IS NULL ) ) AND ( NOT ( x IS NULL ) ) ) , 1.000000 , 'x' ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = NULL WHERE x = ( SELECT x ( x ) OVER ( ) FROM x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x FROM x ORDER BY CAST ( x AS TEXT ) LIMIT ( SELECT x FROM x ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x WHERE x = 1 AND x = 1 GROUP BY x ( x ) <= 'x' ORDER BY x DESC NULLS FIRST ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT * ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW WITH x AS ( SELECT 1.000000 FROM x ) SELECT x FROM x WHERE x = 1 OR x > 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( 1 , x , NULL , x ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( * ) OVER ( ORDER BY CAST ( x AS TEXT ) ) FROM x AS x GROUP BY x HAVING x < x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x VALUES ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 'x' , 1 ) , ( 'x' , 1 ) , ( 'x' , 1 ) , ( 'x' , 1 ) , ( 'x' , 1 ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE TABLE x AS SELECT x FROM x WHERE x = 'x' OR x = x OR x = 'x' OR x = 'x' ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x AS x , x AS x , x WHERE x = x AND x = 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = NULL WHERE x IN ( SELECT DISTINCT 1 AS x , 1 , 1 FROM x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT ( SELECT DISTINCT 'x' , 1 , 1.000000 ) LIMIT 1.000000 OFFSET 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT x ( * ) OVER ( ORDER BY x ) , x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT NOT x >= 'x' FROM x UNION SELECT * FROM x ORDER BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x AS SELECT DISTINCT * FROM x AS x , x AS x JOIN x NATURAL JOIN x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , x FROM x GROUP BY NOT x > 'x' ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x > 1 OR x > 1 AND x ( 1 , 1 , x ( x ) = 1 , 1 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x FROM x WHERE x LIKE 'x' ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x , x ( x = ( x LIKE 'x' AND x != x ) ) ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT DISTINCT x , x * x FROM x GROUP BY x NOT LIKE x ( x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x WHERE x IN ( 1 , 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( DISTINCT x ( ) , x ) FROM x AS x ORDER BY x NULLS FIRST ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x ( ) OVER ( ORDER BY x DESC ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x WHERE x = 1 AND x > 1 ORDER BY x DESC ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x UNION SELECT DISTINCT * FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT 'x' , * FROM x WHERE x IN ( SELECT x WHERE x OR x ) ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x FROM x WHERE x ( 'x' , 1 ) <= 'x' LIMIT 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = NULL WHERE x = 'x' AND x BETWEEN 1 AND 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x > 1 OR x = 1 OR x = 'x' ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , x IN ( 1 , 1 ) FROM x ORDER BY x ( x ) NULLS FIRST ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT 1 FROM x , x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT * FROM x UNION SELECT * FROM x ORDER BY x ( ) OVER y NULLS FIRST , 1 DESC ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x NOT INDEXED NATURAL JOIN x WHERE x = 1 AND x >= 1 AND x < 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x WHERE ( x = x AND ( x = 1 OR x = 1 ) ) OR ( x = 1 AND x = 1 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( ) IS NOT NULL FROM x WHERE x ( x ) GROUP BY x HAVING x > 'x' ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT 1 , x + 1 , 1 FROM x UNION SELECT DISTINCT * FROM x WHERE x != 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x , x WHERE x AND x = 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x NATURAL JOIN x NOT INDEXED ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( * ) FROM x AS x , x AS x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT x , x FROM x WHERE x = 'x' AND x = 'x' ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT 1 , x + 1 , 1 FROM x UNION SELECT DISTINCT * FROM x ORDER BY 1 DESC NULLS LAST ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 1.000000 ) , ( 1 , 1.000000 ) , ( 1 , 1.000000 ) , ( 1 , 1.000000 ) , ( 1 , 1.000000 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = x ( x , x ) OVER y ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x UNION SELECT DISTINCT * FROM x ORDER BY x DESC ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( DISTINCT x ( x ) , x ) ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x FROM x WHERE x = 'x' ) WHERE x IS NULL ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x AS SELECT 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x WHERE x >= 'x' AND x < 'x' ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( * ) FROM x , x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x WHERE x = 1.000000 + 1.000000 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( ) IS NOT NULL FROM x WHERE x ( ( x = 1 OR x = 1 ) ) OR x = 'x' OR x = 'x' ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x AS SELECT 1 , 1 ORDER BY x DESC , x DESC ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x WHERE x = x ( ( x NOT IN ( 1 ) AND x NOT IN ( x + 1 ) ) , x ) LIMIT 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x VALUES ( 'x' ) , ( 1.000000 ) , ( 1.000000 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x INTERSECT SELECT x FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x NOT LIKE x ( 1 ) ) FROM x WHERE x != 1 GROUP BY x ( x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x , x , NULL , x ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x + x ( x ) ) FROM x AS x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x AS x , x AS x , x NATURAL JOIN x NOT INDEXED ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT 1 AS x , 1 , 1 FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 1 , 1 ) , ( 1 , 'x' ) , ( 1 , 'x' ) , ( 1 , 1.000000 ) , ( 1 , 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , x ( x , 1 ) OVER ( ORDER BY x ) FROM x WHERE x IS NOT NULL ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , x ( 1 , 1 ) FROM x GROUP BY x ORDER BY x DESC ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x * 1.000000 ) FROM x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x WHERE x = x AND x = 1 ORDER BY x DESC NULLS FIRST ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x AS x JOIN x ON ( 1 IN ( 1 , 1 ) ) NOT LIKE 'x' ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER , x INT , x INT , x VARCHAR ( 1 ) ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT DISTINCT x FROM x AS x , x AS x NATURAL JOIN x NATURAL JOIN x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x , x ( x ) OVER ( ORDER BY x NULLS FIRST ) FROM x GROUP BY x ORDER BY x DESC ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT NOT x ( x , x ) FROM x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x BETWEEN ( SELECT DISTINCT x ( * ) OVER ( ORDER BY x DESC , x ASC ) FROM x AS x ) AND x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x != 'x' FROM x , x USING ( x , x ) WHERE 1 = x OR x BETWEEN x AND 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x AS WITH x AS ( SELECT x ( ) AS x FROM x ) SELECT 1 , 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , x = x ( * ) OVER ( ) , x ( * ) FROM x GROUP BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x EXCEPT SELECT x FROM x WHERE x != 'x' ORDER BY x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW WITH x AS ( SELECT * FROM x ) SELECT x FROM x ORDER BY x , x DESC LIMIT 1 OFFSET 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x NOT LIKE x , x FROM x GROUP BY x HAVING x ( x ) > 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( DISTINCT x ( 1 ) , x ) FROM x AS x ORDER BY x NULLS FIRST ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT 'x' IN ( SELECT x , x FROM x ORDER BY x DESC LIMIT 1 ) GROUP BY 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT DISTINCT 1 , 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x ) OVER ( ORDER BY CAST ( x AS FLOAT ) , x DESC NULLS LAST ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT DISTINCT x ( x ) FROM x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x WHERE x ( x ) = 1 OR x ( x ) = 1 LIMIT 1 OFFSET 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( * ) AS x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) ON CONFLICT DO NOTHING ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( ) , x ( 1 ) , ( 1 ) FROM x AS x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( ) WHERE ( SELECT 1 ) = 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * , x IN ( 1 , 1 ) FROM x AS x ORDER BY x ( x ) NULLS FIRST ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x , x AS x JOIN x JOIN x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT * FROM x WHERE * AND x = 1 ORDER BY x DESC NULLS FIRST ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER , x VARCHAR ( 1 ) , x INTEGER ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x , 1 , 1 ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( 1 ) GROUP BY x HAVING x ( x , 1 ) OVER ( ORDER BY x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x NATURAL JOIN x NOT INDEXED ORDER BY x DESC ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT 1.000000 , * , x ( x ( x ) ) ISNULL FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT 1 FROM x WHERE ( 'x' = 1 AND x = 1 ) = x OR x BETWEEN x AND 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x AS WITH x AS ( SELECT * ) SELECT NULL INTERSECT SELECT NULL ORDER BY x ( ) OVER x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT * , x IN ( 1 , 1 ) FROM x ORDER BY x NOT LIKE x ( x ) <= 'x' ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW WITH x AS ( SELECT * FROM x ) SELECT x FROM x ORDER BY x , x LIMIT 1 OFFSET 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ) , x FROM x WHERE x ISNULL GROUP BY x ( ) ISNULL ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' / 1.000000 ) , x ( x ) , x ( x ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 'x' , NULL ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x VARCHAR ( 1 ) PRIMARY KEY ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT DISTINCT CAST ( x ( x , 1 ) OVER ( ) AS INTEGER ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , x = 'x' AS x FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT ( SELECT DISTINCT 'x' , 1 , 1.000000 ) LIMIT x ( x , 1 ) OVER ( ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( 'x' / 1 ) , x ( 1 ) , x ( 1 ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ( x , x , 1 ) , x ) FROM x ORDER BY x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT 1 FROM x ORDER BY x DESC , x , x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT x , x ( x , 1 ) OVER ( ORDER BY x ) AS x FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT 1 AS x , x ( x * x ) AS x , 1 , 1 FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x FROM x WHERE ( x ( 'x' ) = 1 OR x = 1 ) NOT LIKE 'x' LIMIT 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ) , x ( x ) , 'x' FROM x NATURAL JOIN x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x WHERE x = x ( 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x AS SELECT x ( ) INTERSECT SELECT 1 ORDER BY 1 , 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = x ( x , x ( * ) , x ( x ) ) IS NULL + x IS NOT NULL ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x VALUES ( 'x' , 'x' ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT x ( x ) OVER ( PARTITION BY x ORDER BY x ) FROM x ORDER BY x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = x , x = x , x = x WHERE x = 1 AND x IN ( x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT CASE 1 WHEN 'x' THEN 1 WHEN 1 THEN 'x' ELSE 'x' END ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ) , x ( x ) , x ( x ) FROM x LIMIT 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( 'x' , 1.000000 , x ( x , x ) IS NOT NULL ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE TABLE x AS SELECT DISTINCT 'x' , 'x' , 1 , 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT CAST ( x ( x / 1 AS x ) AS INTEGER ) FROM x LIMIT 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( 'x' , 'x' AS x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT * FROM x GROUP BY x ORDER BY x , x DESC NULLS FIRST LIMIT 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = x * 1 WHERE x < 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT 1 , x , 1 FROM x UNION SELECT DISTINCT * FROM x ORDER BY x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x , x FROM x WHERE ( x = 'x' AND x BETWEEN 1 AND 1 ) OR ( x = x AND x = 1 ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE TABLE x ( x INTEGER NOT NULL , x INT ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , x ( x ) OVER ( PARTITION BY ( x % 1 ) ORDER BY x ) FROM x ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ) OVER ( ORDER BY x ) FROM x WHERE x != 1 GROUP BY x ( DISTINCT x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT x ( * ) OVER ( ORDER BY x DESC , x ASC ) LIMIT 1 OFFSET 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT 1 = 1 FROM x WHERE x ( ) GROUP BY x ( 'x' ) , x ( x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( * ) OVER ( ORDER BY x ) , x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT * FROM x WHERE x ( x <= 'x' ) ORDER BY x DESC , 'x' ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = NULL WHERE x IN ( SELECT x ( x % 1 ) OVER ( ORDER BY ( 1 < x AND x ( ) IS NOT NULL < 'x' ) ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x > 1 OR x > 1 AND - x ( * ) >= x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = 1 WHERE x AND ( SELECT x FROM x WHERE x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT 'x' AS x , 'x' FROM x WHERE x IS NULL AND x IN ( 1 , 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( ) FROM x ORDER BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x CHAR ( 1 ) UNIQUE , x INTEGER PRIMARY KEY CHECK ( x ( x ) IS NULL + x IS NOT NULL ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x AS SELECT 1 , 1 WHERE x < ( SELECT * FROM x USING ( x , x ) ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x , x ( x ) OVER ( PARTITION BY x ORDER BY x DESC NULLS LAST , 'x' ) AS x FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x * x ) FROM x GROUP BY x HAVING x > 'x' ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x ) OVER ( ) AS x FROM x GROUP BY NOT x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x ) OVER ( ORDER BY x ) FROM x GROUP BY x HAVING x < x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) SELECT * FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( * ) , x ( x ) , x ( x ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x FROM x WHERE x = ( SELECT x FROM x WHERE NULL = x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 1 ) , ( 1 , 1 , NULL ) , ( 1.000000 , 'x' , 1 ) , ( 1 , 1 ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT 1 , x + 'x' , 1 FROM x UNION SELECT DISTINCT * FROM x ORDER BY x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE TABLE x ( x FLOAT PRIMARY KEY , x INT ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x FROM x , x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x , x AS x JOIN x AS x NATURAL JOIN x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE ( ( x = 'x' OR x = 'x' ) AND x IS NOT NULL ) OR x = 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( ) ISNULL FROM x AS x , x AS x NATURAL JOIN x NATURAL JOIN x ORDER BY x ( ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT EXISTS ( SELECT 1 FROM x ORDER BY x ( x ) OVER ( ) ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = 1 , x = 'x' ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT ( x * 1 ) > x FROM x WHERE x = x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x WHERE x IN ( 1 , 1 ) AND x IN ( 1 , 1 ) ORDER BY 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( * ) FROM x WHERE x BETWEEN x AND 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT NULL INTERSECT SELECT NULL ORDER BY x ( x <= 'x' , 1.000000 ) OVER x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = x ( x , x ) WHERE ( SELECT x ( 1 ) OVER ( ORDER BY x ) - x AS x ) BETWEEN x AND 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x , x USING ( x , x ) WHERE x = x AND x = 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x WHERE x ( ) GROUP BY x ( ) ISNULL , x ( 'x' ) , 'x' = x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT 'x' , * FROM x WHERE x IN ( SELECT CAST ( x ( 1 ) AS CHAR ( 1 ) ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x > 1 OR x > 1 AND - x ( x ( DISTINCT x ) ) >= x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x AS SELECT x ( x ) AS x , x ( x ) AS x FROM x GROUP BY x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x , x FROM x WHERE x != 1 GROUP BY x ( x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x FROM x WHERE x > 'x' ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , NULL , 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , CAST ( ( SELECT x FROM x WHERE 1 = x ) AS INT ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 1 , 1 ) , ( 1 , 1 , NULL ) , ( 1.000000 , 'x' , 1 ) , ( 1 , 1 , NULL ) , ( 1 , 1 ) , ( 1 , 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x UNION SELECT DISTINCT * FROM x ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( 'x' ) WHERE NULL BETWEEN ( SELECT x AS x FROM x AS x GROUP BY x ) AND 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 'x' , 1 , 1 ) , ( 1 , 'x' , 1 , 1 ) , ( 1.000000 , 'x' , 1 , 1 ) , ( 1 , 'x' , 1 , 1 ) , ( 1 , 'x' , 1 , 1 ) , ( 1 , 'x' , 1 , 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x AS x JOIN x ON NULL = 1.000000 NOT LIKE 'x' ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 1 ) , ( 1 , 1 , NULL ) , ( 1.000000 , 'x' , 1 ) , ( 1.000000 , 'x' , 1 ) , ( 1 , 1 , NULL ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x AS SELECT x ( ) UNION SELECT 1 ORDER BY x , x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x FROM x WHERE x ( ) GROUP BY CASE x WHEN 1 THEN 1 ELSE 1 END ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x NATURAL JOIN x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x FROM x WHERE ( x = x AND ( x = 1 OR x = 1 ) ) OR ( x >= 1.000000 AND x = 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x * ( 1 - x ) ) , x FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x FROM x ORDER BY x DESC LIMIT ( SELECT x FROM x ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT 'x' FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT * FROM x AS x NATURAL JOIN x INTERSECT SELECT DISTINCT * FROM x ORDER BY x DESC NULLS FIRST ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x ( x , x ) , x ( 1 ) , x ( DISTINCT x ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x ( x , x ) SELECT * FROM x AS x UNION SELECT * FROM x ORDER BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT 1 FROM x AS x JOIN x ON NULL = 1.000000 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ( * ) OVER ( ) , 1.000000 , 'x' ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT * AS x FROM x WHERE x = 'x' AND x = 'x' ORDER BY x DESC LIMIT 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = 1.000000 WHERE x = 1 OR x = 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = 'x' , x = 'x' WHERE x = ( SELECT x FROM x WHERE x = x ORDER BY x , x DESC , x ASC ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ( x ) , x ( x % 1 ) OVER ( ORDER BY x ) ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT 1 FROM x ) WHERE x = 'x' AND x = 'x' AND x = 'x' AND x = x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 'x' , 'x' , 1 , 1 , 'x' , 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 1 , 1 , 'x' ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT 'x' IN ( SELECT DISTINCT x AS x FROM x ) GROUP BY 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x NOT LIKE x ( x ) ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT 1 , x + 1 , 'x' FROM x UNION SELECT DISTINCT * FROM x ORDER BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x ( ) OVER ( ORDER BY x ) , x ( ) OVER ( PARTITION BY x ORDER BY x ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = x ( x ( x ) , x ( ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x AS x FROM x UNION SELECT x + 1 FROM x ORDER BY 1 DESC ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE TABLE x ( x INT , x DOUBLE , x INT ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = x ( x , x > x ( ) IS NOT NULL ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x , x AS x JOIN x NATURAL JOIN x GROUP BY x ( ) ISNULL ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ) , x , x ( x ) , x , 'x' FROM x ORDER BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x , x AS x ORDER BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW WITH x AS ( SELECT x ( ) OVER ( x ) FROM x ) SELECT * FROM x NOT INDEXED NATURAL JOIN x NOT INDEXED ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = x ( ( SELECT CAST ( x ( DISTINCT x ) AS DOUBLE ) ) , x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = 1.000000 WHERE x = 'x' ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( 1.000000 ) , x ( x ) , x ( x ) FROM x GROUP BY 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( * ) OVER ( ORDER BY x DESC , x ASC ) FROM x WHERE x != 1 ORDER BY x DESC , x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x AS SELECT NULL INTERSECT SELECT NULL ORDER BY x ( ) OVER y NULLS FIRST ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT 1 AS x , 1 , 1 = x / 1 , 1 FROM x GROUP BY x ( ) ISNULL ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT 1 , 1 AS x , 1 GROUP BY x ORDER BY x ASC , x ASC ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ( ) , 1 , 1 , x ( x , x ) ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT 1 FROM x WHERE x = x OR x = 'x' ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = NULL WHERE x IN ( SELECT DISTINCT x FROM x WHERE x = ( x = 1 OR x > 'x' ) NOT LIKE 'x' ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x WHERE EXISTS ( SELECT 1 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x SELECT * FROM x WHERE x = 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT DISTINCT 1 , x + 1 , 1 FROM x UNION SELECT DISTINCT * FROM x ORDER BY 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ( ) , NULL , NULL , x ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x FROM x INTERSECT SELECT x , x FROM x WHERE x != 'x' ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x <= 'x' AS x , x ( ) FROM x GROUP BY x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT DISTINCT 1 , x + 1 , 1 FROM x UNION SELECT * FROM x ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x , CAST ( ( x = 1 ) = 1 AS DOUBLE ) ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = x ( ( SELECT x FROM x AS x WHERE x IN ( 'x' ) GROUP BY x ) ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT * FROM x WHERE x = ( SELECT x ( x ) FROM x ) AND x = 'x' ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x FROM x WHERE x IS NULL AND x IN ( 1 , 1 ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT ( SELECT DISTINCT 'x' , 1 , 1.000000 ) WHERE x <= 'x' LIMIT 1 OFFSET 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( 'x' , 1.000000 , 'x' ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( - 1 ) , x ( 1 ) , x ( 1 ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x * ( 1 - x ) ) , x FROM x LIMIT 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x TEXT , x DOUBLE , x INTEGER ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x > 1 OR x ( x NOT LIKE 'x' ) IS NULL + x AND - x ( 1 ) >= x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT x , x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x ( x ( x ) ) , x ( x ) , 'x' FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS WITH x AS ( SELECT * FROM x ) SELECT x ( ) FROM x AS x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x ( * ) ) FROM x AS x , x AS x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x FROM x WHERE x IN ( 1.000000 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x AS SELECT x ( ( SELECT x FROM x WHERE 1 = x ) ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x AS WITH x AS ( SELECT 1 , * FROM x ) SELECT 1 , 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x * ( 1 - x ) ) AS x FROM x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT * FROM x WHERE ( x ) <= 'x' ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x FROM x ORDER BY x DESC , x , x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = x ( x ) WHERE x IN ( x ( * ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x AS SELECT x , x ( x ) AS x FROM x GROUP BY x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x FROM x ORDER BY x LIMIT 1 OFFSET 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x ( ) , x ( 1 ) , x ( DISTINCT x ) FROM x GROUP BY x ( ) ISNULL ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x WHERE ( x + x LIKE 'x' AND x BETWEEN 1 AND 1 ) OR x = 'x' OR x = 'x' ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = NULL WHERE x < ( SELECT x FROM x WHERE x > 1 GROUP BY x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT 1 FROM x ) WHERE x = 1 AND ( x = 1 OR x = 1 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT * FROM x NOT INDEXED NATURAL JOIN x UNION SELECT DISTINCT * FROM x ORDER BY x DESC ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = x ( x ( x , CASE x WHEN 1 THEN 1 ELSE 1 END != x ( 'x' ) , 1 ) , x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x + x * x ) FROM x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x UNION SELECT x FROM x ORDER BY x NULLS LAST ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT x ( x <= 'x' ) , 1 , 1 = x / 1 , 1 FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x * 1 FROM x ORDER BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x EXCEPT SELECT * FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ( ) , x , NULL , x ( x ) = 1 ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS WITH x AS ( SELECT 1 AS x FROM x INDEXED BY x ) SELECT 1 , 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x AS SELECT NULL INTERSECT SELECT NULL ORDER BY x ( x <= 'x' , 1.000000 ) OVER x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE NULL BETWEEN ( SELECT NULL FROM x GROUP BY x ( ) ISNULL , x ) AND 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x > 1 OR x > 1 AND - x ( 1 ) >= ( SELECT 1 ORDER BY 'x' ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT DISTINCT ( SELECT DISTINCT 'x' , 1 , 1.000000 ) ORDER BY 1 NULLS LAST LIMIT 1 OFFSET 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT x NOT LIKE x , x ( 1 ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x , x AS x NATURAL JOIN x NATURAL JOIN x ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT * FROM x UNION SELECT * FROM x ORDER BY x NULLS LAST ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = x ( x NOT LIKE 'x' ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x NATURAL JOIN x UNION SELECT DISTINCT * FROM x GROUP BY NOT x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( 1 , 1 , NULL , x ) FROM x JOIN x ON x = x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x , x ( x ) ) FROM x AS x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , * FROM x WHERE x > 1 GROUP BY NULL ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ) , x ( x , 1 ) OVER ( ORDER BY x ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' / 1 ) , x ( ) , x ( 1 ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x AS x , x AS x , x WHERE x = x LIMIT 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' / 1.000000 ) AS x , x ( x ) , x ( 1 ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 'x' , 1 ) , ( 1 , 1 ) , ( 'x' , 1 ) , ( 'x' , 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( * ) , x ( x ( x ) OVER ( ) , 1 ) AS x FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT x AS x , x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT CAST ( x ( 1 ) AS DOUBLE ) WHERE x ( ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE TABLE x ( x INTEGER , x DOUBLE , x FLOAT UNIQUE ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT x , x * 1 AS x , x FROM x AS x , x AS x , x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x ( x ) OVER ( PARTITION BY x ORDER BY x ) FROM x GROUP BY x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x , 1 ) OVER ( ORDER BY x ) , x ( ) OVER ( ORDER BY x DESC ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( ( SELECT x FROM x WHERE 1 = x ) ) FROM x WHERE x IS NOT NULL ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER NOT NULL , x CHAR ( 1 ) NOT NULL NOT NULL , x INTEGER NOT NULL , x VARCHAR ( 1 ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x AS x , x AS x USING ( x , x ) WHERE x = x AND x = 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( ( SELECT NULL FROM x GROUP BY x ( ) ISNULL , x ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( ) , x ( 1 ) , x ( x ) FROM x ORDER BY x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x ( ) , x ( 1 ) , x != 'x' FROM x GROUP BY x ( ) ISNULL ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT 1 AS x , 1 , 1 = ( x BETWEEN 1 AND 1 ) + 1 / 1 , 1 FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT 'x' IN ( SELECT x FROM x AS x GROUP BY x ) AND 1 GROUP BY 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE TABLE x AS SELECT x , x ( x ) OVER ( PARTITION BY x ORDER BY x DESC NULLS FIRST ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = x ( x ( x ( x ( x ) , x ) ISNULL ) , x ( ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x = ( SELECT x FROM x WHERE x ( 'x' ) ) FROM x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT 'x' IN ( SELECT DISTINCT ( x NOT IN ( 1 ) AND x NOT IN ( 1 ) ) FROM x ) GROUP BY 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT x , x , 1 , 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x AS SELECT x ( * ) , x ( x ) , x ( x ) , x FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT * FROM x AS x , x AS x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( * ) OVER ( ORDER BY x ( x , 1 , 1 ) DESC ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( ( x ( x ( ) ISNULL ) AND x ) , x ( 1 ) ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT 'x' IN ( SELECT DISTINCT x ( ) OVER ( ) FROM x ORDER BY 1 ) GROUP BY 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x + x , x + x FROM x ORDER BY x + x , x + x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW WITH x AS ( SELECT * ) SELECT ( SELECT DISTINCT * , 1 , * , 1.000000 ) LIMIT 1 OFFSET 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( DISTINCT 'x' / 1 ) , x ( 1 ) , x ( x ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x , x AS x , x GROUP BY ( SELECT 1 ) LIMIT 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x AS SELECT NULL INTERSECT SELECT NULL ORDER BY x ( ) OVER x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( 1.000000 , x >= 1.000000 ) WHERE x IN ( 1 , 1 ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x , x ( x ) FROM x GROUP BY x HAVING x < 'x' ORDER BY x DESC ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( ( SELECT x AS x FROM x AS x WHERE x IN ( 'x' ) GROUP BY x ) ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT ( SELECT DISTINCT * , 1 , * , 1.000000 ) LIMIT 1 OFFSET 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = x ( x , x ( x ( 'x' ) > 1 , x ) IS NOT NULL , x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x ) OVER ( ORDER BY x ) FROM x GROUP BY x HAVING x > 'x' ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x FROM x WHERE x = ( SELECT x FROM x INDEXED BY x WHERE NULL = x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT ( x ( 1 ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( ( SELECT x AS x WHERE 1 > x ) ) OVER ( ORDER BY x ) ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x , x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x WHERE ( x = 1 AND ( x = 1 OR x = x ) ) OR ( x = 1 AND x = 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER PRIMARY KEY CHECK ( NOT ( x >= x ( x ( - 1 , x ) , ( x = 1 AND 1 ) ) ) ) ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT 'x' , * FROM x WHERE x IN ( SELECT x FROM x WHERE NULL OR 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ( x , 1 ) OVER ( ) , x ) FROM x GROUP BY x , x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x VARCHAR ( 1 ) , x VARCHAR ( 1 ) , x VARCHAR ( 1 ) , x VARCHAR ( 1 ) , x INTEGER , x VARCHAR ( 1 ) , x VARCHAR ( 1 ) , x VARCHAR ( 1 ) , x VARCHAR ( 1 ) , x VARCHAR ( 1 ) , x VARCHAR ( 1 ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 1 ) , ( 'x' ) , ( 1.000000 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x AS WITH x AS ( SELECT CASE 1 WHEN 'x' THEN 1 WHEN 1 THEN 'x' ELSE 'x' END ) SELECT 1 , 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x , x AS x NATURAL JOIN x NATURAL JOIN x ORDER BY x ( ) NULLS LAST ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x AS SELECT * FROM x , x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1.000000 , 1 , 1 ) , ( 1 , 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x UNION SELECT x FROM x ORDER BY x DESC , x DESC ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x FROM x EXCEPT SELECT x FROM x LIMIT 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW WITH x AS ( SELECT * FROM x ) SELECT x ( x ( x ( ) ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT 1 AS x , x FROM x WHERE x IS NOT NULL ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x ( x , 1 , 1 ) = 'x' ) FROM x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = x ( x , 1.000000 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( DISTINCT x ( x , 'x' ) ISNULL ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x AS SELECT x ( * ) , x >= 1 , x ( x ) , x FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT NULL FROM x AS x , x AS x NATURAL JOIN x NATURAL JOIN x ORDER BY x ( ) NULLS LAST ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x AS x , x AS x NATURAL JOIN x NOT INDEXED GROUP BY NULL ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE TABLE x AS SELECT 1 WHERE ( SELECT 1 , 1 ) OR ( 1 IN ( 1 , 1 ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x FROM x INTERSECT SELECT x , x FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( * ) FROM x AS x , x AS x , x WHERE x != 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT CAST ( x ( x , 1 , 1 ) AS INTEGER ) FROM x LIMIT 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( * ) OVER ( ORDER BY x ) FROM x WHERE x != x GROUP BY x ( DISTINCT x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x FROM x ORDER BY x + x , x LIMIT 1 OFFSET 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( 'x' , 1 , 'x' ) GROUP BY x ( 'x' , 1 ) <= 'x' ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x ( x , 1 ) OVER ( ORDER BY x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x , x ) FROM x WHERE x ( x ( x >= x , x ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT 1 FROM x WHERE x ( ) GROUP BY ( SELECT 1 ) , x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x , 1 ) OVER ( ) , x ( x , 1 ) OVER ( ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( ( x NOT IN ( ( x NOT IN ( 1 ) AND x NOT IN ( 1 ) ) ) AND x NOT IN ( 1 ) ) , x ) AS x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , x FROM x WHERE x IS NULL ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT 1 AS x , 1 , x % x <= x , x NOT LIKE x FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE TABLE x ( x INTEGER , x DOUBLE PRIMARY KEY CHECK ( x ( x ( x ) ) IS NULL + x IS NOT NULL ) , x INTEGER ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x > 1 OR x != 1 AND - x ( 1 ) >= x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x TEXT PRIMARY KEY CHECK ( x ( x ) IS NULL + x IS NOT NULL ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT 1 + 1.000000 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( ) FROM x WHERE x != 1 GROUP BY x ( DISTINCT x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = x ( ( ( x OR NOT x ) BETWEEN 1 AND 1 ) + x ISNULL , x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT ( SELECT x ( ) FROM x WHERE x > 1 AND x = 1 ) FROM x LIMIT 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = x + 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x FROM x AS x JOIN x AS x ON x = x WHERE x IN ( 1 , 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x WHERE x = ( SELECT 1 ) AND x = 1 OR x = 'x' ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT x , * FROM x ORDER BY x + x , x NULLS LAST , x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x FLOAT , x DOUBLE ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ) FROM x WHERE x BETWEEN 1 AND 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( 1 , 1 ) OVER y AS x FROM x WHERE x != 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( ) WHERE ( SELECT 1 ) = 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT * FROM x AS x , x AS x , x WHERE ( SELECT x AS x WHERE 1 > x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x AS SELECT x , 1 AS x FROM x WHERE x % 1 != 1 ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x INDEXED BY x JOIN x AS x ON ( x NOT IN ( 1 ) AND x NOT IN ( 1 ) ) , x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( 1 ) GROUP BY 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = x ( x ( x NOT LIKE x ( x ) , 1 , 1 ) ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( DISTINCT x ( x , x ) , x ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT 1 FROM x GROUP BY x ( 1 ) , ( x * 1 ) > x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x WHERE x IN ( SELECT 1.000000 FROM x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ) , x ( x ) FROM x WHERE x < 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x VARCHAR ( 1 ) PRIMARY KEY CHECK ( - 1.000000 >= x IS NOT NULL ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x WHERE x = 'x' OR x = x OR x = 'x' ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x INT PRIMARY KEY , x INT UNIQUE , x TEXT ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x FROM x WHERE x = ( SELECT x ) OR x > 1 AND NOT x LIMIT 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT ( SELECT DISTINCT * , 1 , 1 , * ) LIMIT 1 OFFSET 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( ) GROUP BY ( SELECT 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x AS x WHERE ( x = 1 AND 1 ) OR 1 = x + 1 GROUP BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 1 , 1 , NULL ) , ( 'x' , 1 ) , ( 'x' , 1 ) , ( 'x' , 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ( x ) OVER ( ORDER BY x ) , 1 ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT * , 'x' FROM x WHERE x BETWEEN 1 AND 1 ) WHERE x LIKE 'x' ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT * FROM x UNION SELECT DISTINCT * FROM x ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT 1 AS x FROM x GROUP BY x ORDER BY 'x' NULLS FIRST ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x , x ( x , 1 ) OVER ( PARTITION BY x ORDER BY 'x' ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x VALUES ( 1 , 1 ) , ( 'x' , 1 ) , ( 'x' , 1 ) , ( 'x' , 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT DISTINCT 1 FROM x , x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ( x , x ) , x ( x ( ) ) ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 1 , 'x' , 'x' ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x > 1 OR x = 1 AND x ( x , x ) <= 'x' = x AND x = 1 AND ( x ) <= 'x' ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT * FROM x NATURAL JOIN x NATURAL JOIN x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT * FROM x AS x JOIN x ON NULL = 1.000000 NOT LIKE 'x' ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = 1 WHERE x >= 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x VALUES ( 1 , 'x' ) , ( 1 , 'x' ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( 1 ) OVER ( ORDER BY x DESC , x ASC ) FROM x AS x , x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x NOT IN ( 1 ) AND x NOT IN ( 1 ) ) , x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT DISTINCT x ( ) OVER ( ORDER BY 1 NULLS LAST ) ORDER BY x ( * ) OVER ( ORDER BY 1 NULLS LAST ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( * ) FROM x WHERE x + x LIKE 'x' ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER PRIMARY KEY CHECK ( CASE x WHEN 1 THEN 1 ELSE 1 END != 1 ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x WHERE ( ( x = 'x' OR x = 'x' ) AND x IS NOT NULL ) OR x = 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x FROM x WHERE x ( ) GROUP BY x ( ) ISNULL , x ( 'x' ) , 'x' = x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x AS SELECT 'x' , 'x' , x ( x , 1 ) OVER ( ) FROM x WHERE x IS NOT NULL ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT 1 , 1 , x ( x ) = 1 , 1 FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = x ( 1 , NOT x <= 'x' , x ( ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 1 ) , ( 1 , 1 , NULL ) , ( 1 , 1 , NULL ) , ( 1.000000 , 'x' , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT 1 AS x , 1.000000 , 1 , 1 GROUP BY x ( ) HAVING x ( ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT 1 FROM x JOIN x USING ( x , x ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT x FROM x AS x , x AS x NATURAL JOIN x NATURAL JOIN x ORDER BY x ( ) NULLS LAST ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x * x ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT 1 , 1 AS x , 1 ORDER BY x ( * ) OVER ( ) LIMIT 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x NOT INDEXED NATURAL JOIN x NOT INDEXED WHERE x = 1 AND x >= 1 AND x < 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x AS x , x AS x WHERE x = 1 LIMIT 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x AS WITH x AS ( SELECT x ( 1 ) AS x FROM x ) SELECT 1 , 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( * ) OVER ( ORDER BY x DESC , x ASC ) FROM x WHERE x != 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = x ( x ( DISTINCT x ) , x , ( x NOT IN ( 1 ) AND x NOT IN ( 1 ) ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ( 'x' , x ( 'x' , 1 ) , x ) ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x IN ( x NOT LIKE x ( x AS x ) IS NULL + x IS NOT NULL ) AND x NOT IN ( 1 , 1 ) AND x = 1 AND x = 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x NOT LIKE x , x FROM x GROUP BY ( x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x FROM x AS x GROUP BY x ( x <= 'x' ) ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x , x AS x , x FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x FROM x WHERE x ( ) GROUP BY x ( ) HAVING x ( 'x' ) > 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = x ( x , 1 , 1 ) WHERE x IN ( SELECT x FROM x ORDER BY x + 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , x ( x ) FROM x , x WHERE x = x GROUP BY x ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT CASE WHEN x != 'x' THEN 1 ELSE 1 END FROM x WHERE x != 1 GROUP BY x ( DISTINCT x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW WITH x AS ( SELECT * FROM x ) SELECT 1 FROM x ON x ( x ) WHERE x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x ( x ) OVER ( ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , x ( x = 1.000000 + 1.000000 ) OVER ( PARTITION BY x ORDER BY x DESC , 'x' ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS WITH x AS ( SELECT x ( 1 ) AS x FROM x ) SELECT x ( ) AS x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( ) IS NOT NULL FROM x WHERE ( x ) GROUP BY x , x HAVING ( 1 = 1 AND ( x ( ) % 1 AND 1 ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x WHERE x IN ( 1 , 1 , NULL , 1 ) AND x IN ( 1 , 1 ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x ( x , x ) SELECT 1 , 1 WHERE 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT ( CAST ( x ( x ) AS DOUBLE ) ) FROM x WHERE x LIKE 'x' ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT 1.000000 , 1 , x FROM x WHERE x != 1 GROUP BY x ( DISTINCT x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x NOT LIKE x , 'x' , 1 GROUP BY x ( DISTINCT x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x ) AS x , x ( x ) , x ( x ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT * FROM x ORDER BY x LIMIT 1 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE TABLE x ( x INT UNIQUE UNIQUE UNIQUE PRIMARY KEY UNIQUE NOT NULL , x VARCHAR ( 1 ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ) , x FROM x AS x , x AS x USING ( x , x ) WHERE x ISNULL ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT x ( ( SELECT x FROM x WHERE 1 = x ) ) GROUP BY 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT 1 AS x , 1 , 1 = x ( x ) , 1 FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x , x ( x , 1 ) OVER ( ORDER BY x ) AS x FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x NATURAL JOIN x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT 1 FROM x AS x , x AS x , x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT 1 AS x , 1 , 1 GROUP BY x ( ) HAVING x ( ) ORDER BY x ( * ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x AS WITH x AS ( SELECT * FROM x ) SELECT 1 AS x , 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x AS x WHERE x ( x ( x ) ) GROUP BY x ( ) ISNULL , x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT DISTINCT 1 IN ( SELECT x FROM x ) AS x GROUP BY NULL ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ) , x ( x ) FROM x GROUP BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( * ) FROM x WHERE x != 1 GROUP BY x ( x ) ORDER BY x ( x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( * ) OVER ( ORDER BY x ) , x FROM x WHERE x ISNULL ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT DISTINCT x FROM x ORDER BY x LIMIT 1 OFFSET 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 'x' ) , ( 1.000000 ) , ( 'x' ) ON CONFLICT DO NOTHING ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT 1 , - 'x' , 1 FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS WITH x AS ( SELECT CASE WHEN x = 1 THEN 'x' ELSE x END AS x FROM x ) SELECT x ( ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x FROM x WHERE x != 1 GROUP BY x ( DISTINCT x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 1 ) , ( 'x' ) , ( 1 ) , ( 'x' ) , ( 1.000000 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = x ( x ( x , 1 , 1 ) ) , x = 'x' ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = x ( x ( ) % - 1.000000 >= x IS NOT NULL , x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x AS SELECT 1 WHERE ( SELECT 1 , 1 ) LIMIT 1 OFFSET 1 OR ( 1 IN ( 1 , 1 ) ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x , x ( x ( 'x' ) > 1 , x ) IS NOT NULL ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = NULL WHERE x = 'x' AND x = 'x' AND x = 'x' ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( * ) OVER ( ORDER BY x DESC , x ASC ) FROM x WHERE x + x LIKE 'x' ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ( x ( x , 1 , 1 ) ) ) FROM x ORDER BY x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT ( SELECT 'x' UNION SELECT DISTINCT x ( x ) ORDER BY 1 ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT * FROM x AS x , x AS x WHERE x = 1 AND x = 1 ORDER BY x DESC NULLS FIRST ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( NULL , 'x' , 'x' ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x , 'x' FROM x WHERE x IN ( 1 , 1 ) ORDER BY x DESC LIMIT 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE UNIQUE INDEX x ON x ( x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x ) OVER ( ORDER BY 1 , 1 ) FROM x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT 'x' IN ( SELECT DISTINCT x >= 'x' FROM x ORDER BY x ( x , 1 ) ) GROUP BY 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x WHERE ( x = 1 AND ( x ( x ) OR x = 1 ) ) OR ( x = 1 AND x = 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE NULL BETWEEN ( SELECT x FROM x AS x GROUP BY x ORDER BY x * 1 ) AND 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x NOT LIKE x ( 1 ) ) FROM x WHERE x != 1 GROUP BY x ( DISTINCT x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( NULL , NULL ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x % 1 ) OVER ( ORDER BY x ) UNION SELECT DISTINCT * FROM x ORDER BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT 1 AS x , 1 , 1 = x / x , 1 FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x AS SELECT * FROM x INDEXED BY x JOIN x AS x ON ( x NOT IN ( 1 ) AND x NOT IN ( 1 ) ) , x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x WHERE x IN ( 1 , NULL ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x ( x ) , x FROM x ORDER BY x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT * FROM x ORDER BY x , x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 1 , 'x' , 'x' , NULL , NULL ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x UNION SELECT DISTINCT * FROM x ORDER BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT NULL , x , x FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x % 1 ) OVER ( ORDER BY x ) FROM x WHERE x BETWEEN 1 AND 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ) FROM x WHERE x != 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x ) , x ( x ) , x ( x ) FROM x AS x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x FROM x WHERE x > 'x' ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT DISTINCT 1 AS x , 1 , 1 = x / 1 , 1 FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 1 , 'x' , 'x' ) , ( 1 , 1 ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = x ( x , 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT 1 FROM x ) WHERE x >= 'x' AND x < 'x' AND x = x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x , x ( x ( x , 1 , 1 ) ) ) FROM x GROUP BY 1.000000 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x AS SELECT ( SELECT x AS x FROM x WHERE x = x ) FROM x , x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 'x' , 1.000000 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x ( * ) FROM x GROUP BY x , x ORDER BY x , x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( 'x' ) OVER ( ORDER BY x DESC , x ASC ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( * ) OVER ( ORDER BY 1 NULLS LAST ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT ( SELECT DISTINCT * AS x , 1.000000 ) LIMIT 1 OFFSET 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( x ( - x ( 1 ) >= x , 1 , 1 ) ) , x = x , x = x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x ) OVER ( ) AS x FROM x GROUP BY x HAVING x > 'x' ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW WITH x AS ( SELECT * FROM x ) SELECT * FROM x WHERE x = 'x' AND x = 'x' ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT x , x FROM x WHERE x != 'x' ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT 1 , x + 1 , * FROM x UNION SELECT DISTINCT * FROM x ORDER BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT ( SELECT x AS x FROM x AS x GROUP BY x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( * ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = x + 1 , x = 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( x ( ) ISNULL ) , x ( 1 ) , x ( 1 ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x AS SELECT 'x' AS x FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 'x' ) , ( 1 ) , ( 'x' ) ON CONFLICT DO NOTHING ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ( x ( x , 1 , 'x' ) ) ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x , x AS x JOIN x NATURAL JOIN x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x , x ( x ) OVER ( PARTITION BY x ) FROM x ORDER BY x , x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( 'x' , x ) FROM x ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ) , 1.000000 * x ( x ) , x ( x ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x INTERSECT SELECT x ( x ) OVER ( ORDER BY x ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT ( SELECT x FROM x AS x GROUP BY x ) AND 'x' AS x FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT 1 IN ( SELECT * FROM x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT ( SELECT x FROM x AS x GROUP BY x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT * FROM x NOT INDEXED NATURAL JOIN x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT ( SELECT DISTINCT 'x' , ( x >= x ) , 1 , 1.000000 ) LIMIT 1 OFFSET 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x AS SELECT * FROM x ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT 'x' IN ( SELECT * FROM x JOIN x USING ( x ) ORDER BY 1 ) GROUP BY 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 1 , 1.000000 , 'x' ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE TABLE x AS SELECT x ( ) AS x INTERSECT SELECT 1 ORDER BY 1 , 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT 'x' IN ( SELECT DISTINCT x AS x FROM x ORDER BY 1 ) GROUP BY 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT 'x' , * FROM x NATURAL JOIN x WHERE x IN ( SELECT 'x' FROM x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , x ( x ) OVER ( PARTITION BY x ORDER BY 'x' DESC NULLS LAST , 'x' ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x NOT LIKE x ( x ) IS NULL + x IS NOT NULL FROM x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 1 , NULL , 1 , 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( 1 = x OR x BETWEEN x AND 1 ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT CASE WHEN 1 THEN 'x' WHEN 1 THEN 'x' ELSE 'x' END ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT 1 FROM x WHERE x != 'x' ) WHERE ( x IN ( 1 , 1 ) ) = 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x > 1 OR x > 1 AND - x ( x ( 1.000000 ) ) >= x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x AS SELECT x ( ) GROUP BY NULL INTERSECT SELECT 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 ) , ( 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ) <= 'x' = x FROM x WHERE x != 1 GROUP BY x ( x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = NULL WHERE x = ( SELECT 1 FROM x WHERE x = x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT 1 , * ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x UNION SELECT x FROM x ORDER BY x ( x ) OVER ( ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x AS WITH x AS ( SELECT DISTINCT x ( 'x' ) AS x FROM x ) SELECT 1 , 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE TABLE x ( x INTEGER NOT NULL PRIMARY KEY ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x WHERE x IN ( SELECT x FROM x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT 1 FROM x AS x WHERE x = x + 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT CASE 1 WHEN 1 THEN 'x' WHEN 1 THEN 'x' ELSE 'x' END ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT x AS x , x , 'x' FROM x UNION SELECT DISTINCT * FROM x ORDER BY x NULLS LAST ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( ( x NOT IN ( x ) AND x IS NOT NULL NOT IN ( 1 ) ) , x ) FROM x ORDER BY x * 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 1 ) , ( 'x' ) , ( 1 ) , ( 'x' ) , ( 1 ) , ( 'x' ) , ( 1 ) , ( 'x' ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x NOT LIKE x ( x ) ) FROM x AS x WHERE x != 1 GROUP BY x ( DISTINCT x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x AS SELECT ( SELECT DISTINCT * FROM x NOT INDEXED NATURAL JOIN x NOT INDEXED ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x BETWEEN ( SELECT x FROM x AS x WHERE ( x = 'x' OR x = 'x' ) AND x IS NOT NULL GROUP BY x ) AND x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( DISTINCT x ) , x FROM x WHERE x = 1 LIMIT 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT DISTINCT * FROM x NATURAL JOIN x UNION SELECT x ( * ) AS x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT x , x ( x , 1 ) OVER ( PARTITION BY x ORDER BY x ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x , x AS x , x AS x NATURAL JOIN x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = x ( x , ( x NOT IN ( 1 ) AND x NOT IN ( 1 ) ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x AS x , x AS x NATURAL JOIN x NATURAL JOIN x ORDER BY x ASC , x DESC ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x FROM x WHERE x = x AND x = x ORDER BY x DESC LIMIT 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x , x AS x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x + x ( x ) ) FROM x ORDER BY x * 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT * FROM x WHERE x = x ORDER BY x , x DESC NULLS LAST , x NULLS LAST ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT 1 , 1.000000 + 1 , 1 FROM x UNION SELECT DISTINCT * FROM x ORDER BY x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x FROM x WHERE x ( ) OVER ( ORDER BY x NULLS LAST ) GROUP BY ( SELECT 1 ) , x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( x ) , x ( 1 ) , x ( x ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT 1 AS x , 1 , x = ( SELECT 1 ) , 1 FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER PRIMARY KEY UNIQUE UNIQUE NOT NULL , x VARCHAR ( 1 ) ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE TABLE x ( x DOUBLE , x DOUBLE , x INTEGER ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x AS x JOIN x ON NULL = 1.000000 ORDER BY x , x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = - 1.000000 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT DISTINCT x ( * ) FROM x GROUP BY x ORDER BY 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x = 1 AND x ( 1.000000 ) AND x = 1 AND x = 1 AND x = 1 AND x >= 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT DISTINCT 1 , x + 1 , 1 FROM x UNION SELECT * FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x % 1 ) FROM x AS x WHERE x != 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x ( ) , x ( x ) , x ( x ) FROM x GROUP BY x ( ) ISNULL ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT ( SELECT DISTINCT 'x' , 1 , 1 , ( x != x ( 'x' ) OR x = 1 ) ) LIMIT 1 OFFSET 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 1 ) , ( 1.000000 ) ON CONFLICT DO NOTHING ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ) , x FROM x AS x JOIN x ON NULL = 1.000000 NOT LIKE 'x' WHERE x ISNULL ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x WHERE ( 1 = 1 AND ( x = 1 OR x = 1 ) ) OR ( x = 1 AND x = 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( 'x' , 1.000000 , 'x' ) GROUP BY 1.000000 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ) = 1 AS x FROM x GROUP BY NOT x > 'x' ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT 1 AS x , 1 , 1 GROUP BY x ( 1 ) HAVING x ( ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT * FROM x WHERE ( x = 1 OR x = 1 ) NOT LIKE 'x' AND x = 'x' ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE TABLE x ( x INTEGER PRIMARY KEY CHECK ( x ( x , x ( * ) , x ( x ) ) IS NULL + x IS NOT NULL ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT CAST ( x ( x ( x ) ) AS INTEGER ) FROM x LIMIT 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x * ( - x ) ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ( x ( x ( 1 ) , 1 , 'x' ) ) ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 1 ) , ( 1 , 1 , NULL ) , ( 1.000000 , 'x' , 1 ) , ( 1 , 1 , NULL ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 , NULL ) , ( 1 , 1 , NULL ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x WHERE x IN ( SELECT x FROM x WHERE x IN ( 1 , 1 ) ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE TABLE x ( x TEXT PRIMARY KEY NOT NULL ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 1 ) , ( 1 , 1 , NULL ) , ( 1 , 1 ) , ( 1 , 1 , NULL ) , ( 1 , 1 ) , ( 1 , 1 ) ON CONFLICT DO NOTHING ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x ( x , x ) SELECT 'x' , x , 1 AS x FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( 1 ) OVER ( ORDER BY x ) FROM x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x AS WITH x AS ( SELECT x ( * ) OVER ( ORDER BY x ) FROM x ) SELECT 1 , 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT NOT x > 'x' FROM x WHERE x = 1.000000 + 1.000000 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT 1 , 1 AS x , 1 GROUP BY x , ( x = 1 AND ( x ( ) % 1 AND 1 ) ) , x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( 1 ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( 'x' ) OVER ( ORDER BY 1 , 1 ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x AS x NATURAL JOIN x NOT INDEXED ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x , x WHERE x = 'x' AND x = 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x FROM x AS x WHERE x IN ( 'x' ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT x ( x ) FROM x WHERE 1 > x OR x > 1 AND x ( ) ISNULL LIMIT 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x ( x ( x , x ) ) OVER ( PARTITION BY x ) FROM x ORDER BY 1 NULLS LAST ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT NOT x >= 'x' , 1 FROM x JOIN x USING ( x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( ) IS NOT NULL FROM x WHERE x ( x > 'x' ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x FROM x WHERE x = ( SELECT x WHERE x = x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x , x ( x ) FROM x ORDER BY x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x FROM x INTERSECT SELECT x + 1 FROM x LIMIT 1 OFFSET 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 'x' ) , ( 1 , 'x' ) , ( 1 , 'x' ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER PRIMARY KEY CHECK ( x ( x , x ) IS NULL + x IS NOT NULL ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x ) SELECT x FROM x ON x ( x ) WHERE x = x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x FROM x AS x , x WHERE x ( ) GROUP BY ( SELECT 1 ) , x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x ) , x FROM x WHERE x + 1 = x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = x ( ( SELECT CAST ( x ( x ) AS INT ) ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT DISTINCT * FROM x UNION SELECT * FROM x ORDER BY x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT x ( x ( 1 ) ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE TABLE x ( x INTEGER PRIMARY KEY CHECK ( x ( x ( x ) ) IS NULL + x IS NOT NULL ) ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT 1 AS x , 1 , 1 FROM x GROUP BY x ( x , x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT 1 , 1 AS x , 1 ORDER BY x ( * ) OVER ( ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x FROM x WHERE x ( ( x = 1 OR x = 1 ) ) OR x = 'x' OR x = 'x' ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT x , x , ( x IN ( 1 , 1 ) ) FROM x GROUP BY x HAVING x < x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ( x ( x ) OVER ( ORDER BY x ) ) OVER ( ORDER BY x ) , x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( ) INTERSECT SELECT 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) SELECT * FROM x UNION SELECT * FROM x ORDER BY x ON CONFLICT DO NOTHING ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x , x ( - 'x' ) OVER ( PARTITION BY x ( x , x ) ) FROM x ORDER BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT x AS x , x , 'x' FROM x UNION SELECT DISTINCT * FROM x AS x ORDER BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( * ) , x ( 1 ) , x ( 1 ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x ) ISNULL FROM x WHERE x != 1 GROUP BY x ( DISTINCT x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x TEXT , x INT , x INT , x VARCHAR ( 1 ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x FROM x WHERE ( x = 'x' AND x BETWEEN 1 AND 1 ) OR ( x = 1 AND x != x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x NOT LIKE x ( 1 ) ) , x FROM x WHERE x IS NOT NULL ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( 'x' , 1 ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT * FROM x WHERE x IN ( SELECT x FROM x ORDER BY x LIMIT 1 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x AS SELECT 1 , 1 FROM x ON x ( x AS x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW DROP TABLE IF EXISTS x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT x AS x , 1 , 1 FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT x ( 'x' ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = x ( x ( x , x , 1 ) , x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x , x ( x , 1 ) OVER ( PARTITION BY x ORDER BY x ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x AS SELECT x ( * ) , x ( DISTINCT x ) , x ( x ) , x FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x SELECT DISTINCT x FROM x AS x ORDER BY x LIMIT 1 OFFSET ( SELECT x FROM x AS x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x * x ) OVER ( ORDER BY x ( x ) , x ASC ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( NULL , NULL ) ON CONFLICT DO NOTHING ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 'x' , 1.000000 ) , ( 1 , 'x' , NULL ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , x ( x ) FROM x GROUP BY x ORDER BY x DESC ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x , x AS x NATURAL JOIN x NATURAL JOIN x GROUP BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = x , x = 'x' ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT x , x FROM x WHERE x = 'x' ORDER BY x ASC , x DESC , x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT * FROM x JOIN x ON x = x NATURAL JOIN x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = NULL WHERE x IN ( SELECT DISTINCT x ( x ) FROM x WHERE x = ( x = 1 OR x > 'x' ) NOT LIKE 'x' ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET ( x , x ) = ( SELECT 1 , 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT 1 FROM x WHERE ( x = 1 AND x = 1 ) OR ( x = 1 AND x = 1 ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) SELECT x ( 'x' , 1 ) , x + 1 FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x ) OVER ( ORDER BY x ) FROM x WHERE x > 1 AND x = 1 ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x , x FROM x WHERE x IS NOT NULL ORDER BY x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( * ) OVER ( ORDER BY x ) FROM x WHERE x + x ( ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x ) OVER ( ORDER BY x ) FROM x ) WHERE x LIKE ( x BETWEEN 1 AND 1 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT DISTINCT ( SELECT DISTINCT 'x' AS x , 1 , 1.000000 ) LIMIT 1 OFFSET 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x NOT LIKE x , x FROM x GROUP BY 'x' , x ( 'x' , 1 ) , x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT * FROM x AS x , x UNION SELECT DISTINCT * FROM x ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x > 1 OR - x ( x ( 1.000000 ) ) >= x AND - x ( 1 ) >= x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x WHERE x IN ( 'x' , 'x' ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x > x ( * ) = 1 OR x > 1 AND - x ( 1 ) >= x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x * x ) AS x FROM x USING ( x , x ) ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x WHERE x = ( SELECT x ) OR x > 1 AND NOT x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE ( x ( 1.000000 ) = 1 OR x = x ) NOT LIKE 'x' OR x > 1 AND - x ( 1 ) >= x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x * x ) AS x FROM x USING ( x , x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT ( SELECT DISTINCT x NOT LIKE x ( x ) , 1 , 1.000000 ) LIMIT 1 OFFSET 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT 1 , x NOT LIKE 'x' , 1 , 1 FROM x GROUP BY x ORDER BY 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( ( NOT ( x IS NULL ) ) AND ( NOT ( x IS NULL ) ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( 1 ) FROM x WHERE x != 1 GROUP BY x ( x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT x , * FROM x GROUP BY x / 1 ORDER BY x , x DESC , x DESC ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = 1 WHERE 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 'x' , 1 ) , ( 'x' , 1 ) , ( 1.000000 ) , ( 'x' , 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x DOUBLE PRIMARY KEY CHECK ( - 'x' ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = 1 WHERE x < 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT x , x FROM x ORDER BY x , x ASC , x ASC ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x UNION SELECT x FROM x ORDER BY x NULLS LAST LIMIT 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x WHERE ( x = 1 AND ( ( x BETWEEN 1 AND 1 ) OR x = 1 ) ) OR ( x = 1 AND x = 1 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( ) IS NOT NULL FROM x WHERE x ( x <= 'x' ) GROUP BY 1 , x HAVING x > 'x' ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x VALUES ( 1 ) , ( 1.000000 ) , ( 1 ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x AS SELECT DISTINCT x , * FROM x WHERE x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW WITH x AS ( SELECT * FROM x ) SELECT DISTINCT CAST ( x ( x / 1 ) AS INTEGER ) FROM x LIMIT 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x AS SELECT 1 , 1 ORDER BY x DESC NULLS LAST , x NULLS LAST ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT * FROM x WHERE ( x = 1 AND 1 ) OR x = 1 GROUP BY x ( 'x' , 1 ) <= 'x' ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x NATURAL JOIN x JOIN x USING ( x , x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT CASE WHEN x NOT IN ( ( x NOT IN ( 1 ) AND x NOT IN ( 1 ) ) , 1 ) OR x = 1 THEN 'x' ELSE 'x' END FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER PRIMARY KEY CHECK ( x ( ) IS NULL + ( x = ( x = 1 OR x = x ) OR x = 1 ) NOT LIKE 'x' IS NOT NULL ) ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 1 ) , ( 1 , 1 , NULL ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x WHERE x = x OR x = 'x' OR x = 'x' ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' / 1.000000 ) , x ( 1 ) , x ( 1 AS x ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x BETWEEN ( SELECT DISTINCT x ( * ) OVER ( ORDER BY x ( ) ) FROM x AS x ) AND x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT ( SELECT DISTINCT ( x IN ( 1 , 1 ) ) , 1 , 1.000000 ) LIMIT 1 OFFSET 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x FROM x ORDER BY x LIMIT 1 OFFSET 1 ON CONFLICT DO NOTHING ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x + 1 , x + 1 FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT ( SELECT DISTINCT x ( 'x' ) LIMIT 1 OFFSET 1 ) LIMIT 1 OFFSET 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( * ) OVER ( ORDER BY x ) , x FROM x GROUP BY x HAVING x ( ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT ( SELECT 1 , 1 ) AS x FROM x AS x GROUP BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x FROM x USING ( x , x ) WHERE x = 1.000000 + 1.000000 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x WHERE x ( x <= 'x' ) ORDER BY x ( * ) OVER ( ORDER BY x ) DESC , 'x' ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , x FROM x WHERE x = 'x' ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 1 ) , ( 'x' ) , ( 1 ) , ( 'x' ) , ( 1.000000 ) , ( 'x' ) , ( 1 ) , ( 1 ) , ( 1 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x , x ( ) OVER ( ORDER BY x DESC ) FROM x ORDER BY x ( ) NULLS FIRST ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW WITH x AS ( SELECT - 'x' FROM x ) SELECT DISTINCT x ( ) OVER ( ) FROM x AS x GROUP BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = x ( x ( x ( x ( x ) , 1 , ( x NOT IN ( 1 ) AND x NOT IN ( 1 ) ) ) ) ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x ) OVER ( ORDER BY x ) FROM x WHERE x ( x , x ) ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x FROM x ORDER BY x DESC LIMIT 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT * , x , x FROM x WHERE ( x ( 'x' ) = 1 OR x = 1 ) NOT LIKE 'x' LIMIT 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT ( SELECT DISTINCT x , 1 , 1 , * ) LIMIT 1 OFFSET 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x WHERE x = 1 AND x = 1 AND x = 1 ORDER BY x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = NULL WHERE ( SELECT x FROM x AS x GROUP BY x ( ) HAVING x ( ) ORDER BY x + x , x + x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT * FROM x UNION SELECT 1.000000 AS x , 1 FROM x ORDER BY x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x FROM x WHERE x IN ( 1 AS x , 1 , 1 ) ORDER BY x DESC ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( x ( x ) OVER ( ORDER BY x ) ) OVER ( ORDER BY x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = x + 1 WHERE x != 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT ( SELECT x AS x FROM x AS x GROUP BY x ) GROUP BY ( SELECT 1 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT 1 = 1 FROM x WHERE x ( ) GROUP BY ( x = x AND 1.000000 BETWEEN 1 AND 1 ) , x ( x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 1 , 1 ) , ( 1 , 1 , NULL ) , ( 1.000000 , 'x' , 1 ) , ( 1 , 1 , NULL ) , ( 'x' ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT DISTINCT x ( x ( 1 ) ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x FROM x WHERE x NOT IN ( 1 , NULL , 1 ) GROUP BY x , x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x ORDER BY x ( ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x WHERE x IN ( x ( ) ISNULL , x ( 'x' ) , 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ( x , x ) , 1 ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( * ) OVER ( ORDER BY x ( x <= 'x' , 1.000000 ) OVER x ) , x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER PRIMARY KEY CHECK ( x ( ) IS NULL + ( x = 1 OR x = 1 ) NOT LIKE 'x' IS NOT NULL ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 'x' , 1 ) , ( 'x' , 1 ) , ( 'x' , 1 ) , ( 'x' , 1 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' / 1.000000 ) , x ( x ) , x ( DISTINCT 1 ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x AS SELECT 1.000000 * x ( x ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT 1 AS x , 1 , x % x <= x , 1 FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x NOT LIKE x ( ) ) FROM x AS x WHERE x != 1 GROUP BY x ( x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( 1 , 1 ) OVER ( ORDER BY x ) AS x FROM x WHERE x != 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x NOT LIKE x , x FROM x WHERE ( SELECT DISTINCT * FROM x NOT INDEXED NATURAL JOIN x NOT INDEXED ) IS NULL ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x AS SELECT DISTINCT ( SELECT DISTINCT 'x' , 1 , 1.000000 GROUP BY NOT x > 'x' ) LIMIT 1 OFFSET 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x AS SELECT x ( x ( x ) ) , x ( x ( x ) ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ( x ) OVER ( ORDER BY CAST ( x AS TEXT ) ) , 1 ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 'x' ) , ( 1 ) , ( 'x' ) , ( 1.000000 ) , ( 1 ) , ( 'x' ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT 1 AS x , x , 1 = x / 1 , 1 FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x = 1 AND x = 1 AND x = 1 AND x = 1 AND x = x AND x = 1 OR x = 'x' ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ( x ( 'x' ) ) , 1.000000 , 1 , x ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x FROM x WHERE x = 'x' ORDER BY x ( x ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( ( NOT ( x IS NULL ) ) AND ( NOT ( x IS NULL ) ) ) FROM x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x , 1 FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( ( x NOT IN ( x ) AND x NOT IN ( 1 ) ) , x ) , x FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x FROM x WHERE x >= 1 AND x >= x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT 1 AS x , 1 , 1 GROUP BY ( SELECT 1 ) ORDER BY x ( ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT ( SELECT NULL INTERSECT SELECT NULL FROM x AS x ) FROM x LIMIT 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x INDEXED BY x ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , ( SELECT x ( x ) FROM x WHERE x < x ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ( x ) ) FROM x ORDER BY x * 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x NOT LIKE x ( DISTINCT x ) ) FROM x WHERE x != 1 GROUP BY x ( DISTINCT x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x , x AS x NATURAL JOIN x NATURAL JOIN x GROUP BY x ( 'x' ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ( 1 ) ) FROM x , x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x ORDER BY x DESC , x DESC , x , x LIMIT 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW WITH x AS ( SELECT * FROM x ) SELECT x FROM x WHERE x = 1 LIMIT 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT 1 FROM x WHERE x ( x <= 'x' ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT 'x' , 1 FROM x WHERE x IS NOT NULL ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT 1 AS x , 1 , x ( ) ISNULL , 1 GROUP BY x ( ) HAVING x ( ) ORDER BY x ( ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( 1 ) , x ( 1 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT * FROM x WHERE x IN ( 1 , 1 ) AND x IN ( 1 , 1 ) ORDER BY x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x FROM x WHERE x = - 1 OR x > 1 AND NOT x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x , x ( x ) FROM x GROUP BY x HAVING x < 'x' ORDER BY - 1 DESC ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT * FROM x NOT INDEXED NATURAL JOIN x NOT INDEXED ORDER BY x ( x , 1 , 1 ) + 1.000000 DESC ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT 'x' , 'x' , 1 , 1 LIMIT 1 OFFSET 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT 'x' , * FROM x WHERE x IN ( SELECT CAST ( 'x' AS INTEGER ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT 1.000000 FROM x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x = ( SELECT x FROM x WHERE x ( x ) ) FROM x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x AS x FROM x , x GROUP BY 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x WHERE x = 'x' AND x != x LIMIT 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x UNION SELECT x FROM x ORDER BY x * 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT 1 FROM x WHERE 1 = x OR x BETWEEN x AND 1 GROUP BY x , x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x , 1 ) OVER ( ORDER BY x ) AS x FROM x WHERE x != 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 1 ) , ( 'x' ) , ( 1 ) , ( 'x' ) , ( 1 ) , ( 'x' ) , ( 1.000000 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x , x WHERE 1 = x AND x = x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ( x , 1 , 1 ) , x ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE TABLE x ( x TEXT PRIMARY KEY , x VARCHAR ( 1 ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ) , x FROM x WHERE x ( x ) < 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = ( ( SELECT x FROM x WHERE x = 1 AND x = 1 GROUP BY x ) AND x ( x ) IS NULL ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT * , x , x , 1 , 1 FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = x ( 1.000000 , 1 , x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT * FROM x , x WHERE x NOT IN ( 1 ) AND x = 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( ( SELECT * FROM x NOT INDEXED NATURAL JOIN x NOT INDEXED ) ) FROM x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( 1 , 1 , x ) FROM x LIMIT 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 'x' ) , ( 1.000000 ) , ( 'x' ) , ( 1 ) , ( 1.000000 ) , ( 1.000000 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT CAST ( x ( 1 ) AS DOUBLE ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' / 1.000000 ) , x ( 1 ) , x ( * ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( DISTINCT x ( x ) , x ) FROM x WHERE x != 1 GROUP BY x ( DISTINCT x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , x ( * ) FROM x GROUP BY x HAVING x ( * ) = 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT * , 1 , 1 = x / 1 , 1 FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x = 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x AS SELECT x AS x , x + 1 AS x FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x ) OVER ( ORDER BY x ) FROM x GROUP BY x HAVING x > 'x' ) WHERE x LIKE 'x' ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ) OVER ( ORDER BY x NULLS LAST ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT ( SELECT DISTINCT 'x' , 1 , 1.000000 ) LIMIT 1 OFFSET 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( ( SELECT x FROM x AS x WHERE x IN ( x ) GROUP BY x ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x TEXT , x INTEGER ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x ( * ) , x , x * x FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x , x WHERE x LIKE 'x' ORDER BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ( ) , x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x , x FROM x AS x , x GROUP BY 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x , x FROM x WHERE ( SELECT 1.000000 , 1 , x ) = 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x ORDER BY x DESC NULLS FIRST ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( * ) GROUP BY 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT * FROM x WHERE ( x = 1 AND ( x = x OR x = 1 ) ) OR ( x = 1 AND x = 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x WHERE x >= 1 ORDER BY x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE TABLE x ( x INT PRIMARY KEY CHECK ( x ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW WITH x AS ( SELECT * FROM x ) SELECT 1 IN ( SELECT * FROM x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT 1 , NULL FROM x AS x , x AS x NATURAL JOIN x NATURAL JOIN x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x FROM x AS x GROUP BY 'x' , x ( x , x ) IS NOT NULL , x , x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( * ) OVER ( ORDER BY x ) FROM x WHERE x ( ) % 1 != 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x , x ) FROM x GROUP BY 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x AS x , x AS x NATURAL JOIN x NATURAL JOIN x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x WHERE x ( x ( ) ) = 1 ORDER BY x DESC ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT ( SELECT DISTINCT x ( * ) , x ( x ) , x ( x ) ) LIMIT 1 OFFSET 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x * ( 1 - x ) ) , x FROM x WHERE x ISNULL ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( 1 , 1 , x ( 'x' = x ) ) FROM x ORDER BY x DESC ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT 1 AS x , 1 , 1 = x / 1 , 1 FROM x ORDER BY x DESC NULLS LAST ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = 1 WHERE x ( ( x NOT IN ( 1 ) AND x IS NOT NULL NOT IN ( 1 ) ) , x ) AND x < 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT 1 AS x , 1 , 1 FROM x AS x , x AS x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x FROM x WHERE x ( ( x = 1 OR x = 1 ) ) OR x = 'x' OR x = 'x' ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT 1 AS x , 1 , x ( x ) = x / 1 , 1 FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , NULL , 1 , 1 ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x FROM x AS x WHERE ( ( x OR NOT x ) OR x = 1 ) NOT LIKE 'x' OR x > 1 AND NOT x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT 1 , x + 1 , 1 FROM x UNION SELECT DISTINCT 'x' FROM x ORDER BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x AS SELECT x ( ) UNION SELECT 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 1 ) , ( 'x' ) , ( 1 ) , ( 'x' ) , ( 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x > 1 OR ( x = 1 ) AND - x ( 1 ) >= x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x IS NULL AS x , * FROM x WHERE x IN ( SELECT 'x' FROM x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( ) OVER ( ORDER BY x ( * ) OVER ( ) ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' / 1 ) , x AS x , x ( 1 ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT * FROM x WHERE ( - 'x' >= x AND ( x = 1 OR x = 1 ) ) OR ( x = 1 AND x = 1 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = x ( 1 , 1 , x ( x ) = 1 , 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT ( SELECT DISTINCT 'x' , 1 , 1.000000 GROUP BY NOT x > 'x' ) LIMIT 1 OFFSET 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x + 1 FROM x EXCEPT SELECT x FROM x LIMIT 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( ( x = x AND 1.000000 BETWEEN 1 AND 1 ) , x ) FROM x ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT x ( x , x , 'x' , x ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x , x ( x ( x , x ) ) OVER ( PARTITION BY x ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x > 1 OR x > 1 AND CASE x WHEN 1 THEN 1 ELSE 1 END != 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE TABLE x ( x FLOAT , x DOUBLE , x INTEGER ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT 'x' , x ( x , 1 ) AS x FROM x ORDER BY x ( x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x ( x , 1 ) OVER ( ) , x ( x ) OVER ( ) FROM x ORDER BY x DESC NULLS FIRST ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , x ( x ) OVER ( PARTITION BY x ORDER BY x DESC NULLS LAST , 'x' ) AS x FROM x ON x ( x ) WHERE x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT x FROM x WHERE x ( 'x' = x ) OR x = 'x' OR x = 'x' ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x , x AS x NATURAL JOIN x NATURAL JOIN x AS x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x WHERE x >= 1 AND x < 1 ORDER BY x ( x , 1 , 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x INT UNIQUE ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x WHERE x = 'x' AND x = 'x' GROUP BY x , x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x ( x ) ) FROM x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x AS x WHERE x = 1 AND x = 1 ORDER BY x DESC NULLS FIRST ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT x ( x ( x ) OVER ( ORDER BY x ) , 1 ) FROM x WHERE x IS NOT NULL ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT x ( x ) FROM x UNION SELECT DISTINCT * FROM x ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x % 1 ) OVER ( ORDER BY x ) FROM x AS x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT 1 AS x , x , 1 = x / 1 , 1 FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x AS SELECT x FROM x USING ( x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x WHERE x = 1 AND x = x AND x ( 1 ) = 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT 'x' >= 1 AND 'x' <= x FROM x UNION SELECT DISTINCT * FROM x ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT 1 AS x , 'x' , 1 , 1 FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT 1 FROM x GROUP BY x HAVING x ( * ) = 1 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE TABLE x AS SELECT * FROM x WHERE x = x AND x = 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT x ( ) , 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT 1 FROM x WHERE x != x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT x ( 1.000000 ) FROM x WHERE x != 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x AS SELECT * FROM x UNION SELECT * FROM x WHERE CASE WHEN x != 'x' THEN 1 ELSE 1 END ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER PRIMARY KEY CHECK ( ( x = 1 OR x > 'x' ) NOT LIKE 'x' ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER NOT NULL , x CHAR ( 1 ) NOT NULL , x VARCHAR ( 1 ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ) OVER ( ORDER BY CAST ( x AS TEXT ) , x ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( ) ISNULL FROM x WHERE CASE x WHEN 1 THEN x ELSE 1 END != 1 GROUP BY x ( DISTINCT x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , x ( x ) OVER ( PARTITION BY x NOT LIKE 'x' ORDER BY x ) FROM x GROUP BY x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x VALUES ( 1 ) , ( 'x' , 1 ) , ( 'x' , 1 ) , ( 'x' , 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = x ( x ( 1.000000 ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x AS SELECT ( SELECT x FROM x AS x GROUP BY NOT x > 'x' ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x AS SELECT DISTINCT x ( * ) FROM x GROUP BY x ORDER BY 1 LIMIT 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT ( SELECT x FROM x WHERE x ) FROM x ORDER BY x ( x ) OVER ( ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x AS x , x AS x , x AS x NATURAL JOIN x NOT INDEXED ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT ( SELECT x WHERE x = x ) FROM x AS x GROUP BY x ORDER BY 1 , 1 DESC ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT ( x ) FROM x ( x , x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x , x ( x ) OVER ( PARTITION BY x , ( 1 = 1 AND ( x ( ) % 1 AND 1 ) ) ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( 1.000000 , 1 ) OVER ( ORDER BY x ) FROM x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT ( 1 = 1 AND ( x = 1 ) = 1 ) AS x , 1 , 1 FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x NOT INDEXED NATURAL JOIN x NOT INDEXED GROUP BY 'x' ORDER BY x ( x , 1 , 1 ) + 1.000000 DESC ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' / 1 ) , x ( x ) , x ( 'x' ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( ) , 1 UNION SELECT DISTINCT * FROM x ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( x , 1 ) , x ( 1 ) , x ( x ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 1 , 1 , NULL ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE TABLE x ( x INTEGER PRIMARY KEY , x TEXT , x TEXT , x TEXT , x TEXT , x TEXT , x TEXT , x TEXT , x TEXT , x TEXT , x TEXT , x TEXT , x CHAR ( 1 ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( * ) OVER ( ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x AS SELECT x + 1 , x ( 1 ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = x ( x ( ) , 1 , 1 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x , x ( x ( x , x ) ) OVER ( PARTITION BY x ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , x ( x ) , x ( x ) , x FROM x GROUP BY 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( 'x' ) OVER ( ORDER BY x ) FROM x WHERE x = 'x' AND ( x = 1 OR x = 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , x ( x ) OVER x FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( * ) FROM x WHERE x != 1 GROUP BY x ( DISTINCT x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT CAST ( x ( DISTINCT x / 1 ) AS FLOAT ) FROM x LIMIT 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' / 1 ) , x ( 'x' ) , x ( 1 ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * , 'x' FROM x WHERE x = 1 AND ( x = 1 OR x = x ( 1 ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER PRIMARY KEY , x VARCHAR ( 1 ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT 1 AS x , 1 , 1 FROM x ORDER BY x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x AS x , x ( 1 ) , x ( 1 ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x NOT LIKE x ( x ) ) AS x FROM x WHERE x != 1 GROUP BY x ( DISTINCT x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( * ) OVER ( ) , 1 >= ( SELECT x ( * ) FROM x ) IS NULL AS x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x ( ) ) , x ( x ) , x ( x ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( ) , x ( 1 ) , x ( x ( 1 ) ) FROM x AS x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x FROM x WHERE x IN ( SELECT x FROM x ORDER BY x DESC LIMIT 1 ) ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT * FROM x WHERE x = x AND x = 'x' ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x FROM x WHERE x = 'x' ) WHERE NULL IN ( x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x % 1 ) OVER ( ORDER BY x ) FROM x WHERE x != 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT * FROM x UNION SELECT * FROM x ORDER BY x ON CONFLICT DO NOTHING ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT 'x' IN ( SELECT 1 AS x FROM x AS x , x AS x , x ) GROUP BY 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW WITH x AS ( SELECT x ( ) OVER ( x ) FROM x ) SELECT x FROM x USING ( x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE TABLE x ( x INTEGER , x CHAR ( 1 ) , x VARCHAR ( 1 ) ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x FROM x WHERE x = 'x' OR ( x != x ( 'x' ) OR x = 1 ) OR x = 'x' ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( * ) FROM x AS x WHERE x BETWEEN 1 AND 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT DISTINCT 1 , x + 1 , NULL FROM x UNION SELECT DISTINCT * FROM x ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ) OVER ( ORDER BY x ) , x FROM x WHERE x IS NOT NULL ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( * ) FROM x WHERE x + x LIKE x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x , 'x' , 'x' ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT DISTINCT 1 , x + 1 , 1 FROM x UNION SELECT DISTINCT x FROM x ORDER BY x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( 1.000000 ) WHERE x = x GROUP BY x , x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT DISTINCT 1 AS x , 1 , 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x NATURAL JOIN x NATURAL JOIN x ORDER BY x ( ) LIMIT 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x VALUES ( 1 ) , ( 1 ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x > 1 OR x > 1 AND x = - 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( ) FROM x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x NATURAL JOIN x UNION SELECT * FROM x ORDER BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x NATURAL JOIN x NATURAL JOIN x GROUP BY NOT x > 'x' LIMIT 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( - 1 ) FROM x WHERE x != 1 GROUP BY x ( x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x , x FROM x WHERE x = 1 AND x IN ( 1 , 1 ) ORDER BY x DESC , x DESC ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x FROM x AS x WHERE x = 1 OR ( ( x * 1 ) > x AND x = 1 ) GROUP BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) ON CONFLICT DO NOTHING ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ) , x ( x ) , 'x' FROM x WHERE x NOT IN ( 1 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( ) WHERE ( SELECT x FROM x AS x GROUP BY x ORDER BY x DESC NULLS FIRST ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT x FROM x WHERE x = 'x' ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x > 1 OR x > 1 AND - x ( x ( x , 'x' ) ISNULL ) >= x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( 1.000000 , 1.000000 ) WHERE x IN ( 1 , - 'x' , 1 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x VALUES ( 'x' , 1.000000 , 1 ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x * 1 + x FROM x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW WITH x AS ( SELECT * ) SELECT x FROM x JOIN x USING ( x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( x % 1 ) = 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 'x' ) , ( 1 ) , ( 'x' ) , ( 1.000000 ) , ( 'x' ) , ( 1.000000 ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x ( x , x , 1 ) , 1 ) FROM x ORDER BY x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE TABLE x ( x TEXT , x INTEGER PRIMARY KEY ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x AS WITH x AS ( SELECT * FROM x ) SELECT CAST ( x ( 1 ) AS DOUBLE ) WHERE x ( ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW WITH x AS ( SELECT * FROM x ) SELECT x ( x ( 1 ) AS x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT x ( * ) OVER ( ORDER BY 1 NULLS LAST ) ORDER BY x ( * ) OVER ( ORDER BY 1 NULLS LAST ) NULLS FIRST LIMIT 1 OFFSET 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x VALUES ( 1 , 'x' , 1.000000 ) , ( 1 , 'x' , 1.000000 ) , ( 1 , 'x' , 1.000000 ) , ( 1 , 'x' , 1.000000 ) , ( 1 , 'x' , 1.000000 ) , ( 1 , 'x' , NULL ) , ( 1 , 'x' , NULL ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( 1 ) , x ( 1 ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x + 1 < 1 ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT 'x' , * FROM x WHERE x IN ( SELECT x ( x ) FROM x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER , x TEXT , x INTEGER ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x SELECT ( 'x' / 1 ) , x ( 1 ) , x ( 1 ) FROM x AS x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x WHERE x = 1 AND ( 1 = 1 AND x = 1 ) = 1 ORDER BY x DESC NULLS FIRST ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT * , 'x' FROM x WHERE x IN ( 1 , 1 ) ORDER BY x DESC LIMIT 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x ( x / 1.000000 ) , ( 1 ) , x ( 1 ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ) OVER ( ORDER BY x ) , x FROM x WHERE x ISNULL ORDER BY x DESC ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( * ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ) , x ( x ) FROM x ORDER BY x * 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x NOT LIKE x ( x ) ) FROM x AS x WHERE x != 1 GROUP BY x ( x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 'x' , 'x' , 1 , 'x' , 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 1 ) , ( 1.000000 , 'x' , 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ( ) ISNULL , x ) ISNULL FROM x WHERE x != 1 GROUP BY x ( DISTINCT x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x AS WITH x AS ( SELECT x ( 'x' ) AS x FROM x AS x INDEXED BY x ) SELECT 1 , 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT x ( x ( * ) OVER ( ) , 1.000000 , 'x' ) AS x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( ( SELECT * FROM x WHERE x IS NULL ) ) FROM x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = x WHERE x IN ( 1 , 1 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x FROM x WHERE x IN ( SELECT x FROM x ORDER BY x ) ORDER BY x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 1 ) , ( 1 , 1 , NULL ) , ( 1.000000 , 'x' , 1 ) , ( 1 , 1 , NULL ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 , NULL ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x * x ) * 1.000000 FROM x ORDER BY x , x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT x ( x NOT LIKE x ( x ) ) FROM x WHERE x != 1 GROUP BY x ( DISTINCT x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT ( SELECT x AS x WHERE 1 > x ) FROM x NOT INDEXED NATURAL JOIN x ORDER BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( 1 ) OVER ( ORDER BY x ) - x AS x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x ( x ) SELECT x FROM x WHERE x = 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ( x ( x ) ) ) FROM x GROUP BY x ORDER BY x * 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 1.000000 ) , ( 1.000000 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER PRIMARY KEY CHECK ( x ( ) IS NULL + ( x ( 'x' ) = 1 OR 1.000000 = 1 ) NOT LIKE 'x' IS NOT NULL ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x INT ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( x + 1 = x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x NATURAL JOIN x NATURAL JOIN x ORDER BY x ( ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' / 1.000000 ) , x ( 1 ) , - 'x' >= x FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x FROM x WHERE 1.000000 = 1.000000 + 1.000000 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x GROUP BY x UNION SELECT x FROM x ORDER BY x NULLS LAST ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT ( SELECT x ) , x ( x , 1 ) OVER ( ORDER BY x ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x ) OVER ( ORDER BY x NULLS LAST ) FROM x ) WHERE x LIKE x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = x ( ( SELECT DISTINCT x ( 'x' ) OVER ( ORDER BY NULL ) FROM x ) , x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x WHERE ( x = x AND 1 ) OR x = 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT 1 FROM x WHERE 'x' = x OR x = x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT 1 WHERE x != x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( * ) FROM x AS x , x AS x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x NOT LIKE x , 'x' , 1 ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = x ( ) WHERE x > 1 OR x > 1 AND - x ( 1 ) >= x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( ) ISNULL FROM x WHERE x != 1 GROUP BY x ( x , x , 1 ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( ( x ( x ( ) ISNULL ) AND x ) , x ( NULL ) ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT DISTINCT x , x * x FROM x WHERE ( x >= x ) OR 1 + 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT 1 , x ( ) ISNULL , 1 FROM x UNION SELECT DISTINCT * FROM x ORDER BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT * FROM x UNION SELECT * FROM x ORDER BY x DESC NULLS LAST ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT ( SELECT DISTINCT 'x' , 1 , x ( x , x ) IS NOT NULL , 1.000000 ) LIMIT 1 OFFSET 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( * ) OVER ( ORDER BY x ) FROM x WHERE x != 1 GROUP BY x ( x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' / 1 ) , x ( 1.000000 ) , x ( 1 ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x , x ) FROM x AS x GROUP BY x ORDER BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x AS SELECT x ( ) INTERSECT SELECT 1 GROUP BY x ( ) ORDER BY x ( ) NULLS LAST ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT ( SELECT DISTINCT - 'x' >= x , 1 , 1.000000 ) LIMIT 1 OFFSET 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT * FROM x UNION SELECT DISTINCT * FROM x ORDER BY NULL DESC , 'x' ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , x = x ( * ) , x ( * ) FROM x GROUP BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( ( SELECT x FROM x AS x GROUP BY x ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x AS WITH x AS ( SELECT * FROM x ) SELECT * FROM x NATURAL JOIN x USING ( x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT 'x' , x FROM x WHERE x IN ( SELECT 'x' FROM x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ) , x FROM x WHERE x ( x ) <= 'x' = x ( ) IS NULL + x IS NOT NULL ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' / 1.000000 ) , x ( 1 ) , x >= x FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x , x = x ( * ) , x ( x ) OVER ( ) FROM x GROUP BY ( x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT 1 AS x , 1 , 1 = x / 1 , 1 FROM x ORDER BY x DESC NULLS LAST ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = x ( x ( 'x' ) > 1 , x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x FROM x WHERE x ( ) GROUP BY x HAVING ( 1 = 1 AND ( x = 1 ) = 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT 1 FROM x AS x JOIN x ON NULL = 1.000000 , x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x NOT LIKE x ( ) ) FROM x WHERE x != 1 GROUP BY x HAVING x ( 'x' ) > 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x AS x , x AS x WHERE ( x = 1 AND 1 ) OR x = 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 'x' ) ON CONFLICT DO NOTHING ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT ( SELECT DISTINCT 'x' AS x , 1 , 1.000000 ) LIMIT 1 OFFSET 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT DISTINCT * FROM x NATURAL JOIN x GROUP BY 1.000000 ORDER BY x LIMIT 1 OFFSET 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = x ( x ( ( SELECT x FROM x WHERE x = x ) , 1 ) ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT 1 , x + x , 1 FROM x UNION SELECT DISTINCT * FROM x ORDER BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x AS x INTERSECT SELECT DISTINCT * FROM x ORDER BY x DESC NULLS FIRST ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x WHERE ( x OR NOT x ) OR x ( x NOT LIKE x ( x ) , 1 , 1 ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = NULL WHERE x IN ( SELECT DISTINCT x NOT LIKE 'x' FROM x WHERE x = x + 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x FROM x WHERE x ( x <= 'x' ) GROUP BY ( SELECT 1 ) , x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 1 , 1 ) , ( 1 , 1 , NULL ) , ( 1.000000 , 'x' , 1 ) , ( 1 , 1 , NULL ) , ( 1 , 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT 1 AS x , 1 , ( 'x' = 1 AND x = 1 ) = x , 1 FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x > 1 OR x > 1 AND x ( 1.000000 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT DISTINCT 'x' IN ( SELECT DISTINCT x ( 1 , 1 ) OVER ( ) FROM x ORDER BY 1 ) GROUP BY 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT ( CASE WHEN x != 'x' THEN 1 ELSE 1 END ) AS x , x FROM x WHERE x ( x ) <= 'x' = x ISNULL ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x FROM x AS x GROUP BY x ORDER BY 1 + x ( x ) OVER ( ORDER BY x ) DESC ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x WHERE x > ( SELECT x ( * ) FROM x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x WHERE x >= 1 ORDER BY ( SELECT x ORDER BY * DESC NULLS LAST ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT DISTINCT x ( x , x ( x ( ) ISNULL , x ) ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x , x ) FROM x GROUP BY x , x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x ( ( NOT ( x IS NULL ) ) AND ( NOT ( x IS NULL ) ) ) , x FROM x WHERE x ISNULL ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , x FROM x WHERE x = 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x VALUES ( 1.000000 , 'x' ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x AS SELECT * FROM x AS x , x AS x , x AS x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( CASE x WHEN 'x' THEN 1 ELSE 1 END ) , x ( CASE WHEN x = 'x' THEN 1 END ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS WITH x AS ( SELECT * FROM x LIMIT 1 OFFSET 1 ) SELECT x ( ) OVER ( ORDER BY x ( ) OVER x NULLS FIRST ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x AS SELECT x INTERSECT SELECT NULL ORDER BY x ( ) OVER x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x > 1 OR x > 1 AND x ( x ) IS NULL + x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE TABLE x ( x INTEGER PRIMARY KEY CHECK ( x ( ) IS NULL + ( x = 1 OR x = ( x = 1 OR x = x ) ) NOT LIKE NOT ( 'x' = x AND x = 1 ) ) ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x ) OVER ( ) FROM x ORDER BY x DESC , x , x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT x , x FROM x , x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' / 1 ) , x ( 1 ) , x ( x ) FROM x AS x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE TABLE x AS SELECT x , x AS x , 'x' AS x FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE NULL BETWEEN ( SELECT x FROM x AS x GROUP BY ( SELECT 1 ) ) AND 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ISNULL < 1 + x FROM x WHERE x != 1 GROUP BY x ( DISTINCT x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x AS x , x AS x FROM x ORDER BY ( SELECT x ORDER BY 1 ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x > 1 OR CASE x WHEN 1 THEN x ELSE 1 END != 1 OR x = 'x' ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 1 ) , ( 1 , 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x AS SELECT * FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE TABLE x AS SELECT NULL FROM x GROUP BY x , ( 1 = 1 AND ( x ( ) % 1 AND 1 ) ) , x ( x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT * FROM x AS x , x AS x NATURAL JOIN x NATURAL JOIN x ORDER BY NULL ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT ( x NOT IN ( 1 ) AND x NOT IN ( 1 ) ) , x FROM x WHERE x ISNULL ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS WITH x AS ( SELECT * FROM x LIMIT 1 OFFSET 1 ) SELECT x ( ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = NULL WHERE x = ( SELECT * FROM x WHERE x = x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , x ( x ) OVER ( PARTITION BY x ORDER BY x DESC NULLS FIRST ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT * FROM x WHERE x ( x <= 'x' ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x WHERE x IN ( 1 , 1 ) UNION SELECT DISTINCT * FROM x ORDER BY x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x FROM x WHERE x ( ) GROUP BY ( SELECT 1 ) , x ORDER BY x NULLS FIRST ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , x IN ( 1 , x >= x , 1 ) FROM x ORDER BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x FROM x WHERE ( x = 1 AND x = 1 ) OR ( x = 1 AND x ( 'x' AS x ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x AS WITH x AS ( SELECT x ( 'x' ) AS x FROM x ) SELECT 1 , x ( * ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT x ( x ( x ( x NOT LIKE 'x' , x ) IS NOT NULL ) , x ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT 1 FROM x WHERE x != x ( ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x INTERSECT SELECT x FROM x GROUP BY CASE x WHEN 1 THEN 1 ELSE 1 END ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x AS SELECT x ( x ) AS x , x ( x ) AS x FROM x GROUP BY x HAVING x > 'x' ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT 1 IN ( SELECT ( SELECT DISTINCT 'x' AS x , 1 , 1.000000 ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = NULL WHERE x = ( SELECT 'x' / 'x' , 'x' / 'x' , 'x' / 'x' ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT 1 , x + 1 , 1 UNION SELECT DISTINCT * FROM x ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT * FROM x AS x UNION SELECT * FROM x ORDER BY x ON CONFLICT DO NOTHING ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT ( SELECT DISTINCT x ( x , x ) , 1 , 1.000000 ) LIMIT 1 OFFSET 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' / 1 ) , x ( x ) , x ( 1 ) FROM x AS x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , x ( x , x ) FROM x ORDER BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( CASE WHEN x != x ( ) THEN 1 END ) , x ( CASE WHEN x = 'x' THEN 1 END ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ( x ( ) ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x JOIN x USING ( x , x ) WHERE x ORDER BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT x ( x ) OVER ( ) AS x FROM x JOIN x NATURAL JOIN x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( ) IS NOT NULL , x , x ( x , 1 ) OVER ( ) FROM x WHERE x BETWEEN 1 AND 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT ( SELECT DISTINCT 'x' , 1 , 1 , x ) LIMIT 1 OFFSET 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x AS SELECT * FROM x NOT INDEXED NATURAL JOIN x NOT INDEXED WHERE x = 1 AND x >= 1 AND x < 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT 1 FROM x GROUP BY x ( x ) , ( x * 1 ) > x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE TABLE x ( x INTEGER PRIMARY KEY CHECK ( x ) , x INT ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT * FROM x WHERE ( x ( ) % 1 AND 1 ) OR x = 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = NULL WHERE x IN ( SELECT x ( x % 1 ) OVER ( ORDER BY x ) ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( - 'x' , x ) FROM x ORDER BY x DESC ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( CASE WHEN x LIKE 'x' THEN x * ( 1 - x ) ELSE 1 END ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = x ( ( SELECT 1 AS x FROM x AS x GROUP BY x ( 'x' ) ) ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = x ( x ( x ( x ) IS NULL + x IS NOT NULL ) ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x ) FROM x WHERE x = 1 AND x = 1 AND x = 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER PRIMARY KEY , x TEXT , x TEXT , x TEXT , x TEXT ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT 'x' IN ( SELECT DISTINCT x ( 1.000000 ) OVER ( ) FROM x ORDER BY 1 ) GROUP BY 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( 1 , 1 , x , x ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT 'x' AS x FROM x WHERE 'x' != 1 GROUP BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x AS WITH x AS ( SELECT x ( * ) OVER y AS x FROM x ) SELECT 1 , 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = NULL WHERE NULL BETWEEN ( SELECT x FROM x WHERE x = 1 AND x < 1 GROUP BY - 'x' >= x ) AND 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x AS x , x AS x FROM x GROUP BY x , x ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = x ( x / 1 , x / 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ) , x ( x ) , x ( x ) , x FROM x WHERE x ISNULL ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x ) FROM x WHERE x LIKE 'x' ORDER BY x ASC ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = x + 1 WHERE x IN ( SELECT x FROM x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x VALUES ( 'x' , 1 , NULL ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x AS SELECT x , x ( x ) OVER ( PARTITION BY x ORDER BY x ) FROM x GROUP BY 1 AS x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x FROM x NATURAL JOIN x WHERE x = 'x' AND x = 'x' ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x ( x ) <= 'x' = x ISNULL ) FROM x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 1 ) , ( 1.000000 ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT 1 FROM x , x GROUP BY 1 HAVING 1.000000 + 1.000000 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT x FROM x AS x WHERE - 'x' >= x AND x = 1 OR x = 'x' ORDER BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT DISTINCT 1 AS x , 1 , x ( x ( 1.000000 ) ) , 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x FROM x WHERE x = 1 LIMIT ( SELECT x FROM x GROUP BY x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x WHERE x >= 1 AND x < 1 ORDER BY x DESC , x , x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x UNION SELECT 1.000000 * x ( x ) FROM x ORDER BY * ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT x FROM x WHERE - 'x' >= x AND x = 1 OR x = 'x' ORDER BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = 1 , x = 1 , x = 1 , x = 1 , x = 1 , x = 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x AS SELECT * FROM x , x GROUP BY 1 , 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x , x ( x * ( 1 - x ) ) AS x FROM x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT 1 AS x , ( SELECT DISTINCT x ( ) LIMIT 1 OFFSET 1 ) , 1 , 1 FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x NOT LIKE x ( x ) ) FROM x WHERE x != 1 GROUP BY x ( ) , x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x AS x FROM x ORDER BY x DESC NULLS LAST , x NULLS LAST ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x NOT LIKE x , 'x' , 1 ) FROM x GROUP BY x ( x NOT LIKE 'x' ) ISNULL ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 'x' , 1 , 1 ) , ( 1 , 'x' , 1 , 1 ) , ( 1 , 'x' , 1 , 1 ) , ( 1 , 'x' , 1 , 1 ) , ( 1 , 'x' , 1 , 1 ) , ( 1 , 1 ) ON CONFLICT DO NOTHING ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x , x ) FROM x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x , x ) FROM x WHERE x != 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = x + x WHERE x + 1 = x % 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x CHAR ( 1 ) , x INT , x CHAR ( 1 ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = x + 1 WHERE x <= 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT x + 1 , x ( 1 ) , x ( 1 ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x INTERSECT SELECT x + 1 FROM x ORDER BY x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x SELECT ( 1.000000 / 1 ) , x ( 1 ) , x ( 1 ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( * ) OVER ( ) FROM x WHERE x BETWEEN 1 AND 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x NOT INDEXED NATURAL JOIN x NOT INDEXED ORDER BY x ASC ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x ( x , x ) SELECT x ( x * 1 + 1 , 1 ) , x + NULL FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = x ( ( x NOT IN ( x ) AND x NOT IN ( 1 ) ) , x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x SELECT ( x NOT IN ( x ) AND x NOT IN ( 1 ) ) , x + x FROM x WHERE x ORDER BY x DESC LIMIT 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT 1 , 1 AS x , 1 LIMIT 1 OFFSET 'x' ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT x ( x ( ) , 1 , 'x' , 1 , x ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( * ) FROM x WHERE x = 'x' ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x AS SELECT NULL ORDER BY x ( ) OVER x NULLS FIRST ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 1 ) , ( 1.000000 , 1 , 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x WHERE x = 1 AND x IN ( 1 , 1 ) LIMIT 1 OFFSET 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT x FROM x AS x , x AS x NATURAL JOIN x NATURAL JOIN x GROUP BY NULL ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT 1 FROM x , x WHERE x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x NATURAL JOIN x NOT INDEXED GROUP BY 1 , x HAVING x > 'x' ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT 1.000000 FROM x WHERE x ORDER BY x DESC LIMIT 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = 1 WHERE x IS NULL AND x < 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x + x ) FROM x WHERE x != 1 GROUP BY x ( DISTINCT x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' / 1 ) , x ( * ) , x ( * ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x AS SELECT x ( x ) , x ( x ) , x ( x ) FROM x LIMIT 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x VALUES ( 'x' , NULL , 'x' ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT 1 AS x , - 'x' >= x , 1 = x / 1 , 1 FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( x > 1 ) , x ( 1 ) , ( x ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' / 1 ) , x ( 1 ) , NULL FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( * ) OVER ( ORDER BY x ( x ( * ) ) , x ASC ) AS x FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( ) , x ( 1 ) , x ( x ) FROM x GROUP BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x INDEXED BY x WHERE x = ( SELECT x FROM x INDEXED BY x WHERE NULL = x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x , x ( x * ( 1 - x ) ) AS x , x FROM x WHERE x != 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 1 , 'x' , 'x' , 1 ) , ( 1 , 'x' , 'x' , 1 ) , ( 1 , 'x' , 'x' , 1 ) , ( 1 , 'x' , 'x' , 1 ) , ( 1 , 'x' , 'x' , 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT ( SELECT DISTINCT 'x' , 1 , 1.000000 ) LIMIT ( SELECT x FROM x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ) OVER ( ) AS x FROM x GROUP BY - 'x' ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x WHERE x = 1 AND x = 1 ORDER BY x NULLS LAST ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT 1 FROM x WHERE 1 = x OR 1.000000 = 1.000000 + 1.000000 BETWEEN x AND 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = x ( ( x NOT IN ( ( x = x AND x = 1 ) ) AND x IS NOT NULL NOT IN ( 1 ) ) , x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( 'x' , 1.000000 , 'x' ) ORDER BY x ( * ) OVER ( ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( ( SELECT CAST ( x ( NULL ) AS INT ) ) ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE TABLE x AS SELECT * FROM x INTERSECT SELECT DISTINCT * FROM x ORDER BY x LIMIT 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x WHERE x = x AND x = x AND x = 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , x ( x ) FROM x GROUP BY x ORDER BY 1 NULLS LAST ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE ( - 1.000000 >= x IS NOT NULL = 1 AND x = 1 ) OR x = x OR x = 'x' ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x ( * ) OVER ( ) , 1.000000 , 'x' ) WHERE x ( ) ISNULL ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT - 'x' , x FROM x EXCEPT SELECT x , x FROM x WHERE x != 'x' ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT DISTINCT 1.000000 , x + 1 , 1 FROM x UNION SELECT DISTINCT * FROM x ORDER BY x NULLS LAST ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x JOIN x NATURAL JOIN x LIMIT 1 OFFSET 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x , x ) , x FROM x GROUP BY 'x' , x ( x ) , x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x > 1 OR x > 1 AND x >= 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x WHERE x = 1 GROUP BY NOT x LIMIT 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x NATURAL JOIN x UNION SELECT DISTINCT * FROM x ORDER BY x ( ) OVER tcl ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT 1 , x + x , 1 FROM x UNION SELECT DISTINCT * FROM x ORDER BY NULL ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = NULL WHERE x IN ( SELECT DISTINCT x WHERE x BETWEEN ( SELECT x AS x FROM x AS x GROUP BY x HAVING x ) AND 1 ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x SELECT * FROM x WHERE x <= 1 GROUP BY x HAVING x > 'x' ORDER BY x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x ( x ( ) ) = x AND x IN ( 1 , 1 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT 1 FROM x WHERE x IN ( 'x' ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = x + x ( ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x ) , x ( x ) FROM x GROUP BY x ( x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = NULL WHERE x IN ( SELECT DISTINCT x ( x ) OVER ( ORDER BY x ) FROM x WHERE x = x + 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x AS SELECT NULL INTERSECT SELECT NULL ORDER BY x ( x <= 'x' , x ) OVER x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT x ( x ) , x ( x ( x ) <= 'x' = x ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE TABLE x ( x TEXT PRIMARY KEY , x TEXT ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT ( x = x AND x = 1 ) FROM x WHERE ( 1 IN ( 1 , 1 ) ) LIMIT 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x FROM x WHERE x ( ) GROUP BY 1 , 1 , x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x ( x ) , x ( x ) , x ( x ) ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT * , x , x , 1 FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = x ( x ( ) , x ( x ( ) ISNULL , x ) ISNULL ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT ( SELECT DISTINCT 'x' , 1 , * , 1.000000 ) LIMIT 1 OFFSET 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT * FROM x WHERE x = 1 AND x = 1 GROUP BY x ORDER BY x DESC NULLS FIRST ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT * FROM x NATURAL JOIN x NATURAL JOIN x GROUP BY x ( ) ISNULL , x ORDER BY 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x AS WITH x AS ( SELECT x ( x ) AS x FROM x AS x INDEXED BY x ) SELECT x FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x IS NULL FROM x WHERE x != 1 GROUP BY x ( x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x AS x , x AS x NATURAL JOIN x NATURAL JOIN x AS x ORDER BY x ( ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x , x AS x , x ( x ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x FROM x WHERE x ( ) GROUP BY x ( ) , 1 , x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x , x AS x NATURAL JOIN x AS x NATURAL JOIN x GROUP BY 1 HAVING 1.000000 + 1.000000 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT 1 , x + 1 , x FROM x UNION SELECT DISTINCT * FROM x ORDER BY x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x AS SELECT 1 , 1 WHERE x = ( SELECT x FROM x WHERE x ( 'x' ) ) LIMIT 1 OFFSET 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x FROM x AS x WHERE x IS NOT NULL ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE TABLE x ( x VARCHAR ( 1 ) UNIQUE , x INT ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = x ( ( SELECT x ( * ) FROM x AS x GROUP BY x ) ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT 1 AS x , 1 , 1 = x / 1 , 1 FROM x AS x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x WHERE x = 1 AND 1 = x AND ( ( x OR NOT x ) BETWEEN 1 AND 1 ) + x = 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x UNION SELECT x FROM x ORDER BY 'x' , 'x' ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT x ( x ) OVER ( ) FROM x , x AS x JOIN x NATURAL JOIN x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x , x ( x , x , 1 ) , 'x' FROM x ORDER BY 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT ( SELECT DISTINCT 'x' , x ( x ) , 1 , 1.000000 ) LIMIT 1 OFFSET 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x * ( 1 - x ) ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * IS NOT NULL FROM x , x WHERE 1 = x AND x = 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 'x' ) , ( 1.000000 ) , ( 'x' ) , ( 1 ) , ( 'x' ) , ( 1.000000 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , x ( x ) FROM x GROUP BY x ORDER BY x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = 1.000000 , x = 'x' ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x WHERE 1 < x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ) OVER ( ) , x ( x ) OVER ( ORDER BY x DESC , - 1 DESC ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( x ( x NOT LIKE x ( x ) , 1 , 1 ) ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT DISTINCT x NOT LIKE x , x FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x , x IN ( * , 1 , NULL ) FROM x ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT 1 , 1 AS x , 1 GROUP BY x , ( 1 = 1 AND ( x ( ) % 1 AND 1 ) ) , x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x WHERE ( SELECT x FROM x AS x GROUP BY x ORDER BY x DESC NULLS FIRST ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ) = 1 FROM x AS x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT ( SELECT 1 ) , 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT 1 = 1 FROM x WHERE x ( ) GROUP BY 'x' , x ( x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x UNION SELECT x ( ) , x FROM x ORDER BY 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT * FROM x WHERE x >= 1 AND 1 = x + 1 ORDER BY x DESC ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT x ( ) IS NOT NULL , 1 , 1 FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER PRIMARY KEY , x TEXT , x INT ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT DISTINCT * FROM x AS x NATURAL JOIN x NATURAL JOIN x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT * FROM x AS x , x AS x , x USING ( x , x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT 1.000000 * x ( x ) , x , x FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( ) WHERE ( SELECT x FROM x AS x GROUP BY x ORDER BY x DESC NULLS FIRST ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x + 1 , x FROM x , x ( x , x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = x ( x , ( SELECT CAST ( x ( x ) AS INT ) ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x FROM x WHERE ( x = 1 AND x ( * ) ) OR ( x = 1 AND x = 1 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x , 1 ) OVER ( ORDER BY x ) FROM x ORDER BY x ( 1.000000 ) , x NULLS LAST ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x + 1 , x ( 1 ) , x , x ( 'x' ) FROM x ORDER BY x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT * FROM x NATURAL JOIN x NATURAL JOIN x ORDER BY x DESC ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x AS x , x WHERE x = x AND x = 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER , x INTEGER , x INTEGER ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT 1 , x + 1.000000 , 1 FROM x UNION SELECT DISTINCT * FROM x ORDER BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x , x AS x , x NATURAL JOIN x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x AS WITH x AS ( SELECT 1.000000 FROM x ) SELECT 1 , 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT x ( x % 1 ) FROM x WHERE 'x' != 1 GROUP BY x ORDER BY x DESC NULLS FIRST , 'x' ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT 'x' IN ( SELECT DISTINCT NOT x > 'x' FROM x ORDER BY 1 ) GROUP BY 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' , x = 'x' , x = 'x' ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( ) INTERSECT SELECT 1 ORDER BY 1 , 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT * FROM x AS x , x AS x NATURAL JOIN x NATURAL JOIN x ORDER BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x NATURAL JOIN x NATURAL JOIN x NATURAL JOIN x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x ( ) OR x < 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x > 1 OR x > 1 AND - ( SELECT DISTINCT x ( 1.000000 ) FROM x AS x GROUP BY x ) >= x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT 1 AS x , 1 AS x , 1 AS x , 1 ORDER BY x ASC , x ASC ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( * ) , x ( x ) , x ( x ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( * ) OVER ( ORDER BY x ) ) WHERE x LIKE 'x' AND NOT x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 1 , NULL , 1 , 1 ) , ( 1 , 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT ( x * 1 ) > x FROM x GROUP BY x ORDER BY 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT ( SELECT DISTINCT 'x' , 1 , 1.000000 ) GROUP BY x ( 'x' , 1 ) <= 'x' LIMIT 1 OFFSET 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT - 'x' ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT 1 IN ( SELECT ( SELECT 1 ) FROM x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT ( SELECT x FROM x ORDER BY x LIMIT 1 ) ORDER BY x ( * ) OVER ( ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x AS SELECT * FROM x , x GROUP BY 1 , 1 ORDER BY 1 NULLS LAST ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x UNION SELECT - 1 >= x FROM x ORDER BY 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x AS SELECT * FROM x , x WHERE x = x GROUP BY x ORDER BY x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x VALUES ( 1.000000 , 'x' , 'x' ) , ( 1 , 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = x ( x ( ( SELECT CAST ( x ( x ) AS CHAR ( 1 ) ) ) ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT ( SELECT x FROM x WHERE 1 ) ORDER BY x ( * ) OVER ( ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( x ) , x ( x ) , x ( x ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( 1.000000 ) , x ( 1 ) , x ( 1 ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = x * 1 WHERE x IN ( SELECT DISTINCT x FROM x WHERE x = x + 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x * x ) FROM x , x USING ( x , x ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x * x ) OVER ( ORDER BY x DESC , x ASC ) ) WHERE ( x BETWEEN 1 AND 1 ) OR x = 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x , x = x ( x ) , x ( x ) AS x FROM x GROUP BY x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x ( * ) FROM x GROUP BY x , x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x IS NULL FROM x AS x WHERE x = 1 OR ( x = 1 AND x = 1 ) GROUP BY x ( x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( x ( 1.000000 ) ) FROM x WHERE x = 1 AND x >= 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x + 1 , 1 ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x , x ( x ( x , 1 , 1 ) ) ) FROM x GROUP BY x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x * x ) FROM x ORDER BY x , x ASC , x DESC ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT 'x' , x , 1 FROM x UNION SELECT DISTINCT * FROM x ORDER BY x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( ) FROM x WHERE x = 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x WHERE x IN ( 'x' ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE TABLE x ( x TEXT , x FLOAT , x TEXT ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x % 1 ) FROM x WHERE x != 1 GROUP BY x ( x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x BETWEEN ( SELECT 1 AS x WHERE ( SELECT x AS x WHERE 1 > x ) ) AND x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( ( SELECT x AS x FROM x AS x GROUP BY x ) ) FROM x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT * , 'x' FROM x ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x AS x , x AS x UNION SELECT DISTINCT * FROM x ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT x ( * ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x FROM x WHERE x OR x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x AS x JOIN x ON ( SELECT 1 ) = 1 GROUP BY NULL ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x AS x , x ( x ) OVER ( PARTITION BY x ORDER BY x DESC , 'x' ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ( x ) , x ( x ) , x ( x ) , x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x , x ( * ) FROM x GROUP BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( ) FROM x , x AS x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x AS SELECT x ( NULL ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' / 1 ) AS x , x ( 1 ) , - 'x' FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x ( DISTINCT x / 1 ) , 1 , x ) FROM x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x NOT LIKE x ( x ) ) FROM x GROUP BY x ( x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( ( CAST ( x ( x ) AS DOUBLE ) ) ) FROM x WHERE x != 1 GROUP BY x ( DISTINCT x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW WITH x AS ( SELECT * FROM x ) SELECT x NOT LIKE x , x FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = x ( x ( x ) , x IS NULL , ( x NOT IN ( 1 ) AND x NOT IN ( 1 ) ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ) , x FROM x WHERE x ( x , x ) <= 'x' = x ISNULL ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = x NOT LIKE x ( x ( 'x' , 1 ) <= 'x' = x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x VARCHAR ( 1 ) , x CHAR ( 1 ) , x INT , x VARCHAR ( 1 ) ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( ( SELECT x AS x FROM x AS x WHERE x IN ( 'x' ) GROUP BY x ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x , x WHERE x = ( SELECT 1 ) AND x = 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x AS WITH x AS ( SELECT x ( 'x' ) OVER x AS x FROM x ) SELECT 1 , 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x , x AS x , x AS x , x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ) , x ( x ) FROM x WHERE x = 'x' ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE TABLE x ( x TEXT , x TEXT , x INTEGER ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT NOT x >= 'x' , 1 FROM x JOIN x USING ( x , x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x , x WHERE x = x AND x = x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT DISTINCT x ( x ( * ) OVER ( ) , 1.000000 , 'x' ) GROUP BY - 'x' ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x VALUES ( 1.000000 , 1.000000 , 'x' ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x DOUBLE NOT NULL UNIQUE ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x FROM x ORDER BY x , x DESC , x , x LIMIT 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x FROM x ) WHERE x = x AND x = 'x' ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT * FROM x WHERE x = 1 LIMIT 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x * 1 FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW WITH x AS ( SELECT - 'x' FROM x ) SELECT x FROM x WHERE x = x AND x = 'x' ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x AS x FROM x WHERE x ( ) GROUP BY ( SELECT 1 ) , x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT DISTINCT CAST ( x ( x / 1 ) AS INTEGER ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT 'x' IN ( SELECT DISTINCT x ( ) FROM x ORDER BY 1 ) GROUP BY 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT * FROM x NATURAL JOIN x AS x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x , 1 , x ( 'x' ) ) OVER ( ORDER BY x ) AS x FROM x WHERE x = 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x NOT LIKE x ( x ) ) FROM x WHERE x + x ( ) GROUP BY x ( DISTINCT x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x , x AS x NATURAL JOIN x NATURAL JOIN x WHERE 1 = x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT x , * FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT ( SELECT DISTINCT * , 1 , 1.000000 ) LIMIT 1 OFFSET 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x NOT INDEXED NATURAL JOIN x UNION SELECT DISTINCT * FROM x ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT 'x' , * FROM x WHERE x IN ( SELECT x ( x % 1 ) OVER ( ORDER BY x ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( 'x' , 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x VARCHAR ( 1 ) PRIMARY KEY , x DOUBLE , x INTEGER ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x WHERE x = 'x' AND x = 'x' AND x = 'x' ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( ) FROM x AS x , x AS x JOIN x NATURAL JOIN x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER PRIMARY KEY , x INTEGER , x TEXT ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x ) <= 'x' , x ( x ) , x ( x ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' / 1 ) , x ( 1 ) , CASE x WHEN 1 THEN x ELSE 1 END FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x , x AS x , x NATURAL JOIN x ORDER BY x ( ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 'x' , 'x' , 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT NOT x , x ( x ) , x ( x ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT x , x * x FROM x ORDER BY 1 , x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT x FROM x NATURAL JOIN x NATURAL JOIN x ORDER BY x ( ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x , x ( ( NOT ( x IS NULL ) ) AND ( NOT ( x IS NULL ) ) ) , x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( 'x' ) OVER ( ORDER BY x ) FROM x GROUP BY x HAVING x ( ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x , x ( x ) OVER ( PARTITION BY 1 , 1 ) FROM x ORDER BY x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT * FROM x , x WHERE x = x AND x ( x ) < 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT x , x , 'x' FROM x ORDER BY 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT 'x' IN ( SELECT DISTINCT x ( x <= 'x' ) FROM x ORDER BY 1 ) GROUP BY 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x , x ( x , x ) IS NOT NULL , x FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT * FROM x WHERE ( x = 'x' OR x = 'x' ) AND x IS NOT NULL ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x ( DISTINCT x ) , 1 , ( x NOT IN ( 1 ) AND x NOT IN ( 1 ) ) ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , x FROM x WHERE x = 1 AND x IN ( 1 , 1 ) ORDER BY x DESC , x ASC ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x ( x ) , x FROM x GROUP BY x ( x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x IN ( 1 , 1 ) AND x NOT IN ( 1 , 1 ) AND x NOT LIKE x ( x ) AND x = 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = x ( * , x ) OVER ( ORDER BY x DESC , x ASC ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT * FROM x AS x , x AS x WHERE x = 1 AND x = 1 ORDER BY x DESC NULLS FIRST ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT ( SELECT x ( DISTINCT x ) FROM x ) IS NULL NOT LIKE x , x FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' / 1.000000 ) , x ( 1.000000 ) , x ( 1 ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( 'x' ) , x ( x ) FROM x WHERE x ( x ) <= 'x' = x ISNULL ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x FROM x AS x , x AS x USING ( x , x ) WHERE x ORDER BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x ( x ) OVER ( PARTITION BY x ) FROM x AS x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( * ) ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = x ( x ) <= 'x' = x ISNULL < 1 + x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( NULL , 1 ) , ( NULL , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 'x' , 1 ) , ( 'x' , 1 ) , ( 'x' , 1 ) , ( 'x' , 1 ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT x ( x ) , x ( x ) , x ( x ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x AS SELECT x ( 1 , 1 ) INTERSECT SELECT 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x WHERE ( x = x AND ( x = 1 OR x = x ) ) OR ( x = 1 AND x = 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT 1 FROM x WHERE 1 = x OR x BETWEEN CASE x WHEN 'x' THEN 1 ELSE 1 END AND 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x , 1 AS x , x + x FROM x WHERE x ORDER BY x DESC LIMIT 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x ) OVER ( ORDER BY x ) , x ( x ) OVER ( ORDER BY x ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT * FROM x NATURAL JOIN x UNION SELECT DISTINCT * FROM x ORDER BY x NULLS LAST ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT ( SELECT 1 , 1 ) FROM x AS x WHERE x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER PRIMARY KEY , x INTEGER , x INTEGER , x VARCHAR ( 1 ) ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x ( x ) , 1 ) FROM x AS x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x AS SELECT x ( * ) OVER ( ) , 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x FROM x WHERE x ( ) GROUP BY ( SELECT 1 ORDER BY 'x' ) , x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT x , * FROM x ORDER BY x ( x ) OVER ( ) , x NULLS LAST ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x AS SELECT x FROM x WHERE x IN ( 1 , 1 AS x , 1 , 1 ) ORDER BY x DESC LIMIT 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x FROM x ORDER BY x , x DESC LIMIT 1 OFFSET 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT ( SELECT DISTINCT x ( x NOT LIKE x ( x ) ) , 1.000000 ) LIMIT 1 OFFSET 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x , 'x' ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x , x USING ( x , x ) WHERE 1 = x AND x = 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x WHERE 1 < x AND 1 >= x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x VARCHAR ( 1 ) , x VARCHAR ( 1 ) , x VARCHAR ( 1 ) , x VARCHAR ( 1 ) , x INTEGER , x VARCHAR ( 1 ) , x VARCHAR ( 1 ) , x VARCHAR ( 1 ) , x VARCHAR ( 1 ) , x VARCHAR ( 1 ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT x ( * ) , 1 FROM x UNION SELECT DISTINCT * FROM x ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x WHERE x ( ) GROUP BY ( SELECT 1 ORDER BY 'x' ) , x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x AS SELECT x FROM x WHERE x = 1 AND x <= 1 ORDER BY x DESC ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) SELECT x FROM x ON x ( x ) WHERE x = x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x EXCEPT SELECT x FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x , x AS x , x ( 1 ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x NOT LIKE x , CAST ( ( SELECT x FROM x WHERE 1 = x ) AS INT ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT 'x' , x + 1 , x FROM x UNION SELECT * FROM x ORDER BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE NULL BETWEEN ( SELECT x FROM x AS x GROUP BY x ( 'x' ) , x , x ) AND 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = NULL WHERE x IN ( SELECT DISTINCT x AS x FROM x WHERE x = x + 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x WHERE x = ( SELECT x FROM x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x ) FROM x WHERE x = 'x' ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x CHAR ( 1 ) , x FLOAT , x INTEGER ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x AS SELECT * FROM x , x GROUP BY 1 , x ( x ) OVER ( ) AS x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT * FROM x AS x , x AS x NATURAL JOIN x NATURAL JOIN x ORDER BY NULL ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT 1 AS x , 1 AS x , 1 , 1 FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x WHERE x = 1 AND 1 = x AND x = 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 1 ) , ( 'x' ) , ( 1 ) , ( 'x' ) , ( 1 ) , ( 'x' ) , ( 1.000000 ) , ( 'x' ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * , 'x' FROM x WHERE x NOT IN ( x , x ( 'x' ) ) ORDER BY x DESC ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT 1 FROM x , x AS x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ( x , x , 1 ) , x ) FROM x ORDER BY x NULLS LAST ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT 'x' IN ( SELECT DISTINCT x ( * ) OVER ( ) FROM x ORDER BY 1 ) GROUP BY 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT 1 AS x FROM x , x ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT ( 'x' ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE TABLE x ( x INTEGER PRIMARY KEY CHECK ( x ( NOT x > x % x % 1 , x , x ) IS NULL + x IS NOT NULL ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x AS WITH x AS ( SELECT x ( x ) AS x FROM x AS x INDEXED BY x ) SELECT 1 , 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( * ) OVER ( ORDER BY x ( x , 1 , 1 ) ) FROM x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x FROM x ORDER BY x DESC LIMIT ( SELECT x AS x , x FROM x ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 'x' , 1 , 1 ) , ( 1 , 'x' , 1 , 1 ) , ( 1 , 'x' , 1 , 1 ) , ( 1 , 'x' , 1 , 1 ) , ( 1 , 'x' , 1 , 1 ) , ( 1 , 1 ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = x + 1 WHERE x > 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT 'x' , * FROM x WHERE x IN ( SELECT CAST ( x ( 1 ) AS DOUBLE ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( ) , 1 FROM x WHERE x IS NOT NULL ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x * x ) OVER ( ) FROM x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT ( SELECT x AS x FROM x AS x GROUP BY x ORDER BY x * 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT x AS x , x AS x FROM x ORDER BY x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x ) / 1.000000 AS x FROM x AS x GROUP BY x ORDER BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x WHERE ( x ( x ( ) ISNULL ) AND x ) OR ( x = 1 AND x = 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x FROM x NOT INDEXED NATURAL JOIN x NOT INDEXED ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT 1 , 1 GROUP BY 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x FROM x AS x WHERE x > 1 OR x > 1 AND NOT x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x FLOAT UNIQUE , x VARCHAR ( 1 ) PRIMARY KEY , x INT ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT 1.000000 * x ( x ) , x , x * x FROM x GROUP BY x HAVING x < x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT DISTINCT * FROM x NOT INDEXED NATURAL JOIN x NOT INDEXED ORDER BY 1 , 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER PRIMARY KEY CHECK ( x ( ) IS NULL + ( x = 1 OR x = 1 ) NOT LIKE NOT x ( x , x ) ) ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x SELECT * FROM x , x AS x NATURAL JOIN x NOT INDEXED ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( DISTINCT x ) OVER ( PARTITION BY x ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 'x' , 'x' ) , ( 'x' , 'x' ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT ( SELECT x FROM x ORDER BY x DESC LIMIT 1 OFFSET 1 ) LIMIT 1 OFFSET 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x WHERE x = 1 AND 1 = x AND x = 1 ORDER BY x DESC ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x WHERE x = x ( x ) OR x = 'x' OR x ( x ) IS NULL + x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT DISTINCT x ( x ( ) , 1 , 1 ) FROM x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 'x' , 'x' , 1 , 'x' , 1 ) , ( 'x' , 'x' , 1 , 'x' , 1 ) , ( 'x' , 'x' , 1 , 'x' , 1 ) , ( 'x' , 'x' , 1 , 'x' , 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT CASE WHEN 'x' THEN 'x' ELSE 'x' END ORDER BY x ( ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 1 ) , ( 1 , NULL ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x AS SELECT x , * FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT 1 AS x , x ( 1 ) , x ( 1 ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) SELECT x ( 1 , 1 ) , 1 FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x AS x , x AS x , x AS x ORDER BY x ( ) NULLS LAST LIMIT 1 OFFSET 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( ) AS x GROUP BY 1 HAVING x ( ) IS NOT NULL < 'x' ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( 1 , 1 , CASE x WHEN 1 THEN 1 ELSE 1 END , x ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS WITH x AS ( SELECT * FROM x ) SELECT * FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT x , CASE WHEN x = 1 THEN 'x' ELSE x END AS x FROM x WHERE x IN ( 'x' , 'x' ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( ) , x FROM x WHERE x ( x ) <= 'x' = x ISNULL ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT ( SELECT x FROM x AS x GROUP BY x ORDER BY x , x DESC , x DESC ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x WHERE 'x' BETWEEN 1 AND x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT 1 AS x , 1 , 1 GROUP BY x ( ) HAVING x ( ) ORDER BY 1.000000 DESC NULLS LAST ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = 1 WHERE x IN ( 1 , 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( - 'x' >= x ) FROM x WHERE x != 1 GROUP BY x ( DISTINCT x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( 'x' AS x , 'x' , 'x' ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( CASE WHEN x = 'x' THEN 1 END ) , x ( x / 1 ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x % 1 ) OVER ( ORDER BY x ) FROM x AS x GROUP BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = x ( x ( ) ISNULL , NOT x ( x , x ) , x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x ( x ( 1 ) ) OVER ( PARTITION BY x ORDER BY x DESC NULLS LAST , 'x' ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x WHERE x IN ( 1 , 1 , x ( x ) = 1 , 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , x ( x ) OVER ( x ORDER BY x ) FROM x GROUP BY x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x FROM x WHERE x IN ( x ( x , x ) ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x ( 1 , 1 ) ) ORDER BY x , x DESC , x , x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x AS WITH x AS ( SELECT x AS x FROM x INDEXED BY x ) SELECT 1 , 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT * FROM x AS x , x AS x , x AS x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT 1 FROM x AS x , x AS x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT ( SELECT 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT 'x' IN ( SELECT * FROM x WHERE 1 < x ORDER BY 1 ) GROUP BY 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT 1 AS x , 1 ORDER BY x ( * ) OVER ( ) , 'x' LIMIT 1 OFFSET 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( * ) FROM x WHERE x + x LIKE x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x TEXT UNIQUE ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT * FROM x WHERE x = x AND x = x AND x = 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ( 'x' ) OVER ( ORDER BY x NULLS LAST ) , 1 ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x VALUES ( 'x' , 'x' , NULL ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x AS WITH x AS ( SELECT 1 AS x , 1 AS x , 1 , 1 AS x ) SELECT 1 , 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x FROM x WHERE x = ( SELECT x NOT LIKE x FROM x WHERE x = x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x IN ( 1 , 1 ) FROM x ORDER BY x + 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x ( ) , x , 1 , 1 , x ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT * FROM x WHERE ( SELECT x FROM x WHERE x > x ) = 'x' AND x = 'x' ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ) OVER ( ORDER BY x NULLS LAST ) , x FROM x WHERE x IS NOT NULL ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT DISTINCT x , * FROM x ORDER BY x , x DESC , x DESC ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT 1 AS x , 1 , 1 FROM x ON x ( DISTINCT ( x ) ) OVER ( ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = x ( x ( x , 1 , ( x NOT IN ( x ) AND x NOT IN ( 1 ) ) ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x NOT LIKE x ( x ) ) FROM x WHERE 1 > 'x' GROUP BY x ( DISTINCT x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( 1 ) FROM x ON x ( x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT 1 , * FROM x WHERE x IN ( SELECT x AS x FROM x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT x , x * 1 AS x , x FROM x AS x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = x ( x + 1 = ( SELECT DISTINCT x IS NULL FROM x ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = NULL WHERE x IN ( SELECT x WHERE x = x OR ( x = 1 AND x = 1 ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ) , x FROM x JOIN x ON x = x WHERE x ISNULL ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT * FROM x NOT INDEXED NATURAL JOIN x NOT INDEXED ORDER BY x ( x , 1 , 1 ) + 1.000000 DESC NULLS LAST ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x ( x ( ) ISNULL ) , x FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT 1 AS x , 1 , 1 FROM x WHERE x ISNULL ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER PRIMARY KEY , x INTEGER ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x != 1 AND x = x AND x = 1 AND x LIKE 'x' ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( * ) OVER ( ORDER BY ( SELECT x ORDER BY 1.000000 DESC ) ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x FROM x WHERE x > 1 OR x > 1 AND NOT x LIMIT 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT x ( x ) OVER ( PARTITION BY x ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( * ) OVER ( ORDER BY NULL DESC ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT x ( * ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' / 1 ) AS x , x ( 1 ) , x ( x ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x > 1.000000 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = x ( x ( ) ISNULL , ( x ) , x , x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT 1 IN ( CAST ( 'x' AS TEXT ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x AS x , x AS x NATURAL JOIN x NATURAL JOIN x ORDER BY x NULLS LAST ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x AS SELECT 1 WHERE ( SELECT 1 , 1 ) LIMIT 'x' OFFSET 1 OR ( 1 IN ( 1 , 1 ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( ) IS NOT NULL FROM x WHERE x ( x <= 'x' ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x AS x JOIN x ON NULL = 1.000000 NOT LIKE 'x' WHERE x = x AND x = 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE TABLE x ( x TEXT , x TEXT , x TEXT ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x AS x , x AS x LIMIT 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , ( SELECT x ( x ) OVER ( ) FROM x WHERE x < x ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE TABLE x AS SELECT x FROM x GROUP BY x HAVING x < x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS WITH x AS ( SELECT x ( x ) AS x FROM x AS x INDEXED BY x ) SELECT x ( ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT 1 AS x , 1 , ( SELECT 1 ) , 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT 1 AS x , x , 1 = x / 1 , 1 FROM x ORDER BY x ( ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT 'x' BETWEEN 1 AND x FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT 'x' IN ( SELECT DISTINCT x ( x ) OVER ( ) FROM x ORDER BY 1 ) GROUP BY 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x , x AS x JOIN x USING ( x , x ) NATURAL JOIN x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x FROM x ON x ( x ) WHERE x = x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( ( x ( x ( ) ISNULL ) AND x ) , x ( x > 1 ) ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT 1 AS x , 1 , 1 = x / 1 , CASE x WHEN 1 THEN 1 ELSE 1 END FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x FROM x WHERE x BETWEEN 1 AND 1 ORDER BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x AS x , x AS x NATURAL JOIN x NATURAL JOIN x ORDER BY x ( ) NULLS FIRST ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( * ) FROM x WHERE x + x LIKE x ( x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT * FROM x INTERSECT SELECT * FROM x ORDER BY x + 1 , 'x' ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT x , x + 1 , 1 FROM x UNION SELECT DISTINCT * FROM x ORDER BY x DESC NULLS FIRST ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x AS x , x AS x WHERE x = x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x , x AS x WHERE x IN ( 1.000000 ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT * FROM x AS x , x AS x NATURAL JOIN x NATURAL JOIN x ORDER BY 'x' , 'x' ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( * ) , x ( x , 1 , 1 ) AS x FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT * FROM x AS x NATURAL JOIN x NATURAL JOIN x ORDER BY x DESC , x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 1.000000 , NULL ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( * ) OVER ( ORDER BY x , x DESC , x DESC , x ASC , x ASC ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x UNION SELECT x FROM x ORDER BY x + x , CAST ( x AS TEXT ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT 1 , 1 FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x SELECT 1 AS x , x ( x , x ) AS x , x ( 1 ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , x ( NULL ) FROM x GROUP BY x ORDER BY 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT ( x NOT IN ( 1 ) AND x NOT IN ( 1 ) ) FROM x WHERE x != 1 GROUP BY x ( x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x ( ) ISNULL ) , x FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , x ( * ) FROM x ( x , x ) WHERE x IS NOT NULL ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT DISTINCT ( SELECT 1 ) = 1 LIMIT 1 OFFSET 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT * FROM x WHERE CASE x WHEN 1 THEN 1 ELSE 1 END ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( * ) OVER ( ORDER BY x ) FROM x WHERE x = 'x' AND x = 'x' ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( DISTINCT x , x ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 'x' ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x DOUBLE PRIMARY KEY CHECK ( x ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( ( x NOT IN ( 1 ) AND x NOT IN ( 1 ) ) , x ) FROM x ORDER BY x * 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT 1 FROM x WHERE 1 = x OR x ( x , x ) BETWEEN x AND 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x NOT LIKE x ( x ) ) FROM x WHERE x != 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x GROUP BY x ORDER BY x ASC ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x , x ) FROM x GROUP BY x HAVING x ( ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( * ) WHERE x IN ( 1 , 1 ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT DISTINCT x IS NULL FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT 1 , x ( 1 ) , x ( 1 ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x GROUP BY x + 1 , x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = x + x WHERE ( SELECT x ( * ) OVER ( ) FROM x AS x ORDER BY x ( * ) OVER ( ) ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT * FROM x WHERE x = x AND x = x AND x = 'x' ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x NOT LIKE x ( x ) ) FROM x WHERE 1 = 1 GROUP BY x ( DISTINCT x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ) OVER ( ORDER BY x DESC , x ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT 1 AS x , 1 , x <= x , 1 FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x AS SELECT * FROM x WHERE ( x = 1 AND ( x = x OR x = 1 ) ) OR ( x = 1 AND x = 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ( x ( x , 1 , 'x' ) ) ) FROM x ORDER BY x ( ) NULLS LAST ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( NOT NOT ( x >= x ) ) FROM x WHERE x != 1 GROUP BY x ( x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x <= 'x' OR x = 1 AND x = x AND x ( 1.000000 ) = 1 AND ( x ) <= 'x' ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT DISTINCT ( SELECT DISTINCT x , x , 1.000000 ) LIMIT 1 OFFSET 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x DOUBLE PRIMARY KEY CHECK ( x ( x ( x NOT LIKE x ( x ) , 1 , 1 ) ) IS NULL + x IS NOT NULL ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , x ( x , 1 ) OVER ( ) , x ( x ) OVER ( ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * , 1.000000 FROM x WHERE ( x BETWEEN 1 AND 1 ) + x AND ( x = 1 OR x = 1 ) ORDER BY x DESC ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x , x + 1 FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT x FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * AS x FROM x WHERE x = 'x' AND x = 'x' ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x WHERE ( x = 1 AND ( x = 1 OR ( x % 1 ) = 1 ) ) OR ( x = 1 AND x = 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT 1 FROM x ORDER BY x ( x ) ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT * FROM x WHERE ( ( SELECT * FROM x NOT INDEXED NATURAL JOIN x NOT INDEXED ) AND 1 ) OR x = 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x - x , x + x FROM x WHERE x GROUP BY x HAVING x > 'x' ORDER BY x DESC LIMIT 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT DISTINCT * FROM x WHERE x IN ( 1 , 1 , NULL , 1 ) AND x IN ( 1 , 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ) , x FROM x WHERE x ISNULL GROUP BY x HAVING x ( x ) > 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) SELECT * FROM x UNION SELECT * FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( x / 1.000000 ) , x ( 1 ) , x ( - 1 ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT CASE x WHEN 1 THEN 1 ELSE 1 END != 1 AS x FROM x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS WITH x AS ( SELECT * FROM x ) SELECT 1 AS x , 1 , 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x , x WHERE x = x AND x = 1 GROUP BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT 1 AS x , 1 , 1 = x / 1 , x AS x FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = x ( 1 + x % 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x USING ( x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x FROM x ORDER BY x DESC LIMIT 1 OFFSET 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( * ) OVER ( ) ORDER BY x ( * ) OVER ( ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x IS NULL FROM x WHERE x = 1 OR ( x = 1 AND x NOT LIKE x ( x ) <= 'x' ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT ( x * 1 ) > x FROM x ( x , x ) WHERE x > 1 OR x > 1 AND x NOT LIKE 'x' ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x AS SELECT * FROM x WHERE ( x = 1 AND ( x = x OR x = x ) ) OR ( x = 1 AND x = 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT 'x' , x + 1 , x FROM x UNION SELECT DISTINCT * FROM x ORDER BY x NULLS LAST ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * , 'x' FROM x WHERE x = 1 AND ( x = 1 OR x = 1 ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x > 1 OR x > 1 AND - x ( 1 ) >= 'x' ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x FROM x WHERE x IN ( 1 AS x , 1 , 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ( 1.000000 ) ) FROM x WHERE x != 1 GROUP BY x ( DISTINCT x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT 'x' , * FROM x WHERE x IN ( SELECT 'x' FROM x INDEXED BY x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( 1.000000 ) , x ( x ) , x ( x ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x FROM x UNION SELECT x ( x ) OVER ( ) FROM x ORDER BY 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( 1 ) , 1 , 1 GROUP BY x ( ) HAVING x ( ) LIMIT 1 OFFSET 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' / 1 ) , ( 1 ) , x ( 1 ) FROM x , x AS x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( DISTINCT x ) / 1.000000 AS x FROM x AS x GROUP BY x ORDER BY x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = NULL WHERE x < ( SELECT x FROM x GROUP BY x + 1 , x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x , x AS x WHERE x = 'x' AND x = 'x' ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW WITH x AS ( SELECT - 'x' FROM x ) SELECT x FROM x WHERE x LIKE 'x' OR x > 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER UNIQUE NOT NULL , x INT , x CHAR ( 1 ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT * FROM x NATURAL JOIN x NATURAL JOIN x GROUP BY NOT x > 'x' LIMIT 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x NOT LIKE x , x FROM x WHERE x ( x ) <= 'x' = x ISNULL ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x GROUP BY x UNION SELECT x FROM x ORDER BY NOT x = 'x' ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT 'x' IN ( SELECT DISTINCT x ( x + 1 < 1 ) FROM x ORDER BY 1 ) GROUP BY 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x > 1 OR x > 1 AND - x ( 1 ) OVER y >= x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT x ( 1 ) , 1 , 1 GROUP BY x ( ) HAVING x ( ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( DISTINCT ( SELECT x ( * ) FROM x AS x GROUP BY x ) ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE NULL BETWEEN ( SELECT * FROM x WHERE x ( x , 1.000000 ) <= 'x' GROUP BY x ) AND 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ( x ( 'x' ) ) OVER ( ) , 1.000000 , 'x' ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 'x' ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x AS SELECT x ( ) OVER ( ORDER BY x ( * ) OVER ( ) ) GROUP BY NULL INTERSECT SELECT 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 1 ) , ( 1 , 1 , NULL ) , ( 1.000000 , 'x' , 1 ) , ( 1 , 1 , NULL ) , ( 1 , 1 ) , ( 1 , 1 , NULL ) , ( 1 , 1 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT 1 FROM x ON x ( DISTINCT ( x ) ) OVER ( ) WHERE x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT 1 , 1 , * GROUP BY 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ( x ) , x ) FROM x GROUP BY x ( 'x' ) , x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT ( SELECT x FROM x WHERE x = x ORDER BY x , x ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x WHERE x IN ( 1 , 1 ) GROUP BY x HAVING x < 'x' ORDER BY x DESC ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x AS SELECT x , x ( x ) OVER ( PARTITION BY x ORDER BY x ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT ( SELECT DISTINCT x ( x + x ( x ) ) , 1 , 1.000000 ) LIMIT 1 OFFSET 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x AS SELECT * AS x FROM x , x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT x , x + x , x - x FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( * ) FROM x WHERE x != x ( x + x ( x ) ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x AS SELECT NULL INTERSECT SELECT NULL ORDER BY x ( x ( ) , 'x' ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x ) OVER ( ) FROM x AS x GROUP BY x ( ) % 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x > 1 OR x > 1 AND - x ( x , x + 'x' ) >= x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT * FROM x NOT INDEXED NATURAL JOIN x NOT INDEXED ORDER BY NULL DESC , 'x' ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x , x ( ) OVER ( ORDER BY x ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( * ) FROM x WHERE x != 1 ORDER BY x DESC , x ASC ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT 1 , x + 1 , 1 FROM x UNION SELECT DISTINCT * FROM x ORDER BY x NULLS LAST ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT 'x' IN ( SELECT DISTINCT 1 AS x FROM x ORDER BY 1 ) GROUP BY 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * , 'x' FROM x WHERE x = 1 AND ( x = 1 OR x = 1 ) ORDER BY x DESC ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = x ( ( SELECT CAST ( x ( x ) AS DOUBLE ) ) , x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x ) OVER ( ORDER BY x ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * , 'x' FROM x WHERE x IN ( 1 , 1 ) ORDER BY x DESC ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x > ( x ( 'x' ) = 1 OR 1.000000 = 1 ) OR x > 1 AND - x ( 1 ) >= x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x NOT LIKE x , x ) FROM x ORDER BY x ( x ) DESC , x * 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x TEXT NOT NULL PRIMARY KEY ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT 1 FROM x GROUP BY x ( x , 1 ) OVER ( ORDER BY x ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x AS x GROUP BY x ORDER BY ( SELECT CAST ( x ( 1 ) AS DOUBLE ) ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( 'x' ) OVER ( ORDER BY x ( * ) OVER ( ) ) LIMIT x ( x , 1 ) OVER ( ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x WHERE ( x = 1 AND 1 ) OR 1 = x + 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW WITH x AS ( SELECT * FROM x ) SELECT 'x' / 'x' , 'x' / 'x' , 'x' / 'x' ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x FROM x UNION SELECT x ( x ) FROM x ORDER BY 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x ) , x FROM x WHERE x ( x ) IS NULL + x IS NOT NULL ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x AS SELECT x FROM x GROUP BY x , ( 1 = 1 AND ( x ( ) % 1 AND 1 ) ) , x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER PRIMARY KEY , x VARCHAR ( 1 ) , x INTEGER ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x WHERE ( x = x AND ( x = 1 OR x = 1 ) ) OR ( x = 1 AND x = x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW WITH x AS ( SELECT * AS x FROM x ) SELECT x FROM x JOIN x USING ( x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x FROM x EXCEPT SELECT x ( ) ISNULL FROM x LIMIT 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT DISTINCT x , x * 1 AS x , x ORDER BY x ( ) OVER x NULLS FIRST ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x ) OVER ( PARTITION BY x ORDER BY x ) FROM x ORDER BY x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT * FROM x AS x , x AS x NATURAL JOIN x NATURAL JOIN x ORDER BY x , x DESC ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x , x ( x ) OVER ( PARTITION BY x ( x , x ) ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x AS SELECT * FROM x LIMIT 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT DISTINCT 1 FROM x AS x , x AS x , x AS x JOIN x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x ORDER BY x DESC , x DESC LIMIT 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x FROM x WHERE x = 1 OR ( x != x AND x = 1 ) ORDER BY 1 , x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT 1 , x + x , 1 FROM x UNION SELECT DISTINCT * FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT ( SELECT DISTINCT x FROM x ORDER BY x LIMIT 1 ) ORDER BY x ( * ) OVER ( ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x FROM x WHERE x ( ) GROUP BY x , x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( DISTINCT x * x ) OVER ( ORDER BY x DESC , x ASC ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x , 1 ) OVER ( ORDER BY x ) FROM x WHERE x LIKE 'x' ORDER BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x > 1 OR x > 1 OR ( x = 1 AND ( x = x OR x = x ) ) OR ( x = 1 AND x = 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x NATURAL JOIN x INTERSECT SELECT DISTINCT * FROM x ORDER BY x DESC ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x IN ( x NOT LIKE ( SELECT x ) + x IS NOT NULL ) AND x NOT IN ( 1 , 1 ) AND x = 1 AND x = 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE TABLE x AS SELECT NULL FROM x GROUP BY x , ( 1 = 1 AND ( x ( ) % 1 AND 1 ) ) , x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT * FROM x WHERE - 'x' >= x AND x = 1 ORDER BY x DESC NULLS FIRST ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x % 1 ) FROM x AS x WHERE 'x' != 1 GROUP BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x ( x , 1 , ( x NOT IN ( 1 ) AND x NOT IN ( 1 ) ) ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x ( x ( x ) ) OVER ( PARTITION BY x ORDER BY x DESC NULLS LAST , 'x' ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( DISTINCT x ) FROM x LIMIT 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x AS x NOT INDEXED NATURAL JOIN x NOT INDEXED ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x , x ) IS NOT NULL FROM x WHERE x ( x <= 'x' ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( 'x' ) WHERE x = x AND x ( 'x' , 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x ( x ) FROM x GROUP BY x HAVING x < 'x' ORDER BY x ( ) OVER x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT * FROM x , x WHERE x = x AND x = 1 AND x = 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x AS SELECT * FROM x WHERE x >= 1 AND x <= 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( ( SELECT x FROM x WHERE x = x ) ) FROM x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER PRIMARY KEY , x INT , x TEXT UNIQUE NOT NULL ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x > 1 OR x > 1 AND - x ( 1 AS x ) >= x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ( x ( 1.000000 ) , x ) , x , 1 , x ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x WHERE EXISTS ( SELECT x , x ( x , 1.000000 ) OVER ( ORDER BY x ) IS NOT NULL ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = x ( DISTINCT x , x ( x ( x , 1 , 1 ) ) ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( * ) FROM x WHERE x IN ( SELECT x FROM x LIMIT 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1.000000 , 1.000000 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x AS x JOIN x ON NULL = 1.000000 WHERE x = x AND x = 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , x FROM x WHERE ( x NOT LIKE x ( x ) OR x = 1 ) != 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ( x ) , 1 , NULL , x ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW WITH x AS ( SELECT * FROM x ) SELECT x ( 'x' ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x , x * x FROM x GROUP BY x HAVING x > x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT 'x' , * FROM x WHERE x IN ( SELECT x FROM x WHERE x OR x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT * , 'x' FROM x WHERE x = 1 AND ( x NOT LIKE x ( x ) OR x = 1 ) ORDER BY x DESC ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT CASE NULL WHEN 'x' THEN 'x' WHEN 'x' THEN 'x' ELSE 'x' END ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x UNION SELECT DISTINCT * FROM x ORDER BY x , x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( * ) FROM x ORDER BY x ( x , 1 , 1 ) + 1.000000 DESC ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS WITH x AS ( SELECT * ) SELECT x ( ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT 1 AS x , 1 , x ( ) ISNULL , 1 AS x GROUP BY x ( ) HAVING x ( ) ORDER BY x ( ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT 'x' , * FROM x WHERE CASE WHEN 1 THEN 1 ELSE 1 END IN ( 1 , 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * , 'x' FROM x WHERE x = 1 ORDER BY x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( ) FROM x JOIN x USING ( x , x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 1 , 1 ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' / 1 ) , x ( 1 ) AS x , x ( x ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' / 1.000000 ) , ( 1 ) , x ( 1 ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT x NOT LIKE x ( x ) IS NULL + x IS NOT NULL , 'x' ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( 'x' ) FROM x WHERE ( SELECT x FROM x AS x GROUP BY x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x AS WITH x AS ( SELECT x ( 'x' ) AS x FROM x AS x ) SELECT 1 , 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , x ( x ) OVER ( PARTITION BY x ) FROM x GROUP BY x ( x , x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 'x' ) , ( 1.000000 ) , ( 'x' ) , ( 1 ) , ( 'x' ) , ( 1 ) , ( 'x' ) , ( 1.000000 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x NATURAL JOIN x AS x NATURAL JOIN x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT 1 AS x , 1 , 1 = x / 1 , 'x' = x FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW WITH x AS ( SELECT * FROM x ) SELECT x ( x ( DISTINCT x / 1 ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x WHERE x IN ( SELECT 1 + x FROM x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT CAST ( x < 1 AS INTEGER ) FROM x ORDER BY x DESC NULLS LAST ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x FROM x WHERE x ( ) GROUP BY x ( * ) , 1 , x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT 1 IN ( SELECT * FROM x WHERE ( SELECT x AS x WHERE 1 > x ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x ORDER BY x DESC ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT x ( x ( x ( 1 ) ) ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x ( x , x ) , x ( DISTINCT 1 ) , x ( x ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x NOT LIKE x , x FROM x GROUP BY 'x' , x ( x >= x ) , x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT * FROM x AS x , x AS x NATURAL JOIN x NATURAL JOIN x ORDER BY 1.000000 DESC NULLS LAST ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x ) OVER ( ORDER BY x NULLS LAST ) FROM x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( * ) OVER ( ORDER BY x + 1 NULLS FIRST ) FROM x AS x GROUP BY x HAVING x < x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x - x , x + x FROM x WHERE x ORDER BY x DESC LIMIT 1 ON CONFLICT DO NOTHING ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x FROM x ORDER BY x IS NULL LIMIT 1 OFFSET 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x NATURAL JOIN x INTERSECT SELECT DISTINCT * FROM x ORDER BY x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT DISTINCT ( SELECT DISTINCT 'x' , 1 , 1.000000 ) GROUP BY x HAVING x < x LIMIT 1 OFFSET 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x NOT LIKE x ( x ) ) FROM x WHERE x != 1 GROUP BY NOT x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x WHERE x = x ( x ) AND x = 1 ORDER BY x DESC NULLS FIRST ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x FROM x WHERE ( 1 IN ( 1 , 1 ) ) LIMIT 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x > 1 OR x = 1 AND ( x = 1 OR x = 1 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( * ) IN ( SELECT 1 INTERSECT SELECT 1 ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x , x FROM x x JOIN x ON x = x WHERE x >= 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x INT PRIMARY KEY , x INT UNIQUE ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = x + 1 WHERE x = 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ( x ( 1 ) ) , x ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT 1 WHERE x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( ) OVER ( ORDER BY x ( * ) OVER ( ORDER BY x ( * ) OVER ( ORDER BY 1 DESC NULLS LAST ) ) ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x AS SELECT x , x = x ( * ) , x ( * ) FROM x GROUP BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER , x CHAR ( 1 ) , x INTEGER ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x / 1 , x / 1 FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x FROM x WHERE x ( ) GROUP BY x ( x ) , x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT DISTINCT 'x' IN ( SELECT DISTINCT x ( x ( 1 ) ) LIMIT 1 ) GROUP BY 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE TABLE x ( x INTEGER UNIQUE UNIQUE NOT NULL , x INT , x CHAR ( 1 ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT 1 AS x , 1 , 1 AS x GROUP BY x ( ) HAVING x ( ) ORDER BY x ( ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT 1 WHERE ( SELECT x FROM x WHERE x != 1 GROUP BY x ) != x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT 1 IN ( SELECT 1 ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 'x' , 'x' , 1 , 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x FROM x ORDER BY x DESC , x LIMIT 1 OFFSET 1 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x NOT LIKE x , x FROM x ORDER BY 1.000000 + x ( * ) , x NULLS LAST ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x AS SELECT x FROM x WHERE ( x = x AND ( x = 1 OR x = 1 ) ) OR ( x >= 1.000000 AND x = 1 ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = x ( x ( x ( 'x' ) ) ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x , x ( x ) OVER ( ORDER BY x ( ) ) FROM x GROUP BY x ORDER BY x DESC ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT DISTINCT x , 1 >= x NOT LIKE x ( x ( ( NOT ( x IS NULL ) ) AND ( NOT ( x IS NULL ) ) ) ) IS NULL AS x , x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT * FROM x AS x , x AS x JOIN x NATURAL JOIN x ORDER BY x DESC NULLS LAST , x NULLS LAST ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x AS SELECT x , * FROM x WHERE x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x AS x , x AS x , x AS x FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT 'x' IN ( SELECT DISTINCT x ( x ) OVER ( ) ORDER BY 1 ) GROUP BY 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x AS SELECT x , x FROM x , x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' , x = 'x' WHERE x = 'x' ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE ( SELECT x ( x ) OVER ( PARTITION BY x ) ) IS NULL > 1 OR x > 1 AND x NOT LIKE - 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT 1 , x + 1.000000 , x FROM x UNION SELECT * FROM x ORDER BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT 1 AS x , 1 , 1 FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x , x ( x ) / 1.000000 AS x , x * x FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x > 1 OR x = x OR ( SELECT x FROM x AS x GROUP BY x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x AS SELECT x ( * ) OVER ( ORDER BY x ) FROM x GROUP BY x HAVING x ( x ) > 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x , x ( x ) OVER ( PARTITION BY 'x' , * ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT NULL , x ( 1 ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( 'x' ) OVER ( ORDER BY 1 , 1 ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT * FROM x WHERE ( x > 1 OR x > 1 AND NOT x ) OR x = 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x AS SELECT 1 , 1 ORDER BY x DESC , x NULLS LAST ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( ( SELECT x AS x FROM x WHERE 1 = x ) ) FROM x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT * FROM x WHERE ( x ( ) % 1 AND 1 ) OR x = 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x , x ( x ) FROM x , x WHERE x = x GROUP BY x ORDER BY 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( CASE WHEN x = 'x' THEN 1 END ) , x ( x / 1 ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' / 1 ) , 1.000000 IS NULL , x ( 1 ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x FROM x UNION SELECT x FROM x ORDER BY x ( * ) OVER ( ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( NULL ) , ( 1 ) , ( 1 ) , ( 1 ) , ( NULL ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x FROM x WHERE x IN ( 1 , 1 ) AND x > 1 AND x < 'x' ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' / 1.000000 ) , x ( 1 ) , ( 1 ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW WITH x AS ( SELECT * FROM x ) SELECT DISTINCT 1 AS x , x FROM x , x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x , 1 ) OVER ( ORDER BY x ) WHERE x LIKE 'x' ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT CASE x WHEN 1 THEN x ELSE 1 END , x ( x ) , x ( x ) FROM x WHERE x = 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( 1.000000 , 1 , 1 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( * ) OVER ( ORDER BY x DESC , x ASC ) FROM x WHERE x + x LIKE 'x' ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT x / 1 , x / 1 FROM x UNION SELECT DISTINCT * FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE TABLE x ( x FLOAT UNIQUE , x FLOAT ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' / 1 ) , x ( 1 ) , x ( x IS NULL ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x WHERE 1 > x OR x > 1 AND NOT x ORDER BY x DESC LIMIT 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT 1 FROM x JOIN x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT ( SELECT DISTINCT x ( x ( ) ) OVER ( ) FROM x AS x GROUP BY x ) LIMIT 1 OFFSET 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT 1 FROM x AS x , x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) SELECT * FROM x UNION SELECT * FROM x AS x ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT x ( x , 1 ) OVER ( ORDER BY x ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x AS x FROM x AS x GROUP BY 1.000000 ORDER BY x ASC ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER PRIMARY KEY CHECK ( x ( ( x NOT IN ( 'x' , 'x' ) AND x IS NOT NULL NOT IN ( 1 ) ) , x ) ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT 'x' IN ( SELECT x FROM x WHERE x = 1 LIMIT 1 ) GROUP BY 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = x ( ( SELECT CAST ( x ( DISTINCT x ) AS DOUBLE ) ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT DISTINCT 'x' IN ( SELECT DISTINCT x >= 'x' FROM x ORDER BY NOT x = 'x' ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT DISTINCT 1 AS x , 1 , 1 FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x ( * ) ) FROM x WHERE x != 1 GROUP BY x ( DISTINCT x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 'x' ) , ( 1 ) , ( 1 ) , ( 'x' ) , ( 1 ) , ( 'x' ) , ( 1.000000 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x AS SELECT x FROM x ORDER BY 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW DROP VIEW x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x NOT INDEXED NATURAL JOIN x NOT INDEXED ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x WHERE x = 1 GROUP BY x ( x ) LIMIT 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( ( NOT ( x IS NULL ) ) AND ( NOT ( x IS NULL ) ) ) AS x FROM x WHERE x LIKE 'x' ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 1 ) , ( 1 , 1 , NULL ) , ( 1.000000 , 'x' , 1 ) , ( 1 , 1 , NULL ) , ( 1.000000 , 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT NOT x > 'x' FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x ( x ) FROM x GROUP BY x HAVING x ( x ) > 1 ORDER BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x WHERE CASE ( SELECT x ( NULL ) ) WHEN 1 THEN 1 ELSE 1 END ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ( x ) , x ( x ) , x ( x ) ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER UNIQUE UNIQUE UNIQUE PRIMARY KEY UNIQUE NOT NULL UNIQUE ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x AS x , 1 FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x > 1 ) FROM x WHERE x != 1 GROUP BY x ( DISTINCT x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x , x ( x ) FROM x GROUP BY x , x ORDER BY 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( * ) OVER ( ) FROM x WHERE x != 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT NOT x ( ) IS NULL + x IS NOT NULL - 'x' >= x IS NOT NULL , 1 FROM x JOIN x USING ( x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT * FROM x AS x , x AS x , x AS x WHERE x = x AND x = x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT x ( x ( * ) OVER ( ) , 1.000000 , 'x' ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = x + 1 = x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT 'x' IN ( SELECT DISTINCT x >= 'x' FROM x ORDER BY NOT x = 'x' ) GROUP BY 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT ( SELECT x FROM x ORDER BY ( x = 1 AND x = * ) DESC LIMIT 1 OFFSET 1 ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( * ) OVER ( ORDER BY x ) , NOT ( 'x' = x AND x = 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x WHERE x LIKE ( x BETWEEN 1 AND 1 ) AND x = 'x' ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT DISTINCT 1 , x + 1 , 1 FROM x UNION SELECT DISTINCT * FROM x ORDER BY 'x' NULLS LAST ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT 1 , x FROM x ON x ( x , x ) WHERE x IS NOT NULL ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT * FROM x NOT INDEXED NATURAL JOIN x NOT INDEXED ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( ) GROUP BY x ( ) ISNULL ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER , x DOUBLE , x TEXT ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x , x ( x ) , x FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x = 1 OR x < ( SELECT 1.000000 * x ( x ) FROM x WHERE x = x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT x ( x ( 1 ) OVER ( ) , 1.000000 , 'x' ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x NOT LIKE x ( x ) IS NULL + x IS NOT NULL FROM x WHERE ( 1 IN ( 1 , 1 ) ) LIMIT 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x AS x WHERE 'x' = x AND x = 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x FROM x WHERE x IN ( SELECT x FROM x WHERE x IN ( 1 , 1 ) ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x VALUES ( 1 , 'x' ) , ( 1 , 'x' ) , ( 1 , 'x' ) , ( 1 , 'x' ) , ( 1 , 'x' ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = NULL WHERE x = ( SELECT x FROM x WHERE x ( 'x' AS x ) ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT x , x ( x ) OVER ( PARTITION BY x ) FROM x AS x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( ) FROM x AS x , x AS x , x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x ) AS x FROM x WHERE x ( x , x ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x WHERE x = 1 ORDER BY x ( ) OVER x LIMIT 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x AS SELECT x FROM x AS x JOIN x ON NULL = 1.000000 NOT LIKE 'x' USING ( x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x WHERE x >= 1 AND x >= x ORDER BY CAST ( x AS TEXT ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT CASE x WHEN 1 THEN 1 ELSE 1 END != x ( 'x' ) FROM x WHERE x != 1 GROUP BY x ( x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT DISTINCT x ( x * x ) AS x GROUP BY 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 1 ) , ( 'x' ) , ( 1 ) , ( 'x' ) , ( 1.000000 ) , ( 'x' ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x WHERE x > 'x' ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x , x ( x ) OVER ( PARTITION BY x ( x ) ORDER BY x DESC NULLS LAST , 'x' ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x FROM x GROUP BY x , x HAVING x ( x ) > 1 ORDER BY x DESC LIMIT 1 OFFSET 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x + x LIKE x ( 'x' ) > 1 IS NOT NULL , x ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( - x ) , x ( 1 ) , x ( 1 ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = x ( 1 >= ( SELECT 1.000000 * x ( x ) FROM x ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT 'x' IN ( SELECT DISTINCT 1 , 1 AS x , 1 FROM x ORDER BY 1 ) GROUP BY 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( ( x = 1 OR x > 'x' ) NOT LIKE 'x' * x * 1 + x ) FROM x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x FROM x AS x GROUP BY x ( ) ISNULL , ( x ( x ( ) ISNULL ) AND x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( * ) OVER ( ORDER BY NULL DESC ) FROM x WHERE x != 1 GROUP BY x ( DISTINCT x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT x ( x ( * ) OVER ( ) , 1.000000 , 'x' ) GROUP BY - 'x' AS x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = 1 , x = 1 , x = 1 WHERE x IN ( SELECT x WHERE x = x OR ( x = 1 AND x = 1 ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT 1 AS x , 1 , 1 = x / 1 AS x , 1 FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT ( SELECT x FROM x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT 'x' , * FROM x WHERE x IN ( SELECT CAST ( 'x' AS INTEGER ) ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x ( 'x' ) , x ) FROM x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x VALUES ( 1 ) , ( 1.000000 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * , x IN ( x ( ) ) FROM x ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x NOT LIKE x , x ( x ( 1.000000 ) , x ) ISNULL FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x FROM x WHERE x = 'x' OR x = 'x' OR x = * ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x , x AS x NATURAL JOIN x AS x NATURAL JOIN x GROUP BY 'x' , 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x AS SELECT x = ( SELECT x ( x ) FROM x AS x WHERE x = x ) , 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT ( SELECT x FROM x AS x GROUP BY x ) AND 'x' AS x FROM x LIMIT 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT 1 AS x , 1 , 1 AS x , 1 ORDER BY x ASC , x ASC ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 'x' , 'x' , 1 , 1.000000 ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x , x NOT LIKE x ( x ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) SELECT * FROM x UNION SELECT * AS x FROM x ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = CASE WHEN x % 1 != 1 THEN x END WHERE x = ( SELECT x FROM x WHERE x = x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x ) FROM x ORDER BY x ( x ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x AS SELECT x ( x ) OVER ( PARTITION BY x ORDER BY x ) FROM x GROUP BY x , x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x FROM x WHERE x ( ) GROUP BY x , ( x = 1 AND ( x ( ) % 1 AND 1 ) ) , x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) SELECT x , x FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT * ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = x ( ( SELECT CAST ( x ( 1.000000 , 1 , x ) AS DOUBLE ) ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x > x OR x > 1 AND x NOT LIKE - 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x WHERE x LIKE 'x' ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT 'x' IN ( SELECT DISTINCT x AS x , x , 'x' FROM x ORDER BY 1 ) GROUP BY 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x , x ( ( 1 = 1 AND ( x ( ) % 1 AND 1 ) ) ) ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT x ( x ( x , 'x' ) ISNULL ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x FROM x AS x JOIN x AS x ON x = x WHERE x = 1 AND 1 = x AND x = 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x NOT LIKE x ( x ) ) FROM x AS x WHERE x > x GROUP BY x ( DISTINCT x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = NULL WHERE x IN ( SELECT DISTINCT x WHERE ( SELECT x ( x ) OVER ( PARTITION BY x ) ) IS NULL = x + 1 ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT x ( x ) OVER x FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x AS x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT CAST ( x < 1 AS INTEGER ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x VALUES ( 1 , NULL , 1.000000 , NULL ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW WITH x AS ( SELECT * FROM x ) SELECT x FROM x JOIN x USING ( x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( 1 ) FROM x WHERE x != 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE TABLE x ( x CHAR ( 1 ) , x CHAR ( 1 ) , x INT , x VARCHAR ( 1 ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x WHERE ( x = x AND x = x AND x >= 'x' AND x LIKE 'x' ) OR x = 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x % 1 ) FROM x WHERE x < 1 + x GROUP BY x ( DISTINCT x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x = ( SELECT x FROM x WHERE NULL = x ) ) ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( * ) FROM x AS x , x AS x WHERE x + x LIKE 'x' ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x FROM x WHERE ( x ( ) % 1 ) + x ( x , x ) IS NOT NULL IN ( 1.000000 , 1 , 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x FLOAT , x INTEGER ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = x ( x , ( SELECT x ( x ) OVER ( ) ORDER BY x ( * ) OVER ( ) ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 'x' , 1.000000 , 'x' ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( DISTINCT x ) , x FROM x WHERE x ISNULL ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x AS WITH x AS ( SELECT - 'x' FROM x ) SELECT 1 , 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT DISTINCT x NOT LIKE 'x' LIMIT 1 OFFSET 1 ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT * FROM x WHERE ( x BETWEEN 1 AND 1 ) OR x = 1 ORDER BY x DESC ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT 1 , x + x , 1 FROM x UNION SELECT x WHERE x OR x ORDER BY x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT * FROM x NATURAL JOIN x UNION SELECT DISTINCT * FROM x ORDER BY x * 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER PRIMARY KEY , x TEXT , x TEXT , x TEXT , x TEXT , x TEXT , x TEXT , x TEXT , x TEXT , x TEXT , x TEXT ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT ( x = x AND x = 1 ) , x FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW WITH x AS ( SELECT * FROM x AS x ) SELECT x ( x ( 1 ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT * FROM x AS x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ( x ) , x ) FROM x ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT 1 AS x FROM x AS x , x AS x , x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x NOT LIKE x ( 1 ) ) , x FROM x WHERE x IS NOT NULL ORDER BY x ( ) OVER tcl ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) SELECT * FROM x AS x , x AS x , x AS x NATURAL JOIN x NOT INDEXED ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( 'x' , 1 ) FROM x ( x , x ) WHERE x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT x ( ) IS NOT NULL FROM x UNION SELECT DISTINCT * FROM x ORDER BY x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = 'x' >= x IS NOT NULL WHERE x > 1 OR x > 1 AND - x ( 1 ) >= x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( ) IS NOT NULL FROM x AS x , x AS x NATURAL JOIN x NATURAL JOIN x ORDER BY x ( ) NULLS LAST ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT 1 , 1 , NULL FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x SELECT 'x' AS x , x ( ( x % x <= x ) , 1 ) OVER ( ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT CASE 1 WHEN 1 THEN 'x' WHEN 1 THEN 'x' ELSE 'x' END ORDER BY 1 , 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT x , ( CASE WHEN x != 'x' THEN 1 ELSE 1 END ) AS x , x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( x ) OVER ( ORDER BY x DESC , 1 , 1 ) FROM x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT 'x' IN ( SELECT DISTINCT NOT x > 'x' FROM x ORDER BY x DESC ) GROUP BY NULL ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT 'x' IN ( SELECT DISTINCT x ( 'x' , 1 ) OVER ( ) FROM x ORDER BY 1 ) GROUP BY 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT x ( * ) OVER ( ORDER BY x ) , x FROM x GROUP BY x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT DISTINCT 'x' IN ( SELECT * FROM x , x WHERE x < x ORDER BY 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x AS x FROM x , x WHERE x = 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ) / 1.000000 AS x FROM x WHERE - 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x ( x ) OVER ( ORDER BY CAST ( x AS CHAR ( 1 ) ) ) , 1 ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x WHERE x ( x ) IN ( 'x' , 'x' ) ORDER BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 1 ) , ( 1 , 1 , NULL ) , ( 1.000000 , 'x' , 1 ) , ( 1 , 1 , NULL ) , ( 1 , 1 , NULL ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x NATURAL JOIN x INTERSECT SELECT DISTINCT * FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ( x ( x ) OVER ( ) ) , 1 ) FROM x ( x ) WHERE x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT DISTINCT 1 IN ( SELECT x FROM x ) AS x GROUP BY 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x ( x , 1 ) , x ( 1 ) , x ( 1 ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT DISTINCT x FROM x WHERE x IN ( x ( 1.000000 ) ) ORDER BY x + x , x NULLS LAST ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = x ( 'x' , x , x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS WITH x AS ( SELECT x ( ) OVER ( ORDER BY x ( * ) OVER ( ) ) ) SELECT x ( ) AS x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x AS WITH x AS ( SELECT * FROM x ORDER BY x ASC , x DESC ) SELECT 1 , 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ( x ) ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT ( SELECT DISTINCT * , 1 , 1.000000 ) LIMIT 1 OFFSET 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT 1 FROM x AS x WHERE x = x + 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = NULL WHERE x IN ( SELECT x ( x * x ) * 1.000000 FROM x WHERE x = x + 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x CHAR ( 1 ) , x DOUBLE , x CHAR ( 1 ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x NOT LIKE x ( x ) ) FROM x WHERE x != 1 GROUP BY x ( DISTINCT 1.000000 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER PRIMARY KEY CHECK ( x ( ) IS NULL + ( x = 1 OR CASE WHEN x = 1 THEN 'x' ELSE x END = 1 ) NOT LIKE 'x' IS NOT NULL ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT 1 , 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW WITH x AS ( SELECT * FROM x ) SELECT x ( 1 , 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ) FROM x WHERE x = 1 AND x = 1 ORDER BY x DESC NULLS FIRST ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , x FROM x WHERE x IS NOT NULL GROUP BY x ( x , x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x AS SELECT * FROM x WHERE x IN ( SELECT x FROM x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( x ( ) ISNULL , 1.000000 , 'x' ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT 1 AS x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x NOT LIKE 'x' ) ISNULL , x FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT ( SELECT CAST ( x > x ( ) IS NOT NULL AS DOUBLE ) ) FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x IS NULL FROM x WHERE x = 1 AND x >= 1.000000 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x , x ( ) OVER ( ORDER BY 1 >= x = 1 DESC ) FROM x ORDER BY x ( x ) OVER ( ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x , x ) FROM x ORDER BY x ( * ) OVER ( ORDER BY x ) DESC LIMIT 1 OFFSET 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x , x FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x , 1 ) OVER ( ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT ( SELECT x FROM x ORDER BY x LIMIT 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x AS WITH x AS ( SELECT x ( ) OVER ( x ORDER BY x DESC ) FROM x ) SELECT 1 , 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x WHERE x > 1 OR x > 1 AND x NOT LIKE 'x' GROUP BY x ( x <= 'x' ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 1 ) , ( 1 , 1 , NULL ) , ( 1 , 1 ) , ( 1 , 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT x ( ( SELECT CAST ( x ( DISTINCT x ) AS DOUBLE ) ) ) FROM x ORDER BY x ( ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = x ( NULL , x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( * ) FROM x WHERE x ( ( NOT ( x IS NULL ) ) AND ( NOT ( x IS NULL ) ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x FLOAT , x INTEGER , x INT , x VARCHAR ( 1 ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT ( SELECT DISTINCT x , 1 , 1.000000 ) LIMIT 1 OFFSET 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x SELECT * FROM x INTERSECT SELECT * FROM x ORDER BY x ON CONFLICT DO NOTHING ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT ( SELECT * FROM x WHERE x >= 1 ORDER BY x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS WITH x AS ( SELECT x ( 'x' ) AS x FROM x ) SELECT 1 , 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT * FROM x WHERE ( x = x AND x = x AND x = x AND x = x ) OR x = 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x , x NATURAL JOIN x NATURAL JOIN x ORDER BY x ( ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT * FROM x AS x , x AS x NATURAL JOIN x NATURAL JOIN x ORDER BY x , x DESC NULLS LAST ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x , 'x' ) ISNULL FROM x WHERE x OR 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x * ( 1 - x ) ) AS x , x FROM x WHERE x IS NOT NULL ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x WHERE x >= 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x AS SELECT x , x FROM x WHERE x IS NOT NULL ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT * FROM x WHERE - x ( 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x NATURAL JOIN x NOT INDEXED WHERE x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x FROM x WHERE x ( ) GROUP BY x ( ) , 1 , 1 , x , x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x > 1 OR x = x OR x = x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x AS x JOIN x AS x ON x = x JOIN x USING ( x ) ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 'x' ) , ( 1 ) , ( 'x' ) , ( 1 ) , ( 'x' ) , ( 1.000000 ) ON CONFLICT DO NOTHING ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT ( SELECT x ( ) FROM x WHERE x = 'x' ) FROM x LIMIT 1 OFFSET 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE TABLE x ( x INTEGER UNIQUE NOT NULL ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x VALUES ( 1 , 'x' , NULL ) ON CONFLICT DO NOTHING ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT ( SELECT DISTINCT x AS x , ( x * 1 ) > x , 1.000000 ) LIMIT 1 OFFSET 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT 1 FROM x , x USING ( x , x ) GROUP BY 1.000000 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1.000000 , 'x' ) , ( 1 , 1 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x FROM x WHERE x = x ( x ) OR x = 'x' OR x LIKE ( x BETWEEN 1 AND 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( DISTINCT x / 1 ) , x ( x ) , x ( x ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = x ( x ( x , 'x' , 1 ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( DISTINCT x ISNULL < 1 + x , x ) FROM x AS x ORDER BY x NULLS FIRST ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT 1 FROM x WHERE x ( x , 1 , ( x NOT IN ( 1 ) AND x NOT IN ( 1 ) ) ) ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x AS SELECT x + 1 , x + 1 FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT * FROM x GROUP BY x ORDER BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT x , x FROM x WHERE x < 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x FROM x AS x JOIN x ON NULL = 1.000000 WHERE x = 1 LIMIT 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' , x = 'x' , x = 'x' , x = x + 1 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' / 1.000000 IS NOT NULL ) , x ( 1 ) , x ( 1 ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x ( 1 ) OVER ( ) , 1.000000 , 'x' ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( ( SELECT x FROM x AS x GROUP BY x ) AND x ( 1 = 1.000000 AS x ) IS NULL ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( 1 , 1 ) OVER ( ORDER BY x ) AS x FROM x WHERE x = 1.000000 + 1.000000 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW WITH x AS ( SELECT x ( 'x' ) AS x FROM x ) SELECT x ( 'x' , 'x' ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT ( SELECT DISTINCT x ( 'x' ) LIMIT 1 OFFSET 1 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT * FROM x WHERE x = 1 AND x ( x , x ) > 1 ORDER BY x DESC NULLS FIRST ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( ( SELECT x ( x ) FROM x ) ) FROM x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( * ) OVER ( ORDER BY x ) FROM x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x WHERE ( x = 1 AND ( 1.000000 = 1 OR x = 1 ) ) OR ( x = 1 AND x = 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT DISTINCT x ( ) OVER ( ) ORDER BY x ( * ) OVER ( ORDER BY 1 NULLS LAST ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE TABLE x ( x TEXT PRIMARY KEY CHECK ( - 1.000000 >= x IS NOT NULL ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( ) ORDER BY x , x DESC , x , x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x FROM x WHERE ( SELECT 1 ) = 1 OR x = 'x' OR x = 'x' LIMIT 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x , x AS x WHERE 1 = x AND x = 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT x ( x ) <= 'x' FROM x AS x , x AS x JOIN x NATURAL JOIN x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x ( x ( x ( ) ) ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x FROM x WHERE x IN ( 1 , 1 ) ORDER BY x DESC LIMIT 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT CASE WHEN x NOT IN ( 1 >= x = 1 , 1 ) OR x = 1 THEN 'x' ELSE 'x' END FROM x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( DISTINCT x ( x ) , x ) ) WHERE x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT * , x , x , 1 , 1 FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = NULL WHERE x ( x ) / 1.000000 = ( SELECT 'x' / 'x' , 'x' / 'x' , 'x' / 'x' ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x AS WITH x AS ( SELECT * FROM x ) SELECT x ( ) ISNULL , x ( 'x' ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x FROM x WHERE x > x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT x , x ( x ) FROM x GROUP BY x HAVING x < 'x' ORDER BY x DESC NULLS FIRST ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x AS SELECT x ( x ) , x ( x ) , x ( x ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 'x' , 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x , x , ( x NOT IN ( 1 ) AND x NOT IN ( 1 ) ) ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = x ( x ( ( x ( ) % 1 ) ) , x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x ( x ) , x ) ISNULL FROM x WHERE x != 1 GROUP BY x ( DISTINCT x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x NOT INDEXED NATURAL JOIN x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT x ( 'x' ) LIMIT 1 OFFSET 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT * , x IN ( x ( * ) , 1 ) FROM x ORDER BY x ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x ( * ) OVER ( ORDER BY 1 , 1 ) FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x , x AS x JOIN x NATURAL JOIN x ( x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT DISTINCT - 'x' FROM x AS x , x AS x JOIN x NATURAL JOIN x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x , x ( x ) OVER ( PARTITION BY 1 , 1 , NULL ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x + 1 FROM x EXCEPT SELECT x FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ) / 1.000000 AS x FROM x WHERE x IS NOT NULL ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT * FROM x NOT INDEXED NATURAL JOIN x NOT INDEXED ORDER BY x , x DESC , x , x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x ( x ) OVER ( PARTITION BY x ( x NOT LIKE x ( 1 ) ) ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT 1 FROM x , x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x AS SELECT x NOT LIKE x ( x ) IS NULL + x IS NOT NULL ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ) OVER ( ) AS x FROM x GROUP BY NOT x > x % x % 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x AS SELECT 1 , 1 FROM x ON x ( x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS WITH x AS ( SELECT * FROM x ) SELECT x ( 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT 1 , NULL , 1 , 1 , x ( 'x' ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT DISTINCT x ( x ) OVER ( ORDER BY x NULLS LAST ) IS NOT NULL LIMIT 1 OFFSET 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x ORDER BY x ASC , x DESC , x , x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE x > 1 OR x > 1 AND x < ( SELECT x FROM x AS x GROUP BY x + 1 , x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x , x AS x JOIN x JOIN x GROUP BY 1 HAVING 1.000000 + 1.000000 ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x , x FROM x WHERE x IS NOT NULL GROUP BY x HAVING ( 1 = 1 AND ( x = 1 ) = 1 ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT 1 AS x , 1 , 1 = x / 1 , NOT x >= 'x' FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x INTEGER , x DOUBLE , x DOUBLE ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW WITH x AS ( SELECT * FROM x ) SELECT DISTINCT x ( x ( 1 ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x FROM x INTERSECT SELECT x FROM x AS x , x AS x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x FROM x AS x ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x WHERE x ( x ) OR x < 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( x ) <= 'x' = x FROM x WHERE x = 1 LIMIT 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x ( DISTINCT x / 1 ) FROM x WHERE x IS NOT NULL ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x FROM x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x ( ) GROUP BY x NOT LIKE x ( x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT CASE WHEN 1 THEN 'x' WHEN 1 THEN 'x' ELSE 'x' END ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE TABLE x ( x CHAR ( 1 ) , x VARCHAR ( 1 ) , x VARCHAR ( 1 ) ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( * ) FROM x AS x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x ) / 1.000000 AS x FROM x WHERE x IN ( 1 , 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x INTERSECT SELECT DISTINCT * FROM x ORDER BY x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT 1 , 1 , x ( 'x' ) FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x NOT LIKE x ( x ) ) FROM x WHERE x != 1 GROUP BY x ( DISTINCT 'x' ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x FROM x WHERE x >= 'x' AND x < 'x' ORDER BY x DESC LIMIT 1 OFFSET 1 ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x ( x , x ) SELECT - x , x FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( ) ISNULL FROM x WHERE x != 1 GROUP BY x ( x , x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = x ( x ( x ( x ) , x ) ISNULL , x , x ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( ) % - 1.000000 >= x IS NOT NULL , x FROM x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x , x , 'x' FROM x , x WHERE x = 'x' AND x = x ORDER BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , 1 AS x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( 'x' ) OVER ( ORDER BY x ( * ) OVER ( ) ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT 'x' IN ( SELECT x FROM x WHERE x = 1 LIMIT 1 ) GROUP BY 1 HAVING x ( ) IS NOT NULL < 'x' ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT 'x' IN ( SELECT DISTINCT x ( x ) OVER ( ) FROM x ORDER BY x ) GROUP BY 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x AS WITH x AS ( SELECT ( SELECT DISTINCT 1.000000 AS x , 1.000000 ) ) SELECT 1 , 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = x ( 1 >= ( SELECT x ( * ) FROM x ORDER BY x ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT 'x' IN ( SELECT DISTINCT x ( ) % 1 AS x FROM x ORDER BY 1 ) GROUP BY 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ( ( NOT ( x IS NULL ) ) AND ( NOT ( NOT ( 'x' = 'x' AND x = 1 ) ) ) ) , 1.000000 , 'x' ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT DISTINCT 1 , 1 , * , x FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT x FROM x NATURAL JOIN x WHERE x = 'x' OR ( x = 1 AND x = 1 ) ON CONFLICT DO NOTHING ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE INDEX x ON x ( x ( x ) , x ( x ) ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT ( SELECT DISTINCT 1 , 1 , x ( 'x' ) , 1 , 1.000000 ) LIMIT 1 OFFSET 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT * FROM x AS x WHERE 1 = x AND x = 1 ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE TABLE x ( x INT NOT NULL , x INT ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE TABLE x AS SELECT DISTINCT x FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x , x FROM x AS x , x AS x WHERE x IS NOT NULL ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x SELECT x % 1 AS x FROM x WHERE x IN ( 1 , 1 ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW INSERT INTO x VALUES ( 1 ) , ( 1 ) , ( NULL ) , ( 1.000000 ) , ( 'x' ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS WITH x AS ( SELECT * ) SELECT NULL INTERSECT SELECT DISTINCT x ( ) GROUP BY NULL ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW UPDATE x SET x = x ( ( x * 1 ) > x , x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x AS x , x AS x JOIN x NATURAL JOIN x ORDER BY x ( ) OVER ( ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( DISTINCT x / 1 ) , x ( x ) FROM x GROUP BY x ORDER BY 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT x ( ( NOT ( x IS NULL ) ) AND ( NOT ( x IS NULL ) ) ) FROM x WHERE x LIKE 'x' ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = 'x' WHERE ( SELECT x FROM x INDEXED BY x WHERE NULL = x ) > 1 OR x > 1 AND x NOT LIKE - 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x ( x , x ) SELECT x ( x , 1 ) OVER ( ORDER BY x ) , x + 1 FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = ( SELECT x ( DISTINCT x ( ) , x ( x ( 'x' ) ) ) FROM x ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT * FROM x ORDER BY 1 , 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW INSERT INTO x SELECT - x , x + x FROM x WHERE x ORDER BY x DESC LIMIT 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT DISTINCT x ( ) , x FROM x AS x , x AS x NATURAL JOIN x NATURAL JOIN x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x SELECT x ( 'x' / 1 ) , x ( DISTINCT ( x ) ) , x ( x ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW SELECT x ( 'x' ) AS x ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT 1 , 1 , 'x' FROM x ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x FROM x INTERSECT SELECT x FROM x GROUP BY x ( x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT DISTINCT ( SELECT x FROM x AS x GROUP BY x , x ) GROUP BY 1 ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS SELECT * FROM x WHERE x IN ( SELECT x FROM x LIMIT 1 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT DISTINCT * FROM x AS x , x AS x JOIN x NATURAL JOIN x ORDER BY x DESC ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE VIEW x ( x , x ) AS WITH x AS ( SELECT * FROM x ) SELECT 1 , 1 ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( ) ORDER BY x ( * ) OVER ( ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT x ( x ( ) , x ( 'x' ) , NULL , x ) FROM x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT DISTINCT ( SELECT DISTINCT 'x' , 1 , 1.000000 ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW CREATE TABLE x ( x FLOAT , x INT UNIQUE NOT NULL ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW SELECT x FROM x WHERE x = ( SELECT x FROM x WHERE x = - 1 ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW SELECT x ( x ( x ) ) , x ( x ) , 'x' FROM x ORDER BY x ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW UPDATE x SET x = x ( ( SELECT DISTINCT CAST ( x ( DISTINCT x ) AS DOUBLE ) ) ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW SELECT 'x' , * FROM x WHERE x IN ( SELECT x ) ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW CREATE VIEW x ( x ) AS SELECT x , x FROM x WHERE ( x = 'x' OR x = 'x' ) IS NOT NULL ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH ROW INSERT INTO x ( x ) VALUES ( 'x' ) , ( 1.000000 ) , ( 1.000000 ) , ( 'x' ) ; CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW UPDATE x SET x = x ( x , ( ( x OR NOT x ) BETWEEN 1 AND 1 ) + x ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH ROW INSERT INTO x ( x , x ) VALUES ( 1 , 1 ) , ( 1.000000 , 'x' , 1 , 1 ) ; ================================================ FILE: data/fuzz_root/mysql_input/2.txt ================================================ CREATE TABLE v0 ( v1 INT ) ; insert into v0(v1) values(1); update v0 set v1 = 1 where v1=20; insert into v0(v1) values(100), (100); SELECT percentile_cont ( v1 ) OVER w , json_object_agg ( v1 ) OVER w FROM v0 WINDOW v2 AS ( PARTITION BY v1 ORDER BY v1 DESC ) ; ================================================ FILE: data/fuzz_root/mysql_input/3.txt ================================================ CREATE TABLE v0 ( v1 INT , v2 INT , v3 INT CONSTRAINT xx CHECK ( v3 ) ) ; create index x on v0(v2, v3); insert into x(v3) values(1),(2); UPDATE v0 SET v3 = NULL ; select v3 from x; ================================================ FILE: data/fuzz_root/mysql_input/4.txt ================================================ CREATE TABLE v0 ( v1 INT , v2 INT NOT NULL , v3 INT , v4 INT NOT NULL ) ; INSERT INTO v0 VALUES ( 0 , 0 , 0 ) , ( 0 , 0 , 0 ) ; select a from b where c = 3; drop table v0; ================================================ FILE: data/fuzz_root/mysql_input/5.txt ================================================ CREATE TABLE v0 ( v1 varchar(80)) ; INSERT INTO v0 ( v1 ) VALUES ( '' ) , ( NULL ) , ( 'X' ) , ( NULL ) ; SELECT bool_and ( covar_pop ( array_agg ( v1 ) ) , 10 ) FROM v0 GROUP BY v1 ; ================================================ FILE: data/fuzz_root/mysql_input/6.txt ================================================ CREATE TABLE t1(a INTEGER, b INTEGER, c INTEGER); INSERT INTO t1 VALUES(1, 1, 1); INSERT INTO t1 VALUES(1, 2, 2); SELECT c, sum(c) OVER win1 FROM t1 WINDOW win1 AS (ORDER BY b); ================================================ FILE: data/fuzz_root/mysql_input/7.txt ================================================ CREATE TABLE v0 ( v1 INT , v2 INT ) ; CREATE INDEX title_idx_nulls_low ON films (title ASC); CREATE TABLE v4 AS SELECT v1 , v2 FROM v0 ; CREATE TRIGGER v5 BEFORE INSERT ON v0 FOR EACH ROW insert into v3 values (1,1); insert into v4 values (1,1); select * from b; ================================================ FILE: data/fuzz_root/mysql_input/8.txt ================================================ CREATE TABLE v0 ( v1 INT , v2 CHAR ) ; CREATE VIEW v5 AS SELECT * , stddev_samp ( v1 ) AS v4 , ( SELECT max ( v1 ) FROM v0 , v0 WHERE v1 = v2 ) AS v3 FROM v0 , v0 WHERE v1 = 'Comedy' ; CREATE VIEW v6 AS SELECT v2 + 1 FROM v5 WHERE v1 < 100 ; drop table v4; Insert into v6 values (44); ================================================ FILE: data/fuzz_root/mysql_input/new ================================================ CREATE TEMPORARY TABLE v0 ( v1 NUMERIC PRIMARY KEY ) ; WITH RECURSIVE v0 ( v1 ) AS ( SELECT 18 UNION SELECT v1 + 76692631.000000 FROM v0 WHERE v1 < 13915061.000000 ) SELECT v1 , v1 , v1 AS v2 , v1 FROM v0 WHERE EXISTS ( SELECT 26 FROM v0 AS v3 WHERE v1 = v1 ^ -1 ) ; ================================================ FILE: data/fuzz_root/mysql_input/z.txt ================================================ CREATE TABLE v0 ( v1 INT , v2 INT ) ; insert into v0(v1, v2) values(1, 2); SELECT v1 , v1 , v1 , v1 FROM ( SELECT v2 , v1 , v1 , v2 , regr_r2 ( ) OVER ( PARTITION BY v2 ORDER BY v1 DESC) AS v4 FROM v0 ) AS v3 WHERE v1 < 3 ; insert into v0(v1) values(10),(20); select v1, v2 from v0; ================================================ FILE: data/fuzz_root/pqsql_init_lib/1 ================================================ CREATE TABLE hobbies_r (name text,person text); CREATE TABLE view_base_table (key int PRIMARY KEY, data varchar(20)); CREATE VIEW key_dependent_view AS SELECT * FROM view_base_table GROUP BY key; INSERT INTO key_dependent_view(key, data) VALUES (1, '123123'); SELECT * from key_dependent_view; ================================================ FILE: data/fuzz_root/pqsql_init_lib/1.txt ================================================ CREATE TABLE v0 ( v1 INT , v2 INT ) ; SELECT v1 , v1 , v1 , v1 FROM ( SELECT v2 , v1 , v1 , v2 , regr_r2 ( ) OVER ( PARTITION BY v2 ORDER BY v1 DESC , v1 ) AS v4 FROM v0 ) AS v3 WHERE v1 < 3 ; ================================================ FILE: data/fuzz_root/pqsql_init_lib/2 ================================================ CREATE TABLE hobbies_r (name text, person INT); select * from hobbies_r; ================================================ FILE: data/fuzz_root/pqsql_init_lib/2.txt ================================================ CREATE TABLE v0 ( v1 INT ) ; SELECT percentile_cont ( v1 ) OVER w , json_object_agg ( v1 ) OVER w FROM v0 WINDOW v2 AS ( PARTITION BY v1 ORDER BY v1 DESC ) ; ================================================ FILE: data/fuzz_root/pqsql_init_lib/3 ================================================ create table v1(v2 INT ,v3 INT); select * from v1 where v2 = 1; drop table v1; ================================================ FILE: data/fuzz_root/pqsql_init_lib/3.txt ================================================ CREATE TABLE v0 ( v1 INT , v2 INT , v3 INT CONSTRAINT xx CHECK ( v3 ) ) ; UPDATE v0 SET v3 = NULL ; ================================================ FILE: data/fuzz_root/pqsql_init_lib/4 ================================================ CREATE TABLE v0 ( v2 TEXT , v1 INT ); SELECT DISTINCT * FROM v0 ; ================================================ FILE: data/fuzz_root/pqsql_init_lib/4.txt ================================================ CREATE TABLE v0 ( v1 INT , v2 INT NOT NULL , v3 INT , v4 INT NOT NULL ) ; INSERT INTO v0 VALUES ( 0 , 0 , 0 ) , ( 0 , 0 , 0 ) ; select a from b where c = 3; ================================================ FILE: data/fuzz_root/pqsql_init_lib/5 ================================================ CREATE TABLE v0 ( v1 TEXT , v2 INT ); SELECT * FROM v0 , v0 , v0 , v0 ; ================================================ FILE: data/fuzz_root/pqsql_init_lib/5.txt ================================================ DROP TABLE IF EXISTS t1 ; CREATE TABLE v0 ( v1 varchar(80)) ; INSERT INTO v0 ( v1 ) VALUES ( '' ) , ( NULL ) , ( 'X' ) , ( NULL ) ; SELECT bool_and ( covar_pop ( array_agg ( v1 ) ) , 10 ) FROM v0 GROUP BY v1 ; ================================================ FILE: data/fuzz_root/pqsql_init_lib/6.txt ================================================ CREATE TABLE t1(a INTEGER, b INTEGER, c INTEGER); INSERT INTO t1 VALUES(1, 1, 1); INSERT INTO t1 VALUES(1, 2, 2); SELECT c, sum(c) OVER win1 FROM t1 WINDOW win1 AS (ORDER BY b); ================================================ FILE: data/fuzz_root/pqsql_init_lib/7.txt ================================================ CREATE TABLE v0 ( v1 INT , v2 INT ) ; CREATE INDEX title_idx_nulls_low ON films (title ASC); CREATE FUNCTION v3 ( ) RETURN TRIGGER AS $$ BEGIN SELECT v2 FROM v4 WHERE v1 = 1 ;END $$ LANGUAGE PLPGSQL ; CREATE TRIGGER v5 BEFORE UPDATE OF v1 ON v0 FOR EACH ROW EXECUTE PROCEDURE v3 ( ) ; insert into v4 values (1,1); select * from b; ================================================ FILE: data/fuzz_root/pqsql_init_lib/8.txt ================================================ CREATE TABLE v0 ( v1 INT , v2 CHAR ) ; CREATE VIEW v5 AS SELECT * , stddev_samp ( v1 ) AS v4 , ( SELECT max ( v1 ) FROM v0 , v0 WHERE v1 = v2 ) AS v3 FROM v0 , v0 WHERE v1 = 'Comedy' ; CREATE RECURSIVE VIEW v6 AS SELECT v2 + 1 FROM v5 WHERE v1 < 100 ; drop table v4; Insert into v6 values (44); ================================================ FILE: data/fuzz_root/pqsql_init_lib/init ================================================ CREATE ROLE x LOGIN SUPERUSER ; CREATE ROLE x ; CREATE ROLE x LOGIN NOSUPERUSER ; SET SESSION AUTHORIZATION 'x' ; SET client_min_messages = 'x' ; CREATE PUBLICATION testpub_default ; RESET client_min_messages ; COMMENT ON PUBLICATION testpub_default IS 'x' ; SELECT x ( x . x , 'x' ) FROM x p ; CREATE PUBLICATION testpub_xxx WITH ( foo ) ; CREATE PUBLICATION testpub_xxx WITH ( publish = 'x' ) ; ALTER PUBLICATION testpub_default SET ( publish = 'x' ) ; CREATE SCHEMA x ; CREATE TABLE x . testpub_nopk ( x INT , x INT ) ; CREATE VIEW x AS SELECT 1 ; CREATE TABLE x ( x INT ) PARTITION BY LIST ( a ) ; CREATE PUBLICATION testpub_foralltables FOR ALL TABLES WITH ( publish = 'x' ) ; ALTER PUBLICATION testpub_foralltables SET ( publish = 'x' ) ; ALTER PUBLICATION testpub_foralltables ADD TABLE x ; ALTER PUBLICATION testpub_foralltables DROP TABLE x ; ALTER PUBLICATION testpub_foralltables SET TABLE x . testpub_nopk ; SELECT x , x FROM x WHERE x = 'x' ; DROP TABLE x ; DROP PUBLICATION testpub_foralltables ; CREATE TABLE x ( x INT ) ; CREATE TABLE x ( x TEXT ) INHERITS ( x ) ; CREATE PUBLICATION testpub3 FOR TABLE x ; CREATE PUBLICATION testpub4 FOR TABLE ONLY x ; DROP TABLE x , x ; DROP PUBLICATION testpub3 , testpub4 ; CREATE PUBLICATION testpub_fortbl FOR TABLE x ; CREATE PUBLICATION testpub_fortbl FOR TABLE x , x . testpub_nopk ; ALTER PUBLICATION testpub_fortbl ADD TABLE x ; ALTER PUBLICATION testpub_default ADD TABLE x ; ALTER PUBLICATION testpub_default SET TABLE x ; ALTER PUBLICATION testpub_default ADD TABLE x . testpub_nopk ; ALTER PUBLICATION testpib_ins_trunct ADD TABLE x . testpub_nopk , x ; ALTER PUBLICATION testpub_default DROP TABLE x , x . testpub_nopk ; ALTER PUBLICATION testpub_default DROP TABLE x . testpub_nopk ; SET ROLE regress_publication_user2 ; GRANT CREATE ON DATABASE regression TO x ; GRANT regress_publication_user TO x ; SET ROLE regress_publication_user ; REVOKE CREATE ON DATABASE regression FROM x ; DROP VIEW x ; SET ROLE regress_publication_user_dummy ; ALTER PUBLICATION testpub_default RENAME TO testpub_dummy ; ALTER PUBLICATION testpub_default RENAME TO testpub_foo ; ALTER PUBLICATION testpub_foo RENAME TO testpub_default ; ALTER PUBLICATION testpub_default OWNER TO x ; DROP PUBLICATION testpub_default ; DROP PUBLICATION testpib_ins_trunct ; DROP PUBLICATION testpub_fortbl ; DROP SCHEMA pub_test CASCADE ; RESET SESSION AUTHORIZATION ; DROP ROLE x , x ; DROP ROLE x ; SET extra_float_digits TO 1 ; SELECT 'x' AS four , x ( x ) AS center FROM x ; @@SELECT 'x' AS four , ( x ) AS center FROM x ; SELECT 'x' AS six , x ( x ) AS center FROM x ; @@SELECT 'x' AS six , ( x ) AS center FROM x ; @@#SELECT 'x' AS two , ( x ) AS center FROM x WHERE ( x ) > 1 ; SELECT 'x' AS two , x . x FROM x p1 WHERE x ( x . x , x 'x' ) ; SELECT 'x' AS two , x . x FROM x p1 WHERE x . x ? - x 'x' ; SELECT 'x' AS one , x . x FROM x p1 WHERE x ( x . x , x 'x' ) ; SELECT 'x' AS one , x . x FROM x p1 WHERE x . x ? | x 'x' ; SELECT x . x , x . x , x ( x . x , x . x ) FROM x p1 , x p2 ; SELECT x . x , x . x , x . x + x . x FROM x p1 , x p2 ; SELECT x . x , x . x , x . x - x . x FROM x p1 , x p2 ; SELECT x . x , x . x , x . x * x . x FROM x p1 , x p2 WHERE x . x [ 1 ] BETWEEN 1 AND 1 ; SELECT x . x , x . x , x . x * x . x FROM x p1 , x p2 WHERE x . x [ 1 ] < 1 ; SELECT x . x , x . x , x . x / x . x FROM x p1 , x p2 WHERE x . x [ 1 ] BETWEEN 1 AND 1 ; SELECT x . x , x . x , x . x / x . x FROM x p1 , x p2 WHERE x . x [ 1 ] > 1 ; ~######@SELECT x . x , x . x FROM x p , x l WHERE x . x < x . x ; @@SELECT x . x , x . x FROM x p , x p1 WHERE x . x < x . x ; SELECT x FROM x WHERE ? | x ; SELECT x FROM x WHERE ? - x ; SELECT x . x , x . x FROM x l1 , x l2 WHERE x . x = x . x ; SELECT x . x , x . x FROM x l1 , x l2 WHERE x . x ? || x . x ; SELECT x . x , x . x FROM x l1 , x l2 WHERE x . x ? - | x . x ; #SELECT x . x , x . x FROM x l1 , x l2 WHERE x . x ? x . x ; #SELECT x . x , x . x FROM x l , x b WHERE x . x ? x . x ; ######@@SELECT x , - x FROM x ; @@SELECT x , x FROM x ; SELECT x . x , x . x FROM x l1 , x l2 WHERE x . x < x . x ; SELECT x . x , x . x FROM x l1 , x l2 WHERE x . x <= x . x ; SELECT x . x , x . x FROM x l1 , x l2 WHERE x . x >= x . x ; SELECT x . x , x . x FROM x l1 , x l2 WHERE x . x > x . x ; SELECT x . x , x . x FROM x l1 , x l2 WHERE x . x != x . x ; #SELECT x . x , x . x FROM x l , x l1 WHERE x . x ? x . x ; ########@SELECT x . x , x . x FROM x l , x l1 WHERE x . x < x . x ; @SELECT x . x , x . x FROM x l , x b WHERE x . x < x . x ; SELECT 'x' AS six , x ( x ) AS box FROM x ; SELECT 'x' AS twentyfour , x . x + x . x AS translation FROM x b , x p ; SELECT 'x' AS twentyfour , x . x - x . x AS translation FROM x b , x p ; SELECT x . x , x . x , x . x * x . x FROM x b , x p WHERE x . x [ 1 ] BETWEEN 1 AND 1 ; SELECT x . x , x . x , x . x * x . x FROM x b , x p WHERE x . x [ 1 ] > 1 ; SELECT x . x , x . x , x . x / x . x FROM x b , x p WHERE x . x [ 1 ] BETWEEN 1 AND 1 ; SELECT x ( x . x , x . x ) FROM x a , x b ; #SELECT x , x ( x ) FROM x ; @@@@SELECT x . x , x . x FROM x p1 , x p2 WHERE x . x < x . x ; SELECT x . x , x . x FROM x p1 , x p2 WHERE x . x <= x . x ; SELECT x . x , x . x FROM x p1 , x p2 WHERE x . x = x . x ; SELECT x . x , x . x FROM x p1 , x p2 WHERE x . x >= x . x ; SELECT x . x , x . x FROM x p1 , x p2 WHERE x . x > x . x ; SELECT x . x , x . x , x . x + x . x FROM x p , x p1 ; SELECT x . x , x . x , x . x - x . x FROM x p , x p1 ; SELECT x . x , x . x , x . x * x . x FROM x p , x p1 ; SELECT x . x , x . x , x . x / x . x FROM x p , x p1 WHERE x . x [ 1 ] BETWEEN 1 AND 1 ; ~@SELECT 'x' AS twentyfour , x . x , x . x , x . x > x . x AS contains FROM x poly , x p ; @SELECT 'x' AS twentyfour , x . x , x . x , x . x < x . x AS contained FROM x poly , x p ; SELECT 'x' AS four , x ( x ) AS npoints , x AS polygon FROM x ; SELECT 'x' AS four , x ( x ) FROM x ; SELECT 'x' AS four , x ( x ) FROM x WHERE x ( x ) ; SELECT 'x' AS four , x AS open_path , x ( x ( x ) ) AS polygon FROM x WHERE x ( x ) ; ~@@SELECT x . x , x . x FROM x p1 , x p2 WHERE x . x && x . x ; SELECT x . x , x . x FROM x p1 , x p2 WHERE x . x & < x . x ; SELECT x . x , x . x FROM x p1 , x p2 WHERE x . x & > x . x ; SELECT x . x , x . x FROM x p1 , x p2 WHERE x . x & < | x . x ; SELECT 'x' AS six , x ( x , 50.000000 ) FROM x ; #SELECT 'x' AS two , x ( x ) FROM x WHERE ( x ) >= 1 ; SELECT x , x ( 1 , x ) FROM x WHERE x >= 'x' ; SELECT x , x ( 1 , x ) FROM x WHERE x < 'x' ; ~SELECT x . x , x . x FROM x c1 , x c2 WHERE x . x = x . x ; SELECT x . x , x . x FROM x c1 , x c2 WHERE x . x && x . x ; SELECT x . x , x . x FROM x c1 , x c2 WHERE x . x & < x . x ; SELECT x . x , x . x FROM x c1 , x c2 WHERE x . x & > x . x ; @SELECT x . x , x . x FROM x c1 , x c2 WHERE x . x < x . x ; @SELECT x . x , x . x FROM x c1 , x c2 WHERE x . x > x . x ; SELECT x . x , x . x FROM x c1 , x c2 WHERE x . x & < | x . x ; SELECT x . x , x . x FROM x c1 , x c2 WHERE x . x != x . x ; SELECT x . x , x . x FROM x c1 , x c2 WHERE x . x <= x . x ; SELECT x . x , x . x FROM x c1 , x c2 WHERE x . x >= x . x ; SELECT x . x , x . x , x . x + x . x FROM x c , x p ; SELECT x . x , x . x , x . x - x . x FROM x c , x p ; SELECT x . x , x . x , x . x * x . x FROM x c , x p ; SELECT x . x , x . x , x . x / x . x FROM x c , x p WHERE x . x [ 1 ] BETWEEN 1 AND 1 ; SELECT x . x , x . x , x . x / x . x FROM x c , x p WHERE x . x [ 1 ] > 1 ; ~CREATE TABLE x ( x int4 , x point ) ; CREATE INDEX x ON x USING spgist ( x ) WITH ( fillfactor = 1 ) ; INSERT INTO x ( x , x ) SELECT x , x ( x * 1 , x * 1 ) FROM x ( 1 , 1 ) g ; DELETE FROM x WHERE x < 1 ; VACUUM x ; INSERT INTO x ( x , x ) SELECT x + 1 , x ( x * 1 + 1 , x * 1 + 1 ) FROM x ( 1 , 1 ) g ; DELETE FROM x WHERE x % 1 = 1 ; CREATE TABLE x ( x serial , x box ) ; INSERT INTO x ( x ) SELECT x ( x ( x , x ) , x ( x + x , x + x ) ) FROM x ( 1 , 1 , 1 ) i , x ( 1 , 1 , 1 ) j , x ( 1 , 1 ) s ; CREATE INDEX x ON x USING spgist ( x ) ; SELECT x ( * ) FROM ( VALUES ( x ( 1 , 1 ) ) , ( x ( 1 , 1 ) ) , ( x ( 1 , 1 ) ) ) v ( p ) WHERE EXISTS ( SELECT * FROM x b WHERE x . x && x ( x . x , x . x ) ) ; CREATE TABLE x ( x int4 , x TEXT ) ; INSERT INTO x ( x , x ) SELECT - x , 'x' || x ( 'x' , 1 - x ) || 'x' FROM x ( 1 , 1 ) g ; ALTER INDEX x SET ( fillfactor = 1 ) ; REINDEX INDEX x ; BEGIN ; DECLARE foo13 CURSOR FOR SELECT * FROM x WHERE x = 1 ; DECLARE foo14 CURSOR FOR SELECT * FROM x WHERE x = 1 ; DECLARE foo15 CURSOR FOR SELECT * FROM x WHERE x = 1 ; DECLARE foo16 CURSOR FOR SELECT * FROM x WHERE x = 1 ; DECLARE foo17 CURSOR FOR SELECT * FROM x WHERE x = 1 ; DECLARE foo18 CURSOR FOR SELECT * FROM x WHERE x = 1 ; DECLARE foo19 CURSOR FOR SELECT * FROM x WHERE x = 1 ; DECLARE foo20 CURSOR FOR SELECT * FROM x WHERE x = 1 ; DECLARE foo21 CURSOR FOR SELECT * FROM x WHERE x = 1 ; DECLARE foo22 CURSOR FOR SELECT * FROM x WHERE x = 1 ; DECLARE foo23 CURSOR FOR SELECT * FROM x WHERE x = 1 ; DECLARE foo24 CURSOR FOR SELECT * FROM x WHERE x = 1 ; DECLARE foo25 CURSOR FOR SELECT * FROM x WHERE x = 1 ; FETCH ALL IN foo13 ; FETCH ALL IN foo14 ; FETCH ALL IN foo15 ; FETCH ALL IN foo16 ; FETCH ALL IN foo17 ; FETCH ALL IN foo18 ; FETCH ALL IN foo19 ; FETCH ALL IN foo20 ; FETCH ALL IN foo21 ; FETCH ALL IN foo22 ; FETCH ALL IN foo23 ; FETCH ALL IN foo24 ; FETCH ALL IN foo25 ; CLOSE foo13 ; CLOSE foo14 ; CLOSE foo15 ; CLOSE foo16 ; CLOSE foo17 ; CLOSE foo18 ; CLOSE foo19 ; CLOSE foo20 ; CLOSE foo21 ; CLOSE foo22 ; CLOSE foo23 ; CLOSE foo24 ; CLOSE foo25 ; END ; DECLARE c1 CURSOR FOR SELECT * FROM x LIMIT 1 ; FETCH ALL IN c1 ; FETCH 1 IN c1 ; FETCH BACKWARD 1 IN c1 ; FETCH BACKWARD ALL IN c1 ; DECLARE c2 CURSOR FOR SELECT * FROM x LIMIT 1 ; FETCH ALL IN c2 ; FETCH 1 IN c2 ; FETCH BACKWARD 1 IN c2 ; FETCH BACKWARD ALL IN c2 ; DECLARE c3 CURSOR FOR SELECT * FROM x OFFSET 1 ; FETCH ALL IN c3 ; FETCH 1 IN c3 ; FETCH BACKWARD 1 IN c3 ; FETCH BACKWARD ALL IN c3 ; DECLARE c4 CURSOR FOR SELECT * FROM x OFFSET 1 ; FETCH ALL IN c4 ; FETCH 1 IN c4 ; FETCH BACKWARD 1 IN c4 ; FETCH BACKWARD ALL IN c4 ; ROLLBACK ; CREATE TEMP SEQUENCE x ; SELECT x , x , x ( 'x' ) FROM x ORDER BY x LIMIT 1 ; SELECT x ( 'x' ) ; SELECT x , x , x ( 1 , 1 ) FROM x ORDER BY x LIMIT 1 ; SELECT x ( x ) AS s1 , x ( x ) + x ( ) * 1 AS s2 FROM x GROUP BY x ORDER BY x LIMIT 1 ; SET client_min_messages TO 'x' ; DROP ROLE IF EXISTS x ; CREATE USER x ; SET search_path TO 'x' ; CREATE FOREIGN DATA WRAPPER addr_fdw ; CREATE SERVER addr_fserv FOREIGN DATA WRAPPER addr_fdw ; CREATE TEXT SEARCH TEMPLATE addr_ts_temp ( lexize = dsimple_lexize ) ; CREATE TABLE x . gentable ( x serial PRIMARY KEY CONSTRAINT a_chk CHECK ( x > 1 ) , x TEXT DEFAULT 'x' ) ; CREATE VIEW x . genview AS SELECT * FROM x . gentable ; CREATE MATERIALIZED VIEW x . genmatview AS SELECT * FROM x . gentable ; CREATE TYPE addr_nsp . gencomptype AS ( a INT ) ; CREATE TYPE addr_nsp . genenum AS ENUM ( 'x' , 'x' ) ; CREATE FOREIGN TABLE x . genftable ( x INT ) SERVER addr_fserv ; CREATE AGGREGATE addr_nsp . genaggr ( int4 ) ( sfunc = int4pl , stype = int4 ) ; CREATE TRIGGER x BEFORE INSERT ON x . gentable FOR EACH ROW EXECUTE PROCEDURE addr_nsp . trig ( ) ; CREATE POLICY genpol ON x . gentable ; CREATE SERVER integer" FOREIGN DATA WRAPPER addr_fdw ; CREATE USER MAPPING FOR x SERVER integer" ; ALTER DEFAULT PRIVILEGES FOR ROLE x IN SCHEMA public GRANT ALL ON TABLES TO x ; CREATE PUBLICATION addr_pub FOR TABLE x . gentable ; CREATE STATISTICS addr_nsp . gentable_stat ON x , x FROM x . gentable ; SELECT x ( 'x' , 'x' , 'x' ) ; $$$$SELECT * FROM x ( 'x' , 'x' , 'x' ) ; $$$$DROP FOREIGN DATA WRAPPER addr_fdw CASCADE ; DROP PUBLICATION addr_pub ; DROP SUBSCRIPTION regress_addr_sub ; DROP SCHEMA addr_nsp CASCADE ; DROP OWNED BY x ; DROP USER x ; DROP TABLE IF EXISTS x ; CREATE TABLE x ( x INT , x TEXT ) ; DROP VIEW IF EXISTS x ; CREATE VIEW x AS SELECT * FROM x ; DROP INDEX x ; DROP INDEX IF EXISTS x ; CREATE INDEX x ON x ( x ) ; DROP SEQUENCE x ; DROP SEQUENCE IF EXISTS x ; CREATE SEQUENCE x ; DROP SCHEMA test_schema_exists ; DROP SCHEMA IF EXISTS test_schema_exists ; DROP TYPE test_type_exists ; DROP TYPE IF EXISTS test_type_exists ; CREATE TYPE test_type_exists AS ( a INT , b TEXT ) ; DROP DOMAIN test_domain_exists ; DROP DOMAIN IF EXISTS test_domain_exists ; CREATE GROUP x ; DROP USER IF EXISTS x , x ; DROP ROLE IF EXISTS x , x ; DROP GROUP x ; DROP GROUP IF EXISTS x , x ; DROP COLLATION IF EXISTS x ; DROP CONVERSION x ; DROP CONVERSION IF EXISTS x ; CREATE CONVERSION test_conversion_exists FOR 'x' TO 'x' FROM iso8859_1_to_utf8 ; DROP TEXT SEARCH PARSER x ; DROP TEXT SEARCH PARSER IF EXISTS x ; DROP TEXT SEARCH DICTIONARY x ; DROP TEXT SEARCH DICTIONARY IF EXISTS x ; DROP TEXT SEARCH TEMPLATE x ; DROP TEXT SEARCH TEMPLATE IF EXISTS x ; DROP TEXT SEARCH CONFIGURATION x ; DROP TEXT SEARCH CONFIGURATION IF EXISTS x ; DROP EXTENSION test_extension_exists ; DROP EXTENSION IF EXISTS test_extension_exists ; DROP FUNCTION x ( ) ; DROP FUNCTION IF EXISTS x ( ) ; DROP FUNCTION x ( INT , TEXT , INT [ ] ) ; DROP FUNCTION IF EXISTS x ( INT , TEXT , INT [ ] ) ; DROP AGGREGATE x ( * ) ; DROP AGGREGATE IF EXISTS x ( * ) ; DROP AGGREGATE x ( INT ) ; DROP AGGREGATE IF EXISTS x ( INT ) ; @#@@#@@#@@#@DROP LANGUAGE test_language_exists ; DROP LANGUAGE IF EXISTS test_language_exists ; DROP CAST ( TEXT AS TEXT ) ; DROP CAST IF EXISTS ( TEXT AS TEXT ) ; DROP TRIGGER test_trigger_exists ON test_exists ; DROP TRIGGER IF EXISTS test_trigger_exists ON test_exists ; DROP TRIGGER test_trigger_exists ON no_such_table ; DROP TRIGGER IF EXISTS test_trigger_exists ON no_such_table ; DROP TRIGGER test_trigger_exists ON no_such_schema . no_such_table ; DROP TRIGGER IF EXISTS test_trigger_exists ON no_such_schema . no_such_table ; CREATE TRIGGER x BEFORE UPDATE ON x FOR EACH ROW EXECUTE PROCEDURE x ( ) ; DROP RULE test_rule_exists ON test_exists ; DROP RULE IF EXISTS test_rule_exists ON test_exists ; DROP RULE test_rule_exists ON no_such_table ; DROP RULE IF EXISTS test_rule_exists ON no_such_table ; DROP RULE test_rule_exists ON no_such_schema . no_such_table ; DROP RULE IF EXISTS test_rule_exists ON no_such_schema . no_such_table ; DROP FOREIGN DATA WRAPPER test_fdw_exists ; DROP FOREIGN DATA WRAPPER IF EXISTS test_fdw_exists ; DROP SERVER test_server_exists ; DROP SERVER IF EXISTS test_server_exists ; DROP OPERATOR CLASS test_operator_class USING btree ; DROP OPERATOR CLASS IF EXISTS test_operator_class USING btree ; DROP OPERATOR CLASS test_operator_class USING no_such_am ; DROP OPERATOR CLASS IF EXISTS test_operator_class USING no_such_am ; DROP OPERATOR FAMILY test_operator_family USING btree ; DROP OPERATOR FAMILY IF EXISTS test_operator_family USING btree ; DROP OPERATOR FAMILY test_operator_family USING no_such_am ; DROP OPERATOR FAMILY IF EXISTS test_operator_family USING no_such_am ; DROP ACCESS METHOD no_such_am ; DROP ACCESS METHOD IF EXISTS no_such_am ; DROP AGGREGATE IF EXISTS no_such_schema . foo ( INT ) ; DROP AGGREGATE IF EXISTS x ( no_such_type ) ; DROP AGGREGATE IF EXISTS x ( no_such_schema . no_such_type ) ; DROP CAST IF EXISTS ( INTEGER AS no_such_type2 ) ; DROP CAST IF EXISTS ( no_such_type1 AS INTEGER ) ; DROP CAST IF EXISTS ( INTEGER AS no_such_schema . bar ) ; DROP CAST IF EXISTS ( no_such_schema . foo AS INTEGER ) ; DROP COLLATION IF EXISTS x . foo ; DROP CONVERSION IF EXISTS x . foo ; DROP DOMAIN IF EXISTS no_such_schema . foo ; DROP FOREIGN TABLE IF EXISTS x . foo ; DROP FUNCTION IF EXISTS no_such_schema . foo ( ) ; DROP FUNCTION IF EXISTS x ( no_such_type ) ; DROP FUNCTION IF EXISTS x ( no_such_schema . no_such_type ) ; DROP INDEX IF EXISTS x . foo ; DROP MATERIALIZED VIEW IF EXISTS x . foo ; DROP OPERATOR IF EXISTS no_such_schema . + ( INT , INT ) ; DROP OPERATOR IF EXISTS + ( no_such_type , no_such_type ) ; DROP OPERATOR IF EXISTS + ( no_such_schema . no_such_type , no_such_schema . no_such_type ) ; #DROP OPERATOR CLASS IF EXISTS no_such_schema . widget_ops USING btree ; DROP OPERATOR FAMILY IF EXISTS no_such_schema . float_ops USING btree ; DROP RULE IF EXISTS foo ON no_such_schema . bar ; DROP SEQUENCE IF EXISTS x . foo ; DROP TABLE IF EXISTS x . foo ; DROP TEXT SEARCH CONFIGURATION IF EXISTS x . foo ; DROP TEXT SEARCH DICTIONARY IF EXISTS x . foo ; DROP TEXT SEARCH PARSER IF EXISTS x . foo ; DROP TEXT SEARCH TEMPLATE IF EXISTS x . foo ; DROP TRIGGER IF EXISTS foo ON no_such_schema . bar ; DROP TYPE IF EXISTS no_such_schema . foo ; DROP VIEW IF EXISTS x . foo ; $$$$DROP FUNCTION test_ambiguous_funcname ; DROP FUNCTION IF EXISTS test_ambiguous_funcname ; DROP FUNCTION x ( INT ) ; DROP FUNCTION x ( TEXT ) ; $$$$DROP PROCEDURE test_ambiguous_procname ; DROP PROCEDURE IF EXISTS test_ambiguous_procname ; DROP ROUTINE IF EXISTS test_ambiguous_procname ; DROP PROCEDURE x ( INT ) ; DROP PROCEDURE x ( TEXT ) ; DROP DATABASE x ( FORCE ) ; DROP DATABASE x WITH ( FORCE ) ; DROP DATABASE IF EXISTS x ( FORCE ) ; DROP DATABASE IF EXISTS x WITH ( FORCE ) ; CREATE TYPE mood AS ENUM ( 'x' , 'x' , 'x' ) ; DROP TYPE mood ; CREATE TABLE x ( x int8 , x int8 ) ; INSERT INTO x VALUES ( 'x' , 'x' ) ; INSERT INTO x VALUES ( + 1 , 'x' ) ; INSERT INTO x ( x ) VALUES ( 'x' ) ; SELECT * FROM x ; SELECT * FROM x WHERE x = 1 ; SELECT * FROM x WHERE x < 1 ; SELECT * FROM x WHERE x > 1 ; SELECT * FROM x WHERE x <= 1 ; SELECT * FROM x WHERE x >= 1 ; SELECT * FROM x WHERE 1 = x ; SELECT * FROM x WHERE 1 < x ; SELECT * FROM x WHERE 1 > x ; SELECT * FROM x WHERE 1 <= x ; SELECT * FROM x WHERE 1 >= x ; SELECT 'x' AS five , x AS plus , - x AS minus FROM x ; SELECT 'x' AS five , x , x , x + x AS plus FROM x ; SELECT 'x' AS five , x , x , x - x AS minus FROM x ; SELECT 'x' AS three , x , x , x * x AS multiply FROM x ; SELECT 'x' AS three , x , x , x * x AS multiply FROM x WHERE x < 1 OR ( x > 1 AND x < 1 ) ; SELECT 'x' AS five , x , x , x / x AS divide , x % x AS mod FROM x ; SELECT 'x' AS five , x , x ( x ) FROM x ; SELECT 1 + x AS plus4 FROM x ; SELECT 1 - x AS minus4 FROM x ; SELECT 'x' AS five , 1 * x AS twice int4" FROM x ; SELECT 'x' AS five , x * 1 AS twice int4" FROM x ; SELECT x ( x ) , x ( x ) FROM x ; SELECT 'x' AS to_char_1 , x ( x , 'x' ) , x ( x , 'x' ) FROM x ; SELECT 'x' AS to_char_2 , x ( x , 'x' ) , x ( x , 'x' ) FROM x ; SELECT 'x' AS to_char_3 , x ( ( x * 1 ) , 'x' ) , x ( ( x * 1 ) , 'x' ) FROM x ; SELECT 'x' AS to_char_4 , x ( ( x * 1 ) , 'x' ) , x ( ( x * 1 ) , 'x' ) FROM x ; SELECT 'x' AS to_char_5 , x ( x , 'x' ) FROM x ; SELECT 'x' AS to_char_6 , x ( x , 'x' ) FROM x ; SELECT 'x' AS to_char_7 , x ( x , 'x' ) FROM x ; SELECT 'x' AS to_char_8 , x ( x , 'x' ) FROM x ; SELECT 'x' AS to_char_9 , x ( x , 'x' ) FROM x ; SELECT 'x' AS to_char_10 , x ( x , 'x' ) FROM x ; SELECT 'x' AS to_char_11 , x ( x , 'x' ) FROM x ; SELECT 'x' AS to_char_12 , x ( x , 'x' ) FROM x ; SELECT 'x' AS to_char_13 , x ( x , 'x' ) FROM x ; SELECT 'x' AS to_char_14 , x ( x , 'x' ) FROM x ; SELECT 'x' AS to_char_15 , x ( x , 'x' ) FROM x ; SELECT 'x' AS to_char_16 , x ( x , x 'x' ) FROM x ; SELECT 'x' AS to_char_17 , x ( x , 'x' ) FROM x ; SELECT CAST ( x AS int4 ) FROM x WHERE x = 1 ; SELECT CAST ( x AS int2 ) FROM x WHERE x = 1 ; SELECT CAST ( x AS float4 ) , CAST ( x AS float8 ) FROM x ; SELECT CAST ( x AS oid ) FROM x ; #ANALYZE x ; SELECT x , EXTRACT ( YEAR FROM x ) , x ( * ) FROM x GROUP BY 1 , 1 ORDER BY 1 , 1 ; \CREATE TABLE x ( x INT , x INT , x TEXT ) ; INSERT INTO x SELECT 1 , x , 'x' || x FROM x ( 1 , 1 ) x ; \CREATE TYPE complex AS ( r float8 , i float8 ) ; CREATE TYPE quad AS ( c1 complex , c2 complex ) ; INSERT INTO x VALUES ( 1 , ( ( 3.300000 , 4.400000 ) , ( 5.500000 , 6.600000 ) ) ) ; INSERT INTO x VALUES ( 1 , ( ( NULL , 4.400000 ) , ( 5.500000 , 6.600000 ) ) ) ; CREATE TEMP TABLE x ( x fullname , x date ) ; ALTER TABLE x ADD COLUMN x TEXT DEFAULT 'x' ; ALTER TABLE x ADD COLUMN x TEXT DEFAULT NULL ; UPDATE x SET x . suffix = 'x' ; INSERT INTO x ( x , x . c1 . r , x . c2 . i ) VALUES ( 1 , 1 , 1 ) ; CREATE TEMP TABLE x ( x TEXT ) ; INSERT INTO x VALUES ( x ( 'x' , 1 ) ) ; ~~~~~~SELECT ROW ( 1 , 1 ) IN ( ROW ( 1 , 1 ) , ROW ( 1 , 1 ) ) ; CREATE TEMP TABLE x ( x TEXT , x TEXT ) ; INSERT INTO x SELECT 'x' , NULL FROM x ( 1 , 1 ) ; CREATE INDEX ON x ( x , x ) ; SET enable_sort = off ; EXPLAIN ( costs off ) SELECT x , x FROM x WHERE ( x , x ) > ( 'x' , 'x' ) ORDER BY x , x ; SELECT x , x FROM x WHERE ( x , x ) > ( 'x' , 'x' ) ORDER BY x , x ; RESET enable_sort ; SELECT ( ROW ( 1 , 2.000000 ) ) . f1 ; SELECT ( ROW ( 1 , 2.000000 ) ) . f2 ; SELECT ( x ) . f1 FROM ( SELECT ROW ( 1 , 2.000000 ) AS r ) ss ; SELECT ROW ( ) ; SELECT ROW ( ) IS NULL ; SELECT ROW ( ) = ROW ( ) ; SELECT ARRAY [ ROW ( 1 , 1 ) , ROW ( 1 , 1 ) , ROW ( 1 , 1 ) ] ; SELECT ROW ( 1 , 1.100000 ) = ANY ( ARRAY [ ROW ( 1 , 7.700000 ) , ROW ( 1 , 1.100000 ) , ROW ( 1 , 0.000000 ) ] ) ; SELECT ROW ( 1 , 1.100000 ) = ANY ( ARRAY [ ROW ( 1 , 7.700000 ) , ROW ( 1 , 1.000000 ) , ROW ( 1 , 0.000000 ) ] ) ; CREATE TYPE cantcompare AS ( p point , r float8 ) ; CREATE TEMP TABLE x ( x cantcompare ) ; INSERT INTO x VALUES ( 'x' ) ; CREATE TYPE testtype3 AS ( a INT , b TEXT ) ; CREATE TYPE testtype5 AS ( a INT ) ; CREATE TYPE testtype6 AS ( a INT , b point ) ; DROP TYPE testtype1 , testtype3 , testtype5 , testtype6 ; CREATE TYPE testtype1 AS ( a INT , b INT ) ; SELECT x . x , x . x = ROW ( 1 ) , x . x = ARRAY [ ROW ( 1 ) ] , x . x = ROW ( ROW ( 1 ) ) FROM x ( ARRAY [ ROW ( 1 , ROW ( 1 ) , ARRAY [ ROW ( 1 ) ] , ROW ( ROW ( 1 ) ) ) , ROW ( 1 , ROW ( 1 ) , ARRAY [ ROW ( 1 ) ] , ROW ( ROW ( 1 ) ) ) ] ) AS q ( a INT , b record , c record [ ] , d record ) ; DROP TYPE testtype1 , testtype2 , testtype3 , testtype4 , testtype5 , testtype6 ; CREATE TABLE x ( x SERIAL PRIMARY KEY , x BOOLEAN NOT NULL , x NUMERIC ) ; CREATE TYPE price_input AS ( id INTEGER , price NUMERIC ) ; CREATE TYPE price_key AS ( id INTEGER ) ; $$$$INSERT INTO x VALUES ( 1 , FALSE , 1 ) , ( 1 , FALSE , 1 ) , ( 1 , TRUE , 17.990000 ) ; CREATE TEMP TABLE x ( x INT , x TEXT ) ; $$$$$$$$$$$$$$SELECT x ( ROW ( 1 , 'x' ) ) ; SELECT CAST ( x AS TEXT ) FROM x ; $$SELECT x . x FROM x f ; SELECT x ( x ) FROM x f ; ALTER TABLE x ADD COLUMN x TEXT ; SELECT x ( x ) FROM x i ; SELECT x ( x ) FROM x i ( x , y ) ; CREATE TEMP VIEW x AS SELECT * FROM x ; SELECT x ( x ) FROM ( SELECT x , x FROM x ) AS ss ; SELECT x ( x ) FROM ( SELECT x , x FROM x OFFSET 1 ) AS ss ; SELECT x ( x ) FROM ( SELECT x AS a , x AS b FROM x ) AS ss ; SELECT x ( x ) FROM ( SELECT x AS a , x AS b FROM x OFFSET 1 ) AS ss ; SELECT x ( x ) FROM ( SELECT x AS a , x AS b FROM x ) AS ss ( x , y ) ; SELECT x ( x ) FROM ( SELECT x AS a , x AS b FROM x OFFSET 1 ) AS ss ( x , y ) ; EXPLAIN ( costs off ) SELECT x ( x ) FROM ( SELECT x , x FROM x WHERE x = 1 AND x < 1 OFFSET 1 ) q ; SELECT x ( x ) FROM ( SELECT x , x FROM x WHERE x = 1 AND x < 1 OFFSET 1 ) q ; SELECT x ( x ) FROM ( SELECT x AS x , x AS y FROM x WHERE x = 1 AND x < 1 OFFSET 1 ) q ; SELECT x ( x ) FROM ( SELECT x AS x , x AS y FROM x WHERE x = 1 AND x < 1 OFFSET 1 ) q ( a , b ) ; CREATE TEMP TABLE x AS SELECT * FROM x LIMIT 1 ; CREATE TEMP TABLE x ( ) INHERITS ( x ) ; INSERT INTO x VALUES ( 1 , 1 ) ; SELECT x ( x ) FROM ( SELECT x , x FROM x OFFSET 1 ) r ; CREATE TABLE x ( x TEXT , x TEXT ) ; INSERT INTO x ( x , x ) VALUES ( 'x' , 'x' ) ; SELECT x . x FROM ( SELECT x AS d FROM x ) s ; SELECT ( x ) . a , ( x ) . b FROM ( SELECT x AS d FROM x ) s ; SELECT ( x ) . ctid FROM ( SELECT x AS d FROM x ) s ; SELECT x ( * ) AS should_be_1 FROM x ; SELECT x ( * ) AS should_be_2 FROM x ; SELECT x ( * ) AS should_be_3 FROM x ; COPY x TO 'x' ; \BEGIN TRANSACTION READ ONLY ; BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ ; COMMIT ; ABORT ; START TRANSACTION ; SAVEPOINT s ; RELEASE SAVEPOINT s ; ROLLBACK TO SAVEPOINT s ; SET synchronous_commit = ON ; SHOW synchronous_commit ; RESET synchronous_commit ; DISCARD TEMP ; DISCARD ALL ; DECLARE hsc CURSOR FOR SELECT * FROM x ; FETCH NEXT FROM hsc ; FETCH FIRST FROM hsc ; FETCH LAST FROM hsc ; FETCH 1 FROM hsc ; CLOSE hsc ; PREPARE hsp AS SELECT x ( * ) FROM x ; $PREPARE hsp_noexec ( INTEGER ) AS INSERT INTO x VALUES ( 1 ) ; EXECUTE hsp ; DEALLOCATE hsp ; LOCK x IN ACCESS SHARE MODE ; LOCK x IN ROW SHARE MODE ; LOCK x IN ROW EXCLUSIVE MODE ; UNLISTEN a ; UNLISTEN * ; CHECKPOINT ; SELECT x ( ) ; SELECT x ( x ( ) ) ; _CREATE AGGREGATE x ( sfunc = int4_avg_accum , basetype = int4 , stype = int8 , finalfunc = int8_avg , initcond1 = 'x' ) ; COMMENT ON AGGREGATE x ( int4 ) IS 'x' ; COMMENT ON AGGREGATE x ( int4 ) IS NULL ; CREATE AGGREGATE x ( sfunc1 = int4pl , basetype = int4 , stype1 = int4 , initcond1 = 'x' ) ; CREATE AGGREGATE x ( sfunc = int8inc , basetype = 'x' , stype = int8 , initcond = 'x' ) ; CREATE AGGREGATE x ( any" ) ( sfunc = int8inc_any , stype = int8 , initcond = 'x' ) ; COMMENT ON AGGREGATE x ( * ) IS 'x' ; COMMENT ON AGGREGATE x ( any" ) IS 'x' ; CREATE AGGREGATE x ( int8 , int8 ) ( sfunc = sum3 , stype = int8 , initcond = 'x' ) ; CREATE TYPE aggtype AS ( a INTEGER , b INTEGER , c TEXT ) ; CREATE AGGREGATE x ( INTEGER , INTEGER , TEXT ) ( sfunc = aggf_trans , stype = aggtype [ ] , initcond = 'x' ) ; CREATE AGGREGATE x ( INTEGER , INTEGER , TEXT ) ( sfunc = aggfns_trans , stype = aggtype [ ] , sspace = 1 , initcond = 'x' ) ; CREATE AGGREGATE x ( VARIADIC items anyarray ) ( stype = anyelement , sfunc = least_accum ) ; ALTER AGGREGATE x ( float8 ORDER BY anyelement ) RENAME TO test_percentile_disc ; ALTER AGGREGATE x ( VARIADIC any" ORDER BY VARIADIC any" ) RENAME TO test_rank ; DROP AGGREGATE x ( NUMERIC ) ; DROP FUNCTION x ( int8 , int8 , int8 , int8 ) ; $$$$CREATE TABLE x ( x INTEGER PRIMARY KEY ) ; INSERT INTO x VALUES ( 1 ) ; @SELECT x 'x' ? 'x' ; @@@@@@@@@@@@@@@@@@@SELECT x ( 'x' , 'x' ) ; SELECT x ( 'x' , 'x' , silent => TRUE ) ; @@@@@@@@@@@@@@@@SELECT x ( 'x' , 'x' , silent => FALSE ) ; SELECT * FROM x ( 'x' , 'x' ) ; @@@@@@@@@@@@@SELECT x , x , x ( 'x' , 'x' , x ( 'x' , x , 'x' , x ) ) AS x && y" FROM ( VALUES ( x 'x' ) , ( 'x' ) , ( 'x' ) ) x ( x ) , ( VALUES ( x 'x' ) , ( 'x' ) , ( 'x' ) ) y ( y ) ; SELECT x , x , x ( 'x' , 'x' , x ( 'x' , x , 'x' , x ) ) AS x || y" FROM ( VALUES ( x 'x' ) , ( 'x' ) , ( 'x' ) ) x ( x ) , ( VALUES ( x 'x' ) , ( 'x' ) , ( 'x' ) ) y ( y ) ; @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@SET TIME ZONE 'x' ; SET TIME ZONE DEFAULT ; SELECT x ( 'x' , 'x' , vars => 'x' ) ; @@@@@@CREATE TABLE x ( x TEXT ) ; SELECT 'x' AS two , * FROM x ; SELECT x ( 1 ) ; SELECT 'x' || 1 + 1 ; SELECT 1 || 4.000000 ; SELECT x ( 1 , 1 , 1 , 'x' , TRUE , FALSE , x ( 'x' , 'x' ) ) ; SELECT x ( 'x' , 1 , 1 , 1 , 'x' , TRUE , FALSE , x ( 'x' , 'x' ) ) ; SELECT x ( 'x' , 1 , 1 , NULL , 1 ) ; SELECT x ( NULL , 1 , 1 , NULL , 1 ) IS NULL ; SELECT x ( x 'x' ) ; SELECT x ( VARIADIC ARRAY [ 1 , 1 , 1 ] ) ; SELECT x ( 'x' , VARIADIC ARRAY [ 1 , 1 , 1 ] ) ; SELECT x ( 'x' , VARIADIC 1 ) ; SELECT x ( 'x' , 1 ) ; SELECT x ( 'x' , 'x' , 1 , 'x' ) ; SELECT x ( 'x' , 'x' , NULL , 'x' ) ; SELECT x ( 'x' , 'x' , 1 , NULL ) ; SELECT x ( 'x' , NULL , 1 , 'x' ) ; SELECT x ( 'x' , 1 , 1 , 1 ) ; SELECT x ( 'x' , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ) ; SELECT x ( 'x' , VARIADIC ARRAY [ 'x' , 'x' ] ) ; SELECT x ( 'x' , VARIADIC ARRAY [ 1 , 1 ] ) ; SELECT x ( 'x' , VARIADIC ARRAY [ TRUE , FALSE ] ) ; SELECT x ( x ( 'x' , 'x' ) , VARIADIC x ( x ) ) FROM x ( 1 , 1 ) g ( i ) ; SELECT x ( 'x' , NULL ) ; SELECT x ( 'x' , 1 , 'x' ) ; SELECT x ( 'x' , 1 , NULL ) ; SELECT x ( 'x' , NULL , 'x' ) ; CREATE TYPE shell ; CREATE TYPE int42 ; CREATE TYPE text_w_default ; CREATE FUNCTION x ( cstring ) RETURNS int42 AS 'x' LANGUAGE internal STRICT IMMUTABLE ; CREATE FUNCTION x ( int42 ) RETURNS cstring AS 'x' LANGUAGE internal STRICT IMMUTABLE ; CREATE FUNCTION x ( cstring ) RETURNS text_w_default AS 'x' LANGUAGE internal STRICT IMMUTABLE ; CREATE FUNCTION x ( text_w_default ) RETURNS cstring AS 'x' LANGUAGE internal STRICT IMMUTABLE ; CREATE TABLE x ( x text_w_default , x int42 ) ; INSERT INTO x DEFAULT VALUES ; CREATE TYPE case_int42 ( Internallength" = 1 , Input" = int42_in , Output" = int42_out , Alignment" = int4 , Default" = 1 , Passedbyvalue" ) ; CREATE TYPE default_test_row AS ( f1 text_w_default , f2 int42 ) ; SELECT * FROM x ( ) ; COMMENT ON TYPE bad IS 'x' ; COMMENT ON TYPE default_test_row IS 'x' ; COMMENT ON TYPE default_test_row IS NULL ; COMMENT ON COLUMN default_test_row . nope IS 'x' ; COMMENT ON COLUMN default_test_row . f1 IS 'x' ; COMMENT ON COLUMN default_test_row . f1 IS NULL ; CREATE FUNCTION x ( cstring ) RETURNS opaque AS 'x' LANGUAGE internal IMMUTABLE STRICT ; CREATE FUNCTION x ( opaque ) RETURNS opaque AS 'x' LANGUAGE internal IMMUTABLE STRICT ; INSERT INTO x VALUES ( 'x' ) , ( 'x' ) ; TABLE x ; CREATE DOMAIN domaindroptest int4 ; COMMENT ON DOMAIN domaindroptest IS 'x' ; CREATE DOMAIN dependenttypetest domaindroptest ; DROP DOMAIN domaindroptest ; DROP DOMAIN domaindroptest CASCADE ; CREATE DOMAIN domainvarchar VARCHAR ( 1 ) ; CREATE DOMAIN domainnumeric NUMERIC ( 1 , 1 ) ; CREATE DOMAIN domainint4 int4 ; CREATE DOMAIN domaintext TEXT ; SELECT CAST ( 'x' AS domainvarchar ) ; CREATE TABLE x ( x domainint4 , x domaintext , x domainvarchar , x domainnumeric ) ; DROP DOMAIN domainvarchar RESTRICT ; DROP DOMAIN domainnumeric RESTRICT ; DROP DOMAIN domainint4 RESTRICT ; DROP DOMAIN domaintext ; CREATE DOMAIN domainint4arr int4 [ 1 ] ; CREATE DOMAIN domainchar4arr VARCHAR ( 1 ) [ 1 ] [ 1 ] ; CREATE TABLE x ( x domainint4arr , x domainchar4arr ) ; INSERT INTO x VALUES ( NULL , 'x' ) ; INSERT INTO x ( x [ 1 ] , x [ 1 ] ) VALUES ( 1 , 1 ) ; SELECT x [ 1 ] , x [ 1 : 1 ] FROM x ; COPY x FROM STDIN ; {UPDATE x SET x [ 1 ] = x [ 1 ] + 1 , x [ 1 ] = x [ 1 ] - 1 WHERE x IS NULL ; SELECT * FROM x WHERE x IS NULL ; DROP DOMAIN domainint4arr RESTRICT ; DROP DOMAIN domainchar4arr RESTRICT ; CREATE DOMAIN dia AS INT [ ] ; CREATE TYPE comptype AS ( r float8 , i float8 ) ; CREATE DOMAIN dcomptype AS comptype ; CREATE TABLE x ( x dcomptype UNIQUE ) ; SELECT ( x ) . r , ( x ) . i , ( x ) . * FROM x ; UPDATE x SET x . r = ( x ) . r + 1 WHERE ( x ) . i > 1 ; INSERT INTO x ( x . r , x . i ) VALUES ( 1 , 1 ) ; CREATE RULE silly AS ON DELETE TO x DO INSTEAD UPDATE x SET x . r = ( x ) . r - 1 , x . i = ( x ) . i + 1 WHERE ( x ) . i > 1 ; DROP TYPE comptype CASCADE ; COMMENT ON CONSTRAINT c1 ON DOMAIN dcomptype IS 'x' ; CREATE DOMAIN dcomptypea AS comptype [ ] ; CREATE TABLE x ( x dcomptypea UNIQUE ) ; INSERT INTO x ( x [ 1 ] . r ) VALUES ( 1 ) ; SELECT x [ 1 ] , x [ 1 ] . x , x [ 1 ] . x FROM x ; UPDATE x SET x [ 1 ] = ROW ( x [ 1 ] . x , x [ 1 ] . x ) ; UPDATE x SET x [ 1 ] . r = x [ 1 ] . x + 1 WHERE x [ 1 ] . x > 1 ; INSERT INTO x ( x [ 1 ] . r , x [ 1 ] . i ) VALUES ( 1 , 1 ) ; CREATE RULE silly AS ON DELETE TO x DO INSTEAD UPDATE x SET x [ 1 ] . r = x [ 1 ] . x - 1 , x [ 1 ] . i = x [ 1 ] . x + 1 WHERE x [ 1 ] . x > 1 ; CREATE TABLE x ( x posint [ ] ) ; INSERT INTO x VALUES ( ARRAY [ 1 ] ) ; CREATE DOMAIN vc4 AS VARCHAR ( 1 ) ; CREATE TABLE x ( x vc4 [ ] ) ; DROP TYPE vc4 ; CREATE DOMAIN dposinta AS posint [ ] ; CREATE TABLE x ( x dposinta [ ] ) ; SELECT x ( x ) FROM x ; SELECT x ( x [ 1 ] ) FROM x ; SELECT x ( x [ 1 ] [ 1 ] ) FROM x ; SELECT x ( ( x [ 1 ] ) [ 1 ] ) FROM x ; UPDATE x SET x [ 1 ] = ARRAY [ 1 ] ; SELECT x , x [ 1 ] , ( x [ 1 ] ) [ 1 ] FROM x ; UPDATE x SET x [ 1 ] [ 1 ] = ARRAY [ 1 ] ; DROP DOMAIN posint CASCADE ; CREATE DOMAIN dnotnull VARCHAR ( 1 ) NOT NULL ; CREATE DOMAIN dnull VARCHAR ( 1 ) ; INSERT INTO x VALUES ( 'x' , 'x' , 'x' , 'x' , 'x' ) ; INSERT INTO x VALUES ( NULL , 'x' , 'x' , 'x' , 'x' ) ; INSERT INTO x VALUES ( 'x' , NULL , 'x' , 'x' , 'x' ) ; INSERT INTO x VALUES ( 'x' , 'x' , NULL , 'x' , 'x' ) ; SELECT CAST ( 'x' AS dnotnull ) ; DROP DOMAIN dnotnull RESTRICT ; DROP DOMAIN dnull RESTRICT ; DROP DOMAIN dcheck RESTRICT ; CREATE DOMAIN ddef1 int4 DEFAULT 1 ; CREATE DOMAIN ddef2 oid DEFAULT 'x' ; CREATE DOMAIN ddef3 TEXT DEFAULT 1 ; CREATE DOMAIN ddef4 int4 DEFAULT x ( 'x' ) ; CREATE DOMAIN ddef5 NUMERIC ( 1 , 1 ) NOT NULL DEFAULT 'x' ; CREATE TABLE x ( x ddef1 , x ddef2 , x ddef3 , x ddef4 PRIMARY KEY , x ddef1 NOT NULL DEFAULT NULL , x ddef2 DEFAULT 'x' , x ddef4 DEFAULT 1 , x ddef5 ) ; COPY x ( x ) FROM STDIN ; DROP TABLE x CASCADE ; CREATE DOMAIN dnotnulltest INTEGER ; CREATE TABLE x ( x dnotnulltest , x dnotnulltest ) ; ALTER DOMAIN dnotnulltest SET NOT NULL ; UPDATE x SET x = NULL ; DROP DOMAIN dnotnulltest CASCADE ; CREATE TABLE x ( x ddef1 ) ; ALTER DOMAIN ddef1 SET DEFAULT 'x' ; ALTER DOMAIN ddef1 DROP DEFAULT ; CREATE DOMAIN con AS INTEGER ; CREATE TABLE x ( x con ) ; ALTER DOMAIN con DROP CONSTRAINT t ; ALTER DOMAIN con DROP CONSTRAINT nonexistent ; ALTER DOMAIN con DROP CONSTRAINT IF EXISTS nonexistent ; CREATE DOMAIN things AS INT ; CREATE TABLE x ( x things ) ; INSERT INTO x ( x ) VALUES ( 1 ) ; ALTER DOMAIN things VALIDATE CONSTRAINT meow ; UPDATE x SET x = 1 ; CREATE TABLE x ( x INTEGER ) ; CREATE DOMAIN dom AS INTEGER ; CREATE VIEW x AS SELECT CAST ( x AS dom ) FROM x ; INSERT INTO x ( x ) VALUES ( NULL ) ; ALTER DOMAIN dom SET NOT NULL ; DROP DOMAIN ddef1 RESTRICT ; DROP DOMAIN ddef2 RESTRICT ; DROP DOMAIN ddef3 RESTRICT ; DROP DOMAIN ddef4 RESTRICT ; DROP DOMAIN ddef5 RESTRICT ; CREATE DOMAIN vchar4 VARCHAR ( 1 ) ; DROP DOMAIN vchar4 CASCADE ; CREATE DOMAIN str_domain AS TEXT NOT NULL ; CREATE TABLE x ( x INT , x INT ) ; ALTER TABLE x ADD COLUMN x str_domain ; ALTER TABLE x ADD COLUMN x str_domain2 ; $EXECUTE s1 ( 1 ) ; $$$$$$CREATE TYPE ddtest1 AS ( f1 posint ) ; CREATE TABLE x ( x ddtest1 ) ; INSERT INTO x VALUES ( ROW ( 1 ) ) ; CREATE TABLE x ( x ddtest1 [ ] ) ; CREATE DOMAIN ddtest1d AS ddtest1 ; CREATE TABLE x ( x ddtest1d ) ; DROP DOMAIN ddtest1d ; CREATE DOMAIN ddtest1d AS ddtest1 [ ] ; CREATE TYPE rposint AS RANGE ( subtype = posint ) ; CREATE TABLE x ( x rposint ) ; DROP TYPE rposint ; CREATE TABLE x ( x posint2 ) ; DROP TYPE ddtest1 ; $$$$SELECT x ( 121.000000 ) ; SELECT x ( 1.234560 ) ; CREATE DOMAIN mynums AS NUMERIC ( 1 , 1 ) [ 1 ] ; $$$$CREATE DOMAIN mynums2 AS mynums ; $$$$DROP FUNCTION x ( NUMERIC ) ; $$$$CREATE DOMAIN di AS INT ; $$$$$$$$DROP DOMAIN di ; CREATE TABLE x ( x inotnull ) ; INSERT INTO x VALUES ( NULL ) ; DROP DOMAIN inotnull ; DROP FUNCTION x ( anyelement , anyelement ) ; CREATE DOMAIN testdomain1 AS INT ; ALTER DOMAIN testdomain1 RENAME TO testdomain2 ; ALTER DOMAIN testdomain1 RENAME CONSTRAINT unsigned TO unsigned_foo ; ALTER DOMAIN testdomain1 DROP CONSTRAINT unsigned_foo ; DROP DOMAIN testdomain1 ; INSERT INTO x VALUES ( x ) ; $$$$$$SELECT x ( * ) > 1 FROM x ; CREATE TABLE x ( x float8 ) ; SELECT 'x' AS five , * FROM x ; SELECT 'x' AS one , x . * FROM x f WHERE x . x = 'x' ; SELECT 'x' AS three , x . * FROM x f WHERE 'x' > x . x ; SELECT 'x' AS three , x . * FROM x f WHERE x . x < 'x' ; SELECT 'x' AS four , x . * FROM x f WHERE 'x' >= x . x ; SELECT 'x' AS four , x . * FROM x f WHERE x . x <= 'x' ; SELECT 'x' AS three , x . x , x . x * 'x' AS x FROM x f WHERE x . x > 'x' ; SELECT 'x' AS three , x . x , x . x + 'x' AS x FROM x f WHERE x . x > 'x' ; SELECT 'x' AS three , x . x , x . x / 'x' AS x FROM x f WHERE x . x > 'x' ; SELECT 'x' AS three , x . x , x . x - 'x' AS x FROM x f WHERE x . x > 'x' ; SELECT 'x' AS one , x . x ^ 'x' AS square_f1 FROM x f WHERE x . x = 'x' ; @SELECT 'x' AS five , x . x , x . x AS abs_f1 FROM x f ; SELECT 'x' AS five , x . x , x ( x . x ) AS trunc_f1 FROM x f ; SELECT 'x' AS five , x . x , x ( x . x ) AS round_f1 FROM x f ; SELECT x ( x ) AS ceil_f1 FROM x f ; SELECT x ( x ) AS ceiling_f1 FROM x f ; SELECT x ( x ) AS floor_f1 FROM x f ; SELECT x ( x ) AS sign_f1 FROM x f ; SET extra_float_digits = 1 ; SELECT x ( x 'x' ) AS eight ; SELECT x ( x 'x' , x 'x' ) ; SELECT 'x' AS three , x . x , x ( x ( x . x ) ) AS exp_ln_f1 FROM x f WHERE x . x > 'x' ; UPDATE x SET x = x . x * 'x' WHERE x . x > 'x' ; SELECT 'x' AS bad , x . x * 'x' FROM x f ; SELECT 'x' AS bad , x . x ^ 'x' FROM x f ; SELECT 1 ^ 1 + 1 ^ 1 + 1 ^ 0.000000 + 1 ^ 0.500000 ; SELECT 'x' AS bad , x ( x . x ) FROM x f WHERE x . x = 'x' ; SELECT 'x' AS bad , x ( x . x ) FROM x f WHERE x . x < 'x' ; SELECT 'x' AS bad , x ( x . x ) FROM x f ; SELECT 'x' AS bad , x . x / 'x' FROM x f ; RESET extra_float_digits ; DELETE FROM x ; CREATE TYPE xfloat8 ; CREATE FUNCTION x ( cstring ) RETURNS xfloat8 IMMUTABLE STRICT LANGUAGE internal AS 'x' ; CREATE FUNCTION x ( xfloat8 ) RETURNS cstring IMMUTABLE STRICT LANGUAGE internal AS 'x' ; CREATE CAST ( xfloat8 AS float8 ) WITHOUT FUNCTION ; CREATE CAST ( float8 AS xfloat8 ) WITHOUT FUNCTION ; CREATE CAST ( xfloat8 AS BIGINT ) WITHOUT FUNCTION ; CREATE CAST ( BIGINT AS xfloat8 ) WITHOUT FUNCTION ; DROP TYPE xfloat8 CASCADE ; INSERT INTO x VALUES ( 1 , 'x' , 1 ) , ( 1 , 'x' , 1 ) , ( 1 , 'x' , 1 ) , ( 1 , 'x' , 1 ) , ( 1 , 'x' , 1 ) ; REFRESH MATERIALIZED VIEW x ; CREATE MATERIALIZED VIEW x AS SELECT x ( x ) AS grandtot FROM x ; CREATE UNIQUE INDEX x ON x ( ( x > 1 ) ) ; CREATE UNIQUE INDEX x ON x ( x ) WHERE x < 1 ; CREATE VIEW x AS SELECT x ( x ) AS grandtot FROM x ; EXPLAIN ( costs off ) CREATE MATERIALIZED VIEW x AS SELECT * FROM x ; CREATE MATERIALIZED VIEW x AS SELECT * FROM x ; ALTER MATERIALIZED VIEW x SET SCHEMA mvtest_mvschema ; SET search_path = mvtest_mvschema , public ; INSERT INTO x VALUES ( 1 , 'x' , 1 ) ; REFRESH MATERIALIZED VIEW CONCURRENTLY x ; RESET search_path ; EXPLAIN ( costs off ) SELECT * FROM x ; DROP MATERIALIZED VIEW IF EXISTS x ; REFRESH MATERIALIZED VIEW CONCURRENTLY x WITH NO DATA ; SELECT * FROM x FOR SHARE ; CREATE VIEW x AS SELECT 1 moo ; CREATE VIEW x AS SELECT x , 1 * x FROM x UNION ALL SELECT x , 1 * x FROM x ; CREATE MATERIALIZED VIEW x AS SELECT x , 1 * x FROM x UNION ALL SELECT x , 1 * x FROM x ; CREATE MATERIALIZED VIEW x AS SELECT * FROM x WHERE x = 1 ; DROP VIEW x CASCADE ; CREATE TABLE x ( x , x ) AS VALUES ( 1 , 1 ) ; CREATE UNIQUE INDEX ON x ( x ) ; INSERT INTO x SELECT * FROM x ; CREATE TABLE x ( x , x , x ) AS VALUES ( 1 , 1 , 1 ) ; INSERT INTO x VALUES ( 1 , 1 , 1 ) ; CREATE MATERIALIZED VIEW x AS SELECT 1 AS col1 WITH NO DATA ; CREATE MATERIALIZED VIEW x AS SELECT * FROM x WHERE x = ( SELECT LEAST ( x ) FROM x ) WITH NO DATA ; DROP MATERIALIZED VIEW x CASCADE ; CREATE TABLE x ( x serial PRIMARY KEY , x box ) ; INSERT INTO x ( x ) VALUES ( 'x' ) , ( 'x' ) , ( 'x' ) ; CREATE UNIQUE INDEX x ON x ( x ) ; UPDATE x SET x = 'x' WHERE x = 1 ; SELECT * FROM x ORDER BY x ; UPDATE x SET x = 1 WHERE x = 1 ; DROP MATERIALIZED VIEW x ; CREATE TABLE x AS SELECT x ( 1 , 1 ) AS a ; CREATE MATERIALIZED VIEW x AS SELECT x FROM x WHERE x <= 1 ; DELETE FROM x WHERE EXISTS ( SELECT * FROM x WHERE x . x = x . x ) ; SET ROLE regress_user_mvtest ; CREATE MATERIALIZED VIEW IF NOT EXISTS x AS SELECT * FROM x ; DROP OWNED BY x CASCADE ; $$CREATE MATERIALIZED VIEW x AS SELECT 1 AS x WITH NO DATA ; $$SELECT x FROM x TABLESAMPLE x ( 1 ) REPEATABLE ( 1 ) ; SELECT x FROM x TABLESAMPLE x ( 5.500000 ) REPEATABLE ( 1 ) ; FETCH FIRST FROM tablesample_cur ; FETCH NEXT FROM tablesample_cur ; CLOSE tablesample_cur ; EXPLAIN ( COSTS OFF ) SELECT * FROM x ; EXPLAIN ( costs off ) SELECT x ( * ) FROM x TABLESAMPLE x ( 1 ) ; SELECT x ( * ) FROM x TABLESAMPLE x ( 1 ) ; SELECT x ( * ) FROM x ; SELECT * FROM ( VALUES ( 1 ) , ( 1 ) ) v ( pct ) , LATERAL ( SELECT x ( * ) FROM x TABLESAMPLE x ( x ) ) ss ; EXPLAIN ( costs off ) SELECT x , x ( x ) FROM ( VALUES ( 1 ) , ( 1 ) ) v ( pct ) , LATERAL ( SELECT * FROM x TABLESAMPLE x ( x ) ) ss GROUP BY x ; SELECT x , x ( x ) FROM ( VALUES ( 1 ) , ( 1 ) ) v ( pct ) , LATERAL ( SELECT * FROM x TABLESAMPLE x ( x ) ) ss GROUP BY x ; SELECT x FROM x TABLESAMPLE x ( 1 ) ; WITH query_select AS ( SELECT * FROM x ) SELECT * FROM x TABLESAMPLE x ( 5.500000 ) REPEATABLE ( 1 ) ; CREATE TABLE x ( x INT ) PARTITION BY list ( a ) ; CREATE TABLE x PARTITION OF x FOR VALUES IN ( 1 ) ; EXPLAIN ( costs off ) SELECT * FROM x TABLESAMPLE x ( 1 ) ; DROP TABLE x , x , x ; $$$$SELECT * INTO TABLE x FROM x ; SELECT * INTO TABLE x FROM x WHERE x < 1 ; INSERT INTO x VALUES ( 'x' , 'x' , 'x' ) , ( 'x' , 'x' , 'x' ) ; UPDATE x SET x = 'x' ; CREATE TABLE x ( x int4 , x float4 , x polygon ) ; SET DateStyle = 'x' ; SELECT TIMESTAMP WITH TIME ZONE 'x' ; SET datestyle TO dmy ; RESET datestyle ; SELECT TIME WITHOUT TIME ZONE 'x' ; SELECT TIME WITH TIME ZONE 'x' ; SELECT x 'x' AS Confucius' Birthday" ; SELECT x 'x' AS Julian Epoch" ; SELECT x 'x' + TIME 'x' AS Date + Time" ; SELECT x 'x' + TIME WITH TIME ZONE 'x' AS Date + Time PST" ; SELECT x 'x' + TIME WITH TIME ZONE 'x' AS Date + Time UTC" ; SELECT x 'x' + INTERVAL 'x' AS Add Two Years" ; SELECT x 'x' - INTERVAL 'x' AS Subtract Two Years" ; SELECT x 'x' - TIME 'x' AS Subtract Time" ; SELECT x 'x' - TIME WITH TIME ZONE 'x' AS Subtract Time UTC" ; SELECT TIMESTAMP WITHOUT TIME ZONE 'x' - INTERVAL 'x' AS Feb 29" ; SELECT TIMESTAMP WITHOUT TIME ZONE 'x' - INTERVAL 'x' AS Feb 28" ; SELECT TIMESTAMP WITHOUT TIME ZONE 'x' + INTERVAL 'x' AS Dec 31" ; SELECT TIMESTAMP WITHOUT TIME ZONE 'x' + INTERVAL 'x' AS Feb 23, 285506" ; SELECT TIMESTAMP WITHOUT TIME ZONE 'x' + INTERVAL 'x' AS Jan 20, 288244" ; SELECT TIMESTAMP WITHOUT TIME ZONE 'x' + INTERVAL 'x' AS Dec 31, 294276" ; SELECT TIMESTAMP WITHOUT TIME ZONE 'x' - TIMESTAMP WITHOUT TIME ZONE 'x' AS 106751991 Days" ; SELECT ( TIMESTAMP WITHOUT TIME ZONE 'x' = ( TIMESTAMP WITHOUT TIME ZONE 'x' + INTERVAL 'x' ) ) AS True" ; SELECT ( TIMESTAMP WITHOUT TIME ZONE 'x' = ( TIMESTAMP WITHOUT TIME ZONE 'x' - INTERVAL 'x' ) ) AS True" ; SELECT ( TIMESTAMP WITHOUT TIME ZONE 'x' > 'x' ) AS True" ; SELECT x 'x' + TIME 'x' AS Jan_01_1994_11am" ; SELECT x 'x' + TIME 'x' AS Jan_01_1994_10am" ; SELECT x 'x' + x 'x' AS Jan_01_1994_8am" ; SELECT x ( x 'x' , TIME WITH TIME ZONE 'x' ) AS Jan_01_1994_8am" ; SELECT 'x' AS 64" , x + INTERVAL 'x' AS one_year FROM x ; SELECT 'x' AS 64" , x - INTERVAL 'x' AS one_year FROM x ; SELECT TIMESTAMP WITH TIME ZONE 'x' - INTERVAL 'x' AS Feb 29" ; SELECT TIMESTAMP WITH TIME ZONE 'x' - INTERVAL 'x' AS Feb 28" ; SELECT TIMESTAMP WITH TIME ZONE 'x' + INTERVAL 'x' AS Dec 31" ; SELECT ( TIMESTAMP WITH TIME ZONE 'x' = ( TIMESTAMP WITH TIME ZONE 'x' + INTERVAL 'x' ) ) AS True" ; SELECT ( TIMESTAMP WITH TIME ZONE 'x' = ( TIMESTAMP WITH TIME ZONE 'x' - INTERVAL 'x' ) ) AS True" ; SELECT ( TIMESTAMP WITH TIME ZONE 'x' > 'x' ) AS True" ; SELECT TIMESTAMP WITH TIME ZONE 'x' + INTERVAL 'x' AS Apr 3, 12:00" ; SELECT TIMESTAMP WITH TIME ZONE 'x' + INTERVAL 'x' AS Apr 3, 13:00" ; SELECT TIMESTAMP WITH TIME ZONE 'x' - INTERVAL 'x' AS Apr 2, 12:00" ; SELECT TIMESTAMP WITH TIME ZONE 'x' - INTERVAL 'x' AS Apr 2, 11:00" ; RESET TIME ZONE ; SELECT x ( x 'x' , TIME 'x' ) AS Jan_01_1994_10am" ; SELECT x ( x 'x' , TIME 'x' ) AS Jan_01_1994_9am" ; SELECT x ( x 'x' , TIME WITH TIME ZONE 'x' ) AS Jan_01_1994_11am" ; SELECT x ( x 'x' , TIME WITH TIME ZONE 'x' ) AS Jan_01_1994_10am" ; SELECT CAST ( TIME 'x' AS INTERVAL ) AS +01:02" ; SELECT CAST ( INTERVAL 'x' AS TIME ) AS 02:03:00" ; SELECT TIME 'x' + INTERVAL 'x' AS 03:31:00" ; SELECT TIME 'x' - INTERVAL 'x' AS 23:29:00" ; SELECT TIME 'x' + INTERVAL 'x' AS 14:31:00" ; SELECT TIME 'x' + INTERVAL 'x' AS 07:31:00" ; SELECT CAST ( TIME WITH TIME ZONE 'x' AS INTERVAL ) AS +00:01" ; SELECT CAST ( INTERVAL 'x' AS TIME WITH TIME ZONE ) AS 02:03:00-08" ; SELECT TIME WITH TIME ZONE 'x' - INTERVAL 'x' AS 23:29:00-08" ; SELECT TIME WITH TIME ZONE 'x' + INTERVAL 'x' AS 14:31:00-08" ; SELECT CAST ( CAST ( x 'x' + TIME WITH TIME ZONE 'x' + INTERVAL 'x' AS TIME WITH TIME ZONE ) AS TIME ) AS 07:31:00" ; SELECT CAST ( CAST ( x 'x' + TIME WITH TIME ZONE 'x' + INTERVAL 'x' AS TIMESTAMP WITHOUT TIME ZONE ) AS TIME ) AS 07:31:00" ; SELECT x . x AS t , x . x AS i , x . x + x . x AS add" , x . x - x . x AS subtract" FROM x t , x i WHERE x . x BETWEEN 'x' AND 'x' AND x . x BETWEEN 'x' AND 'x' ORDER BY 1 , 1 ; SELECT x . x AS t , x . x AS i , x . x + x . x AS add" , x . x - x . x AS subtract" FROM x t , x i ORDER BY 1 , 1 ; SELECT ( TIMESTAMP WITH TIME ZONE 'x' , TIMESTAMP WITH TIME ZONE 'x' ) OVERLAPS ( TIMESTAMP WITH TIME ZONE 'x' , TIMESTAMP WITH TIME ZONE 'x' ) AS True" ; SELECT ( TIMESTAMP WITH TIME ZONE 'x' , TIMESTAMP WITH TIME ZONE 'x' ) OVERLAPS ( TIMESTAMP WITH TIME ZONE 'x' , TIMESTAMP WITH TIME ZONE 'x' ) AS False" ; SELECT ( TIMESTAMP WITH TIME ZONE 'x' , TIMESTAMP WITH TIME ZONE 'x' ) OVERLAPS ( TIMESTAMP WITH TIME ZONE 'x' , INTERVAL 'x' ) AS True" ; SELECT ( TIMESTAMP WITH TIME ZONE 'x' , INTERVAL 'x' ) OVERLAPS ( TIMESTAMP WITH TIME ZONE 'x' , TIMESTAMP WITH TIME ZONE 'x' ) AS False" ; SELECT ( TIMESTAMP WITH TIME ZONE 'x' , INTERVAL 'x' ) OVERLAPS ( TIMESTAMP WITH TIME ZONE 'x' , INTERVAL 'x' ) AS True" ; SELECT ( TIMESTAMP WITH TIME ZONE 'x' , INTERVAL 'x' ) OVERLAPS ( TIMESTAMP WITH TIME ZONE 'x' , INTERVAL 'x' ) AS False" ; SELECT ( TIMESTAMP WITHOUT TIME ZONE 'x' , TIMESTAMP WITHOUT TIME ZONE 'x' ) OVERLAPS ( TIMESTAMP WITHOUT TIME ZONE 'x' , TIMESTAMP WITHOUT TIME ZONE 'x' ) AS True" ; SELECT ( TIMESTAMP WITHOUT TIME ZONE 'x' , TIMESTAMP WITHOUT TIME ZONE 'x' ) OVERLAPS ( TIMESTAMP WITHOUT TIME ZONE 'x' , TIMESTAMP WITHOUT TIME ZONE 'x' ) AS False" ; SELECT ( TIMESTAMP WITHOUT TIME ZONE 'x' , TIMESTAMP WITHOUT TIME ZONE 'x' ) OVERLAPS ( TIMESTAMP WITHOUT TIME ZONE 'x' , INTERVAL 'x' ) AS True" ; SELECT ( TIMESTAMP WITHOUT TIME ZONE 'x' , INTERVAL 'x' ) OVERLAPS ( TIMESTAMP WITHOUT TIME ZONE 'x' , TIMESTAMP WITHOUT TIME ZONE 'x' ) AS False" ; SELECT ( TIMESTAMP WITHOUT TIME ZONE 'x' , INTERVAL 'x' ) OVERLAPS ( TIMESTAMP WITHOUT TIME ZONE 'x' , INTERVAL 'x' ) AS True" ; SELECT ( TIMESTAMP WITHOUT TIME ZONE 'x' , INTERVAL 'x' ) OVERLAPS ( TIMESTAMP WITHOUT TIME ZONE 'x' , INTERVAL 'x' ) AS False" ; SELECT ( TIME 'x' , TIME 'x' ) OVERLAPS ( TIME 'x' , TIME 'x' ) AS True" ; SELECT ( TIME 'x' , INTERVAL 'x' ) OVERLAPS ( TIME 'x' , INTERVAL 'x' ) AS True" ; SELECT ( TIME 'x' , INTERVAL 'x' ) OVERLAPS ( TIME 'x' , INTERVAL 'x' ) AS False" ; CREATE TABLE x ( x TIMESTAMP WITH TIME ZONE ) ; INSERT INTO x ( x ) SELECT x FROM x WHERE x BETWEEN 'x' AND 'x' OR x BETWEEN 'x' AND 'x' ; SELECT 'x' AS 16" , x AS timestamp" FROM x ORDER BY x ; SELECT 'x' AS 160" , x . x AS timestamp" , x . x AS interval" , x . x + x . x AS plus FROM x d , x t ORDER BY x , x , x ; SELECT 'x' AS 160" , x . x AS timestamp" , x . x AS interval" , x . x - x . x AS minus FROM x d , x t WHERE x ( x . x ) ORDER BY x , x , x ; SELECT 'x' AS 16" , x . x AS timestamp" , TIMESTAMP WITH TIME ZONE 'x' AS gpstime_zero , x . x - TIMESTAMP WITH TIME ZONE 'x' AS difference FROM x d ORDER BY x ; SELECT 'x' AS 226" , x . x AS timestamp1 , x . x AS timestamp2 , x . x - x . x AS difference FROM x d1 , x d2 ORDER BY x , x , x ; SET DateStyle TO 'x' ; SHOW DateStyle ; SELECT 'x' AS 64" , x AS us_postgres FROM x ; SELECT 'x' AS 64" , x AS us_iso FROM x ; SELECT 'x' AS 64" , x AS us_sql FROM x ; SELECT x ( * ) AS one FROM x WHERE x = 'x' ; SELECT 'x' AS 65" , x AS european_postgres FROM x ; SELECT 'x' AS 65" , x AS european_iso FROM x ; SELECT 'x' AS 65" , x AS european_sql FROM x ; RESET DateStyle ; SELECT x ( 'x' , x 'x' ) ; SELECT x , x ( 'x' , 'x' || x ) FROM x ( 1 , 1 ) i ; SHOW TIME ZONE ; CREATE TEMP TABLE x ( x INT ) ; CREATE TEMP TABLE x ( x FLOAT ) ; INSERT INTO x VALUES ( 2.100000 ) ; \CREATE TEMP TABLE x ( x INT ) ON COMMIT DELETE ROWS ; CREATE INDEX ON x ( x ( 'x' ) ) ; CREATE TEMP TABLE x ( x ) ON COMMIT DELETE ROWS AS SELECT 1 ; CREATE TEMP TABLE x ( x INT ) ON COMMIT DROP ; CREATE TEMP TABLE x ( x ) ON COMMIT DROP AS SELECT 1 ; CREATE TABLE x ( x INT ) ON COMMIT DELETE ROWS ; CREATE TABLE x ( x ) ON COMMIT DELETE ROWS AS SELECT 1 ; CREATE TEMP TABLE x ( x INT PRIMARY KEY ) ; CREATE TEMP TABLE x ( x INT REFERENCES x ) ON COMMIT DELETE ROWS ; CREATE TEMP TABLE x ( x INT PRIMARY KEY ) ON COMMIT DELETE ROWS ; CREATE TEMP TABLE x ( x INT REFERENCES x ) ; CREATE TABLE x . whereami ( x TEXT ) ; INSERT INTO x . whereami VALUES ( 'x' ) ; $$$$SET search_path = pg_temp , public ; SET search_path = public , pg_temp ; SELECT pg_temp . whoami ( ) ; DROP TABLE x . whereami ; SELECT pg_temp . nonempty ( 'x' ) ; CREATE TEMP TABLE x ( x INT ) PARTITION BY list ( a ) ON COMMIT DELETE ROWS ; CREATE TEMP TABLE x PARTITION OF x FOR VALUES IN ( 1 ) ON COMMIT DELETE ROWS ; CREATE TEMP TABLE x ( x INT ) PARTITION BY list ( a ) ON COMMIT DROP ; CREATE TEMP TABLE x PARTITION OF x FOR VALUES IN ( 1 ) ON COMMIT DROP ; INSERT INTO x VALUES ( 1 ) , ( 1 ) ; ~SELECT x FROM x WHERE x 'x' ; CREATE TEMP TABLE x PARTITION OF x FOR VALUES IN ( 1 ) ON COMMIT PRESERVE ROWS ; ~SELECT x FROM x WHERE x 'x' ORDER BY x ; CREATE TEMP TABLE x ( ) INHERITS ( x ) ON COMMIT DELETE ROWS ; ~CREATE TEMP TABLE x ( ) INHERITS ( x ) ON COMMIT DROP ; ~$$PREPARE TRANSACTION 'x' ; $$DROP FUNCTION pg_temp . twophase_func ( ) ; @@CREATE TYPE pg_temp . twophase_type AS ( a INT ) ; CREATE VIEW x . twophase_view AS SELECT 1 ; CREATE SEQUENCE x . twophase_seq ; SELECT x FROM x ; LOCK x IN ACCESS EXCLUSIVE MODE ; \CREATE TABLE x ( x INT DEFAULT 1 , x INT , x TEXT ) ; CREATE TABLE x ( x INT PRIMARY KEY , x TEXT ) ; INSERT INTO x VALUES ( 1 , 1 , 'x' ) ; INSERT INTO x ( x , x ) VALUES ( 1 , 1 ) ; UPDATE x SET x = DEFAULT , x = DEFAULT ; UPDATE x AS x SET x = 1 WHERE x . x = 1 ; UPDATE x x SET x = x . x + 1 WHERE x . x = 1 ; UPDATE x SET x = x . x FROM ( VALUES ( 1 , 1 ) ) AS v ( i , j ) WHERE x . x = x . x ; UPDATE x SET x = x . * FROM ( VALUES ( 1 , 1 ) ) AS v ( i , j ) WHERE x . x = x . x ; INSERT INTO x SELECT x , x + 1 , x FROM x ; UPDATE x SET ( x , x , x ) = ( 'x' , x + 1 , DEFAULT ) WHERE x = 'x' ; UPDATE x SET ( x , x ) = ( 'x' , x + x ) , x = x + 1 WHERE x = 1 ; UPDATE x SET ( x , x ) = ( SELECT x , x FROM x WHERE x = 1 AND x = 'x' ) WHERE x = 1 AND x = 1 ; UPDATE x x SET ( x , x ) = ( SELECT x + 1 , x FROM x i WHERE x . x = x . x AND x . x = x . x AND x . x IS NOT DISTINCT FROM x . x ) ; UPDATE x SET ( x , x ) = ( SELECT x + 1 , x FROM x ) ; UPDATE x SET ( x , x ) = ( SELECT x + 1 , x FROM x WHERE x = 1 ) WHERE x = 1 ; UPDATE x SET ( x , x ) = ROW ( x . * ) FROM ( VALUES ( 1 , 1 ) ) AS v ( i , j ) WHERE x . x = x . x ; UPDATE x SET ( x , x ) = ( x . * ) FROM ( VALUES ( 1 , 1 ) ) AS v ( i , j ) WHERE x . x = x . x ; UPDATE x AS x SET x = x . x + 1 WHERE x . x = 1 ; UPDATE x SET x = x ( 'x' , 1 ) WHERE x = 'x' ; SELECT x , x , x ( x ) FROM x ; UPDATE x x SET ( x , x ) = ( SELECT x , x FROM x s WHERE x . x = x . x ) WHERE CURRENT_USER = SESSION_USER ; INSERT INTO x VALUES ( 1 , 'x' ) ; WITH aaa AS ( SELECT 1 AS a , 'x' AS b ) INSERT INTO x VALUES ( 1 , 'x' ) ON CONFLICT ( x ) DO UPDATE SET ( x , x ) = ( SELECT x , x FROM x ) RETURNING * ; INSERT INTO x VALUES ( 1 , 'x' ) ON CONFLICT ( x ) DO UPDATE SET ( x , x ) = ( SELECT x || 'x' , x FROM x i WHERE x . x = x . x ) RETURNING * ; CREATE TABLE x ( x VARCHAR , x NUMERIC , x TEXT , x BIGINT , x INT ) ; ALTER TABLE x ATTACH PARTITION x FOR VALUES FROM ( 'x' , 1 ) TO ( 'x' , 1 ) ; CREATE TABLE x PARTITION OF x FOR VALUES FROM ( 'x' , 1 ) TO ( 'x' , 1 ) ; UPDATE x SET x = x - 1 ; ALTER TABLE x DROP COLUMN x , DROP COLUMN x , DROP COLUMN x ; ALTER TABLE x ADD COLUMN x NUMERIC , ADD COLUMN x VARCHAR , ADD COLUMN x TEXT ; ALTER TABLE x DROP COLUMN x ; ALTER TABLE x ADD COLUMN x BIGINT ; CREATE TABLE x PARTITION OF x FOR VALUES FROM ( 1 ) TO ( 1 ) ; ALTER TABLE x ATTACH PARTITION x FOR VALUES FROM ( 1 ) TO ( 1 ) ; CREATE TABLE x ( x VARCHAR , x INT , x NUMERIC , x BIGINT , x TEXT ) ; \EXPLAIN ( costs off ) UPDATE x SET x = x - 1 WHERE x > 1 ; UPDATE x SET x = x - 1 , x = x WHERE x = 1 ; UPDATE x SET x = x - 1 WHERE x > 1 ; UPDATE x SET x = x ; UPDATE x SET x = x + 1 WHERE x = 1 ; UPDATE x SET x = x + 1 RETURNING x , x , x ; UPDATE x SET x = x - 1 WHERE x > 1 RETURNING * ; UPDATE x SET x = x - 1 WHERE x > 1 RETURNING x , x + x ; CREATE VIEW x AS SELECT * FROM x WHERE ( SELECT x > x FROM x ) WITH CHECK OPTION ; UPDATE x SET x = 'x' , x = 1 , x = 1 WHERE x = 1 ; UPDATE x SET x = 'x' , x = 1 WHERE x = 1 ; UPDATE x SET x = 1 WHERE x = 'x' AND x > 1 AND x > 1 RETURNING ( x ) , * ; $$CREATE TRIGGER x AFTER UPDATE ON x REFERENCING OLD TABLE AS old_table NEW TABLE AS new_table FOR EACH STATEMENT EXECUTE PROCEDURE x ( ) ; UPDATE x SET x = ( CASE WHEN x = 1 THEN 1 ELSE x + 1 END ) WHERE x = 'x' AND x > 1 AND x >= 1 ; CREATE TRIGGER x AFTER DELETE ON x REFERENCING OLD TABLE AS old_table FOR EACH STATEMENT EXECUTE PROCEDURE x ( ) ; CREATE TRIGGER x AFTER INSERT ON x REFERENCING NEW TABLE AS new_table FOR EACH STATEMENT EXECUTE PROCEDURE x ( ) ; UPDATE x SET x = x + 1 WHERE x = 'x' AND x > 1 AND x >= 1 ; DROP TRIGGER trans_deletetrig ON range_parted ; DROP TRIGGER trans_inserttrig ON range_parted ; $$CREATE TRIGGER x BEFORE UPDATE OR INSERT ON x FOR EACH ROW EXECUTE PROCEDURE x ( ) ; DROP TRIGGER trans_updatetrig ON range_parted ; DROP TRIGGER trig_c1_100 ON part_c_1_100 ; DROP TRIGGER trig_d1_15 ON part_d_1_15 ; DROP TRIGGER trig_d15_20 ON part_d_15_20 ; ALTER TABLE x ENABLE ROW LEVEL SECURITY ; GRANT ALL ON x , x TO x ; CREATE POLICY seeall ON x AS PERMISSIVE FOR SELECT USING ( TRUE ) ; CREATE POLICY policy_range_parted ON x FOR UPDATE USING ( TRUE ) WITH CHECK ( x % 1 = 1 ) ; SET SESSION AUTHORIZATION regress_range_parted_user ; UPDATE x SET x = 'x' , x = 1 WHERE x = 'x' AND x = 1 ; $$CREATE TRIGGER x BEFORE INSERT ON x FOR EACH ROW EXECUTE PROCEDURE x ( ) ; DROP TRIGGER trig_d_1_15 ON part_d_1_15 ; CREATE POLICY policy_range_parted_subplan ON x AS RESTRICTIVE FOR UPDATE USING ( TRUE ) WITH CHECK ( ( SELECT x . x <= x FROM x ) ) ; DROP POLICY policy_range_parted ON range_parted ; DROP POLICY policy_range_parted_subplan ON range_parted ; DROP POLICY policy_range_parted_wholerow ON range_parted ; REVOKE ALL ON x , x FROM x ; $$CREATE TRIGGER x AFTER DELETE ON x FOR EACH STATEMENT EXECUTE PROCEDURE x ( ) ; CREATE TRIGGER x AFTER UPDATE ON x FOR EACH STATEMENT EXECUTE PROCEDURE x ( ) ; CREATE TRIGGER x AFTER INSERT ON x FOR EACH STATEMENT EXECUTE PROCEDURE x ( ) ; DROP TRIGGER parent_delete_trig ON range_parted ; DROP TRIGGER parent_update_trig ON range_parted ; DROP TRIGGER parent_insert_trig ON range_parted ; DROP TRIGGER c1_delete_trig ON part_c_1_100 ; DROP TRIGGER c1_update_trig ON part_c_1_100 ; DROP TRIGGER c1_insert_trig ON part_c_1_100 ; DROP TRIGGER d1_delete_trig ON part_d_1_15 ; DROP TRIGGER d1_update_trig ON part_d_1_15 ; DROP TRIGGER d1_insert_trig ON part_d_1_15 ; DROP TRIGGER d15_delete_trig ON part_d_15_20 ; DROP TRIGGER d15_update_trig ON part_d_15_20 ; DROP TRIGGER d15_insert_trig ON part_d_15_20 ; CREATE TABLE x PARTITION OF x DEFAULT ; INSERT INTO x VALUES ( 'x' , 1 ) ; UPDATE x SET x = 'x' WHERE x = 'x' ; CREATE TABLE x ( x TEXT , x INT ) PARTITION BY list ( a ) ; CREATE TABLE x PARTITION OF x FOR VALUES IN ( 'x' , 'x' ) ; CREATE TABLE x ( x NUMERIC , x INT , x int8 ) PARTITION BY list ( a ) ; CREATE TABLE x PARTITION OF x FOR VALUES IN ( 1 ) PARTITION BY list ( b ) ; CREATE TABLE x ( x INT , x int8 , x NUMERIC ) ; ALTER TABLE x ATTACH PARTITION x FOR VALUES IN ( 1 ) ; CREATE TABLE x ( x NUMERIC , x INT , x int8 ) ; ALTER TABLE x ATTACH PARTITION x FOR VALUES IN ( 1 , 1 ) ; UPDATE x SET x = x + x WHERE x = 1 ; $$DROP TRIGGER parted_mod_b ON sub_part1 ; $$CREATE TRIGGER x BEFORE DELETE ON x FOR EACH ROW EXECUTE PROCEDURE x ( ) ; DROP TRIGGER trig_skip_delete ON sub_part2 ; INSERT INTO x VALUES ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) ; UPDATE x x SET x = 1 FROM x t2 WHERE x . x = x . x AND x = 1 ; $$CREATE TABLE x ( x INT , x INT ) PARTITION BY hash ( a custom_opclass , b custom_opclass ) ; CREATE TABLE x PARTITION OF x FOR VALUES WITH ( modulus 1 , remainder 1 ) ; UPDATE x SET x = 1 , x = 1 WHERE x = 1 ; UPDATE x SET x = x - 1 WHERE x = 1 ; DROP OPERATOR CLASS custom_opclass USING hash ; DROP FUNCTION x ( a int4 , seed int8 ) ; EXPLAIN ( costs off ) INSERT INTO x VALUES ( 1 , 'x' ) ON CONFLICT ( x ) DO NOTHING ; CREATE UNIQUE INDEX x ON x ( x ( x ) COLLATE C" , x ( x ) text_pattern_ops ) ; EXPLAIN ( costs off ) INSERT INTO x VALUES ( 1 , 'x' ) ON CONFLICT ( x ( x ) text_pattern_ops , x ( x ) COLLATE C" ) DO NOTHING ; EXPLAIN ( costs off ) INSERT INTO x VALUES ( 1 , 'x' ) ON CONFLICT ( x ( x ) COLLATE C" , x ( x ) text_pattern_ops ) DO NOTHING ; INSERT INTO x VALUES ( 1 , 'x' ) ON CONFLICT DO UPDATE SET x = x . x ; INSERT INTO x VALUES ( 1 , 'x' ) ON CONFLICT ( x ) DO UPDATE SET x = x . x ; INSERT INTO x VALUES ( 1 , 'x' ) ON CONFLICT ( x ( x ) ) DO UPDATE SET x = x . x ; CREATE UNIQUE INDEX x ON x ( x ( x ) ) ; INSERT INTO x VALUES ( 1 , 'x' ) ON CONFLICT ( x ( x ) , x ( x ) ) DO UPDATE SET x = x . x ; INSERT INTO x VALUES ( 1 , 'x' ) ON CONFLICT ( x ) WHERE x LIKE 'x' DO UPDATE SET x = x . x ; CREATE TABLE x ( x BIGINT , x BIGINT ) ; CREATE UNIQUE INDEX x ON x ( COALESCE ( x , 1 ) ) ; CREATE UNIQUE INDEX x ON x ( x ) WHERE COALESCE ( x , 1 ) > 1 ; INSERT INTO x VALUES ( 1 , 1 ) ON CONFLICT ( COALESCE ( x , 1 ) ) DO NOTHING ; INSERT INTO x VALUES ( 1 , 1 ) ON CONFLICT ( x ) WHERE COALESCE ( x , 1 ) > 1 DO NOTHING ; CREATE VIEW x AS SELECT * FROM x WITH CASCADED CHECK OPTION ; CREATE TABLE x ( x CHAR ( 1 ) ) INHERITS ( x ) ; INSERT INTO x VALUES ( 'x' , 1 , 1 ) ; ALTER TABLE x DROP COLUMN x , DROP COLUMN x ; CREATE TABLE x ( x INT UNIQUE , x box , EXCLUDE USING gist ( x WITH && ) ) ; CREATE TABLE x ( x INT PRIMARY KEY , x INT ) ; BEGIN TRANSACTION ISOLATION LEVEL READ COMMITTED ; INSERT INTO x VALUES ( 1 , 1 ) , ( 1 , 1 ) ON CONFLICT DO NOTHING ; BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE ; INSERT INTO x VALUES ( 1 , 1 ) , ( 1 , 1 ) ON CONFLICT ( x ) DO UPDATE SET x = 1 ; CREATE TABLE x ( x INT UNIQUE , x CHAR ) PARTITION BY list ( a ) ; CREATE TABLE x PARTITION OF x ( x UNIQUE ) FOR VALUES IN ( 1 , 1 ) ; INSERT INTO x VALUES ( 1 , 'x' ) ON CONFLICT DO NOTHING ; INSERT INTO x VALUES ( 1 , 'x' ) ON CONFLICT ( x ) DO NOTHING ; CREATE TABLE x ( x CHAR , x INT UNIQUE ) ; TRUNCATE x ; ALTER TABLE x DROP x , ADD x CHAR ; INSERT INTO x ( x , x ) VALUES ( 1 , 'x' ) ON CONFLICT ( x ) DO UPDATE SET x = x . x ; INSERT INTO x ( x , x ) VALUES ( 1 , 'x' ) ON CONFLICT ( x ) DO UPDATE SET x = x . x WHERE x . x = 'x' ; CREATE TABLE x PARTITION OF x FOR VALUES IN ( 1 ) PARTITION BY list ( a ) ; INSERT INTO x ( x , x ) VALUES ( 1 , 'x' ) , ( 1 , 'x' ) , ( 1 , 'x' ) ON CONFLICT ( x ) DO UPDATE SET x = x . x WHERE x . x = 'x' ; CREATE UNIQUE INDEX ON ONLY x ( x ) ; ALTER INDEX x ATTACH PARTITION x ; CREATE TABLE x ( x TEXT , x INT , x INT , x TEXT ) ; CREATE UNIQUE INDEX ON x ( x , x ) ; INSERT INTO x VALUES ( 1 , 'x' , 1 ) ON CONFLICT ( x , x ) DO UPDATE SET ( x , x , x ) = ROW ( x . * ) WHERE x = ( 1 , TEXT 'x' , 1 ) AND x = ( 1 , TEXT 'x' , 1 ) ; $$CREATE TRIGGER x AFTER UPDATE ON x REFERENCING NEW TABLE AS inserted FOR EACH STATEMENT EXECUTE PROCEDURE x ( ) ; INSERT INTO x VALUES ( 1 , 'x' , 1 ) ON CONFLICT ( x , x ) DO UPDATE SET x = x . x + 1 ; ##@#@#@#########$$$$SELECT FALSE <= 1 BETWEEN 1 AND 1 ; SELECT FALSE >= 1 BETWEEN 1 AND 1 ; BEGIN TRANSACTION ; GRANT USAGE ON SCHEMA schema_op1 TO x ; REVOKE USAGE ON SCHEMA schema_op1 FROM x ; SET ROLE regress_rol_op1 ; ######$$$$#@##@##@#CREATE OPERATOR % ( leftarg = int8 ) ; CREATE TYPE type_op3 AS ENUM ( 'x' , 'x' , 'x' ) ; $$$$REVOKE USAGE ON TYPE type_op3 FROM x ; ##CREATE TYPE type_op4 AS ENUM ( 'x' , 'x' , 'x' ) ; $$$$REVOKE USAGE ON TYPE type_op4 FROM x ; ##CREATE TYPE type_op5 AS ENUM ( 'x' , 'x' , 'x' ) ; $$$$##CREATE TYPE type_op6 AS ENUM ( 'x' , 'x' , 'x' ) ; $$$$REVOKE USAGE ON TYPE type_op6 FROM x ; ##CREATE SCHEMA x CREATE UNIQUE INDEX x ON x ( x ) CREATE VIEW x AS SELECT x + 1 AS a , x + 1 AS b FROM x CREATE TABLE x ( x serial , x INT UNIQUE ) ; SELECT x ( * ) FROM x WHERE x = ( SELECT x FROM x WHERE x = 'x' ) ; INSERT INTO x . abc DEFAULT VALUES ; SELECT * FROM x . abc ; SELECT * FROM x . abc_view ; ALTER SCHEMA x RENAME TO x ; DROP SCHEMA test_ns_schema_renamed CASCADE ; CREATE TABLE x ( x int4 ) ; COMMENT ON TABLE attmp_wrong IS 'x' ; COMMENT ON TABLE attmp IS 'x' ; COMMENT ON TABLE attmp IS NULL ; ALTER TABLE x ADD COLUMN x float8 ; ALTER TABLE x ADD COLUMN x float4 ; ALTER TABLE x ADD COLUMN x int2 ; ALTER TABLE x ADD COLUMN x polygon ; ALTER TABLE x ADD COLUMN x CHAR ; ALTER TABLE x ADD COLUMN x int4 ; ALTER TABLE x ADD COLUMN x tid ; ALTER TABLE x ADD COLUMN x xid ; ALTER TABLE x ADD COLUMN x oidvector ; ALTER TABLE x ADD COLUMN x BOOLEAN ; ALTER TABLE x ADD COLUMN x point ; ALTER TABLE x ADD COLUMN x lseg ; ALTER TABLE x ADD COLUMN x path ; ALTER TABLE x ADD COLUMN x box ; ALTER TABLE x ADD COLUMN x TIMESTAMP ; ALTER TABLE x ADD COLUMN x INTERVAL ; ALTER TABLE x ADD COLUMN x float8 [ ] ; ALTER TABLE x ADD COLUMN x float4 [ ] ; ALTER TABLE x ADD COLUMN x int2 [ ] ; INSERT INTO x ( x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x , x ) VALUES ( 1 , 'x' , 'x' , 4.100000 , 4.100000 , 1 , 'x' , 'x' , 1 , 'x' , 'x' , 'x' , TRUE , 'x' , 'x' , 'x' , 'x' , 'x' , 'x' , 'x' , 'x' , 'x' ) ; CREATE INDEX x ON x ( x , ( x + x ) , x ) ; ALTER INDEX x ALTER COLUMN 1 SET STATISTICS 1 ; ALTER TABLE x RENAME TO x ; ALTER INDEX x RENAME TO x ; SET ROLE regress_alter_table_user1 ; ______ALTER INDEX IF EXISTS x RENAME TO x ; __CREATE VIEW x ( x ) AS SELECT x FROM x ; SET enable_seqscan TO off ; SET enable_bitmapscan TO off ; SELECT x FROM x WHERE x < 1 ; RESET enable_seqscan ; RESET enable_bitmapscan ; ALTER TABLE x ADD CONSTRAINT onek_unique1_constraint UNIQUE ( x ) ; ALTER TABLE x DROP CONSTRAINT onek_unique1_constraint_foo ; ALTER TABLE x ADD CONSTRAINT onek_check_constraint CHECK ( x >= 1 ) ; ALTER TABLE x RENAME CONSTRAINT onek_check_constraint TO onek_check_constraint_foo ; ALTER TABLE x DROP CONSTRAINT onek_check_constraint_foo ; CREATE TABLE x ( x INT CONSTRAINT con1 CHECK ( x > 1 ) , x INT , x INT ) ; CREATE TABLE x ( x INT CONSTRAINT con1 CHECK ( x > 1 ) , x INT ) INHERITS ( x ) ; CREATE TABLE x ( x INT , CONSTRAINT chk_a CHECK ( x > 1 ) , PRIMARY KEY ( x ) ) ; ALTER TABLE x RENAME CONSTRAINT chk_a TO chk_a_new ; ALTER TABLE x RENAME CONSTRAINT constraint_rename_cache_pkey TO constraint_rename_pkey_new ; CREATE TABLE x ( LIKE x INCLUDING ALL ) ; CREATE TABLE x ( x INT PRIMARY KEY ) ; CREATE TABLE x ( x INT , x INT , UNIQUE ( x , x ) ) ; ALTER TABLE x ADD CONSTRAINT attmpconstr FOREIGN KEY ( x ) REFERENCES x MATCH FULL ; ALTER TABLE x ADD CONSTRAINT attmpconstr FOREIGN KEY ( x ) REFERENCES x ( x ) MATCH FULL ; DELETE FROM x WHERE x = 1 ; ALTER TABLE x DROP CONSTRAINT attmpconstr ; ALTER TABLE x ADD CONSTRAINT attmpconstr FOREIGN KEY ( x ) REFERENCES x MATCH FULL NOT VALID ; ALTER TABLE x VALIDATE CONSTRAINT attmpconstr ; CREATE TABLE x ( ) INHERITS ( x ) ; INSERT INTO x VALUES ( 1 , 1 ) , ( 1 , 1 ) ; ALTER TABLE x ADD CONSTRAINT b_le_20 CHECK ( x <= 1 ) NOT VALID ; ALTER TABLE x ADD CONSTRAINT check_a_is_2 CHECK ( x = 1 ) NO INHERIT NOT VALID ; ALTER TABLE x VALIDATE CONSTRAINT check_a_is_2 ; DELETE FROM ONLY x ; SET constraint_exclusion TO 'x' ; CREATE TABLE x ( x date , CHECK ( FALSE ) NO INHERIT NOT VALID ) ; EXPLAIN ( costs off ) SELECT * FROM x WHERE x BETWEEN 'x' AND 'x' ; ALTER TABLE x VALIDATE CONSTRAINT nv_child_2011_d_check ; CREATE TEMP TABLE x ( x inet ) ; ALTER TABLE x ADD FOREIGN KEY ( x ) REFERENCES x ; ALTER TABLE x ADD FOREIGN KEY ( x ) REFERENCES x ( x ) ; CREATE TEMP TABLE x ( x int8 ) ; CREATE TEMP TABLE x ( x NUMERIC ) ; CREATE TEMP TABLE x ( x NUMERIC PRIMARY KEY ) ; CREATE TEMP TABLE x ( x INT , x inet , PRIMARY KEY ( x , x ) ) ; CREATE TEMP TABLE x ( x cidr , x TIMESTAMP ) ; ALTER TABLE x ADD FOREIGN KEY ( x , x ) REFERENCES x ; ALTER TABLE x ADD FOREIGN KEY ( x , x ) REFERENCES x ( x , x ) ; CREATE TEMP TABLE x ( x INT , x inet ) ; ALTER TABLE x ADD CONSTRAINT fknd FOREIGN KEY ( x ) REFERENCES x ON DELETE CASCADE ON UPDATE NO ACTION NOT DEFERRABLE ; ALTER TABLE x ADD CONSTRAINT fkdd FOREIGN KEY ( x ) REFERENCES x ON DELETE CASCADE ON UPDATE NO ACTION DEFERRABLE INITIALLY DEFERRED ; ALTER TABLE x ADD CONSTRAINT fkdi FOREIGN KEY ( x ) REFERENCES x ON DELETE CASCADE ON UPDATE NO ACTION DEFERRABLE INITIALLY IMMEDIATE ; ALTER TABLE x ADD CONSTRAINT fknd2 FOREIGN KEY ( x ) REFERENCES x ON DELETE CASCADE ON UPDATE NO ACTION DEFERRABLE INITIALLY DEFERRED ; ALTER TABLE x ALTER CONSTRAINT fknd2 NOT DEFERRABLE ; ALTER TABLE x ADD CONSTRAINT fkdd2 FOREIGN KEY ( x ) REFERENCES x ON DELETE CASCADE ON UPDATE NO ACTION NOT DEFERRABLE ; ALTER TABLE x ALTER CONSTRAINT fkdd2 DEFERRABLE INITIALLY DEFERRED ; ALTER TABLE x ADD CONSTRAINT fkdi2 FOREIGN KEY ( x ) REFERENCES x ON DELETE CASCADE ON UPDATE NO ACTION NOT DEFERRABLE ; ALTER TABLE x ALTER CONSTRAINT fkdi2 DEFERRABLE INITIALLY IMMEDIATE ; ALTER TABLE x ADD CONSTRAINT atacc_test1 CHECK ( x > 1 ) ; CREATE TABLE x ( x INT , x INT , x INT ) ; ALTER TABLE x ADD CONSTRAINT atacc_test1 CHECK ( x + x < x * 1 ) ; INSERT INTO x ( x , x , x ) VALUES ( 1 , 1 , 1 ) ; CREATE TABLE x ( x INT CHECK ( x > 1 ) , x INT ) ; ALTER TABLE x ADD CHECK ( x > x ) ; CREATE TABLE x ( x INT ) INHERITS ( x , x ) ; ALTER TABLE x ADD CONSTRAINT foo CHECK ( x > 1 ) ; ALTER TABLE x NO INHERIT x ; ALTER TABLE x INHERIT x ; ALTER TABLE x RENAME x TO x ; ALTER TABLE x ADD x bool ; ALTER TABLE x DROP x ; ALTER TABLE x ADD x INT ; UPDATE x SET x = 1 WHERE x IS NULL ; CREATE TABLE x ( x INT ) INHERITS ( x ) ; ALTER TABLE x ADD CONSTRAINT foo CHECK ( x > 1 ) NO INHERIT ; ALTER TABLE x ADD CONSTRAINT atacc_test1 UNIQUE ( x ) ; ALTER TABLE x ALTER COLUMN x TYPE INTEGER USING 1 ; ALTER TABLE x ADD CONSTRAINT atacc_test1 UNIQUE ( x , x ) ; CREATE TABLE x ( x INT , x INT , UNIQUE ( x ) ) ; ALTER TABLE x ADD UNIQUE ( x ) ; CREATE TABLE x ( x serial , x INT ) ; ALTER TABLE x ADD CONSTRAINT atacc_test1 PRIMARY KEY ( x ) ; ALTER TABLE x ADD CONSTRAINT atacc_oid1 PRIMARY KEY ( x ) ; ALTER TABLE x DROP CONSTRAINT atacc_test1 RESTRICT ; ALTER TABLE x ADD COLUMN x INT PRIMARY KEY ; ALTER TABLE x ADD COLUMN x INT DEFAULT 1 PRIMARY KEY ; ALTER TABLE x ADD COLUMN x float8 NOT NULL DEFAULT x ( ) , ADD PRIMARY KEY ( x ) ; ALTER TABLE x ADD CONSTRAINT atacc_test1 PRIMARY KEY ( x , x ) ; ALTER TABLE x ADD CONSTRAINT atacc_test2 PRIMARY KEY ( x ) ; INSERT INTO x ( x , x ) VALUES ( NULL , 1 ) ; INSERT INTO x ( x , x ) VALUES ( 1 , NULL ) ; INSERT INTO x ( x , x ) VALUES ( NULL , NULL ) ; CREATE TABLE x ( x INT , x INT , PRIMARY KEY ( x ) ) ; ALTER TABLE x ALTER COLUMN x DROP NOT NULL ; ALTER TABLE x ALTER x SET NOT NULL ; ALTER TABLE x ALTER COLUMN x SET NOT NULL ; CREATE TABLE x ( x INT NOT NULL ) ; ALTER TABLE x ADD CONSTRAINT atacc1_pkey" PRIMARY KEY ( x ) ; ALTER TABLE x DROP CONSTRAINT atacc1_pkey" ; ALTER TABLE x ALTER x DROP NOT NULL ; INSERT INTO x VALUES ( NULL , 1 ) ; ALTER TABLE x ADD CONSTRAINT atacc1_constr_or CHECK ( x IS NOT NULL OR x < 1 ) ; ALTER TABLE x DROP CONSTRAINT atacc1_constr_or ; ALTER TABLE x ADD CONSTRAINT atacc1_constr_invalid CHECK ( x IS NOT NULL ) NOT VALID ; ALTER TABLE x DROP CONSTRAINT atacc1_constr_invalid ; ALTER TABLE x ADD CONSTRAINT atacc1_constr_a_valid CHECK ( x IS NOT NULL ) ; INSERT INTO x VALUES ( 1 , NULL ) ; ALTER TABLE x ALTER x SET NOT NULL , ALTER x SET NOT NULL ; ALTER TABLE x ALTER x DROP NOT NULL , ALTER x DROP NOT NULL ; ALTER TABLE x ADD CONSTRAINT atacc1_constr_b_valid CHECK ( x IS NOT NULL ) ; CREATE TABLE x ( x VARCHAR ( 1 ) ) INHERITS ( x ) ; INSERT INTO x ( x , x ) VALUES ( NULL , 'x' ) ; ALTER TABLE ONLY x ALTER x SET NOT NULL ; CREATE TABLE x ( x int4 DEFAULT 1 , x TEXT DEFAULT 'x' ) ; ALTER TABLE x ALTER COLUMN x DROP DEFAULT ; ALTER TABLE x ALTER COLUMN x SET DEFAULT 1 ; ALTER TABLE x ALTER COLUMN x SET DEFAULT 'x' ; DROP RULE def_view_test_ins ON def_view_test ; CREATE TABLE x ( x int4 NOT NULL , x int4 , x int4 NOT NULL , x int4 ) ; INSERT INTO x VALUES ( 1 , 1 , 1 , 1 ) ; SELECT * FROM x GROUP BY x ; SELECT x . * FROM x ; SELECT x . x FROM x ; SELECT x , x , x FROM x ; SELECT x , x , x , x FROM x ; INSERT INTO x VALUES ( DEFAULT , 1 , 1 , 1 ) ; INSERT INTO x ( x ) VALUES ( DEFAULT ) ; INSERT INTO x ( x , x , x , x ) VALUES ( 1 , 1 , 1 , 1 ) ; INSERT INTO x ( x , x , x , x ) VALUES ( DEFAULT , 1 , 1 , 1 ) ; ALTER TABLE x SET WITHOUT OIDS ; ANALYZE x ( a ) ; ANALYZE x ( ........pg.dropped.1........" ) ; VACUUM ANALYZE x ( a ) ; VACUUM ANALYZE x ( ........pg.dropped.1........" ) ; COMMENT ON COLUMN atacc1 . a IS 'x' ; COMMENT ON COLUMN atacc1 . ........pg.dropped.1........" IS 'x' ; ALTER TABLE x ALTER x SET STATISTICS 1 ; ALTER TABLE x ALTER x SET DEFAULT 1 ; ALTER TABLE x ALTER x DROP DEFAULT ; ALTER TABLE x ADD PRIMARY KEY ( x ) ; ALTER TABLE x ADD CHECK ( x > 1 ) ; CREATE TABLE x ( x int4 UNIQUE ) ; CREATE TABLE x AS SELECT * FROM x ; SELECT * INTO x FROM x ; CREATE TABLE x ( x float8 , x NUMERIC ( 1 , 1 ) , x TEXT COLLATE C" ) ; CREATE TABLE x ( x int4 , x int4 , x int4 ) ; COPY x TO STDOUT ; COPY x ( x ) TO STDOUT ; COPY x ( x , x ) FROM STDIN ; ALTER TABLE ONLY x DROP COLUMN x ; ALTER TABLE x RENAME COLUMN x TO x ; ALTER TABLE ONLY x RENAME COLUMN x TO x ; ALTER TABLE IF EXISTS x RENAME COLUMN x TO x ; ALTER TABLE x ADD COLUMN x INT ; ALTER TABLE ONLY x ADD COLUMN x INT ; CREATE TABLE x ( x INT NOT NULL ) INHERITS ( x ) ; CREATE TABLE x ( ) ; DROP TABLE x , x CASCADE ; ALTER TABLE x ADD x TEXT ; CREATE TABLE x ( x TEXT , x INT ) INHERITS ( x ) ; ALTER TABLE x ADD COLUMN x INT CHECK ( x > 1 ) ; UPDATE x SET x = x + 1 , x = x ( x ) ; CREATE DOMAIN mytype AS TEXT ; CREATE TEMP TABLE x ( x TEXT , x mytype , x TEXT ) ; INSERT INTO x VALUES ( 'x' , 'x' , 'x' ) ; DROP DOMAIN mytype CASCADE ; SELECT x , x ( x ) FROM x GROUP BY x ; CREATE TABLE x ( x serial8 , x BOOLEAN , CONSTRAINT anothertab_chk CHECK ( x <= 1 ) ) ; INSERT INTO x ( x , x ) VALUES ( DEFAULT , TRUE ) ; INSERT INTO x ( x , x ) VALUES ( DEFAULT , FALSE ) ; ALTER TABLE x ALTER COLUMN x TYPE TEXT USING CASE WHEN x IS TRUE THEN 'x' WHEN x IS FALSE THEN 'x' ELSE 'x' END ; CREATE TABLE x ( x INT PRIMARY KEY , x INT UNIQUE , x INT , x INT , x INT ) ; ALTER TABLE x ADD EXCLUDE USING btree ( x WITH = ) ; ALTER TABLE x ADD EXCLUDE USING btree ( x WITH = ) WHERE ( x IS NOT NULL ) ; ALTER TABLE x ADD EXCLUDE USING btree ( x WITH = ) WHERE ( x > 1 ) ; ALTER TABLE x ADD UNIQUE ( x , x ) ; ALTER TABLE x ALTER COLUMN x TYPE BIGINT ; ALTER TABLE x ALTER COLUMN x TYPE BIGINT , ALTER COLUMN x TYPE BIGINT , ALTER COLUMN x TYPE BIGINT ; ALTER TABLE x ALTER x TYPE TEXT USING x || 'x' , ALTER x TYPE BIGINT USING x * 1 ; CREATE TABLE x ( x INT , x tab1 ) ; CREATE TABLE x ( x TEXT , x INT ) ; CREATE INDEX ON x ( x ) ; COMMENT ON CONSTRAINT at_partitioned_id_name_key ON at_partitioned IS 'x' ; COMMENT ON INDEX at_partitioned_id_name_key IS 'x' ; COMMENT ON CONSTRAINT at_partitioned_0_id_name_key ON at_partitioned_0 IS 'x' ; COMMENT ON INDEX at_partitioned_0_id_name_key IS 'x' ; COMMENT ON CONSTRAINT at_partitioned_1_id_name_key ON at_partitioned_1 IS 'x' ; COMMENT ON INDEX at_partitioned_1_id_name_key IS 'x' ; CREATE TEMP TABLE x AS SELECT x , x AS oldoid , x AS oldfilenode FROM x WHERE x LIKE 'x' ; CREATE TABLE x ( x FLOAT CHECK ( x > 10.200000 ) , x FLOAT ) ; SELECT x , x , x , x , x FROM x c , x r WHERE x LIKE 'x' AND x . x = x . x ORDER BY 1 , 1 ; ALTER TABLE x ALTER COLUMN x TYPE NUMERIC ; ALTER TABLE x ADD CONSTRAINT bnoinherit CHECK ( x > 1 ) NO INHERIT ; ALTER TABLE x ADD CONSTRAINT blocal CHECK ( x < 1 ) ; ALTER TABLE x ADD CONSTRAINT bmerged CHECK ( x > 1 ) ; CREATE TABLE x ( x SMALLINT ) INHERITS ( x ) ; CREATE TABLE x ( x int2 , x int4 , x int8 ) ; CREATE TABLE x ( x int4 , x int8 , x int2 ) ; CREATE TABLE x ( x int8 , x int2 , x int4 ) ; ALTER TABLE x ALTER COLUMN x TYPE int4 USING ( x ( x ) ) ; CREATE TABLE x ( x INT REFERENCES x , x TEXT ) ; ALTER TABLE x DROP CONSTRAINT check_fk_presence_2_id_fkey ; CREATE VIEW x AS SELECT * FROM x bt ; CREATE VIEW x AS SELECT * , x ( x ) AS j FROM x v1 ; CREATE OR REPLACE VIEW x AS SELECT * , 1 + 1 AS more FROM x bt ; EXECUTE p_ddl ; $$$$$$$$$$$$$$$$$$$$$$$$$$DROP FUNCTION x ( regclass , TEXT ) ; DROP TYPE lockmodes ; CREATE TYPE lockmodes AS ENUM ( 'x' , 'x' , 'x' , 'x' , 'x' , 'x' , 'x' , 'x' , 'x' ) ; BEGIN ; ALTER TABLE x ALTER COLUMN x SET STATISTICS 1 ; SELECT * FROM x ORDER BY 1 ; BEGIN ; ALTER TABLE x CLUSTER ON alterlock_pkey ; BEGIN ; ALTER TABLE x SET WITHOUT CLUSTER ; BEGIN ; ALTER TABLE x SET ( fillfactor = 1 ) ; BEGIN ; ALTER TABLE x RESET ( fillfactor ) ; BEGIN ; ALTER TABLE x SET ( toast . autovacuum_enabled = off ) ; BEGIN ; ALTER TABLE x SET ( autovacuum_enabled = off ) ; BEGIN ; ALTER TABLE x ALTER COLUMN x SET ( n_distinct = 1 ) ; BEGIN ; ALTER TABLE x SET ( autovacuum_enabled = off , fillfactor = 1 ) ; BEGIN ; ALTER TABLE x ALTER COLUMN x SET DEFAULT 'x' ; CREATE TRIGGER x BEFORE DELETE OR UPDATE ON x FOR EACH ROW EXECUTE PROCEDURE x ( 1 , 1 ) ; ALTER TABLE x VALIDATE CONSTRAINT alterlock2nv ; ALTER TABLE x RESET ( autovacuum_enabled ) ; ALTER VIEW x RESET ( autovacuum_enabled ) ; ALTER VIEW x SET ( security_barrier = off ) ; ALTER VIEW x RESET ( security_barrier ) ; ALTER TABLE x SET ( security_barrier = off ) ; ALTER TABLE x RESET ( security_barrier ) ; SELECT x ( NULL ) ; ALTER FUNCTION x ( TEXT ) CALLED ON NULL INPUT ; ALTER FUNCTION x ( TEXT ) RETURNS NULL ON NULL INPUT ; CREATE TABLE x . t1 ( x serial PRIMARY KEY , x INT CHECK ( x > 1 ) ) ; CREATE VIEW x . v1 AS SELECT * FROM x . t1 ; CREATE TYPE alter1 . ctype AS ( f1 INT , f2 TEXT ) ; CREATE OPERATOR CLASS alter1 . ctype_hash_ops DEFAULT FOR TYPE alter1 . ctype USING hash AS OPERATOR 1 alter1 . = ( alter1 . ctype , alter1 . ctype ) ; CREATE CONVERSION alter1 . latin1_to_utf8 FOR 'x' TO 'x' FROM iso8859_1_to_utf8 ; CREATE TEXT SEARCH TEMPLATE alter1 . tmpl ( init = dsimple_init , lexize = dsimple_lexize ) ; INSERT INTO x . t1 ( x ) VALUES ( 1 ) ; ALTER TABLE x . v1 SET SCHEMA alter2 ; ALTER FUNCTION alter1 . plus1 ( INT ) SET SCHEMA alter2 ; ALTER DOMAIN alter1 . posint SET SCHEMA alter2 ; ALTER OPERATOR CLASS alter1 . ctype_hash_ops USING hash SET SCHEMA alter2 ; ALTER OPERATOR FAMILY alter1 . ctype_hash_ops USING hash SET SCHEMA alter2 ; ALTER OPERATOR alter1 . = ( alter1 . ctype , alter1 . ctype ) SET SCHEMA alter2 ; ALTER FUNCTION alter1 . same ( alter1 . ctype , alter1 . ctype ) SET SCHEMA alter2 ; ALTER CONVERSION alter1 . latin1_to_utf8 SET SCHEMA alter2 ; ALTER TEXT SEARCH PARSER alter1 . prs SET SCHEMA alter2 ; ALTER TEXT SEARCH CONFIGURATION alter1 . cfg SET SCHEMA alter2 ; ALTER TEXT SEARCH TEMPLATE alter1 . tmpl SET SCHEMA alter2 ; ALTER TEXT SEARCH DICTIONARY alter1 . dict SET SCHEMA alter2 ; DROP SCHEMA alter1 ; SELECT * FROM x . t1 ; SELECT * FROM x . v1 ; SELECT alter2 . plus1 ( 1 ) ; DROP SCHEMA alter2 CASCADE ; CREATE TYPE test_type AS ( a INT ) ; ALTER TYPE test_type ALTER ATTRIBUTE b SET DATA TYPE INTEGER ; ALTER TYPE test_type DROP ATTRIBUTE b ; ALTER TYPE test_type DROP ATTRIBUTE a , ADD ATTRIBUTE d BOOLEAN ; ALTER TYPE test_type RENAME ATTRIBUTE a TO aa ; ALTER TYPE test_type RENAME ATTRIBUTE d TO dd ; DROP TYPE test_type ; CREATE TYPE test_type1 AS ( a INT , b TEXT ) ; CREATE TABLE x ( x INT , x test_type1 ) ; CREATE TABLE x OF test_type2 ; CREATE TYPE test_typex AS ( a INT , b TEXT ) ; CREATE TABLE x ( x INT , x test_typex CHECK ( ( x ) . a > 1 ) ) ; DROP TYPE test_typex ; CREATE TYPE test_type3 AS ( a INT ) ; ALTER TYPE test_type3 DROP ATTRIBUTE a , ADD ATTRIBUTE b INT ; CREATE TYPE test_type_empty AS ( ) ; DROP TYPE test_type_empty ; CREATE TYPE tt_t0 AS ( z inet , x INT , y NUMERIC ( 1 , 1 ) ) ; ALTER TYPE tt_t0 DROP ATTRIBUTE z ; ALTER TABLE x OF tt_t0 ; CREATE TYPE tt_t1 AS ( x INT , y NUMERIC ( 1 , 1 ) ) ; CREATE TABLE x ( x TEXT CHECK ( x IS NOT NULL ) ) ; ALTER TABLE ONLY x DROP CONSTRAINT test_drop_constr_parent_c_check" ; ALTER TABLE IF EXISTS x ADD COLUMN x INT ; ALTER TABLE IF EXISTS x ADD CONSTRAINT xxx PRIMARY KEY ( x ) ; ALTER TABLE IF EXISTS x ADD CHECK ( x BETWEEN 1 AND 1 ) ; ALTER TABLE IF EXISTS x ALTER COLUMN x SET DEFAULT 1 ; ALTER TABLE IF EXISTS x SET SCHEMA alter2 ; DROP TABLE x . tt8 ; DROP SCHEMA alter2 ; CREATE TABLE x ( x INT , x INT CHECK ( x > 1 ) , x INT , CONSTRAINT comment_test_pk PRIMARY KEY ( x ) ) ; COMMENT ON COLUMN comment_test . id IS 'x' ; COMMENT ON INDEX comment_test_index IS 'x' ; COMMENT ON CONSTRAINT comment_test_positive_col_check ON comment_test IS 'x' ; COMMENT ON CONSTRAINT comment_test_pk ON comment_test IS 'x' ; COMMENT ON INDEX comment_test_pk IS 'x' ; ALTER TABLE x ALTER COLUMN x SET DATA TYPE INT ; ALTER TABLE x ALTER COLUMN x SET DATA TYPE TEXT ; ALTER TABLE x ALTER COLUMN x SET DATA TYPE BIGINT ; CREATE TABLE x ( x TEXT CONSTRAINT comment_test_child_fk REFERENCES x ) ; COMMENT ON COLUMN comment_test_child . id IS 'x' ; COMMENT ON INDEX comment_test_child_fk IS 'x' ; COMMENT ON CONSTRAINT comment_test_child_fk ON comment_test_child IS 'x' ; SHOW allow_system_table_mods ; CREATE TABLE x . new_system_table ( ) ; CREATE TABLE x ( x serial PRIMARY KEY , x TEXT ) ; ALTER TABLE x SET SCHEMA pg_catalog ; ALTER TABLE x SET SCHEMA public ; INSERT INTO x ( x ) VALUES ( 'x' ) , ( 'x' ) ; UPDATE x SET x = - x ; DELETE FROM x WHERE x = 'x' ; ALTER TABLE x DROP CONSTRAINT new_system_table_pkey ; CREATE UNLOGGED TABLE x ( x SERIAL PRIMARY KEY , x TEXT ) ; ~~CREATE TABLE x ( x SERIAL PRIMARY KEY , x TEXT ) ; ~ALTER TABLE x SET UNLOGGED ; ~ALTER TABLE x ADD COLUMN x INTEGER ; ALTER TABLE x ADD EXCLUDE USING gist ( x WITH && ) ; ALTER TABLE x ALTER COLUMN x TYPE CHAR ( 1 ) ; ALTER TABLE x ADD CONSTRAINT chk_a CHECK ( x > 1 ) NO INHERIT ; CREATE TABLE x ( LIKE x ) ; ALTER TABLE x ATTACH PARTITION x FOR VALUES IN ( 'x' ) ; CREATE TABLE x ( x INT NOT NULL , x CHAR ( 1 ) COLLATE C" , CONSTRAINT check_a CHECK ( x > 1 ) ) PARTITION BY LIST ( a ) ; ALTER TABLE x OWNER TO x ; SET SESSION AUTHORIZATION regress_test_me ; CREATE TEMP TABLE x ( x INT ) PARTITION BY LIST ( a ) ; CREATE TYPE mytype AS ( a INT ) ; CREATE TABLE x OF mytype ; DROP TYPE mytype CASCADE ; CREATE TABLE x ( LIKE x , x INT ) ; CREATE TABLE x ( x CHAR ( 1 ) , x INT NOT NULL ) ; ALTER TABLE x ALTER x TYPE CHAR ( 1 ) COLLATE POSIX" ; CREATE TABLE x ( x CHAR ( 1 ) COLLATE C" , x INT NOT NULL ) ; ALTER TABLE x ADD CONSTRAINT check_a CHECK ( x >= 1 ) ; CREATE TABLE x ( x INT NOT NULL , x CHAR ( 1 ) COLLATE C" , CONSTRAINT check_a CHECK ( x > 1 ) ) ; CREATE TABLE x ( LIKE x INCLUDING CONSTRAINTS ) ; ALTER TABLE x ATTACH PARTITION x DEFAULT ; CREATE TABLE x ( x INT , x CHAR ) PARTITION BY LIST ( a ) ; CREATE TABLE x ( LIKE x , CONSTRAINT check_a CHECK ( x IN ( 1 ) ) ) ; ALTER TABLE x DETACH PARTITION x ; ALTER TABLE x ADD CONSTRAINT check_a CHECK ( x IN ( 1 , 1 ) ) ; CREATE TABLE x PARTITION OF x FOR VALUES IN ( 1 , 1 ) ; CREATE TABLE x ( x INT NOT NULL CHECK ( x = 1 ) , x INT NOT NULL CHECK ( x >= 1 AND x <= 1 ) ) ; ALTER TABLE x ATTACH PARTITION x FOR VALUES FROM ( 1 , 1 ) TO ( 1 , 1 ) ; CREATE TABLE x ( x INT NOT NULL CHECK ( x = 1 ) , x INT NOT NULL CHECK ( x >= 1 AND x < 1 ) ) ; CREATE TABLE x ( LIKE x ) PARTITION BY LIST ( b ) ; CREATE TABLE x PARTITION OF x FOR VALUES IN ( 'x' ) ; INSERT INTO x ( x , x ) VALUES ( 1 , 'x' ) ; DELETE FROM x WHERE x NOT IN ( 1 ) ; ALTER TABLE x ADD CONSTRAINT check_a CHECK ( x IS NOT NULL AND x = 1 ) ; ALTER TABLE x DROP CONSTRAINT check_a ; ALTER TABLE x ADD CONSTRAINT check_a CHECK ( x IN ( 1 ) ) , ALTER x SET NOT NULL ; CREATE TABLE x ( x INT , LIKE x , CONSTRAINT check_a CHECK ( x IS NOT NULL AND x = 1 ) ) ; CREATE TABLE x ( LIKE x , CONSTRAINT check_a CHECK ( x IS NOT NULL AND x = 1 ) ) PARTITION BY LIST ( b ) ; ALTER TABLE x DROP x , DROP x , DROP x ; ALTER TABLE x ATTACH PARTITION x FOR VALUES IN ( 'x' , NULL ) ; CREATE TABLE x PARTITION OF x DEFAULT PARTITION BY LIST ( a ) ; CREATE TABLE x ( x INT , x TEXT ) PARTITION BY LIST ( a ) ; CREATE TABLE x PARTITION OF x DEFAULT PARTITION BY LIST ( b ) ; CREATE TABLE x PARTITION OF x ( CONSTRAINT check_1 CHECK ( x IS NOT NULL AND x = 1 ) ) FOR VALUES IN ( 'x' ) ; CREATE TABLE x ( x INT , x INT ) PARTITION BY HASH ( a part_test_int4_ops ) ; CREATE TABLE x PARTITION OF x FOR VALUES WITH ( MODULUS 1 , REMAINDER 1 ) ; ALTER TABLE x ATTACH PARTITION x FOR VALUES WITH ( MODULUS 1 , REMAINDER 1 ) ; CREATE TABLE x PARTITION OF x FOR VALUES IN ( 'x' , 'x' , 'x' ) ; ALTER TABLE x ALTER COLUMN x TYPE TEXT ; ALTER TABLE ONLY x ALTER x DROP NOT NULL ; ALTER TABLE ONLY x DROP CONSTRAINT check_b ; ALTER TABLE ONLY x ADD CONSTRAINT check_a CHECK ( x > 1 ) ; ALTER TABLE ONLY x DROP CONSTRAINT check_a ; ALTER TABLE x ALTER x SET NOT NULL , ADD CONSTRAINT check_a2 CHECK ( x > 1 ) ; ALTER TABLE x DROP CONSTRAINT check_a2 ; ALTER TABLE x ADD x INT NOT NULL ; ALTER TABLE x ADD CONSTRAINT parted_validate_test_chka CHECK ( x > 1 ) NOT VALID ; ALTER TABLE x VALIDATE CONSTRAINT parted_validate_test_chka ; ALTER TABLE x ALTER COLUMN x SET ( n_distinct = 1 , n_distinct_inherited = 1 ) ; ALTER TABLE x ALTER COLUMN x RESET ( n_distinct_inherited ) ; CREATE TEMP TABLE x ( x INT ) PARTITION BY list ( a ) ; $$CREATE TRIGGER x BEFORE INSERT ON x FOR EACH STATEMENT EXECUTE PROCEDURE x ( ) ; $$CREATE OPERATOR CLASS at_test_sql_partop FOR TYPE int4 USING btree AS OPERATOR 1 < ( int4 , int4 ) , OPERATOR 1 <= ( int4 , int4 ) , OPERATOR 1 = ( int4 , int4 ) , OPERATOR 1 >= ( int4 , int4 ) , OPERATOR 1 > ( int4 , int4 ) , FUNCTION 1 x ( int4 , int4 ) ; DROP OPERATOR CLASS at_test_sql_partop USING btree ; DROP FUNCTION at_test_sql_partop ; RESET max_stack_depth ; SELECT x ( x ( x ) , FALSE ) FROM ( SELECT x AS b , x * 1 AS c FROM x ( 1 , 1 ) x ) q ; SELECT x ( x ( x ) , TRUE ) FROM ( SELECT x AS b , x * 1 AS c FROM x ( 1 , 1 ) x ) q ; $$$$SELECT x ( x ( x ) , FALSE ) FROM ( SELECT x || x AS b , x AS c , ARRAY [ ROW ( x . * , ARRAY [ 1 , 1 , 1 ] ) , ROW ( x . * , ARRAY [ 1 , 1 , 1 ] ) ] AS z FROM x ( 1 , 1 ) x , x ( 1 , 1 ) y ) q ; SELECT x ( x ( x ) , FALSE ) FROM x ( 1 , 1 ) x ; $$$$SELECT x ( x ) FROM ( SELECT x || x AS b , x AS c , ARRAY [ ROW ( x . * , ARRAY [ 1 , 1 , 1 ] ) , ROW ( x . * , ARRAY [ 1 , 1 , 1 ] ) ] AS z FROM x ( 1 , 1 ) x , x ( 1 , 1 ) y ) q ; $$$$SELECT x ( x , TRUE ) FROM ( SELECT x || x AS b , x AS c , ARRAY [ ROW ( x . * , ARRAY [ 1 , 1 , 1 ] ) , ROW ( x . * , ARRAY [ 1 , 1 , 1 ] ) ] AS z FROM x ( 1 , 1 ) x , x ( 1 , 1 ) y ) q ; SELECT x ( ROW ( ( SELECT x ( x ) AS d FROM x ( 1 , 1 ) x ) ) , FALSE ) ; SELECT x ( TIMESTAMP 'x' ) ; SET LOCAL TIME ZONE 10.500000 ; SET LOCAL TIME ZONE 1 ; $$$$CREATE TEMP TABLE x ( x TEXT , x json ) ; INSERT INTO x VALUES ( 'x' , 'x' ) , ( 'x' , 'x' ) , ( 'x' , 'x' ) ; SELECT * FROM x ( 'x' ) q ; SELECT x ( 'x' , 'x' , 'x' ) IS NULL AS expect_false ; SELECT x ( 'x' , 'x' , 'x' ) IS NULL AS expect_true ; CREATE TYPE jpop AS ( a TEXT , b INT , c TIMESTAMP ) ; CREATE DOMAIN js_int_not_null AS INT NOT NULL ; CREATE TYPE j_unordered_pair AS ( x INT , y INT ) ; _CREATE TYPE jsrec AS ( i INT , ia int4 , ia1 INT [ ] , ia2 INT [ ] [ ] , ia3 INT [ ] [ ] [ ] , ia1d js_int_array_1d , ia2d js_int_array_2d , t TEXT , ta TEXT [ ] , c CHAR ( 1 ) , ca CHAR ( 1 ) [ ] , ts TIMESTAMP , js json , jsb jsonb , jsa json [ ] , rec jpop , reca jpop [ ] ) ; CREATE TYPE jsrec_i_not_null AS ( i js_int_not_null ) ; SELECT x ( ROW ( 1 , 1 ) , 'x' ) ; CREATE TYPE jpop2 AS ( a INT , b json , c INT , d INT ) ; SELECT x , x ( ROW ( x , 1 ) , 'x' ) FROM ( VALUES ( 1 ) , ( 1 ) ) v ( i ) ; CREATE TEMP TABLE x ( x json ) ; DROP TYPE jsrec ; DROP TYPE jsrec_i_not_null ; DROP DOMAIN js_int_not_null ; DROP DOMAIN js_int_array_1d ; DROP DOMAIN js_int_array_2d ; DROP DOMAIN j_ordered_pair ; DROP TYPE j_unordered_pair ; SELECT x ( 'x' , 1 , 'x' , 1.200000 , 'x' , TRUE , 'x' , NULL , 'x' , x 'x' ) ; SELECT x ( 1 , 1 ) ; SELECT x ( NULL , 1 ) ; SELECT x ( x , 1 ) FROM ( SELECT 1 AS a , 1 AS b ) r ; SELECT x ( x 'x' , 1 ) ; INSERT INTO x VALUES ( 1 , 'x' , 'x' ) ; INSERT INTO x VALUES ( 1 , NULL , 'x' ) ; SELECT * FROM x ( 'x' ) AS x ( a INT , b TEXT , d TEXT ) ; SELECT * FROM x ( 'x' ) AS x ( a INT , b TEXT , c BOOLEAN ) ; SELECT * FROM x ( 'x' ) AS x ( a INT , b json , c BOOLEAN ) ; _SELECT * FROM x ( 'x' ) AS x ( ia int4 ) ; _____SELECT * FROM x ( 'x' ) AS x ( ia2 INT [ ] [ ] ) ; SELECT * FROM x ( 'x' ) AS x ( ia2 int4 [ ] [ ] ) ; CREATE TABLE x ( x INT , x macaddr8 ) ; CREATE INDEX x ON x USING btree ( x ) ; CREATE INDEX x ON x USING hash ( x ) ; SELECT x , x , x ( x ) FROM x ORDER BY 1 , 1 ; SELECT x & 'x' FROM x ; SELECT x | 'x' FROM x ; GRANT ALL ON SCHEMA temp_func_test TO x ; SET search_path TO temp_func_test , public ; CREATE FUNCTION x ( TEXT , date ) RETURNS bool LANGUAGE 'x' AS 'x' ; CREATE FUNCTION x ( TEXT [ ] ) RETURNS INT LANGUAGE 'x' AS 'x' ; CREATE FUNCTION x ( ) RETURNS bool LANGUAGE 'x' AS 'x' ; CREATE FUNCTION x ( INT ) RETURNS bool LANGUAGE 'x' AS 'x' ; CREATE FUNCTION x ( INT ) RETURNS bool LANGUAGE 'x' IMMUTABLE AS 'x' ; CREATE FUNCTION x ( INT ) RETURNS bool LANGUAGE 'x' STABLE AS 'x' ; CREATE FUNCTION x ( INT ) RETURNS bool LANGUAGE 'x' VOLATILE AS 'x' ; ALTER FUNCTION x ( INT ) VOLATILE ; CREATE FUNCTION x ( INT ) RETURNS bool LANGUAGE 'x' SECURITY DEFINER AS 'x' ; CREATE FUNCTION x ( INT ) RETURNS bool LANGUAGE 'x' SECURITY INVOKER AS 'x' ; ALTER FUNCTION x ( INT ) SECURITY DEFINER ; CREATE FUNCTION x ( INT ) RETURNS bool LANGUAGE 'x' LEAKPROOF AS 'x' ; ALTER FUNCTION x ( INT ) LEAKPROOF ; ALTER FUNCTION x ( INT ) OWNER TO x ; SET SESSION AUTHORIZATION regress_unpriv_user ; ALTER FUNCTION x ( INT ) NOT LEAKPROOF ; CREATE FUNCTION x ( INT ) RETURNS bool LANGUAGE 'x' CALLED ON NULL INPUT AS 'x' ; CREATE FUNCTION x ( INT ) RETURNS bool LANGUAGE 'x' RETURNS NULL ON NULL INPUT AS 'x' ; CREATE FUNCTION x ( INT ) RETURNS bool LANGUAGE 'x' STRICT AS 'x' ; ALTER FUNCTION x ( INT ) CALLED ON NULL INPUT ; DROP FUNCTION x ( INT , INT , TEXT ) , x ( INT ) , x ( INT ) ; CREATE FUNCTION x ( BIGINT ) RETURNS bool LANGUAGE 'x' IMMUTABLE AS 'x' ; DROP FUNCTION functest_b_1 ; DROP FUNCTION x ( a INT ) ; SELECT * FROM x ( 1 ) ; DROP SCHEMA temp_func_test CASCADE ; SELECT x ( x ) AS avg_1 FROM x ; SELECT x ( x ) AS avg_32 FROM x WHERE x < 1 ; SELECT x ( x ) AS avg_3_4 FROM ONLY x ; SELECT x ( x ) AS sum_1500 FROM x ; SELECT x ( x ) AS sum_198 FROM x ; SELECT x ( x ) AS avg_431_773 FROM x ; SELECT x ( x ) AS avg_6_8 FROM ONLY x ; SELECT x ( x ) AS max_3 FROM x ; SELECT x ( x ) AS max_100 FROM x ; SELECT x ( x . x ) AS max_324_78 FROM x ; SELECT x ( x . x ) AS max_3_7 FROM x ; SELECT x ( 1.000000 ) , x ( 2.000000 ) ; SELECT x ( x , x ) FROM x ; SELECT x ( x , x ) , x ( x , x ) FROM x ; CREATE TABLE x ( x float8 , x float8 ) ; INSERT INTO x VALUES ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) ; SELECT x ( * ) , x ( x ) , x ( x , x ) , x ( x ) , x ( x , x ) , x ( x , x ) FROM x WHERE x IN ( 1 , 1 , 1 , 1 ) ; SELECT x ( * ) , x ( x ) , x ( x , x ) , x ( x ) , x ( x , x ) , x ( x , x ) FROM x ; SELECT x ( * ) , x ( x ) , x ( x , x ) , x ( x ) , x ( x , x ) , x ( x , x ) FROM x WHERE x IN ( 1 , 1 , 1 ) ; SELECT x ( * ) , x ( x ) , x ( x , x ) , x ( x ) , x ( x , x ) , x ( x , x ) FROM x WHERE x IN ( 1 , 1 ) ; SELECT x ( x ) AS cnt_1000 FROM x ; SELECT x ( DISTINCT x ) AS cnt_4 FROM x ; SELECT x ( * ) AS cnt_1000 FROM x ; SELECT ( SELECT x ( ( SELECT x . x FROM x i WHERE x . x = x . x ) ) ) FROM x o ; SELECT ARRAY ( SELECT x ( x + x ) s FROM x ( 1 , 1 ) y GROUP BY x ORDER BY x ) FROM x ( 1 , 1 ) x ; CREATE TEMPORARY TABLE x ( x INT2 , x INT4 , x INT8 , x INTEGER , x INT2 , x BIT ( 1 ) ) ; SELECT x ( x ) AS ?" , x ( x ) AS ?" FROM x ; COPY x FROM STDIN NULL 'x' ; CREATE TEMPORARY TABLE x ( x BOOL , x BOOL , x BOOL , x BOOL ) ; SELECT x ( x ) AS n" , x ( x ) AS n" FROM x ; SELECT x ( x ) AS f" , x ( x ) AS t" , x ( x ) AS f" , x ( x ) AS n" , x ( NOT x ) AS f" , x ( NOT x ) AS t" FROM x ; SELECT x ( x ) AS t" , x ( x ) AS t" , x ( x ) AS f" , x ( x ) AS n" , x ( NOT x ) AS f" , x ( NOT x ) AS t" FROM x ; EXPLAIN ( costs off ) SELECT x ( x ) FROM x ; EXPLAIN ( costs off ) SELECT x ( x ) FROM x WHERE x < 1 ; SELECT x ( x ) FROM x WHERE x < 1 ; EXPLAIN ( costs off ) SELECT x ( x ) FROM x WHERE x > 1 ; SELECT x ( x ) FROM x WHERE x > 1 ; SET LOCAL max_parallel_workers_per_gather = 1 ; EXPLAIN ( costs off ) SELECT x ( x ) FROM x WHERE x = 1 ; SELECT x ( x ) FROM x WHERE x = 1 ; EXPLAIN ( costs off ) SELECT x , ( SELECT x ( x ) FROM x WHERE x > x ) AS gt FROM x ; SELECT x , ( SELECT x ( x ) FROM x WHERE x > x ) AS gt FROM x ; EXPLAIN ( costs off ) SELECT DISTINCT x ( x ) FROM x ; SELECT DISTINCT x ( x ) FROM x ; EXPLAIN ( costs off ) SELECT x ( x ) FROM x ORDER BY 1 ; SELECT x ( x ) FROM x ORDER BY 1 ; EXPLAIN ( costs off ) SELECT x ( x ) FROM x ORDER BY x ( x ) ; SELECT x ( x ) FROM x ORDER BY x ( x ) ; EXPLAIN ( costs off ) SELECT x ( x ) FROM x ORDER BY x ( x ) + 1 ; SELECT x ( x ) FROM x ORDER BY x ( x ) + 1 ; EXPLAIN ( costs off ) SELECT x ( x ) , x ( 1 , 1 ) AS g FROM x ORDER BY x DESC ; SELECT x ( x ) , x ( 1 , 1 ) AS g FROM x ORDER BY x DESC ; EXPLAIN ( costs off ) SELECT x ( 1 ) FROM x ; SELECT x ( 1 ) FROM x ; CREATE INDEX x ON x ( x DESC ) ; CREATE INDEX x ON x ( x ) WHERE x IS NOT NULL ; EXPLAIN ( costs off ) SELECT x ( x ) , x ( x ) FROM x ; EXPLAIN ( costs off ) SELECT DISTINCT x ( x ) , x ( x ) FROM x ; SELECT DISTINCT x ( x ) , x ( x ) FROM x ; SELECT x ( x ( x ) ) FROM x ; SELECT ( SELECT x ( x ( x ) ) FROM x ) FROM x ; CREATE TEMP TABLE x ( x INT , x INT , x INT , x INT , PRIMARY KEY ( x , x ) ) ; CREATE TEMP TABLE x ( x INT , x INT , x INT , PRIMARY KEY ( x , x ) ) ; CREATE TEMP TABLE x ( x INT , x INT , x INT , PRIMARY KEY ( x , x ) DEFERRABLE ) ; EXPLAIN ( costs off ) SELECT * FROM x GROUP BY x , x , x , x ; EXPLAIN ( costs off ) SELECT x , x FROM x GROUP BY x , x , x ; EXPLAIN ( costs off ) SELECT * FROM x GROUP BY x , x , x ; EXPLAIN ( costs off ) SELECT * FROM ONLY x GROUP BY x , x , x , x ; CREATE TEMP TABLE x ( x INT , x INT , x INT , x INT , PRIMARY KEY ( x , x ) ) PARTITION BY list ( a ) ; CREATE TEMP TABLE x PARTITION OF x FOR VALUES IN ( 1 ) ; SELECT x ( x ORDER BY x ) FROM ( VALUES ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) ) v ( a , b ) ; SELECT x ( x ORDER BY x DESC ) FROM ( VALUES ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) ) v ( a , b ) ; SELECT x ( DISTINCT x ) FROM ( VALUES ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( NULL ) , ( 1 ) ) v ( a ) ; SELECT x ( DISTINCT x ORDER BY x ) FROM ( VALUES ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( NULL ) , ( 1 ) ) v ( a ) ; SELECT x ( DISTINCT x ORDER BY x DESC ) FROM ( VALUES ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( NULL ) , ( 1 ) ) v ( a ) ; SELECT x ( DISTINCT x ORDER BY x DESC NULLS LAST ) FROM ( VALUES ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( NULL ) , ( 1 ) ) v ( a ) ; SELECT x ( x , x , x ) FROM ( VALUES ( 1 , 1 , 'x' ) , ( 1 , NULL , NULL ) , ( 1 , 1 , 'x' ) , ( 1 , 1 , 'x' ) ) v ( a , b , c ) ; SELECT x ( DISTINCT x , x , x ) FROM ( VALUES ( 1 , 1 , 'x' ) , ( 1 , NULL , NULL ) , ( 1 , 1 , 'x' ) , ( 1 , 1 , 'x' ) ) v ( a , b , c ) , x ( 1 , 1 ) i ; SELECT x ( DISTINCT x , x , x ORDER BY x ) FROM ( VALUES ( 1 , 1 , 'x' ) , ( 1 , NULL , NULL ) , ( 1 , 1 , 'x' ) , ( 1 , 1 , 'x' ) ) v ( a , b , c ) , x ( 1 , 1 ) i ; ~~SELECT x ( DISTINCT x , x , x ORDER BY x USING < , x ) FROM ( VALUES ( 1 , 1 , 'x' ) , ( 1 , NULL , NULL ) , ( 1 , 1 , 'x' ) , ( 1 , 1 , 'x' ) ) v ( a , b , c ) , x ( 1 , 1 ) i ; ~~SELECT x ( DISTINCT x , x , x ORDER BY x USING < ) FROM ( VALUES ( 1 , 1 , 'x' ) , ( 1 , NULL , NULL ) , ( 1 , 1 , 'x' ) , ( 1 , 1 , 'x' ) ) v ( a , b , c ) , x ( 1 , 1 ) i ; ~~SELECT x ( DISTINCT x , x , x ORDER BY x , x USING < , x ) FROM ( VALUES ( 1 , 1 , 'x' ) , ( 1 , NULL , NULL ) , ( 1 , 1 , 'x' ) , ( 1 , 1 , 'x' ) ) v ( a , b , c ) , x ( 1 , 1 ) i ; CREATE VIEW x AS SELECT x ( x , x , x ) FROM ( VALUES ( 1 , 1 , 'x' ) , ( 1 , NULL , NULL ) , ( 1 , 1 , 'x' ) , ( 1 , 1 , 'x' ) ) v ( a , b , c ) ; CREATE OR REPLACE VIEW x AS SELECT x ( DISTINCT x , x , x ) FROM ( VALUES ( 1 , 1 , 'x' ) , ( 1 , NULL , NULL ) , ( 1 , 1 , 'x' ) , ( 1 , 1 , 'x' ) ) v ( a , b , c ) , x ( 1 , 1 ) i ; CREATE OR REPLACE VIEW x AS SELECT x ( DISTINCT x , x , x ORDER BY x ) FROM ( VALUES ( 1 , 1 , 'x' ) , ( 1 , NULL , NULL ) , ( 1 , 1 , 'x' ) , ( 1 , 1 , 'x' ) ) v ( a , b , c ) , x ( 1 , 1 ) i ; CREATE OR REPLACE VIEW x AS SELECT x ( x , x , x ORDER BY x + 1 ) FROM ( VALUES ( 1 , 1 , 'x' ) , ( 1 , NULL , NULL ) , ( 1 , 1 , 'x' ) , ( 1 , 1 , 'x' ) ) v ( a , b , c ) ; CREATE OR REPLACE VIEW x AS SELECT x ( x , x , x ORDER BY x ) FROM ( VALUES ( 1 , 1 , 'x' ) , ( 1 , NULL , NULL ) , ( 1 , 1 , 'x' ) , ( 1 , 1 , 'x' ) ) v ( a , b , c ) ; ~~CREATE OR REPLACE VIEW x AS SELECT x ( x , x , x ORDER BY x USING < ) FROM ( VALUES ( 1 , 1 , 'x' ) , ( 1 , NULL , NULL ) , ( 1 , 1 , 'x' ) , ( 1 , 1 , 'x' ) ) v ( a , b , c ) ; ~~CREATE OR REPLACE VIEW x AS SELECT x ( DISTINCT x , x , x ORDER BY x , x USING < , x ) FROM ( VALUES ( 1 , 1 , 'x' ) , ( 1 , NULL , NULL ) , ( 1 , 1 , 'x' ) , ( 1 , 1 , 'x' ) ) v ( a , b , c ) , x ( 1 , 1 ) i ; SELECT x ( DISTINCT x , x , x ORDER BY x ) FROM ( VALUES ( 1 , 1 , 'x' ) ) v ( a , b , c ) , x ( 1 , 1 ) i ; SELECT x ( DISTINCT x , x , x ORDER BY x , x + 1 ) FROM ( VALUES ( 1 , 1 , 'x' ) ) v ( a , b , c ) , x ( 1 , 1 ) i ; SELECT x ( DISTINCT x , x , x ORDER BY x , x , x , x ) FROM ( VALUES ( 1 , 1 , 'x' ) ) v ( a , b , c ) , x ( 1 , 1 ) i ; SELECT x ( DISTINCT x , x , x ORDER BY x , x ) FROM ( VALUES ( 1 , 1 , 'x' ) ) v ( a , b , c ) , x ( 1 , 1 ) i ; SELECT x ( x , 'x' ) FROM ( VALUES ( 'x' ) , ( 'x' ) , ( 'x' ) ) g ( a ) ; SELECT x ( x , 'x' ) FROM ( VALUES ( 'x' ) , ( NULL ) , ( 'x' ) , ( 'x' ) ) g ( a ) ; SELECT x ( x , 'x' ) FROM ( VALUES ( NULL ) , ( NULL ) , ( 'x' ) , ( 'x' ) ) g ( a ) ; SELECT x ( x , 'x' ) FROM ( VALUES ( NULL ) , ( NULL ) ) g ( a ) ; SELECT x ( x , 'x' ) FROM x ; INSERT INTO x VALUES ( x ( 'x' , 'x' ) ) ; SELECT x ( x , NULL ) FROM x ; SELECT x ( x , x ( 'x' , 'x' ) ) FROM x ; SELECT x ( x ) FILTER ( WHERE x > 1 ) FROM x ; SELECT x ( 1 / x ) FILTER ( WHERE x > 1 ) FROM x ; SELECT x ( x COLLATE C" ) FILTER ( WHERE ( x COLLATE POSIX" ) > 'x' ) FROM ( VALUES ( 'x' , 'x' ) ) AS v ( foo , bar ) ; ~~SELECT x ( DISTINCT x , x , x ORDER BY x , x USING < , x ) FILTER ( WHERE x > 1 ) FROM ( VALUES ( 1 , 1 , 'x' ) , ( 1 , NULL , NULL ) , ( 1 , 1 , 'x' ) , ( 1 , 1 , 'x' ) ) v ( a , b , c ) , x ( 1 , 1 ) i ; SELECT x ( 0.500000 ) WITHIN GROUP ( ORDER BY x ) FROM x ; SELECT x ( 0.500000 ) WITHIN GROUP ( ORDER BY x ) , x ( x ) FROM x ; SELECT x ( 1 ) WITHIN GROUP ( ORDER BY x ) FROM ( VALUES ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) ) v ( x ) ; SELECT x ( 1 ) WITHIN GROUP ( ORDER BY x ) FROM ( VALUES ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) ) v ( x ) ; SELECT x ( ARRAY [ 1 , 0.100000 , 0.250000 , 0.500000 , 0.750000 , 0.900000 , 1 ] ) WITHIN GROUP ( ORDER BY x ) FROM x ; SELECT x ( ARRAY [ 1 , 0.250000 , 0.500000 , 0.750000 , 1 ] ) WITHIN GROUP ( ORDER BY x ) FROM x ; SELECT x ( ARRAY [ [ NULL , 1 , 0.500000 ] , [ 0.750000 , 0.250000 , NULL ] ] ) WITHIN GROUP ( ORDER BY x ) FROM x ; SELECT x ( ARRAY [ 1 , 1 , 0.250000 , 0.750000 , 0.500000 , 1 , 0.300000 , 0.320000 , 0.350000 , 0.380000 , 0.400000 ] ) WITHIN GROUP ( ORDER BY x ) FROM x ( 1 , 1 ) x ; SELECT x ( x ( 1 ) WITHIN GROUP ( ORDER BY x COLLATE POSIX" ) ) FROM ( VALUES ( 'x' ) , ( 'x' ) ) v ( x ) ; SELECT x ( x ) WITHIN GROUP ( ORDER BY x ) FROM x ( 1 , 1 ) x ; SELECT ARRAY ( SELECT x ( x ) WITHIN GROUP ( ORDER BY x ) FROM ( VALUES ( 0.300000 ) , ( 0.700000 ) ) v ( a ) GROUP BY x ) FROM x ( 1 , 1 ) g ( x ) ; SELECT x ( x ( x ) ) WITHIN GROUP ( ORDER BY x ) FROM x ( 1 , 1 ) x ; SELECT x ( 1 ) WITHIN GROUP ( ORDER BY x ) FROM ( VALUES ( 'x' ) , ( 'x' ) ) v ( x ) ; SELECT x ( 1 ) WITHIN GROUP ( ORDER BY x , x ) FROM x ; SELECT x ( 'x' ) WITHIN GROUP ( ORDER BY x ) FROM x ( 1 , 1 ) x ; SELECT x ( 1 ) WITHIN GROUP ( ORDER BY x ) FROM x ( 1 , 1 ) x ; SELECT x ( VARIADIC ARRAY [ x , x ] ) FROM x ; BEGIN WORK ; CREATE TYPE avg_state AS ( total BIGINT , count BIGINT ) ; $$$$$$$$$$$$SELECT x ( x ) , x ( x ) FROM ( VALUES ( 1 ) , ( 1 ) ) t ( one ) ; SELECT x ( DISTINCT x ) , x ( DISTINCT x ) FROM ( VALUES ( 1 ) , ( 1 ) , ( 1 ) ) t ( one ) ; SELECT x ( DISTINCT x ) , x ( x ) FROM ( VALUES ( 1 ) , ( 1 ) ) t ( one ) ; SELECT x ( x ) FILTER ( WHERE x > 1 ) , x ( x ) FROM ( VALUES ( 1 ) , ( 1 ) ) t ( one ) ; SELECT x ( x ) , x ( x ) FROM ( VALUES ( 1 , 1 ) , ( 1 , 1 ) ) t ( one , two ) ; SELECT x ( 1 ) WITHIN GROUP ( ORDER BY x ) , x ( 1 ) WITHIN GROUP ( ORDER BY x ) FROM ( VALUES ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) ) t ( a ) ; $$$$$$$$SELECT x ( x ) , x ( x ) FROM ( VALUES ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) ) t ( one ) ; $$BEGIN ISOLATION LEVEL REPEATABLE READ ; $$ALTER TABLE x SET ( parallel_workers = 1 ) ; SET LOCAL parallel_setup_cost = 1 ; EXPLAIN ( COSTS OFF ) SELECT x ( x ) FROM x ; SET parallel_setup_cost = 1 ; SET parallel_tuple_cost = 1 ; SET min_parallel_table_scan_size = 1 ; SET max_parallel_workers_per_gather = 1 ; SET enable_indexonlyscan = off ; SELECT x ( x ) WITHIN GROUP ( ORDER BY x ) FROM ( VALUES ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) , ( 1 ) ) v ( x ) GROUP BY ( x ) ORDER BY 1 ; SELECT x ( x ORDER BY x ) FROM ( VALUES ( 1 , NULL ) ) AS d ( x , y ) ; SELECT x ( x ORDER BY x ) FROM ( VALUES ( 1 , 1 ) ) AS d ( x , y ) ; SELECT x || 'x' , CASE x || 'x' WHEN 'x' THEN 1 ELSE 1 END , x ( * ) FROM x ( ARRAY [ 'x' , 'x' ] ) u ( v ) GROUP BY x || 'x' ORDER BY 1 ; SELECT x || 'x' , CASE WHEN x || 'x' = 'x' THEN 1 ELSE 1 END , x ( * ) FROM x ( ARRAY [ 'x' , 'x' ] ) u ( v ) GROUP BY x || 'x' ORDER BY 1 ; EXPLAIN ( costs off ) SELECT 1 FROM x WHERE ( x , x ) IN ( SELECT x , x FROM x ) ; ~~~~~~~~~~~~~~~~~~~~~~~~~CREATE TABLE x ( x SERIAL PRIMARY KEY , x INT , x TEXT ) ; INSERT INTO x ( x , x ) VALUES ( 1 , x ( 'x' , 1 ) ) ; DELETE FROM x AS x WHERE x . x > 1 ; DELETE FROM x x WHERE x . x > 1 ; DELETE FROM x WHERE x > 1 ; CREATE TABLE x ( x date ) ; SELECT x AS Fifteen" FROM x ; SELECT x AS Nine" FROM x WHERE x < 'x' ; SELECT x AS Three" FROM x WHERE x BETWEEN 'x' AND 'x' ; SELECT x 'x' ; SET datestyle TO mdy ; SELECT x - x 'x' AS Days From 2K" FROM x ; SELECT x - x 'x' AS Days From Epoch" FROM x ; SELECT x 'x' - x 'x' AS One day" ; SELECT x 'x' - x 'x' AS Two days" ; SELECT x ( 1 , 1 , 1 ) ; SELECT x ( 1 , 1 , 0.000000 ) ; SELECT x ( 1 , 1 , 100.099998 ) ; SELECT x ( 1 , 1 , 2.100000 ) ; CREATE TABLE x ( x INT , x INT , x CHAR ( 1 ) , x CHAR ) ; INSERT INTO x VALUES ( 1 , 1 , 'x' , 'x' ) ; SELECT x , x ( * ) FROM x GROUP BY x . x ORDER BY x ; SELECT x ( * ) FROM x GROUP BY x . x ORDER BY x ; SELECT x ( * ) FROM x GROUP BY x ORDER BY x ; SELECT x . x , x ( * ) FROM x GROUP BY x ORDER BY x ; SELECT x FROM x ORDER BY x ; SELECT x ( * ) FROM x GROUP BY x ORDER BY x DESC ; SELECT x ( * ) FROM x ORDER BY 1 DESC ; SELECT x , x ( * ) FROM x GROUP BY 1 ORDER BY 1 ; SELECT x , x ( * ) FROM x GROUP BY 1 ; SELECT x ( * ) FROM x x , x y WHERE x . x = x . x GROUP BY x ORDER BY x ; SELECT x , x FROM x ORDER BY x ; SELECT x / 1 , x / 1 FROM x ORDER BY x / 1 ; SELECT x / 1 , x / 1 FROM x GROUP BY x / 1 ORDER BY x / 1 ; SELECT x . x , x ( * ) FROM x x , x y WHERE x . x = x . x GROUP BY x . x ORDER BY x . x ; SELECT x ( * ) FROM x x , x y WHERE x . x = x . x GROUP BY x . x ORDER BY x . x ; SELECT x ( x ) FROM x GROUP BY x ORDER BY x ; SELECT x ( x ) FROM x GROUP BY x / 1 ORDER BY x / 1 ; SELECT x ( x . x ) , x ( x ) FROM x GROUP BY x ( x ) ORDER BY x ( x ) ; SELECT x FROM x ORDER BY x ( x ) ; SELECT x ( x ) FROM x GROUP BY ( x + 1 ) / 1 ORDER BY ( x + 1 ) / 1 DESC ; SELECT x ( x . x ) FROM x x , x y WHERE x . x = x . x GROUP BY x / 1 ORDER BY x / 1 ; SELECT x . x / 1 , x ( x . x ) FROM x x , x y WHERE x . x = x . x GROUP BY x . x / 1 ORDER BY x . x / 1 ; SELECT x ( x ) FROM x x , x y WHERE x . x = x . x GROUP BY x . x / 1 ; CREATE TABLE x ( x INTEGER , x INTEGER , x TEXT ) ; CREATE TABLE x ( x INTEGER , x INTEGER ) ; INSERT INTO x VALUES ( NULL , NULL , 'x' ) ; INSERT INTO x VALUES ( NULL , 1 , 'x' ) ; INSERT INTO x VALUES ( NULL , NULL ) ; CREATE TEMP TABLE x ( ) ; SELECT 'x' AS xxx" , * FROM x AS tx ; SELECT 'x' AS xxx" , * FROM x tx ; SELECT 'x' AS xxx" , * FROM x AS t1 ( a , b , c ) ; SELECT 'x' AS xxx" , * FROM x t1 ( a , b , c ) ; SELECT 'x' AS xxx" , * FROM x t1 ( a , b , c ) , x t2 ( d , e ) ; SELECT 'x' AS xxx" , x . x , x . x FROM x t1 ( a , b , c ) , x t2 ( d , e ) WHERE x . x = x . x ; SELECT 'x' AS xxx" , * FROM x CROSS JOIN x ; SELECT 'x' AS xxx" , x , x , x FROM x CROSS JOIN x ; SELECT 'x' AS xxx" , x . x , x , x FROM x t1 CROSS JOIN x t2 ; SELECT 'x' AS xxx" , x , x , x FROM ( x CROSS JOIN x ) AS tx ( ii , jj , tt , ii2 , kk ) ; SELECT 'x' AS xxx" , x . x , x . x , x . x FROM ( x t1 ( a , b , c ) CROSS JOIN x t2 ( d , e ) ) AS tx ( ii , jj , tt , ii2 , kk ) ; SELECT 'x' AS xxx" , * FROM x CROSS JOIN x a CROSS JOIN x b ; SELECT 'x' AS xxx" , * FROM x INNER JOIN x USING ( i ) ; SELECT 'x' AS xxx" , * FROM x JOIN x USING ( i ) ; SELECT 'x' AS xxx" , * FROM x t1 ( a , b , c ) JOIN x t2 ( a , d ) USING ( a ) ORDER BY x , x ; SELECT 'x' AS xxx" , * FROM x t1 ( a , b , c ) JOIN x t2 ( a , b ) USING ( b ) ORDER BY x , x . x ; SELECT 'x' AS xxx" , * FROM x NATURAL JOIN x ; SELECT 'x' AS xxx" , * FROM x t1 ( a , b , c ) NATURAL JOIN x t2 ( a , d ) ; SELECT 'x' AS xxx" , * FROM x t1 ( a , b , c ) NATURAL JOIN x t2 ( d , a ) ; SELECT 'x' AS xxx" , * FROM x t1 ( a , b ) NATURAL JOIN x t2 ( a ) ; SELECT 'x' AS xxx" , * FROM x JOIN x ON ( x . x = x . x ) ; SELECT 'x' AS xxx" , * FROM x JOIN x ON ( x . x <= x . x ) ; SELECT 'x' AS xxx" , * FROM x LEFT OUTER JOIN x USING ( i ) ORDER BY x , x , x ; SELECT 'x' AS xxx" , * FROM x LEFT JOIN x USING ( i ) ORDER BY x , x , x ; SELECT 'x' AS xxx" , * FROM x RIGHT OUTER JOIN x USING ( i ) ; SELECT 'x' AS xxx" , * FROM x RIGHT JOIN x USING ( i ) ; SELECT 'x' AS xxx" , * FROM x FULL OUTER JOIN x USING ( i ) ORDER BY x , x , x ; SELECT 'x' AS xxx" , * FROM x FULL JOIN x USING ( i ) ORDER BY x , x , x ; SELECT 'x' AS xxx" , * FROM x LEFT JOIN x USING ( i ) WHERE ( x = 1 ) ; CREATE TEMP TABLE x ( x INT , x INT ) ; SELECT * FROM x LEFT JOIN x ON ( x = x AND x IS NOT NULL ) ; SELECT * FROM ( x LEFT JOIN x ON ( x = x ) ) LEFT JOIN x xx ( xx1 , xx2 ) ON ( x = x ) ; SELECT * FROM ( x LEFT JOIN x ON ( x = x ) ) LEFT JOIN x xx ( xx1 , xx2 ) ON ( x = x AND x IS NOT NULL ) ; SELECT * FROM ( x LEFT JOIN x ON ( x = x ) ) LEFT JOIN x xx ( xx1 , xx2 ) ON ( x = x ) WHERE ( x IS NOT NULL ) ; SELECT x ( * ) FROM x a WHERE x IN ( SELECT x FROM x b JOIN x c USING ( unique1 ) WHERE x . x = 1 ) ; SELECT x ( * ) FROM x x WHERE x . x IN ( SELECT x . x FROM x a , x b WHERE x . x = x . x ) AND x . x = 1 AND x . x IN ( SELECT x . x FROM x aa , x bb WHERE x . x = x . x ) ; SET geqo = ON ; SET geqo_threshold = 1 ; EXPLAIN ( costs off ) SELECT x , x , x , x FROM x RIGHT JOIN x ON x = x WHERE x < x AND x IS NULL ; SELECT x , x , x , x FROM x RIGHT JOIN x ON x = x WHERE x < x AND x IS NULL ; EXPLAIN ( costs off ) SELECT * FROM x FULL JOIN ( SELECT * FROM x ORDER BY x . x DESC , x . x ASC ) j2_tbl ON x . x = x . x AND x . x = x . x ; SELECT * FROM x FULL JOIN ( SELECT * FROM x ORDER BY x . x DESC , x . x ASC ) j2_tbl ON x . x = x . x AND x . x = x . x ; EXPLAIN ( costs off ) SELECT x ( * ) FROM ( SELECT * FROM x x ORDER BY x . x , x . x , x . x ) x LEFT JOIN ( SELECT * FROM x y ORDER BY x . x ) y ON x . x = x . x AND x . x = x . x AND x . x = x . x ; SELECT x ( * ) FROM ( SELECT * FROM x x ORDER BY x . x , x . x , x . x ) x LEFT JOIN ( SELECT * FROM x y ORDER BY x . x ) y ON x . x = x . x AND x . x = x . x AND x . x = x . x ; DELETE FROM x USING x table1 WHERE x . x = x . x ; DELETE FROM x USING x JOIN x USING ( a ) WHERE x . x > x . x ; DELETE FROM x USING x t3_other WHERE x . x = x . x AND x . x = x . x ; SELECT * FROM x LEFT JOIN x ON ( x . x = x . x ) ; SELECT x . x FROM x JOIN x ON ( x . x = x . x ) ; CREATE TEMP TABLE x ( x int4 , x int4 ) ; SET enable_hashjoin TO off ; SET enable_nestloop TO off ; SELECT x . * , x . * FROM x LEFT JOIN x ON x . x = x . x ; SELECT x . * , x . * FROM x RIGHT JOIN x ON x . x = x . x ; RESET enable_hashjoin ; RESET enable_nestloop ; SET work_mem TO 'x' ; SET enable_mergejoin TO off ; EXPLAIN ( costs off ) SELECT x ( * ) FROM x a , x b WHERE x . x = x . x AND ( x . x % 1 ) < 1 ; SELECT x ( * ) FROM x a , x b WHERE x . x = x . x AND ( x . x % 1 ) < 1 ; RESET work_mem ; RESET enable_mergejoin ; INSERT INTO x SELECT x , x ( 'x' , 1 ) FROM x ( 1 , 1 ) x ; INSERT INTO x VALUES ( 1 ) , ( 1 ) , ( 1 ) ; CREATE TEMP TABLE x ( x INT , x INT , x INT ) ; SELECT * FROM x , x WHERE x . x = x . x AND x . x = x . x - x . x ; SELECT * FROM x LEFT JOIN x ON ( x = x ) LEFT JOIN x ON ( x = x ) WHERE x = 1 ; $PREPARE foo ( bool ) AS SELECT x ( * ) FROM x a LEFT JOIN x b ON ( x . x = x . x AND EXISTS ( SELECT 1 FROM x c WHERE x . x = x . x AND 1 ) ) ; EXECUTE foo ( TRUE ) ; EXECUTE foo ( FALSE ) ; SET enable_mergejoin = 1 ; SET enable_hashjoin = 1 ; SET enable_nestloop = 1 ; CREATE TEMP TABLE x ( x INTEGER ) ; CREATE TEMP TABLE x ( x INTEGER , x INTEGER ) ; SELECT * FROM x LEFT JOIN x ON x = x AND x = x AND x = x ; CREATE TYPE mycomptype AS ( id INT , v BIGINT ) ; CREATE TEMP TABLE x ( x mycomptype ) ; EXPLAIN ( costs off ) SELECT x . x , x . x FROM x a , x b WHERE x . x = x . x ; SELECT x . x , x ( x . * ) FROM x t1 LEFT JOIN x t2 ON ( x . x = x . x ) GROUP BY x . x ORDER BY 1 ; SELECT x . x , x ( x . * ) FROM x t1 LEFT JOIN ( SELECT * FROM x ) t2 ON ( x . x = x . x ) GROUP BY x . x ORDER BY 1 ; SELECT x . x , x ( x . * ) FROM x t1 LEFT JOIN ( SELECT * FROM x OFFSET 1 ) t2 ON ( x . x = x . x ) GROUP BY x . x ORDER BY 1 ; SELECT x . x , x ( x . * ) FROM x t1 LEFT JOIN ( SELECT x , CASE WHEN x = 1 THEN 1 ELSE x END AS q2 FROM x ) t2 ON ( x . x = x . x ) GROUP BY x . x ORDER BY 1 ; CREATE TEMP TABLE x ( x CHAR NOT NULL , CONSTRAINT a_pk PRIMARY KEY ( x ) ) ; CREATE TEMP TABLE x ( x CHAR NOT NULL , x INTEGER NOT NULL , CONSTRAINT b_pk PRIMARY KEY ( x , x ) ) ; INSERT INTO x ( x , x ) VALUES ( 'x' , 1 ) ; EXPLAIN ( COSTS OFF ) SELECT x , x FROM ( SELECT COALESCE ( x , 1 ) AS qq FROM x a ) AS ss1 FULL OUTER JOIN ( SELECT COALESCE ( x , 1 ) AS qq FROM x b ) AS ss2 USING ( qq ) INNER JOIN x c ON x = x ; SELECT x , x FROM ( SELECT COALESCE ( x , 1 ) AS qq FROM x a ) AS ss1 FULL OUTER JOIN ( SELECT COALESCE ( x , 1 ) AS qq FROM x b ) AS ss2 USING ( qq ) INNER JOIN x c ON x = x ; CREATE TEMP TABLE x ( x INT PRIMARY KEY , x BOOLEAN , x BOOLEAN ) ; CREATE TEMP TABLE x ( x INT PRIMARY KEY , x INT , x BOOLEAN , x BOOLEAN , FOREIGN KEY ( x ) REFERENCES x ( x ) ) ; CREATE TEMP TABLE x ( x INT PRIMARY KEY , x INT , x BOOLEAN , FOREIGN KEY ( x ) REFERENCES x ( x ) ) ; INSERT INTO x VALUES ( 1 , TRUE , TRUE ) ; INSERT INTO x VALUES ( 1 , TRUE , FALSE ) ; INSERT INTO x VALUES ( 1 , FALSE , FALSE ) ; INSERT INTO x VALUES ( 1 , 1 , TRUE , TRUE ) ; INSERT INTO x VALUES ( 1 , 1 , TRUE , FALSE ) ; INSERT INTO x VALUES ( 1 , 1 , FALSE , FALSE ) ; INSERT INTO x VALUES ( 1 , 1 , TRUE ) ; INSERT INTO x VALUES ( 1 , 1 , FALSE ) ; SELECT * FROM x a FULL JOIN x b ON TRUE ; SELECT * FROM x a FULL JOIN x b ON FALSE ; CREATE TEMP TABLE x AS SELECT 1 AS q1 ; CREATE TEMP TABLE x AS SELECT 1 AS q2 ; EXPLAIN ( costs off ) SELECT x . x , x . x , x . x , x . x FROM x t1 INNER JOIN x i1 LEFT JOIN ( SELECT x . x , x . x , 1 AS d1 FROM ( SELECT 1 , 1 FROM x ) v1 ( x1 , x2 ) LEFT JOIN ( SELECT 1 , 1 FROM x ) v2 ( y1 , y2 ) ON x . x = x . x ) subq1 ON ( x . x = x . x ) ON ( x . x = x . x ) LEFT JOIN x t2 ON ( x . x = x . x ) WHERE x . x < 1 AND x . x > x . x ; SELECT x . x , x . x , x . x , x . x FROM x t1 INNER JOIN x i1 LEFT JOIN ( SELECT x . x , x . x , 1 AS d1 FROM ( SELECT 1 , 1 FROM x ) v1 ( x1 , x2 ) LEFT JOIN ( SELECT 1 , 1 FROM x ) v2 ( y1 , y2 ) ON x . x = x . x ) subq1 ON ( x . x = x . x ) ON ( x . x = x . x ) LEFT JOIN x t2 ON ( x . x = x . x ) WHERE x . x < 1 AND x . x > x . x ; EXPLAIN ( costs off ) SELECT x . x , x . x , x . x , x . x FROM x t1 INNER JOIN x i1 LEFT JOIN ( SELECT x . x , x . x , 1 AS d1 FROM ( VALUES ( 1 , 1 ) ) v1 ( x1 , x2 ) LEFT JOIN ( VALUES ( 1 , 1 ) ) v2 ( y1 , y2 ) ON x . x = x . x ) subq1 ON ( x . x = x . x ) ON ( x . x = x . x ) LEFT JOIN x t2 ON ( x . x = x . x ) WHERE x . x < 1 AND x . x > x . x ; SELECT x . x , x . x , x . x , x . x FROM x t1 INNER JOIN x i1 LEFT JOIN ( SELECT x . x , x . x , 1 AS d1 FROM ( VALUES ( 1 , 1 ) ) v1 ( x1 , x2 ) LEFT JOIN ( VALUES ( 1 , 1 ) ) v2 ( y1 , y2 ) ON x . x = x . x ) subq1 ON ( x . x = x . x ) ON ( x . x = x . x ) LEFT JOIN x t2 ON ( x . x = x . x ) WHERE x . x < 1 AND x . x > x . x ; $$EXPLAIN ( costs off ) SELECT x FROM x , x ( 1 ) x WHERE x = x ; EXPLAIN ( costs off ) SELECT x FROM x , LATERAL x ( 1 ) x WHERE x = x ; EXPLAIN ( costs off ) SELECT x , x FROM x JOIN x ( 1 ) x ON x = x ; EXPLAIN ( costs off ) SELECT x , x FROM x LEFT JOIN x ( 1 ) x ON x = x ; EXPLAIN ( costs off ) SELECT x , x FROM x RIGHT JOIN x ( 1 ) x ON x = x ; EXPLAIN ( costs off ) SELECT x , x FROM x FULL JOIN x ( 1 ) x ON x = x ; EXPLAIN ( costs off ) SELECT x FROM x , x ( 1 ) x WHERE x = 1 ; $$$$SELECT * FROM x ( 1 , 1 ) ; DROP FUNCTION x ( BIGINT , BIGINT ) ; EXPLAIN ( costs off ) SELECT * FROM x a JOIN x b ON ( x . x = 1 AND x . x = 1 ) OR ( x . x = 1 AND x . x = 1 ) ; EXPLAIN ( costs off ) SELECT * FROM x a JOIN x b ON ( x . x = 1 AND x . x = 1 ) OR ( ( x . x = 1 OR x . x = 1 ) AND x . x = 1 ) ; EXPLAIN ( costs off ) SELECT x ( * ) FROM x a JOIN x b ON x . x = x . x LEFT JOIN x c ON x . x = x . x AND x . x = x . x JOIN x ON x . x = x ; SELECT x ( * ) FROM x a JOIN x b ON x . x = x . x LEFT JOIN x c ON x . x = x . x AND x . x = x . x JOIN x ON x . x = x ; EXPLAIN ( costs off ) SELECT x . x FROM x a JOIN x b ON x . x = x . x LEFT JOIN x c ON x . x = 1 AND x . x = x . x JOIN x i1 ON x . x = x RIGHT JOIN x i2 ON x . x = x . x ORDER BY 1 ; SELECT x . x FROM x a JOIN x b ON x . x = x . x LEFT JOIN x c ON x . x = 1 AND x . x = x . x JOIN x i1 ON x . x = x RIGHT JOIN x i2 ON x . x = x . x ORDER BY 1 ; EXPLAIN ( costs off ) SELECT * FROM ( VALUES ( 1 , ARRAY [ 1 , 1 ] ) , ( 1 , ARRAY [ 1 , 1 ] ) ) AS v1 ( v1x , v1ys ) LEFT JOIN ( VALUES ( 1 , 1 ) , ( 1 , 1 ) ) AS v2 ( v2x , v2y ) ON x = x JOIN x ( x ) AS u1 ( u1y ) ON x = x ; SELECT * FROM ( VALUES ( 1 , ARRAY [ 1 , 1 ] ) , ( 1 , ARRAY [ 1 , 1 ] ) ) AS v1 ( v1x , v1ys ) LEFT JOIN ( VALUES ( 1 , 1 ) , ( 1 , 1 ) ) AS v2 ( v2x , v2y ) ON x = x JOIN x ( x ) AS u1 ( u1y ) ON x = x ; EXPLAIN ( costs off ) SELECT x , x , x , x FROM x a LEFT JOIN x b ON x = x WHERE COALESCE ( x , 1 ) = x AND x = COALESCE ( x , 1 ) ; SELECT x , x , x , x FROM x a LEFT JOIN x b ON x = x WHERE COALESCE ( x , 1 ) = x AND x = COALESCE ( x , 1 ) ; EXPLAIN ( costs off ) SELECT x , x , CASE WHEN x IS NULL THEN x ELSE 1 END FROM x a LEFT JOIN x b ON x = x WHERE ( CASE WHEN x IS NULL THEN x ELSE 1 END ) = 1 ; SELECT x , x , CASE WHEN x IS NULL THEN x ELSE 1 END FROM x a LEFT JOIN x b ON x = x WHERE ( CASE WHEN x IS NULL THEN x ELSE 1 END ) = 1 ; EXPLAIN ( costs off ) SELECT x . x , x . x , x . x , COALESCE ( x . x , x . x ) FROM x a LEFT JOIN x b ON x . x = x . x LEFT JOIN x c ON x . x = COALESCE ( x . x , x . x ) WHERE x . x < 1 AND COALESCE ( x . x , x . x ) = 1 ; SELECT x . x , x . x , x . x , COALESCE ( x . x , x . x ) FROM x a LEFT JOIN x b ON x . x = x . x LEFT JOIN x c ON x . x = COALESCE ( x . x , x . x ) WHERE x . x < 1 AND COALESCE ( x . x , x . x ) = 1 ; SELECT * FROM x t1 INNER JOIN x i8 ON x . x = 1 RIGHT JOIN x t2 ON x . x = 'x' LEFT JOIN x i4 ON x . x = x . x ; EXPLAIN ( costs off ) SELECT * FROM ( SELECT 1 AS id ) AS xx LEFT JOIN ( x AS a1 FULL JOIN ( SELECT 1 AS id ) AS yy ON ( x . x = x . x ) ) ON ( x . x = COALESCE ( x . x ) ) ; SELECT * FROM ( SELECT 1 AS id ) AS xx LEFT JOIN ( x AS a1 FULL JOIN ( SELECT 1 AS id ) AS yy ON ( x . x = x . x ) ) ON ( x . x = COALESCE ( x . x ) ) ; EXPLAIN ( costs off ) SELECT * FROM x a LEFT JOIN x b ON x = x WHERE x = 1 ; EXPLAIN ( costs off ) SELECT * FROM x a FULL JOIN x b USING ( unique2 ) WHERE x = 1 ; SELECT x . x , x . x FROM x a LEFT JOIN x b ON x . x = COALESCE ( x . x , 1 ) WHERE COALESCE ( x . x , 1 ) > 1 ; CREATE TEMP TABLE x ( x INT PRIMARY KEY , x INT ) ; INSERT INTO x VALUES ( 1 , 1 ) , ( 1 , NULL ) ; INSERT INTO x VALUES ( 1 , 1 ) , ( 1 , 1 ) , ( 1 , 1 ) ; EXPLAIN ( costs off ) SELECT x . * FROM x LEFT JOIN x ON x . x = x . x ; EXPLAIN ( costs off ) SELECT x . * FROM x LEFT JOIN ( x LEFT JOIN x ON x . x = x . x ) ON ( x . x = x . x ) ; EXPLAIN ( costs off ) SELECT x FROM x WHERE x IN ( SELECT x . x FROM x LEFT JOIN x ON x . x = x . x ) ; EXPLAIN ( costs off ) SELECT x . * FROM x LEFT JOIN ( SELECT * FROM x GROUP BY x . x , x . x ) s ON x . x = x . x AND x . x = x . x ; EXPLAIN ( costs off ) SELECT x . * FROM x LEFT JOIN ( SELECT DISTINCT * FROM x ) s ON x . x = x . x AND x . x = x . x ; EXPLAIN ( costs off ) SELECT x . * FROM x LEFT JOIN ( SELECT * FROM x GROUP BY x . x , x . x ) s ON x . x = x . x ; EXPLAIN ( costs off ) SELECT x . * FROM x LEFT JOIN ( SELECT DISTINCT * FROM x ) s ON x . x = x . x ; EXPLAIN ( costs off ) SELECT x . * FROM x LEFT JOIN ( SELECT x FROM x UNION SELECT x FROM x ) s ON x . x = x . x ; EXPLAIN ( costs off ) SELECT x . * FROM x i8 LEFT JOIN ( SELECT x FROM x GROUP BY x ) i4 ON x . x = x . x ; EXPLAIN ( costs off ) SELECT 1 FROM ( SELECT x . x FROM x LEFT JOIN x ON x . x = x . x ) q , LATERAL x ( 1 , x . x ) gs ( i ) WHERE x . x = x . x ; CREATE TEMP TABLE x ( x INT UNIQUE , x INT ) ; SELECT x . * FROM x p LEFT JOIN x c ON ( x . x = x . x ) ; EXPLAIN ( costs off ) SELECT x . * FROM x p LEFT JOIN x c ON ( x . x = x . x ) ; SELECT x . * , x FROM x p LEFT JOIN ( SELECT x . * , TRUE AS linked FROM x c ) AS ss ON ( x . x = x . x ) ; EXPLAIN ( costs off ) SELECT x . * , x FROM x p LEFT JOIN ( SELECT x . * , TRUE AS linked FROM x c ) AS ss ON ( x . x = x . x ) ; SELECT x . * FROM x p LEFT JOIN x c ON ( x . x = x . x ) WHERE x . x = 1 AND x . x = 1 ; EXPLAIN ( costs off ) SELECT x . * FROM x p LEFT JOIN x c ON ( x . x = x . x ) WHERE x . x = 1 AND x . x = 1 ; SELECT x . * FROM ( x p LEFT JOIN x c ON ( x . x = x . x ) ) JOIN x x ON x . x = x . x WHERE x . x = 1 AND x . x = 1 ; ================================================ FILE: data/fuzz_root/pqsql_init_lib/x1 ================================================ CREATE TABLE v0 ( v2 INT , v1 INT ) ; INSERT INTO v0 ( v1 , v2 ) VALUES ( 3 , 0 ) ; SELECT * , '1995-03-15' FROM v0 WHERE v1 NOT IN ( 10 ) AND v2 NOT IN ( 3 ) ORDER BY v2 DESC ; ================================================ FILE: data/fuzz_root/pqsql_init_lib/x3 ================================================ CREATE TABLE v0 ( v1 INTEGER PRIMARY KEY ) ; CREATE TABLE v2 AS SELECT NULL FROM v0 ; CREATE TABLE v3 ( v4 INTEGER PRIMARY KEY , v5 INT ) ; INSERT INTO v0 ( v1 ) VALUES ( 10 ) ,( 12 ) ; SELECT * FROM v3 AS a JOIN v0 ON NULL = 10.100000 WHERE v1 = v1 AND v1 = 1 ; ================================================ FILE: data/fuzz_root/pqsql_input/cs_is ================================================ create v0(v1 INT, v2 INT, v3 INT NOT NULL); insert into v0(v1,v3) values(10,10); ================================================ FILE: data/fuzz_root/pqsql_input/cs_ss ================================================ create table v0(v1 INT, v2 INT); select v1, v2 from v0; ================================================ FILE: data/fuzz_root/pqsql_input/ct_ci_in_drop ================================================ create table v0(v1 int); create index v1 on v0(v1); insert into v0 values(1); update v0 set v1 = 1 where v1 = 3; select v1 from v0; ================================================ FILE: data/fuzz_root/pqsql_input/ct_ci_ri ================================================ create table v0(v1 INT, v2 INT); create index v3 on v0(v1); reindex table v0; ================================================ FILE: data/fuzz_root/pqsql_input/ct_cv_in_sel ================================================ create table v0(v1 int ,v2 int); create view v2 as select v1, v2 from v0; insert into v2 values(1, 1); select v1 from v2; ================================================ FILE: data/fuzz_root/pqsql_input/ct_cv_is ================================================ create table v0(v1 INT, v2 INT, v3 FLOAT, v4 INT); create view v5 AS select * from v0; insert into v5(v3, v4) values(10, 'duck'); ================================================ FILE: data/fuzz_root/pqsql_input/ct_cv_ss ================================================ create table v0(v1 FLOAT); create view v2 AS select * from v0; select * from v2; ================================================ FILE: data/fuzz_root/pqsql_input/ct_in_alter_select ================================================ create temp table v0(v1 int); insert into v0 values (1); alter table v0 drop column v1; ================================================ FILE: data/fuzz_root/pqsql_input/ct_ins_drop ================================================ create table v0(v1 int); insert into v0 values( 1 ); drop table v0; ================================================ FILE: data/fuzz_root/pqsql_input/ct_is_ss ================================================ create table v0(v1 INT, v2 STRING); insert into table v0(v1) values(10); select v1 from v0; ================================================ FILE: data/fuzz_root/pqsql_input/ct_is_up ================================================ create table v0(v1 INT); insert into v0(v1) values (10); update v0 set v1=3; ================================================ FILE: data/fuzz_root/pqsql_input/ct_rn_is ================================================ create table v0(v1 STRING); alter table v0 RENAME TO v2; insert into v2(v1) values(10); ================================================ FILE: data/fuzz_root/pqsql_input/ct_ss_ds ================================================ create table v0(v1 VARCHAR(10)); select * from v0; drop table v0; ================================================ FILE: data/fuzz_root/pqsql_input/ct_st_re ================================================ create table v0(v1 int, v2 int, v3 char); select v1 from v0 union select v2 from v0; reindex table v0; ================================================ FILE: data/fuzz_root/pqsql_input/ct_st_union ================================================ create table v0(v1 int, v2 int, v3 char); select v1 from v0 union select v2 from v0; ================================================ FILE: data/fuzz_root/pqsql_input/trigger ================================================ CREATE TABLE v0 ( v1 INT , v2 INT ) ; CREATE FUNCTION v3 ( ) RETURN TRIGGER AS $$ BEGIN UPDATE v0 set v1=10 where v1=5 ;END $$ LANGUAGE PLPGSQL ; CREATE TRIGGER v5 BEFORE INSERT OF v1 ON v0 FOR EACH ROW EXECUTE PROCEDURE v3 ( ) ; insert into v0(v1, v2) values (1,1); ================================================ FILE: data/fuzz_root/pragma ================================================ application_id = _empty_ application_id = _int_ auto_vacuum = _empty_ auto_vacuum = 0 auto_vacuum = NONE auto_vacuum = 1 auto_vacuum = FULL auto_vacuum = 2 auto_vacuum = INCREMENTAL automatic_index = _empty_ automatic_index = _boolean_ busy_timeout = _empty_ busy_timeout = _int_ cache_size = _empty_ cache_size = _int_ cache_size = _neg_int_ cache_spill = _empty_ cache_spill = _boolean_ cache_spill = _int_ case_sensitive_like = _boolean_ cell_size_check = _empty_ cell_size_check = _boolean_ checkpoint_fullfsync = _empty_ checkpoint_fullfsync = _boolean_ collation_list = _empty_ compile_options = _empty_ data_version = _empty_ database_list = _empty_ defer_foreign_keys = _empty_ defer_foreign_keys = _boolean_ encoding = _empty_ encoding = 'UTF-8' encoding = 'UTF-16' encoding = 'UTF-16le' encoding = 'UTF-16be' foreign_key_check = _empty_ foreign_keys = _empty_ foreign_keys = _boolean_ freelist_count = _empty_ fullfsync = _empty_ fullfsync = _boolean_ function_list = _empty_ incremental_vacuum = _empty_ integrity_check = _empty_ integrity_check = _int_ journal_mode = _empty_ journal_mode = DELETE journal_mode = TRUNCATE journal_mode = PERSIST journal_mode = MEMORY journal_mode = WAL journal_mode = OFF journal_size_limit journal_size_limit = _int_ legacy_alter_table = _empty_ legacy_alter_table = _boolean_ legacy_file_format = _empty_ legacy_file_format = _boolean_ locking_mode = _empty_ locking_mode = NORMAL locking_mode = EXCLUSIVE max_page_count = _empty_ max_page_count = _int_ mmap_size = _empty_ mmap_size = _int_ module_list = _empty_ optimize = _empty_ page_count = _empty_ page_size = _empty_ page_size = _int_ parser_trace = _boolean_ pragma_list = _empty_ query_only = _empty_ query_only = _boolean_ quick_check = _empty_ quick_check = _int_ read_uncommitted = _empty_ read_uncommitted = _boolean_ recursive_triggers = _empty_ recursive_triggers = _boolean_ reverse_unordered_selects = _empty_ reverse_unordered_selects = _boolean_ version = _empty_ version = _int_ secure_delete = _empty_ secure_delete = _boolean_ secure_delete = FAST shrink_memory = _empty_ soft_heap_limit = _empty_ soft_heap_limit = _int_ stats = _empty_ synchronous = _empty_ synchronous = 0 synchronous = OFF synchronous = 1 synchronous = NORMAL synchronous = 2 synchronous = FULL synchronous = 3 synchronous = EXTRA temp_store = _empty_ temp_store = 0 temp_store = DEFAULT temp_store = 1 temp_store = FILE temp_store = 2 temp_store = MEMORY threads = _empty_ threads = _int_ user_version = _empty_ user_version = _int_ vdbe_addoptrace = _boolean_ vdbe_debug = _boolean_ vdbe_listing = _boolean_ vdbe_trace = _boolean_ wal_autocheckpoint = _empty_ wal_autocheckpoint = _int_ wal_checkpoint = _empty_ writable_= _boolean_ ================================================ FILE: data/run.sh ================================================ #!/bin/bash export AFL_CUSTOM_MUTATOR_ONLY=1 #export AFL_CUSTOM_MUTATOR_LIBRARY=$(pwd)/build/libpostgresql_mutator.so export AFL_CUSTOM_MUTATOR_LIBRARY=$(pwd)/build/libmysql_mutator.so #export AFL_CUSTOM_MUTATOR_LIBRARY=$(pwd)/build/libsqlite_mutator.so export AFL_DISABLE_TRIM=1 export AFL_AUTORESUME=1 export AFL_DEBUG=1 #export AFL_NO_UI=1 export AFL_FORKSRV_INIT_TMOUT=1000000 export SQUIRREL_CONFIG=data/config_mysql.yml #export SQUIRREL_CONFIG=./config_mysql.yml ./AFLplusplus/afl-fuzz -i ./data/fuzz_root/mysql_input -o output -S "$1" -- ./build/db_driver #../../afl-fuzz -i fuzz_root/input -o output -S $1 -- ./tests/test_bins/harness #../../afl-fuzz -i fuzz_root/mysql_input -o output -S $1 -- ./build/db_driver ./config_mysql.yml ================================================ FILE: lint.cmake ================================================ # additional target to perform clang - format run, requires clang - format # get all project files file(GLOB_RECURSE ALL_SOURCE_FILES srcs/*.cc srcs/*.cpp srcs/*.h) # foreach(SOURCE_FILE ${ALL_SOURCE_FILES}) string(FIND ${SOURCE_FILE} # ${PROJECT_TRDPARTY_DIR} PROJECT_TRDPARTY_DIR_FOUND) if(NOT # ${PROJECT_TRDPARTY_DIR_FOUND} EQUAL -1) list(REMOVE_ITEM ALL_SOURCE_FILES # ${SOURCE_FILE}) endif() endforeach() # set(clangformat_style "{BasedOnStyle: Google, IndentWidth: 2}") add_custom_target(clangformat COMMAND clang-format -style=file -i ${ALL_SOURCE_FILES}) add_custom_target(formatcheck COMMAND clang-format -style=file --Werror ${ALL_SOURCE_FILES}) file(GLOB ALL_NEW_FILES srcs/*.cc srcs/*.h srcs/internal/*/*.h srcs/internal/*/*.cc srcs/utils/* ) add_custom_target( lint COMMAND clang-tidy # -p build) ${ALL_NEW_FILES} -p build) ================================================ FILE: scripts/.gitignore ================================================ # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] *$py.class # C extensions *.so # Distribution / packaging .Python build/ develop-eggs/ dist/ downloads/ eggs/ .eggs/ lib/ lib64/ parts/ sdist/ var/ wheels/ pip-wheel-metadata/ share/python-wheels/ *.egg-info/ .installed.cfg *.egg MANIFEST # PyInstaller # Usually these files are written by a python script from a template # before PyInstaller builds the exe, so as to inject date/other infos into it. *.manifest *.spec # Installer logs pip-log.txt pip-delete-this-directory.txt # Unit test / coverage reports htmlcov/ .tox/ .nox/ .coverage .coverage.* .cache nosetests.xml coverage.xml *.cover *.py,cover .hypothesis/ .pytest_cache/ # Translations *.mo *.pot # Django stuff: *.log local_settings.py db.sqlite3 db.sqlite3-journal # Flask stuff: instance/ .webassets-cache # Scrapy stuff: .scrapy # Sphinx documentation docs/_build/ # PyBuilder target/ # Jupyter Notebook .ipynb_checkpoints # IPython profile_default/ ipython_config.py # pyenv .python-version # pipenv # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. # However, in case of collaboration, if having platform-specific dependencies or dependencies # having no cross-platform support, pipenv may install dependencies that don't work, or not # install all needed dependencies. #Pipfile.lock # PEP 582; used by e.g. github.com/David-OConnor/pyflow __pypackages__/ # Celery stuff celerybeat-schedule celerybeat.pid # SageMath parsed files *.sage.py # Environments .env .venv env/ venv/ ENV/ env.bak/ venv.bak/ # Spyder project settings .spyderproject .spyproject # Rope project settings .ropeproject # mkdocs documentation /site # mypy .mypy_cache/ .dmypy.json dmypy.json # Pyre type checker .pyre/ ================================================ FILE: scripts/.pylintrc ================================================ # This Pylint rcfile contains a best-effort configuration to uphold the # best-practices and style described in the Google Python style guide: # https://google.github.io/styleguide/pyguide.html # # Its canonical open-source location is: # https://google.github.io/styleguide/pylintrc [MASTER] # Files or directories to be skipped. They should be base names, not paths. ignore=third_party # Files or directories matching the regex patterns are skipped. The regex # matches against base names, not paths. ignore-patterns= # Pickle collected data for later comparisons. persistent=no # List of plugins (as comma separated values of python modules names) to load, # usually to register additional checkers. load-plugins= # Use multiple processes to speed up Pylint. jobs=4 # Allow loading of arbitrary C extensions. Extensions are imported into the # active Python interpreter and may run arbitrary code. unsafe-load-any-extension=no [MESSAGES CONTROL] # Only show warnings with the listed confidence levels. Leave empty to show # all. Valid levels: HIGH, INFERENCE, INFERENCE_FAILURE, UNDEFINED confidence= # Enable the message, report, category or checker with the given id(s). You can # either give multiple identifier separated by comma (,) or put this option # multiple time (only on the command line, not in the configuration file where # it should appear only once). See also the "--disable" option for examples. #enable= # Disable the message, report, category or checker with the given id(s). You # can either give multiple identifiers separated by comma (,) or put this # option multiple times (only on the command line, not in the configuration # file where it should appear only once).You can also use "--disable=all" to # disable everything first and then reenable specific checks. For example, if # you want to run only the similarities checker, you can use "--disable=all # --enable=similarities". If you want to run only the classes checker, but have # no Warning level messages displayed, use"--disable=all --enable=classes # --disable=W" disable=abstract-method, apply-builtin, arguments-differ, attribute-defined-outside-init, backtick, bad-option-value, basestring-builtin, buffer-builtin, c-extension-no-member, consider-using-enumerate, cmp-builtin, cmp-method, coerce-builtin, coerce-method, delslice-method, div-method, duplicate-code, eq-without-hash, execfile-builtin, file-builtin, filter-builtin-not-iterating, fixme, getslice-method, global-statement, hex-method, idiv-method, implicit-str-concat-in-sequence, import-error, import-self, import-star-module-level, inconsistent-return-statements, input-builtin, intern-builtin, invalid-str-codec, locally-disabled, long-builtin, long-suffix, map-builtin-not-iterating, misplaced-comparison-constant, missing-function-docstring, metaclass-assignment, next-method-called, next-method-defined, no-absolute-import, no-else-break, no-else-continue, no-else-raise, no-else-return, no-init, # added no-member, no-name-in-module, no-self-use, nonzero-method, oct-method, old-division, old-ne-operator, old-octal-literal, old-raise-syntax, parameter-unpacking, print-statement, raising-string, range-builtin-not-iterating, raw_input-builtin, rdiv-method, reduce-builtin, relative-import, reload-builtin, round-builtin, setslice-method, signature-differs, standarderror-builtin, suppressed-message, sys-max-int, too-few-public-methods, too-many-ancestors, too-many-arguments, too-many-boolean-expressions, too-many-branches, too-many-instance-attributes, too-many-locals, too-many-nested-blocks, too-many-public-methods, too-many-return-statements, too-many-statements, trailing-newlines, unichr-builtin, unicode-builtin, unnecessary-pass, unpacking-in-except, useless-else-on-loop, useless-object-inheritance, useless-suppression, using-cmp-argument, wrong-import-order, xrange-builtin, zip-builtin-not-iterating, missing-final-newline, line-too-long, redefined-outer-name, [REPORTS] # Set the output format. Available formats are text, parseable, colorized, msvs # (visual studio) and html. You can also give a reporter class, eg # mypackage.mymodule.MyReporterClass. output-format=text # Tells whether to display a full report or only the messages reports=no # Python expression which should return a note less than 10 (10 is the highest # note). You have access to the variables errors warning, statement which # respectively contain the number of errors / warnings messages and the total # number of statements analyzed. This is used by the global evaluation report # (RP0004). evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10) # Template used to display messages. This is a python new-style format string # used to format the message information. See doc for all details #msg-template= [BASIC] # Good variable names which should always be accepted, separated by a comma good-names=main,_ # Bad variable names which should always be refused, separated by a comma bad-names= # Colon-delimited sets of names that determine each other's naming style when # the name regexes allow several styles. name-group= # Include a hint for the correct naming format with invalid-name include-naming-hint=no # List of decorators that produce properties, such as abc.abstractproperty. Add # to this list to register other decorators that produce valid properties. property-classes=abc.abstractproperty,cached_property.cached_property,cached_property.threaded_cached_property,cached_property.cached_property_with_ttl,cached_property.threaded_cached_property_with_ttl # Regular expression matching correct function names function-rgx=^(?:(?PsetUp|tearDown|setUpModule|tearDownModule)|(?P_?[A-Z][a-zA-Z0-9]*)|(?P_?[a-z][a-z0-9_]*))$ # Regular expression matching correct variable names variable-rgx=^[a-z][a-z0-9_]*$ # Regular expression matching correct constant names const-rgx=^(_?[A-Z][A-Z0-9_]*|__[a-z0-9_]+__|_?[a-z][a-z0-9_]*)$ # Regular expression matching correct attribute names attr-rgx=^_{0,2}[a-z][a-z0-9_]*$ # Regular expression matching correct argument names argument-rgx=^[a-z][a-z0-9_]*$ # Regular expression matching correct class attribute names class-attribute-rgx=^(_?[A-Z][A-Z0-9_]*|__[a-z0-9_]+__|_?[a-z][a-z0-9_]*)$ # Regular expression matching correct inline iteration names inlinevar-rgx=^[a-z][a-z0-9_]*$ # Regular expression matching correct class names class-rgx=^_?[A-Z][a-zA-Z0-9]*$ # Regular expression matching correct module names module-rgx=^(_?[a-z][a-z0-9_]*|__init__)$ # Regular expression matching correct method names method-rgx=(?x)^(?:(?P_[a-z0-9_]+__|runTest|setUp|tearDown|setUpTestCase|tearDownTestCase|setupSelf|tearDownClass|setUpClass|(test|assert)_*[A-Z0-9][a-zA-Z0-9_]*|next)|(?P_{0,2}[A-Z][a-zA-Z0-9_]*)|(?P_{0,2}[a-z][a-z0-9_]*))$ # Regular expression which should only match function or class names that do # not require a docstring. no-docstring-rgx=(__.*__|main|test.*|.*test|.*Test)$ # Minimum line length for functions/classes that require docstrings, shorter # ones are exempt. docstring-min-length=10 [TYPECHECK] # List of decorators that produce context managers, such as # contextlib.contextmanager. Add to this list to register other decorators that # produce valid context managers. contextmanager-decorators=contextlib.contextmanager,contextlib2.contextmanager # Tells whether missing members accessed in mixin class should be ignored. A # mixin class is detected if its name ends with "mixin" (case insensitive). ignore-mixin-members=yes # List of module names for which member attributes should not be checked # (useful for modules/projects where namespaces are manipulated during runtime # and thus existing member attributes cannot be deduced by static analysis. It # supports qualified module names, as well as Unix pattern matching. ignored-modules= # List of class names for which member attributes should not be checked (useful # for classes with dynamically set attributes). This supports the use of # qualified names. ignored-classes=optparse.Values,thread._local,_thread._local # List of members which are set dynamically and missed by pylint inference # system, and so shouldn't trigger E1101 when accessed. Python regular # expressions are accepted. generated-members= [FORMAT] # Maximum number of characters on a single line. max-line-length=80 # TODO(https://github.com/PyCQA/pylint/issues/3352): Direct pylint to exempt # lines made too long by directives to pytype. # Regexp for a line that is allowed to be longer than the limit. ignore-long-lines=(?x)( ^\s*(\#\ )??$| ^\s*(from\s+\S+\s+)?import\s+.+$) # Allow the body of an if to be on the same line as the test if there is no # else. single-line-if-stmt=yes # List of optional constructs for which whitespace checking is disabled. `dict- # separator` is used to allow tabulation in dicts, etc.: {1 : 1,\n222: 2}. # `trailing-comma` allows a space between comma and closing bracket: (a, ). # `empty-line` allows space-only lines. # Maximum number of lines in a module max-module-lines=99999 # String used as indentation unit. The internal Google style guide mandates 2 # spaces. Google's externaly-published style guide says 4, consistent with # PEP 8. Here, we use 2 spaces, for conformity with many open-sourced Google # projects (like TensorFlow). indent-string=' ' # Number of spaces of indent required inside a hanging or continued line. indent-after-paren=4 # Expected format of line ending, e.g. empty (any line ending), LF or CRLF. expected-line-ending-format= [MISCELLANEOUS] # List of note tags to take in consideration, separated by a comma. notes=TODO [STRING] # This flag controls whether inconsistent-quotes generates a warning when the # character used as a quote delimiter is used inconsistently within a module. check-quote-consistency=yes [VARIABLES] # Tells whether we should check for unused import in __init__ files. init-import=no # A regular expression matching the name of dummy variables (i.e. expectedly # not used). dummy-variables-rgx=^\*{0,2}(_$|unused_|dummy_) # List of additional names supposed to be defined in builtins. Remember that # you should avoid to define new builtins when possible. additional-builtins= # List of strings which can identify a callback function by name. A callback # name must start or end with one of those strings. callbacks=cb_,_cb # List of qualified module names which can have objects that can redefine # builtins. redefining-builtins-modules=six,six.moves,past.builtins,future.builtins,functools [LOGGING] # Logging modules to check that the string format arguments are in logging # function parameter format logging-modules=logging,absl.logging,tensorflow.io.logging [SIMILARITIES] # Minimum lines number of a similarity. min-similarity-lines=4 # Ignore comments when computing similarities. ignore-comments=yes # Ignore docstrings when computing similarities. ignore-docstrings=yes # Ignore imports when computing similarities. ignore-imports=no [SPELLING] # Spelling dictionary name. Available dictionaries: none. To make it working # install python-enchant package. spelling-dict= # List of comma separated words that should not be checked. spelling-ignore-words= # A path to a file that contains private dictionary; one word per line. spelling-private-dict-file= # Tells whether to store unknown words to indicated private dictionary in # --spelling-private-dict-file option instead of raising a message. spelling-store-unknown-words=no [IMPORTS] # Deprecated modules which should not be used, separated by a comma deprecated-modules=regsub, TERMIOS, Bastion, rexec, sets # Create a graph of every (i.e. internal and external) dependencies in the # given file (report RP0402 must not be disabled) import-graph= # Create a graph of external dependencies in the given file (report RP0402 must # not be disabled) ext-import-graph= # Create a graph of internal dependencies in the given file (report RP0402 must # not be disabled) int-import-graph= # Force import order to recognize a module as part of the standard # compatibility libraries. known-standard-library= # Force import order to recognize a module as part of a third party library. known-third-party=enchant, absl # Analyse import fallback blocks. This can be used to support both Python 2 and # 3 compatible code, which means that the block might have code that exists # only in one or another interpreter, leading to false positives when analysed. analyse-fallback-blocks=no [CLASSES] # List of method names used to declare (i.e. assign) instance attributes. defining-attr-methods=__init__, __new__, setUp # List of member names, which should be excluded from the protected access # warning. exclude-protected=_asdict, _fields, _replace, _source, _make # List of valid names for the first argument in a class method. valid-classmethod-first-arg=cls, class_ # List of valid names for the first argument in a metaclass class method. valid-metaclass-classmethod-first-arg=mcs [EXCEPTIONS] # Exceptions that will emit a warning when being caught. Defaults to # "Exception" overgeneral-exceptions=StandardError, Exception, BaseException ================================================ FILE: scripts/dockers/mariadb/Dockerfile ================================================ from ubuntu:22.04 LABEL maintainer="Squirrel" # common config RUN apt-get update RUN apt-get -y install make cmake build-essential vim sudo git \ clang libmysqlclient-dev ninja-build pkg-config clang-format \ libpq-dev libyaml-cpp-dev lld python3-fire RUN mkdir -p /home && \ groupadd dobigthing && \ useradd -l -K UMASK=0000 -d /home -g dobigthing dobigthing && \ chown dobigthing:dobigthing /home RUN echo "dobigthing:dobigthing" | chpasswd && usermod -a -G sudo dobigthing RUN chmod +w /etc/sudoers && \ echo "%dobigthing ALL=(ALL:ALL)NOPASSWD:ALL" >> /etc/sudoers && \ chmod -w /etc/sudoers # install mariadb-server RUN apt-get -y install apt-transport-https curl software-properties-common gnutls-dev RUN curl -o /etc/apt/trusted.gpg.d/mariadb_release_signing_key.asc \ 'https://mariadb.org/mariadb_release_signing_key.asc' RUN echo "deb https://ftp.osuosl.org/pub/mariadb/repo/10.10/ubuntu jammy main" >> /etc/apt/sources.list RUN echo "deb-src https://ftp.osuosl.org/pub/mariadb/repo/10.10/ubuntu jammy main" >> /etc/apt/sources.list RUN apt-get update && apt-get -y build-dep mariadb USER dobigthing WORKDIR /home RUN git clone https://github.com/Dobigthing666/Squirrel.git && \ cd Squirrel && git submodule update --init && \ cmake -S . -B build -DCMAKE_BUILD_TYPE=Release && \ cmake --build build -j && \ cd AFLplusplus/ && LLVM_CONFIG=llvm-config-14 make -j20 RUN git clone --depth=1 https://github.com/MariaDB/server.git mariadb && \ mkdir bld && cd bld/ && \ CC=/home/Squirrel/AFLplusplus/afl-clang-fast CXX=/home/Squirrel/AFLplusplus/afl-clang-fast++ cmake ../mariadb/ && \ make -j20 && sudo cmake --install . --prefix /usr/local/mysql/ RUN sudo chown dobigthing:dobigthing /usr/local/mysql/ -R && \ cd /usr/local/mysql/ && \ scripts/mysql_install_db --user=dobigthing # Get map size and save it to /tmp/mapsize RUN AFL_DEBUG=1 __AFL_SHM_ID=1234 /usr/local/mysql/bin/mariadbd 2>&1 | tail -n 1 | cut -d"," -f8 | cut -d" " -f 3 > /tmp/mapsize WORKDIR /home/Squirrel/scripts/utils ENTRYPOINT AFL_MAP_SIZE=$(cat /tmp/mapsize) python3 run.py mariadb ../../data/fuzz_root/mysql_input/ ================================================ FILE: scripts/dockers/mysql/Dockerfile ================================================ from ubuntu:22.04 LABEL maintainer="Squirrel" # common config RUN apt-get update RUN apt-get -y install make cmake build-essential vim sudo git \ clang libmysqlclient-dev ninja-build pkg-config clang-format \ libpq-dev libyaml-cpp-dev lld llvm bison python3-fire RUN mkdir -p /home && \ groupadd dobigthing && \ useradd -l -K UMASK=0000 -d /home -g dobigthing dobigthing && \ chown dobigthing:dobigthing /home RUN echo "dobigthing:dobigthing" | chpasswd && usermod -a -G sudo dobigthing RUN chmod +w /etc/sudoers && \ echo "%dobigthing ALL=(ALL:ALL)NOPASSWD:ALL" >> /etc/sudoers && \ chmod -w /etc/sudoers USER dobigthing WORKDIR /home RUN git clone https://github.com/Dobigthing666/Squirrel.git && \ cd Squirrel && git submodule update --init && \ cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -Wno-dev -DMYSQL=ON && \ cmake --build build -j && \ cd AFLplusplus/ && LLVM_CONFIG=llvm-config-14 make -j20 RUN git clone --depth=1 https://github.com/mysql/mysql-server.git mysql RUN sudo apt-get -y install apt-transport-https curl software-properties-common gnutls-dev RUN mkdir bld && cd bld/ && \ CC=/home/Squirrel/AFLplusplus/afl-clang-fast CXX=/home/Squirrel/AFLplusplus/afl-clang-fast++ \ cmake ../mysql/ -DDOWNLOAD_BOOST=1 -DWITH_BOOST=../boost \ -DWITH_DEBUG=1 -DCPACK_MONOLITHIC_INSTALL=1 -DWITH_UNIT_TESTS=OFF RUN cd bld/ && make -j && sudo cmake --install . --prefix /usr/local/mysql/ RUN sudo chown dobigthing:dobigthing /usr/local/mysql/ -R && \ cd /usr/local/mysql/ && mkdir mysql-files && chmod 750 mysql-files && \ AFL_IGNORE_PROBLEMS=1 bin/mysqld --initialize-insecure --user=dobigthing && bin/mysql_ssl_rsa_setup #ENTRYPOINT bash #ENTRYPOINT /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql \ # --datadir=/usr/local/mysql/data --log-error=err_log.err \ # --pid-file=server_pid.pid --max_statement_time=1 RUN AFL_DEBUG=1 __AFL_SHM_ID=1234 /usr/local/mysql/bin/mysqld 2>&1 | grep "__afl_map_size" | tail -n 1 | cut -d"," -f8 | cut -d" " -f 3 > /tmp/mapsize WORKDIR /home/Squirrel/scripts/utils ENTRYPOINT AFL_IGNORE_PROBLEMS=1 AFL_MAP_SIZE=$(cat /tmp/mapsize) python3 run.py mysql ../../data/fuzz_root/mysql_input/ ================================================ FILE: scripts/dockers/postgresql/Dockerfile ================================================ from ubuntu:22.04 LABEL maintainer="Squirrel" # common config RUN apt-get update RUN apt-get -y install make cmake build-essential vim sudo git \ clang ninja-build pkg-config clang-format libpq-dev llvm libyaml-cpp-dev zlib1g-dev \ libreadline8 libreadline-dev bison flex python3-fire RUN mkdir -p /home && \ groupadd dobigthing && \ useradd -l -K UMASK=0000 -d /home -g dobigthing dobigthing && \ chown dobigthing:dobigthing /home RUN echo "dobigthing:dobigthing" | chpasswd && usermod -a -G sudo dobigthing RUN chmod +w /etc/sudoers && \ echo "%dobigthing ALL=(ALL:ALL)NOPASSWD:ALL" >> /etc/sudoers && \ chmod -w /etc/sudoers USER dobigthing WORKDIR /home RUN git clone https://github.com/s3team/Squirrel.git && \ cd Squirrel && git submodule update --init && \ cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DPOSTGRESQL=ON && \ cmake --build build -j && \ cd AFLplusplus/ && LLVM_CONFIG=llvm-config-14 make -j20 RUN git clone https://github.com/postgres/postgres.git postgres/ && \ mkdir bld/ && cd bld/ && \ CC=/home/Squirrel/AFLplusplus/afl-cc CXX=/home/Squirrel/AFLplusplus/afl-c++ \ ../postgres/configure RUN cd bld/ && make -j && sudo make install && \ sudo mkdir /usr/local/pgsql/data && sudo chown dobigthing /usr/local/pgsql/data && \ AFL_IGNORE_PROBLEMS=1 /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data RUN AFL_DEBUG=1 __AFL_SHM_ID=1234 /usr/local/pgsql/bin/postgres 2>&1 | grep "__afl_map_size" | tail -n 1 | cut -d"," -f8 | cut -d" " -f 3 > /tmp/mapsize WORKDIR /home/Squirrel/scripts/utils ENTRYPOINT AFL_MAP_SIZE=$(cat /tmp/mapsize) python3 run.py postgresql ../../data/fuzz_root/pqsql_input/ ================================================ FILE: scripts/dockers/sqlite/Dockerfile ================================================ from ubuntu:22.04 LABEL maintainer="Squirrel" ENV DEBIAN_FRONTEND noninteractive # common config RUN apt-get update RUN apt-get -y install make cmake build-essential vim sudo git tcl8.6 tcl8.6-tdbc-sqlite3\ clang ninja-build pkg-config clang-format \ libpq-dev libyaml-cpp-dev lld llvm python3-fire RUN mkdir -p /home && \ groupadd dobigthing && \ useradd -l -K UMASK=0000 -d /home -g dobigthing dobigthing && \ chown dobigthing:dobigthing /home RUN echo "dobigthing:dobigthing" | chpasswd && usermod -a -G sudo dobigthing RUN chmod +w /etc/sudoers && \ echo "%dobigthing ALL=(ALL:ALL)NOPASSWD:ALL" >> /etc/sudoers && \ chmod -w /etc/sudoers USER dobigthing WORKDIR /home RUN git clone https://github.com/s3team/Squirrel.git && \ cd Squirrel && git submodule update --init && \ cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DSQLITE=ON && \ cmake --build build -j && \ cd AFLplusplus/ && LLVM_CONFIG=llvm-config-14 make -j20 ARG CFLAGS="-DSQLITE_MAX_LENGTH=128000000 -DSQLITE_MAX_SQL_LENGTH=128000000 -DSQLITE_MAX_MEMORY=25000000 -DSQLITE_PRINTF_PRECISION_LIMIT=1048576 -DSQLITE_DEBUG=1 -DSQLITE_MAX_PAGE_COUNT=16384" RUN git clone https://github.com/sqlite/sqlite sqlite3/ && cd sqlite3 && mkdir bld WORKDIR /home/sqlite3/bld ENV CC=/home/Squirrel/AFLplusplus/afl-cc ENV CXX=/home/Squirrel/AFLplusplus/afl-c++ RUN ../configure && make -j && make sqlite3.c RUN $CC $CFLAGS -I. -c \ /home/sqlite3/test/ossfuzz.c -o /home/sqlite3/test/ossfuzz.o RUN $CC $CFLAGS -I. -c \ /home/sqlite3/test/ossshell.c -o /home/sqlite3/test/ossshell.o RUN $CXX $CXXFLAGS \ /home/sqlite3/test/ossfuzz.o /home/sqlite3/test/ossshell.o -o /home/ossfuzz \ ./sqlite3.o -ldl -pthread WORKDIR /home/Squirrel/scripts/utils ENTRYPOINT python3 run.py sqlite ../../data/fuzz_root/input ================================================ FILE: scripts/noxfile.py ================================================ """Nox sessions for the project. """ import nox @nox.session def format(session): # pylint: disable=redefined-builtin session.run("yapf", "-i", "-p", "--recursive", "utils", external=True) session.notify("lint") @nox.session def format_check(session): assert session.run("yapf", "-d", "-p", "--recursive", "utils", external=True) @nox.session def lint(session): session.run("pylint", "utils/", external=True) session.notify("type_check") @nox.session def type_check(session): session.run("mypy", "utils/", external=True) ================================================ FILE: scripts/pyproject.toml ================================================ [tool.poetry] name = "script" version = "0.1.0" description = "" authors = ["Yongheng Chen "] readme = "README.md" [tool.poetry.dependencies] python = "^3.8" fire = "^0.5.0" pylint = "*" yapf = "*" mypy = "*" nox = "*" toml = "^0.10.2" [build-system] requires = ["poetry-core"] build-backend = "poetry.core.masonry.api" [tool.yapf] based_on_style = "google" indent_width = 2 column_limit = 100 SPACES_BEFORE_COMMENT=2 [tool.mypy] ignore_missing_imports = true ================================================ FILE: scripts/utils/run.py ================================================ """ Run a fuzzing instance. """ import os import fire import uuid from pathlib import Path DBMS = ["sqlite", "mysql", "mariadb", "postgresql"] ROOTPATH = Path(os.path.dirname(os.path.realpath(__file__))).parent.parent def get_mutator_so_path(database): if database == "mariadb": database = "mysql" return f"{ROOTPATH}/build/lib{database}_mutator.so" def get_config_path(database): return f"{ROOTPATH}/data/config_{database}.yml" def set_env(database): os.environ["AFL_CUSTOM_MUTATOR_ONLY"] = "1" os.environ["AFL_DISABLE_TRIM"] = "1" os.environ["AFL_FAST_CAL"] = "1" os.environ["AFL_CUSTOM_MUTATOR_LIBRARY"] = get_mutator_so_path(database) os.environ["SQUIRREL_CONFIG"] = get_config_path(database) def run(database, input_dir, output_dir=None, config_file=None, fuzzer=None): # Precondition checks if database not in DBMS: print(f"Unsupported database. The supported ones are {DBMS}") return if not output_dir: output_dir = "/tmp/fuzz" if not config_file: config_file = get_config_path(database) if not fuzzer: fuzzer = f"{ROOTPATH}/AFLplusplus/afl-fuzz" if not os.path.exists(config_file): print("Invalid path for config file") if not os.path.exists(fuzzer): print("Invalid path for afl-fuzz") set_env(database) output_id = str(uuid.uuid4())[:10] if database == "sqlite": cmd = f"{fuzzer} -i {input_dir} -o {output_dir} -M {output_id} -- /home/ossfuzz @@" else: cmd = f"{fuzzer} -i {input_dir} -o {output_dir} -M {output_id} -t 60000 -- {ROOTPATH}/build/db_driver" os.system(cmd) if __name__ == "__main__": fire.Fire(run) ================================================ FILE: srcs/custom_mutator.cc ================================================ #include #include #include #include #include #include #include "afl-fuzz.h" #include "config_validate.h" #include "db.h" #include "env.h" #include "yaml-cpp/yaml.h" struct SquirrelMutator { SquirrelMutator(DataBase *db) : database(db) {} ~SquirrelMutator() { delete database; } DataBase *database; std::string current_input; }; extern "C" { void *afl_custom_init(afl_state_t *afl, unsigned int seed) { const char *config_file_path = getenv(kConfigEnv); if (!config_file_path) { std::cerr << "You should set the enviroment variable " << kConfigEnv << " to the path of your config file." << std::endl; exit(-1); } std::string config_file(config_file_path); std::cerr << "Config file: " << config_file << std::endl; YAML::Node config = YAML::LoadFile(config_file); if (!utils::validate_db_config(config)) { std::cerr << "Invalid config!" << std::endl; } auto *mutator = create_database(config); return new SquirrelMutator(mutator); } void afl_custom_deinit(SquirrelMutator *data) { delete data; } u8 afl_custom_queue_new_entry(SquirrelMutator *mutator, const unsigned char *filename_new_queue, const unsigned char *filename_orig_queue) { // read a file by file name std::ifstream ifs((const char *)filename_new_queue); std::string content((std::istreambuf_iterator(ifs)), (std::istreambuf_iterator())); mutator->database->save_interesting_query(content); return false; } unsigned int afl_custom_fuzz_count(SquirrelMutator *mutator, const unsigned char *buf, size_t buf_size) { std::string sql((const char *)buf, buf_size); return mutator->database->mutate(sql); } size_t afl_custom_fuzz(SquirrelMutator *mutator, uint8_t *buf, size_t buf_size, u8 **out_buf, uint8_t *add_buf, size_t add_buf_size, // add_buf can be NULL size_t max_size) { DataBase *db = mutator->database; assert(db->has_mutated_test_cases()); mutator->current_input = db->get_next_mutated_query(); *out_buf = (u8 *)mutator->current_input.c_str(); return mutator->current_input.size(); } } ================================================ FILE: srcs/db.h ================================================ #ifndef __DB_H__ #define __DB_H__ #include "yaml-cpp/yaml.h" class DataBase { public: // Set up the database. virtual bool initialize(YAML::Node config) = 0; // Mutate the query and return the number of new queries. virtual size_t mutate(const std::string &) = 0; // Return an new query to test. The `buffer` should be unmanaged, virtual std::string get_next_mutated_query() = 0; virtual bool has_mutated_test_cases() = 0; // Save the interesting query to the dictionary. virtual bool save_interesting_query(const std::string &) = 0; // Clean up the enviroment, e.g., drop all the databases. virtual bool clean_up() { return true; } virtual ~DataBase(){}; }; DataBase *create_database(YAML::Node config); #endif // __DB_H__ ================================================ FILE: srcs/db_driver.cc ================================================ #ifdef __ANDROID__ #include "android-ashmem.h" #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "absl/strings/str_format.h" #include "client.h" #include "config.h" #include "env.h" #include "types.h" #include "yaml-cpp/yaml.h" u8 *__afl_area_ptr; #ifdef __ANDROID__ u32 __afl_map_size = MAP_SIZE; #else __thread u32 __afl_map_size = MAP_SIZE; #endif /* Error reporting to forkserver controller */ void send_forkserver_error(int error) { u32 status; if (!error || error > 0xffff) return; status = (FS_OPT_ERROR | FS_OPT_SET_ERROR(error)); if (write(FORKSRV_FD + 1, (char *)&status, 4) != 4) return; } /* SHM setup. */ static void __afl_map_shm(void) { char *id_str = getenv(SHM_ENV_VAR); char *ptr; /* NOTE TODO BUG FIXME: if you want to supply a variable sized map then uncomment the following: */ if ((ptr = getenv("AFL_MAP_SIZE")) != NULL) { u32 val = atoi(ptr); if (val > 0) __afl_map_size = val; } if (__afl_map_size > MAP_SIZE) { if (__afl_map_size > FS_OPT_MAX_MAPSIZE) { fprintf(stderr, "Error: AFL++ tools *require* to set AFL_MAP_SIZE to %u to " "be able to run this instrumented program!\n", __afl_map_size); if (id_str) { send_forkserver_error(FS_ERROR_MAP_SIZE); exit(-1); } } else { fprintf(stderr, "Warning: AFL++ tools will need to set AFL_MAP_SIZE to %u to " "be able to run this instrumented program!\n", __afl_map_size); } } if (id_str) { #ifdef USEMMAP const char *shm_file_path = id_str; int shm_fd = -1; unsigned char *shm_base = NULL; /* create the shared memory segment as if it was a file */ shm_fd = shm_open(shm_file_path, O_RDWR, 0600); if (shm_fd == -1) { fprintf(stderr, "shm_open() failed\n"); send_forkserver_error(FS_ERROR_SHM_OPEN); exit(1); } /* map the shared memory segment to the address space of the process */ shm_base = mmap(0, __afl_map_size, PROT_READ | PROT_WRITE, MAP_SHARED, shm_fd, 0); if (shm_base == MAP_FAILED) { close(shm_fd); shm_fd = -1; fprintf(stderr, "mmap() failed\n"); send_forkserver_error(FS_ERROR_MMAP); exit(2); } __afl_area_ptr = shm_base; #else u32 shm_id = atoi(id_str); __afl_area_ptr = (u8 *)shmat(shm_id, 0, 0); #endif if (__afl_area_ptr == (void *)-1) { send_forkserver_error(FS_ERROR_SHMAT); exit(1); } /* Write something into the bitmap so that the parent doesn't give up */ __afl_area_ptr[0] = 1; } } /* Fork server logic. */ static void __afl_start_forkserver(void) { u8 tmp[4] = {0, 0, 0, 0}; u32 status = 0; if (__afl_map_size <= FS_OPT_MAX_MAPSIZE) status |= (FS_OPT_SET_MAPSIZE(__afl_map_size) | FS_OPT_MAPSIZE); if (status) status |= (FS_OPT_ENABLED); memcpy(tmp, &status, 4); /* Phone home and tell the parent that we're OK. */ if (write(FORKSRV_FD + 1, tmp, 4) != 4) return; } static u32 __afl_next_testcase(u8 *buf, u32 max_len) { s32 status, res = 0xffffff; /* Wait for parent by reading from the pipe. Abort if read fails. */ if (read(FORKSRV_FD, &status, 4) != 4) return 0; /* we have a testcase - read it */ status = read(0, buf, max_len); /* report that we are starting the target */ if (write(FORKSRV_FD + 1, &res, 4) != 4) return 0; return status; } static void __afl_end_testcase(client::ExecutionStatus status) { int waitpid_status = 0xffffff; if (status == client::kServerCrash) { waitpid_status = 0x6; // raise. } if (write(FORKSRV_FD + 1, &waitpid_status, 4) != 4) exit(1); } int main(int argc, char *argv[]) { const char *config_file_path = getenv(kConfigEnv); if (!config_file_path) { std::cerr << absl::StrFormat( "You should set the enviroment variable %s to " "the path of your config file.\n", kConfigEnv); exit(-1); } YAML::Node config = YAML::LoadFile(config_file_path); std::string db_name = config["db"].as(); std::string startup_cmd = config["startup_cmd"].as(); client::DBClient *database = client::create_client(db_name, config); database->initialize(config); /* This is were the testcase data is written into */ constexpr size_t kMaxInputSize = 0x100000; u8 *buf = (u8 *)malloc( kMaxInputSize); // this is the maximum size for a test case! set it! s32 len; __afl_map_size = MAP_SIZE; // default is 65536 /* then we initialize the shared memory map and start the forkserver */ // Start the database server. In case that the driver // is stopped and restarted, we should not start another server. __afl_map_shm(); if (!database->check_alive()) { system(startup_cmd.c_str()); sleep(5); } __afl_start_forkserver(); while ((len = __afl_next_testcase(buf, kMaxInputSize)) > 0) { std::string query((const char *)buf, len); database->prepare_env(); client::ExecutionStatus status = database->execute((const char *)buf, len); __afl_area_ptr[0] = 1; /* report the test case is done and wait for the next */ if (status == client::kServerCrash) { while (!database->check_alive()) { // Wait for the server to be restart. sleep(5); } } database->clean_up_env(); __afl_end_testcase(status); } assert(false && "Crash on parent?"); return 0; } ================================================ FILE: srcs/db_factory.cc ================================================ #include #ifdef __SQUIRREL_SQLITE__ #include "sqlite.h" #endif #ifdef __SQUIRREL_MYSQL__ #include "mysql.h" #endif #ifdef __SQUIRREL_POSTGRESQL__ #include "postgresql.h" #endif //#include "db.h" DataBase* create_database(YAML::Node config) { const std::string db_name = config["db"].as(); DataBase* result = nullptr; if (db_name == "sqlite") { #ifdef __SQUIRREL_SQLITE__ result = create_sqlite(); #endif } else if (db_name == "mysql") { #ifdef __SQUIRREL_MYSQL__ result = create_mysql(); #endif } else if (db_name == "postgresql") { #ifdef __SQUIRREL_POSTGRESQL__ result = create_postgresql(); #endif } else { assert(false && "Unreachable"); } assert(result && "Unreachable"); result->initialize(config); return result; } ================================================ FILE: srcs/env.h ================================================ constexpr char kConfigEnv[] = "SQUIRREL_CONFIG"; ================================================ FILE: srcs/internal/client/client.cc ================================================ #include "client.h" #include #include #ifdef __SQUIRREL_MYSQL__ #include "client_mysql.h" #endif #ifdef __SQUIRREL_POSTGRESQL__ #include "client_postgresql.h" #endif namespace client { DBClient *create_client(const std::string &db_name, const YAML::Node &config) { DBClient *result = nullptr; if (db_name == "mysql") { #ifdef __SQUIRREL_MYSQL__ result = new MySQLClient; #endif } else if (db_name == "postgresql") { #ifdef __SQUIRREL_POSTGRESQL__ result = new PostgreSQLClient; #endif } else { assert(false && "It is not supported!"); } assert(result && "It is not supported!"); result->initialize(config); return result; } }; // namespace client ================================================ FILE: srcs/internal/client/client.h ================================================ #ifndef __CLIENT_H__ #define __CLIENT_H__ #include #include #include "yaml-cpp/yaml.h" namespace client { enum ExecutionStatus { kConnectFailed, kExecuteError, kServerCrash, kNormal, kTimeout, kSyntaxError, kSemanticError }; class DBClient { public: virtual void initialize(YAML::Node) = 0; virtual bool check_alive() = 0; // Set up a clean environment for execution. virtual void prepare_env() = 0; virtual ExecutionStatus execute(const char *query, size_t size) = 0; virtual void clean_up_env() {} }; DBClient *create_client(const std::string &db_name, const YAML::Node &config); }; // namespace client #endif ================================================ FILE: srcs/internal/client/client_mysql.cc ================================================ #include "client_mysql.h" #include #include #include #include #include #include #include #include "mysql.h" #include "mysqld_error.h" using namespace std; namespace { bool is_crash_response(int response) { return response == CR_SERVER_LOST || response == CR_SERVER_GONE_ERROR; } }; // namespace namespace client { void MySQLClient::initialize(YAML::Node config) { host_ = config["host"].as(); user_name_ = config["user_name"].as(); passwd_ = config["passwd"].as(); sock_path_ = config["sock_path"].as(); db_prefix_ = config["db_prefix"].as(); } void MySQLClient::prepare_env() { ++database_id_; std::string database_name = db_prefix_ + std::to_string(database_id_); if (!create_database(database_name)) { std::cerr << "Failed to create database." << std::endl; } } ExecutionStatus MySQLClient::execute(const char *query, size_t size) { // Create a connection for executing the query // Check the response. // Return status accordingly. std::string database_name = db_prefix_ + std::to_string(database_id_); std::optional connection = create_connection(database_name); if (!connection.has_value()) { std::cerr << "Cannot creat connection at execute " << std::endl; return kServerCrash; } int server_response = mysql_real_query(&(*connection), query, size); if (is_crash_response(server_response)) { std::cerr << "Cannot mySQL_QUERY " << std::endl; return kServerCrash; } ExecutionStatus server_status = clean_up_connection(*connection); mysql_close(&(*connection)); return server_status; } void MySQLClient::clean_up_env() { std::string database_name = db_prefix_ + std::to_string(database_id_); string reset_query = "DROP DATABASE IF EXISTS " + database_name + ";"; std::optional connection = create_connection(""); if (!connection.has_value()) { return; } // TODO: clean up the connection. mysql_real_query(&(*connection), reset_query.c_str(), reset_query.size()); clean_up_connection((*connection)); mysql_close(&(*connection)); } std::optional MySQLClient::create_connection(std::string_view db_name) { MYSQL result; if (mysql_init(&result) == NULL) return std::nullopt; if (mysql_real_connect(&result, host_.c_str(), user_name_.c_str(), passwd_.c_str(), db_name.data(), 0, sock_path_.c_str(), CLIENT_MULTI_STATEMENTS) == NULL) { std::cerr << "Create connection failed: " << mysql_errno(&result) << mysql_error(&result) << std::endl; mysql_close(&result); return std::nullopt; } return result; } bool MySQLClient::check_alive() { std::optional connection = create_connection(""); if (!connection.has_value()) { return false; } mysql_close(&(*connection)); return true; } bool MySQLClient::create_database(const std::string &database) { MYSQL tmp_m; if (mysql_init(&tmp_m) == NULL) { mysql_close(&tmp_m); return false; } if (mysql_real_connect(&tmp_m, host_.c_str(), user_name_.c_str(), passwd_.c_str(), nullptr, 0, sock_path_.c_str(), CLIENT_MULTI_STATEMENTS) == NULL) { fprintf(stderr, "Connection error3 %d, %s\n", mysql_errno(&tmp_m), mysql_error(&tmp_m)); mysql_close(&tmp_m); return false; } string cmd = "CREATE DATABASE IF NOT EXISTS " + database + ";"; // TODO: Check server response status. mysql_real_query(&tmp_m, cmd.c_str(), cmd.size()); // std::cerr << "Server response: " << server_response << std::endl; clean_up_connection(tmp_m); mysql_close(&tmp_m); return true; } ExecutionStatus MySQLClient::clean_up_connection(MYSQL &mm) { int res = -1; do { auto q_result = mysql_store_result(&mm); if (q_result) mysql_free_result(q_result); } while ((res = mysql_next_result(&mm)) == 0); if (res != -1) { res = mysql_errno(&mm); if (is_crash_response(res)) { // std::cerr << "Found a crash!" << std::endl; return kServerCrash; } if (res == ER_PARSE_ERROR) { // std::cerr << "Syntax error" << std::endl; return kSyntaxError; } else { // std::cerr << "Semantic error" << std::endl; return kSemanticError; } } // std::cerr << "Normal" << std::endl; return kNormal; } }; // namespace client ================================================ FILE: srcs/internal/client/client_mysql.h ================================================ #ifndef __CLIENT_MYSQL_H__ #define __CLIENT_MYSQL_H__ #include #include #include #include "client.h" #include "mysql.h" #include "yaml-cpp/yaml.h" namespace client { class MySQLClient : public DBClient { public: virtual void initialize(YAML::Node); // Set up a clean environment for execution. virtual void prepare_env(); virtual ExecutionStatus execute(const char *query, size_t size); virtual void clean_up_env(); virtual bool check_alive(); private: ExecutionStatus clean_up_connection(MYSQL &); bool create_database(const std::string &database); std::optional create_connection(const std::string_view db_name); unsigned int database_id_ = 0; std::string host_; std::string user_name_; std::string passwd_; std::string sock_path_; std::string db_prefix_; }; }; // namespace client #endif ================================================ FILE: srcs/internal/client/client_postgresql.cc ================================================ #include "client_postgresql.h" #include #include #include #include #include #include #include #include "absl/strings/str_format.h" #include "client.h" #include "libpq-fe.h" using namespace std; namespace { PGconn *create_connection(std::string_view db_name) { std::string conninfo = absl::StrFormat("hostaddr=%s port=%d dbname=%s connect_timeout=4", "127.0.0.1", 5432, db_name); std::cerr << "Connection info: " << conninfo << std::endl; PGconn *result = PQconnectdb(conninfo.c_str()); if (PQstatus(result) == CONNECTION_BAD) { fprintf(stderr, "Error1: %s\n", PQerrorMessage(result)); std::cerr << "BAd" << std::endl; } return result; } void reset_database(PGconn *conn) { auto res = PQexec(conn, "DROP SCHEMA public CASCADE; CREATE SCHEMA public;"); PQclear(res); } }; // namespace namespace client { void PostgreSQLClient::initialize(YAML::Node config) { host_ = config["host"].as(); port_ = config["port"].as(); user_name_ = config["user_name"].as(); passwd_ = config["passwd"].as(); db_name_ = config["db_name"].as(); std::cerr << "Sock path: " << sock_path_ << std::endl; } void PostgreSQLClient::prepare_env() { PGconn *conn = create_connection(db_name_); reset_database(conn); PQfinish(conn); } ExecutionStatus PostgreSQLClient::execute(const char *query, size_t size) { auto conn = create_connection(db_name_); if (PQstatus(conn) != CONNECTION_OK) { fprintf(stderr, "Error2: %s\n", PQerrorMessage(conn)); PQfinish(conn); return kServerCrash; } std::string cmd(query, size); auto res = PQexec(conn, cmd.c_str()); if (PQstatus(conn) != CONNECTION_OK) { fprintf(stderr, "Error3: %s\n", PQerrorMessage(conn)); PQclear(res); return kServerCrash; } if (PQresultStatus(res) != PGRES_COMMAND_OK && PQresultStatus(res) != PGRES_TUPLES_OK) { fprintf(stderr, "Error4: %s\n", PQerrorMessage(conn)); PQclear(res); PQfinish(conn); return kExecuteError; } PQclear(res); PQfinish(conn); return kNormal; } void PostgreSQLClient::clean_up_env() {} bool PostgreSQLClient::check_alive() { std::string conninfo = absl::StrFormat( "hostaddr=%s port=%d connect_timeout=4", "127.0.0.1", 5432); PGPing res = PQping(conninfo.c_str()); return res == PQPING_OK; } } // namespace client ================================================ FILE: srcs/internal/client/client_postgresql.h ================================================ #ifndef __CLIENT_POSTGRESQL_H__ #define __CLIENT_POSTGRESQL_H__ #include #include #include #include "client.h" #include "yaml-cpp/yaml.h" namespace client { class PostgreSQLClient : public DBClient { public: virtual void initialize(YAML::Node); // Set up a clean environment for execution. virtual void prepare_env(); virtual ExecutionStatus execute(const char *query, size_t size); virtual void clean_up_env(); virtual bool check_alive(); private: unsigned int database_id_ = 0; std::string host_; std::string port_; std::string user_name_; std::string passwd_; std::string sock_path_; std::string db_name_; }; }; // namespace client #endif ================================================ FILE: srcs/internal/client/test_client.cc ================================================ #include #include #include #include #include "client.h" #include "yaml-cpp/yaml.h" int main(int argc, char **argv) { YAML::Node config = YAML::LoadFile(std::string(argv[1])); std::string db_name = config["db"].as(); // client::PostgreSQLClient *test_client = new client::PostgreSQLClient; client::DBClient *test_client = client::create_client(db_name, config); test_client->initialize(config); /* if (test_client.connect()) { std::cout << "Success!" << std::endl; } else { std::cout << "Failed!" << std::endl; } */ const char *query = "select 1;"; for (int i = 0; i < 0x100; ++i) { test_client->prepare_env(); client::ExecutionStatus result = test_client->execute(query, strlen(query)); assert(result == client::kNormal); test_client->clean_up_env(); } } ================================================ FILE: srcs/internal/mysql/include/ast.h ================================================ #ifndef __AST_H__ #define __AST_H__ #include #include #include #include "define.h" using namespace std; enum NODETYPE { #define DECLARE_TYPE(v) v, ALLTYPE(DECLARE_TYPE) #undef DECLARE_TYPE }; typedef NODETYPE IRTYPE; enum CASEIDX { CASE0, CASE1, CASE2, CASE3, CASE4, CASE5, CASE6, CASE7, CASE8, CASE9, CASE10, CASE11, CASE12, CASE13, CASE14, CASE15, CASE16, CASE17, CASE18, CASE19, CASE20, CASE21, CASE22, CASE23, CASE24, CASE25, CASE26, CASE27, CASE28, CASE29, CASE30, CASE31, CASE32, CASE33, CASE34, CASE35, CASE36, CASE37, CASE38, CASE39, CASE40, CASE41, CASE42, CASE43, CASE44, CASE45, CASE46, CASE47, CASE48, CASE49, CASE50, CASE51, CASE52, CASE53, CASE54, CASE55, CASE56, CASE57, CASE58, CASE59, CASE60, CASE61, CASE62, CASE63, CASE64, CASE65, CASE66, CASE67, CASE68, CASE69, CASE70, CASE71, CASE72, CASE73, CASE74, CASE75, CASE76, CASE77, CASE78, CASE79, CASE80, CASE81, CASE82, CASE83, CASE84, CASE85, CASE86, CASE87, CASE88, CASE89, CASE90, CASE91, CASE92, CASE93, CASE94, CASE95, CASE96, CASE97, CASE98, CASE99, CASE100, CASE101, CASE102, CASE103, CASE104, CASE105, CASE106, CASE107, CASE108, CASE109, CASE110, CASE111, CASE112, CASE113, CASE114, CASE115, CASE116, CASE117, CASE118, CASE119, CASE120, CASE121, CASE122, CASE123, CASE124, CASE125, CASE126, CASE127, CASE128, CASE129, CASE130, CASE131, CASE132, CASE133, CASE134, CASE135, CASE136, CASE137, CASE138, CASE139, CASE140, CASE141, CASE142, CASE143, CASE144, CASE145, CASE146, CASE147, CASE148, CASE149, CASE150, CASE151, CASE152, CASE153, CASE154, CASE155, CASE156, CASE157, CASE158, CASE159, CASE160, CASE161, CASE162, CASE163, CASE164, CASE165, CASE166, CASE167, CASE168, CASE169, CASE170, CASE171, CASE172, CASE173, CASE174, CASE175, CASE176, CASE177, CASE178, CASE179, CASE180, CASE181, CASE182, CASE183, CASE184, CASE185, CASE186, CASE187, CASE188, CASE189, CASE190, CASE191, CASE192, CASE193, CASE194, CASE195, CASE196, CASE197, CASE198, CASE199, CASE200, CASE201, CASE202, CASE203, CASE204, CASE205, CASE206, CASE207, CASE208, CASE209, CASE210, CASE211, CASE212, CASE213, CASE214, CASE215, CASE216, CASE217, CASE218, CASE219, CASE220, CASE221, CASE222, CASE223, CASE224, CASE225, CASE226, CASE227, CASE228, CASE229, CASE230, CASE231, CASE232, CASE233, CASE234, CASE235, CASE236, CASE237, CASE238, CASE239, CASE240, CASE241, CASE242, CASE243, CASE244, CASE245, CASE246, CASE247, CASE248, CASE249, CASE250, CASE251, CASE252, CASE253, CASE254, CASE255, CASE256, CASE257, CASE258, CASE259, CASE260, CASE261, CASE262, CASE263, CASE264, CASE265, CASE266, CASE267, CASE268, CASE269, CASE270, CASE271, CASE272, CASE273, CASE274, CASE275, CASE276, CASE277, CASE278, CASE279, CASE280, CASE281, CASE282, CASE283, CASE284, CASE285, CASE286, CASE287, CASE288, CASE289, CASE290, CASE291, CASE292, CASE293, CASE294, CASE295, CASE296, CASE297, CASE298, CASE299, CASE300, CASE301, CASE302, CASE303, CASE304, CASE305, CASE306, CASE307, CASE308, CASE309, CASE310, CASE311, CASE312, CASE313, CASE314, CASE315, CASE316, CASE317, CASE318, CASE319, CASE320, CASE321, CASE322, CASE323, CASE324, CASE325, CASE326, CASE327, CASE328, CASE329, CASE330, CASE331, CASE332, CASE333, CASE334, CASE335, CASE336, CASE337, CASE338, CASE339, CASE340, CASE341, CASE342, CASE343, CASE344, CASE345, CASE346, CASE347, CASE348, CASE349, CASE350, CASE351, CASE352, CASE353, CASE354, CASE355, CASE356, CASE357, CASE358, CASE359, CASE360, CASE361, CASE362, CASE363, CASE364, CASE365, CASE366, CASE367, CASE368, CASE369, CASE370, CASE371, CASE372, CASE373, CASE374, CASE375, CASE376, CASE377, CASE378, CASE379, CASE380, CASE381, CASE382, CASE383, CASE384, CASE385, CASE386, CASE387, CASE388, CASE389, CASE390, CASE391, CASE392, CASE393, CASE394, CASE395, CASE396, CASE397, CASE398, CASE399, }; enum DATATYPE { #define DECLARE_TYPE(v) k##v, ALLDATATYPE(DECLARE_TYPE) #undef DECLARE_TYPE }; #define GEN_NAME() name_ = gen_id_name(); static unsigned long g_id_counter; static inline void reset_id_counter() { g_id_counter = 0; } static string gen_id_name() { return "v" + to_string(g_id_counter++); } class IROperator { public: IROperator(string prefix = "", string middle = "", string suffix = "") : prefix_(prefix), middle_(middle), suffix_(suffix) {} string prefix_; string middle_; string suffix_; }; enum UnionType { kUnionUnknown = 0, kUnionString = 1, kUnionFloat, kUnionInt, kUnionLong, kUnionBool, }; enum DATAFLAG { kUse = 0x8, kMapToClosestOne = 0x10, kNoSplit = 0x100, kGlobal = 0x4, kReplace = 0x40, kUndefine = 0x2, kAlias = 0x80, kMapToAll = 0x20, kDefine = 0x1, }; #define isUse(a) ((a)&kUse) #define isMapToClosestOne(a) ((a)&kMapToClosestOne) #define isNoSplit(a) ((a)&kNoSplit) #define isGlobal(a) ((a)&kGlobal) #define isReplace(a) ((a)&kReplace) #define isUndefine(a) ((a)&kUndefine) #define isAlias(a) ((a)&kAlias) #define isMapToAll(a) ((a)&kMapToAll) #define isDefine(a) ((a)&kDefine) class IR { public: IR(IRTYPE type, IROperator* op, IR* left = NULL, IR* right = NULL) : type_(type), op_(op), left_(left), right_(right), operand_num_((!!right) + (!!left)), data_type_(kDataWhatever) { GEN_NAME(); } IR(IRTYPE type, string str_val, DATATYPE data_type = kDataWhatever, int scope = -1, DATAFLAG flag = kUse) : type_(type), str_val_(str_val), op_(NULL), left_(NULL), right_(NULL), operand_num_(0), data_type_(data_type), scope_(scope), data_flag_(flag) { GEN_NAME(); } IR(IRTYPE type, bool b_val, DATATYPE data_type = kDataWhatever, int scope = -1, DATAFLAG flag = kUse) : type_(type), bool_val_(b_val), left_(NULL), op_(NULL), right_(NULL), operand_num_(0), data_type_(kDataWhatever), scope_(scope), data_flag_(flag) { GEN_NAME(); } IR(IRTYPE type, unsigned long long_val, DATATYPE data_type = kDataWhatever, int scope = -1, DATAFLAG flag = kUse) : type_(type), long_val_(long_val), left_(NULL), op_(NULL), right_(NULL), operand_num_(0), data_type_(kDataWhatever), scope_(scope), data_flag_(flag) { GEN_NAME(); } IR(IRTYPE type, int int_val, DATATYPE data_type = kDataWhatever, int scope = -1, DATAFLAG flag = kUse) : type_(type), int_val_(int_val), left_(NULL), op_(NULL), right_(NULL), operand_num_(0), data_type_(kDataWhatever), scope_(scope), data_flag_(flag) { GEN_NAME(); } IR(IRTYPE type, double f_val, DATATYPE data_type = kDataWhatever, int scope = -1, DATAFLAG flag = kUse) : type_(type), float_val_(f_val), left_(NULL), op_(NULL), right_(NULL), operand_num_(0), data_type_(kDataWhatever), scope_(scope), data_flag_(flag) { GEN_NAME(); } IR(IRTYPE type, IROperator* op, IR* left, IR* right, double f_val, string str_val, string name, unsigned int mutated_times, int scope, DATAFLAG flag) : type_(type), op_(op), left_(left), right_(right), operand_num_((!!right) + (!!left)), name_(name), str_val_(str_val), float_val_(f_val), mutated_times_(mutated_times), data_type_(kDataWhatever), scope_(scope), data_flag_(flag) {} IR(const IR* ir, IR* left, IR* right) { this->type_ = ir->type_; if (ir->op_ != NULL) this->op_ = OP3(ir->op_->prefix_, ir->op_->middle_, ir->op_->suffix_); else { this->op_ = OP0(); } this->left_ = left; this->right_ = right; this->str_val_ = ir->str_val_; this->long_val_ = ir->long_val_; this->data_type_ = ir->data_type_; this->scope_ = ir->scope_; this->data_flag_ = ir->data_flag_; this->name_ = ir->name_; this->operand_num_ = ir->operand_num_; this->mutated_times_ = ir->mutated_times_; } union { int int_val_; unsigned long long_val_; double float_val_; bool bool_val_; }; int scope_; DATAFLAG data_flag_; DATATYPE data_type_; IRTYPE type_; string name_; string str_val_; // int int_val_ = 0xdeadbeef; // double float_val_ = 1.234; IROperator* op_; IR* left_; IR* right_; int operand_num_; unsigned int mutated_times_ = 0; string to_string(); string to_string_core(); }; class Node { public: void set_sub_type(unsigned int i) { case_idx_ = i; } NODETYPE type_; DATATYPE data_type_; DATAFLAG data_flag_; int scope_; unsigned int case_idx_; virtual IR* translate(vector& v_ir_collector); virtual void generate() {} virtual void deep_delete() {} Node(){}; ~Node(){}; }; Node* generate_ast_node_by_type(IRTYPE); DATATYPE get_datatype_by_string(string s); NODETYPE get_nodetype_by_string(string s); string get_string_by_nodetype(NODETYPE tt); string get_string_by_datatype(DATATYPE tt); IR* deep_copy(const IR* root); void deep_delete(IR* root); #define DECLARE_CLASS(v) class v; ALLCLASS(DECLARE_CLASS); #undef DECLARE_CLASS class Program : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Stmtlist* stmtlist_; }; class Stmtlist : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Stmt* stmt_; Stmtlist* stmtlist_; }; class Stmt : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); InsertStmt* insert_stmt_; DropStmt* drop_stmt_; CreateStmt* create_stmt_; SelectStmt* select_stmt_; AlterStmt* alter_stmt_; UpdateStmt* update_stmt_; }; class CreateStmt : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); CreateTriggerStmt* create_trigger_stmt_; CreateIndexStmt* create_index_stmt_; CreateViewStmt* create_view_stmt_; CreateTableStmt* create_table_stmt_; }; class DropStmt : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); DropTableStmt* drop_table_stmt_; DropViewStmt* drop_view_stmt_; DropIndexStmt* drop_index_stmt_; DropTriggerStmt* drop_trigger_stmt_; }; class AlterStmt : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); AlterAction* alter_action_; TableName* table_name_; }; class SelectStmt : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); SelectNoParens* select_no_parens_; SelectWithParens* select_with_parens_; }; class SelectWithParens : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); SelectNoParens* select_no_parens_; SelectWithParens* select_with_parens_; }; class SelectNoParens : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); SelectClauseList* select_clause_list_; OptWithClause* opt_with_clause_; OptOrderClause* opt_order_clause_; OptLimitClause* opt_limit_clause_; }; class SelectClauseList : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); SelectClauseList* select_clause_list_; CombineClause* combine_clause_; SelectClause* select_clause_; }; class SelectClause : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); OptGroupClause* opt_group_clause_; OptAllOrDistinct* opt_all_or_distinct_; OptFromClause* opt_from_clause_; OptWindowClause* opt_window_clause_; SelectTarget* select_target_; OptWhereClause* opt_where_clause_; }; class CombineClause : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); }; class OptFromClause : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); FromClause* from_clause_; }; class SelectTarget : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); ExprList* expr_list_; }; class OptWindowClause : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); WindowClause* window_clause_; }; class WindowClause : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); WindowDefList* window_def_list_; }; class WindowDefList : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); WindowDef* window_def_; WindowDefList* window_def_list_; }; class WindowDef : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Window* window_; WindowName* window_name_; }; class WindowName : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Identifier* identifier_; }; class Window : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); OptExistWindowName* opt_exist_window_name_; OptFrameClause* opt_frame_clause_; OptPartition* opt_partition_; OptOrderClause* opt_order_clause_; }; class OptPartition : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); ExprList* expr_list_; }; class OptFrameClause : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); FrameBoundStart* frame_bound_start_; RangeOrRows* range_or_rows_; FrameBoundEnd* frame_bound_end_; }; class RangeOrRows : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); }; class FrameBoundStart : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); FrameBound* frame_bound_; }; class FrameBoundEnd : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); FrameBound* frame_bound_; }; class FrameBound : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Expr* expr_; }; class OptExistWindowName : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Identifier* identifier_; }; class OptGroupClause : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); ExprList* expr_list_; OptHavingClause* opt_having_clause_; }; class OptHavingClause : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Expr* expr_; }; class OptWhereClause : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); WhereClause* where_clause_; }; class WhereClause : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Expr* expr_; }; class FromClause : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); TableRef* table_ref_; }; class TableRef : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); OptAsAlias* opt_as_alias_; OptTablePrefix* opt_table_prefix_; ExprList* expr_list_; OptIndex* opt_index_; OptOn* opt_on_; SelectNoParens* select_no_parens_; OptUsing* opt_using_; TableName* table_name_; TableRef* table_ref_; FunctionName* function_name_; }; class OptIndex : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); ColumnName* column_name_; }; class OptOn : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Expr* expr_; }; class OptUsing : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); ColumnNameList* column_name_list_; }; class ColumnNameList : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); ColumnNameList* column_name_list_; ColumnName* column_name_; }; class OptTablePrefix : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); JoinOp* join_op_; TableRef* table_ref_; }; class JoinOp : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); OptJoinType* opt_join_type_; }; class OptJoinType : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); }; class ExprList : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Expr* expr_; OptAsAlias* opt_as_alias_; ExprList* expr_list_; }; class OptLimitClause : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); LimitClause* limit_clause_; }; class LimitClause : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Expr* expr_1_; Expr* expr_2_; }; class OptLimitRowCount : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Expr* expr_; }; class OptOrderClause : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); OrderItemList* order_item_list_; }; class OptOrderNulls : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); }; class OrderItemList : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); OrderItem* order_item_; OrderItemList* order_item_list_; }; class OrderItem : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Expr* expr_; OptOrderNulls* opt_order_nulls_; OptOrderBehavior* opt_order_behavior_; }; class OptOrderBehavior : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); }; class OptWithClause : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); CteTableList* cte_table_list_; }; class CteTableList : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); CteTableList* cte_table_list_; CteTable* cte_table_; }; class CteTable : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); CteTableName* cte_table_name_; SelectStmt* select_stmt_; }; class CteTableName : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); OptColumnNameListP* opt_column_name_list_p_; TableName* table_name_; }; class OptAllOrDistinct : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); }; class CreateTableStmt : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); OptTableOptionList* opt_table_option_list_; OptTableConstraintList* opt_table_constraint_list_; OptTemp* opt_temp_; SelectStmt* select_stmt_; TableName* table_name_; ColumnDefList* column_def_list_; OptIgnoreOrReplace* opt_ignore_or_replace_; OptIfNotExist* opt_if_not_exist_; }; class CreateIndexStmt : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); TableName* table_name_1_; TableName* table_name_2_; OptIndexOption* opt_index_option_; OptIndexKeyword* opt_index_keyword_; IndexedColumnList* indexed_column_list_; OptExtraOption* opt_extra_option_; }; class CreateTriggerStmt : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); TriggerActionTime* trigger_action_time_; TriggerName* trigger_name_; TableName* table_name_; TriggerEvents* trigger_events_; TriggerBody* trigger_body_; }; class CreateViewStmt : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); OptViewAlgorithm* opt_view_algorithm_; OptCheckOption* opt_check_option_; OptSqlSecurity* opt_sql_security_; ViewName* view_name_; SelectStmt* select_stmt_; OptColumnNameListP* opt_column_name_list_p_; }; class OptTableOptionList : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); TableOptionList* table_option_list_; }; class TableOptionList : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); TableOptionList* table_option_list_; OptOpComma* opt_op_comma_; TableOption* table_option_; }; class TableOption : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); OptOpEqual* opt_op_equal_; }; class OptOpComma : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); }; class OptIgnoreOrReplace : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); }; class OptViewAlgorithm : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); }; class OptSqlSecurity : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); }; class OptIndexOption : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); }; class OptExtraOption : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); LockOption* lock_option_; IndexAlgorithmOption* index_algorithm_option_; }; class IndexAlgorithmOption : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); OptOpEqual* opt_op_equal_; }; class LockOption : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); OptOpEqual* opt_op_equal_; }; class OptOpEqual : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); }; class TriggerEvents : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); }; class TriggerName : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Identifier* identifier_; }; class TriggerActionTime : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); }; class DropIndexStmt : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); TableName* table_name_; OptExtraOption* opt_extra_option_; }; class DropTableStmt : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); OptTemp* opt_temp_; TableName* table_name_; OptRestrictOrCascade* opt_restrict_or_cascade_; OptIfExist* opt_if_exist_; }; class OptRestrictOrCascade : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); }; class DropTriggerStmt : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); TriggerName* trigger_name_; OptIfExist* opt_if_exist_; }; class DropViewStmt : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); ViewName* view_name_; OptRestrictOrCascade* opt_restrict_or_cascade_; OptIfExist* opt_if_exist_; }; class InsertStmt : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); InsertRest* insert_rest_; OptAsAlias* opt_as_alias_; TableName* table_name_; OptOnConflict* opt_on_conflict_; OptWithClause* opt_with_clause_; }; class InsertRest : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); OptColumnNameListP* opt_column_name_list_p_; SuperValuesList* super_values_list_; SelectNoParens* select_no_parens_; }; class SuperValuesList : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); ValuesList* values_list_; SuperValuesList* super_values_list_; }; class ValuesList : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); ExprList* expr_list_; }; class OptOnConflict : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); OptConflictExpr* opt_conflict_expr_; SetClauseList* set_clause_list_; WhereClause* where_clause_; }; class OptConflictExpr : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); IndexedColumnList* indexed_column_list_; WhereClause* where_clause_; }; class IndexedColumnList : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); IndexedColumn* indexed_column_; IndexedColumnList* indexed_column_list_; }; class IndexedColumn : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Expr* expr_; OptOrderBehavior* opt_order_behavior_; }; class UpdateStmt : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); OptAsAlias* opt_as_alias_; OptWhereClause* opt_where_clause_; TableName* table_name_; SetClauseList* set_clause_list_; OptLimitRowCount* opt_limit_row_count_; OptOrderClause* opt_order_clause_; }; class AlterAction : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); ColumnDef* column_def_; AlterConstantAction* alter_constant_action_; OptColumn* opt_column_; TableName* table_name_; ColumnName* column_name_1_; ColumnName* column_name_2_; }; class AlterConstantAction : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); LockOption* lock_option_; }; class ColumnDefList : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); ColumnDef* column_def_; ColumnDefList* column_def_list_; }; class ColumnDef : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); TypeName* type_name_; Identifier* identifier_; OptColumnConstraintList* opt_column_constraint_list_; }; class OptColumnConstraintList : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); ColumnConstraintList* column_constraint_list_; OptReferenceClause* opt_reference_clause_; OptCheck* opt_check_; }; class ColumnConstraintList : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); ColumnConstraintList* column_constraint_list_; ColumnConstraint* column_constraint_; }; class ColumnConstraint : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); ConstraintType* constraint_type_; }; class OptReferenceClause : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); ReferenceClause* reference_clause_; OptForeignKey* opt_foreign_key_; }; class OptCheck : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); OptEnforced* opt_enforced_; Expr* expr_; }; class ConstraintType : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); }; class ReferenceClause : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); OptConstraintAttributeSpec* opt_constraint_attribute_spec_; OptColumnNameListP* opt_column_name_list_p_; TableName* table_name_; OptForeignKeyActions* opt_foreign_key_actions_; }; class OptForeignKey : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); }; class OptForeignKeyActions : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); ForeignKeyActions* foreign_key_actions_; }; class ForeignKeyActions : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); KeyActions* key_actions_; }; class KeyActions : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); }; class OptConstraintAttributeSpec : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); OptInitialTime* opt_initial_time_; }; class OptInitialTime : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); }; class ConstraintName : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Name* name_; }; class OptTemp : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); }; class OptCheckOption : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); }; class OptColumnNameListP : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); ColumnNameList* column_name_list_; }; class SetClauseList : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); SetClause* set_clause_; SetClauseList* set_clause_list_; }; class SetClause : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Expr* expr_; ColumnNameList* column_name_list_; ColumnName* column_name_; }; class OptAsAlias : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); AsAlias* as_alias_; }; class Expr : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); CastExpr* cast_expr_; InExpr* in_expr_; BetweenExpr* between_expr_; Operand* operand_; ExistsExpr* exists_expr_; LogicExpr* logic_expr_; }; class Operand : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); FunctionExpr* function_expr_; UnaryExpr* unary_expr_; ExprList* expr_list_; CaseExpr* case_expr_; ArrayExpr* array_expr_; SelectNoParens* select_no_parens_; ExtractExpr* extract_expr_; ArrayIndex* array_index_; BinaryExpr* binary_expr_; ScalarExpr* scalar_expr_; }; class CastExpr : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Expr* expr_; TypeName* type_name_; }; class ScalarExpr : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Literal* literal_; ColumnName* column_name_; }; class UnaryExpr : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Operand* operand_; }; class BinaryExpr : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Operand* operand_1_; Operand* operand_2_; BinaryOp* binary_op_; CompExpr* comp_expr_; }; class LogicExpr : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Expr* expr_1_; Expr* expr_2_; }; class InExpr : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Operand* operand_; ExprList* expr_list_; OptNot* opt_not_; TableName* table_name_; SelectNoParens* select_no_parens_; }; class CaseExpr : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Expr* expr_1_; Expr* expr_2_; CaseList* case_list_; }; class BetweenExpr : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Operand* operand_1_; Operand* operand_2_; Operand* operand_3_; }; class ExistsExpr : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); OptNot* opt_not_; SelectNoParens* select_no_parens_; }; class FunctionExpr : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); ExprList* expr_list_; FunctionName* function_name_; OptFilterClause* opt_filter_clause_; OptDistinct* opt_distinct_; OptOverClause* opt_over_clause_; }; class OptDistinct : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); }; class OptFilterClause : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Expr* expr_; }; class OptOverClause : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Window* window_; WindowName* window_name_; }; class CaseList : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); CaseList* case_list_; CaseClause* case_clause_; }; class CaseClause : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Expr* expr_1_; Expr* expr_2_; }; class CompExpr : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Operand* operand_1_; Operand* operand_2_; }; class ExtractExpr : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); DatetimeField* datetime_field_; Expr* expr_; }; class DatetimeField : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); }; class ArrayExpr : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); ExprList* expr_list_; }; class ArrayIndex : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Operand* operand_; IntLiteral* int_literal_; }; class Literal : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); BoolLiteral* bool_literal_; StringLiteral* string_literal_; NumLiteral* num_literal_; }; class StringLiteral : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); string string_val_; }; class BoolLiteral : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); }; class NumLiteral : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); IntLiteral* int_literal_; FloatLiteral* float_literal_; }; class IntLiteral : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); int int_val_; }; class FloatLiteral : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); float float_val_; }; class OptColumn : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); }; class TriggerBody : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); AlterStmt* alter_stmt_; DropStmt* drop_stmt_; InsertStmt* insert_stmt_; UpdateStmt* update_stmt_; }; class OptIfNotExist : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); }; class OptIfExist : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); }; class Identifier : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); string string_val_; }; class AsAlias : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Identifier* identifier_; }; class TableName : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Identifier* identifier_; }; class ColumnName : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Identifier* identifier_; }; class OptIndexKeyword : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); }; class ViewName : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Identifier* identifier_; }; class FunctionName : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Identifier* identifier_; }; class BinaryOp : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); }; class OptNot : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); }; class Name : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Identifier* identifier_; }; class TypeName : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); NumericType* numeric_type_; CharacterType* character_type_; }; class CharacterType : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); CharacterWithLength* character_with_length_; CharacterWithoutLength* character_without_length_; }; class CharacterWithLength : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); CharacterConflicta* character_conflicta_; IntLiteral* int_literal_; }; class CharacterWithoutLength : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); CharacterConflicta* character_conflicta_; }; class CharacterConflicta : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); }; class NumericType : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); }; class OptTableConstraintList : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); TableConstraintList* table_constraint_list_; }; class TableConstraintList : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); TableConstraint* table_constraint_; TableConstraintList* table_constraint_list_; }; class TableConstraint : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); IndexedColumnList* indexed_column_list_; ColumnNameList* column_name_list_; Expr* expr_; ConstraintName* constraint_name_; OptEnforced* opt_enforced_; ReferenceClause* reference_clause_; }; class OptEnforced : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); }; #endif ================================================ FILE: srcs/internal/mysql/include/define.h ================================================ #pragma once #ifndef __DEFINE_H__ #define __DEFINE_H__ #define ALLTYPE(V) \ V(kProgram) \ V(kStmtlist) \ V(kStmt) \ V(kCreateStmt) \ V(kDropStmt) \ V(kAlterStmt) \ V(kSelectStmt) \ V(kSelectWithParens) \ V(kSelectNoParens) \ V(kSelectClauseList) \ V(kSelectClause) \ V(kCombineClause) \ V(kOptFromClause) \ V(kSelectTarget) \ V(kOptWindowClause) \ V(kWindowClause) \ V(kWindowDefList) \ V(kWindowDef) \ V(kWindowName) \ V(kWindow) \ V(kOptPartition) \ V(kOptFrameClause) \ V(kRangeOrRows) \ V(kFrameBoundStart) \ V(kFrameBoundEnd) \ V(kFrameBound) \ V(kOptExistWindowName) \ V(kOptGroupClause) \ V(kOptHavingClause) \ V(kOptWhereClause) \ V(kWhereClause) \ V(kFromClause) \ V(kTableRef) \ V(kOptIndex) \ V(kOptOn) \ V(kOptUsing) \ V(kColumnNameList) \ V(kOptTablePrefix) \ V(kJoinOp) \ V(kOptJoinType) \ V(kExprList) \ V(kOptLimitClause) \ V(kLimitClause) \ V(kOptLimitRowCount) \ V(kOptOrderClause) \ V(kOptOrderNulls) \ V(kOrderItemList) \ V(kOrderItem) \ V(kOptOrderBehavior) \ V(kOptWithClause) \ V(kCteTableList) \ V(kCteTable) \ V(kCteTableName) \ V(kOptAllOrDistinct) \ V(kCreateTableStmt) \ V(kCreateIndexStmt) \ V(kCreateTriggerStmt) \ V(kCreateViewStmt) \ V(kOptTableOptionList) \ V(kTableOptionList) \ V(kTableOption) \ V(kOptOpComma) \ V(kOptIgnoreOrReplace) \ V(kOptViewAlgorithm) \ V(kOptSqlSecurity) \ V(kOptIndexOption) \ V(kOptExtraOption) \ V(kIndexAlgorithmOption) \ V(kLockOption) \ V(kOptOpEqual) \ V(kTriggerEvents) \ V(kTriggerName) \ V(kTriggerActionTime) \ V(kDropIndexStmt) \ V(kDropTableStmt) \ V(kOptRestrictOrCascade) \ V(kDropTriggerStmt) \ V(kDropViewStmt) \ V(kInsertStmt) \ V(kInsertRest) \ V(kSuperValuesList) \ V(kValuesList) \ V(kOptOnConflict) \ V(kOptConflictExpr) \ V(kIndexedColumnList) \ V(kIndexedColumn) \ V(kUpdateStmt) \ V(kAlterAction) \ V(kAlterConstantAction) \ V(kColumnDefList) \ V(kColumnDef) \ V(kOptColumnConstraintList) \ V(kColumnConstraintList) \ V(kColumnConstraint) \ V(kOptReferenceClause) \ V(kOptCheck) \ V(kConstraintType) \ V(kReferenceClause) \ V(kOptForeignKey) \ V(kOptForeignKeyActions) \ V(kForeignKeyActions) \ V(kKeyActions) \ V(kOptConstraintAttributeSpec) \ V(kOptInitialTime) \ V(kConstraintName) \ V(kOptTemp) \ V(kOptCheckOption) \ V(kOptColumnNameListP) \ V(kSetClauseList) \ V(kSetClause) \ V(kOptAsAlias) \ V(kExpr) \ V(kOperand) \ V(kCastExpr) \ V(kScalarExpr) \ V(kUnaryExpr) \ V(kBinaryExpr) \ V(kLogicExpr) \ V(kInExpr) \ V(kCaseExpr) \ V(kBetweenExpr) \ V(kExistsExpr) \ V(kFunctionExpr) \ V(kOptDistinct) \ V(kOptFilterClause) \ V(kOptOverClause) \ V(kCaseList) \ V(kCaseClause) \ V(kCompExpr) \ V(kExtractExpr) \ V(kDatetimeField) \ V(kArrayExpr) \ V(kArrayIndex) \ V(kLiteral) \ V(kStringLiteral) \ V(kBoolLiteral) \ V(kNumLiteral) \ V(kIntLiteral) \ V(kFloatLiteral) \ V(kOptColumn) \ V(kTriggerBody) \ V(kOptIfNotExist) \ V(kOptIfExist) \ V(kIdentifier) \ V(kAsAlias) \ V(kTableName) \ V(kColumnName) \ V(kOptIndexKeyword) \ V(kViewName) \ V(kFunctionName) \ V(kBinaryOp) \ V(kOptNot) \ V(kName) \ V(kTypeName) \ V(kCharacterType) \ V(kCharacterWithLength) \ V(kCharacterWithoutLength) \ V(kCharacterConflicta) \ V(kNumericType) \ V(kOptTableConstraintList) \ V(kTableConstraintList) \ V(kTableConstraint) \ V(kOptEnforced) \ V(kUnknown) #define ALLCLASS(V) \ V(Program) \ V(Stmtlist) \ V(Stmt) \ V(CreateStmt) \ V(DropStmt) \ V(AlterStmt) \ V(SelectStmt) \ V(SelectWithParens) \ V(SelectNoParens) \ V(SelectClauseList) \ V(SelectClause) \ V(CombineClause) \ V(OptFromClause) \ V(SelectTarget) \ V(OptWindowClause) \ V(WindowClause) \ V(WindowDefList) \ V(WindowDef) \ V(WindowName) \ V(Window) \ V(OptPartition) \ V(OptFrameClause) \ V(RangeOrRows) \ V(FrameBoundStart) \ V(FrameBoundEnd) \ V(FrameBound) \ V(OptExistWindowName) \ V(OptGroupClause) \ V(OptHavingClause) \ V(OptWhereClause) \ V(WhereClause) \ V(FromClause) \ V(TableRef) \ V(OptIndex) \ V(OptOn) \ V(OptUsing) \ V(ColumnNameList) \ V(OptTablePrefix) \ V(JoinOp) \ V(OptJoinType) \ V(ExprList) \ V(OptLimitClause) \ V(LimitClause) \ V(OptLimitRowCount) \ V(OptOrderClause) \ V(OptOrderNulls) \ V(OrderItemList) \ V(OrderItem) \ V(OptOrderBehavior) \ V(OptWithClause) \ V(CteTableList) \ V(CteTable) \ V(CteTableName) \ V(OptAllOrDistinct) \ V(CreateTableStmt) \ V(CreateIndexStmt) \ V(CreateTriggerStmt) \ V(CreateViewStmt) \ V(OptTableOptionList) \ V(TableOptionList) \ V(TableOption) \ V(OptOpComma) \ V(OptIgnoreOrReplace) \ V(OptViewAlgorithm) \ V(OptSqlSecurity) \ V(OptIndexOption) \ V(OptExtraOption) \ V(IndexAlgorithmOption) \ V(LockOption) \ V(OptOpEqual) \ V(TriggerEvents) \ V(TriggerName) \ V(TriggerActionTime) \ V(DropIndexStmt) \ V(DropTableStmt) \ V(OptRestrictOrCascade) \ V(DropTriggerStmt) \ V(DropViewStmt) \ V(InsertStmt) \ V(InsertRest) \ V(SuperValuesList) \ V(ValuesList) \ V(OptOnConflict) \ V(OptConflictExpr) \ V(IndexedColumnList) \ V(IndexedColumn) \ V(UpdateStmt) \ V(AlterAction) \ V(AlterConstantAction) \ V(ColumnDefList) \ V(ColumnDef) \ V(OptColumnConstraintList) \ V(ColumnConstraintList) \ V(ColumnConstraint) \ V(OptReferenceClause) \ V(OptCheck) \ V(ConstraintType) \ V(ReferenceClause) \ V(OptForeignKey) \ V(OptForeignKeyActions) \ V(ForeignKeyActions) \ V(KeyActions) \ V(OptConstraintAttributeSpec) \ V(OptInitialTime) \ V(ConstraintName) \ V(OptTemp) \ V(OptCheckOption) \ V(OptColumnNameListP) \ V(SetClauseList) \ V(SetClause) \ V(OptAsAlias) \ V(Expr) \ V(Operand) \ V(CastExpr) \ V(ScalarExpr) \ V(UnaryExpr) \ V(BinaryExpr) \ V(LogicExpr) \ V(InExpr) \ V(CaseExpr) \ V(BetweenExpr) \ V(ExistsExpr) \ V(FunctionExpr) \ V(OptDistinct) \ V(OptFilterClause) \ V(OptOverClause) \ V(CaseList) \ V(CaseClause) \ V(CompExpr) \ V(ExtractExpr) \ V(DatetimeField) \ V(ArrayExpr) \ V(ArrayIndex) \ V(Literal) \ V(StringLiteral) \ V(BoolLiteral) \ V(NumLiteral) \ V(IntLiteral) \ V(FloatLiteral) \ V(OptColumn) \ V(TriggerBody) \ V(OptIfNotExist) \ V(OptIfExist) \ V(Identifier) \ V(AsAlias) \ V(TableName) \ V(ColumnName) \ V(OptIndexKeyword) \ V(ViewName) \ V(FunctionName) \ V(BinaryOp) \ V(OptNot) \ V(Name) \ V(TypeName) \ V(CharacterType) \ V(CharacterWithLength) \ V(CharacterWithoutLength) \ V(CharacterConflicta) \ V(NumericType) \ V(OptTableConstraintList) \ V(TableConstraintList) \ V(TableConstraint) \ V(OptEnforced) #define ALLDATATYPE(V) \ V(DataWhatever) \ V(DataTableName) \ V(DataColumnName) \ V(DataViewName) \ V(DataFunctionName) \ V(DataPragmaKey) \ V(DataPragmaValue) \ V(DataTableSpaceName) \ V(DataSequenceName) \ V(DataExtensionName) \ V(DataRoleName) \ V(DataSchemaName) \ V(DataDatabase) \ V(DataTriggerName) \ V(DataWindowName) \ V(DataTriggerFunction) \ V(DataDomainName) \ V(DataAliasName) #define SWITCHSTART switch (case_idx_) { #define SWITCHEND \ default: \ \ assert(0); \ } #define CASESTART(idx) case CASE##idx: { #define CASEEND \ break; \ } #define TRANSLATESTART IR *res = NULL; #define GENERATESTART(len) case_idx_ = rand() % len; #define GENERATEEND return; #define TRANSLATEEND \ v_ir_collector.push_back(res); \ \ return res; #define TRANSLATEENDNOPUSH return res; #define SAFETRANSLATE(a) (assert(a != NULL), a->translate(v_ir_collector)) #define SAFEDELETE(a) \ if (a != NULL) a->deep_delete() #define SAFEDELETELIST(a) \ for (auto _i : a) SAFEDELETE(_i) #define OP1(a) new IROperator(a) #define OP2(a, b) new IROperator(a, b) #define OP3(a, b, c) new IROperator(a, b, c) #define OPSTART(a) new IROperator(a) #define OPMID(a) new IROperator("", a, "") #define OPEND(a) new IROperator("", "", a) #define OP0() new IROperator() #define TRANSLATELIST(t, a, b) \ res = SAFETRANSLATE(a[0]); \ res = new IR(t, OP0(), res); \ v_ir_collector.push_back(res); \ for (int i = 1; i < a.size(); i++) { \ IR *tmp = SAFETRANSLATE(a[i]); \ res = new IR(t, OPMID(b), res, tmp); \ v_ir_collector.push_back(res); \ } #define PUSH(a) v_ir_collector.push_back(a) #define MUTATESTART \ IR *res = NULL; \ auto randint = get_rand_int(3); \ switch (randint) { #define DOLEFT case 0: { #define DORIGHT \ break; \ } \ \ case 1: { #define DOBOTH \ break; \ } \ case 2: { #define MUTATEEND \ } \ } \ \ return res; #endif ================================================ FILE: srcs/internal/mysql/include/mutator.h ================================================ #ifndef __MUTATOR_H__ #define __MUTATOR_H__ #include #include #include "ast.h" #include "define.h" #include "utils.h" #define LUCKY_NUMBER 500 using namespace std; enum RELATIONTYPE { kRelationElement, kRelationSubtype, kRelationAlias, }; class Mutator { public: Mutator() { srand(time(nullptr)); } IR *deep_copy_with_record(const IR *root, const IR *record); unsigned long hash(IR *); unsigned long hash(string &); IR *ir_random_generator(vector v_ir_collector); vector mutate_all(vector &v_ir_collector); // done vector mutate(IR *input); // done IR *strategy_delete(IR *cur); // Done IR *strategy_insert(IR *cur); // Done IR *strategy_replace(IR *cur); // done bool lucky_enough_to_be_mutated(unsigned int mutated_times); // done bool replace(IR *root, IR *old_ir, IR *new_ir); // done IR *locate_parent(IR *root, IR *old_ir); // done void init(string f_testcase = "", string f_common_string = "", string file2d = "", string file1d = "", string f_gen_type = ""); // DONE void init_ir_library(string filename); // DONE void init_value_library(); // DONE void init_common_string(string filename); // DONE void init_data_library(string filename); // DONE void init_data_library_2d(string filename); // DONE void init_not_mutatable_type(string filename); // DONE void init_safe_generate_type(string filename); void add_ir_to_library(IR *); // DONE string get_a_string(); // DONE unsigned long get_a_val(); // DONE IR *get_ir_from_library(IRTYPE); // DONE IR *generate_ir_by_type(IRTYPE); // Done string get_data_by_type(DATATYPE); pair get_data_2d_by_type(DATATYPE, DATATYPE); // DONE void reset_data_library(); // DONE string parse_data(string &); // DONE void extract_struct(IR *); // Done void extract_struct2(IR *); // Done bool fix(IR *root); // done vector split_to_stmt(IR *root, map &m_save, set &split_set); // done bool connect_back(map &m_save); // done bool fix_one(IR *stmt_root, map>> &scope_library); // done void analyze_scope(IR *stmt_root); map> build_graph( IR *stmt_root, map>> &scope_library); bool fill_stmt_graph(map> &graph); // done void clear_scope_library(bool clear_define); // done IR *find_closest_node(IR *stmt_root, IR *node, DATATYPE type); // done bool fill_one(IR *parent); // done bool fill_one_pair(IR *parent, IR *child); // done bool fill_stmt_graph_one(map> &graph, IR *ir); // done bool validate(IR *&root); // done unsigned int calc_node(IR *root); bool replace_one_value_from_datalibray_2d(DATATYPE p_datatype, DATATYPE c_data_type, string &p_key, string &old_c_value, string &new_c_value); bool remove_one_pair_from_datalibrary_2d(DATATYPE p_datatype, DATATYPE c_data_type, string &p_key); bool replace_one_from_datalibrary(DATATYPE datatype, string &old_str, string &new_str); bool remove_one_from_datalibrary(DATATYPE datatype, string &key); ~Mutator(); void debug(IR *root); int try_fix(char *buf, int len, char *&new_buf, int &new_len); void add_ir_to_library_no_deepcopy(IR *); // DONE IR *record_ = NULL; IR *mutated_root_ = NULL; map> ir_library_; map> ir_library_hash_; vector string_library_; set string_library_hash_; vector value_library_; map> relationmap_; vector common_string_library_; set not_mutatable_types_; set string_types_; set int_types_; set float_types_; set safe_generate_type_; set split_stmt_types_; set split_substmt_types_; map> data_library_; map>>> data_library_2d_; map> g_data_library_; map> g_data_library_hash_; map>>> g_data_library_2d_; map>>> g_data_library_2d_hash_; map>> scope_library_; set global_hash_; }; #endif ================================================ FILE: srcs/internal/mysql/include/utils.h ================================================ #ifndef __UTILS_H__ #define __UTILS_H__ #include #include #include "../parser/bison_parser.h" #include "../parser/flex_lexer.h" using std::string; using std::vector; #define get_rand_int(range) rand() % (range) #define vector_rand_ele_safe(a) \ (a.size() != 0 ? a[get_rand_int(a.size())] : gen_id_name()) #define vector_rand_ele(a) (a[get_rand_int(a.size())]) void trim_string(string &); string gen_string(); double gen_float(); long gen_long(); int gen_int(); uint64_t ducking_hash(const void *key, int len); vector get_all_files_in_dir(const char *dir_name); Program *parser(string sql); #endif ================================================ FILE: srcs/internal/mysql/mysql.cc ================================================ #include "mysql.h" #include #include #include #include "absl/strings/str_format.h" #include "ast.h" #include "define.h" #include "mutator.h" #include "utils.h" MySQLDB *create_mysql() { return new MySQLDB; } MySQLDB::MySQLDB() { mutator_ = std::make_unique(); } bool MySQLDB::initialize(YAML::Node config) { const std::string init_lib_path = config["init_lib"].as(); std::string data_lib = config["data_lib"].as(); std::vector file_list = get_all_files_in_dir(init_lib_path.c_str()); for (auto &f : file_list) { mutator_->init(absl::StrFormat("%s/%s", init_lib_path, f)); } mutator_->init_data_library(data_lib); return true; } bool MySQLDB::save_interesting_query(const std::string &query) { if (Program *program = parser(query)) { std::vector ir_set; IR *ir = program->translate(ir_set); ir_set.clear(); mutator_->extract_struct(ir); string strip_sql = ir->to_string(); auto p_strip_sql = parser(strip_sql); if (p_strip_sql) { auto root_ir = p_strip_sql->translate(ir_set); p_strip_sql->deep_delete(); mutator_->add_ir_to_library(root_ir); deep_delete(root_ir); } return true; } return false; } size_t MySQLDB::validate_all(std::vector &ir_set) { for (IR *&ir : ir_set) { bool result = mutator_->validate(ir); if (!result) { continue; } std::string validated_ir = ir->to_string(); validated_test_cases_.push(std::move(validated_ir)); } return validated_test_cases_.size(); } bool MySQLDB::has_mutated_test_cases() { return !validated_test_cases_.empty(); } size_t MySQLDB::mutate(const std::string &query) { std::vector ir_set, mutated_tree; Program *program_root = parser(query.c_str()); if (program_root == nullptr) { return 0; } // TODO: Remove this uncessary try. // Or we will have exception from the parser? try { program_root->translate(ir_set); } catch (...) { for (auto ir : ir_set) { delete ir; } program_root->deep_delete(); } program_root->deep_delete(); mutated_tree = mutator_->mutate_all(ir_set); deep_delete(ir_set[ir_set.size() - 1]); size_t validated_ir_size = validate_all(mutated_tree); for (auto ir : mutated_tree) { deep_delete(ir); } // std::cerr << "validated ir size: " << validated_ir_size << std::endl; return validated_ir_size; } std::string MySQLDB::get_next_mutated_query() { assert(has_mutated_test_cases()); auto result = validated_test_cases_.top(); validated_test_cases_.pop(); return result; } ================================================ FILE: srcs/internal/mysql/mysql.h ================================================ #ifndef __MYSQL_H__ #define __MYSQL_H__ #include #include #include "db.h" class Mutator; class IR; class MySQLDB : public DataBase { public: MySQLDB(); // Set up the database. virtual bool initialize(YAML::Node config); virtual size_t mutate(const std::string &); virtual bool save_interesting_query(const std::string &); // Return an new query to test. The `buffer` should be unmanaged, virtual std::string get_next_mutated_query(); virtual bool has_mutated_test_cases(); // Clean up the enviroment, e.g., drop all the databases. virtual bool clean_up() { return true; } private: size_t validate_all(std::vector &ir_set); std::unique_ptr mutator_; std::stack validated_test_cases_; }; MySQLDB *create_mysql(); #endif ================================================ FILE: srcs/internal/mysql/parser/Makefile ================================================ # bison's version is too old on OSX, allow user to pass in custom path BISON?=bison FLEX?=flex #BISON_VERSION=$(shell $(BISON) --version | head -n 1 | grep -o '[0-9]\.[0-9]\+') #BISON_VERSION_SUPPORTED=$(shell echo $(BISON_VERSION) \>= 3.0 | bc) #ifneq ($(BISON_VERSION_SUPPORTED), 1) #$(error Bison version $(BISON_VERSION) not supported. If you are using OS X, `bison` uses the system default instead of the brew version. Run BISON=/usr/local/opt/bison/bin/bison make) #endif #FLEX_VERSION=$(shell $(FLEX) --version | head -n 1 | grep -o '[0-9]\.[0-9]\+') #FLEX_VERSION_SUPPORTED=$(shell echo $(FLEX_VERSION) \>= 2.6 | bc) #ifneq ($(FLEX_VERSION_SUPPORTED), 1) #$(error Flex version $(FLEX_VERSION) not supported. If you are using OS X, `flex` uses the system default instead of the brew version. Run FLEX=/usr/local/opt/flex/bin/flex make) #endif all: bison_parser.cpp flex_lexer.cpp bison_parser.cpp: bison.y $(BISON) bison.y --output=bison_parser.cpp --defines=bison_parser.h --verbose -Wconflicts-rr flex_lexer.cpp: flex.l $(FLEX) flex.l clean: rm -f bison_parser.cpp flex_lexer.cpp bison_parser.h flex_lexer.h *.output # Tests if the parser builds correctly and doesn't contain conflicts. test: ! $(BISON) bison_parser.y -v --output=conflict_test.cpp 2>&1 | grep "conflict" >/tmp/2 ================================================ FILE: srcs/internal/mysql/parser/bison.y ================================================ %{ #include "bison_parser.h" #include "flex_lexer.h" #include #include int yyerror(YYLTYPE* llocp, Program * result, yyscan_t scanner, const char *msg) { return 0; } %} %code requires { #include "../include/ast.h" #include "parser_typedef.h" } %define api.prefix {ff_} %define parse.error verbose %define api.pure full %define api.token.prefix {SQL_} %locations %initial-action { // Initialize @$.first_column = 0; @$.last_column = 0; @$.first_line = 0; @$.last_line = 0; @$.total_column = 0; @$.string_length = 0; }; %lex-param { yyscan_t scanner } %parse-param { Program* result } %parse-param { yyscan_t scanner } %union FF_STYPE{ long ival; char* sval; double fval; Program * program_t; Stmtlist * stmtlist_t; Stmt * stmt_t; CreateStmt * create_stmt_t; DropStmt * drop_stmt_t; AlterStmt * alter_stmt_t; SelectStmt * select_stmt_t; SelectWithParens * select_with_parens_t; SelectNoParens * select_no_parens_t; SelectClauseList * select_clause_list_t; SelectClause * select_clause_t; CombineClause * combine_clause_t; OptFromClause * opt_from_clause_t; SelectTarget * select_target_t; OptWindowClause * opt_window_clause_t; WindowClause * window_clause_t; WindowDefList * window_def_list_t; WindowDef * window_def_t; WindowName * window_name_t; Window * window_t; OptPartition * opt_partition_t; OptFrameClause * opt_frame_clause_t; RangeOrRows * range_or_rows_t; FrameBoundStart * frame_bound_start_t; FrameBoundEnd * frame_bound_end_t; FrameBound * frame_bound_t; OptExistWindowName * opt_exist_window_name_t; OptGroupClause * opt_group_clause_t; OptHavingClause * opt_having_clause_t; OptWhereClause * opt_where_clause_t; WhereClause * where_clause_t; FromClause * from_clause_t; TableRef * table_ref_t; OptIndex * opt_index_t; OptOn * opt_on_t; OptUsing * opt_using_t; ColumnNameList * column_name_list_t; OptTablePrefix * opt_table_prefix_t; JoinOp * join_op_t; OptJoinType * opt_join_type_t; ExprList * expr_list_t; OptLimitClause * opt_limit_clause_t; LimitClause * limit_clause_t; OptLimitRowCount * opt_limit_row_count_t; OptOrderClause * opt_order_clause_t; OptOrderNulls * opt_order_nulls_t; OrderItemList * order_item_list_t; OrderItem * order_item_t; OptOrderBehavior * opt_order_behavior_t; OptWithClause * opt_with_clause_t; CteTableList * cte_table_list_t; CteTable * cte_table_t; CteTableName * cte_table_name_t; OptAllOrDistinct * opt_all_or_distinct_t; CreateTableStmt * create_table_stmt_t; CreateIndexStmt * create_index_stmt_t; CreateTriggerStmt * create_trigger_stmt_t; CreateViewStmt * create_view_stmt_t; OptTableOptionList * opt_table_option_list_t; TableOptionList * table_option_list_t; TableOption * table_option_t; OptOpComma * opt_op_comma_t; OptIgnoreOrReplace * opt_ignore_or_replace_t; OptViewAlgorithm * opt_view_algorithm_t; OptSqlSecurity * opt_sql_security_t; OptIndexOption * opt_index_option_t; OptExtraOption * opt_extra_option_t; IndexAlgorithmOption * index_algorithm_option_t; LockOption * lock_option_t; OptOpEqual * opt_op_equal_t; TriggerEvents * trigger_events_t; TriggerName * trigger_name_t; TriggerActionTime * trigger_action_time_t; DropIndexStmt * drop_index_stmt_t; DropTableStmt * drop_table_stmt_t; OptRestrictOrCascade * opt_restrict_or_cascade_t; DropTriggerStmt * drop_trigger_stmt_t; DropViewStmt * drop_view_stmt_t; InsertStmt * insert_stmt_t; InsertRest * insert_rest_t; SuperValuesList * super_values_list_t; ValuesList * values_list_t; OptOnConflict * opt_on_conflict_t; OptConflictExpr * opt_conflict_expr_t; IndexedColumnList * indexed_column_list_t; IndexedColumn * indexed_column_t; UpdateStmt * update_stmt_t; AlterAction * alter_action_t; AlterConstantAction * alter_constant_action_t; ColumnDefList * column_def_list_t; ColumnDef * column_def_t; OptColumnConstraintList * opt_column_constraint_list_t; ColumnConstraintList * column_constraint_list_t; ColumnConstraint * column_constraint_t; OptReferenceClause * opt_reference_clause_t; OptCheck * opt_check_t; ConstraintType * constraint_type_t; ReferenceClause * reference_clause_t; OptForeignKey * opt_foreign_key_t; OptForeignKeyActions * opt_foreign_key_actions_t; ForeignKeyActions * foreign_key_actions_t; KeyActions * key_actions_t; OptConstraintAttributeSpec * opt_constraint_attribute_spec_t; OptInitialTime * opt_initial_time_t; ConstraintName * constraint_name_t; OptTemp * opt_temp_t; OptCheckOption * opt_check_option_t; OptColumnNameListP * opt_column_name_list_p_t; SetClauseList * set_clause_list_t; SetClause * set_clause_t; OptAsAlias * opt_as_alias_t; Expr * expr_t; Operand * operand_t; CastExpr * cast_expr_t; ScalarExpr * scalar_expr_t; UnaryExpr * unary_expr_t; BinaryExpr * binary_expr_t; LogicExpr * logic_expr_t; InExpr * in_expr_t; CaseExpr * case_expr_t; BetweenExpr * between_expr_t; ExistsExpr * exists_expr_t; FunctionExpr * function_expr_t; OptDistinct * opt_distinct_t; OptFilterClause * opt_filter_clause_t; OptOverClause * opt_over_clause_t; CaseList * case_list_t; CaseClause * case_clause_t; CompExpr * comp_expr_t; ExtractExpr * extract_expr_t; DatetimeField * datetime_field_t; ArrayExpr * array_expr_t; ArrayIndex * array_index_t; Literal * literal_t; StringLiteral * string_literal_t; BoolLiteral * bool_literal_t; NumLiteral * num_literal_t; IntLiteral * int_literal_t; FloatLiteral * float_literal_t; OptColumn * opt_column_t; TriggerBody * trigger_body_t; OptIfNotExist * opt_if_not_exist_t; OptIfExist * opt_if_exist_t; Identifier * identifier_t; AsAlias * as_alias_t; TableName * table_name_t; ColumnName * column_name_t; OptIndexKeyword * opt_index_keyword_t; ViewName * view_name_t; FunctionName * function_name_t; BinaryOp * binary_op_t; OptNot * opt_not_t; Name * name_t; TypeName * type_name_t; CharacterType * character_type_t; CharacterWithLength * character_with_length_t; CharacterWithoutLength * character_without_length_t; CharacterConflicta * character_conflicta_t; NumericType * numeric_type_t; OptTableConstraintList * opt_table_constraint_list_t; TableConstraintList * table_constraint_list_t; TableConstraint * table_constraint_t; OptEnforced * opt_enforced_t; } %token OP_NOTEQUAL ENABLE SIMPLE TEXT OVER YEAR INSERT_METHOD OP_SEMI %token BIGINT LIMIT OP_GREATERTHAN WITH ORDER OPTION LAST UNBOUNDED %token PRECEDING EXCEPT NUMERIC OP_LESSTHAN ACTION BEFORE OP_GREATEREQ CHECK %token COMPACT FULL NATURAL BINARY NATIONAL ENUM REDUNDANT OP_ADD %token CURRENT MERGE TRIGGER COMPRESSED OP_SUB FALSE UNIQUE WHERE %token MINUTE FIRST ON PARTIAL DOUBLE AFTER PRIMARY MONTH %token DEFERRED VALUES LONGTEXT SQL SHARED VALIDATION OR VIEW %token INDEX GROUP OP_MUL INPLACE FOREIGN RESTRICT SPATIAL FOLLOWING %token DEC SELECT NONE DISTINCT TRUE DYNAMIC BY OP_MOD %token INTEGER SECURITY IS DEFINER ROW ENFORCED END RECURSIVE %token FOR TEMPTABLE UNION NULLS UPDATE ELSE RANGE SET %token INVOKER OFFSET INDEXED FORCE NCHAR AND INITIALLY PRECISION %token FILTER WITHOUT NOT DELETE DEFFERRABLE REAL THEN UNDEFINED %token DEFAULT CROSS CHAR REFERENCES OP_XOR CASE FIXED HOUR %token NO COLUMN LOCAL DROP REPLACE ASC OP_COMMA DISABLE %token TABLE ARRAY IF EXTRACT LEFT FULLTEXT HASH ALGORITHM %token LOCK DECIMAL PARTITION CASCADE ADD BETWEEN OP_LESSEQ MATCH %token ALL ROWS JOIN LIKE OP_RP IGNORE INT MEDIUMTEXT %token BOOLEAN KEY EACH USING RENAME DO OP_LP CHARACTER %token UMINUS CAST GROUPS OUTER NULL SMALLINT EXCLUSIVE TEMPORARY %token CONSTRAINT CREATE OP_LBRACKET WHEN IMMEDIATE TO BTREE DAY %token CONFLICT ROW_FORMAT OP_RBRACKET EXISTS INSERT KEYS INTO OP_DIVIDE %token CASCADED ISNULL AS INNER INTERSECT IN OP_EQUAL VARCHAR %token COPY ALTER DESC FROM TINYTEXT FLOAT SECOND WINDOW %token NOTHING HAVING %token INTLITERAL %token FLOATLITERAL %token IDENTIFIER %token STRINGLITERAL %type program %type stmtlist %type stmt %type create_stmt %type drop_stmt %type alter_stmt %type select_stmt %type select_with_parens %type select_no_parens %type select_clause_list %type select_clause %type combine_clause %type opt_from_clause %type select_target %type opt_window_clause %type window_clause %type window_def_list %type window_def %type window_name %type window %type opt_partition %type opt_frame_clause %type range_or_rows %type frame_bound_start %type frame_bound_end %type frame_bound %type opt_exist_window_name %type opt_group_clause %type opt_having_clause %type opt_where_clause %type where_clause %type from_clause %type table_ref %type opt_index %type opt_on %type opt_using %type column_name_list %type opt_table_prefix %type join_op %type opt_join_type %type expr_list %type opt_limit_clause %type limit_clause %type opt_limit_row_count %type opt_order_clause %type opt_order_nulls %type order_item_list %type order_item %type opt_order_behavior %type opt_with_clause %type cte_table_list %type cte_table %type cte_table_name %type opt_all_or_distinct %type create_table_stmt %type create_index_stmt %type create_trigger_stmt %type create_view_stmt %type opt_table_option_list %type table_option_list %type table_option %type opt_op_comma %type opt_ignore_or_replace %type opt_view_algorithm %type opt_sql_security %type opt_index_option %type opt_extra_option %type index_algorithm_option %type lock_option %type opt_op_equal %type trigger_events %type trigger_name %type trigger_action_time %type drop_index_stmt %type drop_table_stmt %type opt_restrict_or_cascade %type drop_trigger_stmt %type drop_view_stmt %type insert_stmt %type insert_rest %type super_values_list %type values_list %type opt_on_conflict %type opt_conflict_expr %type indexed_column_list %type indexed_column %type update_stmt %type alter_action %type alter_constant_action %type column_def_list %type column_def %type opt_column_constraint_list %type column_constraint_list %type column_constraint %type opt_reference_clause %type opt_check %type constraint_type %type reference_clause %type opt_foreign_key %type opt_foreign_key_actions %type foreign_key_actions %type key_actions %type opt_constraint_attribute_spec %type opt_initial_time %type constraint_name %type opt_temp %type opt_check_option %type opt_column_name_list_p %type set_clause_list %type set_clause %type opt_as_alias %type expr %type operand %type cast_expr %type scalar_expr %type unary_expr %type binary_expr %type logic_expr %type in_expr %type case_expr %type between_expr %type exists_expr %type function_expr %type opt_distinct %type opt_filter_clause %type opt_over_clause %type case_list %type case_clause %type comp_expr %type extract_expr %type datetime_field %type array_expr %type array_index %type literal %type string_literal %type bool_literal %type num_literal %type int_literal %type float_literal %type opt_column %type trigger_body %type opt_if_not_exist %type opt_if_exist %type identifier %type as_alias %type table_name %type column_name %type opt_index_keyword %type view_name %type function_name %type binary_op %type opt_not %type name %type type_name %type character_type %type character_with_length %type character_without_length %type character_conflicta %type numeric_type %type opt_table_constraint_list %type table_constraint_list %type table_constraint %type opt_enforced %left OR %left AND %left NOT %nonassoc OP_NOTEQUAL MATCH LIKE OP_EQUAL %nonassoc OP_GREATERTHAN OP_LESSTHAN OP_GREATEREQ OP_LESSEQ %nonassoc ISNULL %nonassoc IS %left OP_ADD OP_SUB %left OP_MUL OP_MOD OP_DIVIDE %left OP_XOR %right UMINUS %left OP_LBRACKET OP_RBRACKET %left OP_RP OP_LP %nonassoc JOIN %nonassoc ON %destructor{ free( ($$) ); } %destructor{ } %destructor { if($$!=NULL)$$->deep_delete(); } <*> %% program: stmtlist { $$ = result; $$->case_idx_ = CASE0; $$->stmtlist_ = $1; $$ = NULL; } ; stmtlist: stmt OP_SEMI stmtlist { $$ = new Stmtlist(); $$->case_idx_ = CASE0; $$->stmt_ = $1; $$->stmtlist_ = $3; } | stmt OP_SEMI { $$ = new Stmtlist(); $$->case_idx_ = CASE1; $$->stmt_ = $1; } ; stmt: create_stmt { $$ = new Stmt(); $$->case_idx_ = CASE0; $$->create_stmt_ = $1; } | drop_stmt { $$ = new Stmt(); $$->case_idx_ = CASE1; $$->drop_stmt_ = $1; } | select_stmt { $$ = new Stmt(); $$->case_idx_ = CASE2; $$->select_stmt_ = $1; } | update_stmt { $$ = new Stmt(); $$->case_idx_ = CASE3; $$->update_stmt_ = $1; } | insert_stmt { $$ = new Stmt(); $$->case_idx_ = CASE4; $$->insert_stmt_ = $1; } | alter_stmt { $$ = new Stmt(); $$->case_idx_ = CASE5; $$->alter_stmt_ = $1; } ; create_stmt: create_table_stmt { $$ = new CreateStmt(); $$->case_idx_ = CASE0; $$->create_table_stmt_ = $1; } | create_index_stmt { $$ = new CreateStmt(); $$->case_idx_ = CASE1; $$->create_index_stmt_ = $1; } | create_trigger_stmt { $$ = new CreateStmt(); $$->case_idx_ = CASE2; $$->create_trigger_stmt_ = $1; } | create_view_stmt { $$ = new CreateStmt(); $$->case_idx_ = CASE3; $$->create_view_stmt_ = $1; } ; drop_stmt: drop_index_stmt { $$ = new DropStmt(); $$->case_idx_ = CASE0; $$->drop_index_stmt_ = $1; } | drop_table_stmt { $$ = new DropStmt(); $$->case_idx_ = CASE1; $$->drop_table_stmt_ = $1; } | drop_trigger_stmt { $$ = new DropStmt(); $$->case_idx_ = CASE2; $$->drop_trigger_stmt_ = $1; } | drop_view_stmt { $$ = new DropStmt(); $$->case_idx_ = CASE3; $$->drop_view_stmt_ = $1; } ; alter_stmt: ALTER TABLE table_name alter_action { $$ = new AlterStmt(); $$->case_idx_ = CASE0; $$->table_name_ = $3; $$->alter_action_ = $4; } ; select_stmt: select_no_parens %prec UMINUS { $$ = new SelectStmt(); $$->case_idx_ = CASE0; $$->select_no_parens_ = $1; } | select_with_parens %prec UMINUS { $$ = new SelectStmt(); $$->case_idx_ = CASE1; $$->select_with_parens_ = $1; } ; select_with_parens: OP_LP select_no_parens OP_RP { $$ = new SelectWithParens(); $$->case_idx_ = CASE0; $$->select_no_parens_ = $2; } | OP_LP select_with_parens OP_RP { $$ = new SelectWithParens(); $$->case_idx_ = CASE1; $$->select_with_parens_ = $2; } ; select_no_parens: opt_with_clause select_clause_list opt_order_clause opt_limit_clause { $$ = new SelectNoParens(); $$->case_idx_ = CASE0; $$->opt_with_clause_ = $1; $$->select_clause_list_ = $2; $$->opt_order_clause_ = $3; $$->opt_limit_clause_ = $4; } ; select_clause_list: select_clause { $$ = new SelectClauseList(); $$->case_idx_ = CASE0; $$->select_clause_ = $1; } | select_clause combine_clause select_clause_list { $$ = new SelectClauseList(); $$->case_idx_ = CASE1; $$->select_clause_ = $1; $$->combine_clause_ = $2; $$->select_clause_list_ = $3; } ; select_clause: SELECT opt_all_or_distinct select_target opt_from_clause opt_where_clause opt_group_clause opt_window_clause { $$ = new SelectClause(); $$->case_idx_ = CASE0; $$->opt_all_or_distinct_ = $2; $$->select_target_ = $3; $$->opt_from_clause_ = $4; $$->opt_where_clause_ = $5; $$->opt_group_clause_ = $6; $$->opt_window_clause_ = $7; } ; combine_clause: UNION { $$ = new CombineClause(); $$->case_idx_ = CASE0; } | INTERSECT { $$ = new CombineClause(); $$->case_idx_ = CASE1; } | EXCEPT { $$ = new CombineClause(); $$->case_idx_ = CASE2; } ; opt_from_clause: from_clause { $$ = new OptFromClause(); $$->case_idx_ = CASE0; $$->from_clause_ = $1; } | { $$ = new OptFromClause(); $$->case_idx_ = CASE1; } ; select_target: expr_list { $$ = new SelectTarget(); $$->case_idx_ = CASE0; $$->expr_list_ = $1; } ; opt_window_clause: window_clause { $$ = new OptWindowClause(); $$->case_idx_ = CASE0; $$->window_clause_ = $1; } | { $$ = new OptWindowClause(); $$->case_idx_ = CASE1; } ; window_clause: WINDOW window_def_list { $$ = new WindowClause(); $$->case_idx_ = CASE0; $$->window_def_list_ = $2; } ; window_def_list: window_def { $$ = new WindowDefList(); $$->case_idx_ = CASE0; $$->window_def_ = $1; } | window_def OP_COMMA window_def_list { $$ = new WindowDefList(); $$->case_idx_ = CASE1; $$->window_def_ = $1; $$->window_def_list_ = $3; } ; window_def: window_name AS OP_LP window OP_RP { $$ = new WindowDef(); $$->case_idx_ = CASE0; $$->window_name_ = $1; $$->window_ = $4; if($$){ auto tmp1 = $$->window_name_; if(tmp1){ auto tmp2 = tmp1->identifier_; if(tmp2){ tmp2->data_type_ = kDataWindowName; tmp2->scope_ = 1; tmp2->data_flag_ =(DATAFLAG)1; } } } } ; window_name: identifier { $$ = new WindowName(); $$->case_idx_ = CASE0; $$->identifier_ = $1; } ; window: opt_exist_window_name opt_partition opt_order_clause opt_frame_clause { $$ = new Window(); $$->case_idx_ = CASE0; $$->opt_exist_window_name_ = $1; $$->opt_partition_ = $2; $$->opt_order_clause_ = $3; $$->opt_frame_clause_ = $4; } ; opt_partition: PARTITION BY expr_list { $$ = new OptPartition(); $$->case_idx_ = CASE0; $$->expr_list_ = $3; } | { $$ = new OptPartition(); $$->case_idx_ = CASE1; } ; opt_frame_clause: range_or_rows frame_bound_start { $$ = new OptFrameClause(); $$->case_idx_ = CASE0; $$->range_or_rows_ = $1; $$->frame_bound_start_ = $2; } | range_or_rows BETWEEN frame_bound_start AND frame_bound_end { $$ = new OptFrameClause(); $$->case_idx_ = CASE1; $$->range_or_rows_ = $1; $$->frame_bound_start_ = $3; $$->frame_bound_end_ = $5; } | { $$ = new OptFrameClause(); $$->case_idx_ = CASE2; } ; range_or_rows: RANGE { $$ = new RangeOrRows(); $$->case_idx_ = CASE0; } | ROWS { $$ = new RangeOrRows(); $$->case_idx_ = CASE1; } | GROUPS { $$ = new RangeOrRows(); $$->case_idx_ = CASE2; } ; frame_bound_start: frame_bound { $$ = new FrameBoundStart(); $$->case_idx_ = CASE0; $$->frame_bound_ = $1; } | UNBOUNDED PRECEDING { $$ = new FrameBoundStart(); $$->case_idx_ = CASE1; } ; frame_bound_end: frame_bound { $$ = new FrameBoundEnd(); $$->case_idx_ = CASE0; $$->frame_bound_ = $1; } | UNBOUNDED FOLLOWING { $$ = new FrameBoundEnd(); $$->case_idx_ = CASE1; } ; frame_bound: expr PRECEDING { $$ = new FrameBound(); $$->case_idx_ = CASE0; $$->expr_ = $1; } | expr FOLLOWING { $$ = new FrameBound(); $$->case_idx_ = CASE1; $$->expr_ = $1; } | CURRENT ROW { $$ = new FrameBound(); $$->case_idx_ = CASE2; } ; opt_exist_window_name: identifier { $$ = new OptExistWindowName(); $$->case_idx_ = CASE0; $$->identifier_ = $1; if($$){ auto tmp1 = $$->identifier_; if(tmp1){ tmp1->data_type_ = kDataWindowName; tmp1->scope_ = 1; tmp1->data_flag_ =(DATAFLAG)8; } } } | { $$ = new OptExistWindowName(); $$->case_idx_ = CASE1; } ; opt_group_clause: GROUP BY expr_list opt_having_clause { $$ = new OptGroupClause(); $$->case_idx_ = CASE0; $$->expr_list_ = $3; $$->opt_having_clause_ = $4; } | { $$ = new OptGroupClause(); $$->case_idx_ = CASE1; } ; opt_having_clause: HAVING expr { $$ = new OptHavingClause(); $$->case_idx_ = CASE0; $$->expr_ = $2; } | { $$ = new OptHavingClause(); $$->case_idx_ = CASE1; } ; opt_where_clause: where_clause { $$ = new OptWhereClause(); $$->case_idx_ = CASE0; $$->where_clause_ = $1; } | { $$ = new OptWhereClause(); $$->case_idx_ = CASE1; } ; where_clause: WHERE expr { $$ = new WhereClause(); $$->case_idx_ = CASE0; $$->expr_ = $2; } ; from_clause: FROM table_ref { $$ = new FromClause(); $$->case_idx_ = CASE0; $$->table_ref_ = $2; } ; table_ref: opt_table_prefix table_name opt_as_alias opt_index opt_on opt_using { $$ = new TableRef(); $$->case_idx_ = CASE0; $$->opt_table_prefix_ = $1; $$->table_name_ = $2; $$->opt_as_alias_ = $3; $$->opt_index_ = $4; $$->opt_on_ = $5; $$->opt_using_ = $6; } | opt_table_prefix function_name OP_LP expr_list OP_RP opt_as_alias opt_on opt_using { $$ = new TableRef(); $$->case_idx_ = CASE1; $$->opt_table_prefix_ = $1; $$->function_name_ = $2; $$->expr_list_ = $4; $$->opt_as_alias_ = $6; $$->opt_on_ = $7; $$->opt_using_ = $8; } | opt_table_prefix OP_LP select_no_parens OP_RP opt_as_alias opt_on opt_using { $$ = new TableRef(); $$->case_idx_ = CASE2; $$->opt_table_prefix_ = $1; $$->select_no_parens_ = $3; $$->opt_as_alias_ = $5; $$->opt_on_ = $6; $$->opt_using_ = $7; } | opt_table_prefix OP_LP table_ref OP_RP opt_as_alias opt_on opt_using { $$ = new TableRef(); $$->case_idx_ = CASE3; $$->opt_table_prefix_ = $1; $$->table_ref_ = $3; $$->opt_as_alias_ = $5; $$->opt_on_ = $6; $$->opt_using_ = $7; } ; opt_index: INDEXED BY column_name { $$ = new OptIndex(); $$->case_idx_ = CASE0; $$->column_name_ = $3; } | NOT INDEXED { $$ = new OptIndex(); $$->case_idx_ = CASE1; } | { $$ = new OptIndex(); $$->case_idx_ = CASE2; } ; opt_on: ON expr { $$ = new OptOn(); $$->case_idx_ = CASE0; $$->expr_ = $2; } | %prec JOIN { $$ = new OptOn(); $$->case_idx_ = CASE1; } ; opt_using: USING OP_LP column_name_list OP_RP { $$ = new OptUsing(); $$->case_idx_ = CASE0; $$->column_name_list_ = $3; } | { $$ = new OptUsing(); $$->case_idx_ = CASE1; } ; column_name_list: column_name { $$ = new ColumnNameList(); $$->case_idx_ = CASE0; $$->column_name_ = $1; } | column_name OP_COMMA column_name_list { $$ = new ColumnNameList(); $$->case_idx_ = CASE1; $$->column_name_ = $1; $$->column_name_list_ = $3; } ; opt_table_prefix: table_ref join_op { $$ = new OptTablePrefix(); $$->case_idx_ = CASE0; $$->table_ref_ = $1; $$->join_op_ = $2; } | { $$ = new OptTablePrefix(); $$->case_idx_ = CASE1; } ; join_op: OP_COMMA { $$ = new JoinOp(); $$->case_idx_ = CASE0; } | JOIN { $$ = new JoinOp(); $$->case_idx_ = CASE1; } | NATURAL opt_join_type JOIN { $$ = new JoinOp(); $$->case_idx_ = CASE2; $$->opt_join_type_ = $2; } ; opt_join_type: LEFT { $$ = new OptJoinType(); $$->case_idx_ = CASE0; } | LEFT OUTER { $$ = new OptJoinType(); $$->case_idx_ = CASE1; } | INNER { $$ = new OptJoinType(); $$->case_idx_ = CASE2; } | CROSS { $$ = new OptJoinType(); $$->case_idx_ = CASE3; } | { $$ = new OptJoinType(); $$->case_idx_ = CASE4; } ; expr_list: expr opt_as_alias OP_COMMA expr_list { $$ = new ExprList(); $$->case_idx_ = CASE0; $$->expr_ = $1; $$->opt_as_alias_ = $2; $$->expr_list_ = $4; } | expr opt_as_alias { $$ = new ExprList(); $$->case_idx_ = CASE1; $$->expr_ = $1; $$->opt_as_alias_ = $2; } ; opt_limit_clause: limit_clause { $$ = new OptLimitClause(); $$->case_idx_ = CASE0; $$->limit_clause_ = $1; } | { $$ = new OptLimitClause(); $$->case_idx_ = CASE1; } ; limit_clause: LIMIT expr { $$ = new LimitClause(); $$->case_idx_ = CASE0; $$->expr_1_ = $2; } | LIMIT expr OFFSET expr { $$ = new LimitClause(); $$->case_idx_ = CASE1; $$->expr_1_ = $2; $$->expr_2_ = $4; } | LIMIT expr OP_COMMA expr { $$ = new LimitClause(); $$->case_idx_ = CASE2; $$->expr_1_ = $2; $$->expr_2_ = $4; } ; opt_limit_row_count: LIMIT expr { $$ = new OptLimitRowCount(); $$->case_idx_ = CASE0; $$->expr_ = $2; } | { $$ = new OptLimitRowCount(); $$->case_idx_ = CASE1; } ; opt_order_clause: ORDER BY order_item_list { $$ = new OptOrderClause(); $$->case_idx_ = CASE0; $$->order_item_list_ = $3; } | { $$ = new OptOrderClause(); $$->case_idx_ = CASE1; } ; opt_order_nulls: NULLS FIRST { $$ = new OptOrderNulls(); $$->case_idx_ = CASE0; } | NULLS LAST { $$ = new OptOrderNulls(); $$->case_idx_ = CASE1; } | { $$ = new OptOrderNulls(); $$->case_idx_ = CASE2; } ; order_item_list: order_item { $$ = new OrderItemList(); $$->case_idx_ = CASE0; $$->order_item_ = $1; } | order_item OP_COMMA order_item_list { $$ = new OrderItemList(); $$->case_idx_ = CASE1; $$->order_item_ = $1; $$->order_item_list_ = $3; } ; order_item: expr opt_order_behavior opt_order_nulls { $$ = new OrderItem(); $$->case_idx_ = CASE0; $$->expr_ = $1; $$->opt_order_behavior_ = $2; $$->opt_order_nulls_ = $3; } ; opt_order_behavior: ASC { $$ = new OptOrderBehavior(); $$->case_idx_ = CASE0; } | DESC { $$ = new OptOrderBehavior(); $$->case_idx_ = CASE1; } | { $$ = new OptOrderBehavior(); $$->case_idx_ = CASE2; } ; opt_with_clause: WITH cte_table_list { $$ = new OptWithClause(); $$->case_idx_ = CASE0; $$->cte_table_list_ = $2; } | WITH RECURSIVE cte_table_list { $$ = new OptWithClause(); $$->case_idx_ = CASE1; $$->cte_table_list_ = $3; } | { $$ = new OptWithClause(); $$->case_idx_ = CASE2; } ; cte_table_list: cte_table { $$ = new CteTableList(); $$->case_idx_ = CASE0; $$->cte_table_ = $1; } | cte_table OP_COMMA cte_table_list { $$ = new CteTableList(); $$->case_idx_ = CASE1; $$->cte_table_ = $1; $$->cte_table_list_ = $3; } ; cte_table: cte_table_name AS OP_LP select_stmt OP_RP { $$ = new CteTable(); $$->case_idx_ = CASE0; $$->cte_table_name_ = $1; $$->select_stmt_ = $4; } ; cte_table_name: table_name opt_column_name_list_p { $$ = new CteTableName(); $$->case_idx_ = CASE0; $$->table_name_ = $1; $$->opt_column_name_list_p_ = $2; } ; opt_all_or_distinct: ALL { $$ = new OptAllOrDistinct(); $$->case_idx_ = CASE0; } | DISTINCT { $$ = new OptAllOrDistinct(); $$->case_idx_ = CASE1; } | { $$ = new OptAllOrDistinct(); $$->case_idx_ = CASE2; } ; create_table_stmt: CREATE opt_temp TABLE opt_if_not_exist table_name opt_table_option_list opt_ignore_or_replace AS select_stmt { $$ = new CreateTableStmt(); $$->case_idx_ = CASE0; $$->opt_temp_ = $2; $$->opt_if_not_exist_ = $4; $$->table_name_ = $5; $$->opt_table_option_list_ = $6; $$->opt_ignore_or_replace_ = $7; $$->select_stmt_ = $9; if($$){ auto tmp1 = $$->table_name_; if(tmp1){ auto tmp2 = tmp1->identifier_; if(tmp2){ tmp2->data_type_ = kDataTableName; tmp2->scope_ = 1; tmp2->data_flag_ =(DATAFLAG)128; } } } } | CREATE opt_temp TABLE opt_if_not_exist table_name OP_LP column_def_list opt_table_constraint_list OP_RP opt_table_option_list { $$ = new CreateTableStmt(); $$->case_idx_ = CASE1; $$->opt_temp_ = $2; $$->opt_if_not_exist_ = $4; $$->table_name_ = $5; $$->column_def_list_ = $7; $$->opt_table_constraint_list_ = $8; $$->opt_table_option_list_ = $10; if($$){ auto tmp1 = $$->table_name_; if(tmp1){ auto tmp2 = tmp1->identifier_; if(tmp2){ tmp2->data_type_ = kDataTableName; tmp2->scope_ = 1; tmp2->data_flag_ =(DATAFLAG)1; } } } if($$){ auto tmp1 = $$->column_def_list_; while(tmp1){ auto tmp2 = tmp1->column_def_; if(tmp2){ auto tmp3 = tmp2->identifier_; if(tmp3){ tmp3->data_type_ = kDataColumnName; tmp3->scope_ = 2; tmp3->data_flag_ =(DATAFLAG)1; } } tmp1 = tmp1->column_def_list_; } } } ; create_index_stmt: CREATE opt_index_keyword INDEX table_name ON table_name OP_LP indexed_column_list OP_RP opt_index_option opt_extra_option { $$ = new CreateIndexStmt(); $$->case_idx_ = CASE0; $$->opt_index_keyword_ = $2; $$->table_name_1_ = $4; $$->table_name_2_ = $6; $$->indexed_column_list_ = $8; $$->opt_index_option_ = $10; $$->opt_extra_option_ = $11; if($$){ auto tmp1 = $$->table_name_1_; if(tmp1){ auto tmp2 = tmp1->identifier_; if(tmp2){ tmp2->data_type_ = kDataTableName; tmp2->scope_ = 2; tmp2->data_flag_ =(DATAFLAG)128; } } } if($$){ auto tmp1 = $$->table_name_2_; if(tmp1){ auto tmp2 = tmp1->identifier_; if(tmp2){ tmp2->data_type_ = kDataTableName; tmp2->scope_ = 1; tmp2->data_flag_ =(DATAFLAG)8; } } } } ; create_trigger_stmt: CREATE TRIGGER trigger_name trigger_action_time trigger_events ON table_name FOR EACH ROW trigger_body { $$ = new CreateTriggerStmt(); $$->case_idx_ = CASE0; $$->trigger_name_ = $3; $$->trigger_action_time_ = $4; $$->trigger_events_ = $5; $$->table_name_ = $7; $$->trigger_body_ = $11; if($$){ auto tmp1 = $$->trigger_name_; if(tmp1){ auto tmp2 = tmp1->identifier_; if(tmp2){ tmp2->data_type_ = kDataTriggerName; tmp2->scope_ = 1; tmp2->data_flag_ =(DATAFLAG)1; } } } if($$){ auto tmp1 = $$->table_name_; if(tmp1){ auto tmp2 = tmp1->identifier_; if(tmp2){ tmp2->data_type_ = kDataTableName; tmp2->scope_ = 1; tmp2->data_flag_ =(DATAFLAG)8; } } } } ; create_view_stmt: CREATE opt_view_algorithm opt_sql_security VIEW view_name opt_column_name_list_p AS select_stmt opt_check_option { $$ = new CreateViewStmt(); $$->case_idx_ = CASE0; $$->opt_view_algorithm_ = $2; $$->opt_sql_security_ = $3; $$->view_name_ = $5; $$->opt_column_name_list_p_ = $6; $$->select_stmt_ = $8; $$->opt_check_option_ = $9; if($$){ auto tmp1 = $$->view_name_; if(tmp1){ auto tmp2 = tmp1->identifier_; if(tmp2){ tmp2->data_type_ = kDataTableName; tmp2->scope_ = 10; tmp2->data_flag_ =(DATAFLAG)1; } } } if($$){ auto tmp1 = $$->opt_column_name_list_p_; if(tmp1){ auto tmp2 = tmp1->column_name_list_; while(tmp2){ auto tmp3 = tmp2->column_name_; if(tmp3){ auto tmp4 = tmp3->identifier_; if(tmp4){ tmp4->data_type_ = kDataColumnName; tmp4->scope_ = 11; tmp4->data_flag_ =(DATAFLAG)1; } } tmp2 = tmp2->column_name_list_; } } } } | CREATE OR REPLACE opt_view_algorithm opt_sql_security VIEW view_name opt_column_name_list_p AS select_stmt opt_check_option { $$ = new CreateViewStmt(); $$->case_idx_ = CASE1; $$->opt_view_algorithm_ = $4; $$->opt_sql_security_ = $5; $$->view_name_ = $7; $$->opt_column_name_list_p_ = $8; $$->select_stmt_ = $10; $$->opt_check_option_ = $11; if($$){ auto tmp1 = $$->view_name_; if(tmp1){ auto tmp2 = tmp1->identifier_; if(tmp2){ tmp2->data_type_ = kDataTableName; tmp2->scope_ = 10; tmp2->data_flag_ =(DATAFLAG)1; } } } if($$){ auto tmp1 = $$->opt_column_name_list_p_; if(tmp1){ auto tmp2 = tmp1->column_name_list_; while(tmp2){ auto tmp3 = tmp2->column_name_; if(tmp3){ auto tmp4 = tmp3->identifier_; if(tmp4){ tmp4->data_type_ = kDataColumnName; tmp4->scope_ = 11; tmp4->data_flag_ =(DATAFLAG)1; } } tmp2 = tmp2->column_name_list_; } } } } ; opt_table_option_list: table_option_list { $$ = new OptTableOptionList(); $$->case_idx_ = CASE0; $$->table_option_list_ = $1; } | { $$ = new OptTableOptionList(); $$->case_idx_ = CASE1; } ; table_option_list: table_option { $$ = new TableOptionList(); $$->case_idx_ = CASE0; $$->table_option_ = $1; } | table_option opt_op_comma table_option_list { $$ = new TableOptionList(); $$->case_idx_ = CASE1; $$->table_option_ = $1; $$->opt_op_comma_ = $2; $$->table_option_list_ = $3; } ; table_option: INSERT_METHOD opt_op_equal NO { $$ = new TableOption(); $$->case_idx_ = CASE0; $$->opt_op_equal_ = $2; } | INSERT_METHOD opt_op_equal FIRST { $$ = new TableOption(); $$->case_idx_ = CASE1; $$->opt_op_equal_ = $2; } | INSERT_METHOD opt_op_equal LAST { $$ = new TableOption(); $$->case_idx_ = CASE2; $$->opt_op_equal_ = $2; } | ROW_FORMAT opt_op_equal DEFAULT { $$ = new TableOption(); $$->case_idx_ = CASE3; $$->opt_op_equal_ = $2; } | ROW_FORMAT opt_op_equal DYNAMIC { $$ = new TableOption(); $$->case_idx_ = CASE4; $$->opt_op_equal_ = $2; } | ROW_FORMAT opt_op_equal FIXED { $$ = new TableOption(); $$->case_idx_ = CASE5; $$->opt_op_equal_ = $2; } | ROW_FORMAT opt_op_equal COMPRESSED { $$ = new TableOption(); $$->case_idx_ = CASE6; $$->opt_op_equal_ = $2; } | ROW_FORMAT opt_op_equal REDUNDANT { $$ = new TableOption(); $$->case_idx_ = CASE7; $$->opt_op_equal_ = $2; } | ROW_FORMAT opt_op_equal COMPACT { $$ = new TableOption(); $$->case_idx_ = CASE8; $$->opt_op_equal_ = $2; } ; opt_op_comma: OP_COMMA { $$ = new OptOpComma(); $$->case_idx_ = CASE0; } | { $$ = new OptOpComma(); $$->case_idx_ = CASE1; } ; opt_ignore_or_replace: IGNORE { $$ = new OptIgnoreOrReplace(); $$->case_idx_ = CASE0; } | REPLACE { $$ = new OptIgnoreOrReplace(); $$->case_idx_ = CASE1; } | { $$ = new OptIgnoreOrReplace(); $$->case_idx_ = CASE2; } ; opt_view_algorithm: ALGORITHM OP_EQUAL UNDEFINED { $$ = new OptViewAlgorithm(); $$->case_idx_ = CASE0; } | ALGORITHM OP_EQUAL MERGE { $$ = new OptViewAlgorithm(); $$->case_idx_ = CASE1; } | ALGORITHM OP_EQUAL TEMPTABLE { $$ = new OptViewAlgorithm(); $$->case_idx_ = CASE2; } | { $$ = new OptViewAlgorithm(); $$->case_idx_ = CASE3; } ; opt_sql_security: SQL SECURITY DEFINER { $$ = new OptSqlSecurity(); $$->case_idx_ = CASE0; } | SQL SECURITY INVOKER { $$ = new OptSqlSecurity(); $$->case_idx_ = CASE1; } | { $$ = new OptSqlSecurity(); $$->case_idx_ = CASE2; } ; opt_index_option: USING BTREE { $$ = new OptIndexOption(); $$->case_idx_ = CASE0; } | USING HASH { $$ = new OptIndexOption(); $$->case_idx_ = CASE1; } | { $$ = new OptIndexOption(); $$->case_idx_ = CASE2; } ; opt_extra_option: index_algorithm_option { $$ = new OptExtraOption(); $$->case_idx_ = CASE0; $$->index_algorithm_option_ = $1; } | lock_option { $$ = new OptExtraOption(); $$->case_idx_ = CASE1; $$->lock_option_ = $1; } | { $$ = new OptExtraOption(); $$->case_idx_ = CASE2; } ; index_algorithm_option: ALGORITHM opt_op_equal DEFAULT { $$ = new IndexAlgorithmOption(); $$->case_idx_ = CASE0; $$->opt_op_equal_ = $2; } | ALGORITHM opt_op_equal INPLACE { $$ = new IndexAlgorithmOption(); $$->case_idx_ = CASE1; $$->opt_op_equal_ = $2; } | ALGORITHM opt_op_equal COPY { $$ = new IndexAlgorithmOption(); $$->case_idx_ = CASE2; $$->opt_op_equal_ = $2; } ; lock_option: LOCK opt_op_equal DEFAULT { $$ = new LockOption(); $$->case_idx_ = CASE0; $$->opt_op_equal_ = $2; } | LOCK opt_op_equal NONE { $$ = new LockOption(); $$->case_idx_ = CASE1; $$->opt_op_equal_ = $2; } | LOCK opt_op_equal SHARED { $$ = new LockOption(); $$->case_idx_ = CASE2; $$->opt_op_equal_ = $2; } | LOCK opt_op_equal EXCLUSIVE { $$ = new LockOption(); $$->case_idx_ = CASE3; $$->opt_op_equal_ = $2; } ; opt_op_equal: OP_EQUAL { $$ = new OptOpEqual(); $$->case_idx_ = CASE0; } | { $$ = new OptOpEqual(); $$->case_idx_ = CASE1; } ; trigger_events: DELETE { $$ = new TriggerEvents(); $$->case_idx_ = CASE0; } | INSERT { $$ = new TriggerEvents(); $$->case_idx_ = CASE1; } | UPDATE { $$ = new TriggerEvents(); $$->case_idx_ = CASE2; } ; trigger_name: identifier { $$ = new TriggerName(); $$->case_idx_ = CASE0; $$->identifier_ = $1; } ; trigger_action_time: BEFORE { $$ = new TriggerActionTime(); $$->case_idx_ = CASE0; } | AFTER { $$ = new TriggerActionTime(); $$->case_idx_ = CASE1; } ; drop_index_stmt: DROP INDEX table_name opt_extra_option { $$ = new DropIndexStmt(); $$->case_idx_ = CASE0; $$->table_name_ = $3; $$->opt_extra_option_ = $4; if($$){ auto tmp1 = $$->table_name_; if(tmp1){ auto tmp2 = tmp1->identifier_; if(tmp2){ tmp2->data_type_ = kDataTableName; tmp2->scope_ = 1; tmp2->data_flag_ =(DATAFLAG)2; } } } } ; drop_table_stmt: DROP opt_temp TABLE opt_if_exist table_name opt_restrict_or_cascade { $$ = new DropTableStmt(); $$->case_idx_ = CASE0; $$->opt_temp_ = $2; $$->opt_if_exist_ = $4; $$->table_name_ = $5; $$->opt_restrict_or_cascade_ = $6; if($$){ auto tmp1 = $$->table_name_; if(tmp1){ auto tmp2 = tmp1->identifier_; if(tmp2){ tmp2->data_type_ = kDataTableName; tmp2->scope_ = 1; tmp2->data_flag_ =(DATAFLAG)2; } } } } ; opt_restrict_or_cascade: RESTRICT { $$ = new OptRestrictOrCascade(); $$->case_idx_ = CASE0; } | CASCADE { $$ = new OptRestrictOrCascade(); $$->case_idx_ = CASE1; } | { $$ = new OptRestrictOrCascade(); $$->case_idx_ = CASE2; } ; drop_trigger_stmt: DROP TRIGGER opt_if_exist trigger_name { $$ = new DropTriggerStmt(); $$->case_idx_ = CASE0; $$->opt_if_exist_ = $3; $$->trigger_name_ = $4; if($$){ auto tmp1 = $$->trigger_name_; if(tmp1){ auto tmp2 = tmp1->identifier_; if(tmp2){ tmp2->data_type_ = kDataTriggerName; tmp2->scope_ = 1; tmp2->data_flag_ =(DATAFLAG)2; } } } } ; drop_view_stmt: DROP VIEW opt_if_exist view_name opt_restrict_or_cascade { $$ = new DropViewStmt(); $$->case_idx_ = CASE0; $$->opt_if_exist_ = $3; $$->view_name_ = $4; $$->opt_restrict_or_cascade_ = $5; if($$){ auto tmp1 = $$->view_name_; if(tmp1){ auto tmp2 = tmp1->identifier_; if(tmp2){ tmp2->data_type_ = kDataTableName; tmp2->scope_ = 1; tmp2->data_flag_ =(DATAFLAG)2; } } } } ; insert_stmt: opt_with_clause INSERT INTO table_name opt_as_alias insert_rest opt_on_conflict { $$ = new InsertStmt(); $$->case_idx_ = CASE0; $$->opt_with_clause_ = $1; $$->table_name_ = $4; $$->opt_as_alias_ = $5; $$->insert_rest_ = $6; $$->opt_on_conflict_ = $7; } ; insert_rest: opt_column_name_list_p select_no_parens { $$ = new InsertRest(); $$->case_idx_ = CASE0; $$->opt_column_name_list_p_ = $1; $$->select_no_parens_ = $2; } | opt_column_name_list_p DEFAULT VALUES { $$ = new InsertRest(); $$->case_idx_ = CASE1; $$->opt_column_name_list_p_ = $1; } | opt_column_name_list_p VALUES super_values_list { $$ = new InsertRest(); $$->case_idx_ = CASE2; $$->opt_column_name_list_p_ = $1; $$->super_values_list_ = $3; } ; super_values_list: values_list { $$ = new SuperValuesList(); $$->case_idx_ = CASE0; $$->values_list_ = $1; } | values_list OP_COMMA super_values_list { $$ = new SuperValuesList(); $$->case_idx_ = CASE1; $$->values_list_ = $1; $$->super_values_list_ = $3; } ; values_list: OP_LP expr_list OP_RP { $$ = new ValuesList(); $$->case_idx_ = CASE0; $$->expr_list_ = $2; } ; opt_on_conflict: ON CONFLICT opt_conflict_expr DO NOTHING { $$ = new OptOnConflict(); $$->case_idx_ = CASE0; $$->opt_conflict_expr_ = $3; } | ON CONFLICT opt_conflict_expr DO UPDATE set_clause_list where_clause { $$ = new OptOnConflict(); $$->case_idx_ = CASE1; $$->opt_conflict_expr_ = $3; $$->set_clause_list_ = $6; $$->where_clause_ = $7; } | { $$ = new OptOnConflict(); $$->case_idx_ = CASE2; } ; opt_conflict_expr: OP_LP indexed_column_list OP_RP where_clause { $$ = new OptConflictExpr(); $$->case_idx_ = CASE0; $$->indexed_column_list_ = $2; $$->where_clause_ = $4; } | { $$ = new OptConflictExpr(); $$->case_idx_ = CASE1; } ; indexed_column_list: indexed_column { $$ = new IndexedColumnList(); $$->case_idx_ = CASE0; $$->indexed_column_ = $1; } | indexed_column OP_COMMA indexed_column_list { $$ = new IndexedColumnList(); $$->case_idx_ = CASE1; $$->indexed_column_ = $1; $$->indexed_column_list_ = $3; } ; indexed_column: expr opt_order_behavior { $$ = new IndexedColumn(); $$->case_idx_ = CASE0; $$->expr_ = $1; $$->opt_order_behavior_ = $2; } ; update_stmt: UPDATE IGNORE table_name opt_as_alias SET set_clause_list opt_where_clause opt_order_clause opt_limit_row_count { $$ = new UpdateStmt(); $$->case_idx_ = CASE0; $$->table_name_ = $3; $$->opt_as_alias_ = $4; $$->set_clause_list_ = $6; $$->opt_where_clause_ = $7; $$->opt_order_clause_ = $8; $$->opt_limit_row_count_ = $9; } | UPDATE table_name opt_as_alias SET set_clause_list opt_where_clause opt_order_clause opt_limit_row_count { $$ = new UpdateStmt(); $$->case_idx_ = CASE1; $$->table_name_ = $2; $$->opt_as_alias_ = $3; $$->set_clause_list_ = $5; $$->opt_where_clause_ = $6; $$->opt_order_clause_ = $7; $$->opt_limit_row_count_ = $8; } ; alter_action: RENAME TO table_name { $$ = new AlterAction(); $$->case_idx_ = CASE0; $$->table_name_ = $3; if($$){ auto tmp1 = $$->table_name_; if(tmp1){ auto tmp2 = tmp1->identifier_; if(tmp2){ tmp2->data_type_ = kDataTableName; tmp2->scope_ = 2; tmp2->data_flag_ =(DATAFLAG)64; } } } } | RENAME opt_column column_name TO column_name { $$ = new AlterAction(); $$->case_idx_ = CASE1; $$->opt_column_ = $2; $$->column_name_1_ = $3; $$->column_name_2_ = $5; if($$){ auto tmp1 = $$->column_name_1_; if(tmp1){ auto tmp2 = tmp1->identifier_; if(tmp2){ tmp2->data_type_ = kDataColumnName; tmp2->scope_ = 2; tmp2->data_flag_ =(DATAFLAG)8; } } } if($$){ auto tmp1 = $$->column_name_2_; if(tmp1){ auto tmp2 = tmp1->identifier_; if(tmp2){ tmp2->data_type_ = kDataColumnName; tmp2->scope_ = 3; tmp2->data_flag_ =(DATAFLAG)64; } } } } | ADD opt_column column_def { $$ = new AlterAction(); $$->case_idx_ = CASE2; $$->opt_column_ = $2; $$->column_def_ = $3; if($$){ auto tmp1 = $$->column_def_; if(tmp1){ auto tmp2 = tmp1->identifier_; if(tmp2){ tmp2->data_type_ = kDataColumnName; tmp2->scope_ = 2; tmp2->data_flag_ =(DATAFLAG)1; } } } } | DROP opt_column column_name { $$ = new AlterAction(); $$->case_idx_ = CASE3; $$->opt_column_ = $2; $$->column_name_1_ = $3; if($$){ auto tmp1 = $$->column_name_1_; if(tmp1){ auto tmp2 = tmp1->identifier_; if(tmp2){ tmp2->data_type_ = kDataColumnName; tmp2->scope_ = 2; tmp2->data_flag_ =(DATAFLAG)2; } } } } | alter_constant_action { $$ = new AlterAction(); $$->case_idx_ = CASE4; $$->alter_constant_action_ = $1; } ; alter_constant_action: DROP PRIMARY KEY { $$ = new AlterConstantAction(); $$->case_idx_ = CASE0; } | FORCE { $$ = new AlterConstantAction(); $$->case_idx_ = CASE1; } | DISABLE KEYS { $$ = new AlterConstantAction(); $$->case_idx_ = CASE2; } | ENABLE KEYS { $$ = new AlterConstantAction(); $$->case_idx_ = CASE3; } | lock_option { $$ = new AlterConstantAction(); $$->case_idx_ = CASE4; $$->lock_option_ = $1; } | WITH VALIDATION { $$ = new AlterConstantAction(); $$->case_idx_ = CASE5; } | WITHOUT VALIDATION { $$ = new AlterConstantAction(); $$->case_idx_ = CASE6; } ; column_def_list: column_def { $$ = new ColumnDefList(); $$->case_idx_ = CASE0; $$->column_def_ = $1; } | column_def OP_COMMA column_def_list { $$ = new ColumnDefList(); $$->case_idx_ = CASE1; $$->column_def_ = $1; $$->column_def_list_ = $3; } ; column_def: identifier type_name opt_column_constraint_list { $$ = new ColumnDef(); $$->case_idx_ = CASE0; $$->identifier_ = $1; $$->type_name_ = $2; $$->opt_column_constraint_list_ = $3; if($$){ auto tmp1 = $$->identifier_; if(tmp1){ tmp1->data_type_ = kDataColumnName; tmp1->scope_ = 2; tmp1->data_flag_ =(DATAFLAG)1; } } } ; opt_column_constraint_list: column_constraint_list opt_check opt_reference_clause { $$ = new OptColumnConstraintList(); $$->case_idx_ = CASE0; $$->column_constraint_list_ = $1; $$->opt_check_ = $2; $$->opt_reference_clause_ = $3; } | { $$ = new OptColumnConstraintList(); $$->case_idx_ = CASE1; } ; column_constraint_list: column_constraint { $$ = new ColumnConstraintList(); $$->case_idx_ = CASE0; $$->column_constraint_ = $1; } | column_constraint column_constraint_list { $$ = new ColumnConstraintList(); $$->case_idx_ = CASE1; $$->column_constraint_ = $1; $$->column_constraint_list_ = $2; } ; column_constraint: constraint_type { $$ = new ColumnConstraint(); $$->case_idx_ = CASE0; $$->constraint_type_ = $1; } ; opt_reference_clause: opt_foreign_key reference_clause { $$ = new OptReferenceClause(); $$->case_idx_ = CASE0; $$->opt_foreign_key_ = $1; $$->reference_clause_ = $2; } | { $$ = new OptReferenceClause(); $$->case_idx_ = CASE1; } ; opt_check: CHECK OP_LP expr OP_RP opt_enforced { $$ = new OptCheck(); $$->case_idx_ = CASE0; $$->expr_ = $3; $$->opt_enforced_ = $5; } | { $$ = new OptCheck(); $$->case_idx_ = CASE1; } ; constraint_type: PRIMARY KEY { $$ = new ConstraintType(); $$->case_idx_ = CASE0; } | NOT NULL { $$ = new ConstraintType(); $$->case_idx_ = CASE1; } | UNIQUE { $$ = new ConstraintType(); $$->case_idx_ = CASE2; } ; reference_clause: REFERENCES table_name opt_column_name_list_p opt_foreign_key_actions opt_constraint_attribute_spec { $$ = new ReferenceClause(); $$->case_idx_ = CASE0; $$->table_name_ = $2; $$->opt_column_name_list_p_ = $3; $$->opt_foreign_key_actions_ = $4; $$->opt_constraint_attribute_spec_ = $5; if($$){ auto tmp1 = $$->table_name_; if(tmp1){ auto tmp2 = tmp1->identifier_; if(tmp2){ tmp2->data_type_ = kDataTableName; tmp2->scope_ = 100; tmp2->data_flag_ =(DATAFLAG)8; } } } if($$){ auto tmp1 = $$->opt_column_name_list_p_; if(tmp1){ auto tmp2 = tmp1->column_name_list_; while(tmp2){ auto tmp3 = tmp2->column_name_; if(tmp3){ auto tmp4 = tmp3->identifier_; if(tmp4){ tmp4->data_type_ = kDataColumnName; tmp4->scope_ = 101; tmp4->data_flag_ =(DATAFLAG)8; } } tmp2 = tmp2->column_name_list_; } } } } ; opt_foreign_key: FOREIGN KEY { $$ = new OptForeignKey(); $$->case_idx_ = CASE0; } | { $$ = new OptForeignKey(); $$->case_idx_ = CASE1; } ; opt_foreign_key_actions: foreign_key_actions { $$ = new OptForeignKeyActions(); $$->case_idx_ = CASE0; $$->foreign_key_actions_ = $1; } | { $$ = new OptForeignKeyActions(); $$->case_idx_ = CASE1; } ; foreign_key_actions: MATCH FULL { $$ = new ForeignKeyActions(); $$->case_idx_ = CASE0; } | MATCH PARTIAL { $$ = new ForeignKeyActions(); $$->case_idx_ = CASE1; } | MATCH SIMPLE { $$ = new ForeignKeyActions(); $$->case_idx_ = CASE2; } | ON UPDATE key_actions { $$ = new ForeignKeyActions(); $$->case_idx_ = CASE3; $$->key_actions_ = $3; } | ON DELETE key_actions { $$ = new ForeignKeyActions(); $$->case_idx_ = CASE4; $$->key_actions_ = $3; } ; key_actions: SET NULL { $$ = new KeyActions(); $$->case_idx_ = CASE0; } | SET DEFAULT { $$ = new KeyActions(); $$->case_idx_ = CASE1; } | CASCADE { $$ = new KeyActions(); $$->case_idx_ = CASE2; } | RESTRICT { $$ = new KeyActions(); $$->case_idx_ = CASE3; } | NO ACTION { $$ = new KeyActions(); $$->case_idx_ = CASE4; } ; opt_constraint_attribute_spec: DEFFERRABLE opt_initial_time { $$ = new OptConstraintAttributeSpec(); $$->case_idx_ = CASE0; $$->opt_initial_time_ = $2; } | NOT DEFFERRABLE opt_initial_time { $$ = new OptConstraintAttributeSpec(); $$->case_idx_ = CASE1; $$->opt_initial_time_ = $3; } | { $$ = new OptConstraintAttributeSpec(); $$->case_idx_ = CASE2; } ; opt_initial_time: INITIALLY DEFERRED { $$ = new OptInitialTime(); $$->case_idx_ = CASE0; } | INITIALLY IMMEDIATE { $$ = new OptInitialTime(); $$->case_idx_ = CASE1; } | { $$ = new OptInitialTime(); $$->case_idx_ = CASE2; } ; constraint_name: CONSTRAINT name { $$ = new ConstraintName(); $$->case_idx_ = CASE0; $$->name_ = $2; } ; opt_temp: TEMPORARY { $$ = new OptTemp(); $$->case_idx_ = CASE0; } | { $$ = new OptTemp(); $$->case_idx_ = CASE1; } ; opt_check_option: WITH CHECK OPTION { $$ = new OptCheckOption(); $$->case_idx_ = CASE0; } | WITH CASCADED CHECK OPTION { $$ = new OptCheckOption(); $$->case_idx_ = CASE1; } | WITH LOCAL CHECK OPTION { $$ = new OptCheckOption(); $$->case_idx_ = CASE2; } | { $$ = new OptCheckOption(); $$->case_idx_ = CASE3; } ; opt_column_name_list_p: OP_LP column_name_list OP_RP { $$ = new OptColumnNameListP(); $$->case_idx_ = CASE0; $$->column_name_list_ = $2; } | { $$ = new OptColumnNameListP(); $$->case_idx_ = CASE1; } ; set_clause_list: set_clause { $$ = new SetClauseList(); $$->case_idx_ = CASE0; $$->set_clause_ = $1; } | set_clause OP_COMMA set_clause_list { $$ = new SetClauseList(); $$->case_idx_ = CASE1; $$->set_clause_ = $1; $$->set_clause_list_ = $3; } ; set_clause: column_name OP_EQUAL expr { $$ = new SetClause(); $$->case_idx_ = CASE0; $$->column_name_ = $1; $$->expr_ = $3; } | OP_LP column_name_list OP_RP OP_EQUAL expr { $$ = new SetClause(); $$->case_idx_ = CASE1; $$->column_name_list_ = $2; $$->expr_ = $5; } ; opt_as_alias: as_alias { $$ = new OptAsAlias(); $$->case_idx_ = CASE0; $$->as_alias_ = $1; } | { $$ = new OptAsAlias(); $$->case_idx_ = CASE1; } ; expr: operand { $$ = new Expr(); $$->case_idx_ = CASE0; $$->operand_ = $1; } | between_expr { $$ = new Expr(); $$->case_idx_ = CASE1; $$->between_expr_ = $1; } | exists_expr { $$ = new Expr(); $$->case_idx_ = CASE2; $$->exists_expr_ = $1; } | in_expr { $$ = new Expr(); $$->case_idx_ = CASE3; $$->in_expr_ = $1; } | cast_expr { $$ = new Expr(); $$->case_idx_ = CASE4; $$->cast_expr_ = $1; } | logic_expr { $$ = new Expr(); $$->case_idx_ = CASE5; $$->logic_expr_ = $1; } ; operand: OP_LP expr_list OP_RP { $$ = new Operand(); $$->case_idx_ = CASE0; $$->expr_list_ = $2; } | array_index { $$ = new Operand(); $$->case_idx_ = CASE1; $$->array_index_ = $1; } | scalar_expr { $$ = new Operand(); $$->case_idx_ = CASE2; $$->scalar_expr_ = $1; } | unary_expr { $$ = new Operand(); $$->case_idx_ = CASE3; $$->unary_expr_ = $1; } | binary_expr { $$ = new Operand(); $$->case_idx_ = CASE4; $$->binary_expr_ = $1; } | case_expr { $$ = new Operand(); $$->case_idx_ = CASE5; $$->case_expr_ = $1; } | extract_expr { $$ = new Operand(); $$->case_idx_ = CASE6; $$->extract_expr_ = $1; } | array_expr { $$ = new Operand(); $$->case_idx_ = CASE7; $$->array_expr_ = $1; } | function_expr { $$ = new Operand(); $$->case_idx_ = CASE8; $$->function_expr_ = $1; } | OP_LP select_no_parens OP_RP { $$ = new Operand(); $$->case_idx_ = CASE9; $$->select_no_parens_ = $2; } ; cast_expr: CAST OP_LP expr AS type_name OP_RP { $$ = new CastExpr(); $$->case_idx_ = CASE0; $$->expr_ = $3; $$->type_name_ = $5; } ; scalar_expr: column_name { $$ = new ScalarExpr(); $$->case_idx_ = CASE0; $$->column_name_ = $1; } | literal { $$ = new ScalarExpr(); $$->case_idx_ = CASE1; $$->literal_ = $1; } ; unary_expr: OP_SUB operand %prec OP_SUB { $$ = new UnaryExpr(); $$->case_idx_ = CASE0; $$->operand_ = $2; } | NOT operand %prec NOT { $$ = new UnaryExpr(); $$->case_idx_ = CASE1; $$->operand_ = $2; } | operand ISNULL %prec ISNULL { $$ = new UnaryExpr(); $$->case_idx_ = CASE2; $$->operand_ = $1; } | operand IS NULL { $$ = new UnaryExpr(); $$->case_idx_ = CASE3; $$->operand_ = $1; } | operand IS NOT NULL { $$ = new UnaryExpr(); $$->case_idx_ = CASE4; $$->operand_ = $1; } | NULL { $$ = new UnaryExpr(); $$->case_idx_ = CASE5; } | OP_MUL { $$ = new UnaryExpr(); $$->case_idx_ = CASE6; } ; binary_expr: comp_expr { $$ = new BinaryExpr(); $$->case_idx_ = CASE0; $$->comp_expr_ = $1; } | operand binary_op operand %prec OP_ADD { $$ = new BinaryExpr(); $$->case_idx_ = CASE1; $$->operand_1_ = $1; $$->binary_op_ = $2; $$->operand_2_ = $3; } | operand LIKE operand { $$ = new BinaryExpr(); $$->case_idx_ = CASE2; $$->operand_1_ = $1; $$->operand_2_ = $3; } | operand NOT LIKE operand { $$ = new BinaryExpr(); $$->case_idx_ = CASE3; $$->operand_1_ = $1; $$->operand_2_ = $4; } ; logic_expr: expr AND expr { $$ = new LogicExpr(); $$->case_idx_ = CASE0; $$->expr_1_ = $1; $$->expr_2_ = $3; } | expr OR expr { $$ = new LogicExpr(); $$->case_idx_ = CASE1; $$->expr_1_ = $1; $$->expr_2_ = $3; } ; in_expr: operand opt_not IN OP_LP select_no_parens OP_RP { $$ = new InExpr(); $$->case_idx_ = CASE0; $$->operand_ = $1; $$->opt_not_ = $2; $$->select_no_parens_ = $5; } | operand opt_not IN OP_LP expr_list OP_RP { $$ = new InExpr(); $$->case_idx_ = CASE1; $$->operand_ = $1; $$->opt_not_ = $2; $$->expr_list_ = $5; } | operand opt_not IN table_name { $$ = new InExpr(); $$->case_idx_ = CASE2; $$->operand_ = $1; $$->opt_not_ = $2; $$->table_name_ = $4; } ; case_expr: CASE expr case_list END { $$ = new CaseExpr(); $$->case_idx_ = CASE0; $$->expr_1_ = $2; $$->case_list_ = $3; } | CASE case_list END { $$ = new CaseExpr(); $$->case_idx_ = CASE1; $$->case_list_ = $2; } | CASE expr case_list ELSE expr END { $$ = new CaseExpr(); $$->case_idx_ = CASE2; $$->expr_1_ = $2; $$->case_list_ = $3; $$->expr_2_ = $5; } | CASE case_list ELSE expr END { $$ = new CaseExpr(); $$->case_idx_ = CASE3; $$->case_list_ = $2; $$->expr_1_ = $4; } ; between_expr: operand BETWEEN operand AND operand %prec BETWEEN { $$ = new BetweenExpr(); $$->case_idx_ = CASE0; $$->operand_1_ = $1; $$->operand_2_ = $3; $$->operand_3_ = $5; } | operand NOT BETWEEN operand AND operand %prec NOT { $$ = new BetweenExpr(); $$->case_idx_ = CASE1; $$->operand_1_ = $1; $$->operand_2_ = $4; $$->operand_3_ = $6; } ; exists_expr: opt_not EXISTS OP_LP select_no_parens OP_RP { $$ = new ExistsExpr(); $$->case_idx_ = CASE0; $$->opt_not_ = $1; $$->select_no_parens_ = $4; } ; function_expr: function_name OP_LP OP_RP opt_filter_clause opt_over_clause { $$ = new FunctionExpr(); $$->case_idx_ = CASE0; $$->function_name_ = $1; $$->opt_filter_clause_ = $4; $$->opt_over_clause_ = $5; } | function_name OP_LP opt_distinct expr_list OP_RP opt_filter_clause opt_over_clause { $$ = new FunctionExpr(); $$->case_idx_ = CASE1; $$->function_name_ = $1; $$->opt_distinct_ = $3; $$->expr_list_ = $4; $$->opt_filter_clause_ = $6; $$->opt_over_clause_ = $7; } ; opt_distinct: DISTINCT { $$ = new OptDistinct(); $$->case_idx_ = CASE0; } | { $$ = new OptDistinct(); $$->case_idx_ = CASE1; } ; opt_filter_clause: FILTER OP_LP WHERE expr OP_RP { $$ = new OptFilterClause(); $$->case_idx_ = CASE0; $$->expr_ = $4; } | { $$ = new OptFilterClause(); $$->case_idx_ = CASE1; } ; opt_over_clause: OVER OP_LP window OP_RP { $$ = new OptOverClause(); $$->case_idx_ = CASE0; $$->window_ = $3; } | OVER window_name { $$ = new OptOverClause(); $$->case_idx_ = CASE1; $$->window_name_ = $2; } | { $$ = new OptOverClause(); $$->case_idx_ = CASE2; } ; case_list: case_clause { $$ = new CaseList(); $$->case_idx_ = CASE0; $$->case_clause_ = $1; } | case_clause case_list { $$ = new CaseList(); $$->case_idx_ = CASE1; $$->case_clause_ = $1; $$->case_list_ = $2; } ; case_clause: WHEN expr THEN expr { $$ = new CaseClause(); $$->case_idx_ = CASE0; $$->expr_1_ = $2; $$->expr_2_ = $4; } ; comp_expr: operand OP_EQUAL operand { $$ = new CompExpr(); $$->case_idx_ = CASE0; $$->operand_1_ = $1; $$->operand_2_ = $3; } | operand OP_NOTEQUAL operand { $$ = new CompExpr(); $$->case_idx_ = CASE1; $$->operand_1_ = $1; $$->operand_2_ = $3; } | operand OP_GREATERTHAN operand { $$ = new CompExpr(); $$->case_idx_ = CASE2; $$->operand_1_ = $1; $$->operand_2_ = $3; } | operand OP_LESSTHAN operand { $$ = new CompExpr(); $$->case_idx_ = CASE3; $$->operand_1_ = $1; $$->operand_2_ = $3; } | operand OP_LESSEQ operand { $$ = new CompExpr(); $$->case_idx_ = CASE4; $$->operand_1_ = $1; $$->operand_2_ = $3; } | operand OP_GREATEREQ operand { $$ = new CompExpr(); $$->case_idx_ = CASE5; $$->operand_1_ = $1; $$->operand_2_ = $3; } ; extract_expr: EXTRACT OP_LP datetime_field FROM expr OP_RP { $$ = new ExtractExpr(); $$->case_idx_ = CASE0; $$->datetime_field_ = $3; $$->expr_ = $5; } ; datetime_field: SECOND { $$ = new DatetimeField(); $$->case_idx_ = CASE0; } | MINUTE { $$ = new DatetimeField(); $$->case_idx_ = CASE1; } | HOUR { $$ = new DatetimeField(); $$->case_idx_ = CASE2; } | DAY { $$ = new DatetimeField(); $$->case_idx_ = CASE3; } | MONTH { $$ = new DatetimeField(); $$->case_idx_ = CASE4; } | YEAR { $$ = new DatetimeField(); $$->case_idx_ = CASE5; } ; array_expr: ARRAY OP_LBRACKET expr_list OP_RBRACKET { $$ = new ArrayExpr(); $$->case_idx_ = CASE0; $$->expr_list_ = $3; } ; array_index: operand OP_LBRACKET int_literal OP_RBRACKET { $$ = new ArrayIndex(); $$->case_idx_ = CASE0; $$->operand_ = $1; $$->int_literal_ = $3; } ; literal: string_literal { $$ = new Literal(); $$->case_idx_ = CASE0; $$->string_literal_ = $1; } | bool_literal { $$ = new Literal(); $$->case_idx_ = CASE1; $$->bool_literal_ = $1; } | num_literal { $$ = new Literal(); $$->case_idx_ = CASE2; $$->num_literal_ = $1; } ; string_literal: STRINGLITERAL { $$ = new StringLiteral(); $$->string_val_ = $1; free($1); } ; bool_literal: TRUE { $$ = new BoolLiteral(); $$->case_idx_ = CASE0; } | FALSE { $$ = new BoolLiteral(); $$->case_idx_ = CASE1; } ; num_literal: int_literal { $$ = new NumLiteral(); $$->case_idx_ = CASE0; $$->int_literal_ = $1; } | float_literal { $$ = new NumLiteral(); $$->case_idx_ = CASE1; $$->float_literal_ = $1; } ; int_literal: INTLITERAL { $$ = new IntLiteral(); $$->int_val_ = $1; } ; float_literal: FLOATLITERAL { $$ = new FloatLiteral(); $$->float_val_ = $1; } ; opt_column: COLUMN { $$ = new OptColumn(); $$->case_idx_ = CASE0; } | { $$ = new OptColumn(); $$->case_idx_ = CASE1; } ; trigger_body: drop_stmt { $$ = new TriggerBody(); $$->case_idx_ = CASE0; $$->drop_stmt_ = $1; } | update_stmt { $$ = new TriggerBody(); $$->case_idx_ = CASE1; $$->update_stmt_ = $1; } | insert_stmt { $$ = new TriggerBody(); $$->case_idx_ = CASE2; $$->insert_stmt_ = $1; } | alter_stmt { $$ = new TriggerBody(); $$->case_idx_ = CASE3; $$->alter_stmt_ = $1; } ; opt_if_not_exist: IF NOT EXISTS { $$ = new OptIfNotExist(); $$->case_idx_ = CASE0; } | { $$ = new OptIfNotExist(); $$->case_idx_ = CASE1; } ; opt_if_exist: IF EXISTS { $$ = new OptIfExist(); $$->case_idx_ = CASE0; } | { $$ = new OptIfExist(); $$->case_idx_ = CASE1; } ; identifier: IDENTIFIER { $$ = new Identifier(); $$->string_val_ = $1; free($1); } ; as_alias: AS identifier { $$ = new AsAlias(); $$->case_idx_ = CASE0; $$->identifier_ = $2; if($$){ auto tmp1 = $$->identifier_; if(tmp1){ tmp1->data_type_ = kDataAliasName; tmp1->scope_ = 1; tmp1->data_flag_ =(DATAFLAG)1; } } } ; table_name: identifier { $$ = new TableName(); $$->case_idx_ = CASE0; $$->identifier_ = $1; if($$){ auto tmp1 = $$->identifier_; if(tmp1){ tmp1->data_type_ = kDataTableName; tmp1->scope_ = 1; tmp1->data_flag_ =(DATAFLAG)8; } } } ; column_name: identifier { $$ = new ColumnName(); $$->case_idx_ = CASE0; $$->identifier_ = $1; if($$){ auto tmp1 = $$->identifier_; if(tmp1){ tmp1->data_type_ = kDataColumnName; tmp1->scope_ = 2; tmp1->data_flag_ =(DATAFLAG)8; } } } ; opt_index_keyword: UNIQUE { $$ = new OptIndexKeyword(); $$->case_idx_ = CASE0; } | FULLTEXT { $$ = new OptIndexKeyword(); $$->case_idx_ = CASE1; } | SPATIAL { $$ = new OptIndexKeyword(); $$->case_idx_ = CASE2; } | { $$ = new OptIndexKeyword(); $$->case_idx_ = CASE3; } ; view_name: identifier { $$ = new ViewName(); $$->case_idx_ = CASE0; $$->identifier_ = $1; } ; function_name: identifier { $$ = new FunctionName(); $$->case_idx_ = CASE0; $$->identifier_ = $1; if($$){ auto tmp1 = $$->identifier_; if(tmp1){ tmp1->data_type_ = kDataFunctionName; tmp1->scope_ = 1; tmp1->data_flag_ =(DATAFLAG)4; } } } ; binary_op: OP_ADD { $$ = new BinaryOp(); $$->case_idx_ = CASE0; } | OP_SUB { $$ = new BinaryOp(); $$->case_idx_ = CASE1; } | OP_DIVIDE { $$ = new BinaryOp(); $$->case_idx_ = CASE2; } | OP_MOD { $$ = new BinaryOp(); $$->case_idx_ = CASE3; } | OP_MUL { $$ = new BinaryOp(); $$->case_idx_ = CASE4; } | OP_XOR { $$ = new BinaryOp(); $$->case_idx_ = CASE5; } ; opt_not: NOT { $$ = new OptNot(); $$->case_idx_ = CASE0; } | { $$ = new OptNot(); $$->case_idx_ = CASE1; } ; name: identifier { $$ = new Name(); $$->case_idx_ = CASE0; $$->identifier_ = $1; } ; type_name: numeric_type { $$ = new TypeName(); $$->case_idx_ = CASE0; $$->numeric_type_ = $1; } | character_type { $$ = new TypeName(); $$->case_idx_ = CASE1; $$->character_type_ = $1; } ; character_type: character_with_length { $$ = new CharacterType(); $$->case_idx_ = CASE0; $$->character_with_length_ = $1; } | character_without_length { $$ = new CharacterType(); $$->case_idx_ = CASE1; $$->character_without_length_ = $1; } ; character_with_length: character_conflicta OP_LP int_literal OP_RP { $$ = new CharacterWithLength(); $$->case_idx_ = CASE0; $$->character_conflicta_ = $1; $$->int_literal_ = $3; } ; character_without_length: character_conflicta { $$ = new CharacterWithoutLength(); $$->case_idx_ = CASE0; $$->character_conflicta_ = $1; } | SET { $$ = new CharacterWithoutLength(); $$->case_idx_ = CASE1; } | ENUM { $$ = new CharacterWithoutLength(); $$->case_idx_ = CASE2; } | BINARY { $$ = new CharacterWithoutLength(); $$->case_idx_ = CASE3; } ; character_conflicta: CHARACTER { $$ = new CharacterConflicta(); $$->case_idx_ = CASE0; } | CHAR { $$ = new CharacterConflicta(); $$->case_idx_ = CASE1; } | VARCHAR { $$ = new CharacterConflicta(); $$->case_idx_ = CASE2; } | TEXT { $$ = new CharacterConflicta(); $$->case_idx_ = CASE3; } | TINYTEXT { $$ = new CharacterConflicta(); $$->case_idx_ = CASE4; } | MEDIUMTEXT { $$ = new CharacterConflicta(); $$->case_idx_ = CASE5; } | LONGTEXT { $$ = new CharacterConflicta(); $$->case_idx_ = CASE6; } | NATIONAL CHARACTER { $$ = new CharacterConflicta(); $$->case_idx_ = CASE7; } | NATIONAL CHAR { $$ = new CharacterConflicta(); $$->case_idx_ = CASE8; } | NCHAR { $$ = new CharacterConflicta(); $$->case_idx_ = CASE9; } ; numeric_type: INT { $$ = new NumericType(); $$->case_idx_ = CASE0; } | INTEGER { $$ = new NumericType(); $$->case_idx_ = CASE1; } | SMALLINT { $$ = new NumericType(); $$->case_idx_ = CASE2; } | BIGINT { $$ = new NumericType(); $$->case_idx_ = CASE3; } | REAL { $$ = new NumericType(); $$->case_idx_ = CASE4; } | FLOAT { $$ = new NumericType(); $$->case_idx_ = CASE5; } | FIXED { $$ = new NumericType(); $$->case_idx_ = CASE6; } | DOUBLE { $$ = new NumericType(); $$->case_idx_ = CASE7; } | DOUBLE PRECISION { $$ = new NumericType(); $$->case_idx_ = CASE8; } | DECIMAL { $$ = new NumericType(); $$->case_idx_ = CASE9; } | DEC { $$ = new NumericType(); $$->case_idx_ = CASE10; } | NUMERIC { $$ = new NumericType(); $$->case_idx_ = CASE11; } | BOOLEAN { $$ = new NumericType(); $$->case_idx_ = CASE12; } ; opt_table_constraint_list: table_constraint_list { $$ = new OptTableConstraintList(); $$->case_idx_ = CASE0; $$->table_constraint_list_ = $1; } | { $$ = new OptTableConstraintList(); $$->case_idx_ = CASE1; } ; table_constraint_list: table_constraint { $$ = new TableConstraintList(); $$->case_idx_ = CASE0; $$->table_constraint_ = $1; } | table_constraint OP_COMMA table_constraint_list { $$ = new TableConstraintList(); $$->case_idx_ = CASE1; $$->table_constraint_ = $1; $$->table_constraint_list_ = $3; } ; table_constraint: constraint_name PRIMARY KEY OP_LP indexed_column_list OP_RP { $$ = new TableConstraint(); $$->case_idx_ = CASE0; $$->constraint_name_ = $1; $$->indexed_column_list_ = $5; } | constraint_name UNIQUE OP_LP indexed_column_list OP_RP { $$ = new TableConstraint(); $$->case_idx_ = CASE1; $$->constraint_name_ = $1; $$->indexed_column_list_ = $4; } | constraint_name CHECK OP_LP expr OP_RP opt_enforced { $$ = new TableConstraint(); $$->case_idx_ = CASE2; $$->constraint_name_ = $1; $$->expr_ = $4; $$->opt_enforced_ = $6; } | constraint_name FOREIGN KEY OP_LP column_name_list OP_RP reference_clause { $$ = new TableConstraint(); $$->case_idx_ = CASE3; $$->constraint_name_ = $1; $$->column_name_list_ = $5; $$->reference_clause_ = $7; if($$){ auto tmp1 = $$->column_name_list_; while(tmp1){ auto tmp2 = tmp1->column_name_; if(tmp2){ auto tmp3 = tmp2->identifier_; if(tmp3){ tmp3->data_type_ = kDataColumnName; tmp3->scope_ = 2; tmp3->data_flag_ =(DATAFLAG)8; } } tmp1 = tmp1->column_name_list_; } } } ; opt_enforced: ENFORCED { $$ = new OptEnforced(); $$->case_idx_ = CASE0; } | NOT ENFORCED { $$ = new OptEnforced(); $$->case_idx_ = CASE1; } | { $$ = new OptEnforced(); $$->case_idx_ = CASE2; } ; %% ================================================ FILE: srcs/internal/mysql/parser/bison_parser.cpp ================================================ /* A Bison parser, made by GNU Bison 3.3.2. */ /* Bison implementation for Yacc-like parsers in C Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2019 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* C LALR(1) parser skeleton written by Richard Stallman, by simplifying the original so-called "semantic" parser. */ /* All symbols defined below should begin with yy or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. There are some unavoidable exceptions within include files to define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ /* Undocumented macros, especially those whose name start with YY_, are private implementation details. Do not rely on them. */ /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ #define YYBISON_VERSION "3.3.2" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ #define YYPURE 2 /* Push parsers. */ #define YYPUSH 0 /* Pull parsers. */ #define YYPULL 1 /* Substitute the type names. */ #define YYSTYPE FF_STYPE #define YYLTYPE FF_LTYPE /* Substitute the variable and function names. */ #define yyparse ff_parse #define yylex ff_lex #define yyerror ff_error #define yydebug ff_debug #define yynerrs ff_nerrs /* First part of user prologue. */ #line 1 "bison.y" /* yacc.c:337 */ #include "bison_parser.h" #include #include #include "flex_lexer.h" int yyerror(YYLTYPE *llocp, Program *result, yyscan_t scanner, const char *msg) { return 0; } #line 86 "bison_parser.cpp" /* yacc.c:337 */ #ifndef YY_NULLPTR #if defined __cplusplus #if 201103L <= __cplusplus #define YY_NULLPTR nullptr #else #define YY_NULLPTR 0 #endif #else #define YY_NULLPTR ((void *)0) #endif #endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE #undef YYERROR_VERBOSE #define YYERROR_VERBOSE 1 #else #define YYERROR_VERBOSE 1 #endif /* In a future release of Bison, this section will be replaced by #include "bison_parser.h". */ #ifndef YY_FF_BISON_PARSER_H_INCLUDED #define YY_FF_BISON_PARSER_H_INCLUDED /* Debug traces. */ #ifndef FF_DEBUG #if defined YYDEBUG #if YYDEBUG #define FF_DEBUG 1 #else #define FF_DEBUG 0 #endif #else /* ! defined YYDEBUG */ #define FF_DEBUG 0 #endif /* ! defined YYDEBUG */ #endif /* ! defined FF_DEBUG */ #if FF_DEBUG extern int ff_debug; #endif /* "%code requires" blocks. */ #line 8 "bison.y" /* yacc.c:352 */ #include "../include/ast.h" #include "parser_typedef.h" #line 132 "bison_parser.cpp" /* yacc.c:352 */ /* Token type. */ #ifndef FF_TOKENTYPE #define FF_TOKENTYPE enum ff_tokentype { SQL_OP_NOTEQUAL = 258, SQL_ENABLE = 259, SQL_SIMPLE = 260, SQL_TEXT = 261, SQL_OVER = 262, SQL_YEAR = 263, SQL_INSERT_METHOD = 264, SQL_OP_SEMI = 265, SQL_BIGINT = 266, SQL_LIMIT = 267, SQL_OP_GREATERTHAN = 268, SQL_WITH = 269, SQL_ORDER = 270, SQL_OPTION = 271, SQL_LAST = 272, SQL_UNBOUNDED = 273, SQL_PRECEDING = 274, SQL_EXCEPT = 275, SQL_NUMERIC = 276, SQL_OP_LESSTHAN = 277, SQL_ACTION = 278, SQL_BEFORE = 279, SQL_OP_GREATEREQ = 280, SQL_CHECK = 281, SQL_COMPACT = 282, SQL_FULL = 283, SQL_NATURAL = 284, SQL_BINARY = 285, SQL_NATIONAL = 286, SQL_ENUM = 287, SQL_REDUNDANT = 288, SQL_OP_ADD = 289, SQL_CURRENT = 290, SQL_MERGE = 291, SQL_TRIGGER = 292, SQL_COMPRESSED = 293, SQL_OP_SUB = 294, SQL_FALSE = 295, SQL_UNIQUE = 296, SQL_WHERE = 297, SQL_MINUTE = 298, SQL_FIRST = 299, SQL_ON = 300, SQL_PARTIAL = 301, SQL_DOUBLE = 302, SQL_AFTER = 303, SQL_PRIMARY = 304, SQL_MONTH = 305, SQL_DEFERRED = 306, SQL_VALUES = 307, SQL_LONGTEXT = 308, SQL_SQL = 309, SQL_SHARED = 310, SQL_VALIDATION = 311, SQL_OR = 312, SQL_VIEW = 313, SQL_INDEX = 314, SQL_GROUP = 315, SQL_OP_MUL = 316, SQL_INPLACE = 317, SQL_FOREIGN = 318, SQL_RESTRICT = 319, SQL_SPATIAL = 320, SQL_FOLLOWING = 321, SQL_DEC = 322, SQL_SELECT = 323, SQL_NONE = 324, SQL_DISTINCT = 325, SQL_TRUE = 326, SQL_DYNAMIC = 327, SQL_BY = 328, SQL_OP_MOD = 329, SQL_INTEGER = 330, SQL_SECURITY = 331, SQL_IS = 332, SQL_DEFINER = 333, SQL_ROW = 334, SQL_ENFORCED = 335, SQL_END = 336, SQL_RECURSIVE = 337, SQL_FOR = 338, SQL_TEMPTABLE = 339, SQL_UNION = 340, SQL_NULLS = 341, SQL_UPDATE = 342, SQL_ELSE = 343, SQL_RANGE = 344, SQL_SET = 345, SQL_INVOKER = 346, SQL_OFFSET = 347, SQL_INDEXED = 348, SQL_FORCE = 349, SQL_NCHAR = 350, SQL_AND = 351, SQL_INITIALLY = 352, SQL_PRECISION = 353, SQL_FILTER = 354, SQL_WITHOUT = 355, SQL_NOT = 356, SQL_DELETE = 357, SQL_DEFFERRABLE = 358, SQL_REAL = 359, SQL_THEN = 360, SQL_UNDEFINED = 361, SQL_DEFAULT = 362, SQL_CROSS = 363, SQL_CHAR = 364, SQL_REFERENCES = 365, SQL_OP_XOR = 366, SQL_CASE = 367, SQL_FIXED = 368, SQL_HOUR = 369, SQL_NO = 370, SQL_COLUMN = 371, SQL_LOCAL = 372, SQL_DROP = 373, SQL_REPLACE = 374, SQL_ASC = 375, SQL_OP_COMMA = 376, SQL_DISABLE = 377, SQL_TABLE = 378, SQL_ARRAY = 379, SQL_IF = 380, SQL_EXTRACT = 381, SQL_LEFT = 382, SQL_FULLTEXT = 383, SQL_HASH = 384, SQL_ALGORITHM = 385, SQL_LOCK = 386, SQL_DECIMAL = 387, SQL_PARTITION = 388, SQL_CASCADE = 389, SQL_ADD = 390, SQL_BETWEEN = 391, SQL_OP_LESSEQ = 392, SQL_MATCH = 393, SQL_ALL = 394, SQL_ROWS = 395, SQL_JOIN = 396, SQL_LIKE = 397, SQL_OP_RP = 398, SQL_IGNORE = 399, SQL_INT = 400, SQL_MEDIUMTEXT = 401, SQL_BOOLEAN = 402, SQL_KEY = 403, SQL_EACH = 404, SQL_USING = 405, SQL_RENAME = 406, SQL_DO = 407, SQL_OP_LP = 408, SQL_CHARACTER = 409, SQL_UMINUS = 410, SQL_CAST = 411, SQL_GROUPS = 412, SQL_OUTER = 413, SQL_NULL = 414, SQL_SMALLINT = 415, SQL_EXCLUSIVE = 416, SQL_TEMPORARY = 417, SQL_CONSTRAINT = 418, SQL_CREATE = 419, SQL_OP_LBRACKET = 420, SQL_WHEN = 421, SQL_IMMEDIATE = 422, SQL_TO = 423, SQL_BTREE = 424, SQL_DAY = 425, SQL_CONFLICT = 426, SQL_ROW_FORMAT = 427, SQL_OP_RBRACKET = 428, SQL_EXISTS = 429, SQL_INSERT = 430, SQL_KEYS = 431, SQL_INTO = 432, SQL_OP_DIVIDE = 433, SQL_CASCADED = 434, SQL_ISNULL = 435, SQL_AS = 436, SQL_INNER = 437, SQL_INTERSECT = 438, SQL_IN = 439, SQL_OP_EQUAL = 440, SQL_VARCHAR = 441, SQL_COPY = 442, SQL_ALTER = 443, SQL_DESC = 444, SQL_FROM = 445, SQL_TINYTEXT = 446, SQL_FLOAT = 447, SQL_SECOND = 448, SQL_WINDOW = 449, SQL_NOTHING = 450, SQL_HAVING = 451, SQL_INTLITERAL = 452, SQL_FLOATLITERAL = 453, SQL_IDENTIFIER = 454, SQL_STRINGLITERAL = 455 }; #endif /* Value type. */ #if !defined FF_STYPE && !defined FF_STYPE_IS_DECLARED #line 30 "bison.y" /* yacc.c:352 */ union FF_STYPE { #line 30 "bison.y" /* yacc.c:352 */ long ival; char *sval; double fval; Program *program_t; Stmtlist *stmtlist_t; Stmt *stmt_t; CreateStmt *create_stmt_t; DropStmt *drop_stmt_t; AlterStmt *alter_stmt_t; SelectStmt *select_stmt_t; SelectWithParens *select_with_parens_t; SelectNoParens *select_no_parens_t; SelectClauseList *select_clause_list_t; SelectClause *select_clause_t; CombineClause *combine_clause_t; OptFromClause *opt_from_clause_t; SelectTarget *select_target_t; OptWindowClause *opt_window_clause_t; WindowClause *window_clause_t; WindowDefList *window_def_list_t; WindowDef *window_def_t; WindowName *window_name_t; Window *window_t; OptPartition *opt_partition_t; OptFrameClause *opt_frame_clause_t; RangeOrRows *range_or_rows_t; FrameBoundStart *frame_bound_start_t; FrameBoundEnd *frame_bound_end_t; FrameBound *frame_bound_t; OptExistWindowName *opt_exist_window_name_t; OptGroupClause *opt_group_clause_t; OptHavingClause *opt_having_clause_t; OptWhereClause *opt_where_clause_t; WhereClause *where_clause_t; FromClause *from_clause_t; TableRef *table_ref_t; OptIndex *opt_index_t; OptOn *opt_on_t; OptUsing *opt_using_t; ColumnNameList *column_name_list_t; OptTablePrefix *opt_table_prefix_t; JoinOp *join_op_t; OptJoinType *opt_join_type_t; ExprList *expr_list_t; OptLimitClause *opt_limit_clause_t; LimitClause *limit_clause_t; OptLimitRowCount *opt_limit_row_count_t; OptOrderClause *opt_order_clause_t; OptOrderNulls *opt_order_nulls_t; OrderItemList *order_item_list_t; OrderItem *order_item_t; OptOrderBehavior *opt_order_behavior_t; OptWithClause *opt_with_clause_t; CteTableList *cte_table_list_t; CteTable *cte_table_t; CteTableName *cte_table_name_t; OptAllOrDistinct *opt_all_or_distinct_t; CreateTableStmt *create_table_stmt_t; CreateIndexStmt *create_index_stmt_t; CreateTriggerStmt *create_trigger_stmt_t; CreateViewStmt *create_view_stmt_t; OptTableOptionList *opt_table_option_list_t; TableOptionList *table_option_list_t; TableOption *table_option_t; OptOpComma *opt_op_comma_t; OptIgnoreOrReplace *opt_ignore_or_replace_t; OptViewAlgorithm *opt_view_algorithm_t; OptSqlSecurity *opt_sql_security_t; OptIndexOption *opt_index_option_t; OptExtraOption *opt_extra_option_t; IndexAlgorithmOption *index_algorithm_option_t; LockOption *lock_option_t; OptOpEqual *opt_op_equal_t; TriggerEvents *trigger_events_t; TriggerName *trigger_name_t; TriggerActionTime *trigger_action_time_t; DropIndexStmt *drop_index_stmt_t; DropTableStmt *drop_table_stmt_t; OptRestrictOrCascade *opt_restrict_or_cascade_t; DropTriggerStmt *drop_trigger_stmt_t; DropViewStmt *drop_view_stmt_t; InsertStmt *insert_stmt_t; InsertRest *insert_rest_t; SuperValuesList *super_values_list_t; ValuesList *values_list_t; OptOnConflict *opt_on_conflict_t; OptConflictExpr *opt_conflict_expr_t; IndexedColumnList *indexed_column_list_t; IndexedColumn *indexed_column_t; UpdateStmt *update_stmt_t; AlterAction *alter_action_t; AlterConstantAction *alter_constant_action_t; ColumnDefList *column_def_list_t; ColumnDef *column_def_t; OptColumnConstraintList *opt_column_constraint_list_t; ColumnConstraintList *column_constraint_list_t; ColumnConstraint *column_constraint_t; OptReferenceClause *opt_reference_clause_t; OptCheck *opt_check_t; ConstraintType *constraint_type_t; ReferenceClause *reference_clause_t; OptForeignKey *opt_foreign_key_t; OptForeignKeyActions *opt_foreign_key_actions_t; ForeignKeyActions *foreign_key_actions_t; KeyActions *key_actions_t; OptConstraintAttributeSpec *opt_constraint_attribute_spec_t; OptInitialTime *opt_initial_time_t; ConstraintName *constraint_name_t; OptTemp *opt_temp_t; OptCheckOption *opt_check_option_t; OptColumnNameListP *opt_column_name_list_p_t; SetClauseList *set_clause_list_t; SetClause *set_clause_t; OptAsAlias *opt_as_alias_t; Expr *expr_t; Operand *operand_t; CastExpr *cast_expr_t; ScalarExpr *scalar_expr_t; UnaryExpr *unary_expr_t; BinaryExpr *binary_expr_t; LogicExpr *logic_expr_t; InExpr *in_expr_t; CaseExpr *case_expr_t; BetweenExpr *between_expr_t; ExistsExpr *exists_expr_t; FunctionExpr *function_expr_t; OptDistinct *opt_distinct_t; OptFilterClause *opt_filter_clause_t; OptOverClause *opt_over_clause_t; CaseList *case_list_t; CaseClause *case_clause_t; CompExpr *comp_expr_t; ExtractExpr *extract_expr_t; DatetimeField *datetime_field_t; ArrayExpr *array_expr_t; ArrayIndex *array_index_t; Literal *literal_t; StringLiteral *string_literal_t; BoolLiteral *bool_literal_t; NumLiteral *num_literal_t; IntLiteral *int_literal_t; FloatLiteral *float_literal_t; OptColumn *opt_column_t; TriggerBody *trigger_body_t; OptIfNotExist *opt_if_not_exist_t; OptIfExist *opt_if_exist_t; Identifier *identifier_t; AsAlias *as_alias_t; TableName *table_name_t; ColumnName *column_name_t; OptIndexKeyword *opt_index_keyword_t; ViewName *view_name_t; FunctionName *function_name_t; BinaryOp *binary_op_t; OptNot *opt_not_t; Name *name_t; TypeName *type_name_t; CharacterType *character_type_t; CharacterWithLength *character_with_length_t; CharacterWithoutLength *character_without_length_t; CharacterConflicta *character_conflicta_t; NumericType *numeric_type_t; OptTableConstraintList *opt_table_constraint_list_t; TableConstraintList *table_constraint_list_t; TableConstraint *table_constraint_t; OptEnforced *opt_enforced_t; #line 514 "bison_parser.cpp" /* yacc.c:352 */ }; #line 30 "bison.y" /* yacc.c:352 */ typedef union FF_STYPE FF_STYPE; #define FF_STYPE_IS_TRIVIAL 1 #define FF_STYPE_IS_DECLARED 1 #endif /* Location type. */ #if !defined FF_LTYPE && !defined FF_LTYPE_IS_DECLARED typedef struct FF_LTYPE FF_LTYPE; struct FF_LTYPE { int first_line; int first_column; int last_line; int last_column; }; #define FF_LTYPE_IS_DECLARED 1 #define FF_LTYPE_IS_TRIVIAL 1 #endif int ff_parse(Program *result, yyscan_t scanner); #endif /* !YY_FF_BISON_PARSER_H_INCLUDED */ #ifdef short #undef short #endif #ifdef YYTYPE_UINT8 typedef YYTYPE_UINT8 yytype_uint8; #else typedef unsigned char yytype_uint8; #endif #ifdef YYTYPE_INT8 typedef YYTYPE_INT8 yytype_int8; #else typedef signed char yytype_int8; #endif #ifdef YYTYPE_UINT16 typedef YYTYPE_UINT16 yytype_uint16; #else typedef unsigned short yytype_uint16; #endif #ifdef YYTYPE_INT16 typedef YYTYPE_INT16 yytype_int16; #else typedef short yytype_int16; #endif #ifndef YYSIZE_T #ifdef __SIZE_TYPE__ #define YYSIZE_T __SIZE_TYPE__ #elif defined size_t #define YYSIZE_T size_t #elif !defined YYSIZE_T #include /* INFRINGES ON USER NAME SPACE */ #define YYSIZE_T size_t #else #define YYSIZE_T unsigned #endif #endif #define YYSIZE_MAXIMUM ((YYSIZE_T)-1) #ifndef YY_ #if defined YYENABLE_NLS && YYENABLE_NLS #if ENABLE_NLS #include /* INFRINGES ON USER NAME SPACE */ #define YY_(Msgid) dgettext("bison-runtime", Msgid) #endif #endif #ifndef YY_ #define YY_(Msgid) Msgid #endif #endif #ifndef YY_ATTRIBUTE #if (defined __GNUC__ && \ (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) || \ defined __SUNPRO_C && 0x5110 <= __SUNPRO_C #define YY_ATTRIBUTE(Spec) __attribute__(Spec) #else #define YY_ATTRIBUTE(Spec) /* empty */ #endif #endif #ifndef YY_ATTRIBUTE_PURE #define YY_ATTRIBUTE_PURE YY_ATTRIBUTE((__pure__)) #endif #ifndef YY_ATTRIBUTE_UNUSED #define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE((__unused__)) #endif /* Suppress unused-variable warnings by "using" E. */ #if !defined lint || defined __GNUC__ #define YYUSE(E) ((void)(E)) #else #define YYUSE(E) /* empty */ #endif #if defined __GNUC__ && !defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ /* Suppress an incorrect diagnostic about yylval being uninitialized. */ #define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ _Pragma("GCC diagnostic push") \ _Pragma("GCC diagnostic ignored \"-Wuninitialized\"") \ _Pragma("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") #define YY_IGNORE_MAYBE_UNINITIALIZED_END _Pragma("GCC diagnostic pop") #else #define YY_INITIAL_VALUE(Value) Value #endif #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN #define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN #define YY_IGNORE_MAYBE_UNINITIALIZED_END #endif #ifndef YY_INITIAL_VALUE #define YY_INITIAL_VALUE(Value) /* Nothing. */ #endif #if !defined yyoverflow || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ #ifdef YYSTACK_USE_ALLOCA #if YYSTACK_USE_ALLOCA #ifdef __GNUC__ #define YYSTACK_ALLOC __builtin_alloca #elif defined __BUILTIN_VA_ARG_INCR #include /* INFRINGES ON USER NAME SPACE */ #elif defined _AIX #define YYSTACK_ALLOC __alloca #elif defined _MSC_VER #include /* INFRINGES ON USER NAME SPACE */ #define alloca _alloca #else #define YYSTACK_ALLOC alloca #if !defined _ALLOCA_H && !defined EXIT_SUCCESS #include /* INFRINGES ON USER NAME SPACE */ /* Use EXIT_SUCCESS as a witness for stdlib.h. */ #ifndef EXIT_SUCCESS #define EXIT_SUCCESS 0 #endif #endif #endif #endif #endif #ifdef YYSTACK_ALLOC /* Pacify GCC's 'empty if-body' warning. */ #define YYSTACK_FREE(Ptr) \ do { /* empty */ \ ; \ } while (0) #ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely invoke alloca (N) if N exceeds 4096. Use a slightly smaller number to allow for a few compiler-allocated temporary stack slots. */ #define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ #endif #else #define YYSTACK_ALLOC YYMALLOC #define YYSTACK_FREE YYFREE #ifndef YYSTACK_ALLOC_MAXIMUM #define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM #endif #if (defined __cplusplus && !defined EXIT_SUCCESS && \ !((defined YYMALLOC || defined malloc) && \ (defined YYFREE || defined free))) #include /* INFRINGES ON USER NAME SPACE */ #ifndef EXIT_SUCCESS #define EXIT_SUCCESS 0 #endif #endif #ifndef YYMALLOC #define YYMALLOC malloc #if !defined malloc && !defined EXIT_SUCCESS void *malloc(YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ #endif #endif #ifndef YYFREE #define YYFREE free #if !defined free && !defined EXIT_SUCCESS void free(void *); /* INFRINGES ON USER NAME SPACE */ #endif #endif #endif #endif /* ! defined yyoverflow || YYERROR_VERBOSE */ #if (!defined yyoverflow && \ (!defined __cplusplus || \ (defined FF_LTYPE_IS_TRIVIAL && FF_LTYPE_IS_TRIVIAL && \ defined FF_STYPE_IS_TRIVIAL && FF_STYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc { yytype_int16 yyss_alloc; YYSTYPE yyvs_alloc; YYLTYPE yyls_alloc; }; /* The size of the maximum gap between one aligned stack and the next. */ #define YYSTACK_GAP_MAXIMUM (sizeof(union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ #define YYSTACK_BYTES(N) \ ((N) * (sizeof(yytype_int16) + sizeof(YYSTYPE) + sizeof(YYLTYPE)) + \ 2 * YYSTACK_GAP_MAXIMUM) #define YYCOPY_NEEDED 1 /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ #define YYSTACK_RELOCATE(Stack_alloc, Stack) \ do { \ YYSIZE_T yynewbytes; \ YYCOPY(&yyptr->Stack_alloc, Stack, yysize); \ Stack = &yyptr->Stack_alloc; \ yynewbytes = yystacksize * sizeof(*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof(*yyptr); \ } while (0) #endif #if defined YYCOPY_NEEDED && YYCOPY_NEEDED /* Copy COUNT objects from SRC to DST. The source and destination do not overlap. */ #ifndef YYCOPY #if defined __GNUC__ && 1 < __GNUC__ #define YYCOPY(Dst, Src, Count) \ __builtin_memcpy(Dst, Src, (Count) * sizeof(*(Src))) #else #define YYCOPY(Dst, Src, Count) \ do { \ YYSIZE_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) (Dst)[yyi] = (Src)[yyi]; \ } while (0) #endif #endif #endif /* !YYCOPY_NEEDED */ /* YYFINAL -- State number of the termination state. */ #define YYFINAL 54 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 1047 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 201 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 164 /* YYNRULES -- Number of rules. */ #define YYNRULES 409 /* YYNSTATES -- Number of states. */ #define YYNSTATES 721 #define YYUNDEFTOK 2 #define YYMAXUTOK 455 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM as returned by yylex, with out-of-bounds checking. */ #define YYTRANSLATE(YYX) \ ((unsigned)(YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM as returned by yylex. */ static const yytype_uint8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200}; #if FF_DEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { 0, 425, 425, 435, 442, 451, 457, 463, 469, 475, 481, 490, 496, 502, 508, 517, 523, 529, 535, 544, 554, 560, 569, 575, 584, 596, 602, 613, 627, 632, 637, 645, 651, 659, 668, 674, 682, 691, 697, 707, 729, 738, 750, 756, 764, 771, 779, 787, 792, 797, 805, 811, 819, 825, 833, 839, 845, 853, 868, 876, 883, 891, 897, 905, 911, 919, 928, 937, 948, 959, 969, 982, 988, 993, 1001, 1007, 1015, 1021, 1029, 1035, 1045, 1052, 1060, 1065, 1070, 1079, 1084, 1089, 1094, 1099, 1107, 1115, 1125, 1131, 1139, 1145, 1152, 1162, 1168, 1176, 1182, 1190, 1195, 1200, 1208, 1214, 1224, 1235, 1240, 1245, 1253, 1259, 1265, 1273, 1279, 1289, 1299, 1309, 1314, 1319, 1327, 1350, 1392, 1430, 1467, 1509, 1554, 1560, 1568, 1574, 1585, 1591, 1597, 1603, 1609, 1615, 1621, 1627, 1633, 1642, 1647, 1655, 1660, 1665, 1673, 1678, 1683, 1688, 1696, 1701, 1706, 1714, 1719, 1724, 1732, 1738, 1744, 1752, 1758, 1764, 1773, 1779, 1785, 1791, 1800, 1805, 1813, 1818, 1823, 1831, 1840, 1845, 1853, 1875, 1899, 1904, 1909, 1917, 1939, 1962, 1975, 1982, 1988, 1998, 2004, 2014, 2023, 2029, 2037, 2045, 2052, 2060, 2066, 2076, 2086, 2097, 2111, 2129, 2161, 2180, 2199, 2208, 2213, 2218, 2223, 2228, 2234, 2239, 2247, 2253, 2263, 2283, 2291, 2299, 2305, 2315, 2324, 2331, 2339, 2346, 2354, 2359, 2364, 2372, 2415, 2420, 2428, 2434, 2442, 2447, 2452, 2457, 2463, 2472, 2477, 2482, 2487, 2492, 2500, 2506, 2512, 2520, 2525, 2530, 2538, 2547, 2552, 2560, 2565, 2570, 2575, 2583, 2589, 2597, 2603, 2613, 2620, 2630, 2636, 2644, 2650, 2656, 2662, 2668, 2674, 2683, 2689, 2695, 2701, 2707, 2713, 2719, 2725, 2731, 2737, 2746, 2756, 2762, 2771, 2777, 2783, 2789, 2795, 2801, 2806, 2814, 2820, 2828, 2835, 2845, 2852, 2862, 2870, 2878, 2889, 2896, 2902, 2910, 2920, 2928, 2939, 2949, 2957, 2970, 2975, 2983, 2989, 2997, 3003, 3009, 3017, 3023, 3033, 3043, 3050, 3057, 3064, 3071, 3078, 3088, 3098, 3103, 3108, 3113, 3118, 3123, 3131, 3140, 3150, 3156, 3162, 3171, 3180, 3185, 3193, 3199, 3208, 3216, 3224, 3229, 3237, 3243, 3249, 3255, 3264, 3269, 3277, 3282, 3290, 3299, 3317, 3335, 3353, 3358, 3363, 3368, 3376, 3385, 3403, 3408, 3413, 3418, 3423, 3428, 3436, 3441, 3449, 3458, 3464, 3473, 3479, 3488, 3498, 3504, 3509, 3514, 3522, 3527, 3532, 3537, 3542, 3547, 3552, 3557, 3562, 3567, 3575, 3580, 3585, 3590, 3595, 3600, 3605, 3610, 3615, 3620, 3625, 3630, 3635, 3643, 3649, 3657, 3663, 3673, 3680, 3687, 3695, 3722, 3727, 3732}; #endif #if FF_DEBUG || YYERROR_VERBOSE || 1 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = {"$end", "error", "$undefined", "OP_NOTEQUAL", "ENABLE", "SIMPLE", "TEXT", "OVER", "YEAR", "INSERT_METHOD", "OP_SEMI", "BIGINT", "LIMIT", "OP_GREATERTHAN", "WITH", "ORDER", "OPTION", "LAST", "UNBOUNDED", "PRECEDING", "EXCEPT", "NUMERIC", "OP_LESSTHAN", "ACTION", "BEFORE", "OP_GREATEREQ", "CHECK", "COMPACT", "FULL", "NATURAL", "BINARY", "NATIONAL", "ENUM", "REDUNDANT", "OP_ADD", "CURRENT", "MERGE", "TRIGGER", "COMPRESSED", "OP_SUB", "FALSE", "UNIQUE", "WHERE", "MINUTE", "FIRST", "ON", "PARTIAL", "DOUBLE", "AFTER", "PRIMARY", "MONTH", "DEFERRED", "VALUES", "LONGTEXT", "SQL", "SHARED", "VALIDATION", "OR", "VIEW", "INDEX", "GROUP", "OP_MUL", "INPLACE", "FOREIGN", "RESTRICT", "SPATIAL", "FOLLOWING", "DEC", "SELECT", "NONE", "DISTINCT", "TRUE", "DYNAMIC", "BY", "OP_MOD", "INTEGER", "SECURITY", "IS", "DEFINER", "ROW", "ENFORCED", "END", "RECURSIVE", "FOR", "TEMPTABLE", "UNION", "NULLS", "UPDATE", "ELSE", "RANGE", "SET", "INVOKER", "OFFSET", "INDEXED", "FORCE", "NCHAR", "AND", "INITIALLY", "PRECISION", "FILTER", "WITHOUT", "NOT", "DELETE", "DEFFERRABLE", "REAL", "THEN", "UNDEFINED", "DEFAULT", "CROSS", "CHAR", "REFERENCES", "OP_XOR", "CASE", "FIXED", "HOUR", "NO", "COLUMN", "LOCAL", "DROP", "REPLACE", "ASC", "OP_COMMA", "DISABLE", "TABLE", "ARRAY", "IF", "EXTRACT", "LEFT", "FULLTEXT", "HASH", "ALGORITHM", "LOCK", "DECIMAL", "PARTITION", "CASCADE", "ADD", "BETWEEN", "OP_LESSEQ", "MATCH", "ALL", "ROWS", "JOIN", "LIKE", "OP_RP", "IGNORE", "INT", "MEDIUMTEXT", "BOOLEAN", "KEY", "EACH", "USING", "RENAME", "DO", "OP_LP", "CHARACTER", "UMINUS", "CAST", "GROUPS", "OUTER", "NULL", "SMALLINT", "EXCLUSIVE", "TEMPORARY", "CONSTRAINT", "CREATE", "OP_LBRACKET", "WHEN", "IMMEDIATE", "TO", "BTREE", "DAY", "CONFLICT", "ROW_FORMAT", "OP_RBRACKET", "EXISTS", "INSERT", "KEYS", "INTO", "OP_DIVIDE", "CASCADED", "ISNULL", "AS", "INNER", "INTERSECT", "IN", "OP_EQUAL", "VARCHAR", "COPY", "ALTER", "DESC", "FROM", "TINYTEXT", "FLOAT", "SECOND", "WINDOW", "NOTHING", "HAVING", "INTLITERAL", "FLOATLITERAL", "IDENTIFIER", "STRINGLITERAL", "$accept", "program", "stmtlist", "stmt", "create_stmt", "drop_stmt", "alter_stmt", "select_stmt", "select_with_parens", "select_no_parens", "select_clause_list", "select_clause", "combine_clause", "opt_from_clause", "select_target", "opt_window_clause", "window_clause", "window_def_list", "window_def", "window_name", "window", "opt_partition", "opt_frame_clause", "range_or_rows", "frame_bound_start", "frame_bound_end", "frame_bound", "opt_exist_window_name", "opt_group_clause", "opt_having_clause", "opt_where_clause", "where_clause", "from_clause", "table_ref", "opt_index", "opt_on", "opt_using", "column_name_list", "opt_table_prefix", "join_op", "opt_join_type", "expr_list", "opt_limit_clause", "limit_clause", "opt_limit_row_count", "opt_order_clause", "opt_order_nulls", "order_item_list", "order_item", "opt_order_behavior", "opt_with_clause", "cte_table_list", "cte_table", "cte_table_name", "opt_all_or_distinct", "create_table_stmt", "create_index_stmt", "create_trigger_stmt", "create_view_stmt", "opt_table_option_list", "table_option_list", "table_option", "opt_op_comma", "opt_ignore_or_replace", "opt_view_algorithm", "opt_sql_security", "opt_index_option", "opt_extra_option", "index_algorithm_option", "lock_option", "opt_op_equal", "trigger_events", "trigger_name", "trigger_action_time", "drop_index_stmt", "drop_table_stmt", "opt_restrict_or_cascade", "drop_trigger_stmt", "drop_view_stmt", "insert_stmt", "insert_rest", "super_values_list", "values_list", "opt_on_conflict", "opt_conflict_expr", "indexed_column_list", "indexed_column", "update_stmt", "alter_action", "alter_constant_action", "column_def_list", "column_def", "opt_column_constraint_list", "column_constraint_list", "column_constraint", "opt_reference_clause", "opt_check", "constraint_type", "reference_clause", "opt_foreign_key", "opt_foreign_key_actions", "foreign_key_actions", "key_actions", "opt_constraint_attribute_spec", "opt_initial_time", "constraint_name", "opt_temp", "opt_check_option", "opt_column_name_list_p", "set_clause_list", "set_clause", "opt_as_alias", "expr", "operand", "cast_expr", "scalar_expr", "unary_expr", "binary_expr", "logic_expr", "in_expr", "case_expr", "between_expr", "exists_expr", "function_expr", "opt_distinct", "opt_filter_clause", "opt_over_clause", "case_list", "case_clause", "comp_expr", "extract_expr", "datetime_field", "array_expr", "array_index", "literal", "string_literal", "bool_literal", "num_literal", "int_literal", "float_literal", "opt_column", "trigger_body", "opt_if_not_exist", "opt_if_exist", "identifier", "as_alias", "table_name", "column_name", "opt_index_keyword", "view_name", "function_name", "binary_op", "opt_not", "name", "type_name", "character_type", "character_with_length", "character_without_length", "character_conflicta", "numeric_type", "opt_table_constraint_list", "table_constraint_list", "table_constraint", "opt_enforced", YY_NULLPTR}; #endif #ifdef YYPRINT /* YYTOKNUM[NUM] -- (External) token number corresponding to the (internal) symbol number NUM (which must be that of a token). */ static const yytype_uint16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455}; #endif #define YYPACT_NINF -338 #define yypact_value_is_default(Yystate) (!!((Yystate) == (-338))) #define YYTABLE_NINF -366 #define yytable_value_is_error(Yytable_value) (!!((Yytable_value) == (-366))) /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ static const yytype_int16 yypact[] = { 13, -54, -89, 27, 17, 114, -70, 67, -338, 195, -338, -338, -338, -338, -338, -338, -7, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, 66, -338, -338, 160, 129, -338, 169, 66, 146, 207, 207, 66, -338, 221, 268, 272, 344, 66, -338, 301, -338, -338, 231, 363, 296, 362, 66, -338, 16, -30, 245, 410, -2, -338, 66, 273, 66, -338, 146, 66, 341, -338, 259, 66, 66, 274, 207, -338, -338, 297, -338, 302, 217, 359, 379, 314, 66, 128, -338, -338, -338, 838, 66, 365, 428, -338, -338, -338, 344, -338, 17, 303, -338, 320, 353, -338, -121, -338, -338, -338, 40, 260, 260, -338, -338, -338, 66, -338, -338, -29, 363, -338, -338, -338, 298, 66, 343, 66, 402, 278, 393, -338, 394, 62, 280, 336, 96, -338, -338, -338, 847, -338, -338, -338, 847, 804, 292, 306, 461, 308, -338, -338, -338, -338, 275, -338, -21, 459, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, 310, -338, 317, 293, 146, 838, 838, -338, -338, -338, 328, -338, 66, -121, 66, 434, 356, 295, -338, -338, -338, -338, 15, 185, 40, -338, -338, -338, 433, 421, -338, -338, 169, 309, 11, 66, -338, -338, -338, 337, -338, 66, -338, 66, 66, 66, 847, 178, 718, 838, 44, 313, 323, 838, 6, 349, 351, 838, -338, 434, -338, 838, 838, 369, 847, 847, 847, 847, -338, -338, -338, -338, -51, 271, -338, 847, 847, 847, 305, -338, -338, 847, 847, 319, -24, 352, 169, -338, 376, -33, 177, -338, -338, 434, 364, 838, 410, -338, -121, 838, -338, -338, -338, -338, -338, -338, -338, -338, 66, 66, 325, -338, 260, 66, 260, 220, -338, 12, 355, -338, -338, -338, 282, -338, 342, 367, 204, 318, -338, 838, -338, 339, -338, -338, -338, -338, -338, -338, 321, -338, -338, -16, 130, -106, 454, 419, -338, 838, 742, 286, 286, 286, 360, -338, 847, 847, 568, 286, 742, 345, 742, 178, -102, -338, 422, 838, 509, 479, 65, 838, -338, -338, 439, 838, 838, 410, 346, 19, 515, -338, 19, 445, 169, 17, 28, 366, 409, 258, -338, -338, 354, -338, 10, 838, -338, -338, -338, -338, 89, -338, 440, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, 25, -338, -338, -338, 384, -338, 66, 838, -338, 838, 294, -338, 838, 282, 98, -338, -338, -338, 180, 310, 146, 386, 467, 348, -338, -338, 643, 742, 847, -338, 461, -338, 390, 537, 403, 404, 374, -338, 395, 497, -338, -338, 338, -338, 19, 19, 515, 838, 838, -338, 401, 370, 538, -338, -338, -338, 66, 347, 411, -338, 432, 66, -338, -338, -338, -338, -338, -338, 17, -338, 412, 437, -33, -338, -338, -338, -338, 413, 400, -338, 539, 25, -338, 305, -338, 19, 304, -338, 159, 420, -338, 406, -338, 426, 425, 115, -12, 838, 838, 66, -338, -338, 847, 689, 429, 431, 527, 163, -338, 422, -338, 423, 838, -338, 456, -338, -338, -338, -338, 19, 19, 496, 17, -4, -338, -338, -338, 430, 435, 438, 441, 10, 366, -338, -338, 444, 838, -338, -338, -338, 447, 227, -338, 436, -338, -338, -338, -338, -338, 146, 146, 505, 489, 552, 455, 407, -338, 483, 424, -338, 689, -338, -338, 838, 66, -338, 537, 838, 457, 463, 395, 9, 538, 592, 585, 586, 838, 838, 460, 465, -338, -338, 78, 274, -338, 838, 468, -338, 512, -338, 552, 552, 66, -338, 838, 469, 146, 838, -338, 66, 472, 164, 484, 493, -338, -338, 485, 18, -338, -338, -338, -338, 458, -338, -338, -338, -338, -338, 614, 615, 172, 491, 838, 66, -338, -338, -338, 181, -338, 66, -338, 469, 469, -338, 19, 487, -338, 552, 19, -338, 66, -338, -338, 574, 410, 434, -121, -338, -338, -338, 161, -338, 498, 506, 161, 169, -338, -338, 66, 469, 508, 838, -41, -338, 434, -338, 572, -338, -338, 512, -338, -3, 511, -338, -338, -338, -338, -338, -338, -338, 635, -338, -338, -338, 300, 203, 277, -338, -338, 629, 576, 648, -338, -338, 238, 269, 269, -338, -338, -338, 554, 565, -338, -338, -338, 567, -338, -338, -338, 138, 644, -338, -338, -338, 565, -26, -338, 738, -338, -338, -338, -338, -338, -338, 605, -338, -338, -338}; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. Performed when YYTABLE does not specify something else to do. Zero means the default is an error. */ static const yytype_uint16 yydefact[] = { 112, 0, 0, 246, 112, 147, 0, 0, 2, 0, 5, 6, 10, 7, 21, 20, 0, 11, 12, 13, 14, 15, 16, 17, 18, 9, 8, 0, 348, 110, 113, 0, 350, 252, 0, 258, 347, 347, 0, 245, 0, 0, 0, 0, 0, 352, 0, 354, 353, 0, 150, 0, 0, 0, 1, 112, 119, 0, 100, 25, 111, 0, 0, 0, 116, 258, 0, 0, 257, 0, 0, 0, 156, 347, 23, 22, 0, 169, 147, 0, 0, 0, 345, 0, 0, 3, 118, 117, 365, 0, 0, 93, 30, 28, 29, 0, 114, 112, 0, 351, 78, 0, 349, 0, 346, 177, 356, 176, 165, 165, 172, 154, 155, 0, 170, 171, 0, 150, 145, 146, 144, 0, 0, 0, 0, 0, 0, 0, 202, 0, 339, 0, 339, 339, 205, 19, 200, 0, 333, 284, 332, 364, 365, 0, 0, 112, 0, 283, 336, 337, 331, 32, 33, 258, 259, 263, 267, 268, 269, 264, 262, 270, 260, 261, 273, 285, 271, 272, 266, 277, 328, 329, 330, 334, 335, 351, 276, 0, 0, 258, 365, 365, 24, 92, 26, 0, 251, 0, 0, 0, 64, 253, 0, 174, 175, 178, 164, 0, 0, 176, 168, 166, 167, 0, 0, 148, 149, 252, 0, 127, 0, 204, 206, 207, 0, 338, 0, 203, 0, 0, 0, 0, 278, 279, 365, 0, 0, 310, 365, 0, 0, 0, 365, 81, 64, 31, 365, 365, 91, 0, 0, 0, 0, 358, 359, 362, 361, 0, 364, 363, 0, 0, 0, 0, 360, 280, 0, 0, 0, 304, 0, 252, 99, 104, 109, 94, 115, 79, 64, 0, 365, 100, 63, 0, 365, 158, 157, 159, 162, 161, 160, 163, 173, 0, 0, 0, 344, 165, 0, 165, 143, 126, 128, 0, 201, 199, 198, 0, 196, 0, 0, 0, 0, 295, 365, 311, 0, 325, 321, 324, 322, 323, 320, 0, 274, 265, 0, 66, 0, 60, 290, 289, 365, 314, 315, 316, 318, 0, 281, 0, 0, 0, 317, 287, 0, 313, 286, 0, 303, 306, 365, 112, 188, 112, 365, 107, 108, 103, 365, 365, 100, 0, 65, 98, 254, 255, 0, 252, 112, 0, 400, 208, 0, 142, 141, 0, 139, 0, 365, 379, 389, 397, 375, 0, 374, 393, 382, 396, 387, 373, 385, 390, 377, 392, 395, 386, 381, 398, 376, 388, 378, 380, 391, 212, 368, 369, 370, 372, 367, 0, 365, 294, 365, 0, 326, 365, 0, 89, 82, 83, 80, 81, 350, 258, 0, 0, 35, 90, 282, 0, 288, 0, 327, 112, 293, 0, 309, 0, 0, 0, 179, 0, 0, 180, 105, 0, 106, 95, 96, 98, 365, 365, 195, 0, 0, 250, 132, 131, 130, 0, 0, 0, 399, 401, 0, 138, 137, 136, 134, 133, 135, 112, 129, 0, 191, 109, 384, 383, 394, 222, 0, 0, 210, 219, 213, 215, 0, 197, 312, 0, 297, 0, 0, 88, 85, 87, 0, 0, 0, 73, 365, 365, 0, 27, 34, 0, 298, 0, 0, 0, 0, 301, 306, 300, 190, 365, 182, 183, 181, 102, 101, 194, 256, 97, 0, 112, 0, 124, 366, 244, 0, 0, 0, 0, 127, 0, 209, 120, 153, 365, 193, 220, 221, 0, 217, 214, 0, 296, 319, 275, 86, 84, 258, 258, 0, 0, 75, 0, 62, 36, 37, 0, 40, 299, 291, 292, 365, 58, 308, 309, 365, 0, 0, 0, 112, 250, 0, 0, 0, 365, 365, 0, 0, 121, 402, 0, 156, 192, 365, 0, 211, 0, 371, 75, 75, 0, 72, 365, 77, 258, 365, 59, 0, 0, 0, 0, 43, 57, 302, 0, 0, 185, 184, 340, 343, 0, 342, 341, 123, 125, 247, 0, 0, 0, 0, 365, 0, 152, 151, 122, 0, 224, 0, 216, 77, 77, 71, 74, 0, 67, 75, 61, 38, 58, 305, 307, 0, 100, 0, 0, 186, 249, 248, 409, 404, 0, 0, 409, 252, 69, 70, 0, 77, 0, 365, 46, 189, 0, 407, 0, 405, 403, 0, 218, 227, 0, 68, 39, 42, 47, 48, 49, 41, 365, 187, 408, 406, 0, 0, 240, 226, 76, 0, 0, 365, 44, 50, 0, 0, 0, 230, 228, 229, 0, 243, 223, 51, 56, 0, 54, 55, 236, 0, 0, 235, 231, 232, 243, 0, 238, 365, 234, 233, 237, 239, 241, 242, 0, 45, 52, 53}; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { -338, -338, 617, -338, -338, 109, 112, -91, 674, 7, 589, -338, -338, -338, -338, -338, -338, 88, -338, 186, 48, -338, -338, -338, 5, -338, -25, -338, -338, -338, -44, -264, -338, 279, -338, -278, -283, -182, -338, -338, -338, -137, -338, -338, 252, -258, -338, 350, -338, 228, 2, 205, -338, -338, -338, -338, -338, -338, -338, 171, 330, -338, -338, -338, 620, 582, -338, 124, -338, 619, -94, -338, 631, -338, -338, -338, 513, -338, -338, 143, -338, 145, -338, -338, -338, -337, -338, 149, -338, -338, 261, 500, -338, 242, -338, -338, -338, -338, 60, -338, -338, -338, 35, -338, 20, -338, 720, 165, -190, -179, -338, -55, -74, -103, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, 224, 170, 156, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -241, -338, 276, -338, -338, 22, -1, -338, 1, -59, -338, -93, 414, -338, 580, -338, 329, -338, -338, -338, -338, -338, -338, 212, -338, 91}; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { -1, 7, 8, 9, 10, 11, 12, 13, 14, 15, 58, 59, 95, 234, 151, 493, 494, 549, 550, 551, 595, 637, 672, 673, 685, 718, 686, 596, 416, 591, 271, 272, 235, 317, 546, 588, 629, 98, 318, 410, 486, 152, 182, 183, 442, 91, 436, 262, 263, 347, 43, 29, 30, 31, 88, 17, 18, 19, 20, 290, 291, 292, 367, 365, 50, 81, 576, 110, 111, 112, 197, 203, 76, 116, 21, 22, 195, 23, 24, 25, 342, 506, 507, 430, 561, 463, 464, 26, 135, 136, 360, 361, 472, 473, 474, 580, 534, 475, 623, 581, 679, 680, 705, 695, 709, 450, 40, 517, 64, 190, 191, 67, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 340, 426, 501, 226, 227, 165, 166, 313, 167, 168, 169, 170, 171, 172, 173, 174, 216, 608, 124, 70, 175, 68, 33, 176, 52, 107, 177, 257, 178, 519, 393, 394, 395, 396, 397, 398, 451, 452, 453, 660}; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule whose number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { 32, 32, 16, 35, 100, 267, 185, 269, 231, 268, 101, 42, 334, 353, 307, 198, -4, 285, 92, 287, 287, -140, 566, 1, 236, 715, 32, 1, 27, 207, 1, 1, 189, 32, 222, 65, 236, 32, 223, 72, 86, 236, 677, 77, 192, 446, 338, 411, 669, 308, 327, 423, 32, 53, 84, 34, 309, 16, 200, 71, 32, 56, 99, 237, 36, 102, 469, 54, 225, 77, 106, 343, 447, 201, 470, 237, 236, 275, 28, 1, 237, 544, 32, 93, 125, 37, 38, 345, 32, 545, 179, 306, 439, 28, 354, 113, 2, 28, 238, 670, 2, 236, 99, 2, 193, 639, 264, 265, 328, 87, 28, 214, 32, 567, 199, 237, 671, 431, 223, 339, 310, 106, 276, 32, 261, 209, 471, 3, 100, 192, 100, 3, 126, 366, 3, 678, 323, 324, 325, 326, 237, 716, 127, 448, 407, 28, 202, 331, 332, 333, 301, 44, 230, 335, 336, 45, 346, 295, 316, 407, 66, 299, 320, 321, 288, 406, 4, 444, 57, 4, 4, 46, 432, -355, 194, 568, 311, 5, 215, 47, 5, 94, 289, 289, -140, 417, 99, 99, 99, 39, 319, 357, 577, 359, 1, 362, 352, 6, 466, 312, 355, 6, 277, 427, 6, 55, 483, 617, 690, 32, 224, 293, 215, 640, 192, 99, 236, 297, 32, 99, 298, 236, 128, 599, 350, 484, 419, 420, 129, 236, 403, 691, 60, 614, 236, 536, 408, -246, 236, 245, 278, 658, 48, 467, 49, 711, 130, 618, -112, 692, 131, 408, 246, 118, 279, 237, 409, 699, 543, 109, 237, 236, 659, 132, 219, 28, 96, 445, 237, 348, 264, 409, 99, 237, 437, 438, 39, 237, 645, 133, 485, 61, 32, 106, 356, 455, 498, 297, 369, 249, 579, 456, 280, 370, 465, 236, 457, 712, 349, -366, 237, 119, 538, 371, 700, 624, 625, 634, -366, 400, 62, -366, 372, 373, 374, 643, 557, 412, 496, 413, 243, 114, 63, 120, 647, 244, 478, 66, 479, 375, 458, 481, 69, 701, 237, 376, 32, -225, 424, 363, 477, 649, 650, 253, 73, 115, 281, 245, 428, 377, 433, 236, 652, 547, 548, 509, 254, 378, 489, 702, 246, 236, 28, 247, 364, 459, 512, 513, 562, 666, 527, 460, 379, 520, 656, 480, 205, 380, 693, 655, 694, 302, 510, 305, 703, 537, 381, 688, 521, 206, 237, 382, 553, 674, 303, 383, 522, 249, 99, 401, 237, 304, 689, 704, 108, 109, 402, 329, 218, 220, 523, 74, 56, 330, 384, 75, 79, 80, 487, 82, 78, 83, 89, -366, 565, 90, 97, 385, 386, 387, 497, 103, 49, 104, 646, 121, 388, 122, 180, 123, 181, 187, 389, 188, 208, 196, 186, 210, 518, 212, 213, 253, 215, 297, 211, 465, 217, 228, 664, 229, 657, 232, 239, -357, 254, 233, 255, 260, 390, 665, 259, 266, 240, 391, 392, 1, 270, 273, 283, 284, 274, 241, 594, 286, 242, 294, 465, 583, 584, 224, 322, 552, 314, 243, 315, 613, 465, 344, 244, 552, 137, 138, 148, 337, 620, 341, 358, 351, 368, 330, 399, 405, 404, 627, 415, 237, 631, 668, 422, 418, 245, 425, 139, 1, 429, 435, 626, 441, 443, 449, 454, 440, 140, 246, 630, 461, 247, 476, 468, 490, 491, 465, 492, 499, 500, 504, 502, 503, 505, 508, 514, 515, 516, 525, 524, 528, 597, 100, 529, 532, 248, 531, 141, 539, 540, 533, 605, 541, 542, 556, 249, 239, 554, 142, 555, 564, 560, 563, 585, 582, 192, 240, 586, 569, 99, 143, 571, 144, 570, 572, 241, 552, 100, 242, 575, 250, 251, 587, 589, 687, 578, 252, 243, 590, 592, 593, 601, 244, 610, 600, 687, 611, 612, 615, 145, 99, 621, 146, 616, 628, 147, 32, 622, 648, 253, 633, 636, 635, 638, 245, 641, 642, 597, 57, 644, -365, 687, 254, 99, 255, 651, 661, 246, -365, 256, 247, 239, 654, 696, 662, 99, 667, 675, 682, 681, 697, 240, 707, 148, 149, 28, 150, 708, 710, 421, 241, 682, 713, 242, 300, 683, 720, 85, 603, 137, 138, 604, 243, 41, 249, 632, 653, 244, 683, 184, 719, 558, 137, 138, 698, 488, 511, 239, 530, 434, 573, 139, 462, 117, 204, 619, 105, 240, 134, 245, 251, 140, 606, 602, 139, 252, 241, 282, 607, 242, 526, 535, 246, 296, 140, 247, 239, 676, 243, 706, 51, 559, 714, 244, 598, 609, 240, 414, 253, 258, 482, 141, 574, 663, 495, 241, 0, 0, 242, 300, -366, 254, 142, 255, 141, 245, 0, 243, 256, 249, 240, 717, 244, 0, 143, 142, 144, 0, 246, 241, 0, 247, 242, 0, 0, 0, 684, 143, 683, 144, 0, 243, 137, 138, 245, 251, 244, 0, 0, 0, 252, 0, 0, 145, 0, 300, 146, 246, 0, 147, 247, 0, 0, 0, 139, 249, 145, 0, 245, 146, 0, 0, 147, 253, 140, 0, 0, 0, 0, 0, 0, 246, 0, 0, 247, 0, 254, 0, 255, 0, 0, 251, 0, 256, 249, 0, 252, 148, 149, 28, 150, 0, 0, 0, 141, 0, 0, 0, 137, 138, 148, 149, 28, 150, 0, 142, 0, 0, 249, 253, 251, 0, 0, 0, 0, 252, 0, 143, 0, 144, 139, 0, 254, 0, 255, 0, 0, 0, 0, 256, 140, 0, 137, 138, 251, 0, 0, 0, 253, -366, 0, 137, 138, 0, 0, 0, 145, 0, 0, 146, 0, 254, 147, 255, 139, 0, 0, 0, 256, 0, 141, 0, 253, 139, 140, 0, 0, 0, 0, 0, 0, 142, 0, 140, 0, 254, 0, 255, 0, 0, 0, 0, -366, 143, 0, 144, 0, 0, 0, 0, 148, 149, 28, 150, 141, 0, 0, 0, 0, 0, 0, 0, 0, 221, 0, 142, 0, 0, 0, 0, 0, 0, 145, 0, 142, 146, 0, 143, 147, 144, 0, 0, 0, 0, 0, 224, 143, 0, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145, 0, 0, 146, 0, 0, 147, 0, 0, 145, 148, 149, 28, 150, 0, 147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 148, 149, 28, 150, 0, 0, 0, 0, 0, 148, 149, 28, 150}; static const yytype_int16 yycheck[] = { 1, 2, 0, 2, 63, 187, 97, 189, 145, 188, 65, 4, 253, 271, 8, 109, 0, 207, 20, 9, 9, 9, 26, 14, 57, 51, 27, 14, 82, 122, 14, 14, 153, 34, 137, 34, 57, 38, 141, 38, 70, 57, 45, 44, 103, 17, 70, 153, 89, 43, 101, 153, 53, 123, 53, 144, 50, 55, 87, 37, 61, 68, 63, 96, 37, 66, 41, 0, 142, 70, 71, 261, 44, 102, 49, 96, 57, 62, 199, 14, 96, 93, 83, 85, 83, 58, 59, 120, 89, 101, 89, 228, 350, 199, 273, 73, 87, 199, 153, 140, 87, 57, 103, 87, 64, 87, 180, 181, 159, 139, 199, 49, 113, 117, 113, 96, 157, 52, 221, 143, 114, 122, 107, 124, 179, 124, 101, 118, 187, 188, 189, 118, 4, 121, 118, 138, 239, 240, 241, 242, 96, 167, 14, 115, 29, 199, 175, 250, 251, 252, 224, 37, 145, 256, 257, 41, 189, 216, 232, 29, 181, 220, 236, 237, 153, 181, 153, 357, 175, 153, 153, 57, 107, 59, 134, 179, 170, 164, 116, 65, 164, 183, 172, 172, 172, 322, 187, 188, 189, 162, 234, 284, 529, 287, 14, 289, 270, 188, 109, 193, 274, 188, 187, 340, 188, 10, 108, 129, 5, 210, 166, 210, 116, 195, 273, 216, 57, 218, 219, 220, 219, 57, 94, 560, 268, 127, 329, 330, 100, 57, 304, 28, 27, 570, 57, 476, 121, 123, 57, 61, 55, 80, 128, 154, 130, 107, 118, 169, 68, 46, 122, 121, 74, 36, 69, 96, 141, 19, 143, 131, 96, 57, 101, 135, 168, 199, 61, 358, 96, 92, 344, 141, 273, 96, 348, 349, 162, 96, 615, 151, 182, 121, 283, 284, 283, 27, 423, 288, 6, 111, 63, 33, 107, 11, 368, 57, 38, 159, 121, 13, 96, 84, 143, 21, 66, 583, 584, 143, 22, 105, 181, 25, 30, 31, 32, 143, 153, 318, 421, 318, 34, 24, 153, 106, 143, 39, 400, 181, 402, 47, 72, 405, 125, 64, 96, 53, 337, 110, 337, 119, 399, 624, 625, 165, 123, 48, 161, 61, 341, 67, 343, 57, 630, 490, 491, 17, 178, 75, 413, 90, 74, 57, 199, 77, 144, 107, 440, 441, 505, 652, 461, 113, 90, 26, 638, 81, 78, 95, 101, 637, 103, 225, 44, 227, 115, 81, 104, 87, 41, 91, 96, 109, 495, 657, 81, 113, 49, 111, 399, 81, 96, 88, 102, 134, 130, 131, 88, 136, 132, 133, 63, 143, 68, 142, 132, 143, 185, 54, 411, 123, 119, 59, 177, 137, 515, 15, 153, 145, 146, 147, 423, 90, 130, 174, 616, 76, 154, 58, 73, 125, 12, 121, 160, 90, 101, 185, 143, 45, 449, 56, 56, 165, 116, 454, 176, 529, 176, 165, 648, 153, 639, 153, 3, 153, 178, 190, 180, 174, 186, 651, 153, 143, 13, 191, 192, 14, 42, 121, 45, 58, 185, 22, 556, 174, 25, 148, 560, 542, 543, 166, 121, 492, 143, 34, 143, 569, 570, 121, 39, 500, 39, 40, 197, 184, 578, 153, 181, 143, 153, 142, 168, 190, 173, 587, 60, 96, 590, 654, 173, 159, 61, 99, 61, 14, 45, 86, 585, 12, 83, 163, 121, 185, 71, 74, 589, 181, 77, 153, 98, 153, 73, 615, 194, 153, 7, 171, 143, 143, 153, 52, 149, 181, 14, 121, 143, 143, 557, 616, 121, 159, 101, 148, 101, 143, 158, 26, 564, 141, 143, 42, 111, 3, 143, 112, 143, 79, 153, 121, 73, 143, 639, 13, 93, 153, 585, 124, 148, 126, 153, 148, 22, 592, 651, 25, 150, 136, 137, 45, 143, 673, 153, 142, 34, 196, 121, 181, 143, 39, 16, 152, 684, 26, 26, 153, 153, 616, 148, 156, 153, 150, 159, 622, 110, 622, 165, 153, 133, 143, 143, 61, 16, 16, 633, 175, 143, 174, 710, 178, 639, 180, 153, 143, 74, 184, 185, 77, 3, 73, 19, 143, 651, 143, 80, 18, 143, 79, 13, 103, 197, 198, 199, 200, 97, 96, 96, 22, 18, 23, 25, 101, 35, 66, 55, 564, 39, 40, 564, 34, 4, 111, 592, 633, 39, 35, 95, 710, 500, 39, 40, 684, 411, 439, 3, 465, 344, 524, 61, 367, 78, 117, 576, 70, 13, 84, 61, 137, 71, 564, 563, 61, 142, 22, 199, 564, 25, 454, 474, 74, 218, 71, 77, 3, 662, 34, 689, 5, 502, 707, 39, 559, 565, 13, 318, 165, 154, 406, 101, 525, 647, 96, 22, -1, -1, 25, 101, 3, 178, 112, 180, 101, 61, -1, 34, 185, 111, 13, 18, 39, -1, 124, 112, 126, -1, 74, 22, -1, 77, 25, -1, -1, -1, 136, 124, 35, 126, -1, 34, 39, 40, 61, 137, 39, -1, -1, -1, 142, -1, -1, 153, -1, 101, 156, 74, -1, 159, 77, -1, -1, -1, 61, 111, 153, -1, 61, 156, -1, -1, 159, 165, 71, -1, -1, -1, -1, -1, -1, 74, -1, -1, 77, -1, 178, -1, 180, -1, -1, 137, -1, 185, 111, -1, 142, 197, 198, 199, 200, -1, -1, -1, 101, -1, -1, -1, 39, 40, 197, 198, 199, 200, -1, 112, -1, -1, 111, 165, 137, -1, -1, -1, -1, 142, -1, 124, -1, 126, 61, -1, 178, -1, 180, -1, -1, -1, -1, 185, 71, -1, 39, 40, 137, -1, -1, -1, 165, 142, -1, 39, 40, -1, -1, -1, 153, -1, -1, 156, -1, 178, 159, 180, 61, -1, -1, -1, 185, -1, 101, -1, 165, 61, 71, -1, -1, -1, -1, -1, -1, 112, -1, 71, -1, 178, -1, 180, -1, -1, -1, -1, 185, 124, -1, 126, -1, -1, -1, -1, 197, 198, 199, 200, 101, -1, -1, -1, -1, -1, -1, -1, -1, 101, -1, 112, -1, -1, -1, -1, -1, -1, 153, -1, 112, 156, -1, 124, 159, 126, -1, -1, -1, -1, -1, 166, 124, -1, 126, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 153, -1, -1, 156, -1, -1, 159, -1, -1, 153, 197, 198, 199, 200, -1, 159, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 197, 198, 199, 200, -1, -1, -1, -1, -1, 197, 198, 199, 200}; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint16 yystos[] = { 0, 14, 87, 118, 153, 164, 188, 202, 203, 204, 205, 206, 207, 208, 209, 210, 251, 256, 257, 258, 259, 275, 276, 278, 279, 280, 288, 82, 199, 252, 253, 254, 345, 347, 144, 347, 37, 58, 59, 162, 307, 209, 210, 251, 37, 41, 57, 65, 128, 130, 265, 307, 349, 123, 0, 10, 68, 175, 211, 212, 252, 121, 181, 153, 309, 347, 181, 312, 346, 125, 344, 344, 347, 123, 143, 143, 273, 345, 119, 185, 54, 266, 123, 59, 347, 203, 70, 139, 255, 177, 15, 246, 20, 85, 183, 213, 252, 153, 238, 345, 348, 312, 345, 90, 174, 273, 345, 350, 130, 131, 268, 269, 270, 344, 24, 48, 274, 265, 36, 84, 106, 76, 58, 125, 343, 347, 4, 14, 94, 100, 118, 122, 135, 151, 270, 289, 290, 39, 40, 61, 71, 101, 112, 124, 126, 153, 156, 159, 197, 198, 200, 215, 242, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 330, 331, 333, 334, 335, 336, 337, 338, 339, 340, 345, 348, 351, 353, 347, 73, 12, 243, 244, 211, 208, 143, 121, 90, 153, 310, 311, 348, 64, 134, 277, 185, 271, 271, 347, 87, 102, 175, 272, 266, 78, 91, 350, 101, 347, 45, 176, 56, 56, 49, 116, 341, 176, 341, 168, 341, 101, 314, 314, 166, 313, 328, 329, 165, 153, 210, 242, 153, 190, 214, 233, 57, 96, 312, 3, 13, 22, 25, 34, 39, 61, 74, 77, 101, 111, 136, 137, 142, 165, 178, 180, 185, 352, 353, 153, 174, 312, 248, 249, 313, 313, 143, 238, 310, 238, 42, 231, 232, 121, 185, 62, 107, 187, 55, 69, 107, 161, 277, 45, 58, 309, 174, 9, 153, 172, 260, 261, 262, 347, 148, 348, 292, 345, 347, 348, 101, 313, 328, 81, 88, 328, 242, 8, 43, 50, 114, 170, 193, 332, 143, 143, 313, 234, 239, 231, 313, 313, 121, 314, 314, 314, 314, 101, 159, 136, 142, 314, 314, 314, 339, 314, 314, 184, 70, 143, 325, 153, 281, 309, 121, 120, 189, 250, 92, 121, 231, 143, 313, 246, 310, 313, 347, 350, 181, 271, 291, 292, 271, 119, 144, 264, 121, 263, 153, 6, 11, 21, 30, 31, 32, 47, 53, 67, 75, 90, 95, 104, 109, 113, 132, 145, 146, 147, 154, 160, 186, 191, 192, 355, 356, 357, 358, 359, 360, 168, 105, 81, 88, 313, 173, 190, 181, 29, 121, 141, 240, 153, 345, 347, 351, 60, 229, 242, 159, 314, 314, 96, 173, 153, 347, 99, 326, 242, 210, 45, 284, 52, 107, 210, 248, 86, 247, 313, 313, 246, 185, 12, 245, 83, 309, 208, 17, 44, 115, 163, 306, 361, 362, 363, 121, 27, 33, 38, 72, 107, 113, 181, 261, 286, 287, 313, 109, 154, 98, 41, 49, 101, 293, 294, 295, 298, 153, 348, 313, 313, 81, 313, 355, 108, 127, 182, 241, 210, 234, 312, 153, 73, 194, 216, 217, 96, 314, 210, 242, 153, 7, 327, 143, 143, 171, 153, 282, 283, 52, 17, 44, 245, 313, 313, 149, 181, 14, 308, 345, 354, 26, 41, 49, 63, 143, 121, 291, 208, 143, 121, 250, 148, 159, 26, 297, 294, 339, 81, 143, 143, 158, 141, 143, 143, 93, 101, 235, 242, 242, 218, 219, 220, 345, 314, 143, 143, 42, 153, 220, 326, 153, 285, 242, 121, 79, 208, 26, 117, 179, 153, 153, 148, 148, 260, 362, 150, 267, 286, 153, 63, 296, 300, 143, 312, 312, 73, 93, 45, 236, 143, 196, 230, 121, 181, 313, 221, 228, 345, 327, 286, 152, 143, 282, 206, 207, 251, 280, 288, 342, 308, 16, 26, 26, 313, 286, 153, 153, 129, 169, 268, 313, 148, 110, 299, 236, 236, 348, 313, 150, 237, 312, 313, 218, 153, 143, 143, 133, 222, 143, 87, 195, 16, 16, 143, 143, 286, 238, 143, 347, 237, 237, 153, 236, 221, 73, 246, 232, 310, 80, 101, 364, 143, 143, 364, 309, 238, 237, 143, 242, 89, 140, 157, 223, 224, 232, 80, 299, 45, 138, 301, 302, 143, 18, 35, 136, 225, 227, 313, 87, 102, 5, 28, 46, 101, 103, 304, 19, 79, 225, 19, 66, 64, 90, 115, 134, 303, 303, 103, 97, 305, 96, 107, 159, 23, 305, 51, 167, 18, 226, 227, 66}; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint16 yyr1[] = { 0, 201, 202, 203, 203, 204, 204, 204, 204, 204, 204, 205, 205, 205, 205, 206, 206, 206, 206, 207, 208, 208, 209, 209, 210, 211, 211, 212, 213, 213, 213, 214, 214, 215, 216, 216, 217, 218, 218, 219, 220, 221, 222, 222, 223, 223, 223, 224, 224, 224, 225, 225, 226, 226, 227, 227, 227, 228, 228, 229, 229, 230, 230, 231, 231, 232, 233, 234, 234, 234, 234, 235, 235, 235, 236, 236, 237, 237, 238, 238, 239, 239, 240, 240, 240, 241, 241, 241, 241, 241, 242, 242, 243, 243, 244, 244, 244, 245, 245, 246, 246, 247, 247, 247, 248, 248, 249, 250, 250, 250, 251, 251, 251, 252, 252, 253, 254, 255, 255, 255, 256, 256, 257, 258, 259, 259, 260, 260, 261, 261, 262, 262, 262, 262, 262, 262, 262, 262, 262, 263, 263, 264, 264, 264, 265, 265, 265, 265, 266, 266, 266, 267, 267, 267, 268, 268, 268, 269, 269, 269, 270, 270, 270, 270, 271, 271, 272, 272, 272, 273, 274, 274, 275, 276, 277, 277, 277, 278, 279, 280, 281, 281, 281, 282, 282, 283, 284, 284, 284, 285, 285, 286, 286, 287, 288, 288, 289, 289, 289, 289, 289, 290, 290, 290, 290, 290, 290, 290, 291, 291, 292, 293, 293, 294, 294, 295, 296, 296, 297, 297, 298, 298, 298, 299, 300, 300, 301, 301, 302, 302, 302, 302, 302, 303, 303, 303, 303, 303, 304, 304, 304, 305, 305, 305, 306, 307, 307, 308, 308, 308, 308, 309, 309, 310, 310, 311, 311, 312, 312, 313, 313, 313, 313, 313, 313, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 315, 316, 316, 317, 317, 317, 317, 317, 317, 317, 318, 318, 318, 318, 319, 319, 320, 320, 320, 321, 321, 321, 321, 322, 322, 323, 324, 324, 325, 325, 326, 326, 327, 327, 327, 328, 328, 329, 330, 330, 330, 330, 330, 330, 331, 332, 332, 332, 332, 332, 332, 333, 334, 335, 335, 335, 336, 337, 337, 338, 338, 339, 340, 341, 341, 342, 342, 342, 342, 343, 343, 344, 344, 345, 346, 347, 348, 349, 349, 349, 349, 350, 351, 352, 352, 352, 352, 352, 352, 353, 353, 354, 355, 355, 356, 356, 357, 358, 358, 358, 358, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 361, 361, 362, 362, 363, 363, 363, 363, 364, 364, 364}; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { 0, 2, 1, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 3, 3, 4, 1, 3, 7, 1, 1, 1, 1, 0, 1, 1, 0, 2, 1, 3, 5, 1, 4, 3, 0, 2, 5, 0, 1, 1, 1, 1, 2, 1, 2, 2, 2, 2, 1, 0, 4, 0, 2, 0, 1, 0, 2, 2, 6, 8, 7, 7, 3, 2, 0, 2, 0, 4, 0, 1, 3, 2, 0, 1, 1, 3, 1, 2, 1, 1, 0, 4, 2, 1, 0, 2, 4, 4, 2, 0, 3, 0, 2, 2, 0, 1, 3, 3, 1, 1, 0, 2, 3, 0, 1, 3, 5, 2, 1, 1, 0, 9, 10, 11, 11, 9, 11, 1, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0, 1, 1, 0, 3, 3, 3, 0, 3, 3, 0, 2, 2, 0, 1, 1, 0, 3, 3, 3, 3, 3, 3, 3, 1, 0, 1, 1, 1, 1, 1, 1, 4, 6, 1, 1, 0, 4, 5, 7, 2, 3, 3, 1, 3, 3, 5, 7, 0, 4, 0, 1, 3, 2, 9, 8, 3, 5, 3, 3, 1, 3, 1, 2, 2, 1, 2, 2, 1, 3, 3, 3, 0, 1, 2, 1, 2, 0, 5, 0, 2, 2, 1, 5, 2, 0, 1, 0, 2, 2, 2, 3, 3, 2, 2, 1, 1, 2, 2, 3, 0, 2, 2, 0, 2, 1, 0, 3, 4, 4, 0, 3, 0, 1, 3, 3, 5, 1, 0, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 3, 6, 1, 1, 2, 2, 2, 3, 4, 1, 1, 1, 3, 3, 4, 3, 3, 6, 6, 4, 4, 3, 6, 5, 5, 6, 5, 5, 7, 1, 0, 5, 0, 4, 2, 0, 1, 2, 4, 3, 3, 3, 3, 3, 3, 6, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 3, 0, 2, 0, 1, 2, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 0, 1, 3, 6, 5, 6, 7, 1, 2, 0}; #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) #define YYEMPTY (-2) #define YYEOF 0 #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrorlab #define YYRECOVERING() (!!yyerrstatus) #define YYBACKUP(Token, Value) \ do \ if (yychar == YYEMPTY) { \ yychar = (Token); \ yylval = (Value); \ YYPOPSTACK(yylen); \ yystate = *yyssp; \ goto yybackup; \ } else { \ yyerror(&yylloc, result, scanner, YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (0) /* Error token number */ #define YYTERROR 1 #define YYERRCODE 256 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. If N is 0, then set CURRENT to the empty location which ends the previous symbol: RHS[0] (always defined). */ #ifndef YYLLOC_DEFAULT #define YYLLOC_DEFAULT(Current, Rhs, N) \ do \ if (N) { \ (Current).first_line = YYRHSLOC(Rhs, 1).first_line; \ (Current).first_column = YYRHSLOC(Rhs, 1).first_column; \ (Current).last_line = YYRHSLOC(Rhs, N).last_line; \ (Current).last_column = YYRHSLOC(Rhs, N).last_column; \ } else { \ (Current).first_line = (Current).last_line = YYRHSLOC(Rhs, 0).last_line; \ (Current).first_column = (Current).last_column = \ YYRHSLOC(Rhs, 0).last_column; \ } \ while (0) #endif #define YYRHSLOC(Rhs, K) ((Rhs)[K]) /* Enable debugging if requested. */ #if FF_DEBUG #ifndef YYFPRINTF #include /* INFRINGES ON USER NAME SPACE */ #define YYFPRINTF fprintf #endif #define YYDPRINTF(Args) \ do { \ if (yydebug) YYFPRINTF Args; \ } while (0) /* YY_LOCATION_PRINT -- Print the location on the stream. This macro was not mandated originally: define only if we know we won't break user code: when these are the locations we know. */ #ifndef YY_LOCATION_PRINT #if defined FF_LTYPE_IS_TRIVIAL && FF_LTYPE_IS_TRIVIAL /* Print *YYLOCP on YYO. Private, do not rely on its existence. */ YY_ATTRIBUTE_UNUSED static int yy_location_print_(FILE *yyo, YYLTYPE const *const yylocp) { int res = 0; int end_col = 0 != yylocp->last_column ? yylocp->last_column - 1 : 0; if (0 <= yylocp->first_line) { res += YYFPRINTF(yyo, "%d", yylocp->first_line); if (0 <= yylocp->first_column) res += YYFPRINTF(yyo, ".%d", yylocp->first_column); } if (0 <= yylocp->last_line) { if (yylocp->first_line < yylocp->last_line) { res += YYFPRINTF(yyo, "-%d", yylocp->last_line); if (0 <= end_col) res += YYFPRINTF(yyo, ".%d", end_col); } else if (0 <= end_col && yylocp->first_column < end_col) res += YYFPRINTF(yyo, "-%d", end_col); } return res; } #define YY_LOCATION_PRINT(File, Loc) yy_location_print_(File, &(Loc)) #else #define YY_LOCATION_PRINT(File, Loc) ((void)0) #endif #endif #define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ do { \ if (yydebug) { \ YYFPRINTF(stderr, "%s ", Title); \ yy_symbol_print(stderr, Type, Value, Location, result, scanner); \ YYFPRINTF(stderr, "\n"); \ } \ } while (0) /*-----------------------------------. | Print this symbol's value on YYO. | `-----------------------------------*/ static void yy_symbol_value_print(FILE *yyo, int yytype, YYSTYPE const *const yyvaluep, YYLTYPE const *const yylocationp, Program *result, yyscan_t scanner) { FILE *yyoutput = yyo; YYUSE(yyoutput); YYUSE(yylocationp); YYUSE(result); YYUSE(scanner); if (!yyvaluep) return; #ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT(yyo, yytoknum[yytype], *yyvaluep); #endif YYUSE(yytype); } /*---------------------------. | Print this symbol on YYO. | `---------------------------*/ static void yy_symbol_print(FILE *yyo, int yytype, YYSTYPE const *const yyvaluep, YYLTYPE const *const yylocationp, Program *result, yyscan_t scanner) { YYFPRINTF(yyo, "%s %s (", yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]); YY_LOCATION_PRINT(yyo, *yylocationp); YYFPRINTF(yyo, ": "); yy_symbol_value_print(yyo, yytype, yyvaluep, yylocationp, result, scanner); YYFPRINTF(yyo, ")"); } /*------------------------------------------------------------------. | yy_stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ static void yy_stack_print(yytype_int16 *yybottom, yytype_int16 *yytop) { YYFPRINTF(stderr, "Stack now"); for (; yybottom <= yytop; yybottom++) { int yybot = *yybottom; YYFPRINTF(stderr, " %d", yybot); } YYFPRINTF(stderr, "\n"); } #define YY_STACK_PRINT(Bottom, Top) \ do { \ if (yydebug) yy_stack_print((Bottom), (Top)); \ } while (0) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ static void yy_reduce_print(yytype_int16 *yyssp, YYSTYPE *yyvsp, YYLTYPE *yylsp, int yyrule, Program *result, yyscan_t scanner) { unsigned long yylno = yyrline[yyrule]; int yynrhs = yyr2[yyrule]; int yyi; YYFPRINTF(stderr, "Reducing stack by rule %d (line %lu):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { YYFPRINTF(stderr, " $%d = ", yyi + 1); yy_symbol_print(stderr, yystos[yyssp[yyi + 1 - yynrhs]], &yyvsp[(yyi + 1) - (yynrhs)], &(yylsp[(yyi + 1) - (yynrhs)]), result, scanner); YYFPRINTF(stderr, "\n"); } } #define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) yy_reduce_print(yyssp, yyvsp, yylsp, Rule, result, scanner); \ } while (0) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; #else /* !FF_DEBUG */ #define YYDPRINTF(Args) #define YY_SYMBOL_PRINT(Title, Type, Value, Location) #define YY_STACK_PRINT(Bottom, Top) #define YY_REDUCE_PRINT(Rule) #endif /* !FF_DEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH #define YYINITDEPTH 200 #endif /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only if the built-in stack extension method is used). Do not make this value too large; the results are undefined if YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ #ifndef YYMAXDEPTH #define YYMAXDEPTH 10000 #endif #if YYERROR_VERBOSE #ifndef yystrlen #if defined __GLIBC__ && defined _STRING_H #define yystrlen strlen #else /* Return the length of YYSTR. */ static YYSIZE_T yystrlen(const char *yystr) { YYSIZE_T yylen; for (yylen = 0; yystr[yylen]; yylen++) continue; return yylen; } #endif #endif #ifndef yystpcpy #if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE #define yystpcpy stpcpy #else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ static char *yystpcpy(char *yydest, const char *yysrc) { char *yyd = yydest; const char *yys = yysrc; while ((*yyd++ = *yys++) != '\0') continue; return yyd - 1; } #endif #endif #ifndef yytnamerr /* Copy to YYRES the contents of YYSTR after stripping away unnecessary quotes and backslashes, so that it's suitable for yyerror. The heuristic is that double-quoting is unnecessary unless the string contains an apostrophe, a comma, or backslash (other than backslash-backslash). YYSTR is taken from yytname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ static YYSIZE_T yytnamerr(char *yyres, const char *yystr) { if (*yystr == '"') { YYSIZE_T yyn = 0; char const *yyp = yystr; for (;;) switch (*++yyp) { case '\'': case ',': goto do_not_strip_quotes; case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; else goto append; append: default: if (yyres) yyres[yyn] = *yyp; yyn++; break; case '"': if (yyres) yyres[yyn] = '\0'; return yyn; } do_not_strip_quotes:; } if (!yyres) return yystrlen(yystr); return (YYSIZE_T)(yystpcpy(yyres, yystr) - yyres); } #endif /* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message about the unexpected token YYTOKEN for the state stack whose top is YYSSP. Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is not large enough to hold the message. In that case, also set *YYMSG_ALLOC to the required number of bytes. Return 2 if the required number of bytes is too large to store. */ static int yysyntax_error(YYSIZE_T *yymsg_alloc, char **yymsg, yytype_int16 *yyssp, int yytoken) { YYSIZE_T yysize0 = yytnamerr(YY_NULLPTR, yytname[yytoken]); YYSIZE_T yysize = yysize0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; /* Internationalized format string. */ const char *yyformat = YY_NULLPTR; /* Arguments of yyformat. */ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; /* Number of reported tokens (one for the "unexpected", one per "expected"). */ int yycount = 0; /* There are many possibilities here to consider: - If this state is a consistent state with a default action, then the only way this function was invoked is if the default action is an error action. In that case, don't check for expected tokens because there are none. - The only way there can be no lookahead present (in yychar) is if this state is a consistent state with a default action. Thus, detecting the absence of a lookahead is sufficient to determine that there is no unexpected or expected token to report. In that case, just report a simple "syntax error". - Don't assume there isn't a lookahead just because this state is a consistent state with a default action. There might have been a previous inconsistent state, consistent state with a non-default action, or user semantic action that manipulated yychar. - Of course, the expected token list depends on states to have correct lookahead information, and it depends on the parser not to perform extra reductions after fetching a lookahead from the scanner and before detecting a syntax error. Thus, state merging (from LALR or IELR) and default reductions corrupt the expected token list. However, the list is correct for canonical LR with one exception: it will still contain any token that will not be accepted due to an error action in a later state. */ if (yytoken != YYEMPTY) { int yyn = yypact[*yyssp]; yyarg[yycount++] = yytname[yytoken]; if (!yypact_value_is_default(yyn)) { /* Start YYX at -YYN if negative to avoid negative indexes in YYCHECK. In other words, skip the first -YYN actions for this state because they are default actions. */ int yyxbegin = yyn < 0 ? -yyn : 0; /* Stay within bounds of both yycheck and yytname. */ int yychecklim = YYLAST - yyn + 1; int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; int yyx; for (yyx = yyxbegin; yyx < yyxend; ++yyx) if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR && !yytable_value_is_error(yytable[yyx + yyn])) { if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) { yycount = 1; yysize = yysize0; break; } yyarg[yycount++] = yytname[yyx]; { YYSIZE_T yysize1 = yysize + yytnamerr(YY_NULLPTR, yytname[yyx]); if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) yysize = yysize1; else return 2; } } } } switch (yycount) { #define YYCASE_(N, S) \ case N: \ yyformat = S; \ break default: /* Avoid compiler warnings. */ YYCASE_(0, YY_("syntax error")); YYCASE_(1, YY_("syntax error, unexpected %s")); YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); YYCASE_( 5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); #undef YYCASE_ } { YYSIZE_T yysize1 = yysize + yystrlen(yyformat); if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) yysize = yysize1; else return 2; } if (*yymsg_alloc < yysize) { *yymsg_alloc = 2 * yysize; if (!(yysize <= *yymsg_alloc && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM; return 1; } /* Avoid sprintf, as that infringes on the user's name space. Don't have undefined behavior even if the translation produced a string with the wrong number of "%s"s. */ { char *yyp = *yymsg; int yyi = 0; while ((*yyp = *yyformat) != '\0') if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount) { yyp += yytnamerr(yyp, yyarg[yyi++]); yyformat += 2; } else { yyp++; yyformat++; } } return 0; } #endif /* YYERROR_VERBOSE */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ static void yydestruct(const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocationp, Program *result, yyscan_t scanner) { YYUSE(yyvaluep); YYUSE(yylocationp); YYUSE(result); YYUSE(scanner); if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT(yymsg, yytype, yyvaluep, yylocationp); YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN switch (yytype) { case 197: /* INTLITERAL */ #line 417 "bison.y" /* yacc.c:1257 */ { } #line 2117 "bison_parser.cpp" /* yacc.c:1257 */ break; case 198: /* FLOATLITERAL */ #line 417 "bison.y" /* yacc.c:1257 */ { } #line 2125 "bison_parser.cpp" /* yacc.c:1257 */ break; case 199: /* IDENTIFIER */ #line 413 "bison.y" /* yacc.c:1257 */ { free((((*yyvaluep).sval))); } #line 2133 "bison_parser.cpp" /* yacc.c:1257 */ break; case 200: /* STRINGLITERAL */ #line 413 "bison.y" /* yacc.c:1257 */ { free((((*yyvaluep).sval))); } #line 2141 "bison_parser.cpp" /* yacc.c:1257 */ break; case 202: /* program */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).program_t) != NULL) ((*yyvaluep).program_t)->deep_delete(); } #line 2147 "bison_parser.cpp" /* yacc.c:1257 */ break; case 203: /* stmtlist */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).stmtlist_t) != NULL) ((*yyvaluep).stmtlist_t)->deep_delete(); } #line 2153 "bison_parser.cpp" /* yacc.c:1257 */ break; case 204: /* stmt */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).stmt_t) != NULL) ((*yyvaluep).stmt_t)->deep_delete(); } #line 2159 "bison_parser.cpp" /* yacc.c:1257 */ break; case 205: /* create_stmt */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).create_stmt_t) != NULL) ((*yyvaluep).create_stmt_t)->deep_delete(); } #line 2165 "bison_parser.cpp" /* yacc.c:1257 */ break; case 206: /* drop_stmt */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).drop_stmt_t) != NULL) ((*yyvaluep).drop_stmt_t)->deep_delete(); } #line 2171 "bison_parser.cpp" /* yacc.c:1257 */ break; case 207: /* alter_stmt */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).alter_stmt_t) != NULL) ((*yyvaluep).alter_stmt_t)->deep_delete(); } #line 2177 "bison_parser.cpp" /* yacc.c:1257 */ break; case 208: /* select_stmt */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).select_stmt_t) != NULL) ((*yyvaluep).select_stmt_t)->deep_delete(); } #line 2183 "bison_parser.cpp" /* yacc.c:1257 */ break; case 209: /* select_with_parens */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).select_with_parens_t) != NULL) ((*yyvaluep).select_with_parens_t)->deep_delete(); } #line 2189 "bison_parser.cpp" /* yacc.c:1257 */ break; case 210: /* select_no_parens */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).select_no_parens_t) != NULL) ((*yyvaluep).select_no_parens_t)->deep_delete(); } #line 2195 "bison_parser.cpp" /* yacc.c:1257 */ break; case 211: /* select_clause_list */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).select_clause_list_t) != NULL) ((*yyvaluep).select_clause_list_t)->deep_delete(); } #line 2201 "bison_parser.cpp" /* yacc.c:1257 */ break; case 212: /* select_clause */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).select_clause_t) != NULL) ((*yyvaluep).select_clause_t)->deep_delete(); } #line 2207 "bison_parser.cpp" /* yacc.c:1257 */ break; case 213: /* combine_clause */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).combine_clause_t) != NULL) ((*yyvaluep).combine_clause_t)->deep_delete(); } #line 2213 "bison_parser.cpp" /* yacc.c:1257 */ break; case 214: /* opt_from_clause */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_from_clause_t) != NULL) ((*yyvaluep).opt_from_clause_t)->deep_delete(); } #line 2219 "bison_parser.cpp" /* yacc.c:1257 */ break; case 215: /* select_target */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).select_target_t) != NULL) ((*yyvaluep).select_target_t)->deep_delete(); } #line 2225 "bison_parser.cpp" /* yacc.c:1257 */ break; case 216: /* opt_window_clause */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_window_clause_t) != NULL) ((*yyvaluep).opt_window_clause_t)->deep_delete(); } #line 2231 "bison_parser.cpp" /* yacc.c:1257 */ break; case 217: /* window_clause */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).window_clause_t) != NULL) ((*yyvaluep).window_clause_t)->deep_delete(); } #line 2237 "bison_parser.cpp" /* yacc.c:1257 */ break; case 218: /* window_def_list */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).window_def_list_t) != NULL) ((*yyvaluep).window_def_list_t)->deep_delete(); } #line 2243 "bison_parser.cpp" /* yacc.c:1257 */ break; case 219: /* window_def */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).window_def_t) != NULL) ((*yyvaluep).window_def_t)->deep_delete(); } #line 2249 "bison_parser.cpp" /* yacc.c:1257 */ break; case 220: /* window_name */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).window_name_t) != NULL) ((*yyvaluep).window_name_t)->deep_delete(); } #line 2255 "bison_parser.cpp" /* yacc.c:1257 */ break; case 221: /* window */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).window_t) != NULL) ((*yyvaluep).window_t)->deep_delete(); } #line 2261 "bison_parser.cpp" /* yacc.c:1257 */ break; case 222: /* opt_partition */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_partition_t) != NULL) ((*yyvaluep).opt_partition_t)->deep_delete(); } #line 2267 "bison_parser.cpp" /* yacc.c:1257 */ break; case 223: /* opt_frame_clause */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_frame_clause_t) != NULL) ((*yyvaluep).opt_frame_clause_t)->deep_delete(); } #line 2273 "bison_parser.cpp" /* yacc.c:1257 */ break; case 224: /* range_or_rows */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).range_or_rows_t) != NULL) ((*yyvaluep).range_or_rows_t)->deep_delete(); } #line 2279 "bison_parser.cpp" /* yacc.c:1257 */ break; case 225: /* frame_bound_start */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).frame_bound_start_t) != NULL) ((*yyvaluep).frame_bound_start_t)->deep_delete(); } #line 2285 "bison_parser.cpp" /* yacc.c:1257 */ break; case 226: /* frame_bound_end */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).frame_bound_end_t) != NULL) ((*yyvaluep).frame_bound_end_t)->deep_delete(); } #line 2291 "bison_parser.cpp" /* yacc.c:1257 */ break; case 227: /* frame_bound */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).frame_bound_t) != NULL) ((*yyvaluep).frame_bound_t)->deep_delete(); } #line 2297 "bison_parser.cpp" /* yacc.c:1257 */ break; case 228: /* opt_exist_window_name */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_exist_window_name_t) != NULL) ((*yyvaluep).opt_exist_window_name_t)->deep_delete(); } #line 2303 "bison_parser.cpp" /* yacc.c:1257 */ break; case 229: /* opt_group_clause */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_group_clause_t) != NULL) ((*yyvaluep).opt_group_clause_t)->deep_delete(); } #line 2309 "bison_parser.cpp" /* yacc.c:1257 */ break; case 230: /* opt_having_clause */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_having_clause_t) != NULL) ((*yyvaluep).opt_having_clause_t)->deep_delete(); } #line 2315 "bison_parser.cpp" /* yacc.c:1257 */ break; case 231: /* opt_where_clause */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_where_clause_t) != NULL) ((*yyvaluep).opt_where_clause_t)->deep_delete(); } #line 2321 "bison_parser.cpp" /* yacc.c:1257 */ break; case 232: /* where_clause */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).where_clause_t) != NULL) ((*yyvaluep).where_clause_t)->deep_delete(); } #line 2327 "bison_parser.cpp" /* yacc.c:1257 */ break; case 233: /* from_clause */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).from_clause_t) != NULL) ((*yyvaluep).from_clause_t)->deep_delete(); } #line 2333 "bison_parser.cpp" /* yacc.c:1257 */ break; case 234: /* table_ref */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).table_ref_t) != NULL) ((*yyvaluep).table_ref_t)->deep_delete(); } #line 2339 "bison_parser.cpp" /* yacc.c:1257 */ break; case 235: /* opt_index */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_index_t) != NULL) ((*yyvaluep).opt_index_t)->deep_delete(); } #line 2345 "bison_parser.cpp" /* yacc.c:1257 */ break; case 236: /* opt_on */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_on_t) != NULL) ((*yyvaluep).opt_on_t)->deep_delete(); } #line 2351 "bison_parser.cpp" /* yacc.c:1257 */ break; case 237: /* opt_using */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_using_t) != NULL) ((*yyvaluep).opt_using_t)->deep_delete(); } #line 2357 "bison_parser.cpp" /* yacc.c:1257 */ break; case 238: /* column_name_list */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).column_name_list_t) != NULL) ((*yyvaluep).column_name_list_t)->deep_delete(); } #line 2363 "bison_parser.cpp" /* yacc.c:1257 */ break; case 239: /* opt_table_prefix */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_table_prefix_t) != NULL) ((*yyvaluep).opt_table_prefix_t)->deep_delete(); } #line 2369 "bison_parser.cpp" /* yacc.c:1257 */ break; case 240: /* join_op */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).join_op_t) != NULL) ((*yyvaluep).join_op_t)->deep_delete(); } #line 2375 "bison_parser.cpp" /* yacc.c:1257 */ break; case 241: /* opt_join_type */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_join_type_t) != NULL) ((*yyvaluep).opt_join_type_t)->deep_delete(); } #line 2381 "bison_parser.cpp" /* yacc.c:1257 */ break; case 242: /* expr_list */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).expr_list_t) != NULL) ((*yyvaluep).expr_list_t)->deep_delete(); } #line 2387 "bison_parser.cpp" /* yacc.c:1257 */ break; case 243: /* opt_limit_clause */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_limit_clause_t) != NULL) ((*yyvaluep).opt_limit_clause_t)->deep_delete(); } #line 2393 "bison_parser.cpp" /* yacc.c:1257 */ break; case 244: /* limit_clause */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).limit_clause_t) != NULL) ((*yyvaluep).limit_clause_t)->deep_delete(); } #line 2399 "bison_parser.cpp" /* yacc.c:1257 */ break; case 245: /* opt_limit_row_count */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_limit_row_count_t) != NULL) ((*yyvaluep).opt_limit_row_count_t)->deep_delete(); } #line 2405 "bison_parser.cpp" /* yacc.c:1257 */ break; case 246: /* opt_order_clause */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_order_clause_t) != NULL) ((*yyvaluep).opt_order_clause_t)->deep_delete(); } #line 2411 "bison_parser.cpp" /* yacc.c:1257 */ break; case 247: /* opt_order_nulls */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_order_nulls_t) != NULL) ((*yyvaluep).opt_order_nulls_t)->deep_delete(); } #line 2417 "bison_parser.cpp" /* yacc.c:1257 */ break; case 248: /* order_item_list */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).order_item_list_t) != NULL) ((*yyvaluep).order_item_list_t)->deep_delete(); } #line 2423 "bison_parser.cpp" /* yacc.c:1257 */ break; case 249: /* order_item */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).order_item_t) != NULL) ((*yyvaluep).order_item_t)->deep_delete(); } #line 2429 "bison_parser.cpp" /* yacc.c:1257 */ break; case 250: /* opt_order_behavior */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_order_behavior_t) != NULL) ((*yyvaluep).opt_order_behavior_t)->deep_delete(); } #line 2435 "bison_parser.cpp" /* yacc.c:1257 */ break; case 251: /* opt_with_clause */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_with_clause_t) != NULL) ((*yyvaluep).opt_with_clause_t)->deep_delete(); } #line 2441 "bison_parser.cpp" /* yacc.c:1257 */ break; case 252: /* cte_table_list */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).cte_table_list_t) != NULL) ((*yyvaluep).cte_table_list_t)->deep_delete(); } #line 2447 "bison_parser.cpp" /* yacc.c:1257 */ break; case 253: /* cte_table */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).cte_table_t) != NULL) ((*yyvaluep).cte_table_t)->deep_delete(); } #line 2453 "bison_parser.cpp" /* yacc.c:1257 */ break; case 254: /* cte_table_name */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).cte_table_name_t) != NULL) ((*yyvaluep).cte_table_name_t)->deep_delete(); } #line 2459 "bison_parser.cpp" /* yacc.c:1257 */ break; case 255: /* opt_all_or_distinct */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_all_or_distinct_t) != NULL) ((*yyvaluep).opt_all_or_distinct_t)->deep_delete(); } #line 2465 "bison_parser.cpp" /* yacc.c:1257 */ break; case 256: /* create_table_stmt */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).create_table_stmt_t) != NULL) ((*yyvaluep).create_table_stmt_t)->deep_delete(); } #line 2471 "bison_parser.cpp" /* yacc.c:1257 */ break; case 257: /* create_index_stmt */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).create_index_stmt_t) != NULL) ((*yyvaluep).create_index_stmt_t)->deep_delete(); } #line 2477 "bison_parser.cpp" /* yacc.c:1257 */ break; case 258: /* create_trigger_stmt */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).create_trigger_stmt_t) != NULL) ((*yyvaluep).create_trigger_stmt_t)->deep_delete(); } #line 2483 "bison_parser.cpp" /* yacc.c:1257 */ break; case 259: /* create_view_stmt */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).create_view_stmt_t) != NULL) ((*yyvaluep).create_view_stmt_t)->deep_delete(); } #line 2489 "bison_parser.cpp" /* yacc.c:1257 */ break; case 260: /* opt_table_option_list */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_table_option_list_t) != NULL) ((*yyvaluep).opt_table_option_list_t)->deep_delete(); } #line 2495 "bison_parser.cpp" /* yacc.c:1257 */ break; case 261: /* table_option_list */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).table_option_list_t) != NULL) ((*yyvaluep).table_option_list_t)->deep_delete(); } #line 2501 "bison_parser.cpp" /* yacc.c:1257 */ break; case 262: /* table_option */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).table_option_t) != NULL) ((*yyvaluep).table_option_t)->deep_delete(); } #line 2507 "bison_parser.cpp" /* yacc.c:1257 */ break; case 263: /* opt_op_comma */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_op_comma_t) != NULL) ((*yyvaluep).opt_op_comma_t)->deep_delete(); } #line 2513 "bison_parser.cpp" /* yacc.c:1257 */ break; case 264: /* opt_ignore_or_replace */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_ignore_or_replace_t) != NULL) ((*yyvaluep).opt_ignore_or_replace_t)->deep_delete(); } #line 2519 "bison_parser.cpp" /* yacc.c:1257 */ break; case 265: /* opt_view_algorithm */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_view_algorithm_t) != NULL) ((*yyvaluep).opt_view_algorithm_t)->deep_delete(); } #line 2525 "bison_parser.cpp" /* yacc.c:1257 */ break; case 266: /* opt_sql_security */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_sql_security_t) != NULL) ((*yyvaluep).opt_sql_security_t)->deep_delete(); } #line 2531 "bison_parser.cpp" /* yacc.c:1257 */ break; case 267: /* opt_index_option */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_index_option_t) != NULL) ((*yyvaluep).opt_index_option_t)->deep_delete(); } #line 2537 "bison_parser.cpp" /* yacc.c:1257 */ break; case 268: /* opt_extra_option */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_extra_option_t) != NULL) ((*yyvaluep).opt_extra_option_t)->deep_delete(); } #line 2543 "bison_parser.cpp" /* yacc.c:1257 */ break; case 269: /* index_algorithm_option */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).index_algorithm_option_t) != NULL) ((*yyvaluep).index_algorithm_option_t)->deep_delete(); } #line 2549 "bison_parser.cpp" /* yacc.c:1257 */ break; case 270: /* lock_option */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).lock_option_t) != NULL) ((*yyvaluep).lock_option_t)->deep_delete(); } #line 2555 "bison_parser.cpp" /* yacc.c:1257 */ break; case 271: /* opt_op_equal */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_op_equal_t) != NULL) ((*yyvaluep).opt_op_equal_t)->deep_delete(); } #line 2561 "bison_parser.cpp" /* yacc.c:1257 */ break; case 272: /* trigger_events */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).trigger_events_t) != NULL) ((*yyvaluep).trigger_events_t)->deep_delete(); } #line 2567 "bison_parser.cpp" /* yacc.c:1257 */ break; case 273: /* trigger_name */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).trigger_name_t) != NULL) ((*yyvaluep).trigger_name_t)->deep_delete(); } #line 2573 "bison_parser.cpp" /* yacc.c:1257 */ break; case 274: /* trigger_action_time */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).trigger_action_time_t) != NULL) ((*yyvaluep).trigger_action_time_t)->deep_delete(); } #line 2579 "bison_parser.cpp" /* yacc.c:1257 */ break; case 275: /* drop_index_stmt */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).drop_index_stmt_t) != NULL) ((*yyvaluep).drop_index_stmt_t)->deep_delete(); } #line 2585 "bison_parser.cpp" /* yacc.c:1257 */ break; case 276: /* drop_table_stmt */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).drop_table_stmt_t) != NULL) ((*yyvaluep).drop_table_stmt_t)->deep_delete(); } #line 2591 "bison_parser.cpp" /* yacc.c:1257 */ break; case 277: /* opt_restrict_or_cascade */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_restrict_or_cascade_t) != NULL) ((*yyvaluep).opt_restrict_or_cascade_t)->deep_delete(); } #line 2597 "bison_parser.cpp" /* yacc.c:1257 */ break; case 278: /* drop_trigger_stmt */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).drop_trigger_stmt_t) != NULL) ((*yyvaluep).drop_trigger_stmt_t)->deep_delete(); } #line 2603 "bison_parser.cpp" /* yacc.c:1257 */ break; case 279: /* drop_view_stmt */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).drop_view_stmt_t) != NULL) ((*yyvaluep).drop_view_stmt_t)->deep_delete(); } #line 2609 "bison_parser.cpp" /* yacc.c:1257 */ break; case 280: /* insert_stmt */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).insert_stmt_t) != NULL) ((*yyvaluep).insert_stmt_t)->deep_delete(); } #line 2615 "bison_parser.cpp" /* yacc.c:1257 */ break; case 281: /* insert_rest */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).insert_rest_t) != NULL) ((*yyvaluep).insert_rest_t)->deep_delete(); } #line 2621 "bison_parser.cpp" /* yacc.c:1257 */ break; case 282: /* super_values_list */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).super_values_list_t) != NULL) ((*yyvaluep).super_values_list_t)->deep_delete(); } #line 2627 "bison_parser.cpp" /* yacc.c:1257 */ break; case 283: /* values_list */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).values_list_t) != NULL) ((*yyvaluep).values_list_t)->deep_delete(); } #line 2633 "bison_parser.cpp" /* yacc.c:1257 */ break; case 284: /* opt_on_conflict */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_on_conflict_t) != NULL) ((*yyvaluep).opt_on_conflict_t)->deep_delete(); } #line 2639 "bison_parser.cpp" /* yacc.c:1257 */ break; case 285: /* opt_conflict_expr */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_conflict_expr_t) != NULL) ((*yyvaluep).opt_conflict_expr_t)->deep_delete(); } #line 2645 "bison_parser.cpp" /* yacc.c:1257 */ break; case 286: /* indexed_column_list */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).indexed_column_list_t) != NULL) ((*yyvaluep).indexed_column_list_t)->deep_delete(); } #line 2651 "bison_parser.cpp" /* yacc.c:1257 */ break; case 287: /* indexed_column */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).indexed_column_t) != NULL) ((*yyvaluep).indexed_column_t)->deep_delete(); } #line 2657 "bison_parser.cpp" /* yacc.c:1257 */ break; case 288: /* update_stmt */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).update_stmt_t) != NULL) ((*yyvaluep).update_stmt_t)->deep_delete(); } #line 2663 "bison_parser.cpp" /* yacc.c:1257 */ break; case 289: /* alter_action */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).alter_action_t) != NULL) ((*yyvaluep).alter_action_t)->deep_delete(); } #line 2669 "bison_parser.cpp" /* yacc.c:1257 */ break; case 290: /* alter_constant_action */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).alter_constant_action_t) != NULL) ((*yyvaluep).alter_constant_action_t)->deep_delete(); } #line 2675 "bison_parser.cpp" /* yacc.c:1257 */ break; case 291: /* column_def_list */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).column_def_list_t) != NULL) ((*yyvaluep).column_def_list_t)->deep_delete(); } #line 2681 "bison_parser.cpp" /* yacc.c:1257 */ break; case 292: /* column_def */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).column_def_t) != NULL) ((*yyvaluep).column_def_t)->deep_delete(); } #line 2687 "bison_parser.cpp" /* yacc.c:1257 */ break; case 293: /* opt_column_constraint_list */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_column_constraint_list_t) != NULL) ((*yyvaluep).opt_column_constraint_list_t)->deep_delete(); } #line 2693 "bison_parser.cpp" /* yacc.c:1257 */ break; case 294: /* column_constraint_list */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).column_constraint_list_t) != NULL) ((*yyvaluep).column_constraint_list_t)->deep_delete(); } #line 2699 "bison_parser.cpp" /* yacc.c:1257 */ break; case 295: /* column_constraint */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).column_constraint_t) != NULL) ((*yyvaluep).column_constraint_t)->deep_delete(); } #line 2705 "bison_parser.cpp" /* yacc.c:1257 */ break; case 296: /* opt_reference_clause */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_reference_clause_t) != NULL) ((*yyvaluep).opt_reference_clause_t)->deep_delete(); } #line 2711 "bison_parser.cpp" /* yacc.c:1257 */ break; case 297: /* opt_check */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_check_t) != NULL) ((*yyvaluep).opt_check_t)->deep_delete(); } #line 2717 "bison_parser.cpp" /* yacc.c:1257 */ break; case 298: /* constraint_type */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).constraint_type_t) != NULL) ((*yyvaluep).constraint_type_t)->deep_delete(); } #line 2723 "bison_parser.cpp" /* yacc.c:1257 */ break; case 299: /* reference_clause */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).reference_clause_t) != NULL) ((*yyvaluep).reference_clause_t)->deep_delete(); } #line 2729 "bison_parser.cpp" /* yacc.c:1257 */ break; case 300: /* opt_foreign_key */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_foreign_key_t) != NULL) ((*yyvaluep).opt_foreign_key_t)->deep_delete(); } #line 2735 "bison_parser.cpp" /* yacc.c:1257 */ break; case 301: /* opt_foreign_key_actions */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_foreign_key_actions_t) != NULL) ((*yyvaluep).opt_foreign_key_actions_t)->deep_delete(); } #line 2741 "bison_parser.cpp" /* yacc.c:1257 */ break; case 302: /* foreign_key_actions */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).foreign_key_actions_t) != NULL) ((*yyvaluep).foreign_key_actions_t)->deep_delete(); } #line 2747 "bison_parser.cpp" /* yacc.c:1257 */ break; case 303: /* key_actions */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).key_actions_t) != NULL) ((*yyvaluep).key_actions_t)->deep_delete(); } #line 2753 "bison_parser.cpp" /* yacc.c:1257 */ break; case 304: /* opt_constraint_attribute_spec */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_constraint_attribute_spec_t) != NULL) ((*yyvaluep).opt_constraint_attribute_spec_t)->deep_delete(); } #line 2759 "bison_parser.cpp" /* yacc.c:1257 */ break; case 305: /* opt_initial_time */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_initial_time_t) != NULL) ((*yyvaluep).opt_initial_time_t)->deep_delete(); } #line 2765 "bison_parser.cpp" /* yacc.c:1257 */ break; case 306: /* constraint_name */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).constraint_name_t) != NULL) ((*yyvaluep).constraint_name_t)->deep_delete(); } #line 2771 "bison_parser.cpp" /* yacc.c:1257 */ break; case 307: /* opt_temp */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_temp_t) != NULL) ((*yyvaluep).opt_temp_t)->deep_delete(); } #line 2777 "bison_parser.cpp" /* yacc.c:1257 */ break; case 308: /* opt_check_option */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_check_option_t) != NULL) ((*yyvaluep).opt_check_option_t)->deep_delete(); } #line 2783 "bison_parser.cpp" /* yacc.c:1257 */ break; case 309: /* opt_column_name_list_p */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_column_name_list_p_t) != NULL) ((*yyvaluep).opt_column_name_list_p_t)->deep_delete(); } #line 2789 "bison_parser.cpp" /* yacc.c:1257 */ break; case 310: /* set_clause_list */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).set_clause_list_t) != NULL) ((*yyvaluep).set_clause_list_t)->deep_delete(); } #line 2795 "bison_parser.cpp" /* yacc.c:1257 */ break; case 311: /* set_clause */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).set_clause_t) != NULL) ((*yyvaluep).set_clause_t)->deep_delete(); } #line 2801 "bison_parser.cpp" /* yacc.c:1257 */ break; case 312: /* opt_as_alias */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_as_alias_t) != NULL) ((*yyvaluep).opt_as_alias_t)->deep_delete(); } #line 2807 "bison_parser.cpp" /* yacc.c:1257 */ break; case 313: /* expr */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).expr_t) != NULL) ((*yyvaluep).expr_t)->deep_delete(); } #line 2813 "bison_parser.cpp" /* yacc.c:1257 */ break; case 314: /* operand */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).operand_t) != NULL) ((*yyvaluep).operand_t)->deep_delete(); } #line 2819 "bison_parser.cpp" /* yacc.c:1257 */ break; case 315: /* cast_expr */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).cast_expr_t) != NULL) ((*yyvaluep).cast_expr_t)->deep_delete(); } #line 2825 "bison_parser.cpp" /* yacc.c:1257 */ break; case 316: /* scalar_expr */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).scalar_expr_t) != NULL) ((*yyvaluep).scalar_expr_t)->deep_delete(); } #line 2831 "bison_parser.cpp" /* yacc.c:1257 */ break; case 317: /* unary_expr */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).unary_expr_t) != NULL) ((*yyvaluep).unary_expr_t)->deep_delete(); } #line 2837 "bison_parser.cpp" /* yacc.c:1257 */ break; case 318: /* binary_expr */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).binary_expr_t) != NULL) ((*yyvaluep).binary_expr_t)->deep_delete(); } #line 2843 "bison_parser.cpp" /* yacc.c:1257 */ break; case 319: /* logic_expr */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).logic_expr_t) != NULL) ((*yyvaluep).logic_expr_t)->deep_delete(); } #line 2849 "bison_parser.cpp" /* yacc.c:1257 */ break; case 320: /* in_expr */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).in_expr_t) != NULL) ((*yyvaluep).in_expr_t)->deep_delete(); } #line 2855 "bison_parser.cpp" /* yacc.c:1257 */ break; case 321: /* case_expr */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).case_expr_t) != NULL) ((*yyvaluep).case_expr_t)->deep_delete(); } #line 2861 "bison_parser.cpp" /* yacc.c:1257 */ break; case 322: /* between_expr */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).between_expr_t) != NULL) ((*yyvaluep).between_expr_t)->deep_delete(); } #line 2867 "bison_parser.cpp" /* yacc.c:1257 */ break; case 323: /* exists_expr */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).exists_expr_t) != NULL) ((*yyvaluep).exists_expr_t)->deep_delete(); } #line 2873 "bison_parser.cpp" /* yacc.c:1257 */ break; case 324: /* function_expr */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).function_expr_t) != NULL) ((*yyvaluep).function_expr_t)->deep_delete(); } #line 2879 "bison_parser.cpp" /* yacc.c:1257 */ break; case 325: /* opt_distinct */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_distinct_t) != NULL) ((*yyvaluep).opt_distinct_t)->deep_delete(); } #line 2885 "bison_parser.cpp" /* yacc.c:1257 */ break; case 326: /* opt_filter_clause */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_filter_clause_t) != NULL) ((*yyvaluep).opt_filter_clause_t)->deep_delete(); } #line 2891 "bison_parser.cpp" /* yacc.c:1257 */ break; case 327: /* opt_over_clause */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_over_clause_t) != NULL) ((*yyvaluep).opt_over_clause_t)->deep_delete(); } #line 2897 "bison_parser.cpp" /* yacc.c:1257 */ break; case 328: /* case_list */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).case_list_t) != NULL) ((*yyvaluep).case_list_t)->deep_delete(); } #line 2903 "bison_parser.cpp" /* yacc.c:1257 */ break; case 329: /* case_clause */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).case_clause_t) != NULL) ((*yyvaluep).case_clause_t)->deep_delete(); } #line 2909 "bison_parser.cpp" /* yacc.c:1257 */ break; case 330: /* comp_expr */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).comp_expr_t) != NULL) ((*yyvaluep).comp_expr_t)->deep_delete(); } #line 2915 "bison_parser.cpp" /* yacc.c:1257 */ break; case 331: /* extract_expr */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).extract_expr_t) != NULL) ((*yyvaluep).extract_expr_t)->deep_delete(); } #line 2921 "bison_parser.cpp" /* yacc.c:1257 */ break; case 332: /* datetime_field */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).datetime_field_t) != NULL) ((*yyvaluep).datetime_field_t)->deep_delete(); } #line 2927 "bison_parser.cpp" /* yacc.c:1257 */ break; case 333: /* array_expr */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).array_expr_t) != NULL) ((*yyvaluep).array_expr_t)->deep_delete(); } #line 2933 "bison_parser.cpp" /* yacc.c:1257 */ break; case 334: /* array_index */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).array_index_t) != NULL) ((*yyvaluep).array_index_t)->deep_delete(); } #line 2939 "bison_parser.cpp" /* yacc.c:1257 */ break; case 335: /* literal */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).literal_t) != NULL) ((*yyvaluep).literal_t)->deep_delete(); } #line 2945 "bison_parser.cpp" /* yacc.c:1257 */ break; case 336: /* string_literal */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).string_literal_t) != NULL) ((*yyvaluep).string_literal_t)->deep_delete(); } #line 2951 "bison_parser.cpp" /* yacc.c:1257 */ break; case 337: /* bool_literal */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).bool_literal_t) != NULL) ((*yyvaluep).bool_literal_t)->deep_delete(); } #line 2957 "bison_parser.cpp" /* yacc.c:1257 */ break; case 338: /* num_literal */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).num_literal_t) != NULL) ((*yyvaluep).num_literal_t)->deep_delete(); } #line 2963 "bison_parser.cpp" /* yacc.c:1257 */ break; case 339: /* int_literal */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).int_literal_t) != NULL) ((*yyvaluep).int_literal_t)->deep_delete(); } #line 2969 "bison_parser.cpp" /* yacc.c:1257 */ break; case 340: /* float_literal */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).float_literal_t) != NULL) ((*yyvaluep).float_literal_t)->deep_delete(); } #line 2975 "bison_parser.cpp" /* yacc.c:1257 */ break; case 341: /* opt_column */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_column_t) != NULL) ((*yyvaluep).opt_column_t)->deep_delete(); } #line 2981 "bison_parser.cpp" /* yacc.c:1257 */ break; case 342: /* trigger_body */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).trigger_body_t) != NULL) ((*yyvaluep).trigger_body_t)->deep_delete(); } #line 2987 "bison_parser.cpp" /* yacc.c:1257 */ break; case 343: /* opt_if_not_exist */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_if_not_exist_t) != NULL) ((*yyvaluep).opt_if_not_exist_t)->deep_delete(); } #line 2993 "bison_parser.cpp" /* yacc.c:1257 */ break; case 344: /* opt_if_exist */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_if_exist_t) != NULL) ((*yyvaluep).opt_if_exist_t)->deep_delete(); } #line 2999 "bison_parser.cpp" /* yacc.c:1257 */ break; case 345: /* identifier */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).identifier_t) != NULL) ((*yyvaluep).identifier_t)->deep_delete(); } #line 3005 "bison_parser.cpp" /* yacc.c:1257 */ break; case 346: /* as_alias */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).as_alias_t) != NULL) ((*yyvaluep).as_alias_t)->deep_delete(); } #line 3011 "bison_parser.cpp" /* yacc.c:1257 */ break; case 347: /* table_name */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).table_name_t) != NULL) ((*yyvaluep).table_name_t)->deep_delete(); } #line 3017 "bison_parser.cpp" /* yacc.c:1257 */ break; case 348: /* column_name */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).column_name_t) != NULL) ((*yyvaluep).column_name_t)->deep_delete(); } #line 3023 "bison_parser.cpp" /* yacc.c:1257 */ break; case 349: /* opt_index_keyword */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_index_keyword_t) != NULL) ((*yyvaluep).opt_index_keyword_t)->deep_delete(); } #line 3029 "bison_parser.cpp" /* yacc.c:1257 */ break; case 350: /* view_name */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).view_name_t) != NULL) ((*yyvaluep).view_name_t)->deep_delete(); } #line 3035 "bison_parser.cpp" /* yacc.c:1257 */ break; case 351: /* function_name */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).function_name_t) != NULL) ((*yyvaluep).function_name_t)->deep_delete(); } #line 3041 "bison_parser.cpp" /* yacc.c:1257 */ break; case 352: /* binary_op */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).binary_op_t) != NULL) ((*yyvaluep).binary_op_t)->deep_delete(); } #line 3047 "bison_parser.cpp" /* yacc.c:1257 */ break; case 353: /* opt_not */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_not_t) != NULL) ((*yyvaluep).opt_not_t)->deep_delete(); } #line 3053 "bison_parser.cpp" /* yacc.c:1257 */ break; case 354: /* name */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).name_t) != NULL) ((*yyvaluep).name_t)->deep_delete(); } #line 3059 "bison_parser.cpp" /* yacc.c:1257 */ break; case 355: /* type_name */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).type_name_t) != NULL) ((*yyvaluep).type_name_t)->deep_delete(); } #line 3065 "bison_parser.cpp" /* yacc.c:1257 */ break; case 356: /* character_type */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).character_type_t) != NULL) ((*yyvaluep).character_type_t)->deep_delete(); } #line 3071 "bison_parser.cpp" /* yacc.c:1257 */ break; case 357: /* character_with_length */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).character_with_length_t) != NULL) ((*yyvaluep).character_with_length_t)->deep_delete(); } #line 3077 "bison_parser.cpp" /* yacc.c:1257 */ break; case 358: /* character_without_length */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).character_without_length_t) != NULL) ((*yyvaluep).character_without_length_t)->deep_delete(); } #line 3083 "bison_parser.cpp" /* yacc.c:1257 */ break; case 359: /* character_conflicta */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).character_conflicta_t) != NULL) ((*yyvaluep).character_conflicta_t)->deep_delete(); } #line 3089 "bison_parser.cpp" /* yacc.c:1257 */ break; case 360: /* numeric_type */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).numeric_type_t) != NULL) ((*yyvaluep).numeric_type_t)->deep_delete(); } #line 3095 "bison_parser.cpp" /* yacc.c:1257 */ break; case 361: /* opt_table_constraint_list */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_table_constraint_list_t) != NULL) ((*yyvaluep).opt_table_constraint_list_t)->deep_delete(); } #line 3101 "bison_parser.cpp" /* yacc.c:1257 */ break; case 362: /* table_constraint_list */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).table_constraint_list_t) != NULL) ((*yyvaluep).table_constraint_list_t)->deep_delete(); } #line 3107 "bison_parser.cpp" /* yacc.c:1257 */ break; case 363: /* table_constraint */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).table_constraint_t) != NULL) ((*yyvaluep).table_constraint_t)->deep_delete(); } #line 3113 "bison_parser.cpp" /* yacc.c:1257 */ break; case 364: /* opt_enforced */ #line 421 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_enforced_t) != NULL) ((*yyvaluep).opt_enforced_t)->deep_delete(); } #line 3119 "bison_parser.cpp" /* yacc.c:1257 */ break; default: break; } YY_IGNORE_MAYBE_UNINITIALIZED_END } /*----------. | yyparse. | `----------*/ int yyparse(Program *result, yyscan_t scanner) { /* The lookahead symbol. */ int yychar; /* The semantic value of the lookahead symbol. */ /* Default value used for initialization, for pacifying older GCCs or non-GCC compilers. */ YY_INITIAL_VALUE(static YYSTYPE yyval_default;) YYSTYPE yylval YY_INITIAL_VALUE(= yyval_default); /* Location data for the lookahead symbol. */ static YYLTYPE yyloc_default #if defined FF_LTYPE_IS_TRIVIAL && FF_LTYPE_IS_TRIVIAL = {1, 1, 1, 1} #endif ; YYLTYPE yylloc = yyloc_default; /* Number of syntax errors so far. */ int yynerrs; int yystate; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; /* The stacks and their tools: 'yyss': related to states. 'yyvs': related to semantic values. 'yyls': related to locations. Refer to the stacks through separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* The state stack. */ yytype_int16 yyssa[YYINITDEPTH]; yytype_int16 *yyss; yytype_int16 *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs; YYSTYPE *yyvsp; /* The location stack. */ YYLTYPE yylsa[YYINITDEPTH]; YYLTYPE *yyls; YYLTYPE *yylsp; /* The locations where the error started and ended. */ YYLTYPE yyerror_range[3]; YYSIZE_T yystacksize; int yyn; int yyresult; /* Lookahead token as an internal (translated) token number. */ int yytoken = 0; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; YYLTYPE yyloc; #if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; char *yymsg = yymsgbuf; YYSIZE_T yymsg_alloc = sizeof yymsgbuf; #endif #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N), yylsp -= (N)) /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; yyssp = yyss = yyssa; yyvsp = yyvs = yyvsa; yylsp = yyls = yylsa; yystacksize = YYINITDEPTH; YYDPRINTF((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ /* User initialization code. */ #line 18 "bison.y" /* yacc.c:1431 */ { // Initialize yylloc.first_column = 0; yylloc.last_column = 0; yylloc.first_line = 0; yylloc.last_line = 0; yylloc.total_column = 0; yylloc.string_length = 0; } #line 3237 "bison_parser.cpp" /* yacc.c:1431 */ yylsp[0] = yylloc; goto yysetstate; /*------------------------------------------------------------. | yynewstate -- push a new state, which is found in yystate. | `------------------------------------------------------------*/ yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; /*--------------------------------------------------------------------. | yynewstate -- set current state (the top of the stack) to yystate. | `--------------------------------------------------------------------*/ yysetstate: *yyssp = (yytype_int16)yystate; if (yyss + yystacksize - 1 <= yyssp) #if !defined yyoverflow && !defined YYSTACK_RELOCATE goto yyexhaustedlab; #else { /* Get the current used size of the three stacks, in elements. */ YYSIZE_T yysize = (YYSIZE_T)(yyssp - yyss + 1); #if defined yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ YYSTYPE *yyvs1 = yyvs; yytype_int16 *yyss1 = yyss; YYLTYPE *yyls1 = yyls; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow(YY_("memory exhausted"), &yyss1, yysize * sizeof(*yyssp), &yyvs1, yysize * sizeof(*yyvsp), &yyls1, yysize * sizeof(*yylsp), &yystacksize); yyss = yyss1; yyvs = yyvs1; yyls = yyls1; } #else /* defined YYSTACK_RELOCATE */ /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; { yytype_int16 *yyss1 = yyss; union yyalloc *yyptr = (union yyalloc *)YYSTACK_ALLOC(YYSTACK_BYTES(yystacksize)); if (!yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE(yyss_alloc, yyss); YYSTACK_RELOCATE(yyvs_alloc, yyvs); YYSTACK_RELOCATE(yyls_alloc, yyls); #undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE(yyss1); } #endif yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; yylsp = yyls + yysize - 1; YYDPRINTF( (stderr, "Stack size increased to %lu\n", (unsigned long)yystacksize)); if (yyss + yystacksize - 1 <= yyssp) YYABORT; } #endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */ YYDPRINTF((stderr, "Entering state %d\n", yystate)); if (yystate == YYFINAL) YYACCEPT; goto yybackup; /*-----------. | yybackup. | `-----------*/ yybackup: /* Do appropriate processing given the current state. Read a lookahead token if we need one and don't already have one. */ /* First try to decide what to do without reference to lookahead token. */ yyn = yypact[yystate]; if (yypact_value_is_default(yyn)) goto yydefault; /* Not known => get a lookahead token if don't already have one. */ /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF((stderr, "Reading a token: ")); yychar = yylex(&yylval, &yylloc, scanner); } if (yychar <= YYEOF) { yychar = yytoken = YYEOF; YYDPRINTF((stderr, "Now at end of input.\n")); } else { yytoken = YYTRANSLATE(yychar); YY_SYMBOL_PRINT("Next token is", yytoken, &yylval, &yylloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ yyn += yytoken; if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) goto yydefault; yyn = yytable[yyn]; if (yyn <= 0) { if (yytable_value_is_error(yyn)) goto yyerrlab; yyn = -yyn; goto yyreduce; } /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; /* Shift the lookahead token. */ YY_SYMBOL_PRINT("Shifting", yytoken, &yylval, &yylloc); /* Discard the shifted token. */ yychar = YYEMPTY; yystate = yyn; YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END *++yylsp = yylloc; goto yynewstate; /*-----------------------------------------------------------. | yydefault -- do the default action for the current state. | `-----------------------------------------------------------*/ yydefault: yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; goto yyreduce; /*-----------------------------. | yyreduce -- do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ yylen = yyr2[yyn]; /* If YYLEN is nonzero, implement the default value of the action: '$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison users should not rely upon it. Assigning to YYVAL unconditionally makes the parser a bit smaller, and it avoids a GCC warning that YYVAL may be used uninitialized. */ yyval = yyvsp[1 - yylen]; /* Default location. */ YYLLOC_DEFAULT(yyloc, (yylsp - yylen), yylen); yyerror_range[1] = yyloc; YY_REDUCE_PRINT(yyn); switch (yyn) { case 2: #line 425 "bison.y" /* yacc.c:1652 */ { (yyval.program_t) = result; (yyval.program_t)->case_idx_ = CASE0; (yyval.program_t)->stmtlist_ = (yyvsp[0].stmtlist_t); (yyval.program_t) = NULL; } #line 3437 "bison_parser.cpp" /* yacc.c:1652 */ break; case 3: #line 435 "bison.y" /* yacc.c:1652 */ { (yyval.stmtlist_t) = new Stmtlist(); (yyval.stmtlist_t)->case_idx_ = CASE0; (yyval.stmtlist_t)->stmt_ = (yyvsp[-2].stmt_t); (yyval.stmtlist_t)->stmtlist_ = (yyvsp[0].stmtlist_t); } #line 3449 "bison_parser.cpp" /* yacc.c:1652 */ break; case 4: #line 442 "bison.y" /* yacc.c:1652 */ { (yyval.stmtlist_t) = new Stmtlist(); (yyval.stmtlist_t)->case_idx_ = CASE1; (yyval.stmtlist_t)->stmt_ = (yyvsp[-1].stmt_t); } #line 3460 "bison_parser.cpp" /* yacc.c:1652 */ break; case 5: #line 451 "bison.y" /* yacc.c:1652 */ { (yyval.stmt_t) = new Stmt(); (yyval.stmt_t)->case_idx_ = CASE0; (yyval.stmt_t)->create_stmt_ = (yyvsp[0].create_stmt_t); } #line 3471 "bison_parser.cpp" /* yacc.c:1652 */ break; case 6: #line 457 "bison.y" /* yacc.c:1652 */ { (yyval.stmt_t) = new Stmt(); (yyval.stmt_t)->case_idx_ = CASE1; (yyval.stmt_t)->drop_stmt_ = (yyvsp[0].drop_stmt_t); } #line 3482 "bison_parser.cpp" /* yacc.c:1652 */ break; case 7: #line 463 "bison.y" /* yacc.c:1652 */ { (yyval.stmt_t) = new Stmt(); (yyval.stmt_t)->case_idx_ = CASE2; (yyval.stmt_t)->select_stmt_ = (yyvsp[0].select_stmt_t); } #line 3493 "bison_parser.cpp" /* yacc.c:1652 */ break; case 8: #line 469 "bison.y" /* yacc.c:1652 */ { (yyval.stmt_t) = new Stmt(); (yyval.stmt_t)->case_idx_ = CASE3; (yyval.stmt_t)->update_stmt_ = (yyvsp[0].update_stmt_t); } #line 3504 "bison_parser.cpp" /* yacc.c:1652 */ break; case 9: #line 475 "bison.y" /* yacc.c:1652 */ { (yyval.stmt_t) = new Stmt(); (yyval.stmt_t)->case_idx_ = CASE4; (yyval.stmt_t)->insert_stmt_ = (yyvsp[0].insert_stmt_t); } #line 3515 "bison_parser.cpp" /* yacc.c:1652 */ break; case 10: #line 481 "bison.y" /* yacc.c:1652 */ { (yyval.stmt_t) = new Stmt(); (yyval.stmt_t)->case_idx_ = CASE5; (yyval.stmt_t)->alter_stmt_ = (yyvsp[0].alter_stmt_t); } #line 3526 "bison_parser.cpp" /* yacc.c:1652 */ break; case 11: #line 490 "bison.y" /* yacc.c:1652 */ { (yyval.create_stmt_t) = new CreateStmt(); (yyval.create_stmt_t)->case_idx_ = CASE0; (yyval.create_stmt_t)->create_table_stmt_ = (yyvsp[0].create_table_stmt_t); } #line 3537 "bison_parser.cpp" /* yacc.c:1652 */ break; case 12: #line 496 "bison.y" /* yacc.c:1652 */ { (yyval.create_stmt_t) = new CreateStmt(); (yyval.create_stmt_t)->case_idx_ = CASE1; (yyval.create_stmt_t)->create_index_stmt_ = (yyvsp[0].create_index_stmt_t); } #line 3548 "bison_parser.cpp" /* yacc.c:1652 */ break; case 13: #line 502 "bison.y" /* yacc.c:1652 */ { (yyval.create_stmt_t) = new CreateStmt(); (yyval.create_stmt_t)->case_idx_ = CASE2; (yyval.create_stmt_t)->create_trigger_stmt_ = (yyvsp[0].create_trigger_stmt_t); } #line 3559 "bison_parser.cpp" /* yacc.c:1652 */ break; case 14: #line 508 "bison.y" /* yacc.c:1652 */ { (yyval.create_stmt_t) = new CreateStmt(); (yyval.create_stmt_t)->case_idx_ = CASE3; (yyval.create_stmt_t)->create_view_stmt_ = (yyvsp[0].create_view_stmt_t); } #line 3570 "bison_parser.cpp" /* yacc.c:1652 */ break; case 15: #line 517 "bison.y" /* yacc.c:1652 */ { (yyval.drop_stmt_t) = new DropStmt(); (yyval.drop_stmt_t)->case_idx_ = CASE0; (yyval.drop_stmt_t)->drop_index_stmt_ = (yyvsp[0].drop_index_stmt_t); } #line 3581 "bison_parser.cpp" /* yacc.c:1652 */ break; case 16: #line 523 "bison.y" /* yacc.c:1652 */ { (yyval.drop_stmt_t) = new DropStmt(); (yyval.drop_stmt_t)->case_idx_ = CASE1; (yyval.drop_stmt_t)->drop_table_stmt_ = (yyvsp[0].drop_table_stmt_t); } #line 3592 "bison_parser.cpp" /* yacc.c:1652 */ break; case 17: #line 529 "bison.y" /* yacc.c:1652 */ { (yyval.drop_stmt_t) = new DropStmt(); (yyval.drop_stmt_t)->case_idx_ = CASE2; (yyval.drop_stmt_t)->drop_trigger_stmt_ = (yyvsp[0].drop_trigger_stmt_t); } #line 3603 "bison_parser.cpp" /* yacc.c:1652 */ break; case 18: #line 535 "bison.y" /* yacc.c:1652 */ { (yyval.drop_stmt_t) = new DropStmt(); (yyval.drop_stmt_t)->case_idx_ = CASE3; (yyval.drop_stmt_t)->drop_view_stmt_ = (yyvsp[0].drop_view_stmt_t); } #line 3614 "bison_parser.cpp" /* yacc.c:1652 */ break; case 19: #line 544 "bison.y" /* yacc.c:1652 */ { (yyval.alter_stmt_t) = new AlterStmt(); (yyval.alter_stmt_t)->case_idx_ = CASE0; (yyval.alter_stmt_t)->table_name_ = (yyvsp[-1].table_name_t); (yyval.alter_stmt_t)->alter_action_ = (yyvsp[0].alter_action_t); } #line 3626 "bison_parser.cpp" /* yacc.c:1652 */ break; case 20: #line 554 "bison.y" /* yacc.c:1652 */ { (yyval.select_stmt_t) = new SelectStmt(); (yyval.select_stmt_t)->case_idx_ = CASE0; (yyval.select_stmt_t)->select_no_parens_ = (yyvsp[0].select_no_parens_t); } #line 3637 "bison_parser.cpp" /* yacc.c:1652 */ break; case 21: #line 560 "bison.y" /* yacc.c:1652 */ { (yyval.select_stmt_t) = new SelectStmt(); (yyval.select_stmt_t)->case_idx_ = CASE1; (yyval.select_stmt_t)->select_with_parens_ = (yyvsp[0].select_with_parens_t); } #line 3648 "bison_parser.cpp" /* yacc.c:1652 */ break; case 22: #line 569 "bison.y" /* yacc.c:1652 */ { (yyval.select_with_parens_t) = new SelectWithParens(); (yyval.select_with_parens_t)->case_idx_ = CASE0; (yyval.select_with_parens_t)->select_no_parens_ = (yyvsp[-1].select_no_parens_t); } #line 3659 "bison_parser.cpp" /* yacc.c:1652 */ break; case 23: #line 575 "bison.y" /* yacc.c:1652 */ { (yyval.select_with_parens_t) = new SelectWithParens(); (yyval.select_with_parens_t)->case_idx_ = CASE1; (yyval.select_with_parens_t)->select_with_parens_ = (yyvsp[-1].select_with_parens_t); } #line 3670 "bison_parser.cpp" /* yacc.c:1652 */ break; case 24: #line 584 "bison.y" /* yacc.c:1652 */ { (yyval.select_no_parens_t) = new SelectNoParens(); (yyval.select_no_parens_t)->case_idx_ = CASE0; (yyval.select_no_parens_t)->opt_with_clause_ = (yyvsp[-3].opt_with_clause_t); (yyval.select_no_parens_t)->select_clause_list_ = (yyvsp[-2].select_clause_list_t); (yyval.select_no_parens_t)->opt_order_clause_ = (yyvsp[-1].opt_order_clause_t); (yyval.select_no_parens_t)->opt_limit_clause_ = (yyvsp[0].opt_limit_clause_t); } #line 3684 "bison_parser.cpp" /* yacc.c:1652 */ break; case 25: #line 596 "bison.y" /* yacc.c:1652 */ { (yyval.select_clause_list_t) = new SelectClauseList(); (yyval.select_clause_list_t)->case_idx_ = CASE0; (yyval.select_clause_list_t)->select_clause_ = (yyvsp[0].select_clause_t); } #line 3695 "bison_parser.cpp" /* yacc.c:1652 */ break; case 26: #line 602 "bison.y" /* yacc.c:1652 */ { (yyval.select_clause_list_t) = new SelectClauseList(); (yyval.select_clause_list_t)->case_idx_ = CASE1; (yyval.select_clause_list_t)->select_clause_ = (yyvsp[-2].select_clause_t); (yyval.select_clause_list_t)->combine_clause_ = (yyvsp[-1].combine_clause_t); (yyval.select_clause_list_t)->select_clause_list_ = (yyvsp[0].select_clause_list_t); } #line 3708 "bison_parser.cpp" /* yacc.c:1652 */ break; case 27: #line 613 "bison.y" /* yacc.c:1652 */ { (yyval.select_clause_t) = new SelectClause(); (yyval.select_clause_t)->case_idx_ = CASE0; (yyval.select_clause_t)->opt_all_or_distinct_ = (yyvsp[-5].opt_all_or_distinct_t); (yyval.select_clause_t)->select_target_ = (yyvsp[-4].select_target_t); (yyval.select_clause_t)->opt_from_clause_ = (yyvsp[-3].opt_from_clause_t); (yyval.select_clause_t)->opt_where_clause_ = (yyvsp[-2].opt_where_clause_t); (yyval.select_clause_t)->opt_group_clause_ = (yyvsp[-1].opt_group_clause_t); (yyval.select_clause_t)->opt_window_clause_ = (yyvsp[0].opt_window_clause_t); } #line 3724 "bison_parser.cpp" /* yacc.c:1652 */ break; case 28: #line 627 "bison.y" /* yacc.c:1652 */ { (yyval.combine_clause_t) = new CombineClause(); (yyval.combine_clause_t)->case_idx_ = CASE0; } #line 3734 "bison_parser.cpp" /* yacc.c:1652 */ break; case 29: #line 632 "bison.y" /* yacc.c:1652 */ { (yyval.combine_clause_t) = new CombineClause(); (yyval.combine_clause_t)->case_idx_ = CASE1; } #line 3744 "bison_parser.cpp" /* yacc.c:1652 */ break; case 30: #line 637 "bison.y" /* yacc.c:1652 */ { (yyval.combine_clause_t) = new CombineClause(); (yyval.combine_clause_t)->case_idx_ = CASE2; } #line 3754 "bison_parser.cpp" /* yacc.c:1652 */ break; case 31: #line 645 "bison.y" /* yacc.c:1652 */ { (yyval.opt_from_clause_t) = new OptFromClause(); (yyval.opt_from_clause_t)->case_idx_ = CASE0; (yyval.opt_from_clause_t)->from_clause_ = (yyvsp[0].from_clause_t); } #line 3765 "bison_parser.cpp" /* yacc.c:1652 */ break; case 32: #line 651 "bison.y" /* yacc.c:1652 */ { (yyval.opt_from_clause_t) = new OptFromClause(); (yyval.opt_from_clause_t)->case_idx_ = CASE1; } #line 3775 "bison_parser.cpp" /* yacc.c:1652 */ break; case 33: #line 659 "bison.y" /* yacc.c:1652 */ { (yyval.select_target_t) = new SelectTarget(); (yyval.select_target_t)->case_idx_ = CASE0; (yyval.select_target_t)->expr_list_ = (yyvsp[0].expr_list_t); } #line 3786 "bison_parser.cpp" /* yacc.c:1652 */ break; case 34: #line 668 "bison.y" /* yacc.c:1652 */ { (yyval.opt_window_clause_t) = new OptWindowClause(); (yyval.opt_window_clause_t)->case_idx_ = CASE0; (yyval.opt_window_clause_t)->window_clause_ = (yyvsp[0].window_clause_t); } #line 3797 "bison_parser.cpp" /* yacc.c:1652 */ break; case 35: #line 674 "bison.y" /* yacc.c:1652 */ { (yyval.opt_window_clause_t) = new OptWindowClause(); (yyval.opt_window_clause_t)->case_idx_ = CASE1; } #line 3807 "bison_parser.cpp" /* yacc.c:1652 */ break; case 36: #line 682 "bison.y" /* yacc.c:1652 */ { (yyval.window_clause_t) = new WindowClause(); (yyval.window_clause_t)->case_idx_ = CASE0; (yyval.window_clause_t)->window_def_list_ = (yyvsp[0].window_def_list_t); } #line 3818 "bison_parser.cpp" /* yacc.c:1652 */ break; case 37: #line 691 "bison.y" /* yacc.c:1652 */ { (yyval.window_def_list_t) = new WindowDefList(); (yyval.window_def_list_t)->case_idx_ = CASE0; (yyval.window_def_list_t)->window_def_ = (yyvsp[0].window_def_t); } #line 3829 "bison_parser.cpp" /* yacc.c:1652 */ break; case 38: #line 697 "bison.y" /* yacc.c:1652 */ { (yyval.window_def_list_t) = new WindowDefList(); (yyval.window_def_list_t)->case_idx_ = CASE1; (yyval.window_def_list_t)->window_def_ = (yyvsp[-2].window_def_t); (yyval.window_def_list_t)->window_def_list_ = (yyvsp[0].window_def_list_t); } #line 3841 "bison_parser.cpp" /* yacc.c:1652 */ break; case 39: #line 707 "bison.y" /* yacc.c:1652 */ { (yyval.window_def_t) = new WindowDef(); (yyval.window_def_t)->case_idx_ = CASE0; (yyval.window_def_t)->window_name_ = (yyvsp[-4].window_name_t); (yyval.window_def_t)->window_ = (yyvsp[-1].window_t); if ((yyval.window_def_t)) { auto tmp1 = (yyval.window_def_t)->window_name_; if (tmp1) { auto tmp2 = tmp1->identifier_; if (tmp2) { tmp2->data_type_ = kDataWindowName; tmp2->scope_ = 1; tmp2->data_flag_ = (DATAFLAG)1; } } } } #line 3865 "bison_parser.cpp" /* yacc.c:1652 */ break; case 40: #line 729 "bison.y" /* yacc.c:1652 */ { (yyval.window_name_t) = new WindowName(); (yyval.window_name_t)->case_idx_ = CASE0; (yyval.window_name_t)->identifier_ = (yyvsp[0].identifier_t); } #line 3876 "bison_parser.cpp" /* yacc.c:1652 */ break; case 41: #line 738 "bison.y" /* yacc.c:1652 */ { (yyval.window_t) = new Window(); (yyval.window_t)->case_idx_ = CASE0; (yyval.window_t)->opt_exist_window_name_ = (yyvsp[-3].opt_exist_window_name_t); (yyval.window_t)->opt_partition_ = (yyvsp[-2].opt_partition_t); (yyval.window_t)->opt_order_clause_ = (yyvsp[-1].opt_order_clause_t); (yyval.window_t)->opt_frame_clause_ = (yyvsp[0].opt_frame_clause_t); } #line 3890 "bison_parser.cpp" /* yacc.c:1652 */ break; case 42: #line 750 "bison.y" /* yacc.c:1652 */ { (yyval.opt_partition_t) = new OptPartition(); (yyval.opt_partition_t)->case_idx_ = CASE0; (yyval.opt_partition_t)->expr_list_ = (yyvsp[0].expr_list_t); } #line 3901 "bison_parser.cpp" /* yacc.c:1652 */ break; case 43: #line 756 "bison.y" /* yacc.c:1652 */ { (yyval.opt_partition_t) = new OptPartition(); (yyval.opt_partition_t)->case_idx_ = CASE1; } #line 3911 "bison_parser.cpp" /* yacc.c:1652 */ break; case 44: #line 764 "bison.y" /* yacc.c:1652 */ { (yyval.opt_frame_clause_t) = new OptFrameClause(); (yyval.opt_frame_clause_t)->case_idx_ = CASE0; (yyval.opt_frame_clause_t)->range_or_rows_ = (yyvsp[-1].range_or_rows_t); (yyval.opt_frame_clause_t)->frame_bound_start_ = (yyvsp[0].frame_bound_start_t); } #line 3923 "bison_parser.cpp" /* yacc.c:1652 */ break; case 45: #line 771 "bison.y" /* yacc.c:1652 */ { (yyval.opt_frame_clause_t) = new OptFrameClause(); (yyval.opt_frame_clause_t)->case_idx_ = CASE1; (yyval.opt_frame_clause_t)->range_or_rows_ = (yyvsp[-4].range_or_rows_t); (yyval.opt_frame_clause_t)->frame_bound_start_ = (yyvsp[-2].frame_bound_start_t); (yyval.opt_frame_clause_t)->frame_bound_end_ = (yyvsp[0].frame_bound_end_t); } #line 3936 "bison_parser.cpp" /* yacc.c:1652 */ break; case 46: #line 779 "bison.y" /* yacc.c:1652 */ { (yyval.opt_frame_clause_t) = new OptFrameClause(); (yyval.opt_frame_clause_t)->case_idx_ = CASE2; } #line 3946 "bison_parser.cpp" /* yacc.c:1652 */ break; case 47: #line 787 "bison.y" /* yacc.c:1652 */ { (yyval.range_or_rows_t) = new RangeOrRows(); (yyval.range_or_rows_t)->case_idx_ = CASE0; } #line 3956 "bison_parser.cpp" /* yacc.c:1652 */ break; case 48: #line 792 "bison.y" /* yacc.c:1652 */ { (yyval.range_or_rows_t) = new RangeOrRows(); (yyval.range_or_rows_t)->case_idx_ = CASE1; } #line 3966 "bison_parser.cpp" /* yacc.c:1652 */ break; case 49: #line 797 "bison.y" /* yacc.c:1652 */ { (yyval.range_or_rows_t) = new RangeOrRows(); (yyval.range_or_rows_t)->case_idx_ = CASE2; } #line 3976 "bison_parser.cpp" /* yacc.c:1652 */ break; case 50: #line 805 "bison.y" /* yacc.c:1652 */ { (yyval.frame_bound_start_t) = new FrameBoundStart(); (yyval.frame_bound_start_t)->case_idx_ = CASE0; (yyval.frame_bound_start_t)->frame_bound_ = (yyvsp[0].frame_bound_t); } #line 3987 "bison_parser.cpp" /* yacc.c:1652 */ break; case 51: #line 811 "bison.y" /* yacc.c:1652 */ { (yyval.frame_bound_start_t) = new FrameBoundStart(); (yyval.frame_bound_start_t)->case_idx_ = CASE1; } #line 3997 "bison_parser.cpp" /* yacc.c:1652 */ break; case 52: #line 819 "bison.y" /* yacc.c:1652 */ { (yyval.frame_bound_end_t) = new FrameBoundEnd(); (yyval.frame_bound_end_t)->case_idx_ = CASE0; (yyval.frame_bound_end_t)->frame_bound_ = (yyvsp[0].frame_bound_t); } #line 4008 "bison_parser.cpp" /* yacc.c:1652 */ break; case 53: #line 825 "bison.y" /* yacc.c:1652 */ { (yyval.frame_bound_end_t) = new FrameBoundEnd(); (yyval.frame_bound_end_t)->case_idx_ = CASE1; } #line 4018 "bison_parser.cpp" /* yacc.c:1652 */ break; case 54: #line 833 "bison.y" /* yacc.c:1652 */ { (yyval.frame_bound_t) = new FrameBound(); (yyval.frame_bound_t)->case_idx_ = CASE0; (yyval.frame_bound_t)->expr_ = (yyvsp[-1].expr_t); } #line 4029 "bison_parser.cpp" /* yacc.c:1652 */ break; case 55: #line 839 "bison.y" /* yacc.c:1652 */ { (yyval.frame_bound_t) = new FrameBound(); (yyval.frame_bound_t)->case_idx_ = CASE1; (yyval.frame_bound_t)->expr_ = (yyvsp[-1].expr_t); } #line 4040 "bison_parser.cpp" /* yacc.c:1652 */ break; case 56: #line 845 "bison.y" /* yacc.c:1652 */ { (yyval.frame_bound_t) = new FrameBound(); (yyval.frame_bound_t)->case_idx_ = CASE2; } #line 4050 "bison_parser.cpp" /* yacc.c:1652 */ break; case 57: #line 853 "bison.y" /* yacc.c:1652 */ { (yyval.opt_exist_window_name_t) = new OptExistWindowName(); (yyval.opt_exist_window_name_t)->case_idx_ = CASE0; (yyval.opt_exist_window_name_t)->identifier_ = (yyvsp[0].identifier_t); if ((yyval.opt_exist_window_name_t)) { auto tmp1 = (yyval.opt_exist_window_name_t)->identifier_; if (tmp1) { tmp1->data_type_ = kDataWindowName; tmp1->scope_ = 1; tmp1->data_flag_ = (DATAFLAG)8; } } } #line 4070 "bison_parser.cpp" /* yacc.c:1652 */ break; case 58: #line 868 "bison.y" /* yacc.c:1652 */ { (yyval.opt_exist_window_name_t) = new OptExistWindowName(); (yyval.opt_exist_window_name_t)->case_idx_ = CASE1; } #line 4080 "bison_parser.cpp" /* yacc.c:1652 */ break; case 59: #line 876 "bison.y" /* yacc.c:1652 */ { (yyval.opt_group_clause_t) = new OptGroupClause(); (yyval.opt_group_clause_t)->case_idx_ = CASE0; (yyval.opt_group_clause_t)->expr_list_ = (yyvsp[-1].expr_list_t); (yyval.opt_group_clause_t)->opt_having_clause_ = (yyvsp[0].opt_having_clause_t); } #line 4092 "bison_parser.cpp" /* yacc.c:1652 */ break; case 60: #line 883 "bison.y" /* yacc.c:1652 */ { (yyval.opt_group_clause_t) = new OptGroupClause(); (yyval.opt_group_clause_t)->case_idx_ = CASE1; } #line 4102 "bison_parser.cpp" /* yacc.c:1652 */ break; case 61: #line 891 "bison.y" /* yacc.c:1652 */ { (yyval.opt_having_clause_t) = new OptHavingClause(); (yyval.opt_having_clause_t)->case_idx_ = CASE0; (yyval.opt_having_clause_t)->expr_ = (yyvsp[0].expr_t); } #line 4113 "bison_parser.cpp" /* yacc.c:1652 */ break; case 62: #line 897 "bison.y" /* yacc.c:1652 */ { (yyval.opt_having_clause_t) = new OptHavingClause(); (yyval.opt_having_clause_t)->case_idx_ = CASE1; } #line 4123 "bison_parser.cpp" /* yacc.c:1652 */ break; case 63: #line 905 "bison.y" /* yacc.c:1652 */ { (yyval.opt_where_clause_t) = new OptWhereClause(); (yyval.opt_where_clause_t)->case_idx_ = CASE0; (yyval.opt_where_clause_t)->where_clause_ = (yyvsp[0].where_clause_t); } #line 4134 "bison_parser.cpp" /* yacc.c:1652 */ break; case 64: #line 911 "bison.y" /* yacc.c:1652 */ { (yyval.opt_where_clause_t) = new OptWhereClause(); (yyval.opt_where_clause_t)->case_idx_ = CASE1; } #line 4144 "bison_parser.cpp" /* yacc.c:1652 */ break; case 65: #line 919 "bison.y" /* yacc.c:1652 */ { (yyval.where_clause_t) = new WhereClause(); (yyval.where_clause_t)->case_idx_ = CASE0; (yyval.where_clause_t)->expr_ = (yyvsp[0].expr_t); } #line 4155 "bison_parser.cpp" /* yacc.c:1652 */ break; case 66: #line 928 "bison.y" /* yacc.c:1652 */ { (yyval.from_clause_t) = new FromClause(); (yyval.from_clause_t)->case_idx_ = CASE0; (yyval.from_clause_t)->table_ref_ = (yyvsp[0].table_ref_t); } #line 4166 "bison_parser.cpp" /* yacc.c:1652 */ break; case 67: #line 937 "bison.y" /* yacc.c:1652 */ { (yyval.table_ref_t) = new TableRef(); (yyval.table_ref_t)->case_idx_ = CASE0; (yyval.table_ref_t)->opt_table_prefix_ = (yyvsp[-5].opt_table_prefix_t); (yyval.table_ref_t)->table_name_ = (yyvsp[-4].table_name_t); (yyval.table_ref_t)->opt_as_alias_ = (yyvsp[-3].opt_as_alias_t); (yyval.table_ref_t)->opt_index_ = (yyvsp[-2].opt_index_t); (yyval.table_ref_t)->opt_on_ = (yyvsp[-1].opt_on_t); (yyval.table_ref_t)->opt_using_ = (yyvsp[0].opt_using_t); } #line 4182 "bison_parser.cpp" /* yacc.c:1652 */ break; case 68: #line 948 "bison.y" /* yacc.c:1652 */ { (yyval.table_ref_t) = new TableRef(); (yyval.table_ref_t)->case_idx_ = CASE1; (yyval.table_ref_t)->opt_table_prefix_ = (yyvsp[-7].opt_table_prefix_t); (yyval.table_ref_t)->function_name_ = (yyvsp[-6].function_name_t); (yyval.table_ref_t)->expr_list_ = (yyvsp[-4].expr_list_t); (yyval.table_ref_t)->opt_as_alias_ = (yyvsp[-2].opt_as_alias_t); (yyval.table_ref_t)->opt_on_ = (yyvsp[-1].opt_on_t); (yyval.table_ref_t)->opt_using_ = (yyvsp[0].opt_using_t); } #line 4198 "bison_parser.cpp" /* yacc.c:1652 */ break; case 69: #line 959 "bison.y" /* yacc.c:1652 */ { (yyval.table_ref_t) = new TableRef(); (yyval.table_ref_t)->case_idx_ = CASE2; (yyval.table_ref_t)->opt_table_prefix_ = (yyvsp[-6].opt_table_prefix_t); (yyval.table_ref_t)->select_no_parens_ = (yyvsp[-4].select_no_parens_t); (yyval.table_ref_t)->opt_as_alias_ = (yyvsp[-2].opt_as_alias_t); (yyval.table_ref_t)->opt_on_ = (yyvsp[-1].opt_on_t); (yyval.table_ref_t)->opt_using_ = (yyvsp[0].opt_using_t); } #line 4213 "bison_parser.cpp" /* yacc.c:1652 */ break; case 70: #line 969 "bison.y" /* yacc.c:1652 */ { (yyval.table_ref_t) = new TableRef(); (yyval.table_ref_t)->case_idx_ = CASE3; (yyval.table_ref_t)->opt_table_prefix_ = (yyvsp[-6].opt_table_prefix_t); (yyval.table_ref_t)->table_ref_ = (yyvsp[-4].table_ref_t); (yyval.table_ref_t)->opt_as_alias_ = (yyvsp[-2].opt_as_alias_t); (yyval.table_ref_t)->opt_on_ = (yyvsp[-1].opt_on_t); (yyval.table_ref_t)->opt_using_ = (yyvsp[0].opt_using_t); } #line 4228 "bison_parser.cpp" /* yacc.c:1652 */ break; case 71: #line 982 "bison.y" /* yacc.c:1652 */ { (yyval.opt_index_t) = new OptIndex(); (yyval.opt_index_t)->case_idx_ = CASE0; (yyval.opt_index_t)->column_name_ = (yyvsp[0].column_name_t); } #line 4239 "bison_parser.cpp" /* yacc.c:1652 */ break; case 72: #line 988 "bison.y" /* yacc.c:1652 */ { (yyval.opt_index_t) = new OptIndex(); (yyval.opt_index_t)->case_idx_ = CASE1; } #line 4249 "bison_parser.cpp" /* yacc.c:1652 */ break; case 73: #line 993 "bison.y" /* yacc.c:1652 */ { (yyval.opt_index_t) = new OptIndex(); (yyval.opt_index_t)->case_idx_ = CASE2; } #line 4259 "bison_parser.cpp" /* yacc.c:1652 */ break; case 74: #line 1001 "bison.y" /* yacc.c:1652 */ { (yyval.opt_on_t) = new OptOn(); (yyval.opt_on_t)->case_idx_ = CASE0; (yyval.opt_on_t)->expr_ = (yyvsp[0].expr_t); } #line 4270 "bison_parser.cpp" /* yacc.c:1652 */ break; case 75: #line 1007 "bison.y" /* yacc.c:1652 */ { (yyval.opt_on_t) = new OptOn(); (yyval.opt_on_t)->case_idx_ = CASE1; } #line 4280 "bison_parser.cpp" /* yacc.c:1652 */ break; case 76: #line 1015 "bison.y" /* yacc.c:1652 */ { (yyval.opt_using_t) = new OptUsing(); (yyval.opt_using_t)->case_idx_ = CASE0; (yyval.opt_using_t)->column_name_list_ = (yyvsp[-1].column_name_list_t); } #line 4291 "bison_parser.cpp" /* yacc.c:1652 */ break; case 77: #line 1021 "bison.y" /* yacc.c:1652 */ { (yyval.opt_using_t) = new OptUsing(); (yyval.opt_using_t)->case_idx_ = CASE1; } #line 4301 "bison_parser.cpp" /* yacc.c:1652 */ break; case 78: #line 1029 "bison.y" /* yacc.c:1652 */ { (yyval.column_name_list_t) = new ColumnNameList(); (yyval.column_name_list_t)->case_idx_ = CASE0; (yyval.column_name_list_t)->column_name_ = (yyvsp[0].column_name_t); } #line 4312 "bison_parser.cpp" /* yacc.c:1652 */ break; case 79: #line 1035 "bison.y" /* yacc.c:1652 */ { (yyval.column_name_list_t) = new ColumnNameList(); (yyval.column_name_list_t)->case_idx_ = CASE1; (yyval.column_name_list_t)->column_name_ = (yyvsp[-2].column_name_t); (yyval.column_name_list_t)->column_name_list_ = (yyvsp[0].column_name_list_t); } #line 4324 "bison_parser.cpp" /* yacc.c:1652 */ break; case 80: #line 1045 "bison.y" /* yacc.c:1652 */ { (yyval.opt_table_prefix_t) = new OptTablePrefix(); (yyval.opt_table_prefix_t)->case_idx_ = CASE0; (yyval.opt_table_prefix_t)->table_ref_ = (yyvsp[-1].table_ref_t); (yyval.opt_table_prefix_t)->join_op_ = (yyvsp[0].join_op_t); } #line 4336 "bison_parser.cpp" /* yacc.c:1652 */ break; case 81: #line 1052 "bison.y" /* yacc.c:1652 */ { (yyval.opt_table_prefix_t) = new OptTablePrefix(); (yyval.opt_table_prefix_t)->case_idx_ = CASE1; } #line 4346 "bison_parser.cpp" /* yacc.c:1652 */ break; case 82: #line 1060 "bison.y" /* yacc.c:1652 */ { (yyval.join_op_t) = new JoinOp(); (yyval.join_op_t)->case_idx_ = CASE0; } #line 4356 "bison_parser.cpp" /* yacc.c:1652 */ break; case 83: #line 1065 "bison.y" /* yacc.c:1652 */ { (yyval.join_op_t) = new JoinOp(); (yyval.join_op_t)->case_idx_ = CASE1; } #line 4366 "bison_parser.cpp" /* yacc.c:1652 */ break; case 84: #line 1070 "bison.y" /* yacc.c:1652 */ { (yyval.join_op_t) = new JoinOp(); (yyval.join_op_t)->case_idx_ = CASE2; (yyval.join_op_t)->opt_join_type_ = (yyvsp[-1].opt_join_type_t); } #line 4377 "bison_parser.cpp" /* yacc.c:1652 */ break; case 85: #line 1079 "bison.y" /* yacc.c:1652 */ { (yyval.opt_join_type_t) = new OptJoinType(); (yyval.opt_join_type_t)->case_idx_ = CASE0; } #line 4387 "bison_parser.cpp" /* yacc.c:1652 */ break; case 86: #line 1084 "bison.y" /* yacc.c:1652 */ { (yyval.opt_join_type_t) = new OptJoinType(); (yyval.opt_join_type_t)->case_idx_ = CASE1; } #line 4397 "bison_parser.cpp" /* yacc.c:1652 */ break; case 87: #line 1089 "bison.y" /* yacc.c:1652 */ { (yyval.opt_join_type_t) = new OptJoinType(); (yyval.opt_join_type_t)->case_idx_ = CASE2; } #line 4407 "bison_parser.cpp" /* yacc.c:1652 */ break; case 88: #line 1094 "bison.y" /* yacc.c:1652 */ { (yyval.opt_join_type_t) = new OptJoinType(); (yyval.opt_join_type_t)->case_idx_ = CASE3; } #line 4417 "bison_parser.cpp" /* yacc.c:1652 */ break; case 89: #line 1099 "bison.y" /* yacc.c:1652 */ { (yyval.opt_join_type_t) = new OptJoinType(); (yyval.opt_join_type_t)->case_idx_ = CASE4; } #line 4427 "bison_parser.cpp" /* yacc.c:1652 */ break; case 90: #line 1107 "bison.y" /* yacc.c:1652 */ { (yyval.expr_list_t) = new ExprList(); (yyval.expr_list_t)->case_idx_ = CASE0; (yyval.expr_list_t)->expr_ = (yyvsp[-3].expr_t); (yyval.expr_list_t)->opt_as_alias_ = (yyvsp[-2].opt_as_alias_t); (yyval.expr_list_t)->expr_list_ = (yyvsp[0].expr_list_t); } #line 4440 "bison_parser.cpp" /* yacc.c:1652 */ break; case 91: #line 1115 "bison.y" /* yacc.c:1652 */ { (yyval.expr_list_t) = new ExprList(); (yyval.expr_list_t)->case_idx_ = CASE1; (yyval.expr_list_t)->expr_ = (yyvsp[-1].expr_t); (yyval.expr_list_t)->opt_as_alias_ = (yyvsp[0].opt_as_alias_t); } #line 4452 "bison_parser.cpp" /* yacc.c:1652 */ break; case 92: #line 1125 "bison.y" /* yacc.c:1652 */ { (yyval.opt_limit_clause_t) = new OptLimitClause(); (yyval.opt_limit_clause_t)->case_idx_ = CASE0; (yyval.opt_limit_clause_t)->limit_clause_ = (yyvsp[0].limit_clause_t); } #line 4463 "bison_parser.cpp" /* yacc.c:1652 */ break; case 93: #line 1131 "bison.y" /* yacc.c:1652 */ { (yyval.opt_limit_clause_t) = new OptLimitClause(); (yyval.opt_limit_clause_t)->case_idx_ = CASE1; } #line 4473 "bison_parser.cpp" /* yacc.c:1652 */ break; case 94: #line 1139 "bison.y" /* yacc.c:1652 */ { (yyval.limit_clause_t) = new LimitClause(); (yyval.limit_clause_t)->case_idx_ = CASE0; (yyval.limit_clause_t)->expr_1_ = (yyvsp[0].expr_t); } #line 4484 "bison_parser.cpp" /* yacc.c:1652 */ break; case 95: #line 1145 "bison.y" /* yacc.c:1652 */ { (yyval.limit_clause_t) = new LimitClause(); (yyval.limit_clause_t)->case_idx_ = CASE1; (yyval.limit_clause_t)->expr_1_ = (yyvsp[-2].expr_t); (yyval.limit_clause_t)->expr_2_ = (yyvsp[0].expr_t); } #line 4496 "bison_parser.cpp" /* yacc.c:1652 */ break; case 96: #line 1152 "bison.y" /* yacc.c:1652 */ { (yyval.limit_clause_t) = new LimitClause(); (yyval.limit_clause_t)->case_idx_ = CASE2; (yyval.limit_clause_t)->expr_1_ = (yyvsp[-2].expr_t); (yyval.limit_clause_t)->expr_2_ = (yyvsp[0].expr_t); } #line 4508 "bison_parser.cpp" /* yacc.c:1652 */ break; case 97: #line 1162 "bison.y" /* yacc.c:1652 */ { (yyval.opt_limit_row_count_t) = new OptLimitRowCount(); (yyval.opt_limit_row_count_t)->case_idx_ = CASE0; (yyval.opt_limit_row_count_t)->expr_ = (yyvsp[0].expr_t); } #line 4519 "bison_parser.cpp" /* yacc.c:1652 */ break; case 98: #line 1168 "bison.y" /* yacc.c:1652 */ { (yyval.opt_limit_row_count_t) = new OptLimitRowCount(); (yyval.opt_limit_row_count_t)->case_idx_ = CASE1; } #line 4529 "bison_parser.cpp" /* yacc.c:1652 */ break; case 99: #line 1176 "bison.y" /* yacc.c:1652 */ { (yyval.opt_order_clause_t) = new OptOrderClause(); (yyval.opt_order_clause_t)->case_idx_ = CASE0; (yyval.opt_order_clause_t)->order_item_list_ = (yyvsp[0].order_item_list_t); } #line 4540 "bison_parser.cpp" /* yacc.c:1652 */ break; case 100: #line 1182 "bison.y" /* yacc.c:1652 */ { (yyval.opt_order_clause_t) = new OptOrderClause(); (yyval.opt_order_clause_t)->case_idx_ = CASE1; } #line 4550 "bison_parser.cpp" /* yacc.c:1652 */ break; case 101: #line 1190 "bison.y" /* yacc.c:1652 */ { (yyval.opt_order_nulls_t) = new OptOrderNulls(); (yyval.opt_order_nulls_t)->case_idx_ = CASE0; } #line 4560 "bison_parser.cpp" /* yacc.c:1652 */ break; case 102: #line 1195 "bison.y" /* yacc.c:1652 */ { (yyval.opt_order_nulls_t) = new OptOrderNulls(); (yyval.opt_order_nulls_t)->case_idx_ = CASE1; } #line 4570 "bison_parser.cpp" /* yacc.c:1652 */ break; case 103: #line 1200 "bison.y" /* yacc.c:1652 */ { (yyval.opt_order_nulls_t) = new OptOrderNulls(); (yyval.opt_order_nulls_t)->case_idx_ = CASE2; } #line 4580 "bison_parser.cpp" /* yacc.c:1652 */ break; case 104: #line 1208 "bison.y" /* yacc.c:1652 */ { (yyval.order_item_list_t) = new OrderItemList(); (yyval.order_item_list_t)->case_idx_ = CASE0; (yyval.order_item_list_t)->order_item_ = (yyvsp[0].order_item_t); } #line 4591 "bison_parser.cpp" /* yacc.c:1652 */ break; case 105: #line 1214 "bison.y" /* yacc.c:1652 */ { (yyval.order_item_list_t) = new OrderItemList(); (yyval.order_item_list_t)->case_idx_ = CASE1; (yyval.order_item_list_t)->order_item_ = (yyvsp[-2].order_item_t); (yyval.order_item_list_t)->order_item_list_ = (yyvsp[0].order_item_list_t); } #line 4603 "bison_parser.cpp" /* yacc.c:1652 */ break; case 106: #line 1224 "bison.y" /* yacc.c:1652 */ { (yyval.order_item_t) = new OrderItem(); (yyval.order_item_t)->case_idx_ = CASE0; (yyval.order_item_t)->expr_ = (yyvsp[-2].expr_t); (yyval.order_item_t)->opt_order_behavior_ = (yyvsp[-1].opt_order_behavior_t); (yyval.order_item_t)->opt_order_nulls_ = (yyvsp[0].opt_order_nulls_t); } #line 4616 "bison_parser.cpp" /* yacc.c:1652 */ break; case 107: #line 1235 "bison.y" /* yacc.c:1652 */ { (yyval.opt_order_behavior_t) = new OptOrderBehavior(); (yyval.opt_order_behavior_t)->case_idx_ = CASE0; } #line 4626 "bison_parser.cpp" /* yacc.c:1652 */ break; case 108: #line 1240 "bison.y" /* yacc.c:1652 */ { (yyval.opt_order_behavior_t) = new OptOrderBehavior(); (yyval.opt_order_behavior_t)->case_idx_ = CASE1; } #line 4636 "bison_parser.cpp" /* yacc.c:1652 */ break; case 109: #line 1245 "bison.y" /* yacc.c:1652 */ { (yyval.opt_order_behavior_t) = new OptOrderBehavior(); (yyval.opt_order_behavior_t)->case_idx_ = CASE2; } #line 4646 "bison_parser.cpp" /* yacc.c:1652 */ break; case 110: #line 1253 "bison.y" /* yacc.c:1652 */ { (yyval.opt_with_clause_t) = new OptWithClause(); (yyval.opt_with_clause_t)->case_idx_ = CASE0; (yyval.opt_with_clause_t)->cte_table_list_ = (yyvsp[0].cte_table_list_t); } #line 4657 "bison_parser.cpp" /* yacc.c:1652 */ break; case 111: #line 1259 "bison.y" /* yacc.c:1652 */ { (yyval.opt_with_clause_t) = new OptWithClause(); (yyval.opt_with_clause_t)->case_idx_ = CASE1; (yyval.opt_with_clause_t)->cte_table_list_ = (yyvsp[0].cte_table_list_t); } #line 4668 "bison_parser.cpp" /* yacc.c:1652 */ break; case 112: #line 1265 "bison.y" /* yacc.c:1652 */ { (yyval.opt_with_clause_t) = new OptWithClause(); (yyval.opt_with_clause_t)->case_idx_ = CASE2; } #line 4678 "bison_parser.cpp" /* yacc.c:1652 */ break; case 113: #line 1273 "bison.y" /* yacc.c:1652 */ { (yyval.cte_table_list_t) = new CteTableList(); (yyval.cte_table_list_t)->case_idx_ = CASE0; (yyval.cte_table_list_t)->cte_table_ = (yyvsp[0].cte_table_t); } #line 4689 "bison_parser.cpp" /* yacc.c:1652 */ break; case 114: #line 1279 "bison.y" /* yacc.c:1652 */ { (yyval.cte_table_list_t) = new CteTableList(); (yyval.cte_table_list_t)->case_idx_ = CASE1; (yyval.cte_table_list_t)->cte_table_ = (yyvsp[-2].cte_table_t); (yyval.cte_table_list_t)->cte_table_list_ = (yyvsp[0].cte_table_list_t); } #line 4701 "bison_parser.cpp" /* yacc.c:1652 */ break; case 115: #line 1289 "bison.y" /* yacc.c:1652 */ { (yyval.cte_table_t) = new CteTable(); (yyval.cte_table_t)->case_idx_ = CASE0; (yyval.cte_table_t)->cte_table_name_ = (yyvsp[-4].cte_table_name_t); (yyval.cte_table_t)->select_stmt_ = (yyvsp[-1].select_stmt_t); } #line 4713 "bison_parser.cpp" /* yacc.c:1652 */ break; case 116: #line 1299 "bison.y" /* yacc.c:1652 */ { (yyval.cte_table_name_t) = new CteTableName(); (yyval.cte_table_name_t)->case_idx_ = CASE0; (yyval.cte_table_name_t)->table_name_ = (yyvsp[-1].table_name_t); (yyval.cte_table_name_t)->opt_column_name_list_p_ = (yyvsp[0].opt_column_name_list_p_t); } #line 4725 "bison_parser.cpp" /* yacc.c:1652 */ break; case 117: #line 1309 "bison.y" /* yacc.c:1652 */ { (yyval.opt_all_or_distinct_t) = new OptAllOrDistinct(); (yyval.opt_all_or_distinct_t)->case_idx_ = CASE0; } #line 4735 "bison_parser.cpp" /* yacc.c:1652 */ break; case 118: #line 1314 "bison.y" /* yacc.c:1652 */ { (yyval.opt_all_or_distinct_t) = new OptAllOrDistinct(); (yyval.opt_all_or_distinct_t)->case_idx_ = CASE1; } #line 4745 "bison_parser.cpp" /* yacc.c:1652 */ break; case 119: #line 1319 "bison.y" /* yacc.c:1652 */ { (yyval.opt_all_or_distinct_t) = new OptAllOrDistinct(); (yyval.opt_all_or_distinct_t)->case_idx_ = CASE2; } #line 4755 "bison_parser.cpp" /* yacc.c:1652 */ break; case 120: #line 1327 "bison.y" /* yacc.c:1652 */ { (yyval.create_table_stmt_t) = new CreateTableStmt(); (yyval.create_table_stmt_t)->case_idx_ = CASE0; (yyval.create_table_stmt_t)->opt_temp_ = (yyvsp[-7].opt_temp_t); (yyval.create_table_stmt_t)->opt_if_not_exist_ = (yyvsp[-5].opt_if_not_exist_t); (yyval.create_table_stmt_t)->table_name_ = (yyvsp[-4].table_name_t); (yyval.create_table_stmt_t)->opt_table_option_list_ = (yyvsp[-3].opt_table_option_list_t); (yyval.create_table_stmt_t)->opt_ignore_or_replace_ = (yyvsp[-2].opt_ignore_or_replace_t); (yyval.create_table_stmt_t)->select_stmt_ = (yyvsp[0].select_stmt_t); if ((yyval.create_table_stmt_t)) { auto tmp1 = (yyval.create_table_stmt_t)->table_name_; if (tmp1) { auto tmp2 = tmp1->identifier_; if (tmp2) { tmp2->data_type_ = kDataTableName; tmp2->scope_ = 1; tmp2->data_flag_ = (DATAFLAG)128; } } } } #line 4783 "bison_parser.cpp" /* yacc.c:1652 */ break; case 121: #line 1350 "bison.y" /* yacc.c:1652 */ { (yyval.create_table_stmt_t) = new CreateTableStmt(); (yyval.create_table_stmt_t)->case_idx_ = CASE1; (yyval.create_table_stmt_t)->opt_temp_ = (yyvsp[-8].opt_temp_t); (yyval.create_table_stmt_t)->opt_if_not_exist_ = (yyvsp[-6].opt_if_not_exist_t); (yyval.create_table_stmt_t)->table_name_ = (yyvsp[-5].table_name_t); (yyval.create_table_stmt_t)->column_def_list_ = (yyvsp[-3].column_def_list_t); (yyval.create_table_stmt_t)->opt_table_constraint_list_ = (yyvsp[-2].opt_table_constraint_list_t); (yyval.create_table_stmt_t)->opt_table_option_list_ = (yyvsp[0].opt_table_option_list_t); if ((yyval.create_table_stmt_t)) { auto tmp1 = (yyval.create_table_stmt_t)->table_name_; if (tmp1) { auto tmp2 = tmp1->identifier_; if (tmp2) { tmp2->data_type_ = kDataTableName; tmp2->scope_ = 1; tmp2->data_flag_ = (DATAFLAG)1; } } } if ((yyval.create_table_stmt_t)) { auto tmp1 = (yyval.create_table_stmt_t)->column_def_list_; while (tmp1) { auto tmp2 = tmp1->column_def_; if (tmp2) { auto tmp3 = tmp2->identifier_; if (tmp3) { tmp3->data_type_ = kDataColumnName; tmp3->scope_ = 2; tmp3->data_flag_ = (DATAFLAG)1; } } tmp1 = tmp1->column_def_list_; } } } #line 4827 "bison_parser.cpp" /* yacc.c:1652 */ break; case 122: #line 1392 "bison.y" /* yacc.c:1652 */ { (yyval.create_index_stmt_t) = new CreateIndexStmt(); (yyval.create_index_stmt_t)->case_idx_ = CASE0; (yyval.create_index_stmt_t)->opt_index_keyword_ = (yyvsp[-9].opt_index_keyword_t); (yyval.create_index_stmt_t)->table_name_1_ = (yyvsp[-7].table_name_t); (yyval.create_index_stmt_t)->table_name_2_ = (yyvsp[-5].table_name_t); (yyval.create_index_stmt_t)->indexed_column_list_ = (yyvsp[-3].indexed_column_list_t); (yyval.create_index_stmt_t)->opt_index_option_ = (yyvsp[-1].opt_index_option_t); (yyval.create_index_stmt_t)->opt_extra_option_ = (yyvsp[0].opt_extra_option_t); if ((yyval.create_index_stmt_t)) { auto tmp1 = (yyval.create_index_stmt_t)->table_name_1_; if (tmp1) { auto tmp2 = tmp1->identifier_; if (tmp2) { tmp2->data_type_ = kDataTableName; tmp2->scope_ = 2; tmp2->data_flag_ = (DATAFLAG)128; } } } if ((yyval.create_index_stmt_t)) { auto tmp1 = (yyval.create_index_stmt_t)->table_name_2_; if (tmp1) { auto tmp2 = tmp1->identifier_; if (tmp2) { tmp2->data_type_ = kDataTableName; tmp2->scope_ = 1; tmp2->data_flag_ = (DATAFLAG)8; } } } } #line 4867 "bison_parser.cpp" /* yacc.c:1652 */ break; case 123: #line 1430 "bison.y" /* yacc.c:1652 */ { (yyval.create_trigger_stmt_t) = new CreateTriggerStmt(); (yyval.create_trigger_stmt_t)->case_idx_ = CASE0; (yyval.create_trigger_stmt_t)->trigger_name_ = (yyvsp[-8].trigger_name_t); (yyval.create_trigger_stmt_t)->trigger_action_time_ = (yyvsp[-7].trigger_action_time_t); (yyval.create_trigger_stmt_t)->trigger_events_ = (yyvsp[-6].trigger_events_t); (yyval.create_trigger_stmt_t)->table_name_ = (yyvsp[-4].table_name_t); (yyval.create_trigger_stmt_t)->trigger_body_ = (yyvsp[0].trigger_body_t); if ((yyval.create_trigger_stmt_t)) { auto tmp1 = (yyval.create_trigger_stmt_t)->trigger_name_; if (tmp1) { auto tmp2 = tmp1->identifier_; if (tmp2) { tmp2->data_type_ = kDataTriggerName; tmp2->scope_ = 1; tmp2->data_flag_ = (DATAFLAG)1; } } } if ((yyval.create_trigger_stmt_t)) { auto tmp1 = (yyval.create_trigger_stmt_t)->table_name_; if (tmp1) { auto tmp2 = tmp1->identifier_; if (tmp2) { tmp2->data_type_ = kDataTableName; tmp2->scope_ = 1; tmp2->data_flag_ = (DATAFLAG)8; } } } } #line 4906 "bison_parser.cpp" /* yacc.c:1652 */ break; case 124: #line 1467 "bison.y" /* yacc.c:1652 */ { (yyval.create_view_stmt_t) = new CreateViewStmt(); (yyval.create_view_stmt_t)->case_idx_ = CASE0; (yyval.create_view_stmt_t)->opt_view_algorithm_ = (yyvsp[-7].opt_view_algorithm_t); (yyval.create_view_stmt_t)->opt_sql_security_ = (yyvsp[-6].opt_sql_security_t); (yyval.create_view_stmt_t)->view_name_ = (yyvsp[-4].view_name_t); (yyval.create_view_stmt_t)->opt_column_name_list_p_ = (yyvsp[-3].opt_column_name_list_p_t); (yyval.create_view_stmt_t)->select_stmt_ = (yyvsp[-1].select_stmt_t); (yyval.create_view_stmt_t)->opt_check_option_ = (yyvsp[0].opt_check_option_t); if ((yyval.create_view_stmt_t)) { auto tmp1 = (yyval.create_view_stmt_t)->view_name_; if (tmp1) { auto tmp2 = tmp1->identifier_; if (tmp2) { tmp2->data_type_ = kDataTableName; tmp2->scope_ = 10; tmp2->data_flag_ = (DATAFLAG)1; } } } if ((yyval.create_view_stmt_t)) { auto tmp1 = (yyval.create_view_stmt_t)->opt_column_name_list_p_; if (tmp1) { auto tmp2 = tmp1->column_name_list_; while (tmp2) { auto tmp3 = tmp2->column_name_; if (tmp3) { auto tmp4 = tmp3->identifier_; if (tmp4) { tmp4->data_type_ = kDataColumnName; tmp4->scope_ = 11; tmp4->data_flag_ = (DATAFLAG)1; } } tmp2 = tmp2->column_name_list_; } } } } #line 4953 "bison_parser.cpp" /* yacc.c:1652 */ break; case 125: #line 1509 "bison.y" /* yacc.c:1652 */ { (yyval.create_view_stmt_t) = new CreateViewStmt(); (yyval.create_view_stmt_t)->case_idx_ = CASE1; (yyval.create_view_stmt_t)->opt_view_algorithm_ = (yyvsp[-7].opt_view_algorithm_t); (yyval.create_view_stmt_t)->opt_sql_security_ = (yyvsp[-6].opt_sql_security_t); (yyval.create_view_stmt_t)->view_name_ = (yyvsp[-4].view_name_t); (yyval.create_view_stmt_t)->opt_column_name_list_p_ = (yyvsp[-3].opt_column_name_list_p_t); (yyval.create_view_stmt_t)->select_stmt_ = (yyvsp[-1].select_stmt_t); (yyval.create_view_stmt_t)->opt_check_option_ = (yyvsp[0].opt_check_option_t); if ((yyval.create_view_stmt_t)) { auto tmp1 = (yyval.create_view_stmt_t)->view_name_; if (tmp1) { auto tmp2 = tmp1->identifier_; if (tmp2) { tmp2->data_type_ = kDataTableName; tmp2->scope_ = 10; tmp2->data_flag_ = (DATAFLAG)1; } } } if ((yyval.create_view_stmt_t)) { auto tmp1 = (yyval.create_view_stmt_t)->opt_column_name_list_p_; if (tmp1) { auto tmp2 = tmp1->column_name_list_; while (tmp2) { auto tmp3 = tmp2->column_name_; if (tmp3) { auto tmp4 = tmp3->identifier_; if (tmp4) { tmp4->data_type_ = kDataColumnName; tmp4->scope_ = 11; tmp4->data_flag_ = (DATAFLAG)1; } } tmp2 = tmp2->column_name_list_; } } } } #line 5000 "bison_parser.cpp" /* yacc.c:1652 */ break; case 126: #line 1554 "bison.y" /* yacc.c:1652 */ { (yyval.opt_table_option_list_t) = new OptTableOptionList(); (yyval.opt_table_option_list_t)->case_idx_ = CASE0; (yyval.opt_table_option_list_t)->table_option_list_ = (yyvsp[0].table_option_list_t); } #line 5011 "bison_parser.cpp" /* yacc.c:1652 */ break; case 127: #line 1560 "bison.y" /* yacc.c:1652 */ { (yyval.opt_table_option_list_t) = new OptTableOptionList(); (yyval.opt_table_option_list_t)->case_idx_ = CASE1; } #line 5021 "bison_parser.cpp" /* yacc.c:1652 */ break; case 128: #line 1568 "bison.y" /* yacc.c:1652 */ { (yyval.table_option_list_t) = new TableOptionList(); (yyval.table_option_list_t)->case_idx_ = CASE0; (yyval.table_option_list_t)->table_option_ = (yyvsp[0].table_option_t); } #line 5032 "bison_parser.cpp" /* yacc.c:1652 */ break; case 129: #line 1574 "bison.y" /* yacc.c:1652 */ { (yyval.table_option_list_t) = new TableOptionList(); (yyval.table_option_list_t)->case_idx_ = CASE1; (yyval.table_option_list_t)->table_option_ = (yyvsp[-2].table_option_t); (yyval.table_option_list_t)->opt_op_comma_ = (yyvsp[-1].opt_op_comma_t); (yyval.table_option_list_t)->table_option_list_ = (yyvsp[0].table_option_list_t); } #line 5045 "bison_parser.cpp" /* yacc.c:1652 */ break; case 130: #line 1585 "bison.y" /* yacc.c:1652 */ { (yyval.table_option_t) = new TableOption(); (yyval.table_option_t)->case_idx_ = CASE0; (yyval.table_option_t)->opt_op_equal_ = (yyvsp[-1].opt_op_equal_t); } #line 5056 "bison_parser.cpp" /* yacc.c:1652 */ break; case 131: #line 1591 "bison.y" /* yacc.c:1652 */ { (yyval.table_option_t) = new TableOption(); (yyval.table_option_t)->case_idx_ = CASE1; (yyval.table_option_t)->opt_op_equal_ = (yyvsp[-1].opt_op_equal_t); } #line 5067 "bison_parser.cpp" /* yacc.c:1652 */ break; case 132: #line 1597 "bison.y" /* yacc.c:1652 */ { (yyval.table_option_t) = new TableOption(); (yyval.table_option_t)->case_idx_ = CASE2; (yyval.table_option_t)->opt_op_equal_ = (yyvsp[-1].opt_op_equal_t); } #line 5078 "bison_parser.cpp" /* yacc.c:1652 */ break; case 133: #line 1603 "bison.y" /* yacc.c:1652 */ { (yyval.table_option_t) = new TableOption(); (yyval.table_option_t)->case_idx_ = CASE3; (yyval.table_option_t)->opt_op_equal_ = (yyvsp[-1].opt_op_equal_t); } #line 5089 "bison_parser.cpp" /* yacc.c:1652 */ break; case 134: #line 1609 "bison.y" /* yacc.c:1652 */ { (yyval.table_option_t) = new TableOption(); (yyval.table_option_t)->case_idx_ = CASE4; (yyval.table_option_t)->opt_op_equal_ = (yyvsp[-1].opt_op_equal_t); } #line 5100 "bison_parser.cpp" /* yacc.c:1652 */ break; case 135: #line 1615 "bison.y" /* yacc.c:1652 */ { (yyval.table_option_t) = new TableOption(); (yyval.table_option_t)->case_idx_ = CASE5; (yyval.table_option_t)->opt_op_equal_ = (yyvsp[-1].opt_op_equal_t); } #line 5111 "bison_parser.cpp" /* yacc.c:1652 */ break; case 136: #line 1621 "bison.y" /* yacc.c:1652 */ { (yyval.table_option_t) = new TableOption(); (yyval.table_option_t)->case_idx_ = CASE6; (yyval.table_option_t)->opt_op_equal_ = (yyvsp[-1].opt_op_equal_t); } #line 5122 "bison_parser.cpp" /* yacc.c:1652 */ break; case 137: #line 1627 "bison.y" /* yacc.c:1652 */ { (yyval.table_option_t) = new TableOption(); (yyval.table_option_t)->case_idx_ = CASE7; (yyval.table_option_t)->opt_op_equal_ = (yyvsp[-1].opt_op_equal_t); } #line 5133 "bison_parser.cpp" /* yacc.c:1652 */ break; case 138: #line 1633 "bison.y" /* yacc.c:1652 */ { (yyval.table_option_t) = new TableOption(); (yyval.table_option_t)->case_idx_ = CASE8; (yyval.table_option_t)->opt_op_equal_ = (yyvsp[-1].opt_op_equal_t); } #line 5144 "bison_parser.cpp" /* yacc.c:1652 */ break; case 139: #line 1642 "bison.y" /* yacc.c:1652 */ { (yyval.opt_op_comma_t) = new OptOpComma(); (yyval.opt_op_comma_t)->case_idx_ = CASE0; } #line 5154 "bison_parser.cpp" /* yacc.c:1652 */ break; case 140: #line 1647 "bison.y" /* yacc.c:1652 */ { (yyval.opt_op_comma_t) = new OptOpComma(); (yyval.opt_op_comma_t)->case_idx_ = CASE1; } #line 5164 "bison_parser.cpp" /* yacc.c:1652 */ break; case 141: #line 1655 "bison.y" /* yacc.c:1652 */ { (yyval.opt_ignore_or_replace_t) = new OptIgnoreOrReplace(); (yyval.opt_ignore_or_replace_t)->case_idx_ = CASE0; } #line 5174 "bison_parser.cpp" /* yacc.c:1652 */ break; case 142: #line 1660 "bison.y" /* yacc.c:1652 */ { (yyval.opt_ignore_or_replace_t) = new OptIgnoreOrReplace(); (yyval.opt_ignore_or_replace_t)->case_idx_ = CASE1; } #line 5184 "bison_parser.cpp" /* yacc.c:1652 */ break; case 143: #line 1665 "bison.y" /* yacc.c:1652 */ { (yyval.opt_ignore_or_replace_t) = new OptIgnoreOrReplace(); (yyval.opt_ignore_or_replace_t)->case_idx_ = CASE2; } #line 5194 "bison_parser.cpp" /* yacc.c:1652 */ break; case 144: #line 1673 "bison.y" /* yacc.c:1652 */ { (yyval.opt_view_algorithm_t) = new OptViewAlgorithm(); (yyval.opt_view_algorithm_t)->case_idx_ = CASE0; } #line 5204 "bison_parser.cpp" /* yacc.c:1652 */ break; case 145: #line 1678 "bison.y" /* yacc.c:1652 */ { (yyval.opt_view_algorithm_t) = new OptViewAlgorithm(); (yyval.opt_view_algorithm_t)->case_idx_ = CASE1; } #line 5214 "bison_parser.cpp" /* yacc.c:1652 */ break; case 146: #line 1683 "bison.y" /* yacc.c:1652 */ { (yyval.opt_view_algorithm_t) = new OptViewAlgorithm(); (yyval.opt_view_algorithm_t)->case_idx_ = CASE2; } #line 5224 "bison_parser.cpp" /* yacc.c:1652 */ break; case 147: #line 1688 "bison.y" /* yacc.c:1652 */ { (yyval.opt_view_algorithm_t) = new OptViewAlgorithm(); (yyval.opt_view_algorithm_t)->case_idx_ = CASE3; } #line 5234 "bison_parser.cpp" /* yacc.c:1652 */ break; case 148: #line 1696 "bison.y" /* yacc.c:1652 */ { (yyval.opt_sql_security_t) = new OptSqlSecurity(); (yyval.opt_sql_security_t)->case_idx_ = CASE0; } #line 5244 "bison_parser.cpp" /* yacc.c:1652 */ break; case 149: #line 1701 "bison.y" /* yacc.c:1652 */ { (yyval.opt_sql_security_t) = new OptSqlSecurity(); (yyval.opt_sql_security_t)->case_idx_ = CASE1; } #line 5254 "bison_parser.cpp" /* yacc.c:1652 */ break; case 150: #line 1706 "bison.y" /* yacc.c:1652 */ { (yyval.opt_sql_security_t) = new OptSqlSecurity(); (yyval.opt_sql_security_t)->case_idx_ = CASE2; } #line 5264 "bison_parser.cpp" /* yacc.c:1652 */ break; case 151: #line 1714 "bison.y" /* yacc.c:1652 */ { (yyval.opt_index_option_t) = new OptIndexOption(); (yyval.opt_index_option_t)->case_idx_ = CASE0; } #line 5274 "bison_parser.cpp" /* yacc.c:1652 */ break; case 152: #line 1719 "bison.y" /* yacc.c:1652 */ { (yyval.opt_index_option_t) = new OptIndexOption(); (yyval.opt_index_option_t)->case_idx_ = CASE1; } #line 5284 "bison_parser.cpp" /* yacc.c:1652 */ break; case 153: #line 1724 "bison.y" /* yacc.c:1652 */ { (yyval.opt_index_option_t) = new OptIndexOption(); (yyval.opt_index_option_t)->case_idx_ = CASE2; } #line 5294 "bison_parser.cpp" /* yacc.c:1652 */ break; case 154: #line 1732 "bison.y" /* yacc.c:1652 */ { (yyval.opt_extra_option_t) = new OptExtraOption(); (yyval.opt_extra_option_t)->case_idx_ = CASE0; (yyval.opt_extra_option_t)->index_algorithm_option_ = (yyvsp[0].index_algorithm_option_t); } #line 5305 "bison_parser.cpp" /* yacc.c:1652 */ break; case 155: #line 1738 "bison.y" /* yacc.c:1652 */ { (yyval.opt_extra_option_t) = new OptExtraOption(); (yyval.opt_extra_option_t)->case_idx_ = CASE1; (yyval.opt_extra_option_t)->lock_option_ = (yyvsp[0].lock_option_t); } #line 5316 "bison_parser.cpp" /* yacc.c:1652 */ break; case 156: #line 1744 "bison.y" /* yacc.c:1652 */ { (yyval.opt_extra_option_t) = new OptExtraOption(); (yyval.opt_extra_option_t)->case_idx_ = CASE2; } #line 5326 "bison_parser.cpp" /* yacc.c:1652 */ break; case 157: #line 1752 "bison.y" /* yacc.c:1652 */ { (yyval.index_algorithm_option_t) = new IndexAlgorithmOption(); (yyval.index_algorithm_option_t)->case_idx_ = CASE0; (yyval.index_algorithm_option_t)->opt_op_equal_ = (yyvsp[-1].opt_op_equal_t); } #line 5337 "bison_parser.cpp" /* yacc.c:1652 */ break; case 158: #line 1758 "bison.y" /* yacc.c:1652 */ { (yyval.index_algorithm_option_t) = new IndexAlgorithmOption(); (yyval.index_algorithm_option_t)->case_idx_ = CASE1; (yyval.index_algorithm_option_t)->opt_op_equal_ = (yyvsp[-1].opt_op_equal_t); } #line 5348 "bison_parser.cpp" /* yacc.c:1652 */ break; case 159: #line 1764 "bison.y" /* yacc.c:1652 */ { (yyval.index_algorithm_option_t) = new IndexAlgorithmOption(); (yyval.index_algorithm_option_t)->case_idx_ = CASE2; (yyval.index_algorithm_option_t)->opt_op_equal_ = (yyvsp[-1].opt_op_equal_t); } #line 5359 "bison_parser.cpp" /* yacc.c:1652 */ break; case 160: #line 1773 "bison.y" /* yacc.c:1652 */ { (yyval.lock_option_t) = new LockOption(); (yyval.lock_option_t)->case_idx_ = CASE0; (yyval.lock_option_t)->opt_op_equal_ = (yyvsp[-1].opt_op_equal_t); } #line 5370 "bison_parser.cpp" /* yacc.c:1652 */ break; case 161: #line 1779 "bison.y" /* yacc.c:1652 */ { (yyval.lock_option_t) = new LockOption(); (yyval.lock_option_t)->case_idx_ = CASE1; (yyval.lock_option_t)->opt_op_equal_ = (yyvsp[-1].opt_op_equal_t); } #line 5381 "bison_parser.cpp" /* yacc.c:1652 */ break; case 162: #line 1785 "bison.y" /* yacc.c:1652 */ { (yyval.lock_option_t) = new LockOption(); (yyval.lock_option_t)->case_idx_ = CASE2; (yyval.lock_option_t)->opt_op_equal_ = (yyvsp[-1].opt_op_equal_t); } #line 5392 "bison_parser.cpp" /* yacc.c:1652 */ break; case 163: #line 1791 "bison.y" /* yacc.c:1652 */ { (yyval.lock_option_t) = new LockOption(); (yyval.lock_option_t)->case_idx_ = CASE3; (yyval.lock_option_t)->opt_op_equal_ = (yyvsp[-1].opt_op_equal_t); } #line 5403 "bison_parser.cpp" /* yacc.c:1652 */ break; case 164: #line 1800 "bison.y" /* yacc.c:1652 */ { (yyval.opt_op_equal_t) = new OptOpEqual(); (yyval.opt_op_equal_t)->case_idx_ = CASE0; } #line 5413 "bison_parser.cpp" /* yacc.c:1652 */ break; case 165: #line 1805 "bison.y" /* yacc.c:1652 */ { (yyval.opt_op_equal_t) = new OptOpEqual(); (yyval.opt_op_equal_t)->case_idx_ = CASE1; } #line 5423 "bison_parser.cpp" /* yacc.c:1652 */ break; case 166: #line 1813 "bison.y" /* yacc.c:1652 */ { (yyval.trigger_events_t) = new TriggerEvents(); (yyval.trigger_events_t)->case_idx_ = CASE0; } #line 5433 "bison_parser.cpp" /* yacc.c:1652 */ break; case 167: #line 1818 "bison.y" /* yacc.c:1652 */ { (yyval.trigger_events_t) = new TriggerEvents(); (yyval.trigger_events_t)->case_idx_ = CASE1; } #line 5443 "bison_parser.cpp" /* yacc.c:1652 */ break; case 168: #line 1823 "bison.y" /* yacc.c:1652 */ { (yyval.trigger_events_t) = new TriggerEvents(); (yyval.trigger_events_t)->case_idx_ = CASE2; } #line 5453 "bison_parser.cpp" /* yacc.c:1652 */ break; case 169: #line 1831 "bison.y" /* yacc.c:1652 */ { (yyval.trigger_name_t) = new TriggerName(); (yyval.trigger_name_t)->case_idx_ = CASE0; (yyval.trigger_name_t)->identifier_ = (yyvsp[0].identifier_t); } #line 5464 "bison_parser.cpp" /* yacc.c:1652 */ break; case 170: #line 1840 "bison.y" /* yacc.c:1652 */ { (yyval.trigger_action_time_t) = new TriggerActionTime(); (yyval.trigger_action_time_t)->case_idx_ = CASE0; } #line 5474 "bison_parser.cpp" /* yacc.c:1652 */ break; case 171: #line 1845 "bison.y" /* yacc.c:1652 */ { (yyval.trigger_action_time_t) = new TriggerActionTime(); (yyval.trigger_action_time_t)->case_idx_ = CASE1; } #line 5484 "bison_parser.cpp" /* yacc.c:1652 */ break; case 172: #line 1853 "bison.y" /* yacc.c:1652 */ { (yyval.drop_index_stmt_t) = new DropIndexStmt(); (yyval.drop_index_stmt_t)->case_idx_ = CASE0; (yyval.drop_index_stmt_t)->table_name_ = (yyvsp[-1].table_name_t); (yyval.drop_index_stmt_t)->opt_extra_option_ = (yyvsp[0].opt_extra_option_t); if ((yyval.drop_index_stmt_t)) { auto tmp1 = (yyval.drop_index_stmt_t)->table_name_; if (tmp1) { auto tmp2 = tmp1->identifier_; if (tmp2) { tmp2->data_type_ = kDataTableName; tmp2->scope_ = 1; tmp2->data_flag_ = (DATAFLAG)2; } } } } #line 5508 "bison_parser.cpp" /* yacc.c:1652 */ break; case 173: #line 1875 "bison.y" /* yacc.c:1652 */ { (yyval.drop_table_stmt_t) = new DropTableStmt(); (yyval.drop_table_stmt_t)->case_idx_ = CASE0; (yyval.drop_table_stmt_t)->opt_temp_ = (yyvsp[-4].opt_temp_t); (yyval.drop_table_stmt_t)->opt_if_exist_ = (yyvsp[-2].opt_if_exist_t); (yyval.drop_table_stmt_t)->table_name_ = (yyvsp[-1].table_name_t); (yyval.drop_table_stmt_t)->opt_restrict_or_cascade_ = (yyvsp[0].opt_restrict_or_cascade_t); if ((yyval.drop_table_stmt_t)) { auto tmp1 = (yyval.drop_table_stmt_t)->table_name_; if (tmp1) { auto tmp2 = tmp1->identifier_; if (tmp2) { tmp2->data_type_ = kDataTableName; tmp2->scope_ = 1; tmp2->data_flag_ = (DATAFLAG)2; } } } } #line 5534 "bison_parser.cpp" /* yacc.c:1652 */ break; case 174: #line 1899 "bison.y" /* yacc.c:1652 */ { (yyval.opt_restrict_or_cascade_t) = new OptRestrictOrCascade(); (yyval.opt_restrict_or_cascade_t)->case_idx_ = CASE0; } #line 5544 "bison_parser.cpp" /* yacc.c:1652 */ break; case 175: #line 1904 "bison.y" /* yacc.c:1652 */ { (yyval.opt_restrict_or_cascade_t) = new OptRestrictOrCascade(); (yyval.opt_restrict_or_cascade_t)->case_idx_ = CASE1; } #line 5554 "bison_parser.cpp" /* yacc.c:1652 */ break; case 176: #line 1909 "bison.y" /* yacc.c:1652 */ { (yyval.opt_restrict_or_cascade_t) = new OptRestrictOrCascade(); (yyval.opt_restrict_or_cascade_t)->case_idx_ = CASE2; } #line 5564 "bison_parser.cpp" /* yacc.c:1652 */ break; case 177: #line 1917 "bison.y" /* yacc.c:1652 */ { (yyval.drop_trigger_stmt_t) = new DropTriggerStmt(); (yyval.drop_trigger_stmt_t)->case_idx_ = CASE0; (yyval.drop_trigger_stmt_t)->opt_if_exist_ = (yyvsp[-1].opt_if_exist_t); (yyval.drop_trigger_stmt_t)->trigger_name_ = (yyvsp[0].trigger_name_t); if ((yyval.drop_trigger_stmt_t)) { auto tmp1 = (yyval.drop_trigger_stmt_t)->trigger_name_; if (tmp1) { auto tmp2 = tmp1->identifier_; if (tmp2) { tmp2->data_type_ = kDataTriggerName; tmp2->scope_ = 1; tmp2->data_flag_ = (DATAFLAG)2; } } } } #line 5588 "bison_parser.cpp" /* yacc.c:1652 */ break; case 178: #line 1939 "bison.y" /* yacc.c:1652 */ { (yyval.drop_view_stmt_t) = new DropViewStmt(); (yyval.drop_view_stmt_t)->case_idx_ = CASE0; (yyval.drop_view_stmt_t)->opt_if_exist_ = (yyvsp[-2].opt_if_exist_t); (yyval.drop_view_stmt_t)->view_name_ = (yyvsp[-1].view_name_t); (yyval.drop_view_stmt_t)->opt_restrict_or_cascade_ = (yyvsp[0].opt_restrict_or_cascade_t); if ((yyval.drop_view_stmt_t)) { auto tmp1 = (yyval.drop_view_stmt_t)->view_name_; if (tmp1) { auto tmp2 = tmp1->identifier_; if (tmp2) { tmp2->data_type_ = kDataTableName; tmp2->scope_ = 1; tmp2->data_flag_ = (DATAFLAG)2; } } } } #line 5613 "bison_parser.cpp" /* yacc.c:1652 */ break; case 179: #line 1962 "bison.y" /* yacc.c:1652 */ { (yyval.insert_stmt_t) = new InsertStmt(); (yyval.insert_stmt_t)->case_idx_ = CASE0; (yyval.insert_stmt_t)->opt_with_clause_ = (yyvsp[-6].opt_with_clause_t); (yyval.insert_stmt_t)->table_name_ = (yyvsp[-3].table_name_t); (yyval.insert_stmt_t)->opt_as_alias_ = (yyvsp[-2].opt_as_alias_t); (yyval.insert_stmt_t)->insert_rest_ = (yyvsp[-1].insert_rest_t); (yyval.insert_stmt_t)->opt_on_conflict_ = (yyvsp[0].opt_on_conflict_t); } #line 5628 "bison_parser.cpp" /* yacc.c:1652 */ break; case 180: #line 1975 "bison.y" /* yacc.c:1652 */ { (yyval.insert_rest_t) = new InsertRest(); (yyval.insert_rest_t)->case_idx_ = CASE0; (yyval.insert_rest_t)->opt_column_name_list_p_ = (yyvsp[-1].opt_column_name_list_p_t); (yyval.insert_rest_t)->select_no_parens_ = (yyvsp[0].select_no_parens_t); } #line 5640 "bison_parser.cpp" /* yacc.c:1652 */ break; case 181: #line 1982 "bison.y" /* yacc.c:1652 */ { (yyval.insert_rest_t) = new InsertRest(); (yyval.insert_rest_t)->case_idx_ = CASE1; (yyval.insert_rest_t)->opt_column_name_list_p_ = (yyvsp[-2].opt_column_name_list_p_t); } #line 5651 "bison_parser.cpp" /* yacc.c:1652 */ break; case 182: #line 1988 "bison.y" /* yacc.c:1652 */ { (yyval.insert_rest_t) = new InsertRest(); (yyval.insert_rest_t)->case_idx_ = CASE2; (yyval.insert_rest_t)->opt_column_name_list_p_ = (yyvsp[-2].opt_column_name_list_p_t); (yyval.insert_rest_t)->super_values_list_ = (yyvsp[0].super_values_list_t); } #line 5663 "bison_parser.cpp" /* yacc.c:1652 */ break; case 183: #line 1998 "bison.y" /* yacc.c:1652 */ { (yyval.super_values_list_t) = new SuperValuesList(); (yyval.super_values_list_t)->case_idx_ = CASE0; (yyval.super_values_list_t)->values_list_ = (yyvsp[0].values_list_t); } #line 5674 "bison_parser.cpp" /* yacc.c:1652 */ break; case 184: #line 2004 "bison.y" /* yacc.c:1652 */ { (yyval.super_values_list_t) = new SuperValuesList(); (yyval.super_values_list_t)->case_idx_ = CASE1; (yyval.super_values_list_t)->values_list_ = (yyvsp[-2].values_list_t); (yyval.super_values_list_t)->super_values_list_ = (yyvsp[0].super_values_list_t); } #line 5686 "bison_parser.cpp" /* yacc.c:1652 */ break; case 185: #line 2014 "bison.y" /* yacc.c:1652 */ { (yyval.values_list_t) = new ValuesList(); (yyval.values_list_t)->case_idx_ = CASE0; (yyval.values_list_t)->expr_list_ = (yyvsp[-1].expr_list_t); } #line 5697 "bison_parser.cpp" /* yacc.c:1652 */ break; case 186: #line 2023 "bison.y" /* yacc.c:1652 */ { (yyval.opt_on_conflict_t) = new OptOnConflict(); (yyval.opt_on_conflict_t)->case_idx_ = CASE0; (yyval.opt_on_conflict_t)->opt_conflict_expr_ = (yyvsp[-2].opt_conflict_expr_t); } #line 5708 "bison_parser.cpp" /* yacc.c:1652 */ break; case 187: #line 2029 "bison.y" /* yacc.c:1652 */ { (yyval.opt_on_conflict_t) = new OptOnConflict(); (yyval.opt_on_conflict_t)->case_idx_ = CASE1; (yyval.opt_on_conflict_t)->opt_conflict_expr_ = (yyvsp[-4].opt_conflict_expr_t); (yyval.opt_on_conflict_t)->set_clause_list_ = (yyvsp[-1].set_clause_list_t); (yyval.opt_on_conflict_t)->where_clause_ = (yyvsp[0].where_clause_t); } #line 5721 "bison_parser.cpp" /* yacc.c:1652 */ break; case 188: #line 2037 "bison.y" /* yacc.c:1652 */ { (yyval.opt_on_conflict_t) = new OptOnConflict(); (yyval.opt_on_conflict_t)->case_idx_ = CASE2; } #line 5731 "bison_parser.cpp" /* yacc.c:1652 */ break; case 189: #line 2045 "bison.y" /* yacc.c:1652 */ { (yyval.opt_conflict_expr_t) = new OptConflictExpr(); (yyval.opt_conflict_expr_t)->case_idx_ = CASE0; (yyval.opt_conflict_expr_t)->indexed_column_list_ = (yyvsp[-2].indexed_column_list_t); (yyval.opt_conflict_expr_t)->where_clause_ = (yyvsp[0].where_clause_t); } #line 5743 "bison_parser.cpp" /* yacc.c:1652 */ break; case 190: #line 2052 "bison.y" /* yacc.c:1652 */ { (yyval.opt_conflict_expr_t) = new OptConflictExpr(); (yyval.opt_conflict_expr_t)->case_idx_ = CASE1; } #line 5753 "bison_parser.cpp" /* yacc.c:1652 */ break; case 191: #line 2060 "bison.y" /* yacc.c:1652 */ { (yyval.indexed_column_list_t) = new IndexedColumnList(); (yyval.indexed_column_list_t)->case_idx_ = CASE0; (yyval.indexed_column_list_t)->indexed_column_ = (yyvsp[0].indexed_column_t); } #line 5764 "bison_parser.cpp" /* yacc.c:1652 */ break; case 192: #line 2066 "bison.y" /* yacc.c:1652 */ { (yyval.indexed_column_list_t) = new IndexedColumnList(); (yyval.indexed_column_list_t)->case_idx_ = CASE1; (yyval.indexed_column_list_t)->indexed_column_ = (yyvsp[-2].indexed_column_t); (yyval.indexed_column_list_t)->indexed_column_list_ = (yyvsp[0].indexed_column_list_t); } #line 5776 "bison_parser.cpp" /* yacc.c:1652 */ break; case 193: #line 2076 "bison.y" /* yacc.c:1652 */ { (yyval.indexed_column_t) = new IndexedColumn(); (yyval.indexed_column_t)->case_idx_ = CASE0; (yyval.indexed_column_t)->expr_ = (yyvsp[-1].expr_t); (yyval.indexed_column_t)->opt_order_behavior_ = (yyvsp[0].opt_order_behavior_t); } #line 5788 "bison_parser.cpp" /* yacc.c:1652 */ break; case 194: #line 2086 "bison.y" /* yacc.c:1652 */ { (yyval.update_stmt_t) = new UpdateStmt(); (yyval.update_stmt_t)->case_idx_ = CASE0; (yyval.update_stmt_t)->table_name_ = (yyvsp[-6].table_name_t); (yyval.update_stmt_t)->opt_as_alias_ = (yyvsp[-5].opt_as_alias_t); (yyval.update_stmt_t)->set_clause_list_ = (yyvsp[-3].set_clause_list_t); (yyval.update_stmt_t)->opt_where_clause_ = (yyvsp[-2].opt_where_clause_t); (yyval.update_stmt_t)->opt_order_clause_ = (yyvsp[-1].opt_order_clause_t); (yyval.update_stmt_t)->opt_limit_row_count_ = (yyvsp[0].opt_limit_row_count_t); } #line 5804 "bison_parser.cpp" /* yacc.c:1652 */ break; case 195: #line 2097 "bison.y" /* yacc.c:1652 */ { (yyval.update_stmt_t) = new UpdateStmt(); (yyval.update_stmt_t)->case_idx_ = CASE1; (yyval.update_stmt_t)->table_name_ = (yyvsp[-6].table_name_t); (yyval.update_stmt_t)->opt_as_alias_ = (yyvsp[-5].opt_as_alias_t); (yyval.update_stmt_t)->set_clause_list_ = (yyvsp[-3].set_clause_list_t); (yyval.update_stmt_t)->opt_where_clause_ = (yyvsp[-2].opt_where_clause_t); (yyval.update_stmt_t)->opt_order_clause_ = (yyvsp[-1].opt_order_clause_t); (yyval.update_stmt_t)->opt_limit_row_count_ = (yyvsp[0].opt_limit_row_count_t); } #line 5820 "bison_parser.cpp" /* yacc.c:1652 */ break; case 196: #line 2111 "bison.y" /* yacc.c:1652 */ { (yyval.alter_action_t) = new AlterAction(); (yyval.alter_action_t)->case_idx_ = CASE0; (yyval.alter_action_t)->table_name_ = (yyvsp[0].table_name_t); if ((yyval.alter_action_t)) { auto tmp1 = (yyval.alter_action_t)->table_name_; if (tmp1) { auto tmp2 = tmp1->identifier_; if (tmp2) { tmp2->data_type_ = kDataTableName; tmp2->scope_ = 2; tmp2->data_flag_ = (DATAFLAG)64; } } } } #line 5843 "bison_parser.cpp" /* yacc.c:1652 */ break; case 197: #line 2129 "bison.y" /* yacc.c:1652 */ { (yyval.alter_action_t) = new AlterAction(); (yyval.alter_action_t)->case_idx_ = CASE1; (yyval.alter_action_t)->opt_column_ = (yyvsp[-3].opt_column_t); (yyval.alter_action_t)->column_name_1_ = (yyvsp[-2].column_name_t); (yyval.alter_action_t)->column_name_2_ = (yyvsp[0].column_name_t); if ((yyval.alter_action_t)) { auto tmp1 = (yyval.alter_action_t)->column_name_1_; if (tmp1) { auto tmp2 = tmp1->identifier_; if (tmp2) { tmp2->data_type_ = kDataColumnName; tmp2->scope_ = 2; tmp2->data_flag_ = (DATAFLAG)8; } } } if ((yyval.alter_action_t)) { auto tmp1 = (yyval.alter_action_t)->column_name_2_; if (tmp1) { auto tmp2 = tmp1->identifier_; if (tmp2) { tmp2->data_type_ = kDataColumnName; tmp2->scope_ = 3; tmp2->data_flag_ = (DATAFLAG)64; } } } } #line 5880 "bison_parser.cpp" /* yacc.c:1652 */ break; case 198: #line 2161 "bison.y" /* yacc.c:1652 */ { (yyval.alter_action_t) = new AlterAction(); (yyval.alter_action_t)->case_idx_ = CASE2; (yyval.alter_action_t)->opt_column_ = (yyvsp[-1].opt_column_t); (yyval.alter_action_t)->column_def_ = (yyvsp[0].column_def_t); if ((yyval.alter_action_t)) { auto tmp1 = (yyval.alter_action_t)->column_def_; if (tmp1) { auto tmp2 = tmp1->identifier_; if (tmp2) { tmp2->data_type_ = kDataColumnName; tmp2->scope_ = 2; tmp2->data_flag_ = (DATAFLAG)1; } } } } #line 5904 "bison_parser.cpp" /* yacc.c:1652 */ break; case 199: #line 2180 "bison.y" /* yacc.c:1652 */ { (yyval.alter_action_t) = new AlterAction(); (yyval.alter_action_t)->case_idx_ = CASE3; (yyval.alter_action_t)->opt_column_ = (yyvsp[-1].opt_column_t); (yyval.alter_action_t)->column_name_1_ = (yyvsp[0].column_name_t); if ((yyval.alter_action_t)) { auto tmp1 = (yyval.alter_action_t)->column_name_1_; if (tmp1) { auto tmp2 = tmp1->identifier_; if (tmp2) { tmp2->data_type_ = kDataColumnName; tmp2->scope_ = 2; tmp2->data_flag_ = (DATAFLAG)2; } } } } #line 5928 "bison_parser.cpp" /* yacc.c:1652 */ break; case 200: #line 2199 "bison.y" /* yacc.c:1652 */ { (yyval.alter_action_t) = new AlterAction(); (yyval.alter_action_t)->case_idx_ = CASE4; (yyval.alter_action_t)->alter_constant_action_ = (yyvsp[0].alter_constant_action_t); } #line 5939 "bison_parser.cpp" /* yacc.c:1652 */ break; case 201: #line 2208 "bison.y" /* yacc.c:1652 */ { (yyval.alter_constant_action_t) = new AlterConstantAction(); (yyval.alter_constant_action_t)->case_idx_ = CASE0; } #line 5949 "bison_parser.cpp" /* yacc.c:1652 */ break; case 202: #line 2213 "bison.y" /* yacc.c:1652 */ { (yyval.alter_constant_action_t) = new AlterConstantAction(); (yyval.alter_constant_action_t)->case_idx_ = CASE1; } #line 5959 "bison_parser.cpp" /* yacc.c:1652 */ break; case 203: #line 2218 "bison.y" /* yacc.c:1652 */ { (yyval.alter_constant_action_t) = new AlterConstantAction(); (yyval.alter_constant_action_t)->case_idx_ = CASE2; } #line 5969 "bison_parser.cpp" /* yacc.c:1652 */ break; case 204: #line 2223 "bison.y" /* yacc.c:1652 */ { (yyval.alter_constant_action_t) = new AlterConstantAction(); (yyval.alter_constant_action_t)->case_idx_ = CASE3; } #line 5979 "bison_parser.cpp" /* yacc.c:1652 */ break; case 205: #line 2228 "bison.y" /* yacc.c:1652 */ { (yyval.alter_constant_action_t) = new AlterConstantAction(); (yyval.alter_constant_action_t)->case_idx_ = CASE4; (yyval.alter_constant_action_t)->lock_option_ = (yyvsp[0].lock_option_t); } #line 5990 "bison_parser.cpp" /* yacc.c:1652 */ break; case 206: #line 2234 "bison.y" /* yacc.c:1652 */ { (yyval.alter_constant_action_t) = new AlterConstantAction(); (yyval.alter_constant_action_t)->case_idx_ = CASE5; } #line 6000 "bison_parser.cpp" /* yacc.c:1652 */ break; case 207: #line 2239 "bison.y" /* yacc.c:1652 */ { (yyval.alter_constant_action_t) = new AlterConstantAction(); (yyval.alter_constant_action_t)->case_idx_ = CASE6; } #line 6010 "bison_parser.cpp" /* yacc.c:1652 */ break; case 208: #line 2247 "bison.y" /* yacc.c:1652 */ { (yyval.column_def_list_t) = new ColumnDefList(); (yyval.column_def_list_t)->case_idx_ = CASE0; (yyval.column_def_list_t)->column_def_ = (yyvsp[0].column_def_t); } #line 6021 "bison_parser.cpp" /* yacc.c:1652 */ break; case 209: #line 2253 "bison.y" /* yacc.c:1652 */ { (yyval.column_def_list_t) = new ColumnDefList(); (yyval.column_def_list_t)->case_idx_ = CASE1; (yyval.column_def_list_t)->column_def_ = (yyvsp[-2].column_def_t); (yyval.column_def_list_t)->column_def_list_ = (yyvsp[0].column_def_list_t); } #line 6033 "bison_parser.cpp" /* yacc.c:1652 */ break; case 210: #line 2263 "bison.y" /* yacc.c:1652 */ { (yyval.column_def_t) = new ColumnDef(); (yyval.column_def_t)->case_idx_ = CASE0; (yyval.column_def_t)->identifier_ = (yyvsp[-2].identifier_t); (yyval.column_def_t)->type_name_ = (yyvsp[-1].type_name_t); (yyval.column_def_t)->opt_column_constraint_list_ = (yyvsp[0].opt_column_constraint_list_t); if ((yyval.column_def_t)) { auto tmp1 = (yyval.column_def_t)->identifier_; if (tmp1) { tmp1->data_type_ = kDataColumnName; tmp1->scope_ = 2; tmp1->data_flag_ = (DATAFLAG)1; } } } #line 6055 "bison_parser.cpp" /* yacc.c:1652 */ break; case 211: #line 2283 "bison.y" /* yacc.c:1652 */ { (yyval.opt_column_constraint_list_t) = new OptColumnConstraintList(); (yyval.opt_column_constraint_list_t)->case_idx_ = CASE0; (yyval.opt_column_constraint_list_t)->column_constraint_list_ = (yyvsp[-2].column_constraint_list_t); (yyval.opt_column_constraint_list_t)->opt_check_ = (yyvsp[-1].opt_check_t); (yyval.opt_column_constraint_list_t)->opt_reference_clause_ = (yyvsp[0].opt_reference_clause_t); } #line 6068 "bison_parser.cpp" /* yacc.c:1652 */ break; case 212: #line 2291 "bison.y" /* yacc.c:1652 */ { (yyval.opt_column_constraint_list_t) = new OptColumnConstraintList(); (yyval.opt_column_constraint_list_t)->case_idx_ = CASE1; } #line 6078 "bison_parser.cpp" /* yacc.c:1652 */ break; case 213: #line 2299 "bison.y" /* yacc.c:1652 */ { (yyval.column_constraint_list_t) = new ColumnConstraintList(); (yyval.column_constraint_list_t)->case_idx_ = CASE0; (yyval.column_constraint_list_t)->column_constraint_ = (yyvsp[0].column_constraint_t); } #line 6089 "bison_parser.cpp" /* yacc.c:1652 */ break; case 214: #line 2305 "bison.y" /* yacc.c:1652 */ { (yyval.column_constraint_list_t) = new ColumnConstraintList(); (yyval.column_constraint_list_t)->case_idx_ = CASE1; (yyval.column_constraint_list_t)->column_constraint_ = (yyvsp[-1].column_constraint_t); (yyval.column_constraint_list_t)->column_constraint_list_ = (yyvsp[0].column_constraint_list_t); } #line 6101 "bison_parser.cpp" /* yacc.c:1652 */ break; case 215: #line 2315 "bison.y" /* yacc.c:1652 */ { (yyval.column_constraint_t) = new ColumnConstraint(); (yyval.column_constraint_t)->case_idx_ = CASE0; (yyval.column_constraint_t)->constraint_type_ = (yyvsp[0].constraint_type_t); } #line 6112 "bison_parser.cpp" /* yacc.c:1652 */ break; case 216: #line 2324 "bison.y" /* yacc.c:1652 */ { (yyval.opt_reference_clause_t) = new OptReferenceClause(); (yyval.opt_reference_clause_t)->case_idx_ = CASE0; (yyval.opt_reference_clause_t)->opt_foreign_key_ = (yyvsp[-1].opt_foreign_key_t); (yyval.opt_reference_clause_t)->reference_clause_ = (yyvsp[0].reference_clause_t); } #line 6124 "bison_parser.cpp" /* yacc.c:1652 */ break; case 217: #line 2331 "bison.y" /* yacc.c:1652 */ { (yyval.opt_reference_clause_t) = new OptReferenceClause(); (yyval.opt_reference_clause_t)->case_idx_ = CASE1; } #line 6134 "bison_parser.cpp" /* yacc.c:1652 */ break; case 218: #line 2339 "bison.y" /* yacc.c:1652 */ { (yyval.opt_check_t) = new OptCheck(); (yyval.opt_check_t)->case_idx_ = CASE0; (yyval.opt_check_t)->expr_ = (yyvsp[-2].expr_t); (yyval.opt_check_t)->opt_enforced_ = (yyvsp[0].opt_enforced_t); } #line 6146 "bison_parser.cpp" /* yacc.c:1652 */ break; case 219: #line 2346 "bison.y" /* yacc.c:1652 */ { (yyval.opt_check_t) = new OptCheck(); (yyval.opt_check_t)->case_idx_ = CASE1; } #line 6156 "bison_parser.cpp" /* yacc.c:1652 */ break; case 220: #line 2354 "bison.y" /* yacc.c:1652 */ { (yyval.constraint_type_t) = new ConstraintType(); (yyval.constraint_type_t)->case_idx_ = CASE0; } #line 6166 "bison_parser.cpp" /* yacc.c:1652 */ break; case 221: #line 2359 "bison.y" /* yacc.c:1652 */ { (yyval.constraint_type_t) = new ConstraintType(); (yyval.constraint_type_t)->case_idx_ = CASE1; } #line 6176 "bison_parser.cpp" /* yacc.c:1652 */ break; case 222: #line 2364 "bison.y" /* yacc.c:1652 */ { (yyval.constraint_type_t) = new ConstraintType(); (yyval.constraint_type_t)->case_idx_ = CASE2; } #line 6186 "bison_parser.cpp" /* yacc.c:1652 */ break; case 223: #line 2372 "bison.y" /* yacc.c:1652 */ { (yyval.reference_clause_t) = new ReferenceClause(); (yyval.reference_clause_t)->case_idx_ = CASE0; (yyval.reference_clause_t)->table_name_ = (yyvsp[-3].table_name_t); (yyval.reference_clause_t)->opt_column_name_list_p_ = (yyvsp[-2].opt_column_name_list_p_t); (yyval.reference_clause_t)->opt_foreign_key_actions_ = (yyvsp[-1].opt_foreign_key_actions_t); (yyval.reference_clause_t)->opt_constraint_attribute_spec_ = (yyvsp[0].opt_constraint_attribute_spec_t); if ((yyval.reference_clause_t)) { auto tmp1 = (yyval.reference_clause_t)->table_name_; if (tmp1) { auto tmp2 = tmp1->identifier_; if (tmp2) { tmp2->data_type_ = kDataTableName; tmp2->scope_ = 100; tmp2->data_flag_ = (DATAFLAG)8; } } } if ((yyval.reference_clause_t)) { auto tmp1 = (yyval.reference_clause_t)->opt_column_name_list_p_; if (tmp1) { auto tmp2 = tmp1->column_name_list_; while (tmp2) { auto tmp3 = tmp2->column_name_; if (tmp3) { auto tmp4 = tmp3->identifier_; if (tmp4) { tmp4->data_type_ = kDataColumnName; tmp4->scope_ = 101; tmp4->data_flag_ = (DATAFLAG)8; } } tmp2 = tmp2->column_name_list_; } } } } #line 6231 "bison_parser.cpp" /* yacc.c:1652 */ break; case 224: #line 2415 "bison.y" /* yacc.c:1652 */ { (yyval.opt_foreign_key_t) = new OptForeignKey(); (yyval.opt_foreign_key_t)->case_idx_ = CASE0; } #line 6241 "bison_parser.cpp" /* yacc.c:1652 */ break; case 225: #line 2420 "bison.y" /* yacc.c:1652 */ { (yyval.opt_foreign_key_t) = new OptForeignKey(); (yyval.opt_foreign_key_t)->case_idx_ = CASE1; } #line 6251 "bison_parser.cpp" /* yacc.c:1652 */ break; case 226: #line 2428 "bison.y" /* yacc.c:1652 */ { (yyval.opt_foreign_key_actions_t) = new OptForeignKeyActions(); (yyval.opt_foreign_key_actions_t)->case_idx_ = CASE0; (yyval.opt_foreign_key_actions_t)->foreign_key_actions_ = (yyvsp[0].foreign_key_actions_t); } #line 6262 "bison_parser.cpp" /* yacc.c:1652 */ break; case 227: #line 2434 "bison.y" /* yacc.c:1652 */ { (yyval.opt_foreign_key_actions_t) = new OptForeignKeyActions(); (yyval.opt_foreign_key_actions_t)->case_idx_ = CASE1; } #line 6272 "bison_parser.cpp" /* yacc.c:1652 */ break; case 228: #line 2442 "bison.y" /* yacc.c:1652 */ { (yyval.foreign_key_actions_t) = new ForeignKeyActions(); (yyval.foreign_key_actions_t)->case_idx_ = CASE0; } #line 6282 "bison_parser.cpp" /* yacc.c:1652 */ break; case 229: #line 2447 "bison.y" /* yacc.c:1652 */ { (yyval.foreign_key_actions_t) = new ForeignKeyActions(); (yyval.foreign_key_actions_t)->case_idx_ = CASE1; } #line 6292 "bison_parser.cpp" /* yacc.c:1652 */ break; case 230: #line 2452 "bison.y" /* yacc.c:1652 */ { (yyval.foreign_key_actions_t) = new ForeignKeyActions(); (yyval.foreign_key_actions_t)->case_idx_ = CASE2; } #line 6302 "bison_parser.cpp" /* yacc.c:1652 */ break; case 231: #line 2457 "bison.y" /* yacc.c:1652 */ { (yyval.foreign_key_actions_t) = new ForeignKeyActions(); (yyval.foreign_key_actions_t)->case_idx_ = CASE3; (yyval.foreign_key_actions_t)->key_actions_ = (yyvsp[0].key_actions_t); } #line 6313 "bison_parser.cpp" /* yacc.c:1652 */ break; case 232: #line 2463 "bison.y" /* yacc.c:1652 */ { (yyval.foreign_key_actions_t) = new ForeignKeyActions(); (yyval.foreign_key_actions_t)->case_idx_ = CASE4; (yyval.foreign_key_actions_t)->key_actions_ = (yyvsp[0].key_actions_t); } #line 6324 "bison_parser.cpp" /* yacc.c:1652 */ break; case 233: #line 2472 "bison.y" /* yacc.c:1652 */ { (yyval.key_actions_t) = new KeyActions(); (yyval.key_actions_t)->case_idx_ = CASE0; } #line 6334 "bison_parser.cpp" /* yacc.c:1652 */ break; case 234: #line 2477 "bison.y" /* yacc.c:1652 */ { (yyval.key_actions_t) = new KeyActions(); (yyval.key_actions_t)->case_idx_ = CASE1; } #line 6344 "bison_parser.cpp" /* yacc.c:1652 */ break; case 235: #line 2482 "bison.y" /* yacc.c:1652 */ { (yyval.key_actions_t) = new KeyActions(); (yyval.key_actions_t)->case_idx_ = CASE2; } #line 6354 "bison_parser.cpp" /* yacc.c:1652 */ break; case 236: #line 2487 "bison.y" /* yacc.c:1652 */ { (yyval.key_actions_t) = new KeyActions(); (yyval.key_actions_t)->case_idx_ = CASE3; } #line 6364 "bison_parser.cpp" /* yacc.c:1652 */ break; case 237: #line 2492 "bison.y" /* yacc.c:1652 */ { (yyval.key_actions_t) = new KeyActions(); (yyval.key_actions_t)->case_idx_ = CASE4; } #line 6374 "bison_parser.cpp" /* yacc.c:1652 */ break; case 238: #line 2500 "bison.y" /* yacc.c:1652 */ { (yyval.opt_constraint_attribute_spec_t) = new OptConstraintAttributeSpec(); (yyval.opt_constraint_attribute_spec_t)->case_idx_ = CASE0; (yyval.opt_constraint_attribute_spec_t)->opt_initial_time_ = (yyvsp[0].opt_initial_time_t); } #line 6385 "bison_parser.cpp" /* yacc.c:1652 */ break; case 239: #line 2506 "bison.y" /* yacc.c:1652 */ { (yyval.opt_constraint_attribute_spec_t) = new OptConstraintAttributeSpec(); (yyval.opt_constraint_attribute_spec_t)->case_idx_ = CASE1; (yyval.opt_constraint_attribute_spec_t)->opt_initial_time_ = (yyvsp[0].opt_initial_time_t); } #line 6396 "bison_parser.cpp" /* yacc.c:1652 */ break; case 240: #line 2512 "bison.y" /* yacc.c:1652 */ { (yyval.opt_constraint_attribute_spec_t) = new OptConstraintAttributeSpec(); (yyval.opt_constraint_attribute_spec_t)->case_idx_ = CASE2; } #line 6406 "bison_parser.cpp" /* yacc.c:1652 */ break; case 241: #line 2520 "bison.y" /* yacc.c:1652 */ { (yyval.opt_initial_time_t) = new OptInitialTime(); (yyval.opt_initial_time_t)->case_idx_ = CASE0; } #line 6416 "bison_parser.cpp" /* yacc.c:1652 */ break; case 242: #line 2525 "bison.y" /* yacc.c:1652 */ { (yyval.opt_initial_time_t) = new OptInitialTime(); (yyval.opt_initial_time_t)->case_idx_ = CASE1; } #line 6426 "bison_parser.cpp" /* yacc.c:1652 */ break; case 243: #line 2530 "bison.y" /* yacc.c:1652 */ { (yyval.opt_initial_time_t) = new OptInitialTime(); (yyval.opt_initial_time_t)->case_idx_ = CASE2; } #line 6436 "bison_parser.cpp" /* yacc.c:1652 */ break; case 244: #line 2538 "bison.y" /* yacc.c:1652 */ { (yyval.constraint_name_t) = new ConstraintName(); (yyval.constraint_name_t)->case_idx_ = CASE0; (yyval.constraint_name_t)->name_ = (yyvsp[0].name_t); } #line 6447 "bison_parser.cpp" /* yacc.c:1652 */ break; case 245: #line 2547 "bison.y" /* yacc.c:1652 */ { (yyval.opt_temp_t) = new OptTemp(); (yyval.opt_temp_t)->case_idx_ = CASE0; } #line 6457 "bison_parser.cpp" /* yacc.c:1652 */ break; case 246: #line 2552 "bison.y" /* yacc.c:1652 */ { (yyval.opt_temp_t) = new OptTemp(); (yyval.opt_temp_t)->case_idx_ = CASE1; } #line 6467 "bison_parser.cpp" /* yacc.c:1652 */ break; case 247: #line 2560 "bison.y" /* yacc.c:1652 */ { (yyval.opt_check_option_t) = new OptCheckOption(); (yyval.opt_check_option_t)->case_idx_ = CASE0; } #line 6477 "bison_parser.cpp" /* yacc.c:1652 */ break; case 248: #line 2565 "bison.y" /* yacc.c:1652 */ { (yyval.opt_check_option_t) = new OptCheckOption(); (yyval.opt_check_option_t)->case_idx_ = CASE1; } #line 6487 "bison_parser.cpp" /* yacc.c:1652 */ break; case 249: #line 2570 "bison.y" /* yacc.c:1652 */ { (yyval.opt_check_option_t) = new OptCheckOption(); (yyval.opt_check_option_t)->case_idx_ = CASE2; } #line 6497 "bison_parser.cpp" /* yacc.c:1652 */ break; case 250: #line 2575 "bison.y" /* yacc.c:1652 */ { (yyval.opt_check_option_t) = new OptCheckOption(); (yyval.opt_check_option_t)->case_idx_ = CASE3; } #line 6507 "bison_parser.cpp" /* yacc.c:1652 */ break; case 251: #line 2583 "bison.y" /* yacc.c:1652 */ { (yyval.opt_column_name_list_p_t) = new OptColumnNameListP(); (yyval.opt_column_name_list_p_t)->case_idx_ = CASE0; (yyval.opt_column_name_list_p_t)->column_name_list_ = (yyvsp[-1].column_name_list_t); } #line 6518 "bison_parser.cpp" /* yacc.c:1652 */ break; case 252: #line 2589 "bison.y" /* yacc.c:1652 */ { (yyval.opt_column_name_list_p_t) = new OptColumnNameListP(); (yyval.opt_column_name_list_p_t)->case_idx_ = CASE1; } #line 6528 "bison_parser.cpp" /* yacc.c:1652 */ break; case 253: #line 2597 "bison.y" /* yacc.c:1652 */ { (yyval.set_clause_list_t) = new SetClauseList(); (yyval.set_clause_list_t)->case_idx_ = CASE0; (yyval.set_clause_list_t)->set_clause_ = (yyvsp[0].set_clause_t); } #line 6539 "bison_parser.cpp" /* yacc.c:1652 */ break; case 254: #line 2603 "bison.y" /* yacc.c:1652 */ { (yyval.set_clause_list_t) = new SetClauseList(); (yyval.set_clause_list_t)->case_idx_ = CASE1; (yyval.set_clause_list_t)->set_clause_ = (yyvsp[-2].set_clause_t); (yyval.set_clause_list_t)->set_clause_list_ = (yyvsp[0].set_clause_list_t); } #line 6551 "bison_parser.cpp" /* yacc.c:1652 */ break; case 255: #line 2613 "bison.y" /* yacc.c:1652 */ { (yyval.set_clause_t) = new SetClause(); (yyval.set_clause_t)->case_idx_ = CASE0; (yyval.set_clause_t)->column_name_ = (yyvsp[-2].column_name_t); (yyval.set_clause_t)->expr_ = (yyvsp[0].expr_t); } #line 6563 "bison_parser.cpp" /* yacc.c:1652 */ break; case 256: #line 2620 "bison.y" /* yacc.c:1652 */ { (yyval.set_clause_t) = new SetClause(); (yyval.set_clause_t)->case_idx_ = CASE1; (yyval.set_clause_t)->column_name_list_ = (yyvsp[-3].column_name_list_t); (yyval.set_clause_t)->expr_ = (yyvsp[0].expr_t); } #line 6575 "bison_parser.cpp" /* yacc.c:1652 */ break; case 257: #line 2630 "bison.y" /* yacc.c:1652 */ { (yyval.opt_as_alias_t) = new OptAsAlias(); (yyval.opt_as_alias_t)->case_idx_ = CASE0; (yyval.opt_as_alias_t)->as_alias_ = (yyvsp[0].as_alias_t); } #line 6586 "bison_parser.cpp" /* yacc.c:1652 */ break; case 258: #line 2636 "bison.y" /* yacc.c:1652 */ { (yyval.opt_as_alias_t) = new OptAsAlias(); (yyval.opt_as_alias_t)->case_idx_ = CASE1; } #line 6596 "bison_parser.cpp" /* yacc.c:1652 */ break; case 259: #line 2644 "bison.y" /* yacc.c:1652 */ { (yyval.expr_t) = new Expr(); (yyval.expr_t)->case_idx_ = CASE0; (yyval.expr_t)->operand_ = (yyvsp[0].operand_t); } #line 6607 "bison_parser.cpp" /* yacc.c:1652 */ break; case 260: #line 2650 "bison.y" /* yacc.c:1652 */ { (yyval.expr_t) = new Expr(); (yyval.expr_t)->case_idx_ = CASE1; (yyval.expr_t)->between_expr_ = (yyvsp[0].between_expr_t); } #line 6618 "bison_parser.cpp" /* yacc.c:1652 */ break; case 261: #line 2656 "bison.y" /* yacc.c:1652 */ { (yyval.expr_t) = new Expr(); (yyval.expr_t)->case_idx_ = CASE2; (yyval.expr_t)->exists_expr_ = (yyvsp[0].exists_expr_t); } #line 6629 "bison_parser.cpp" /* yacc.c:1652 */ break; case 262: #line 2662 "bison.y" /* yacc.c:1652 */ { (yyval.expr_t) = new Expr(); (yyval.expr_t)->case_idx_ = CASE3; (yyval.expr_t)->in_expr_ = (yyvsp[0].in_expr_t); } #line 6640 "bison_parser.cpp" /* yacc.c:1652 */ break; case 263: #line 2668 "bison.y" /* yacc.c:1652 */ { (yyval.expr_t) = new Expr(); (yyval.expr_t)->case_idx_ = CASE4; (yyval.expr_t)->cast_expr_ = (yyvsp[0].cast_expr_t); } #line 6651 "bison_parser.cpp" /* yacc.c:1652 */ break; case 264: #line 2674 "bison.y" /* yacc.c:1652 */ { (yyval.expr_t) = new Expr(); (yyval.expr_t)->case_idx_ = CASE5; (yyval.expr_t)->logic_expr_ = (yyvsp[0].logic_expr_t); } #line 6662 "bison_parser.cpp" /* yacc.c:1652 */ break; case 265: #line 2683 "bison.y" /* yacc.c:1652 */ { (yyval.operand_t) = new Operand(); (yyval.operand_t)->case_idx_ = CASE0; (yyval.operand_t)->expr_list_ = (yyvsp[-1].expr_list_t); } #line 6673 "bison_parser.cpp" /* yacc.c:1652 */ break; case 266: #line 2689 "bison.y" /* yacc.c:1652 */ { (yyval.operand_t) = new Operand(); (yyval.operand_t)->case_idx_ = CASE1; (yyval.operand_t)->array_index_ = (yyvsp[0].array_index_t); } #line 6684 "bison_parser.cpp" /* yacc.c:1652 */ break; case 267: #line 2695 "bison.y" /* yacc.c:1652 */ { (yyval.operand_t) = new Operand(); (yyval.operand_t)->case_idx_ = CASE2; (yyval.operand_t)->scalar_expr_ = (yyvsp[0].scalar_expr_t); } #line 6695 "bison_parser.cpp" /* yacc.c:1652 */ break; case 268: #line 2701 "bison.y" /* yacc.c:1652 */ { (yyval.operand_t) = new Operand(); (yyval.operand_t)->case_idx_ = CASE3; (yyval.operand_t)->unary_expr_ = (yyvsp[0].unary_expr_t); } #line 6706 "bison_parser.cpp" /* yacc.c:1652 */ break; case 269: #line 2707 "bison.y" /* yacc.c:1652 */ { (yyval.operand_t) = new Operand(); (yyval.operand_t)->case_idx_ = CASE4; (yyval.operand_t)->binary_expr_ = (yyvsp[0].binary_expr_t); } #line 6717 "bison_parser.cpp" /* yacc.c:1652 */ break; case 270: #line 2713 "bison.y" /* yacc.c:1652 */ { (yyval.operand_t) = new Operand(); (yyval.operand_t)->case_idx_ = CASE5; (yyval.operand_t)->case_expr_ = (yyvsp[0].case_expr_t); } #line 6728 "bison_parser.cpp" /* yacc.c:1652 */ break; case 271: #line 2719 "bison.y" /* yacc.c:1652 */ { (yyval.operand_t) = new Operand(); (yyval.operand_t)->case_idx_ = CASE6; (yyval.operand_t)->extract_expr_ = (yyvsp[0].extract_expr_t); } #line 6739 "bison_parser.cpp" /* yacc.c:1652 */ break; case 272: #line 2725 "bison.y" /* yacc.c:1652 */ { (yyval.operand_t) = new Operand(); (yyval.operand_t)->case_idx_ = CASE7; (yyval.operand_t)->array_expr_ = (yyvsp[0].array_expr_t); } #line 6750 "bison_parser.cpp" /* yacc.c:1652 */ break; case 273: #line 2731 "bison.y" /* yacc.c:1652 */ { (yyval.operand_t) = new Operand(); (yyval.operand_t)->case_idx_ = CASE8; (yyval.operand_t)->function_expr_ = (yyvsp[0].function_expr_t); } #line 6761 "bison_parser.cpp" /* yacc.c:1652 */ break; case 274: #line 2737 "bison.y" /* yacc.c:1652 */ { (yyval.operand_t) = new Operand(); (yyval.operand_t)->case_idx_ = CASE9; (yyval.operand_t)->select_no_parens_ = (yyvsp[-1].select_no_parens_t); } #line 6772 "bison_parser.cpp" /* yacc.c:1652 */ break; case 275: #line 2746 "bison.y" /* yacc.c:1652 */ { (yyval.cast_expr_t) = new CastExpr(); (yyval.cast_expr_t)->case_idx_ = CASE0; (yyval.cast_expr_t)->expr_ = (yyvsp[-3].expr_t); (yyval.cast_expr_t)->type_name_ = (yyvsp[-1].type_name_t); } #line 6784 "bison_parser.cpp" /* yacc.c:1652 */ break; case 276: #line 2756 "bison.y" /* yacc.c:1652 */ { (yyval.scalar_expr_t) = new ScalarExpr(); (yyval.scalar_expr_t)->case_idx_ = CASE0; (yyval.scalar_expr_t)->column_name_ = (yyvsp[0].column_name_t); } #line 6795 "bison_parser.cpp" /* yacc.c:1652 */ break; case 277: #line 2762 "bison.y" /* yacc.c:1652 */ { (yyval.scalar_expr_t) = new ScalarExpr(); (yyval.scalar_expr_t)->case_idx_ = CASE1; (yyval.scalar_expr_t)->literal_ = (yyvsp[0].literal_t); } #line 6806 "bison_parser.cpp" /* yacc.c:1652 */ break; case 278: #line 2771 "bison.y" /* yacc.c:1652 */ { (yyval.unary_expr_t) = new UnaryExpr(); (yyval.unary_expr_t)->case_idx_ = CASE0; (yyval.unary_expr_t)->operand_ = (yyvsp[0].operand_t); } #line 6817 "bison_parser.cpp" /* yacc.c:1652 */ break; case 279: #line 2777 "bison.y" /* yacc.c:1652 */ { (yyval.unary_expr_t) = new UnaryExpr(); (yyval.unary_expr_t)->case_idx_ = CASE1; (yyval.unary_expr_t)->operand_ = (yyvsp[0].operand_t); } #line 6828 "bison_parser.cpp" /* yacc.c:1652 */ break; case 280: #line 2783 "bison.y" /* yacc.c:1652 */ { (yyval.unary_expr_t) = new UnaryExpr(); (yyval.unary_expr_t)->case_idx_ = CASE2; (yyval.unary_expr_t)->operand_ = (yyvsp[-1].operand_t); } #line 6839 "bison_parser.cpp" /* yacc.c:1652 */ break; case 281: #line 2789 "bison.y" /* yacc.c:1652 */ { (yyval.unary_expr_t) = new UnaryExpr(); (yyval.unary_expr_t)->case_idx_ = CASE3; (yyval.unary_expr_t)->operand_ = (yyvsp[-2].operand_t); } #line 6850 "bison_parser.cpp" /* yacc.c:1652 */ break; case 282: #line 2795 "bison.y" /* yacc.c:1652 */ { (yyval.unary_expr_t) = new UnaryExpr(); (yyval.unary_expr_t)->case_idx_ = CASE4; (yyval.unary_expr_t)->operand_ = (yyvsp[-3].operand_t); } #line 6861 "bison_parser.cpp" /* yacc.c:1652 */ break; case 283: #line 2801 "bison.y" /* yacc.c:1652 */ { (yyval.unary_expr_t) = new UnaryExpr(); (yyval.unary_expr_t)->case_idx_ = CASE5; } #line 6871 "bison_parser.cpp" /* yacc.c:1652 */ break; case 284: #line 2806 "bison.y" /* yacc.c:1652 */ { (yyval.unary_expr_t) = new UnaryExpr(); (yyval.unary_expr_t)->case_idx_ = CASE6; } #line 6881 "bison_parser.cpp" /* yacc.c:1652 */ break; case 285: #line 2814 "bison.y" /* yacc.c:1652 */ { (yyval.binary_expr_t) = new BinaryExpr(); (yyval.binary_expr_t)->case_idx_ = CASE0; (yyval.binary_expr_t)->comp_expr_ = (yyvsp[0].comp_expr_t); } #line 6892 "bison_parser.cpp" /* yacc.c:1652 */ break; case 286: #line 2820 "bison.y" /* yacc.c:1652 */ { (yyval.binary_expr_t) = new BinaryExpr(); (yyval.binary_expr_t)->case_idx_ = CASE1; (yyval.binary_expr_t)->operand_1_ = (yyvsp[-2].operand_t); (yyval.binary_expr_t)->binary_op_ = (yyvsp[-1].binary_op_t); (yyval.binary_expr_t)->operand_2_ = (yyvsp[0].operand_t); } #line 6905 "bison_parser.cpp" /* yacc.c:1652 */ break; case 287: #line 2828 "bison.y" /* yacc.c:1652 */ { (yyval.binary_expr_t) = new BinaryExpr(); (yyval.binary_expr_t)->case_idx_ = CASE2; (yyval.binary_expr_t)->operand_1_ = (yyvsp[-2].operand_t); (yyval.binary_expr_t)->operand_2_ = (yyvsp[0].operand_t); } #line 6917 "bison_parser.cpp" /* yacc.c:1652 */ break; case 288: #line 2835 "bison.y" /* yacc.c:1652 */ { (yyval.binary_expr_t) = new BinaryExpr(); (yyval.binary_expr_t)->case_idx_ = CASE3; (yyval.binary_expr_t)->operand_1_ = (yyvsp[-3].operand_t); (yyval.binary_expr_t)->operand_2_ = (yyvsp[0].operand_t); } #line 6929 "bison_parser.cpp" /* yacc.c:1652 */ break; case 289: #line 2845 "bison.y" /* yacc.c:1652 */ { (yyval.logic_expr_t) = new LogicExpr(); (yyval.logic_expr_t)->case_idx_ = CASE0; (yyval.logic_expr_t)->expr_1_ = (yyvsp[-2].expr_t); (yyval.logic_expr_t)->expr_2_ = (yyvsp[0].expr_t); } #line 6941 "bison_parser.cpp" /* yacc.c:1652 */ break; case 290: #line 2852 "bison.y" /* yacc.c:1652 */ { (yyval.logic_expr_t) = new LogicExpr(); (yyval.logic_expr_t)->case_idx_ = CASE1; (yyval.logic_expr_t)->expr_1_ = (yyvsp[-2].expr_t); (yyval.logic_expr_t)->expr_2_ = (yyvsp[0].expr_t); } #line 6953 "bison_parser.cpp" /* yacc.c:1652 */ break; case 291: #line 2862 "bison.y" /* yacc.c:1652 */ { (yyval.in_expr_t) = new InExpr(); (yyval.in_expr_t)->case_idx_ = CASE0; (yyval.in_expr_t)->operand_ = (yyvsp[-5].operand_t); (yyval.in_expr_t)->opt_not_ = (yyvsp[-4].opt_not_t); (yyval.in_expr_t)->select_no_parens_ = (yyvsp[-1].select_no_parens_t); } #line 6966 "bison_parser.cpp" /* yacc.c:1652 */ break; case 292: #line 2870 "bison.y" /* yacc.c:1652 */ { (yyval.in_expr_t) = new InExpr(); (yyval.in_expr_t)->case_idx_ = CASE1; (yyval.in_expr_t)->operand_ = (yyvsp[-5].operand_t); (yyval.in_expr_t)->opt_not_ = (yyvsp[-4].opt_not_t); (yyval.in_expr_t)->expr_list_ = (yyvsp[-1].expr_list_t); } #line 6979 "bison_parser.cpp" /* yacc.c:1652 */ break; case 293: #line 2878 "bison.y" /* yacc.c:1652 */ { (yyval.in_expr_t) = new InExpr(); (yyval.in_expr_t)->case_idx_ = CASE2; (yyval.in_expr_t)->operand_ = (yyvsp[-3].operand_t); (yyval.in_expr_t)->opt_not_ = (yyvsp[-2].opt_not_t); (yyval.in_expr_t)->table_name_ = (yyvsp[0].table_name_t); } #line 6992 "bison_parser.cpp" /* yacc.c:1652 */ break; case 294: #line 2889 "bison.y" /* yacc.c:1652 */ { (yyval.case_expr_t) = new CaseExpr(); (yyval.case_expr_t)->case_idx_ = CASE0; (yyval.case_expr_t)->expr_1_ = (yyvsp[-2].expr_t); (yyval.case_expr_t)->case_list_ = (yyvsp[-1].case_list_t); } #line 7004 "bison_parser.cpp" /* yacc.c:1652 */ break; case 295: #line 2896 "bison.y" /* yacc.c:1652 */ { (yyval.case_expr_t) = new CaseExpr(); (yyval.case_expr_t)->case_idx_ = CASE1; (yyval.case_expr_t)->case_list_ = (yyvsp[-1].case_list_t); } #line 7015 "bison_parser.cpp" /* yacc.c:1652 */ break; case 296: #line 2902 "bison.y" /* yacc.c:1652 */ { (yyval.case_expr_t) = new CaseExpr(); (yyval.case_expr_t)->case_idx_ = CASE2; (yyval.case_expr_t)->expr_1_ = (yyvsp[-4].expr_t); (yyval.case_expr_t)->case_list_ = (yyvsp[-3].case_list_t); (yyval.case_expr_t)->expr_2_ = (yyvsp[-1].expr_t); } #line 7028 "bison_parser.cpp" /* yacc.c:1652 */ break; case 297: #line 2910 "bison.y" /* yacc.c:1652 */ { (yyval.case_expr_t) = new CaseExpr(); (yyval.case_expr_t)->case_idx_ = CASE3; (yyval.case_expr_t)->case_list_ = (yyvsp[-3].case_list_t); (yyval.case_expr_t)->expr_1_ = (yyvsp[-1].expr_t); } #line 7040 "bison_parser.cpp" /* yacc.c:1652 */ break; case 298: #line 2920 "bison.y" /* yacc.c:1652 */ { (yyval.between_expr_t) = new BetweenExpr(); (yyval.between_expr_t)->case_idx_ = CASE0; (yyval.between_expr_t)->operand_1_ = (yyvsp[-4].operand_t); (yyval.between_expr_t)->operand_2_ = (yyvsp[-2].operand_t); (yyval.between_expr_t)->operand_3_ = (yyvsp[0].operand_t); } #line 7053 "bison_parser.cpp" /* yacc.c:1652 */ break; case 299: #line 2928 "bison.y" /* yacc.c:1652 */ { (yyval.between_expr_t) = new BetweenExpr(); (yyval.between_expr_t)->case_idx_ = CASE1; (yyval.between_expr_t)->operand_1_ = (yyvsp[-5].operand_t); (yyval.between_expr_t)->operand_2_ = (yyvsp[-2].operand_t); (yyval.between_expr_t)->operand_3_ = (yyvsp[0].operand_t); } #line 7066 "bison_parser.cpp" /* yacc.c:1652 */ break; case 300: #line 2939 "bison.y" /* yacc.c:1652 */ { (yyval.exists_expr_t) = new ExistsExpr(); (yyval.exists_expr_t)->case_idx_ = CASE0; (yyval.exists_expr_t)->opt_not_ = (yyvsp[-4].opt_not_t); (yyval.exists_expr_t)->select_no_parens_ = (yyvsp[-1].select_no_parens_t); } #line 7078 "bison_parser.cpp" /* yacc.c:1652 */ break; case 301: #line 2949 "bison.y" /* yacc.c:1652 */ { (yyval.function_expr_t) = new FunctionExpr(); (yyval.function_expr_t)->case_idx_ = CASE0; (yyval.function_expr_t)->function_name_ = (yyvsp[-4].function_name_t); (yyval.function_expr_t)->opt_filter_clause_ = (yyvsp[-1].opt_filter_clause_t); (yyval.function_expr_t)->opt_over_clause_ = (yyvsp[0].opt_over_clause_t); } #line 7091 "bison_parser.cpp" /* yacc.c:1652 */ break; case 302: #line 2957 "bison.y" /* yacc.c:1652 */ { (yyval.function_expr_t) = new FunctionExpr(); (yyval.function_expr_t)->case_idx_ = CASE1; (yyval.function_expr_t)->function_name_ = (yyvsp[-6].function_name_t); (yyval.function_expr_t)->opt_distinct_ = (yyvsp[-4].opt_distinct_t); (yyval.function_expr_t)->expr_list_ = (yyvsp[-3].expr_list_t); (yyval.function_expr_t)->opt_filter_clause_ = (yyvsp[-1].opt_filter_clause_t); (yyval.function_expr_t)->opt_over_clause_ = (yyvsp[0].opt_over_clause_t); } #line 7106 "bison_parser.cpp" /* yacc.c:1652 */ break; case 303: #line 2970 "bison.y" /* yacc.c:1652 */ { (yyval.opt_distinct_t) = new OptDistinct(); (yyval.opt_distinct_t)->case_idx_ = CASE0; } #line 7116 "bison_parser.cpp" /* yacc.c:1652 */ break; case 304: #line 2975 "bison.y" /* yacc.c:1652 */ { (yyval.opt_distinct_t) = new OptDistinct(); (yyval.opt_distinct_t)->case_idx_ = CASE1; } #line 7126 "bison_parser.cpp" /* yacc.c:1652 */ break; case 305: #line 2983 "bison.y" /* yacc.c:1652 */ { (yyval.opt_filter_clause_t) = new OptFilterClause(); (yyval.opt_filter_clause_t)->case_idx_ = CASE0; (yyval.opt_filter_clause_t)->expr_ = (yyvsp[-1].expr_t); } #line 7137 "bison_parser.cpp" /* yacc.c:1652 */ break; case 306: #line 2989 "bison.y" /* yacc.c:1652 */ { (yyval.opt_filter_clause_t) = new OptFilterClause(); (yyval.opt_filter_clause_t)->case_idx_ = CASE1; } #line 7147 "bison_parser.cpp" /* yacc.c:1652 */ break; case 307: #line 2997 "bison.y" /* yacc.c:1652 */ { (yyval.opt_over_clause_t) = new OptOverClause(); (yyval.opt_over_clause_t)->case_idx_ = CASE0; (yyval.opt_over_clause_t)->window_ = (yyvsp[-1].window_t); } #line 7158 "bison_parser.cpp" /* yacc.c:1652 */ break; case 308: #line 3003 "bison.y" /* yacc.c:1652 */ { (yyval.opt_over_clause_t) = new OptOverClause(); (yyval.opt_over_clause_t)->case_idx_ = CASE1; (yyval.opt_over_clause_t)->window_name_ = (yyvsp[0].window_name_t); } #line 7169 "bison_parser.cpp" /* yacc.c:1652 */ break; case 309: #line 3009 "bison.y" /* yacc.c:1652 */ { (yyval.opt_over_clause_t) = new OptOverClause(); (yyval.opt_over_clause_t)->case_idx_ = CASE2; } #line 7179 "bison_parser.cpp" /* yacc.c:1652 */ break; case 310: #line 3017 "bison.y" /* yacc.c:1652 */ { (yyval.case_list_t) = new CaseList(); (yyval.case_list_t)->case_idx_ = CASE0; (yyval.case_list_t)->case_clause_ = (yyvsp[0].case_clause_t); } #line 7190 "bison_parser.cpp" /* yacc.c:1652 */ break; case 311: #line 3023 "bison.y" /* yacc.c:1652 */ { (yyval.case_list_t) = new CaseList(); (yyval.case_list_t)->case_idx_ = CASE1; (yyval.case_list_t)->case_clause_ = (yyvsp[-1].case_clause_t); (yyval.case_list_t)->case_list_ = (yyvsp[0].case_list_t); } #line 7202 "bison_parser.cpp" /* yacc.c:1652 */ break; case 312: #line 3033 "bison.y" /* yacc.c:1652 */ { (yyval.case_clause_t) = new CaseClause(); (yyval.case_clause_t)->case_idx_ = CASE0; (yyval.case_clause_t)->expr_1_ = (yyvsp[-2].expr_t); (yyval.case_clause_t)->expr_2_ = (yyvsp[0].expr_t); } #line 7214 "bison_parser.cpp" /* yacc.c:1652 */ break; case 313: #line 3043 "bison.y" /* yacc.c:1652 */ { (yyval.comp_expr_t) = new CompExpr(); (yyval.comp_expr_t)->case_idx_ = CASE0; (yyval.comp_expr_t)->operand_1_ = (yyvsp[-2].operand_t); (yyval.comp_expr_t)->operand_2_ = (yyvsp[0].operand_t); } #line 7226 "bison_parser.cpp" /* yacc.c:1652 */ break; case 314: #line 3050 "bison.y" /* yacc.c:1652 */ { (yyval.comp_expr_t) = new CompExpr(); (yyval.comp_expr_t)->case_idx_ = CASE1; (yyval.comp_expr_t)->operand_1_ = (yyvsp[-2].operand_t); (yyval.comp_expr_t)->operand_2_ = (yyvsp[0].operand_t); } #line 7238 "bison_parser.cpp" /* yacc.c:1652 */ break; case 315: #line 3057 "bison.y" /* yacc.c:1652 */ { (yyval.comp_expr_t) = new CompExpr(); (yyval.comp_expr_t)->case_idx_ = CASE2; (yyval.comp_expr_t)->operand_1_ = (yyvsp[-2].operand_t); (yyval.comp_expr_t)->operand_2_ = (yyvsp[0].operand_t); } #line 7250 "bison_parser.cpp" /* yacc.c:1652 */ break; case 316: #line 3064 "bison.y" /* yacc.c:1652 */ { (yyval.comp_expr_t) = new CompExpr(); (yyval.comp_expr_t)->case_idx_ = CASE3; (yyval.comp_expr_t)->operand_1_ = (yyvsp[-2].operand_t); (yyval.comp_expr_t)->operand_2_ = (yyvsp[0].operand_t); } #line 7262 "bison_parser.cpp" /* yacc.c:1652 */ break; case 317: #line 3071 "bison.y" /* yacc.c:1652 */ { (yyval.comp_expr_t) = new CompExpr(); (yyval.comp_expr_t)->case_idx_ = CASE4; (yyval.comp_expr_t)->operand_1_ = (yyvsp[-2].operand_t); (yyval.comp_expr_t)->operand_2_ = (yyvsp[0].operand_t); } #line 7274 "bison_parser.cpp" /* yacc.c:1652 */ break; case 318: #line 3078 "bison.y" /* yacc.c:1652 */ { (yyval.comp_expr_t) = new CompExpr(); (yyval.comp_expr_t)->case_idx_ = CASE5; (yyval.comp_expr_t)->operand_1_ = (yyvsp[-2].operand_t); (yyval.comp_expr_t)->operand_2_ = (yyvsp[0].operand_t); } #line 7286 "bison_parser.cpp" /* yacc.c:1652 */ break; case 319: #line 3088 "bison.y" /* yacc.c:1652 */ { (yyval.extract_expr_t) = new ExtractExpr(); (yyval.extract_expr_t)->case_idx_ = CASE0; (yyval.extract_expr_t)->datetime_field_ = (yyvsp[-3].datetime_field_t); (yyval.extract_expr_t)->expr_ = (yyvsp[-1].expr_t); } #line 7298 "bison_parser.cpp" /* yacc.c:1652 */ break; case 320: #line 3098 "bison.y" /* yacc.c:1652 */ { (yyval.datetime_field_t) = new DatetimeField(); (yyval.datetime_field_t)->case_idx_ = CASE0; } #line 7308 "bison_parser.cpp" /* yacc.c:1652 */ break; case 321: #line 3103 "bison.y" /* yacc.c:1652 */ { (yyval.datetime_field_t) = new DatetimeField(); (yyval.datetime_field_t)->case_idx_ = CASE1; } #line 7318 "bison_parser.cpp" /* yacc.c:1652 */ break; case 322: #line 3108 "bison.y" /* yacc.c:1652 */ { (yyval.datetime_field_t) = new DatetimeField(); (yyval.datetime_field_t)->case_idx_ = CASE2; } #line 7328 "bison_parser.cpp" /* yacc.c:1652 */ break; case 323: #line 3113 "bison.y" /* yacc.c:1652 */ { (yyval.datetime_field_t) = new DatetimeField(); (yyval.datetime_field_t)->case_idx_ = CASE3; } #line 7338 "bison_parser.cpp" /* yacc.c:1652 */ break; case 324: #line 3118 "bison.y" /* yacc.c:1652 */ { (yyval.datetime_field_t) = new DatetimeField(); (yyval.datetime_field_t)->case_idx_ = CASE4; } #line 7348 "bison_parser.cpp" /* yacc.c:1652 */ break; case 325: #line 3123 "bison.y" /* yacc.c:1652 */ { (yyval.datetime_field_t) = new DatetimeField(); (yyval.datetime_field_t)->case_idx_ = CASE5; } #line 7358 "bison_parser.cpp" /* yacc.c:1652 */ break; case 326: #line 3131 "bison.y" /* yacc.c:1652 */ { (yyval.array_expr_t) = new ArrayExpr(); (yyval.array_expr_t)->case_idx_ = CASE0; (yyval.array_expr_t)->expr_list_ = (yyvsp[-1].expr_list_t); } #line 7369 "bison_parser.cpp" /* yacc.c:1652 */ break; case 327: #line 3140 "bison.y" /* yacc.c:1652 */ { (yyval.array_index_t) = new ArrayIndex(); (yyval.array_index_t)->case_idx_ = CASE0; (yyval.array_index_t)->operand_ = (yyvsp[-3].operand_t); (yyval.array_index_t)->int_literal_ = (yyvsp[-1].int_literal_t); } #line 7381 "bison_parser.cpp" /* yacc.c:1652 */ break; case 328: #line 3150 "bison.y" /* yacc.c:1652 */ { (yyval.literal_t) = new Literal(); (yyval.literal_t)->case_idx_ = CASE0; (yyval.literal_t)->string_literal_ = (yyvsp[0].string_literal_t); } #line 7392 "bison_parser.cpp" /* yacc.c:1652 */ break; case 329: #line 3156 "bison.y" /* yacc.c:1652 */ { (yyval.literal_t) = new Literal(); (yyval.literal_t)->case_idx_ = CASE1; (yyval.literal_t)->bool_literal_ = (yyvsp[0].bool_literal_t); } #line 7403 "bison_parser.cpp" /* yacc.c:1652 */ break; case 330: #line 3162 "bison.y" /* yacc.c:1652 */ { (yyval.literal_t) = new Literal(); (yyval.literal_t)->case_idx_ = CASE2; (yyval.literal_t)->num_literal_ = (yyvsp[0].num_literal_t); } #line 7414 "bison_parser.cpp" /* yacc.c:1652 */ break; case 331: #line 3171 "bison.y" /* yacc.c:1652 */ { (yyval.string_literal_t) = new StringLiteral(); (yyval.string_literal_t)->string_val_ = (yyvsp[0].sval); free((yyvsp[0].sval)); } #line 7425 "bison_parser.cpp" /* yacc.c:1652 */ break; case 332: #line 3180 "bison.y" /* yacc.c:1652 */ { (yyval.bool_literal_t) = new BoolLiteral(); (yyval.bool_literal_t)->case_idx_ = CASE0; } #line 7435 "bison_parser.cpp" /* yacc.c:1652 */ break; case 333: #line 3185 "bison.y" /* yacc.c:1652 */ { (yyval.bool_literal_t) = new BoolLiteral(); (yyval.bool_literal_t)->case_idx_ = CASE1; } #line 7445 "bison_parser.cpp" /* yacc.c:1652 */ break; case 334: #line 3193 "bison.y" /* yacc.c:1652 */ { (yyval.num_literal_t) = new NumLiteral(); (yyval.num_literal_t)->case_idx_ = CASE0; (yyval.num_literal_t)->int_literal_ = (yyvsp[0].int_literal_t); } #line 7456 "bison_parser.cpp" /* yacc.c:1652 */ break; case 335: #line 3199 "bison.y" /* yacc.c:1652 */ { (yyval.num_literal_t) = new NumLiteral(); (yyval.num_literal_t)->case_idx_ = CASE1; (yyval.num_literal_t)->float_literal_ = (yyvsp[0].float_literal_t); } #line 7467 "bison_parser.cpp" /* yacc.c:1652 */ break; case 336: #line 3208 "bison.y" /* yacc.c:1652 */ { (yyval.int_literal_t) = new IntLiteral(); (yyval.int_literal_t)->int_val_ = (yyvsp[0].ival); } #line 7477 "bison_parser.cpp" /* yacc.c:1652 */ break; case 337: #line 3216 "bison.y" /* yacc.c:1652 */ { (yyval.float_literal_t) = new FloatLiteral(); (yyval.float_literal_t)->float_val_ = (yyvsp[0].fval); } #line 7487 "bison_parser.cpp" /* yacc.c:1652 */ break; case 338: #line 3224 "bison.y" /* yacc.c:1652 */ { (yyval.opt_column_t) = new OptColumn(); (yyval.opt_column_t)->case_idx_ = CASE0; } #line 7497 "bison_parser.cpp" /* yacc.c:1652 */ break; case 339: #line 3229 "bison.y" /* yacc.c:1652 */ { (yyval.opt_column_t) = new OptColumn(); (yyval.opt_column_t)->case_idx_ = CASE1; } #line 7507 "bison_parser.cpp" /* yacc.c:1652 */ break; case 340: #line 3237 "bison.y" /* yacc.c:1652 */ { (yyval.trigger_body_t) = new TriggerBody(); (yyval.trigger_body_t)->case_idx_ = CASE0; (yyval.trigger_body_t)->drop_stmt_ = (yyvsp[0].drop_stmt_t); } #line 7518 "bison_parser.cpp" /* yacc.c:1652 */ break; case 341: #line 3243 "bison.y" /* yacc.c:1652 */ { (yyval.trigger_body_t) = new TriggerBody(); (yyval.trigger_body_t)->case_idx_ = CASE1; (yyval.trigger_body_t)->update_stmt_ = (yyvsp[0].update_stmt_t); } #line 7529 "bison_parser.cpp" /* yacc.c:1652 */ break; case 342: #line 3249 "bison.y" /* yacc.c:1652 */ { (yyval.trigger_body_t) = new TriggerBody(); (yyval.trigger_body_t)->case_idx_ = CASE2; (yyval.trigger_body_t)->insert_stmt_ = (yyvsp[0].insert_stmt_t); } #line 7540 "bison_parser.cpp" /* yacc.c:1652 */ break; case 343: #line 3255 "bison.y" /* yacc.c:1652 */ { (yyval.trigger_body_t) = new TriggerBody(); (yyval.trigger_body_t)->case_idx_ = CASE3; (yyval.trigger_body_t)->alter_stmt_ = (yyvsp[0].alter_stmt_t); } #line 7551 "bison_parser.cpp" /* yacc.c:1652 */ break; case 344: #line 3264 "bison.y" /* yacc.c:1652 */ { (yyval.opt_if_not_exist_t) = new OptIfNotExist(); (yyval.opt_if_not_exist_t)->case_idx_ = CASE0; } #line 7561 "bison_parser.cpp" /* yacc.c:1652 */ break; case 345: #line 3269 "bison.y" /* yacc.c:1652 */ { (yyval.opt_if_not_exist_t) = new OptIfNotExist(); (yyval.opt_if_not_exist_t)->case_idx_ = CASE1; } #line 7571 "bison_parser.cpp" /* yacc.c:1652 */ break; case 346: #line 3277 "bison.y" /* yacc.c:1652 */ { (yyval.opt_if_exist_t) = new OptIfExist(); (yyval.opt_if_exist_t)->case_idx_ = CASE0; } #line 7581 "bison_parser.cpp" /* yacc.c:1652 */ break; case 347: #line 3282 "bison.y" /* yacc.c:1652 */ { (yyval.opt_if_exist_t) = new OptIfExist(); (yyval.opt_if_exist_t)->case_idx_ = CASE1; } #line 7591 "bison_parser.cpp" /* yacc.c:1652 */ break; case 348: #line 3290 "bison.y" /* yacc.c:1652 */ { (yyval.identifier_t) = new Identifier(); (yyval.identifier_t)->string_val_ = (yyvsp[0].sval); free((yyvsp[0].sval)); } #line 7602 "bison_parser.cpp" /* yacc.c:1652 */ break; case 349: #line 3299 "bison.y" /* yacc.c:1652 */ { (yyval.as_alias_t) = new AsAlias(); (yyval.as_alias_t)->case_idx_ = CASE0; (yyval.as_alias_t)->identifier_ = (yyvsp[0].identifier_t); if ((yyval.as_alias_t)) { auto tmp1 = (yyval.as_alias_t)->identifier_; if (tmp1) { tmp1->data_type_ = kDataAliasName; tmp1->scope_ = 1; tmp1->data_flag_ = (DATAFLAG)1; } } } #line 7622 "bison_parser.cpp" /* yacc.c:1652 */ break; case 350: #line 3317 "bison.y" /* yacc.c:1652 */ { (yyval.table_name_t) = new TableName(); (yyval.table_name_t)->case_idx_ = CASE0; (yyval.table_name_t)->identifier_ = (yyvsp[0].identifier_t); if ((yyval.table_name_t)) { auto tmp1 = (yyval.table_name_t)->identifier_; if (tmp1) { tmp1->data_type_ = kDataTableName; tmp1->scope_ = 1; tmp1->data_flag_ = (DATAFLAG)8; } } } #line 7642 "bison_parser.cpp" /* yacc.c:1652 */ break; case 351: #line 3335 "bison.y" /* yacc.c:1652 */ { (yyval.column_name_t) = new ColumnName(); (yyval.column_name_t)->case_idx_ = CASE0; (yyval.column_name_t)->identifier_ = (yyvsp[0].identifier_t); if ((yyval.column_name_t)) { auto tmp1 = (yyval.column_name_t)->identifier_; if (tmp1) { tmp1->data_type_ = kDataColumnName; tmp1->scope_ = 2; tmp1->data_flag_ = (DATAFLAG)8; } } } #line 7662 "bison_parser.cpp" /* yacc.c:1652 */ break; case 352: #line 3353 "bison.y" /* yacc.c:1652 */ { (yyval.opt_index_keyword_t) = new OptIndexKeyword(); (yyval.opt_index_keyword_t)->case_idx_ = CASE0; } #line 7672 "bison_parser.cpp" /* yacc.c:1652 */ break; case 353: #line 3358 "bison.y" /* yacc.c:1652 */ { (yyval.opt_index_keyword_t) = new OptIndexKeyword(); (yyval.opt_index_keyword_t)->case_idx_ = CASE1; } #line 7682 "bison_parser.cpp" /* yacc.c:1652 */ break; case 354: #line 3363 "bison.y" /* yacc.c:1652 */ { (yyval.opt_index_keyword_t) = new OptIndexKeyword(); (yyval.opt_index_keyword_t)->case_idx_ = CASE2; } #line 7692 "bison_parser.cpp" /* yacc.c:1652 */ break; case 355: #line 3368 "bison.y" /* yacc.c:1652 */ { (yyval.opt_index_keyword_t) = new OptIndexKeyword(); (yyval.opt_index_keyword_t)->case_idx_ = CASE3; } #line 7702 "bison_parser.cpp" /* yacc.c:1652 */ break; case 356: #line 3376 "bison.y" /* yacc.c:1652 */ { (yyval.view_name_t) = new ViewName(); (yyval.view_name_t)->case_idx_ = CASE0; (yyval.view_name_t)->identifier_ = (yyvsp[0].identifier_t); } #line 7713 "bison_parser.cpp" /* yacc.c:1652 */ break; case 357: #line 3385 "bison.y" /* yacc.c:1652 */ { (yyval.function_name_t) = new FunctionName(); (yyval.function_name_t)->case_idx_ = CASE0; (yyval.function_name_t)->identifier_ = (yyvsp[0].identifier_t); if ((yyval.function_name_t)) { auto tmp1 = (yyval.function_name_t)->identifier_; if (tmp1) { tmp1->data_type_ = kDataFunctionName; tmp1->scope_ = 1; tmp1->data_flag_ = (DATAFLAG)4; } } } #line 7733 "bison_parser.cpp" /* yacc.c:1652 */ break; case 358: #line 3403 "bison.y" /* yacc.c:1652 */ { (yyval.binary_op_t) = new BinaryOp(); (yyval.binary_op_t)->case_idx_ = CASE0; } #line 7743 "bison_parser.cpp" /* yacc.c:1652 */ break; case 359: #line 3408 "bison.y" /* yacc.c:1652 */ { (yyval.binary_op_t) = new BinaryOp(); (yyval.binary_op_t)->case_idx_ = CASE1; } #line 7753 "bison_parser.cpp" /* yacc.c:1652 */ break; case 360: #line 3413 "bison.y" /* yacc.c:1652 */ { (yyval.binary_op_t) = new BinaryOp(); (yyval.binary_op_t)->case_idx_ = CASE2; } #line 7763 "bison_parser.cpp" /* yacc.c:1652 */ break; case 361: #line 3418 "bison.y" /* yacc.c:1652 */ { (yyval.binary_op_t) = new BinaryOp(); (yyval.binary_op_t)->case_idx_ = CASE3; } #line 7773 "bison_parser.cpp" /* yacc.c:1652 */ break; case 362: #line 3423 "bison.y" /* yacc.c:1652 */ { (yyval.binary_op_t) = new BinaryOp(); (yyval.binary_op_t)->case_idx_ = CASE4; } #line 7783 "bison_parser.cpp" /* yacc.c:1652 */ break; case 363: #line 3428 "bison.y" /* yacc.c:1652 */ { (yyval.binary_op_t) = new BinaryOp(); (yyval.binary_op_t)->case_idx_ = CASE5; } #line 7793 "bison_parser.cpp" /* yacc.c:1652 */ break; case 364: #line 3436 "bison.y" /* yacc.c:1652 */ { (yyval.opt_not_t) = new OptNot(); (yyval.opt_not_t)->case_idx_ = CASE0; } #line 7803 "bison_parser.cpp" /* yacc.c:1652 */ break; case 365: #line 3441 "bison.y" /* yacc.c:1652 */ { (yyval.opt_not_t) = new OptNot(); (yyval.opt_not_t)->case_idx_ = CASE1; } #line 7813 "bison_parser.cpp" /* yacc.c:1652 */ break; case 366: #line 3449 "bison.y" /* yacc.c:1652 */ { (yyval.name_t) = new Name(); (yyval.name_t)->case_idx_ = CASE0; (yyval.name_t)->identifier_ = (yyvsp[0].identifier_t); } #line 7824 "bison_parser.cpp" /* yacc.c:1652 */ break; case 367: #line 3458 "bison.y" /* yacc.c:1652 */ { (yyval.type_name_t) = new TypeName(); (yyval.type_name_t)->case_idx_ = CASE0; (yyval.type_name_t)->numeric_type_ = (yyvsp[0].numeric_type_t); } #line 7835 "bison_parser.cpp" /* yacc.c:1652 */ break; case 368: #line 3464 "bison.y" /* yacc.c:1652 */ { (yyval.type_name_t) = new TypeName(); (yyval.type_name_t)->case_idx_ = CASE1; (yyval.type_name_t)->character_type_ = (yyvsp[0].character_type_t); } #line 7846 "bison_parser.cpp" /* yacc.c:1652 */ break; case 369: #line 3473 "bison.y" /* yacc.c:1652 */ { (yyval.character_type_t) = new CharacterType(); (yyval.character_type_t)->case_idx_ = CASE0; (yyval.character_type_t)->character_with_length_ = (yyvsp[0].character_with_length_t); } #line 7857 "bison_parser.cpp" /* yacc.c:1652 */ break; case 370: #line 3479 "bison.y" /* yacc.c:1652 */ { (yyval.character_type_t) = new CharacterType(); (yyval.character_type_t)->case_idx_ = CASE1; (yyval.character_type_t)->character_without_length_ = (yyvsp[0].character_without_length_t); } #line 7868 "bison_parser.cpp" /* yacc.c:1652 */ break; case 371: #line 3488 "bison.y" /* yacc.c:1652 */ { (yyval.character_with_length_t) = new CharacterWithLength(); (yyval.character_with_length_t)->case_idx_ = CASE0; (yyval.character_with_length_t)->character_conflicta_ = (yyvsp[-3].character_conflicta_t); (yyval.character_with_length_t)->int_literal_ = (yyvsp[-1].int_literal_t); } #line 7880 "bison_parser.cpp" /* yacc.c:1652 */ break; case 372: #line 3498 "bison.y" /* yacc.c:1652 */ { (yyval.character_without_length_t) = new CharacterWithoutLength(); (yyval.character_without_length_t)->case_idx_ = CASE0; (yyval.character_without_length_t)->character_conflicta_ = (yyvsp[0].character_conflicta_t); } #line 7891 "bison_parser.cpp" /* yacc.c:1652 */ break; case 373: #line 3504 "bison.y" /* yacc.c:1652 */ { (yyval.character_without_length_t) = new CharacterWithoutLength(); (yyval.character_without_length_t)->case_idx_ = CASE1; } #line 7901 "bison_parser.cpp" /* yacc.c:1652 */ break; case 374: #line 3509 "bison.y" /* yacc.c:1652 */ { (yyval.character_without_length_t) = new CharacterWithoutLength(); (yyval.character_without_length_t)->case_idx_ = CASE2; } #line 7911 "bison_parser.cpp" /* yacc.c:1652 */ break; case 375: #line 3514 "bison.y" /* yacc.c:1652 */ { (yyval.character_without_length_t) = new CharacterWithoutLength(); (yyval.character_without_length_t)->case_idx_ = CASE3; } #line 7921 "bison_parser.cpp" /* yacc.c:1652 */ break; case 376: #line 3522 "bison.y" /* yacc.c:1652 */ { (yyval.character_conflicta_t) = new CharacterConflicta(); (yyval.character_conflicta_t)->case_idx_ = CASE0; } #line 7931 "bison_parser.cpp" /* yacc.c:1652 */ break; case 377: #line 3527 "bison.y" /* yacc.c:1652 */ { (yyval.character_conflicta_t) = new CharacterConflicta(); (yyval.character_conflicta_t)->case_idx_ = CASE1; } #line 7941 "bison_parser.cpp" /* yacc.c:1652 */ break; case 378: #line 3532 "bison.y" /* yacc.c:1652 */ { (yyval.character_conflicta_t) = new CharacterConflicta(); (yyval.character_conflicta_t)->case_idx_ = CASE2; } #line 7951 "bison_parser.cpp" /* yacc.c:1652 */ break; case 379: #line 3537 "bison.y" /* yacc.c:1652 */ { (yyval.character_conflicta_t) = new CharacterConflicta(); (yyval.character_conflicta_t)->case_idx_ = CASE3; } #line 7961 "bison_parser.cpp" /* yacc.c:1652 */ break; case 380: #line 3542 "bison.y" /* yacc.c:1652 */ { (yyval.character_conflicta_t) = new CharacterConflicta(); (yyval.character_conflicta_t)->case_idx_ = CASE4; } #line 7971 "bison_parser.cpp" /* yacc.c:1652 */ break; case 381: #line 3547 "bison.y" /* yacc.c:1652 */ { (yyval.character_conflicta_t) = new CharacterConflicta(); (yyval.character_conflicta_t)->case_idx_ = CASE5; } #line 7981 "bison_parser.cpp" /* yacc.c:1652 */ break; case 382: #line 3552 "bison.y" /* yacc.c:1652 */ { (yyval.character_conflicta_t) = new CharacterConflicta(); (yyval.character_conflicta_t)->case_idx_ = CASE6; } #line 7991 "bison_parser.cpp" /* yacc.c:1652 */ break; case 383: #line 3557 "bison.y" /* yacc.c:1652 */ { (yyval.character_conflicta_t) = new CharacterConflicta(); (yyval.character_conflicta_t)->case_idx_ = CASE7; } #line 8001 "bison_parser.cpp" /* yacc.c:1652 */ break; case 384: #line 3562 "bison.y" /* yacc.c:1652 */ { (yyval.character_conflicta_t) = new CharacterConflicta(); (yyval.character_conflicta_t)->case_idx_ = CASE8; } #line 8011 "bison_parser.cpp" /* yacc.c:1652 */ break; case 385: #line 3567 "bison.y" /* yacc.c:1652 */ { (yyval.character_conflicta_t) = new CharacterConflicta(); (yyval.character_conflicta_t)->case_idx_ = CASE9; } #line 8021 "bison_parser.cpp" /* yacc.c:1652 */ break; case 386: #line 3575 "bison.y" /* yacc.c:1652 */ { (yyval.numeric_type_t) = new NumericType(); (yyval.numeric_type_t)->case_idx_ = CASE0; } #line 8031 "bison_parser.cpp" /* yacc.c:1652 */ break; case 387: #line 3580 "bison.y" /* yacc.c:1652 */ { (yyval.numeric_type_t) = new NumericType(); (yyval.numeric_type_t)->case_idx_ = CASE1; } #line 8041 "bison_parser.cpp" /* yacc.c:1652 */ break; case 388: #line 3585 "bison.y" /* yacc.c:1652 */ { (yyval.numeric_type_t) = new NumericType(); (yyval.numeric_type_t)->case_idx_ = CASE2; } #line 8051 "bison_parser.cpp" /* yacc.c:1652 */ break; case 389: #line 3590 "bison.y" /* yacc.c:1652 */ { (yyval.numeric_type_t) = new NumericType(); (yyval.numeric_type_t)->case_idx_ = CASE3; } #line 8061 "bison_parser.cpp" /* yacc.c:1652 */ break; case 390: #line 3595 "bison.y" /* yacc.c:1652 */ { (yyval.numeric_type_t) = new NumericType(); (yyval.numeric_type_t)->case_idx_ = CASE4; } #line 8071 "bison_parser.cpp" /* yacc.c:1652 */ break; case 391: #line 3600 "bison.y" /* yacc.c:1652 */ { (yyval.numeric_type_t) = new NumericType(); (yyval.numeric_type_t)->case_idx_ = CASE5; } #line 8081 "bison_parser.cpp" /* yacc.c:1652 */ break; case 392: #line 3605 "bison.y" /* yacc.c:1652 */ { (yyval.numeric_type_t) = new NumericType(); (yyval.numeric_type_t)->case_idx_ = CASE6; } #line 8091 "bison_parser.cpp" /* yacc.c:1652 */ break; case 393: #line 3610 "bison.y" /* yacc.c:1652 */ { (yyval.numeric_type_t) = new NumericType(); (yyval.numeric_type_t)->case_idx_ = CASE7; } #line 8101 "bison_parser.cpp" /* yacc.c:1652 */ break; case 394: #line 3615 "bison.y" /* yacc.c:1652 */ { (yyval.numeric_type_t) = new NumericType(); (yyval.numeric_type_t)->case_idx_ = CASE8; } #line 8111 "bison_parser.cpp" /* yacc.c:1652 */ break; case 395: #line 3620 "bison.y" /* yacc.c:1652 */ { (yyval.numeric_type_t) = new NumericType(); (yyval.numeric_type_t)->case_idx_ = CASE9; } #line 8121 "bison_parser.cpp" /* yacc.c:1652 */ break; case 396: #line 3625 "bison.y" /* yacc.c:1652 */ { (yyval.numeric_type_t) = new NumericType(); (yyval.numeric_type_t)->case_idx_ = CASE10; } #line 8131 "bison_parser.cpp" /* yacc.c:1652 */ break; case 397: #line 3630 "bison.y" /* yacc.c:1652 */ { (yyval.numeric_type_t) = new NumericType(); (yyval.numeric_type_t)->case_idx_ = CASE11; } #line 8141 "bison_parser.cpp" /* yacc.c:1652 */ break; case 398: #line 3635 "bison.y" /* yacc.c:1652 */ { (yyval.numeric_type_t) = new NumericType(); (yyval.numeric_type_t)->case_idx_ = CASE12; } #line 8151 "bison_parser.cpp" /* yacc.c:1652 */ break; case 399: #line 3643 "bison.y" /* yacc.c:1652 */ { (yyval.opt_table_constraint_list_t) = new OptTableConstraintList(); (yyval.opt_table_constraint_list_t)->case_idx_ = CASE0; (yyval.opt_table_constraint_list_t)->table_constraint_list_ = (yyvsp[0].table_constraint_list_t); } #line 8162 "bison_parser.cpp" /* yacc.c:1652 */ break; case 400: #line 3649 "bison.y" /* yacc.c:1652 */ { (yyval.opt_table_constraint_list_t) = new OptTableConstraintList(); (yyval.opt_table_constraint_list_t)->case_idx_ = CASE1; } #line 8172 "bison_parser.cpp" /* yacc.c:1652 */ break; case 401: #line 3657 "bison.y" /* yacc.c:1652 */ { (yyval.table_constraint_list_t) = new TableConstraintList(); (yyval.table_constraint_list_t)->case_idx_ = CASE0; (yyval.table_constraint_list_t)->table_constraint_ = (yyvsp[0].table_constraint_t); } #line 8183 "bison_parser.cpp" /* yacc.c:1652 */ break; case 402: #line 3663 "bison.y" /* yacc.c:1652 */ { (yyval.table_constraint_list_t) = new TableConstraintList(); (yyval.table_constraint_list_t)->case_idx_ = CASE1; (yyval.table_constraint_list_t)->table_constraint_ = (yyvsp[-2].table_constraint_t); (yyval.table_constraint_list_t)->table_constraint_list_ = (yyvsp[0].table_constraint_list_t); } #line 8195 "bison_parser.cpp" /* yacc.c:1652 */ break; case 403: #line 3673 "bison.y" /* yacc.c:1652 */ { (yyval.table_constraint_t) = new TableConstraint(); (yyval.table_constraint_t)->case_idx_ = CASE0; (yyval.table_constraint_t)->constraint_name_ = (yyvsp[-5].constraint_name_t); (yyval.table_constraint_t)->indexed_column_list_ = (yyvsp[-1].indexed_column_list_t); } #line 8207 "bison_parser.cpp" /* yacc.c:1652 */ break; case 404: #line 3680 "bison.y" /* yacc.c:1652 */ { (yyval.table_constraint_t) = new TableConstraint(); (yyval.table_constraint_t)->case_idx_ = CASE1; (yyval.table_constraint_t)->constraint_name_ = (yyvsp[-4].constraint_name_t); (yyval.table_constraint_t)->indexed_column_list_ = (yyvsp[-1].indexed_column_list_t); } #line 8219 "bison_parser.cpp" /* yacc.c:1652 */ break; case 405: #line 3687 "bison.y" /* yacc.c:1652 */ { (yyval.table_constraint_t) = new TableConstraint(); (yyval.table_constraint_t)->case_idx_ = CASE2; (yyval.table_constraint_t)->constraint_name_ = (yyvsp[-5].constraint_name_t); (yyval.table_constraint_t)->expr_ = (yyvsp[-2].expr_t); (yyval.table_constraint_t)->opt_enforced_ = (yyvsp[0].opt_enforced_t); } #line 8232 "bison_parser.cpp" /* yacc.c:1652 */ break; case 406: #line 3695 "bison.y" /* yacc.c:1652 */ { (yyval.table_constraint_t) = new TableConstraint(); (yyval.table_constraint_t)->case_idx_ = CASE3; (yyval.table_constraint_t)->constraint_name_ = (yyvsp[-6].constraint_name_t); (yyval.table_constraint_t)->column_name_list_ = (yyvsp[-2].column_name_list_t); (yyval.table_constraint_t)->reference_clause_ = (yyvsp[0].reference_clause_t); if ((yyval.table_constraint_t)) { auto tmp1 = (yyval.table_constraint_t)->column_name_list_; while (tmp1) { auto tmp2 = tmp1->column_name_; if (tmp2) { auto tmp3 = tmp2->identifier_; if (tmp3) { tmp3->data_type_ = kDataColumnName; tmp3->scope_ = 2; tmp3->data_flag_ = (DATAFLAG)8; } } tmp1 = tmp1->column_name_list_; } } } #line 8261 "bison_parser.cpp" /* yacc.c:1652 */ break; case 407: #line 3722 "bison.y" /* yacc.c:1652 */ { (yyval.opt_enforced_t) = new OptEnforced(); (yyval.opt_enforced_t)->case_idx_ = CASE0; } #line 8271 "bison_parser.cpp" /* yacc.c:1652 */ break; case 408: #line 3727 "bison.y" /* yacc.c:1652 */ { (yyval.opt_enforced_t) = new OptEnforced(); (yyval.opt_enforced_t)->case_idx_ = CASE1; } #line 8281 "bison_parser.cpp" /* yacc.c:1652 */ break; case 409: #line 3732 "bison.y" /* yacc.c:1652 */ { (yyval.opt_enforced_t) = new OptEnforced(); (yyval.opt_enforced_t)->case_idx_ = CASE2; } #line 8291 "bison_parser.cpp" /* yacc.c:1652 */ break; #line 8295 "bison_parser.cpp" /* yacc.c:1652 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires that yytoken be updated with the new translation. We take the approach of translating immediately before every use of yytoken. One alternative is translating here after every semantic action, but that translation would be missed if the semantic action invokes YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an incorrect destructor might then be invoked immediately. In the case of YYERROR or YYBACKUP, subsequent parser actions might lead to an incorrect destructor call or verbose syntax error message before the lookahead is translated. */ YY_SYMBOL_PRINT("-> $$ =", yyr1[yyn], &yyval, &yyloc); YYPOPSTACK(yylen); yylen = 0; YY_STACK_PRINT(yyss, yyssp); *++yyvsp = yyval; *++yylsp = yyloc; /* Now 'shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ { const int yylhs = yyr1[yyn] - YYNTOKENS; const int yyi = yypgoto[yylhs] + *yyssp; yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp ? yytable[yyi] : yydefgoto[yylhs]); } goto yynewstate; /*--------------------------------------. | yyerrlab -- here on detecting error. | `--------------------------------------*/ yyerrlab: /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE(yychar); /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { ++yynerrs; #if !YYERROR_VERBOSE yyerror(&yylloc, result, scanner, YY_("syntax error")); #else #define YYSYNTAX_ERROR yysyntax_error(&yymsg_alloc, &yymsg, yyssp, yytoken) { char const *yymsgp = YY_("syntax error"); int yysyntax_error_status; yysyntax_error_status = YYSYNTAX_ERROR; if (yysyntax_error_status == 0) yymsgp = yymsg; else if (yysyntax_error_status == 1) { if (yymsg != yymsgbuf) YYSTACK_FREE(yymsg); yymsg = (char *)YYSTACK_ALLOC(yymsg_alloc); if (!yymsg) { yymsg = yymsgbuf; yymsg_alloc = sizeof yymsgbuf; yysyntax_error_status = 2; } else { yysyntax_error_status = YYSYNTAX_ERROR; yymsgp = yymsg; } } yyerror(&yylloc, result, scanner, yymsgp); if (yysyntax_error_status == 2) goto yyexhaustedlab; } #undef YYSYNTAX_ERROR #endif } yyerror_range[1] = yylloc; if (yyerrstatus == 3) { /* If just tried and failed to reuse lookahead token after an error, discard it. */ if (yychar <= YYEOF) { /* Return failure if at end of input. */ if (yychar == YYEOF) YYABORT; } else { yydestruct("Error: discarding", yytoken, &yylval, &yylloc, result, scanner); yychar = YYEMPTY; } } /* Else will try to reuse lookahead token after shifting the error token. */ goto yyerrlab1; /*---------------------------------------------------. | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: /* Pacify compilers when the user code never invokes YYERROR and the label yyerrorlab therefore never appears in user code. */ if (0) YYERROR; /* Do not reclaim the symbols of the rule whose action triggered this YYERROR. */ YYPOPSTACK(yylen); yylen = 0; YY_STACK_PRINT(yyss, yyssp); yystate = *yyssp; goto yyerrlab1; /*-------------------------------------------------------------. | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) { yyn = yypact[yystate]; if (!yypact_value_is_default(yyn)) { yyn += YYTERROR; if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) { yyn = yytable[yyn]; if (0 < yyn) break; } } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) YYABORT; yyerror_range[1] = *yylsp; yydestruct("Error: popping", yystos[yystate], yyvsp, yylsp, result, scanner); YYPOPSTACK(1); yystate = *yyssp; YY_STACK_PRINT(yyss, yyssp); } YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END yyerror_range[2] = yylloc; /* Using YYLLOC is tempting, but would change the location of the lookahead. YYLOC is available though. */ YYLLOC_DEFAULT(yyloc, yyerror_range, 2); *++yylsp = yyloc; /* Shift the error token. */ YY_SYMBOL_PRINT("Shifting", yystos[yyn], yyvsp, yylsp); yystate = yyn; goto yynewstate; /*-------------------------------------. | yyacceptlab -- YYACCEPT comes here. | `-------------------------------------*/ yyacceptlab: yyresult = 0; goto yyreturn; /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: yyresult = 1; goto yyreturn; #if !defined yyoverflow || YYERROR_VERBOSE /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ yyexhaustedlab: yyerror(&yylloc, result, scanner, YY_("memory exhausted")); yyresult = 2; /* Fall through. */ #endif /*-----------------------------------------------------. | yyreturn -- parsing is finished, return the result. | `-----------------------------------------------------*/ yyreturn: if (yychar != YYEMPTY) { /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ yytoken = YYTRANSLATE(yychar); yydestruct("Cleanup: discarding lookahead", yytoken, &yylval, &yylloc, result, scanner); } /* Do not reclaim the symbols of the rule whose action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK(yylen); YY_STACK_PRINT(yyss, yyssp); while (yyssp != yyss) { yydestruct("Cleanup: popping", yystos[*yyssp], yyvsp, yylsp, result, scanner); YYPOPSTACK(1); } #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE(yyss); #endif #if YYERROR_VERBOSE if (yymsg != yymsgbuf) YYSTACK_FREE(yymsg); #endif return yyresult; } #line 3739 "bison.y" /* yacc.c:1918 */ ================================================ FILE: srcs/internal/mysql/parser/bison_parser.h ================================================ /* A Bison parser, made by GNU Bison 3.3.2. */ /* Bison interface for Yacc-like parsers in C Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2019 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* Undocumented macros, especially those whose name start with YY_, are private implementation details. Do not rely on them. */ #ifndef YY_FF_BISON_PARSER_H_INCLUDED #define YY_FF_BISON_PARSER_H_INCLUDED /* Debug traces. */ #ifndef FF_DEBUG #if defined YYDEBUG #if YYDEBUG #define FF_DEBUG 1 #else #define FF_DEBUG 0 #endif #else /* ! defined YYDEBUG */ #define FF_DEBUG 0 #endif /* ! defined YYDEBUG */ #endif /* ! defined FF_DEBUG */ #if FF_DEBUG extern int ff_debug; #endif /* "%code requires" blocks. */ #line 8 "bison.y" /* yacc.c:1921 */ #include "../include/ast.h" #include "parser_typedef.h" #line 61 "bison_parser.h" /* yacc.c:1921 */ /* Token type. */ #ifndef FF_TOKENTYPE #define FF_TOKENTYPE enum ff_tokentype { SQL_OP_NOTEQUAL = 258, SQL_ENABLE = 259, SQL_SIMPLE = 260, SQL_TEXT = 261, SQL_OVER = 262, SQL_YEAR = 263, SQL_INSERT_METHOD = 264, SQL_OP_SEMI = 265, SQL_BIGINT = 266, SQL_LIMIT = 267, SQL_OP_GREATERTHAN = 268, SQL_WITH = 269, SQL_ORDER = 270, SQL_OPTION = 271, SQL_LAST = 272, SQL_UNBOUNDED = 273, SQL_PRECEDING = 274, SQL_EXCEPT = 275, SQL_NUMERIC = 276, SQL_OP_LESSTHAN = 277, SQL_ACTION = 278, SQL_BEFORE = 279, SQL_OP_GREATEREQ = 280, SQL_CHECK = 281, SQL_COMPACT = 282, SQL_FULL = 283, SQL_NATURAL = 284, SQL_BINARY = 285, SQL_NATIONAL = 286, SQL_ENUM = 287, SQL_REDUNDANT = 288, SQL_OP_ADD = 289, SQL_CURRENT = 290, SQL_MERGE = 291, SQL_TRIGGER = 292, SQL_COMPRESSED = 293, SQL_OP_SUB = 294, SQL_FALSE = 295, SQL_UNIQUE = 296, SQL_WHERE = 297, SQL_MINUTE = 298, SQL_FIRST = 299, SQL_ON = 300, SQL_PARTIAL = 301, SQL_DOUBLE = 302, SQL_AFTER = 303, SQL_PRIMARY = 304, SQL_MONTH = 305, SQL_DEFERRED = 306, SQL_VALUES = 307, SQL_LONGTEXT = 308, SQL_SQL = 309, SQL_SHARED = 310, SQL_VALIDATION = 311, SQL_OR = 312, SQL_VIEW = 313, SQL_INDEX = 314, SQL_GROUP = 315, SQL_OP_MUL = 316, SQL_INPLACE = 317, SQL_FOREIGN = 318, SQL_RESTRICT = 319, SQL_SPATIAL = 320, SQL_FOLLOWING = 321, SQL_DEC = 322, SQL_SELECT = 323, SQL_NONE = 324, SQL_DISTINCT = 325, SQL_TRUE = 326, SQL_DYNAMIC = 327, SQL_BY = 328, SQL_OP_MOD = 329, SQL_INTEGER = 330, SQL_SECURITY = 331, SQL_IS = 332, SQL_DEFINER = 333, SQL_ROW = 334, SQL_ENFORCED = 335, SQL_END = 336, SQL_RECURSIVE = 337, SQL_FOR = 338, SQL_TEMPTABLE = 339, SQL_UNION = 340, SQL_NULLS = 341, SQL_UPDATE = 342, SQL_ELSE = 343, SQL_RANGE = 344, SQL_SET = 345, SQL_INVOKER = 346, SQL_OFFSET = 347, SQL_INDEXED = 348, SQL_FORCE = 349, SQL_NCHAR = 350, SQL_AND = 351, SQL_INITIALLY = 352, SQL_PRECISION = 353, SQL_FILTER = 354, SQL_WITHOUT = 355, SQL_NOT = 356, SQL_DELETE = 357, SQL_DEFFERRABLE = 358, SQL_REAL = 359, SQL_THEN = 360, SQL_UNDEFINED = 361, SQL_DEFAULT = 362, SQL_CROSS = 363, SQL_CHAR = 364, SQL_REFERENCES = 365, SQL_OP_XOR = 366, SQL_CASE = 367, SQL_FIXED = 368, SQL_HOUR = 369, SQL_NO = 370, SQL_COLUMN = 371, SQL_LOCAL = 372, SQL_DROP = 373, SQL_REPLACE = 374, SQL_ASC = 375, SQL_OP_COMMA = 376, SQL_DISABLE = 377, SQL_TABLE = 378, SQL_ARRAY = 379, SQL_IF = 380, SQL_EXTRACT = 381, SQL_LEFT = 382, SQL_FULLTEXT = 383, SQL_HASH = 384, SQL_ALGORITHM = 385, SQL_LOCK = 386, SQL_DECIMAL = 387, SQL_PARTITION = 388, SQL_CASCADE = 389, SQL_ADD = 390, SQL_BETWEEN = 391, SQL_OP_LESSEQ = 392, SQL_MATCH = 393, SQL_ALL = 394, SQL_ROWS = 395, SQL_JOIN = 396, SQL_LIKE = 397, SQL_OP_RP = 398, SQL_IGNORE = 399, SQL_INT = 400, SQL_MEDIUMTEXT = 401, SQL_BOOLEAN = 402, SQL_KEY = 403, SQL_EACH = 404, SQL_USING = 405, SQL_RENAME = 406, SQL_DO = 407, SQL_OP_LP = 408, SQL_CHARACTER = 409, SQL_UMINUS = 410, SQL_CAST = 411, SQL_GROUPS = 412, SQL_OUTER = 413, SQL_NULL = 414, SQL_SMALLINT = 415, SQL_EXCLUSIVE = 416, SQL_TEMPORARY = 417, SQL_CONSTRAINT = 418, SQL_CREATE = 419, SQL_OP_LBRACKET = 420, SQL_WHEN = 421, SQL_IMMEDIATE = 422, SQL_TO = 423, SQL_BTREE = 424, SQL_DAY = 425, SQL_CONFLICT = 426, SQL_ROW_FORMAT = 427, SQL_OP_RBRACKET = 428, SQL_EXISTS = 429, SQL_INSERT = 430, SQL_KEYS = 431, SQL_INTO = 432, SQL_OP_DIVIDE = 433, SQL_CASCADED = 434, SQL_ISNULL = 435, SQL_AS = 436, SQL_INNER = 437, SQL_INTERSECT = 438, SQL_IN = 439, SQL_OP_EQUAL = 440, SQL_VARCHAR = 441, SQL_COPY = 442, SQL_ALTER = 443, SQL_DESC = 444, SQL_FROM = 445, SQL_TINYTEXT = 446, SQL_FLOAT = 447, SQL_SECOND = 448, SQL_WINDOW = 449, SQL_NOTHING = 450, SQL_HAVING = 451, SQL_INTLITERAL = 452, SQL_FLOATLITERAL = 453, SQL_IDENTIFIER = 454, SQL_STRINGLITERAL = 455 }; #endif /* Value type. */ #if !defined FF_STYPE && !defined FF_STYPE_IS_DECLARED #line 30 "bison.y" /* yacc.c:1921 */ union FF_STYPE { #line 30 "bison.y" /* yacc.c:1921 */ long ival; char* sval; double fval; Program* program_t; Stmtlist* stmtlist_t; Stmt* stmt_t; CreateStmt* create_stmt_t; DropStmt* drop_stmt_t; AlterStmt* alter_stmt_t; SelectStmt* select_stmt_t; SelectWithParens* select_with_parens_t; SelectNoParens* select_no_parens_t; SelectClauseList* select_clause_list_t; SelectClause* select_clause_t; CombineClause* combine_clause_t; OptFromClause* opt_from_clause_t; SelectTarget* select_target_t; OptWindowClause* opt_window_clause_t; WindowClause* window_clause_t; WindowDefList* window_def_list_t; WindowDef* window_def_t; WindowName* window_name_t; Window* window_t; OptPartition* opt_partition_t; OptFrameClause* opt_frame_clause_t; RangeOrRows* range_or_rows_t; FrameBoundStart* frame_bound_start_t; FrameBoundEnd* frame_bound_end_t; FrameBound* frame_bound_t; OptExistWindowName* opt_exist_window_name_t; OptGroupClause* opt_group_clause_t; OptHavingClause* opt_having_clause_t; OptWhereClause* opt_where_clause_t; WhereClause* where_clause_t; FromClause* from_clause_t; TableRef* table_ref_t; OptIndex* opt_index_t; OptOn* opt_on_t; OptUsing* opt_using_t; ColumnNameList* column_name_list_t; OptTablePrefix* opt_table_prefix_t; JoinOp* join_op_t; OptJoinType* opt_join_type_t; ExprList* expr_list_t; OptLimitClause* opt_limit_clause_t; LimitClause* limit_clause_t; OptLimitRowCount* opt_limit_row_count_t; OptOrderClause* opt_order_clause_t; OptOrderNulls* opt_order_nulls_t; OrderItemList* order_item_list_t; OrderItem* order_item_t; OptOrderBehavior* opt_order_behavior_t; OptWithClause* opt_with_clause_t; CteTableList* cte_table_list_t; CteTable* cte_table_t; CteTableName* cte_table_name_t; OptAllOrDistinct* opt_all_or_distinct_t; CreateTableStmt* create_table_stmt_t; CreateIndexStmt* create_index_stmt_t; CreateTriggerStmt* create_trigger_stmt_t; CreateViewStmt* create_view_stmt_t; OptTableOptionList* opt_table_option_list_t; TableOptionList* table_option_list_t; TableOption* table_option_t; OptOpComma* opt_op_comma_t; OptIgnoreOrReplace* opt_ignore_or_replace_t; OptViewAlgorithm* opt_view_algorithm_t; OptSqlSecurity* opt_sql_security_t; OptIndexOption* opt_index_option_t; OptExtraOption* opt_extra_option_t; IndexAlgorithmOption* index_algorithm_option_t; LockOption* lock_option_t; OptOpEqual* opt_op_equal_t; TriggerEvents* trigger_events_t; TriggerName* trigger_name_t; TriggerActionTime* trigger_action_time_t; DropIndexStmt* drop_index_stmt_t; DropTableStmt* drop_table_stmt_t; OptRestrictOrCascade* opt_restrict_or_cascade_t; DropTriggerStmt* drop_trigger_stmt_t; DropViewStmt* drop_view_stmt_t; InsertStmt* insert_stmt_t; InsertRest* insert_rest_t; SuperValuesList* super_values_list_t; ValuesList* values_list_t; OptOnConflict* opt_on_conflict_t; OptConflictExpr* opt_conflict_expr_t; IndexedColumnList* indexed_column_list_t; IndexedColumn* indexed_column_t; UpdateStmt* update_stmt_t; AlterAction* alter_action_t; AlterConstantAction* alter_constant_action_t; ColumnDefList* column_def_list_t; ColumnDef* column_def_t; OptColumnConstraintList* opt_column_constraint_list_t; ColumnConstraintList* column_constraint_list_t; ColumnConstraint* column_constraint_t; OptReferenceClause* opt_reference_clause_t; OptCheck* opt_check_t; ConstraintType* constraint_type_t; ReferenceClause* reference_clause_t; OptForeignKey* opt_foreign_key_t; OptForeignKeyActions* opt_foreign_key_actions_t; ForeignKeyActions* foreign_key_actions_t; KeyActions* key_actions_t; OptConstraintAttributeSpec* opt_constraint_attribute_spec_t; OptInitialTime* opt_initial_time_t; ConstraintName* constraint_name_t; OptTemp* opt_temp_t; OptCheckOption* opt_check_option_t; OptColumnNameListP* opt_column_name_list_p_t; SetClauseList* set_clause_list_t; SetClause* set_clause_t; OptAsAlias* opt_as_alias_t; Expr* expr_t; Operand* operand_t; CastExpr* cast_expr_t; ScalarExpr* scalar_expr_t; UnaryExpr* unary_expr_t; BinaryExpr* binary_expr_t; LogicExpr* logic_expr_t; InExpr* in_expr_t; CaseExpr* case_expr_t; BetweenExpr* between_expr_t; ExistsExpr* exists_expr_t; FunctionExpr* function_expr_t; OptDistinct* opt_distinct_t; OptFilterClause* opt_filter_clause_t; OptOverClause* opt_over_clause_t; CaseList* case_list_t; CaseClause* case_clause_t; CompExpr* comp_expr_t; ExtractExpr* extract_expr_t; DatetimeField* datetime_field_t; ArrayExpr* array_expr_t; ArrayIndex* array_index_t; Literal* literal_t; StringLiteral* string_literal_t; BoolLiteral* bool_literal_t; NumLiteral* num_literal_t; IntLiteral* int_literal_t; FloatLiteral* float_literal_t; OptColumn* opt_column_t; TriggerBody* trigger_body_t; OptIfNotExist* opt_if_not_exist_t; OptIfExist* opt_if_exist_t; Identifier* identifier_t; AsAlias* as_alias_t; TableName* table_name_t; ColumnName* column_name_t; OptIndexKeyword* opt_index_keyword_t; ViewName* view_name_t; FunctionName* function_name_t; BinaryOp* binary_op_t; OptNot* opt_not_t; Name* name_t; TypeName* type_name_t; CharacterType* character_type_t; CharacterWithLength* character_with_length_t; CharacterWithoutLength* character_without_length_t; CharacterConflicta* character_conflicta_t; NumericType* numeric_type_t; OptTableConstraintList* opt_table_constraint_list_t; TableConstraintList* table_constraint_list_t; TableConstraint* table_constraint_t; OptEnforced* opt_enforced_t; #line 443 "bison_parser.h" /* yacc.c:1921 */ }; #line 30 "bison.y" /* yacc.c:1921 */ typedef union FF_STYPE FF_STYPE; #define FF_STYPE_IS_TRIVIAL 1 #define FF_STYPE_IS_DECLARED 1 #endif /* Location type. */ #if !defined FF_LTYPE && !defined FF_LTYPE_IS_DECLARED typedef struct FF_LTYPE FF_LTYPE; struct FF_LTYPE { int first_line; int first_column; int last_line; int last_column; }; #define FF_LTYPE_IS_DECLARED 1 #define FF_LTYPE_IS_TRIVIAL 1 #endif int ff_parse(Program* result, yyscan_t scanner); #endif /* !YY_FF_BISON_PARSER_H_INCLUDED */ ================================================ FILE: srcs/internal/mysql/parser/bison_parser.output ================================================ Grammar 0 $accept: program $end 1 program: stmtlist 2 stmtlist: stmt OP_SEMI stmtlist 3 | stmt OP_SEMI 4 stmt: create_stmt 5 | drop_stmt 6 | select_stmt 7 | update_stmt 8 | insert_stmt 9 | alter_stmt 10 create_stmt: create_table_stmt 11 | create_index_stmt 12 | create_trigger_stmt 13 | create_view_stmt 14 drop_stmt: drop_index_stmt 15 | drop_table_stmt 16 | drop_trigger_stmt 17 | drop_view_stmt 18 alter_stmt: ALTER TABLE table_name alter_action 19 select_stmt: select_no_parens 20 | select_with_parens 21 select_with_parens: OP_LP select_no_parens OP_RP 22 | OP_LP select_with_parens OP_RP 23 select_no_parens: opt_with_clause select_clause_list opt_order_clause opt_limit_clause 24 select_clause_list: select_clause 25 | select_clause combine_clause select_clause_list 26 select_clause: SELECT opt_all_or_distinct select_target opt_from_clause opt_where_clause opt_group_clause opt_window_clause 27 combine_clause: UNION 28 | INTERSECT 29 | EXCEPT 30 opt_from_clause: from_clause 31 | %empty 32 select_target: expr_list 33 opt_window_clause: window_clause 34 | %empty 35 window_clause: WINDOW window_def_list 36 window_def_list: window_def 37 | window_def OP_COMMA window_def_list 38 window_def: window_name AS OP_LP window OP_RP 39 window_name: identifier 40 window: opt_exist_window_name opt_partition opt_order_clause opt_frame_clause 41 opt_partition: PARTITION BY expr_list 42 | %empty 43 opt_frame_clause: range_or_rows frame_bound_start 44 | range_or_rows BETWEEN frame_bound_start AND frame_bound_end 45 | %empty 46 range_or_rows: RANGE 47 | ROWS 48 | GROUPS 49 frame_bound_start: frame_bound 50 | UNBOUNDED PRECEDING 51 frame_bound_end: frame_bound 52 | UNBOUNDED FOLLOWING 53 frame_bound: expr PRECEDING 54 | expr FOLLOWING 55 | CURRENT ROW 56 opt_exist_window_name: identifier 57 | %empty 58 opt_group_clause: GROUP BY expr_list opt_having_clause 59 | %empty 60 opt_having_clause: HAVING expr 61 | %empty 62 opt_where_clause: where_clause 63 | %empty 64 where_clause: WHERE expr 65 from_clause: FROM table_ref 66 table_ref: opt_table_prefix table_name opt_as_alias opt_index opt_on opt_using 67 | opt_table_prefix function_name OP_LP expr_list OP_RP opt_as_alias opt_on opt_using 68 | opt_table_prefix OP_LP select_no_parens OP_RP opt_as_alias opt_on opt_using 69 | opt_table_prefix OP_LP table_ref OP_RP opt_as_alias opt_on opt_using 70 opt_index: INDEXED BY column_name 71 | NOT INDEXED 72 | %empty 73 opt_on: ON expr 74 | %empty 75 opt_using: USING OP_LP column_name_list OP_RP 76 | %empty 77 column_name_list: column_name 78 | column_name OP_COMMA column_name_list 79 opt_table_prefix: table_ref join_op 80 | %empty 81 join_op: OP_COMMA 82 | JOIN 83 | NATURAL opt_join_type JOIN 84 opt_join_type: LEFT 85 | LEFT OUTER 86 | INNER 87 | CROSS 88 | %empty 89 expr_list: expr opt_as_alias OP_COMMA expr_list 90 | expr opt_as_alias 91 opt_limit_clause: limit_clause 92 | %empty 93 limit_clause: LIMIT expr 94 | LIMIT expr OFFSET expr 95 | LIMIT expr OP_COMMA expr 96 opt_limit_row_count: LIMIT expr 97 | %empty 98 opt_order_clause: ORDER BY order_item_list 99 | %empty 100 opt_order_nulls: NULLS FIRST 101 | NULLS LAST 102 | %empty 103 order_item_list: order_item 104 | order_item OP_COMMA order_item_list 105 order_item: expr opt_order_behavior opt_order_nulls 106 opt_order_behavior: ASC 107 | DESC 108 | %empty 109 opt_with_clause: WITH cte_table_list 110 | WITH RECURSIVE cte_table_list 111 | %empty 112 cte_table_list: cte_table 113 | cte_table OP_COMMA cte_table_list 114 cte_table: cte_table_name AS OP_LP select_stmt OP_RP 115 cte_table_name: table_name opt_column_name_list_p 116 opt_all_or_distinct: ALL 117 | DISTINCT 118 | %empty 119 create_table_stmt: CREATE opt_temp TABLE opt_if_not_exist table_name opt_table_option_list opt_ignore_or_replace AS select_stmt 120 | CREATE opt_temp TABLE opt_if_not_exist table_name OP_LP column_def_list opt_table_constraint_list OP_RP opt_table_option_list 121 create_index_stmt: CREATE opt_index_keyword INDEX table_name ON table_name OP_LP indexed_column_list OP_RP opt_index_option opt_extra_option 122 create_trigger_stmt: CREATE TRIGGER trigger_name trigger_action_time trigger_events ON table_name FOR EACH ROW trigger_body 123 create_view_stmt: CREATE opt_view_algorithm opt_sql_security VIEW view_name opt_column_name_list_p AS select_stmt opt_check_option 124 | CREATE OR REPLACE opt_view_algorithm opt_sql_security VIEW view_name opt_column_name_list_p AS select_stmt opt_check_option 125 opt_table_option_list: table_option_list 126 | %empty 127 table_option_list: table_option 128 | table_option opt_op_comma table_option_list 129 table_option: INSERT_METHOD opt_op_equal NO 130 | INSERT_METHOD opt_op_equal FIRST 131 | INSERT_METHOD opt_op_equal LAST 132 | ROW_FORMAT opt_op_equal DEFAULT 133 | ROW_FORMAT opt_op_equal DYNAMIC 134 | ROW_FORMAT opt_op_equal FIXED 135 | ROW_FORMAT opt_op_equal COMPRESSED 136 | ROW_FORMAT opt_op_equal REDUNDANT 137 | ROW_FORMAT opt_op_equal COMPACT 138 opt_op_comma: OP_COMMA 139 | %empty 140 opt_ignore_or_replace: IGNORE 141 | REPLACE 142 | %empty 143 opt_view_algorithm: ALGORITHM OP_EQUAL UNDEFINED 144 | ALGORITHM OP_EQUAL MERGE 145 | ALGORITHM OP_EQUAL TEMPTABLE 146 | %empty 147 opt_sql_security: SQL SECURITY DEFINER 148 | SQL SECURITY INVOKER 149 | %empty 150 opt_index_option: USING BTREE 151 | USING HASH 152 | %empty 153 opt_extra_option: index_algorithm_option 154 | lock_option 155 | %empty 156 index_algorithm_option: ALGORITHM opt_op_equal DEFAULT 157 | ALGORITHM opt_op_equal INPLACE 158 | ALGORITHM opt_op_equal COPY 159 lock_option: LOCK opt_op_equal DEFAULT 160 | LOCK opt_op_equal NONE 161 | LOCK opt_op_equal SHARED 162 | LOCK opt_op_equal EXCLUSIVE 163 opt_op_equal: OP_EQUAL 164 | %empty 165 trigger_events: DELETE 166 | INSERT 167 | UPDATE 168 trigger_name: identifier 169 trigger_action_time: BEFORE 170 | AFTER 171 drop_index_stmt: DROP INDEX table_name opt_extra_option 172 drop_table_stmt: DROP opt_temp TABLE opt_if_exist table_name opt_restrict_or_cascade 173 opt_restrict_or_cascade: RESTRICT 174 | CASCADE 175 | %empty 176 drop_trigger_stmt: DROP TRIGGER opt_if_exist trigger_name 177 drop_view_stmt: DROP VIEW opt_if_exist view_name opt_restrict_or_cascade 178 insert_stmt: opt_with_clause INSERT INTO table_name opt_as_alias insert_rest opt_on_conflict 179 insert_rest: opt_column_name_list_p select_no_parens 180 | opt_column_name_list_p DEFAULT VALUES 181 | opt_column_name_list_p VALUES super_values_list 182 super_values_list: values_list 183 | values_list OP_COMMA super_values_list 184 values_list: OP_LP expr_list OP_RP 185 opt_on_conflict: ON CONFLICT opt_conflict_expr DO NOTHING 186 | ON CONFLICT opt_conflict_expr DO UPDATE set_clause_list where_clause 187 | %empty 188 opt_conflict_expr: OP_LP indexed_column_list OP_RP where_clause 189 | %empty 190 indexed_column_list: indexed_column 191 | indexed_column OP_COMMA indexed_column_list 192 indexed_column: expr opt_order_behavior 193 update_stmt: UPDATE IGNORE table_name opt_as_alias SET set_clause_list opt_where_clause opt_order_clause opt_limit_row_count 194 | UPDATE table_name opt_as_alias SET set_clause_list opt_where_clause opt_order_clause opt_limit_row_count 195 alter_action: RENAME TO table_name 196 | RENAME opt_column column_name TO column_name 197 | ADD opt_column column_def 198 | DROP opt_column column_name 199 | alter_constant_action 200 alter_constant_action: DROP PRIMARY KEY 201 | FORCE 202 | DISABLE KEYS 203 | ENABLE KEYS 204 | lock_option 205 | WITH VALIDATION 206 | WITHOUT VALIDATION 207 column_def_list: column_def 208 | column_def OP_COMMA column_def_list 209 column_def: identifier type_name opt_column_constraint_list 210 opt_column_constraint_list: column_constraint_list opt_check opt_reference_clause 211 | %empty 212 column_constraint_list: column_constraint 213 | column_constraint column_constraint_list 214 column_constraint: constraint_type 215 opt_reference_clause: opt_foreign_key reference_clause 216 | %empty 217 opt_check: CHECK OP_LP expr OP_RP opt_enforced 218 | %empty 219 constraint_type: PRIMARY KEY 220 | NOT NULL 221 | UNIQUE 222 reference_clause: REFERENCES table_name opt_column_name_list_p opt_foreign_key_actions opt_constraint_attribute_spec 223 opt_foreign_key: FOREIGN KEY 224 | %empty 225 opt_foreign_key_actions: foreign_key_actions 226 | %empty 227 foreign_key_actions: MATCH FULL 228 | MATCH PARTIAL 229 | MATCH SIMPLE 230 | ON UPDATE key_actions 231 | ON DELETE key_actions 232 key_actions: SET NULL 233 | SET DEFAULT 234 | CASCADE 235 | RESTRICT 236 | NO ACTION 237 opt_constraint_attribute_spec: DEFFERRABLE opt_initial_time 238 | NOT DEFFERRABLE opt_initial_time 239 | %empty 240 opt_initial_time: INITIALLY DEFERRED 241 | INITIALLY IMMEDIATE 242 | %empty 243 constraint_name: CONSTRAINT name 244 opt_temp: TEMPORARY 245 | %empty 246 opt_check_option: WITH CHECK OPTION 247 | WITH CASCADED CHECK OPTION 248 | WITH LOCAL CHECK OPTION 249 | %empty 250 opt_column_name_list_p: OP_LP column_name_list OP_RP 251 | %empty 252 set_clause_list: set_clause 253 | set_clause OP_COMMA set_clause_list 254 set_clause: column_name OP_EQUAL expr 255 | OP_LP column_name_list OP_RP OP_EQUAL expr 256 opt_as_alias: as_alias 257 | %empty 258 expr: operand 259 | between_expr 260 | exists_expr 261 | in_expr 262 | cast_expr 263 | logic_expr 264 operand: OP_LP expr_list OP_RP 265 | array_index 266 | scalar_expr 267 | unary_expr 268 | binary_expr 269 | case_expr 270 | extract_expr 271 | array_expr 272 | function_expr 273 | OP_LP select_no_parens OP_RP 274 cast_expr: CAST OP_LP expr AS type_name OP_RP 275 scalar_expr: column_name 276 | literal 277 unary_expr: OP_SUB operand 278 | NOT operand 279 | operand ISNULL 280 | operand IS NULL 281 | operand IS NOT NULL 282 | NULL 283 | OP_MUL 284 binary_expr: comp_expr 285 | operand binary_op operand 286 | operand LIKE operand 287 | operand NOT LIKE operand 288 logic_expr: expr AND expr 289 | expr OR expr 290 in_expr: operand opt_not IN OP_LP select_no_parens OP_RP 291 | operand opt_not IN OP_LP expr_list OP_RP 292 | operand opt_not IN table_name 293 case_expr: CASE expr case_list END 294 | CASE case_list END 295 | CASE expr case_list ELSE expr END 296 | CASE case_list ELSE expr END 297 between_expr: operand BETWEEN operand AND operand 298 | operand NOT BETWEEN operand AND operand 299 exists_expr: opt_not EXISTS OP_LP select_no_parens OP_RP 300 function_expr: function_name OP_LP OP_RP opt_filter_clause opt_over_clause 301 | function_name OP_LP opt_distinct expr_list OP_RP opt_filter_clause opt_over_clause 302 opt_distinct: DISTINCT 303 | %empty 304 opt_filter_clause: FILTER OP_LP WHERE expr OP_RP 305 | %empty 306 opt_over_clause: OVER OP_LP window OP_RP 307 | OVER window_name 308 | %empty 309 case_list: case_clause 310 | case_clause case_list 311 case_clause: WHEN expr THEN expr 312 comp_expr: operand OP_EQUAL operand 313 | operand OP_NOTEQUAL operand 314 | operand OP_GREATERTHAN operand 315 | operand OP_LESSTHAN operand 316 | operand OP_LESSEQ operand 317 | operand OP_GREATEREQ operand 318 extract_expr: EXTRACT OP_LP datetime_field FROM expr OP_RP 319 datetime_field: SECOND 320 | MINUTE 321 | HOUR 322 | DAY 323 | MONTH 324 | YEAR 325 array_expr: ARRAY OP_LBRACKET expr_list OP_RBRACKET 326 array_index: operand OP_LBRACKET int_literal OP_RBRACKET 327 literal: string_literal 328 | bool_literal 329 | num_literal 330 string_literal: STRINGLITERAL 331 bool_literal: TRUE 332 | FALSE 333 num_literal: int_literal 334 | float_literal 335 int_literal: INTLITERAL 336 float_literal: FLOATLITERAL 337 opt_column: COLUMN 338 | %empty 339 trigger_body: drop_stmt 340 | update_stmt 341 | insert_stmt 342 | alter_stmt 343 opt_if_not_exist: IF NOT EXISTS 344 | %empty 345 opt_if_exist: IF EXISTS 346 | %empty 347 identifier: IDENTIFIER 348 as_alias: AS identifier 349 table_name: identifier 350 column_name: identifier 351 opt_index_keyword: UNIQUE 352 | FULLTEXT 353 | SPATIAL 354 | %empty 355 view_name: identifier 356 function_name: identifier 357 binary_op: OP_ADD 358 | OP_SUB 359 | OP_DIVIDE 360 | OP_MOD 361 | OP_MUL 362 | OP_XOR 363 opt_not: NOT 364 | %empty 365 name: identifier 366 type_name: numeric_type 367 | character_type 368 character_type: character_with_length 369 | character_without_length 370 character_with_length: character_conflicta OP_LP int_literal OP_RP 371 character_without_length: character_conflicta 372 | SET 373 | ENUM 374 | BINARY 375 character_conflicta: CHARACTER 376 | CHAR 377 | VARCHAR 378 | TEXT 379 | TINYTEXT 380 | MEDIUMTEXT 381 | LONGTEXT 382 | NATIONAL CHARACTER 383 | NATIONAL CHAR 384 | NCHAR 385 numeric_type: INT 386 | INTEGER 387 | SMALLINT 388 | BIGINT 389 | REAL 390 | FLOAT 391 | FIXED 392 | DOUBLE 393 | DOUBLE PRECISION 394 | DECIMAL 395 | DEC 396 | NUMERIC 397 | BOOLEAN 398 opt_table_constraint_list: table_constraint_list 399 | %empty 400 table_constraint_list: table_constraint 401 | table_constraint OP_COMMA table_constraint_list 402 table_constraint: constraint_name PRIMARY KEY OP_LP indexed_column_list OP_RP 403 | constraint_name UNIQUE OP_LP indexed_column_list OP_RP 404 | constraint_name CHECK OP_LP expr OP_RP opt_enforced 405 | constraint_name FOREIGN KEY OP_LP column_name_list OP_RP reference_clause 406 opt_enforced: ENFORCED 407 | NOT ENFORCED 408 | %empty Terminals, with rules where they appear $end (0) 0 error (256) OP_NOTEQUAL (258) 313 ENABLE (259) 203 SIMPLE (260) 229 TEXT (261) 378 OVER (262) 306 307 YEAR (263) 324 INSERT_METHOD (264) 129 130 131 OP_SEMI (265) 2 3 BIGINT (266) 388 LIMIT (267) 93 94 95 96 OP_GREATERTHAN (268) 314 WITH (269) 109 110 205 246 247 248 ORDER (270) 98 OPTION (271) 246 247 248 LAST (272) 101 131 UNBOUNDED (273) 50 52 PRECEDING (274) 50 53 EXCEPT (275) 29 NUMERIC (276) 396 OP_LESSTHAN (277) 315 ACTION (278) 236 BEFORE (279) 169 OP_GREATEREQ (280) 317 CHECK (281) 217 246 247 248 404 COMPACT (282) 137 FULL (283) 227 NATURAL (284) 83 BINARY (285) 374 NATIONAL (286) 382 383 ENUM (287) 373 REDUNDANT (288) 136 OP_ADD (289) 357 CURRENT (290) 55 MERGE (291) 144 TRIGGER (292) 122 176 COMPRESSED (293) 135 OP_SUB (294) 277 358 FALSE (295) 332 UNIQUE (296) 221 351 403 WHERE (297) 64 304 MINUTE (298) 320 FIRST (299) 100 130 ON (300) 73 121 122 185 186 230 231 PARTIAL (301) 228 DOUBLE (302) 392 393 AFTER (303) 170 PRIMARY (304) 200 219 402 MONTH (305) 323 DEFERRED (306) 240 VALUES (307) 180 181 LONGTEXT (308) 381 SQL (309) 147 148 SHARED (310) 161 VALIDATION (311) 205 206 OR (312) 124 289 VIEW (313) 123 124 177 INDEX (314) 121 171 GROUP (315) 58 OP_MUL (316) 283 361 INPLACE (317) 157 FOREIGN (318) 223 405 RESTRICT (319) 173 235 SPATIAL (320) 353 FOLLOWING (321) 52 54 DEC (322) 395 SELECT (323) 26 NONE (324) 160 DISTINCT (325) 117 302 TRUE (326) 331 DYNAMIC (327) 133 BY (328) 41 58 70 98 OP_MOD (329) 360 INTEGER (330) 386 SECURITY (331) 147 148 IS (332) 280 281 DEFINER (333) 147 ROW (334) 55 122 ENFORCED (335) 406 407 END (336) 293 294 295 296 RECURSIVE (337) 110 FOR (338) 122 TEMPTABLE (339) 145 UNION (340) 27 NULLS (341) 100 101 UPDATE (342) 167 186 193 194 230 ELSE (343) 295 296 RANGE (344) 46 SET (345) 193 194 232 233 372 INVOKER (346) 148 OFFSET (347) 94 INDEXED (348) 70 71 FORCE (349) 201 NCHAR (350) 384 AND (351) 44 288 297 298 INITIALLY (352) 240 241 PRECISION (353) 393 FILTER (354) 304 WITHOUT (355) 206 NOT (356) 71 220 238 278 281 287 298 343 363 407 DELETE (357) 165 231 DEFFERRABLE (358) 237 238 REAL (359) 389 THEN (360) 311 UNDEFINED (361) 143 DEFAULT (362) 132 156 159 180 233 CROSS (363) 87 CHAR (364) 376 383 REFERENCES (365) 222 OP_XOR (366) 362 CASE (367) 293 294 295 296 FIXED (368) 134 391 HOUR (369) 321 NO (370) 129 236 COLUMN (371) 337 LOCAL (372) 248 DROP (373) 171 172 176 177 198 200 REPLACE (374) 124 141 ASC (375) 106 OP_COMMA (376) 37 78 81 89 95 104 113 138 183 191 208 253 401 DISABLE (377) 202 TABLE (378) 18 119 120 172 ARRAY (379) 325 IF (380) 343 345 EXTRACT (381) 318 LEFT (382) 84 85 FULLTEXT (383) 352 HASH (384) 151 ALGORITHM (385) 143 144 145 156 157 158 LOCK (386) 159 160 161 162 DECIMAL (387) 394 PARTITION (388) 41 CASCADE (389) 174 234 ADD (390) 197 BETWEEN (391) 44 297 298 OP_LESSEQ (392) 316 MATCH (393) 227 228 229 ALL (394) 116 ROWS (395) 47 JOIN (396) 82 83 LIKE (397) 286 287 OP_RP (398) 21 22 38 67 68 69 75 114 120 121 184 188 217 250 255 264 273 274 290 291 299 300 301 304 306 318 370 402 403 404 405 IGNORE (399) 140 193 INT (400) 385 MEDIUMTEXT (401) 380 BOOLEAN (402) 397 KEY (403) 200 219 223 402 405 EACH (404) 122 USING (405) 75 150 151 RENAME (406) 195 196 DO (407) 185 186 OP_LP (408) 21 22 38 67 68 69 75 114 120 121 184 188 217 250 255 264 273 274 290 291 299 300 301 304 306 318 370 402 403 404 405 CHARACTER (409) 375 382 UMINUS (410) CAST (411) 274 GROUPS (412) 48 OUTER (413) 85 NULL (414) 220 232 280 281 282 SMALLINT (415) 387 EXCLUSIVE (416) 162 TEMPORARY (417) 244 CONSTRAINT (418) 243 CREATE (419) 119 120 121 122 123 124 OP_LBRACKET (420) 325 326 WHEN (421) 311 IMMEDIATE (422) 241 TO (423) 195 196 BTREE (424) 150 DAY (425) 322 CONFLICT (426) 185 186 ROW_FORMAT (427) 132 133 134 135 136 137 OP_RBRACKET (428) 325 326 EXISTS (429) 299 343 345 INSERT (430) 166 178 KEYS (431) 202 203 INTO (432) 178 OP_DIVIDE (433) 359 CASCADED (434) 247 ISNULL (435) 279 AS (436) 38 114 119 123 124 274 348 INNER (437) 86 INTERSECT (438) 28 IN (439) 290 291 292 OP_EQUAL (440) 143 144 145 163 254 255 312 VARCHAR (441) 377 COPY (442) 158 ALTER (443) 18 DESC (444) 107 FROM (445) 65 318 TINYTEXT (446) 379 FLOAT (447) 390 SECOND (448) 319 WINDOW (449) 35 NOTHING (450) 185 HAVING (451) 60 INTLITERAL (452) 335 FLOATLITERAL (453) 336 IDENTIFIER (454) 347 STRINGLITERAL (455) 330 Nonterminals, with rules where they appear $accept (201) on left: 0 program (202) on left: 1, on right: 0 stmtlist (203) on left: 2 3, on right: 1 2 stmt (204) on left: 4 5 6 7 8 9, on right: 2 3 create_stmt (205) on left: 10 11 12 13, on right: 4 drop_stmt (206) on left: 14 15 16 17, on right: 5 339 alter_stmt (207) on left: 18, on right: 9 342 select_stmt (208) on left: 19 20, on right: 6 114 119 123 124 select_with_parens (209) on left: 21 22, on right: 20 22 select_no_parens (210) on left: 23, on right: 19 21 68 179 273 290 299 select_clause_list (211) on left: 24 25, on right: 23 25 select_clause (212) on left: 26, on right: 24 25 combine_clause (213) on left: 27 28 29, on right: 25 opt_from_clause (214) on left: 30 31, on right: 26 select_target (215) on left: 32, on right: 26 opt_window_clause (216) on left: 33 34, on right: 26 window_clause (217) on left: 35, on right: 33 window_def_list (218) on left: 36 37, on right: 35 37 window_def (219) on left: 38, on right: 36 37 window_name (220) on left: 39, on right: 38 307 window (221) on left: 40, on right: 38 306 opt_partition (222) on left: 41 42, on right: 40 opt_frame_clause (223) on left: 43 44 45, on right: 40 range_or_rows (224) on left: 46 47 48, on right: 43 44 frame_bound_start (225) on left: 49 50, on right: 43 44 frame_bound_end (226) on left: 51 52, on right: 44 frame_bound (227) on left: 53 54 55, on right: 49 51 opt_exist_window_name (228) on left: 56 57, on right: 40 opt_group_clause (229) on left: 58 59, on right: 26 opt_having_clause (230) on left: 60 61, on right: 58 opt_where_clause (231) on left: 62 63, on right: 26 193 194 where_clause (232) on left: 64, on right: 62 186 188 from_clause (233) on left: 65, on right: 30 table_ref (234) on left: 66 67 68 69, on right: 65 69 79 opt_index (235) on left: 70 71 72, on right: 66 opt_on (236) on left: 73 74, on right: 66 67 68 69 opt_using (237) on left: 75 76, on right: 66 67 68 69 column_name_list (238) on left: 77 78, on right: 75 78 250 255 405 opt_table_prefix (239) on left: 79 80, on right: 66 67 68 69 join_op (240) on left: 81 82 83, on right: 79 opt_join_type (241) on left: 84 85 86 87 88, on right: 83 expr_list (242) on left: 89 90, on right: 32 41 58 67 89 184 264 291 301 325 opt_limit_clause (243) on left: 91 92, on right: 23 limit_clause (244) on left: 93 94 95, on right: 91 opt_limit_row_count (245) on left: 96 97, on right: 193 194 opt_order_clause (246) on left: 98 99, on right: 23 40 193 194 opt_order_nulls (247) on left: 100 101 102, on right: 105 order_item_list (248) on left: 103 104, on right: 98 104 order_item (249) on left: 105, on right: 103 104 opt_order_behavior (250) on left: 106 107 108, on right: 105 192 opt_with_clause (251) on left: 109 110 111, on right: 23 178 cte_table_list (252) on left: 112 113, on right: 109 110 113 cte_table (253) on left: 114, on right: 112 113 cte_table_name (254) on left: 115, on right: 114 opt_all_or_distinct (255) on left: 116 117 118, on right: 26 create_table_stmt (256) on left: 119 120, on right: 10 create_index_stmt (257) on left: 121, on right: 11 create_trigger_stmt (258) on left: 122, on right: 12 create_view_stmt (259) on left: 123 124, on right: 13 opt_table_option_list (260) on left: 125 126, on right: 119 120 table_option_list (261) on left: 127 128, on right: 125 128 table_option (262) on left: 129 130 131 132 133 134 135 136 137, on right: 127 128 opt_op_comma (263) on left: 138 139, on right: 128 opt_ignore_or_replace (264) on left: 140 141 142, on right: 119 opt_view_algorithm (265) on left: 143 144 145 146, on right: 123 124 opt_sql_security (266) on left: 147 148 149, on right: 123 124 opt_index_option (267) on left: 150 151 152, on right: 121 opt_extra_option (268) on left: 153 154 155, on right: 121 171 index_algorithm_option (269) on left: 156 157 158, on right: 153 lock_option (270) on left: 159 160 161 162, on right: 154 204 opt_op_equal (271) on left: 163 164, on right: 129 130 131 132 133 134 135 136 137 156 157 158 159 160 161 162 trigger_events (272) on left: 165 166 167, on right: 122 trigger_name (273) on left: 168, on right: 122 176 trigger_action_time (274) on left: 169 170, on right: 122 drop_index_stmt (275) on left: 171, on right: 14 drop_table_stmt (276) on left: 172, on right: 15 opt_restrict_or_cascade (277) on left: 173 174 175, on right: 172 177 drop_trigger_stmt (278) on left: 176, on right: 16 drop_view_stmt (279) on left: 177, on right: 17 insert_stmt (280) on left: 178, on right: 8 341 insert_rest (281) on left: 179 180 181, on right: 178 super_values_list (282) on left: 182 183, on right: 181 183 values_list (283) on left: 184, on right: 182 183 opt_on_conflict (284) on left: 185 186 187, on right: 178 opt_conflict_expr (285) on left: 188 189, on right: 185 186 indexed_column_list (286) on left: 190 191, on right: 121 188 191 402 403 indexed_column (287) on left: 192, on right: 190 191 update_stmt (288) on left: 193 194, on right: 7 340 alter_action (289) on left: 195 196 197 198 199, on right: 18 alter_constant_action (290) on left: 200 201 202 203 204 205 206, on right: 199 column_def_list (291) on left: 207 208, on right: 120 208 column_def (292) on left: 209, on right: 197 207 208 opt_column_constraint_list (293) on left: 210 211, on right: 209 column_constraint_list (294) on left: 212 213, on right: 210 213 column_constraint (295) on left: 214, on right: 212 213 opt_reference_clause (296) on left: 215 216, on right: 210 opt_check (297) on left: 217 218, on right: 210 constraint_type (298) on left: 219 220 221, on right: 214 reference_clause (299) on left: 222, on right: 215 405 opt_foreign_key (300) on left: 223 224, on right: 215 opt_foreign_key_actions (301) on left: 225 226, on right: 222 foreign_key_actions (302) on left: 227 228 229 230 231, on right: 225 key_actions (303) on left: 232 233 234 235 236, on right: 230 231 opt_constraint_attribute_spec (304) on left: 237 238 239, on right: 222 opt_initial_time (305) on left: 240 241 242, on right: 237 238 constraint_name (306) on left: 243, on right: 402 403 404 405 opt_temp (307) on left: 244 245, on right: 119 120 172 opt_check_option (308) on left: 246 247 248 249, on right: 123 124 opt_column_name_list_p (309) on left: 250 251, on right: 115 123 124 179 180 181 222 set_clause_list (310) on left: 252 253, on right: 186 193 194 253 set_clause (311) on left: 254 255, on right: 252 253 opt_as_alias (312) on left: 256 257, on right: 66 67 68 69 89 90 178 193 194 expr (313) on left: 258 259 260 261 262 263, on right: 53 54 60 64 73 89 90 93 94 95 96 105 192 217 254 255 274 288 289 293 295 296 304 311 318 404 operand (314) on left: 264 265 266 267 268 269 270 271 272 273, on right: 258 277 278 279 280 281 285 286 287 290 291 292 297 298 312 313 314 315 316 317 326 cast_expr (315) on left: 274, on right: 262 scalar_expr (316) on left: 275 276, on right: 266 unary_expr (317) on left: 277 278 279 280 281 282 283, on right: 267 binary_expr (318) on left: 284 285 286 287, on right: 268 logic_expr (319) on left: 288 289, on right: 263 in_expr (320) on left: 290 291 292, on right: 261 case_expr (321) on left: 293 294 295 296, on right: 269 between_expr (322) on left: 297 298, on right: 259 exists_expr (323) on left: 299, on right: 260 function_expr (324) on left: 300 301, on right: 272 opt_distinct (325) on left: 302 303, on right: 301 opt_filter_clause (326) on left: 304 305, on right: 300 301 opt_over_clause (327) on left: 306 307 308, on right: 300 301 case_list (328) on left: 309 310, on right: 293 294 295 296 310 case_clause (329) on left: 311, on right: 309 310 comp_expr (330) on left: 312 313 314 315 316 317, on right: 284 extract_expr (331) on left: 318, on right: 270 datetime_field (332) on left: 319 320 321 322 323 324, on right: 318 array_expr (333) on left: 325, on right: 271 array_index (334) on left: 326, on right: 265 literal (335) on left: 327 328 329, on right: 276 string_literal (336) on left: 330, on right: 327 bool_literal (337) on left: 331 332, on right: 328 num_literal (338) on left: 333 334, on right: 329 int_literal (339) on left: 335, on right: 326 333 370 float_literal (340) on left: 336, on right: 334 opt_column (341) on left: 337 338, on right: 196 197 198 trigger_body (342) on left: 339 340 341 342, on right: 122 opt_if_not_exist (343) on left: 343 344, on right: 119 120 opt_if_exist (344) on left: 345 346, on right: 172 176 177 identifier (345) on left: 347, on right: 39 56 168 209 348 349 350 355 356 365 as_alias (346) on left: 348, on right: 256 table_name (347) on left: 349, on right: 18 66 115 119 120 121 122 171 172 178 193 194 195 222 292 column_name (348) on left: 350, on right: 70 77 78 196 198 254 275 opt_index_keyword (349) on left: 351 352 353 354, on right: 121 view_name (350) on left: 355, on right: 123 124 177 function_name (351) on left: 356, on right: 67 300 301 binary_op (352) on left: 357 358 359 360 361 362, on right: 285 opt_not (353) on left: 363 364, on right: 290 291 292 299 name (354) on left: 365, on right: 243 type_name (355) on left: 366 367, on right: 209 274 character_type (356) on left: 368 369, on right: 367 character_with_length (357) on left: 370, on right: 368 character_without_length (358) on left: 371 372 373 374, on right: 369 character_conflicta (359) on left: 375 376 377 378 379 380 381 382 383 384, on right: 370 371 numeric_type (360) on left: 385 386 387 388 389 390 391 392 393 394 395 396 397, on right: 366 opt_table_constraint_list (361) on left: 398 399, on right: 120 table_constraint_list (362) on left: 400 401, on right: 398 401 table_constraint (363) on left: 402 403 404 405, on right: 400 401 opt_enforced (364) on left: 406 407 408, on right: 217 404 State 0 0 $accept: . program $end WITH shift, and go to state 1 UPDATE shift, and go to state 2 DROP shift, and go to state 3 OP_LP shift, and go to state 4 CREATE shift, and go to state 5 ALTER shift, and go to state 6 $default reduce using rule 111 (opt_with_clause) program go to state 7 stmtlist go to state 8 stmt go to state 9 create_stmt go to state 10 drop_stmt go to state 11 alter_stmt go to state 12 select_stmt go to state 13 select_with_parens go to state 14 select_no_parens go to state 15 opt_with_clause go to state 16 create_table_stmt go to state 17 create_index_stmt go to state 18 create_trigger_stmt go to state 19 create_view_stmt go to state 20 drop_index_stmt go to state 21 drop_table_stmt go to state 22 drop_trigger_stmt go to state 23 drop_view_stmt go to state 24 insert_stmt go to state 25 update_stmt go to state 26 State 1 109 opt_with_clause: WITH . cte_table_list 110 | WITH . RECURSIVE cte_table_list RECURSIVE shift, and go to state 27 IDENTIFIER shift, and go to state 28 cte_table_list go to state 29 cte_table go to state 30 cte_table_name go to state 31 identifier go to state 32 table_name go to state 33 State 2 193 update_stmt: UPDATE . IGNORE table_name opt_as_alias SET set_clause_list opt_where_clause opt_order_clause opt_limit_row_count 194 | UPDATE . table_name opt_as_alias SET set_clause_list opt_where_clause opt_order_clause opt_limit_row_count IGNORE shift, and go to state 34 IDENTIFIER shift, and go to state 28 identifier go to state 32 table_name go to state 35 State 3 171 drop_index_stmt: DROP . INDEX table_name opt_extra_option 172 drop_table_stmt: DROP . opt_temp TABLE opt_if_exist table_name opt_restrict_or_cascade 176 drop_trigger_stmt: DROP . TRIGGER opt_if_exist trigger_name 177 drop_view_stmt: DROP . VIEW opt_if_exist view_name opt_restrict_or_cascade TRIGGER shift, and go to state 36 VIEW shift, and go to state 37 INDEX shift, and go to state 38 TEMPORARY shift, and go to state 39 $default reduce using rule 245 (opt_temp) opt_temp go to state 40 State 4 21 select_with_parens: OP_LP . select_no_parens OP_RP 22 | OP_LP . select_with_parens OP_RP WITH shift, and go to state 1 OP_LP shift, and go to state 4 $default reduce using rule 111 (opt_with_clause) select_with_parens go to state 41 select_no_parens go to state 42 opt_with_clause go to state 43 State 5 119 create_table_stmt: CREATE . opt_temp TABLE opt_if_not_exist table_name opt_table_option_list opt_ignore_or_replace AS select_stmt 120 | CREATE . opt_temp TABLE opt_if_not_exist table_name OP_LP column_def_list opt_table_constraint_list OP_RP opt_table_option_list 121 create_index_stmt: CREATE . opt_index_keyword INDEX table_name ON table_name OP_LP indexed_column_list OP_RP opt_index_option opt_extra_option 122 create_trigger_stmt: CREATE . TRIGGER trigger_name trigger_action_time trigger_events ON table_name FOR EACH ROW trigger_body 123 create_view_stmt: CREATE . opt_view_algorithm opt_sql_security VIEW view_name opt_column_name_list_p AS select_stmt opt_check_option 124 | CREATE . OR REPLACE opt_view_algorithm opt_sql_security VIEW view_name opt_column_name_list_p AS select_stmt opt_check_option TRIGGER shift, and go to state 44 UNIQUE shift, and go to state 45 OR shift, and go to state 46 SPATIAL shift, and go to state 47 FULLTEXT shift, and go to state 48 ALGORITHM shift, and go to state 49 TEMPORARY shift, and go to state 39 INDEX reduce using rule 354 (opt_index_keyword) TABLE reduce using rule 245 (opt_temp) $default reduce using rule 146 (opt_view_algorithm) opt_view_algorithm go to state 50 opt_temp go to state 51 opt_index_keyword go to state 52 State 6 18 alter_stmt: ALTER . TABLE table_name alter_action TABLE shift, and go to state 53 State 7 0 $accept: program . $end $end shift, and go to state 54 State 8 1 program: stmtlist . $default reduce using rule 1 (program) State 9 2 stmtlist: stmt . OP_SEMI stmtlist 3 | stmt . OP_SEMI OP_SEMI shift, and go to state 55 State 10 4 stmt: create_stmt . $default reduce using rule 4 (stmt) State 11 5 stmt: drop_stmt . $default reduce using rule 5 (stmt) State 12 9 stmt: alter_stmt . $default reduce using rule 9 (stmt) State 13 6 stmt: select_stmt . $default reduce using rule 6 (stmt) State 14 20 select_stmt: select_with_parens . $default reduce using rule 20 (select_stmt) State 15 19 select_stmt: select_no_parens . $default reduce using rule 19 (select_stmt) State 16 23 select_no_parens: opt_with_clause . select_clause_list opt_order_clause opt_limit_clause 178 insert_stmt: opt_with_clause . INSERT INTO table_name opt_as_alias insert_rest opt_on_conflict SELECT shift, and go to state 56 INSERT shift, and go to state 57 select_clause_list go to state 58 select_clause go to state 59 State 17 10 create_stmt: create_table_stmt . $default reduce using rule 10 (create_stmt) State 18 11 create_stmt: create_index_stmt . $default reduce using rule 11 (create_stmt) State 19 12 create_stmt: create_trigger_stmt . $default reduce using rule 12 (create_stmt) State 20 13 create_stmt: create_view_stmt . $default reduce using rule 13 (create_stmt) State 21 14 drop_stmt: drop_index_stmt . $default reduce using rule 14 (drop_stmt) State 22 15 drop_stmt: drop_table_stmt . $default reduce using rule 15 (drop_stmt) State 23 16 drop_stmt: drop_trigger_stmt . $default reduce using rule 16 (drop_stmt) State 24 17 drop_stmt: drop_view_stmt . $default reduce using rule 17 (drop_stmt) State 25 8 stmt: insert_stmt . $default reduce using rule 8 (stmt) State 26 7 stmt: update_stmt . $default reduce using rule 7 (stmt) State 27 110 opt_with_clause: WITH RECURSIVE . cte_table_list IDENTIFIER shift, and go to state 28 cte_table_list go to state 60 cte_table go to state 30 cte_table_name go to state 31 identifier go to state 32 table_name go to state 33 State 28 347 identifier: IDENTIFIER . $default reduce using rule 347 (identifier) State 29 109 opt_with_clause: WITH cte_table_list . $default reduce using rule 109 (opt_with_clause) State 30 112 cte_table_list: cte_table . 113 | cte_table . OP_COMMA cte_table_list OP_COMMA shift, and go to state 61 $default reduce using rule 112 (cte_table_list) State 31 114 cte_table: cte_table_name . AS OP_LP select_stmt OP_RP AS shift, and go to state 62 State 32 349 table_name: identifier . $default reduce using rule 349 (table_name) State 33 115 cte_table_name: table_name . opt_column_name_list_p OP_LP shift, and go to state 63 $default reduce using rule 251 (opt_column_name_list_p) opt_column_name_list_p go to state 64 State 34 193 update_stmt: UPDATE IGNORE . table_name opt_as_alias SET set_clause_list opt_where_clause opt_order_clause opt_limit_row_count IDENTIFIER shift, and go to state 28 identifier go to state 32 table_name go to state 65 State 35 194 update_stmt: UPDATE table_name . opt_as_alias SET set_clause_list opt_where_clause opt_order_clause opt_limit_row_count AS shift, and go to state 66 $default reduce using rule 257 (opt_as_alias) opt_as_alias go to state 67 as_alias go to state 68 State 36 176 drop_trigger_stmt: DROP TRIGGER . opt_if_exist trigger_name IF shift, and go to state 69 $default reduce using rule 346 (opt_if_exist) opt_if_exist go to state 70 State 37 177 drop_view_stmt: DROP VIEW . opt_if_exist view_name opt_restrict_or_cascade IF shift, and go to state 69 $default reduce using rule 346 (opt_if_exist) opt_if_exist go to state 71 State 38 171 drop_index_stmt: DROP INDEX . table_name opt_extra_option IDENTIFIER shift, and go to state 28 identifier go to state 32 table_name go to state 72 State 39 244 opt_temp: TEMPORARY . $default reduce using rule 244 (opt_temp) State 40 172 drop_table_stmt: DROP opt_temp . TABLE opt_if_exist table_name opt_restrict_or_cascade TABLE shift, and go to state 73 State 41 22 select_with_parens: OP_LP select_with_parens . OP_RP OP_RP shift, and go to state 74 State 42 21 select_with_parens: OP_LP select_no_parens . OP_RP OP_RP shift, and go to state 75 State 43 23 select_no_parens: opt_with_clause . select_clause_list opt_order_clause opt_limit_clause SELECT shift, and go to state 56 select_clause_list go to state 58 select_clause go to state 59 State 44 122 create_trigger_stmt: CREATE TRIGGER . trigger_name trigger_action_time trigger_events ON table_name FOR EACH ROW trigger_body IDENTIFIER shift, and go to state 28 trigger_name go to state 76 identifier go to state 77 State 45 351 opt_index_keyword: UNIQUE . $default reduce using rule 351 (opt_index_keyword) State 46 124 create_view_stmt: CREATE OR . REPLACE opt_view_algorithm opt_sql_security VIEW view_name opt_column_name_list_p AS select_stmt opt_check_option REPLACE shift, and go to state 78 State 47 353 opt_index_keyword: SPATIAL . $default reduce using rule 353 (opt_index_keyword) State 48 352 opt_index_keyword: FULLTEXT . $default reduce using rule 352 (opt_index_keyword) State 49 143 opt_view_algorithm: ALGORITHM . OP_EQUAL UNDEFINED 144 | ALGORITHM . OP_EQUAL MERGE 145 | ALGORITHM . OP_EQUAL TEMPTABLE OP_EQUAL shift, and go to state 79 State 50 123 create_view_stmt: CREATE opt_view_algorithm . opt_sql_security VIEW view_name opt_column_name_list_p AS select_stmt opt_check_option SQL shift, and go to state 80 $default reduce using rule 149 (opt_sql_security) opt_sql_security go to state 81 State 51 119 create_table_stmt: CREATE opt_temp . TABLE opt_if_not_exist table_name opt_table_option_list opt_ignore_or_replace AS select_stmt 120 | CREATE opt_temp . TABLE opt_if_not_exist table_name OP_LP column_def_list opt_table_constraint_list OP_RP opt_table_option_list TABLE shift, and go to state 82 State 52 121 create_index_stmt: CREATE opt_index_keyword . INDEX table_name ON table_name OP_LP indexed_column_list OP_RP opt_index_option opt_extra_option INDEX shift, and go to state 83 State 53 18 alter_stmt: ALTER TABLE . table_name alter_action IDENTIFIER shift, and go to state 28 identifier go to state 32 table_name go to state 84 State 54 0 $accept: program $end . $default accept State 55 2 stmtlist: stmt OP_SEMI . stmtlist 3 | stmt OP_SEMI . WITH shift, and go to state 1 UPDATE shift, and go to state 2 DROP shift, and go to state 3 OP_LP shift, and go to state 4 CREATE shift, and go to state 5 ALTER shift, and go to state 6 $end reduce using rule 3 (stmtlist) $default reduce using rule 111 (opt_with_clause) stmtlist go to state 85 stmt go to state 9 create_stmt go to state 10 drop_stmt go to state 11 alter_stmt go to state 12 select_stmt go to state 13 select_with_parens go to state 14 select_no_parens go to state 15 opt_with_clause go to state 16 create_table_stmt go to state 17 create_index_stmt go to state 18 create_trigger_stmt go to state 19 create_view_stmt go to state 20 drop_index_stmt go to state 21 drop_table_stmt go to state 22 drop_trigger_stmt go to state 23 drop_view_stmt go to state 24 insert_stmt go to state 25 update_stmt go to state 26 State 56 26 select_clause: SELECT . opt_all_or_distinct select_target opt_from_clause opt_where_clause opt_group_clause opt_window_clause DISTINCT shift, and go to state 86 ALL shift, and go to state 87 $default reduce using rule 118 (opt_all_or_distinct) opt_all_or_distinct go to state 88 State 57 178 insert_stmt: opt_with_clause INSERT . INTO table_name opt_as_alias insert_rest opt_on_conflict INTO shift, and go to state 89 State 58 23 select_no_parens: opt_with_clause select_clause_list . opt_order_clause opt_limit_clause ORDER shift, and go to state 90 $default reduce using rule 99 (opt_order_clause) opt_order_clause go to state 91 State 59 24 select_clause_list: select_clause . 25 | select_clause . combine_clause select_clause_list EXCEPT shift, and go to state 92 UNION shift, and go to state 93 INTERSECT shift, and go to state 94 $default reduce using rule 24 (select_clause_list) combine_clause go to state 95 State 60 110 opt_with_clause: WITH RECURSIVE cte_table_list . $default reduce using rule 110 (opt_with_clause) State 61 113 cte_table_list: cte_table OP_COMMA . cte_table_list IDENTIFIER shift, and go to state 28 cte_table_list go to state 96 cte_table go to state 30 cte_table_name go to state 31 identifier go to state 32 table_name go to state 33 State 62 114 cte_table: cte_table_name AS . OP_LP select_stmt OP_RP OP_LP shift, and go to state 97 State 63 250 opt_column_name_list_p: OP_LP . column_name_list OP_RP IDENTIFIER shift, and go to state 28 column_name_list go to state 98 identifier go to state 99 column_name go to state 100 State 64 115 cte_table_name: table_name opt_column_name_list_p . $default reduce using rule 115 (cte_table_name) State 65 193 update_stmt: UPDATE IGNORE table_name . opt_as_alias SET set_clause_list opt_where_clause opt_order_clause opt_limit_row_count AS shift, and go to state 66 $default reduce using rule 257 (opt_as_alias) opt_as_alias go to state 101 as_alias go to state 68 State 66 348 as_alias: AS . identifier IDENTIFIER shift, and go to state 28 identifier go to state 102 State 67 194 update_stmt: UPDATE table_name opt_as_alias . SET set_clause_list opt_where_clause opt_order_clause opt_limit_row_count SET shift, and go to state 103 State 68 256 opt_as_alias: as_alias . $default reduce using rule 256 (opt_as_alias) State 69 345 opt_if_exist: IF . EXISTS EXISTS shift, and go to state 104 State 70 176 drop_trigger_stmt: DROP TRIGGER opt_if_exist . trigger_name IDENTIFIER shift, and go to state 28 trigger_name go to state 105 identifier go to state 77 State 71 177 drop_view_stmt: DROP VIEW opt_if_exist . view_name opt_restrict_or_cascade IDENTIFIER shift, and go to state 28 identifier go to state 106 view_name go to state 107 State 72 171 drop_index_stmt: DROP INDEX table_name . opt_extra_option ALGORITHM shift, and go to state 108 LOCK shift, and go to state 109 $default reduce using rule 155 (opt_extra_option) opt_extra_option go to state 110 index_algorithm_option go to state 111 lock_option go to state 112 State 73 172 drop_table_stmt: DROP opt_temp TABLE . opt_if_exist table_name opt_restrict_or_cascade IF shift, and go to state 69 $default reduce using rule 346 (opt_if_exist) opt_if_exist go to state 113 State 74 22 select_with_parens: OP_LP select_with_parens OP_RP . $default reduce using rule 22 (select_with_parens) State 75 21 select_with_parens: OP_LP select_no_parens OP_RP . $default reduce using rule 21 (select_with_parens) State 76 122 create_trigger_stmt: CREATE TRIGGER trigger_name . trigger_action_time trigger_events ON table_name FOR EACH ROW trigger_body BEFORE shift, and go to state 114 AFTER shift, and go to state 115 trigger_action_time go to state 116 State 77 168 trigger_name: identifier . $default reduce using rule 168 (trigger_name) State 78 124 create_view_stmt: CREATE OR REPLACE . opt_view_algorithm opt_sql_security VIEW view_name opt_column_name_list_p AS select_stmt opt_check_option ALGORITHM shift, and go to state 49 $default reduce using rule 146 (opt_view_algorithm) opt_view_algorithm go to state 117 State 79 143 opt_view_algorithm: ALGORITHM OP_EQUAL . UNDEFINED 144 | ALGORITHM OP_EQUAL . MERGE 145 | ALGORITHM OP_EQUAL . TEMPTABLE MERGE shift, and go to state 118 TEMPTABLE shift, and go to state 119 UNDEFINED shift, and go to state 120 State 80 147 opt_sql_security: SQL . SECURITY DEFINER 148 | SQL . SECURITY INVOKER SECURITY shift, and go to state 121 State 81 123 create_view_stmt: CREATE opt_view_algorithm opt_sql_security . VIEW view_name opt_column_name_list_p AS select_stmt opt_check_option VIEW shift, and go to state 122 State 82 119 create_table_stmt: CREATE opt_temp TABLE . opt_if_not_exist table_name opt_table_option_list opt_ignore_or_replace AS select_stmt 120 | CREATE opt_temp TABLE . opt_if_not_exist table_name OP_LP column_def_list opt_table_constraint_list OP_RP opt_table_option_list IF shift, and go to state 123 $default reduce using rule 344 (opt_if_not_exist) opt_if_not_exist go to state 124 State 83 121 create_index_stmt: CREATE opt_index_keyword INDEX . table_name ON table_name OP_LP indexed_column_list OP_RP opt_index_option opt_extra_option IDENTIFIER shift, and go to state 28 identifier go to state 32 table_name go to state 125 State 84 18 alter_stmt: ALTER TABLE table_name . alter_action ENABLE shift, and go to state 126 WITH shift, and go to state 127 FORCE shift, and go to state 128 WITHOUT shift, and go to state 129 DROP shift, and go to state 130 DISABLE shift, and go to state 131 LOCK shift, and go to state 109 ADD shift, and go to state 132 RENAME shift, and go to state 133 lock_option go to state 134 alter_action go to state 135 alter_constant_action go to state 136 State 85 2 stmtlist: stmt OP_SEMI stmtlist . $default reduce using rule 2 (stmtlist) State 86 117 opt_all_or_distinct: DISTINCT . $default reduce using rule 117 (opt_all_or_distinct) State 87 116 opt_all_or_distinct: ALL . $default reduce using rule 116 (opt_all_or_distinct) State 88 26 select_clause: SELECT opt_all_or_distinct . select_target opt_from_clause opt_where_clause opt_group_clause opt_window_clause OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 141 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 CAST shift, and go to state 146 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 $default reduce using rule 364 (opt_not) select_target go to state 151 expr_list go to state 152 expr go to state 153 operand go to state 154 cast_expr go to state 155 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 logic_expr go to state 159 in_expr go to state 160 case_expr go to state 161 between_expr go to state 162 exists_expr go to state 163 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 opt_not go to state 178 State 89 178 insert_stmt: opt_with_clause INSERT INTO . table_name opt_as_alias insert_rest opt_on_conflict IDENTIFIER shift, and go to state 28 identifier go to state 32 table_name go to state 179 State 90 98 opt_order_clause: ORDER . BY order_item_list BY shift, and go to state 180 State 91 23 select_no_parens: opt_with_clause select_clause_list opt_order_clause . opt_limit_clause LIMIT shift, and go to state 181 $default reduce using rule 92 (opt_limit_clause) opt_limit_clause go to state 182 limit_clause go to state 183 State 92 29 combine_clause: EXCEPT . $default reduce using rule 29 (combine_clause) State 93 27 combine_clause: UNION . $default reduce using rule 27 (combine_clause) State 94 28 combine_clause: INTERSECT . $default reduce using rule 28 (combine_clause) State 95 25 select_clause_list: select_clause combine_clause . select_clause_list SELECT shift, and go to state 56 select_clause_list go to state 184 select_clause go to state 59 State 96 113 cte_table_list: cte_table OP_COMMA cte_table_list . $default reduce using rule 113 (cte_table_list) State 97 114 cte_table: cte_table_name AS OP_LP . select_stmt OP_RP WITH shift, and go to state 1 OP_LP shift, and go to state 4 $default reduce using rule 111 (opt_with_clause) select_stmt go to state 185 select_with_parens go to state 14 select_no_parens go to state 15 opt_with_clause go to state 43 State 98 250 opt_column_name_list_p: OP_LP column_name_list . OP_RP OP_RP shift, and go to state 186 State 99 350 column_name: identifier . $default reduce using rule 350 (column_name) State 100 77 column_name_list: column_name . 78 | column_name . OP_COMMA column_name_list OP_COMMA shift, and go to state 187 $default reduce using rule 77 (column_name_list) State 101 193 update_stmt: UPDATE IGNORE table_name opt_as_alias . SET set_clause_list opt_where_clause opt_order_clause opt_limit_row_count SET shift, and go to state 188 State 102 348 as_alias: AS identifier . $default reduce using rule 348 (as_alias) State 103 194 update_stmt: UPDATE table_name opt_as_alias SET . set_clause_list opt_where_clause opt_order_clause opt_limit_row_count OP_LP shift, and go to state 189 IDENTIFIER shift, and go to state 28 set_clause_list go to state 190 set_clause go to state 191 identifier go to state 99 column_name go to state 192 State 104 345 opt_if_exist: IF EXISTS . $default reduce using rule 345 (opt_if_exist) State 105 176 drop_trigger_stmt: DROP TRIGGER opt_if_exist trigger_name . $default reduce using rule 176 (drop_trigger_stmt) State 106 355 view_name: identifier . $default reduce using rule 355 (view_name) State 107 177 drop_view_stmt: DROP VIEW opt_if_exist view_name . opt_restrict_or_cascade RESTRICT shift, and go to state 193 CASCADE shift, and go to state 194 $default reduce using rule 175 (opt_restrict_or_cascade) opt_restrict_or_cascade go to state 195 State 108 156 index_algorithm_option: ALGORITHM . opt_op_equal DEFAULT 157 | ALGORITHM . opt_op_equal INPLACE 158 | ALGORITHM . opt_op_equal COPY OP_EQUAL shift, and go to state 196 $default reduce using rule 164 (opt_op_equal) opt_op_equal go to state 197 State 109 159 lock_option: LOCK . opt_op_equal DEFAULT 160 | LOCK . opt_op_equal NONE 161 | LOCK . opt_op_equal SHARED 162 | LOCK . opt_op_equal EXCLUSIVE OP_EQUAL shift, and go to state 196 $default reduce using rule 164 (opt_op_equal) opt_op_equal go to state 198 State 110 171 drop_index_stmt: DROP INDEX table_name opt_extra_option . $default reduce using rule 171 (drop_index_stmt) State 111 153 opt_extra_option: index_algorithm_option . $default reduce using rule 153 (opt_extra_option) State 112 154 opt_extra_option: lock_option . $default reduce using rule 154 (opt_extra_option) State 113 172 drop_table_stmt: DROP opt_temp TABLE opt_if_exist . table_name opt_restrict_or_cascade IDENTIFIER shift, and go to state 28 identifier go to state 32 table_name go to state 199 State 114 169 trigger_action_time: BEFORE . $default reduce using rule 169 (trigger_action_time) State 115 170 trigger_action_time: AFTER . $default reduce using rule 170 (trigger_action_time) State 116 122 create_trigger_stmt: CREATE TRIGGER trigger_name trigger_action_time . trigger_events ON table_name FOR EACH ROW trigger_body UPDATE shift, and go to state 200 DELETE shift, and go to state 201 INSERT shift, and go to state 202 trigger_events go to state 203 State 117 124 create_view_stmt: CREATE OR REPLACE opt_view_algorithm . opt_sql_security VIEW view_name opt_column_name_list_p AS select_stmt opt_check_option SQL shift, and go to state 80 $default reduce using rule 149 (opt_sql_security) opt_sql_security go to state 204 State 118 144 opt_view_algorithm: ALGORITHM OP_EQUAL MERGE . $default reduce using rule 144 (opt_view_algorithm) State 119 145 opt_view_algorithm: ALGORITHM OP_EQUAL TEMPTABLE . $default reduce using rule 145 (opt_view_algorithm) State 120 143 opt_view_algorithm: ALGORITHM OP_EQUAL UNDEFINED . $default reduce using rule 143 (opt_view_algorithm) State 121 147 opt_sql_security: SQL SECURITY . DEFINER 148 | SQL SECURITY . INVOKER DEFINER shift, and go to state 205 INVOKER shift, and go to state 206 State 122 123 create_view_stmt: CREATE opt_view_algorithm opt_sql_security VIEW . view_name opt_column_name_list_p AS select_stmt opt_check_option IDENTIFIER shift, and go to state 28 identifier go to state 106 view_name go to state 207 State 123 343 opt_if_not_exist: IF . NOT EXISTS NOT shift, and go to state 208 State 124 119 create_table_stmt: CREATE opt_temp TABLE opt_if_not_exist . table_name opt_table_option_list opt_ignore_or_replace AS select_stmt 120 | CREATE opt_temp TABLE opt_if_not_exist . table_name OP_LP column_def_list opt_table_constraint_list OP_RP opt_table_option_list IDENTIFIER shift, and go to state 28 identifier go to state 32 table_name go to state 209 State 125 121 create_index_stmt: CREATE opt_index_keyword INDEX table_name . ON table_name OP_LP indexed_column_list OP_RP opt_index_option opt_extra_option ON shift, and go to state 210 State 126 203 alter_constant_action: ENABLE . KEYS KEYS shift, and go to state 211 State 127 205 alter_constant_action: WITH . VALIDATION VALIDATION shift, and go to state 212 State 128 201 alter_constant_action: FORCE . $default reduce using rule 201 (alter_constant_action) State 129 206 alter_constant_action: WITHOUT . VALIDATION VALIDATION shift, and go to state 213 State 130 198 alter_action: DROP . opt_column column_name 200 alter_constant_action: DROP . PRIMARY KEY PRIMARY shift, and go to state 214 COLUMN shift, and go to state 215 $default reduce using rule 338 (opt_column) opt_column go to state 216 State 131 202 alter_constant_action: DISABLE . KEYS KEYS shift, and go to state 217 State 132 197 alter_action: ADD . opt_column column_def COLUMN shift, and go to state 215 $default reduce using rule 338 (opt_column) opt_column go to state 218 State 133 195 alter_action: RENAME . TO table_name 196 | RENAME . opt_column column_name TO column_name COLUMN shift, and go to state 215 TO shift, and go to state 219 $default reduce using rule 338 (opt_column) opt_column go to state 220 State 134 204 alter_constant_action: lock_option . $default reduce using rule 204 (alter_constant_action) State 135 18 alter_stmt: ALTER TABLE table_name alter_action . $default reduce using rule 18 (alter_stmt) State 136 199 alter_action: alter_constant_action . $default reduce using rule 199 (alter_action) State 137 277 unary_expr: OP_SUB . operand OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 221 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 operand go to state 222 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 case_expr go to state 161 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 State 138 332 bool_literal: FALSE . $default reduce using rule 332 (bool_literal) State 139 283 unary_expr: OP_MUL . $default reduce using rule 283 (unary_expr) State 140 331 bool_literal: TRUE . $default reduce using rule 331 (bool_literal) State 141 278 unary_expr: NOT . operand 363 opt_not: NOT . OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 221 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 $default reduce using rule 363 (opt_not) operand go to state 223 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 case_expr go to state 161 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 State 142 293 case_expr: CASE . expr case_list END 294 | CASE . case_list END 295 | CASE . expr case_list ELSE expr END 296 | CASE . case_list ELSE expr END OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 141 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 CAST shift, and go to state 146 NULL shift, and go to state 147 WHEN shift, and go to state 224 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 $default reduce using rule 364 (opt_not) expr go to state 225 operand go to state 154 cast_expr go to state 155 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 logic_expr go to state 159 in_expr go to state 160 case_expr go to state 161 between_expr go to state 162 exists_expr go to state 163 function_expr go to state 164 case_list go to state 226 case_clause go to state 227 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 opt_not go to state 178 State 143 325 array_expr: ARRAY . OP_LBRACKET expr_list OP_RBRACKET OP_LBRACKET shift, and go to state 228 State 144 318 extract_expr: EXTRACT . OP_LP datetime_field FROM expr OP_RP OP_LP shift, and go to state 229 State 145 264 operand: OP_LP . expr_list OP_RP 273 | OP_LP . select_no_parens OP_RP WITH shift, and go to state 1 OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 141 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 CAST shift, and go to state 146 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 EXISTS reduce using rule 364 (opt_not) $default reduce using rule 111 (opt_with_clause) select_no_parens go to state 230 expr_list go to state 231 opt_with_clause go to state 43 expr go to state 153 operand go to state 154 cast_expr go to state 155 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 logic_expr go to state 159 in_expr go to state 160 case_expr go to state 161 between_expr go to state 162 exists_expr go to state 163 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 opt_not go to state 178 State 146 274 cast_expr: CAST . OP_LP expr AS type_name OP_RP OP_LP shift, and go to state 232 State 147 282 unary_expr: NULL . $default reduce using rule 282 (unary_expr) State 148 335 int_literal: INTLITERAL . $default reduce using rule 335 (int_literal) State 149 336 float_literal: FLOATLITERAL . $default reduce using rule 336 (float_literal) State 150 330 string_literal: STRINGLITERAL . $default reduce using rule 330 (string_literal) State 151 26 select_clause: SELECT opt_all_or_distinct select_target . opt_from_clause opt_where_clause opt_group_clause opt_window_clause FROM shift, and go to state 233 $default reduce using rule 31 (opt_from_clause) opt_from_clause go to state 234 from_clause go to state 235 State 152 32 select_target: expr_list . $default reduce using rule 32 (select_target) State 153 89 expr_list: expr . opt_as_alias OP_COMMA expr_list 90 | expr . opt_as_alias 288 logic_expr: expr . AND expr 289 | expr . OR expr OR shift, and go to state 236 AND shift, and go to state 237 AS shift, and go to state 66 $default reduce using rule 257 (opt_as_alias) opt_as_alias go to state 238 as_alias go to state 68 State 154 258 expr: operand . 279 unary_expr: operand . ISNULL 280 | operand . IS NULL 281 | operand . IS NOT NULL 285 binary_expr: operand . binary_op operand 286 | operand . LIKE operand 287 | operand . NOT LIKE operand 290 in_expr: operand . opt_not IN OP_LP select_no_parens OP_RP 291 | operand . opt_not IN OP_LP expr_list OP_RP 292 | operand . opt_not IN table_name 297 between_expr: operand . BETWEEN operand AND operand 298 | operand . NOT BETWEEN operand AND operand 312 comp_expr: operand . OP_EQUAL operand 313 | operand . OP_NOTEQUAL operand 314 | operand . OP_GREATERTHAN operand 315 | operand . OP_LESSTHAN operand 316 | operand . OP_LESSEQ operand 317 | operand . OP_GREATEREQ operand 326 array_index: operand . OP_LBRACKET int_literal OP_RBRACKET OP_NOTEQUAL shift, and go to state 239 OP_GREATERTHAN shift, and go to state 240 OP_LESSTHAN shift, and go to state 241 OP_GREATEREQ shift, and go to state 242 OP_ADD shift, and go to state 243 OP_SUB shift, and go to state 244 OP_MUL shift, and go to state 245 OP_MOD shift, and go to state 246 IS shift, and go to state 247 NOT shift, and go to state 248 OP_XOR shift, and go to state 249 BETWEEN shift, and go to state 250 OP_LESSEQ shift, and go to state 251 LIKE shift, and go to state 252 OP_LBRACKET shift, and go to state 253 OP_DIVIDE shift, and go to state 254 ISNULL shift, and go to state 255 OP_EQUAL shift, and go to state 256 IN reduce using rule 364 (opt_not) $default reduce using rule 258 (expr) binary_op go to state 257 opt_not go to state 258 State 155 262 expr: cast_expr . $default reduce using rule 262 (expr) State 156 266 operand: scalar_expr . $default reduce using rule 266 (operand) State 157 267 operand: unary_expr . $default reduce using rule 267 (operand) State 158 268 operand: binary_expr . $default reduce using rule 268 (operand) State 159 263 expr: logic_expr . $default reduce using rule 263 (expr) State 160 261 expr: in_expr . $default reduce using rule 261 (expr) State 161 269 operand: case_expr . $default reduce using rule 269 (operand) State 162 259 expr: between_expr . $default reduce using rule 259 (expr) State 163 260 expr: exists_expr . $default reduce using rule 260 (expr) State 164 272 operand: function_expr . $default reduce using rule 272 (operand) State 165 284 binary_expr: comp_expr . $default reduce using rule 284 (binary_expr) State 166 270 operand: extract_expr . $default reduce using rule 270 (operand) State 167 271 operand: array_expr . $default reduce using rule 271 (operand) State 168 265 operand: array_index . $default reduce using rule 265 (operand) State 169 276 scalar_expr: literal . $default reduce using rule 276 (scalar_expr) State 170 327 literal: string_literal . $default reduce using rule 327 (literal) State 171 328 literal: bool_literal . $default reduce using rule 328 (literal) State 172 329 literal: num_literal . $default reduce using rule 329 (literal) State 173 333 num_literal: int_literal . $default reduce using rule 333 (num_literal) State 174 334 num_literal: float_literal . $default reduce using rule 334 (num_literal) State 175 350 column_name: identifier . 356 function_name: identifier . OP_LP reduce using rule 356 (function_name) $default reduce using rule 350 (column_name) State 176 275 scalar_expr: column_name . $default reduce using rule 275 (scalar_expr) State 177 300 function_expr: function_name . OP_LP OP_RP opt_filter_clause opt_over_clause 301 | function_name . OP_LP opt_distinct expr_list OP_RP opt_filter_clause opt_over_clause OP_LP shift, and go to state 259 State 178 299 exists_expr: opt_not . EXISTS OP_LP select_no_parens OP_RP EXISTS shift, and go to state 260 State 179 178 insert_stmt: opt_with_clause INSERT INTO table_name . opt_as_alias insert_rest opt_on_conflict AS shift, and go to state 66 $default reduce using rule 257 (opt_as_alias) opt_as_alias go to state 261 as_alias go to state 68 State 180 98 opt_order_clause: ORDER BY . order_item_list OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 141 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 CAST shift, and go to state 146 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 $default reduce using rule 364 (opt_not) order_item_list go to state 262 order_item go to state 263 expr go to state 264 operand go to state 154 cast_expr go to state 155 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 logic_expr go to state 159 in_expr go to state 160 case_expr go to state 161 between_expr go to state 162 exists_expr go to state 163 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 opt_not go to state 178 State 181 93 limit_clause: LIMIT . expr 94 | LIMIT . expr OFFSET expr 95 | LIMIT . expr OP_COMMA expr OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 141 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 CAST shift, and go to state 146 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 $default reduce using rule 364 (opt_not) expr go to state 265 operand go to state 154 cast_expr go to state 155 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 logic_expr go to state 159 in_expr go to state 160 case_expr go to state 161 between_expr go to state 162 exists_expr go to state 163 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 opt_not go to state 178 State 182 23 select_no_parens: opt_with_clause select_clause_list opt_order_clause opt_limit_clause . $default reduce using rule 23 (select_no_parens) State 183 91 opt_limit_clause: limit_clause . $default reduce using rule 91 (opt_limit_clause) State 184 25 select_clause_list: select_clause combine_clause select_clause_list . $default reduce using rule 25 (select_clause_list) State 185 114 cte_table: cte_table_name AS OP_LP select_stmt . OP_RP OP_RP shift, and go to state 266 State 186 250 opt_column_name_list_p: OP_LP column_name_list OP_RP . $default reduce using rule 250 (opt_column_name_list_p) State 187 78 column_name_list: column_name OP_COMMA . column_name_list IDENTIFIER shift, and go to state 28 column_name_list go to state 267 identifier go to state 99 column_name go to state 100 State 188 193 update_stmt: UPDATE IGNORE table_name opt_as_alias SET . set_clause_list opt_where_clause opt_order_clause opt_limit_row_count OP_LP shift, and go to state 189 IDENTIFIER shift, and go to state 28 set_clause_list go to state 268 set_clause go to state 191 identifier go to state 99 column_name go to state 192 State 189 255 set_clause: OP_LP . column_name_list OP_RP OP_EQUAL expr IDENTIFIER shift, and go to state 28 column_name_list go to state 269 identifier go to state 99 column_name go to state 100 State 190 194 update_stmt: UPDATE table_name opt_as_alias SET set_clause_list . opt_where_clause opt_order_clause opt_limit_row_count WHERE shift, and go to state 270 $default reduce using rule 63 (opt_where_clause) opt_where_clause go to state 271 where_clause go to state 272 State 191 252 set_clause_list: set_clause . 253 | set_clause . OP_COMMA set_clause_list OP_COMMA shift, and go to state 273 $default reduce using rule 252 (set_clause_list) State 192 254 set_clause: column_name . OP_EQUAL expr OP_EQUAL shift, and go to state 274 State 193 173 opt_restrict_or_cascade: RESTRICT . $default reduce using rule 173 (opt_restrict_or_cascade) State 194 174 opt_restrict_or_cascade: CASCADE . $default reduce using rule 174 (opt_restrict_or_cascade) State 195 177 drop_view_stmt: DROP VIEW opt_if_exist view_name opt_restrict_or_cascade . $default reduce using rule 177 (drop_view_stmt) State 196 163 opt_op_equal: OP_EQUAL . $default reduce using rule 163 (opt_op_equal) State 197 156 index_algorithm_option: ALGORITHM opt_op_equal . DEFAULT 157 | ALGORITHM opt_op_equal . INPLACE 158 | ALGORITHM opt_op_equal . COPY INPLACE shift, and go to state 275 DEFAULT shift, and go to state 276 COPY shift, and go to state 277 State 198 159 lock_option: LOCK opt_op_equal . DEFAULT 160 | LOCK opt_op_equal . NONE 161 | LOCK opt_op_equal . SHARED 162 | LOCK opt_op_equal . EXCLUSIVE SHARED shift, and go to state 278 NONE shift, and go to state 279 DEFAULT shift, and go to state 280 EXCLUSIVE shift, and go to state 281 State 199 172 drop_table_stmt: DROP opt_temp TABLE opt_if_exist table_name . opt_restrict_or_cascade RESTRICT shift, and go to state 193 CASCADE shift, and go to state 194 $default reduce using rule 175 (opt_restrict_or_cascade) opt_restrict_or_cascade go to state 282 State 200 167 trigger_events: UPDATE . $default reduce using rule 167 (trigger_events) State 201 165 trigger_events: DELETE . $default reduce using rule 165 (trigger_events) State 202 166 trigger_events: INSERT . $default reduce using rule 166 (trigger_events) State 203 122 create_trigger_stmt: CREATE TRIGGER trigger_name trigger_action_time trigger_events . ON table_name FOR EACH ROW trigger_body ON shift, and go to state 283 State 204 124 create_view_stmt: CREATE OR REPLACE opt_view_algorithm opt_sql_security . VIEW view_name opt_column_name_list_p AS select_stmt opt_check_option VIEW shift, and go to state 284 State 205 147 opt_sql_security: SQL SECURITY DEFINER . $default reduce using rule 147 (opt_sql_security) State 206 148 opt_sql_security: SQL SECURITY INVOKER . $default reduce using rule 148 (opt_sql_security) State 207 123 create_view_stmt: CREATE opt_view_algorithm opt_sql_security VIEW view_name . opt_column_name_list_p AS select_stmt opt_check_option OP_LP shift, and go to state 63 $default reduce using rule 251 (opt_column_name_list_p) opt_column_name_list_p go to state 285 State 208 343 opt_if_not_exist: IF NOT . EXISTS EXISTS shift, and go to state 286 State 209 119 create_table_stmt: CREATE opt_temp TABLE opt_if_not_exist table_name . opt_table_option_list opt_ignore_or_replace AS select_stmt 120 | CREATE opt_temp TABLE opt_if_not_exist table_name . OP_LP column_def_list opt_table_constraint_list OP_RP opt_table_option_list INSERT_METHOD shift, and go to state 287 OP_LP shift, and go to state 288 ROW_FORMAT shift, and go to state 289 $default reduce using rule 126 (opt_table_option_list) opt_table_option_list go to state 290 table_option_list go to state 291 table_option go to state 292 State 210 121 create_index_stmt: CREATE opt_index_keyword INDEX table_name ON . table_name OP_LP indexed_column_list OP_RP opt_index_option opt_extra_option IDENTIFIER shift, and go to state 28 identifier go to state 32 table_name go to state 293 State 211 203 alter_constant_action: ENABLE KEYS . $default reduce using rule 203 (alter_constant_action) State 212 205 alter_constant_action: WITH VALIDATION . $default reduce using rule 205 (alter_constant_action) State 213 206 alter_constant_action: WITHOUT VALIDATION . $default reduce using rule 206 (alter_constant_action) State 214 200 alter_constant_action: DROP PRIMARY . KEY KEY shift, and go to state 294 State 215 337 opt_column: COLUMN . $default reduce using rule 337 (opt_column) State 216 198 alter_action: DROP opt_column . column_name IDENTIFIER shift, and go to state 28 identifier go to state 99 column_name go to state 295 State 217 202 alter_constant_action: DISABLE KEYS . $default reduce using rule 202 (alter_constant_action) State 218 197 alter_action: ADD opt_column . column_def IDENTIFIER shift, and go to state 28 column_def go to state 296 identifier go to state 297 State 219 195 alter_action: RENAME TO . table_name IDENTIFIER shift, and go to state 28 identifier go to state 32 table_name go to state 298 State 220 196 alter_action: RENAME opt_column . column_name TO column_name IDENTIFIER shift, and go to state 28 identifier go to state 99 column_name go to state 299 State 221 278 unary_expr: NOT . operand OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 221 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 operand go to state 223 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 case_expr go to state 161 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 State 222 277 unary_expr: OP_SUB operand . 279 | operand . ISNULL 280 | operand . IS NULL 281 | operand . IS NOT NULL 285 binary_expr: operand . binary_op operand 286 | operand . LIKE operand 287 | operand . NOT LIKE operand 312 comp_expr: operand . OP_EQUAL operand 313 | operand . OP_NOTEQUAL operand 314 | operand . OP_GREATERTHAN operand 315 | operand . OP_LESSTHAN operand 316 | operand . OP_LESSEQ operand 317 | operand . OP_GREATEREQ operand 326 array_index: operand . OP_LBRACKET int_literal OP_RBRACKET OP_MUL shift, and go to state 245 OP_MOD shift, and go to state 246 OP_XOR shift, and go to state 249 OP_LBRACKET shift, and go to state 253 OP_DIVIDE shift, and go to state 254 $default reduce using rule 277 (unary_expr) binary_op go to state 257 State 223 278 unary_expr: NOT operand . 279 | operand . ISNULL 280 | operand . IS NULL 281 | operand . IS NOT NULL 285 binary_expr: operand . binary_op operand 286 | operand . LIKE operand 287 | operand . NOT LIKE operand 312 comp_expr: operand . OP_EQUAL operand 313 | operand . OP_NOTEQUAL operand 314 | operand . OP_GREATERTHAN operand 315 | operand . OP_LESSTHAN operand 316 | operand . OP_LESSEQ operand 317 | operand . OP_GREATEREQ operand 326 array_index: operand . OP_LBRACKET int_literal OP_RBRACKET OP_NOTEQUAL shift, and go to state 239 OP_GREATERTHAN shift, and go to state 240 OP_LESSTHAN shift, and go to state 241 OP_GREATEREQ shift, and go to state 242 OP_ADD shift, and go to state 243 OP_SUB shift, and go to state 244 OP_MUL shift, and go to state 245 OP_MOD shift, and go to state 246 IS shift, and go to state 247 OP_XOR shift, and go to state 249 OP_LESSEQ shift, and go to state 251 LIKE shift, and go to state 252 OP_LBRACKET shift, and go to state 253 OP_DIVIDE shift, and go to state 254 ISNULL shift, and go to state 255 OP_EQUAL shift, and go to state 256 $default reduce using rule 278 (unary_expr) binary_op go to state 257 State 224 311 case_clause: WHEN . expr THEN expr OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 141 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 CAST shift, and go to state 146 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 $default reduce using rule 364 (opt_not) expr go to state 301 operand go to state 154 cast_expr go to state 155 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 logic_expr go to state 159 in_expr go to state 160 case_expr go to state 161 between_expr go to state 162 exists_expr go to state 163 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 opt_not go to state 178 State 225 288 logic_expr: expr . AND expr 289 | expr . OR expr 293 case_expr: CASE expr . case_list END 295 | CASE expr . case_list ELSE expr END OR shift, and go to state 236 AND shift, and go to state 237 WHEN shift, and go to state 224 case_list go to state 302 case_clause go to state 227 State 226 294 case_expr: CASE case_list . END 296 | CASE case_list . ELSE expr END END shift, and go to state 303 ELSE shift, and go to state 304 State 227 309 case_list: case_clause . 310 | case_clause . case_list WHEN shift, and go to state 224 $default reduce using rule 309 (case_list) case_list go to state 305 case_clause go to state 227 State 228 325 array_expr: ARRAY OP_LBRACKET . expr_list OP_RBRACKET OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 141 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 CAST shift, and go to state 146 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 $default reduce using rule 364 (opt_not) expr_list go to state 306 expr go to state 153 operand go to state 154 cast_expr go to state 155 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 logic_expr go to state 159 in_expr go to state 160 case_expr go to state 161 between_expr go to state 162 exists_expr go to state 163 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 opt_not go to state 178 State 229 318 extract_expr: EXTRACT OP_LP . datetime_field FROM expr OP_RP YEAR shift, and go to state 307 MINUTE shift, and go to state 308 MONTH shift, and go to state 309 HOUR shift, and go to state 310 DAY shift, and go to state 311 SECOND shift, and go to state 312 datetime_field go to state 313 State 230 273 operand: OP_LP select_no_parens . OP_RP OP_RP shift, and go to state 314 State 231 264 operand: OP_LP expr_list . OP_RP OP_RP shift, and go to state 315 State 232 274 cast_expr: CAST OP_LP . expr AS type_name OP_RP OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 141 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 CAST shift, and go to state 146 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 $default reduce using rule 364 (opt_not) expr go to state 316 operand go to state 154 cast_expr go to state 155 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 logic_expr go to state 159 in_expr go to state 160 case_expr go to state 161 between_expr go to state 162 exists_expr go to state 163 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 opt_not go to state 178 State 233 65 from_clause: FROM . table_ref $default reduce using rule 80 (opt_table_prefix) table_ref go to state 317 opt_table_prefix go to state 318 State 234 26 select_clause: SELECT opt_all_or_distinct select_target opt_from_clause . opt_where_clause opt_group_clause opt_window_clause WHERE shift, and go to state 270 $default reduce using rule 63 (opt_where_clause) opt_where_clause go to state 319 where_clause go to state 272 State 235 30 opt_from_clause: from_clause . $default reduce using rule 30 (opt_from_clause) State 236 289 logic_expr: expr OR . expr OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 141 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 CAST shift, and go to state 146 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 $default reduce using rule 364 (opt_not) expr go to state 320 operand go to state 154 cast_expr go to state 155 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 logic_expr go to state 159 in_expr go to state 160 case_expr go to state 161 between_expr go to state 162 exists_expr go to state 163 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 opt_not go to state 178 State 237 288 logic_expr: expr AND . expr OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 141 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 CAST shift, and go to state 146 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 $default reduce using rule 364 (opt_not) expr go to state 321 operand go to state 154 cast_expr go to state 155 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 logic_expr go to state 159 in_expr go to state 160 case_expr go to state 161 between_expr go to state 162 exists_expr go to state 163 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 opt_not go to state 178 State 238 89 expr_list: expr opt_as_alias . OP_COMMA expr_list 90 | expr opt_as_alias . OP_COMMA shift, and go to state 322 $default reduce using rule 90 (expr_list) State 239 313 comp_expr: operand OP_NOTEQUAL . operand OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 221 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 operand go to state 323 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 case_expr go to state 161 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 State 240 314 comp_expr: operand OP_GREATERTHAN . operand OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 221 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 operand go to state 324 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 case_expr go to state 161 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 State 241 315 comp_expr: operand OP_LESSTHAN . operand OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 221 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 operand go to state 325 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 case_expr go to state 161 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 State 242 317 comp_expr: operand OP_GREATEREQ . operand OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 221 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 operand go to state 326 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 case_expr go to state 161 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 State 243 357 binary_op: OP_ADD . $default reduce using rule 357 (binary_op) State 244 358 binary_op: OP_SUB . $default reduce using rule 358 (binary_op) State 245 361 binary_op: OP_MUL . $default reduce using rule 361 (binary_op) State 246 360 binary_op: OP_MOD . $default reduce using rule 360 (binary_op) State 247 280 unary_expr: operand IS . NULL 281 | operand IS . NOT NULL NOT shift, and go to state 327 NULL shift, and go to state 328 State 248 287 binary_expr: operand NOT . LIKE operand 298 between_expr: operand NOT . BETWEEN operand AND operand 363 opt_not: NOT . BETWEEN shift, and go to state 329 LIKE shift, and go to state 330 $default reduce using rule 363 (opt_not) State 249 362 binary_op: OP_XOR . $default reduce using rule 362 (binary_op) State 250 297 between_expr: operand BETWEEN . operand AND operand OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 221 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 operand go to state 331 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 case_expr go to state 161 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 State 251 316 comp_expr: operand OP_LESSEQ . operand OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 221 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 operand go to state 332 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 case_expr go to state 161 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 State 252 286 binary_expr: operand LIKE . operand OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 221 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 operand go to state 333 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 case_expr go to state 161 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 State 253 326 array_index: operand OP_LBRACKET . int_literal OP_RBRACKET INTLITERAL shift, and go to state 148 int_literal go to state 334 State 254 359 binary_op: OP_DIVIDE . $default reduce using rule 359 (binary_op) State 255 279 unary_expr: operand ISNULL . $default reduce using rule 279 (unary_expr) State 256 312 comp_expr: operand OP_EQUAL . operand OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 221 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 operand go to state 335 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 case_expr go to state 161 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 State 257 285 binary_expr: operand binary_op . operand OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 221 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 operand go to state 336 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 case_expr go to state 161 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 State 258 290 in_expr: operand opt_not . IN OP_LP select_no_parens OP_RP 291 | operand opt_not . IN OP_LP expr_list OP_RP 292 | operand opt_not . IN table_name IN shift, and go to state 337 State 259 300 function_expr: function_name OP_LP . OP_RP opt_filter_clause opt_over_clause 301 | function_name OP_LP . opt_distinct expr_list OP_RP opt_filter_clause opt_over_clause DISTINCT shift, and go to state 338 OP_RP shift, and go to state 339 $default reduce using rule 303 (opt_distinct) opt_distinct go to state 340 State 260 299 exists_expr: opt_not EXISTS . OP_LP select_no_parens OP_RP OP_LP shift, and go to state 341 State 261 178 insert_stmt: opt_with_clause INSERT INTO table_name opt_as_alias . insert_rest opt_on_conflict OP_LP shift, and go to state 63 $default reduce using rule 251 (opt_column_name_list_p) insert_rest go to state 342 opt_column_name_list_p go to state 343 State 262 98 opt_order_clause: ORDER BY order_item_list . $default reduce using rule 98 (opt_order_clause) State 263 103 order_item_list: order_item . 104 | order_item . OP_COMMA order_item_list OP_COMMA shift, and go to state 344 $default reduce using rule 103 (order_item_list) State 264 105 order_item: expr . opt_order_behavior opt_order_nulls 288 logic_expr: expr . AND expr 289 | expr . OR expr OR shift, and go to state 236 AND shift, and go to state 237 ASC shift, and go to state 345 DESC shift, and go to state 346 $default reduce using rule 108 (opt_order_behavior) opt_order_behavior go to state 347 State 265 93 limit_clause: LIMIT expr . 94 | LIMIT expr . OFFSET expr 95 | LIMIT expr . OP_COMMA expr 288 logic_expr: expr . AND expr 289 | expr . OR expr OR shift, and go to state 236 OFFSET shift, and go to state 348 AND shift, and go to state 237 OP_COMMA shift, and go to state 349 $default reduce using rule 93 (limit_clause) State 266 114 cte_table: cte_table_name AS OP_LP select_stmt OP_RP . $default reduce using rule 114 (cte_table) State 267 78 column_name_list: column_name OP_COMMA column_name_list . $default reduce using rule 78 (column_name_list) State 268 193 update_stmt: UPDATE IGNORE table_name opt_as_alias SET set_clause_list . opt_where_clause opt_order_clause opt_limit_row_count WHERE shift, and go to state 270 $default reduce using rule 63 (opt_where_clause) opt_where_clause go to state 350 where_clause go to state 272 State 269 255 set_clause: OP_LP column_name_list . OP_RP OP_EQUAL expr OP_RP shift, and go to state 351 State 270 64 where_clause: WHERE . expr OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 141 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 CAST shift, and go to state 146 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 $default reduce using rule 364 (opt_not) expr go to state 352 operand go to state 154 cast_expr go to state 155 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 logic_expr go to state 159 in_expr go to state 160 case_expr go to state 161 between_expr go to state 162 exists_expr go to state 163 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 opt_not go to state 178 State 271 194 update_stmt: UPDATE table_name opt_as_alias SET set_clause_list opt_where_clause . opt_order_clause opt_limit_row_count ORDER shift, and go to state 90 $default reduce using rule 99 (opt_order_clause) opt_order_clause go to state 353 State 272 62 opt_where_clause: where_clause . $default reduce using rule 62 (opt_where_clause) State 273 253 set_clause_list: set_clause OP_COMMA . set_clause_list OP_LP shift, and go to state 189 IDENTIFIER shift, and go to state 28 set_clause_list go to state 354 set_clause go to state 191 identifier go to state 99 column_name go to state 192 State 274 254 set_clause: column_name OP_EQUAL . expr OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 141 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 CAST shift, and go to state 146 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 $default reduce using rule 364 (opt_not) expr go to state 355 operand go to state 154 cast_expr go to state 155 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 logic_expr go to state 159 in_expr go to state 160 case_expr go to state 161 between_expr go to state 162 exists_expr go to state 163 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 opt_not go to state 178 State 275 157 index_algorithm_option: ALGORITHM opt_op_equal INPLACE . $default reduce using rule 157 (index_algorithm_option) State 276 156 index_algorithm_option: ALGORITHM opt_op_equal DEFAULT . $default reduce using rule 156 (index_algorithm_option) State 277 158 index_algorithm_option: ALGORITHM opt_op_equal COPY . $default reduce using rule 158 (index_algorithm_option) State 278 161 lock_option: LOCK opt_op_equal SHARED . $default reduce using rule 161 (lock_option) State 279 160 lock_option: LOCK opt_op_equal NONE . $default reduce using rule 160 (lock_option) State 280 159 lock_option: LOCK opt_op_equal DEFAULT . $default reduce using rule 159 (lock_option) State 281 162 lock_option: LOCK opt_op_equal EXCLUSIVE . $default reduce using rule 162 (lock_option) State 282 172 drop_table_stmt: DROP opt_temp TABLE opt_if_exist table_name opt_restrict_or_cascade . $default reduce using rule 172 (drop_table_stmt) State 283 122 create_trigger_stmt: CREATE TRIGGER trigger_name trigger_action_time trigger_events ON . table_name FOR EACH ROW trigger_body IDENTIFIER shift, and go to state 28 identifier go to state 32 table_name go to state 356 State 284 124 create_view_stmt: CREATE OR REPLACE opt_view_algorithm opt_sql_security VIEW . view_name opt_column_name_list_p AS select_stmt opt_check_option IDENTIFIER shift, and go to state 28 identifier go to state 106 view_name go to state 357 State 285 123 create_view_stmt: CREATE opt_view_algorithm opt_sql_security VIEW view_name opt_column_name_list_p . AS select_stmt opt_check_option AS shift, and go to state 358 State 286 343 opt_if_not_exist: IF NOT EXISTS . $default reduce using rule 343 (opt_if_not_exist) State 287 129 table_option: INSERT_METHOD . opt_op_equal NO 130 | INSERT_METHOD . opt_op_equal FIRST 131 | INSERT_METHOD . opt_op_equal LAST OP_EQUAL shift, and go to state 196 $default reduce using rule 164 (opt_op_equal) opt_op_equal go to state 359 State 288 120 create_table_stmt: CREATE opt_temp TABLE opt_if_not_exist table_name OP_LP . column_def_list opt_table_constraint_list OP_RP opt_table_option_list IDENTIFIER shift, and go to state 28 column_def_list go to state 360 column_def go to state 361 identifier go to state 297 State 289 132 table_option: ROW_FORMAT . opt_op_equal DEFAULT 133 | ROW_FORMAT . opt_op_equal DYNAMIC 134 | ROW_FORMAT . opt_op_equal FIXED 135 | ROW_FORMAT . opt_op_equal COMPRESSED 136 | ROW_FORMAT . opt_op_equal REDUNDANT 137 | ROW_FORMAT . opt_op_equal COMPACT OP_EQUAL shift, and go to state 196 $default reduce using rule 164 (opt_op_equal) opt_op_equal go to state 362 State 290 119 create_table_stmt: CREATE opt_temp TABLE opt_if_not_exist table_name opt_table_option_list . opt_ignore_or_replace AS select_stmt REPLACE shift, and go to state 363 IGNORE shift, and go to state 364 $default reduce using rule 142 (opt_ignore_or_replace) opt_ignore_or_replace go to state 365 State 291 125 opt_table_option_list: table_option_list . $default reduce using rule 125 (opt_table_option_list) State 292 127 table_option_list: table_option . 128 | table_option . opt_op_comma table_option_list OP_COMMA shift, and go to state 366 INSERT_METHOD reduce using rule 139 (opt_op_comma) ROW_FORMAT reduce using rule 139 (opt_op_comma) $default reduce using rule 127 (table_option_list) opt_op_comma go to state 367 State 293 121 create_index_stmt: CREATE opt_index_keyword INDEX table_name ON table_name . OP_LP indexed_column_list OP_RP opt_index_option opt_extra_option OP_LP shift, and go to state 368 State 294 200 alter_constant_action: DROP PRIMARY KEY . $default reduce using rule 200 (alter_constant_action) State 295 198 alter_action: DROP opt_column column_name . $default reduce using rule 198 (alter_action) State 296 197 alter_action: ADD opt_column column_def . $default reduce using rule 197 (alter_action) State 297 209 column_def: identifier . type_name opt_column_constraint_list TEXT shift, and go to state 369 BIGINT shift, and go to state 370 NUMERIC shift, and go to state 371 BINARY shift, and go to state 372 NATIONAL shift, and go to state 373 ENUM shift, and go to state 374 DOUBLE shift, and go to state 375 LONGTEXT shift, and go to state 376 DEC shift, and go to state 377 INTEGER shift, and go to state 378 SET shift, and go to state 379 NCHAR shift, and go to state 380 REAL shift, and go to state 381 CHAR shift, and go to state 382 FIXED shift, and go to state 383 DECIMAL shift, and go to state 384 INT shift, and go to state 385 MEDIUMTEXT shift, and go to state 386 BOOLEAN shift, and go to state 387 CHARACTER shift, and go to state 388 SMALLINT shift, and go to state 389 VARCHAR shift, and go to state 390 TINYTEXT shift, and go to state 391 FLOAT shift, and go to state 392 type_name go to state 393 character_type go to state 394 character_with_length go to state 395 character_without_length go to state 396 character_conflicta go to state 397 numeric_type go to state 398 State 298 195 alter_action: RENAME TO table_name . $default reduce using rule 195 (alter_action) State 299 196 alter_action: RENAME opt_column column_name . TO column_name TO shift, and go to state 399 State 300 287 binary_expr: operand NOT . LIKE operand LIKE shift, and go to state 330 State 301 288 logic_expr: expr . AND expr 289 | expr . OR expr 311 case_clause: WHEN expr . THEN expr OR shift, and go to state 236 AND shift, and go to state 237 THEN shift, and go to state 400 State 302 293 case_expr: CASE expr case_list . END 295 | CASE expr case_list . ELSE expr END END shift, and go to state 401 ELSE shift, and go to state 402 State 303 294 case_expr: CASE case_list END . $default reduce using rule 294 (case_expr) State 304 296 case_expr: CASE case_list ELSE . expr END OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 141 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 CAST shift, and go to state 146 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 $default reduce using rule 364 (opt_not) expr go to state 403 operand go to state 154 cast_expr go to state 155 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 logic_expr go to state 159 in_expr go to state 160 case_expr go to state 161 between_expr go to state 162 exists_expr go to state 163 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 opt_not go to state 178 State 305 310 case_list: case_clause case_list . $default reduce using rule 310 (case_list) State 306 325 array_expr: ARRAY OP_LBRACKET expr_list . OP_RBRACKET OP_RBRACKET shift, and go to state 404 State 307 324 datetime_field: YEAR . $default reduce using rule 324 (datetime_field) State 308 320 datetime_field: MINUTE . $default reduce using rule 320 (datetime_field) State 309 323 datetime_field: MONTH . $default reduce using rule 323 (datetime_field) State 310 321 datetime_field: HOUR . $default reduce using rule 321 (datetime_field) State 311 322 datetime_field: DAY . $default reduce using rule 322 (datetime_field) State 312 319 datetime_field: SECOND . $default reduce using rule 319 (datetime_field) State 313 318 extract_expr: EXTRACT OP_LP datetime_field . FROM expr OP_RP FROM shift, and go to state 405 State 314 273 operand: OP_LP select_no_parens OP_RP . $default reduce using rule 273 (operand) State 315 264 operand: OP_LP expr_list OP_RP . $default reduce using rule 264 (operand) State 316 274 cast_expr: CAST OP_LP expr . AS type_name OP_RP 288 logic_expr: expr . AND expr 289 | expr . OR expr OR shift, and go to state 236 AND shift, and go to state 237 AS shift, and go to state 406 State 317 65 from_clause: FROM table_ref . 79 opt_table_prefix: table_ref . join_op NATURAL shift, and go to state 407 OP_COMMA shift, and go to state 408 JOIN shift, and go to state 409 $default reduce using rule 65 (from_clause) join_op go to state 410 State 318 66 table_ref: opt_table_prefix . table_name opt_as_alias opt_index opt_on opt_using 67 | opt_table_prefix . function_name OP_LP expr_list OP_RP opt_as_alias opt_on opt_using 68 | opt_table_prefix . OP_LP select_no_parens OP_RP opt_as_alias opt_on opt_using 69 | opt_table_prefix . OP_LP table_ref OP_RP opt_as_alias opt_on opt_using OP_LP shift, and go to state 411 IDENTIFIER shift, and go to state 28 identifier go to state 412 table_name go to state 413 function_name go to state 414 State 319 26 select_clause: SELECT opt_all_or_distinct select_target opt_from_clause opt_where_clause . opt_group_clause opt_window_clause GROUP shift, and go to state 415 $default reduce using rule 59 (opt_group_clause) opt_group_clause go to state 416 State 320 288 logic_expr: expr . AND expr 289 | expr . OR expr 289 | expr OR expr . AND shift, and go to state 237 $default reduce using rule 289 (logic_expr) State 321 288 logic_expr: expr . AND expr 288 | expr AND expr . 289 | expr . OR expr $default reduce using rule 288 (logic_expr) State 322 89 expr_list: expr opt_as_alias OP_COMMA . expr_list OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 141 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 CAST shift, and go to state 146 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 $default reduce using rule 364 (opt_not) expr_list go to state 417 expr go to state 153 operand go to state 154 cast_expr go to state 155 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 logic_expr go to state 159 in_expr go to state 160 case_expr go to state 161 between_expr go to state 162 exists_expr go to state 163 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 opt_not go to state 178 State 323 279 unary_expr: operand . ISNULL 280 | operand . IS NULL 281 | operand . IS NOT NULL 285 binary_expr: operand . binary_op operand 286 | operand . LIKE operand 287 | operand . NOT LIKE operand 312 comp_expr: operand . OP_EQUAL operand 313 | operand . OP_NOTEQUAL operand 313 | operand OP_NOTEQUAL operand . 314 | operand . OP_GREATERTHAN operand 315 | operand . OP_LESSTHAN operand 316 | operand . OP_LESSEQ operand 317 | operand . OP_GREATEREQ operand 326 array_index: operand . OP_LBRACKET int_literal OP_RBRACKET OP_GREATERTHAN shift, and go to state 240 OP_LESSTHAN shift, and go to state 241 OP_GREATEREQ shift, and go to state 242 OP_ADD shift, and go to state 243 OP_SUB shift, and go to state 244 OP_MUL shift, and go to state 245 OP_MOD shift, and go to state 246 IS shift, and go to state 247 OP_XOR shift, and go to state 249 OP_LESSEQ shift, and go to state 251 OP_LBRACKET shift, and go to state 253 OP_DIVIDE shift, and go to state 254 ISNULL shift, and go to state 255 OP_NOTEQUAL error (nonassociative) LIKE error (nonassociative) OP_EQUAL error (nonassociative) $default reduce using rule 313 (comp_expr) binary_op go to state 257 State 324 279 unary_expr: operand . ISNULL 280 | operand . IS NULL 281 | operand . IS NOT NULL 285 binary_expr: operand . binary_op operand 286 | operand . LIKE operand 287 | operand . NOT LIKE operand 312 comp_expr: operand . OP_EQUAL operand 313 | operand . OP_NOTEQUAL operand 314 | operand . OP_GREATERTHAN operand 314 | operand OP_GREATERTHAN operand . 315 | operand . OP_LESSTHAN operand 316 | operand . OP_LESSEQ operand 317 | operand . OP_GREATEREQ operand 326 array_index: operand . OP_LBRACKET int_literal OP_RBRACKET OP_ADD shift, and go to state 243 OP_SUB shift, and go to state 244 OP_MUL shift, and go to state 245 OP_MOD shift, and go to state 246 IS shift, and go to state 247 OP_XOR shift, and go to state 249 OP_LBRACKET shift, and go to state 253 OP_DIVIDE shift, and go to state 254 ISNULL shift, and go to state 255 OP_GREATERTHAN error (nonassociative) OP_LESSTHAN error (nonassociative) OP_GREATEREQ error (nonassociative) OP_LESSEQ error (nonassociative) $default reduce using rule 314 (comp_expr) binary_op go to state 257 State 325 279 unary_expr: operand . ISNULL 280 | operand . IS NULL 281 | operand . IS NOT NULL 285 binary_expr: operand . binary_op operand 286 | operand . LIKE operand 287 | operand . NOT LIKE operand 312 comp_expr: operand . OP_EQUAL operand 313 | operand . OP_NOTEQUAL operand 314 | operand . OP_GREATERTHAN operand 315 | operand . OP_LESSTHAN operand 315 | operand OP_LESSTHAN operand . 316 | operand . OP_LESSEQ operand 317 | operand . OP_GREATEREQ operand 326 array_index: operand . OP_LBRACKET int_literal OP_RBRACKET OP_ADD shift, and go to state 243 OP_SUB shift, and go to state 244 OP_MUL shift, and go to state 245 OP_MOD shift, and go to state 246 IS shift, and go to state 247 OP_XOR shift, and go to state 249 OP_LBRACKET shift, and go to state 253 OP_DIVIDE shift, and go to state 254 ISNULL shift, and go to state 255 OP_GREATERTHAN error (nonassociative) OP_LESSTHAN error (nonassociative) OP_GREATEREQ error (nonassociative) OP_LESSEQ error (nonassociative) $default reduce using rule 315 (comp_expr) binary_op go to state 257 State 326 279 unary_expr: operand . ISNULL 280 | operand . IS NULL 281 | operand . IS NOT NULL 285 binary_expr: operand . binary_op operand 286 | operand . LIKE operand 287 | operand . NOT LIKE operand 312 comp_expr: operand . OP_EQUAL operand 313 | operand . OP_NOTEQUAL operand 314 | operand . OP_GREATERTHAN operand 315 | operand . OP_LESSTHAN operand 316 | operand . OP_LESSEQ operand 317 | operand . OP_GREATEREQ operand 317 | operand OP_GREATEREQ operand . 326 array_index: operand . OP_LBRACKET int_literal OP_RBRACKET OP_ADD shift, and go to state 243 OP_SUB shift, and go to state 244 OP_MUL shift, and go to state 245 OP_MOD shift, and go to state 246 IS shift, and go to state 247 OP_XOR shift, and go to state 249 OP_LBRACKET shift, and go to state 253 OP_DIVIDE shift, and go to state 254 ISNULL shift, and go to state 255 OP_GREATERTHAN error (nonassociative) OP_LESSTHAN error (nonassociative) OP_GREATEREQ error (nonassociative) OP_LESSEQ error (nonassociative) $default reduce using rule 317 (comp_expr) binary_op go to state 257 State 327 281 unary_expr: operand IS NOT . NULL NULL shift, and go to state 418 State 328 280 unary_expr: operand IS NULL . $default reduce using rule 280 (unary_expr) State 329 298 between_expr: operand NOT BETWEEN . operand AND operand OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 221 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 operand go to state 419 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 case_expr go to state 161 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 State 330 287 binary_expr: operand NOT LIKE . operand OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 221 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 operand go to state 420 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 case_expr go to state 161 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 State 331 279 unary_expr: operand . ISNULL 280 | operand . IS NULL 281 | operand . IS NOT NULL 285 binary_expr: operand . binary_op operand 286 | operand . LIKE operand 287 | operand . NOT LIKE operand 297 between_expr: operand BETWEEN operand . AND operand 312 comp_expr: operand . OP_EQUAL operand 313 | operand . OP_NOTEQUAL operand 314 | operand . OP_GREATERTHAN operand 315 | operand . OP_LESSTHAN operand 316 | operand . OP_LESSEQ operand 317 | operand . OP_GREATEREQ operand 326 array_index: operand . OP_LBRACKET int_literal OP_RBRACKET OP_NOTEQUAL shift, and go to state 239 OP_GREATERTHAN shift, and go to state 240 OP_LESSTHAN shift, and go to state 241 OP_GREATEREQ shift, and go to state 242 OP_ADD shift, and go to state 243 OP_SUB shift, and go to state 244 OP_MUL shift, and go to state 245 OP_MOD shift, and go to state 246 IS shift, and go to state 247 AND shift, and go to state 421 NOT shift, and go to state 300 OP_XOR shift, and go to state 249 OP_LESSEQ shift, and go to state 251 LIKE shift, and go to state 252 OP_LBRACKET shift, and go to state 253 OP_DIVIDE shift, and go to state 254 ISNULL shift, and go to state 255 OP_EQUAL shift, and go to state 256 binary_op go to state 257 State 332 279 unary_expr: operand . ISNULL 280 | operand . IS NULL 281 | operand . IS NOT NULL 285 binary_expr: operand . binary_op operand 286 | operand . LIKE operand 287 | operand . NOT LIKE operand 312 comp_expr: operand . OP_EQUAL operand 313 | operand . OP_NOTEQUAL operand 314 | operand . OP_GREATERTHAN operand 315 | operand . OP_LESSTHAN operand 316 | operand . OP_LESSEQ operand 316 | operand OP_LESSEQ operand . 317 | operand . OP_GREATEREQ operand 326 array_index: operand . OP_LBRACKET int_literal OP_RBRACKET OP_ADD shift, and go to state 243 OP_SUB shift, and go to state 244 OP_MUL shift, and go to state 245 OP_MOD shift, and go to state 246 IS shift, and go to state 247 OP_XOR shift, and go to state 249 OP_LBRACKET shift, and go to state 253 OP_DIVIDE shift, and go to state 254 ISNULL shift, and go to state 255 OP_GREATERTHAN error (nonassociative) OP_LESSTHAN error (nonassociative) OP_GREATEREQ error (nonassociative) OP_LESSEQ error (nonassociative) $default reduce using rule 316 (comp_expr) binary_op go to state 257 State 333 279 unary_expr: operand . ISNULL 280 | operand . IS NULL 281 | operand . IS NOT NULL 285 binary_expr: operand . binary_op operand 286 | operand . LIKE operand 286 | operand LIKE operand . 287 | operand . NOT LIKE operand 312 comp_expr: operand . OP_EQUAL operand 313 | operand . OP_NOTEQUAL operand 314 | operand . OP_GREATERTHAN operand 315 | operand . OP_LESSTHAN operand 316 | operand . OP_LESSEQ operand 317 | operand . OP_GREATEREQ operand 326 array_index: operand . OP_LBRACKET int_literal OP_RBRACKET OP_GREATERTHAN shift, and go to state 240 OP_LESSTHAN shift, and go to state 241 OP_GREATEREQ shift, and go to state 242 OP_ADD shift, and go to state 243 OP_SUB shift, and go to state 244 OP_MUL shift, and go to state 245 OP_MOD shift, and go to state 246 IS shift, and go to state 247 OP_XOR shift, and go to state 249 OP_LESSEQ shift, and go to state 251 OP_LBRACKET shift, and go to state 253 OP_DIVIDE shift, and go to state 254 ISNULL shift, and go to state 255 OP_NOTEQUAL error (nonassociative) LIKE error (nonassociative) OP_EQUAL error (nonassociative) $default reduce using rule 286 (binary_expr) binary_op go to state 257 State 334 326 array_index: operand OP_LBRACKET int_literal . OP_RBRACKET OP_RBRACKET shift, and go to state 422 State 335 279 unary_expr: operand . ISNULL 280 | operand . IS NULL 281 | operand . IS NOT NULL 285 binary_expr: operand . binary_op operand 286 | operand . LIKE operand 287 | operand . NOT LIKE operand 312 comp_expr: operand . OP_EQUAL operand 312 | operand OP_EQUAL operand . 313 | operand . OP_NOTEQUAL operand 314 | operand . OP_GREATERTHAN operand 315 | operand . OP_LESSTHAN operand 316 | operand . OP_LESSEQ operand 317 | operand . OP_GREATEREQ operand 326 array_index: operand . OP_LBRACKET int_literal OP_RBRACKET OP_GREATERTHAN shift, and go to state 240 OP_LESSTHAN shift, and go to state 241 OP_GREATEREQ shift, and go to state 242 OP_ADD shift, and go to state 243 OP_SUB shift, and go to state 244 OP_MUL shift, and go to state 245 OP_MOD shift, and go to state 246 IS shift, and go to state 247 OP_XOR shift, and go to state 249 OP_LESSEQ shift, and go to state 251 OP_LBRACKET shift, and go to state 253 OP_DIVIDE shift, and go to state 254 ISNULL shift, and go to state 255 OP_NOTEQUAL error (nonassociative) LIKE error (nonassociative) OP_EQUAL error (nonassociative) $default reduce using rule 312 (comp_expr) binary_op go to state 257 State 336 279 unary_expr: operand . ISNULL 280 | operand . IS NULL 281 | operand . IS NOT NULL 285 binary_expr: operand . binary_op operand 285 | operand binary_op operand . 286 | operand . LIKE operand 287 | operand . NOT LIKE operand 312 comp_expr: operand . OP_EQUAL operand 313 | operand . OP_NOTEQUAL operand 314 | operand . OP_GREATERTHAN operand 315 | operand . OP_LESSTHAN operand 316 | operand . OP_LESSEQ operand 317 | operand . OP_GREATEREQ operand 326 array_index: operand . OP_LBRACKET int_literal OP_RBRACKET OP_MUL shift, and go to state 245 OP_MOD shift, and go to state 246 OP_XOR shift, and go to state 249 OP_LBRACKET shift, and go to state 253 OP_DIVIDE shift, and go to state 254 $default reduce using rule 285 (binary_expr) binary_op go to state 257 State 337 290 in_expr: operand opt_not IN . OP_LP select_no_parens OP_RP 291 | operand opt_not IN . OP_LP expr_list OP_RP 292 | operand opt_not IN . table_name OP_LP shift, and go to state 423 IDENTIFIER shift, and go to state 28 identifier go to state 32 table_name go to state 424 State 338 302 opt_distinct: DISTINCT . $default reduce using rule 302 (opt_distinct) State 339 300 function_expr: function_name OP_LP OP_RP . opt_filter_clause opt_over_clause FILTER shift, and go to state 425 $default reduce using rule 305 (opt_filter_clause) opt_filter_clause go to state 426 State 340 301 function_expr: function_name OP_LP opt_distinct . expr_list OP_RP opt_filter_clause opt_over_clause OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 141 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 CAST shift, and go to state 146 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 $default reduce using rule 364 (opt_not) expr_list go to state 427 expr go to state 153 operand go to state 154 cast_expr go to state 155 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 logic_expr go to state 159 in_expr go to state 160 case_expr go to state 161 between_expr go to state 162 exists_expr go to state 163 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 opt_not go to state 178 State 341 299 exists_expr: opt_not EXISTS OP_LP . select_no_parens OP_RP WITH shift, and go to state 1 $default reduce using rule 111 (opt_with_clause) select_no_parens go to state 428 opt_with_clause go to state 43 State 342 178 insert_stmt: opt_with_clause INSERT INTO table_name opt_as_alias insert_rest . opt_on_conflict ON shift, and go to state 429 $default reduce using rule 187 (opt_on_conflict) opt_on_conflict go to state 430 State 343 179 insert_rest: opt_column_name_list_p . select_no_parens 180 | opt_column_name_list_p . DEFAULT VALUES 181 | opt_column_name_list_p . VALUES super_values_list WITH shift, and go to state 1 VALUES shift, and go to state 431 DEFAULT shift, and go to state 432 $default reduce using rule 111 (opt_with_clause) select_no_parens go to state 433 opt_with_clause go to state 43 State 344 104 order_item_list: order_item OP_COMMA . order_item_list OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 141 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 CAST shift, and go to state 146 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 $default reduce using rule 364 (opt_not) order_item_list go to state 434 order_item go to state 263 expr go to state 264 operand go to state 154 cast_expr go to state 155 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 logic_expr go to state 159 in_expr go to state 160 case_expr go to state 161 between_expr go to state 162 exists_expr go to state 163 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 opt_not go to state 178 State 345 106 opt_order_behavior: ASC . $default reduce using rule 106 (opt_order_behavior) State 346 107 opt_order_behavior: DESC . $default reduce using rule 107 (opt_order_behavior) State 347 105 order_item: expr opt_order_behavior . opt_order_nulls NULLS shift, and go to state 435 $default reduce using rule 102 (opt_order_nulls) opt_order_nulls go to state 436 State 348 94 limit_clause: LIMIT expr OFFSET . expr OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 141 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 CAST shift, and go to state 146 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 $default reduce using rule 364 (opt_not) expr go to state 437 operand go to state 154 cast_expr go to state 155 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 logic_expr go to state 159 in_expr go to state 160 case_expr go to state 161 between_expr go to state 162 exists_expr go to state 163 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 opt_not go to state 178 State 349 95 limit_clause: LIMIT expr OP_COMMA . expr OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 141 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 CAST shift, and go to state 146 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 $default reduce using rule 364 (opt_not) expr go to state 438 operand go to state 154 cast_expr go to state 155 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 logic_expr go to state 159 in_expr go to state 160 case_expr go to state 161 between_expr go to state 162 exists_expr go to state 163 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 opt_not go to state 178 State 350 193 update_stmt: UPDATE IGNORE table_name opt_as_alias SET set_clause_list opt_where_clause . opt_order_clause opt_limit_row_count ORDER shift, and go to state 90 $default reduce using rule 99 (opt_order_clause) opt_order_clause go to state 439 State 351 255 set_clause: OP_LP column_name_list OP_RP . OP_EQUAL expr OP_EQUAL shift, and go to state 440 State 352 64 where_clause: WHERE expr . 288 logic_expr: expr . AND expr 289 | expr . OR expr OR shift, and go to state 236 AND shift, and go to state 237 $default reduce using rule 64 (where_clause) State 353 194 update_stmt: UPDATE table_name opt_as_alias SET set_clause_list opt_where_clause opt_order_clause . opt_limit_row_count LIMIT shift, and go to state 441 $default reduce using rule 97 (opt_limit_row_count) opt_limit_row_count go to state 442 State 354 253 set_clause_list: set_clause OP_COMMA set_clause_list . $default reduce using rule 253 (set_clause_list) State 355 254 set_clause: column_name OP_EQUAL expr . 288 logic_expr: expr . AND expr 289 | expr . OR expr OR shift, and go to state 236 AND shift, and go to state 237 $default reduce using rule 254 (set_clause) State 356 122 create_trigger_stmt: CREATE TRIGGER trigger_name trigger_action_time trigger_events ON table_name . FOR EACH ROW trigger_body FOR shift, and go to state 443 State 357 124 create_view_stmt: CREATE OR REPLACE opt_view_algorithm opt_sql_security VIEW view_name . opt_column_name_list_p AS select_stmt opt_check_option OP_LP shift, and go to state 63 $default reduce using rule 251 (opt_column_name_list_p) opt_column_name_list_p go to state 444 State 358 123 create_view_stmt: CREATE opt_view_algorithm opt_sql_security VIEW view_name opt_column_name_list_p AS . select_stmt opt_check_option WITH shift, and go to state 1 OP_LP shift, and go to state 4 $default reduce using rule 111 (opt_with_clause) select_stmt go to state 445 select_with_parens go to state 14 select_no_parens go to state 15 opt_with_clause go to state 43 State 359 129 table_option: INSERT_METHOD opt_op_equal . NO 130 | INSERT_METHOD opt_op_equal . FIRST 131 | INSERT_METHOD opt_op_equal . LAST LAST shift, and go to state 446 FIRST shift, and go to state 447 NO shift, and go to state 448 State 360 120 create_table_stmt: CREATE opt_temp TABLE opt_if_not_exist table_name OP_LP column_def_list . opt_table_constraint_list OP_RP opt_table_option_list CONSTRAINT shift, and go to state 449 $default reduce using rule 399 (opt_table_constraint_list) constraint_name go to state 450 opt_table_constraint_list go to state 451 table_constraint_list go to state 452 table_constraint go to state 453 State 361 207 column_def_list: column_def . 208 | column_def . OP_COMMA column_def_list OP_COMMA shift, and go to state 454 $default reduce using rule 207 (column_def_list) State 362 132 table_option: ROW_FORMAT opt_op_equal . DEFAULT 133 | ROW_FORMAT opt_op_equal . DYNAMIC 134 | ROW_FORMAT opt_op_equal . FIXED 135 | ROW_FORMAT opt_op_equal . COMPRESSED 136 | ROW_FORMAT opt_op_equal . REDUNDANT 137 | ROW_FORMAT opt_op_equal . COMPACT COMPACT shift, and go to state 455 REDUNDANT shift, and go to state 456 COMPRESSED shift, and go to state 457 DYNAMIC shift, and go to state 458 DEFAULT shift, and go to state 459 FIXED shift, and go to state 460 State 363 141 opt_ignore_or_replace: REPLACE . $default reduce using rule 141 (opt_ignore_or_replace) State 364 140 opt_ignore_or_replace: IGNORE . $default reduce using rule 140 (opt_ignore_or_replace) State 365 119 create_table_stmt: CREATE opt_temp TABLE opt_if_not_exist table_name opt_table_option_list opt_ignore_or_replace . AS select_stmt AS shift, and go to state 461 State 366 138 opt_op_comma: OP_COMMA . $default reduce using rule 138 (opt_op_comma) State 367 128 table_option_list: table_option opt_op_comma . table_option_list INSERT_METHOD shift, and go to state 287 ROW_FORMAT shift, and go to state 289 table_option_list go to state 462 table_option go to state 292 State 368 121 create_index_stmt: CREATE opt_index_keyword INDEX table_name ON table_name OP_LP . indexed_column_list OP_RP opt_index_option opt_extra_option OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 141 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 CAST shift, and go to state 146 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 $default reduce using rule 364 (opt_not) indexed_column_list go to state 463 indexed_column go to state 464 expr go to state 465 operand go to state 154 cast_expr go to state 155 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 logic_expr go to state 159 in_expr go to state 160 case_expr go to state 161 between_expr go to state 162 exists_expr go to state 163 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 opt_not go to state 178 State 369 378 character_conflicta: TEXT . $default reduce using rule 378 (character_conflicta) State 370 388 numeric_type: BIGINT . $default reduce using rule 388 (numeric_type) State 371 396 numeric_type: NUMERIC . $default reduce using rule 396 (numeric_type) State 372 374 character_without_length: BINARY . $default reduce using rule 374 (character_without_length) State 373 382 character_conflicta: NATIONAL . CHARACTER 383 | NATIONAL . CHAR CHAR shift, and go to state 466 CHARACTER shift, and go to state 467 State 374 373 character_without_length: ENUM . $default reduce using rule 373 (character_without_length) State 375 392 numeric_type: DOUBLE . 393 | DOUBLE . PRECISION PRECISION shift, and go to state 468 $default reduce using rule 392 (numeric_type) State 376 381 character_conflicta: LONGTEXT . $default reduce using rule 381 (character_conflicta) State 377 395 numeric_type: DEC . $default reduce using rule 395 (numeric_type) State 378 386 numeric_type: INTEGER . $default reduce using rule 386 (numeric_type) State 379 372 character_without_length: SET . $default reduce using rule 372 (character_without_length) State 380 384 character_conflicta: NCHAR . $default reduce using rule 384 (character_conflicta) State 381 389 numeric_type: REAL . $default reduce using rule 389 (numeric_type) State 382 376 character_conflicta: CHAR . $default reduce using rule 376 (character_conflicta) State 383 391 numeric_type: FIXED . $default reduce using rule 391 (numeric_type) State 384 394 numeric_type: DECIMAL . $default reduce using rule 394 (numeric_type) State 385 385 numeric_type: INT . $default reduce using rule 385 (numeric_type) State 386 380 character_conflicta: MEDIUMTEXT . $default reduce using rule 380 (character_conflicta) State 387 397 numeric_type: BOOLEAN . $default reduce using rule 397 (numeric_type) State 388 375 character_conflicta: CHARACTER . $default reduce using rule 375 (character_conflicta) State 389 387 numeric_type: SMALLINT . $default reduce using rule 387 (numeric_type) State 390 377 character_conflicta: VARCHAR . $default reduce using rule 377 (character_conflicta) State 391 379 character_conflicta: TINYTEXT . $default reduce using rule 379 (character_conflicta) State 392 390 numeric_type: FLOAT . $default reduce using rule 390 (numeric_type) State 393 209 column_def: identifier type_name . opt_column_constraint_list UNIQUE shift, and go to state 469 PRIMARY shift, and go to state 470 NOT shift, and go to state 471 $default reduce using rule 211 (opt_column_constraint_list) opt_column_constraint_list go to state 472 column_constraint_list go to state 473 column_constraint go to state 474 constraint_type go to state 475 State 394 367 type_name: character_type . $default reduce using rule 367 (type_name) State 395 368 character_type: character_with_length . $default reduce using rule 368 (character_type) State 396 369 character_type: character_without_length . $default reduce using rule 369 (character_type) State 397 370 character_with_length: character_conflicta . OP_LP int_literal OP_RP 371 character_without_length: character_conflicta . OP_LP shift, and go to state 476 $default reduce using rule 371 (character_without_length) State 398 366 type_name: numeric_type . $default reduce using rule 366 (type_name) State 399 196 alter_action: RENAME opt_column column_name TO . column_name IDENTIFIER shift, and go to state 28 identifier go to state 99 column_name go to state 477 State 400 311 case_clause: WHEN expr THEN . expr OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 141 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 CAST shift, and go to state 146 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 $default reduce using rule 364 (opt_not) expr go to state 478 operand go to state 154 cast_expr go to state 155 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 logic_expr go to state 159 in_expr go to state 160 case_expr go to state 161 between_expr go to state 162 exists_expr go to state 163 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 opt_not go to state 178 State 401 293 case_expr: CASE expr case_list END . $default reduce using rule 293 (case_expr) State 402 295 case_expr: CASE expr case_list ELSE . expr END OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 141 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 CAST shift, and go to state 146 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 $default reduce using rule 364 (opt_not) expr go to state 479 operand go to state 154 cast_expr go to state 155 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 logic_expr go to state 159 in_expr go to state 160 case_expr go to state 161 between_expr go to state 162 exists_expr go to state 163 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 opt_not go to state 178 State 403 288 logic_expr: expr . AND expr 289 | expr . OR expr 296 case_expr: CASE case_list ELSE expr . END OR shift, and go to state 236 END shift, and go to state 480 AND shift, and go to state 237 State 404 325 array_expr: ARRAY OP_LBRACKET expr_list OP_RBRACKET . $default reduce using rule 325 (array_expr) State 405 318 extract_expr: EXTRACT OP_LP datetime_field FROM . expr OP_RP OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 141 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 CAST shift, and go to state 146 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 $default reduce using rule 364 (opt_not) expr go to state 481 operand go to state 154 cast_expr go to state 155 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 logic_expr go to state 159 in_expr go to state 160 case_expr go to state 161 between_expr go to state 162 exists_expr go to state 163 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 opt_not go to state 178 State 406 274 cast_expr: CAST OP_LP expr AS . type_name OP_RP TEXT shift, and go to state 369 BIGINT shift, and go to state 370 NUMERIC shift, and go to state 371 BINARY shift, and go to state 372 NATIONAL shift, and go to state 373 ENUM shift, and go to state 374 DOUBLE shift, and go to state 375 LONGTEXT shift, and go to state 376 DEC shift, and go to state 377 INTEGER shift, and go to state 378 SET shift, and go to state 379 NCHAR shift, and go to state 380 REAL shift, and go to state 381 CHAR shift, and go to state 382 FIXED shift, and go to state 383 DECIMAL shift, and go to state 384 INT shift, and go to state 385 MEDIUMTEXT shift, and go to state 386 BOOLEAN shift, and go to state 387 CHARACTER shift, and go to state 388 SMALLINT shift, and go to state 389 VARCHAR shift, and go to state 390 TINYTEXT shift, and go to state 391 FLOAT shift, and go to state 392 type_name go to state 482 character_type go to state 394 character_with_length go to state 395 character_without_length go to state 396 character_conflicta go to state 397 numeric_type go to state 398 State 407 83 join_op: NATURAL . opt_join_type JOIN CROSS shift, and go to state 483 LEFT shift, and go to state 484 INNER shift, and go to state 485 $default reduce using rule 88 (opt_join_type) opt_join_type go to state 486 State 408 81 join_op: OP_COMMA . $default reduce using rule 81 (join_op) State 409 82 join_op: JOIN . $default reduce using rule 82 (join_op) State 410 79 opt_table_prefix: table_ref join_op . $default reduce using rule 79 (opt_table_prefix) State 411 68 table_ref: opt_table_prefix OP_LP . select_no_parens OP_RP opt_as_alias opt_on opt_using 69 | opt_table_prefix OP_LP . table_ref OP_RP opt_as_alias opt_on opt_using WITH shift, and go to state 1 SELECT reduce using rule 111 (opt_with_clause) $default reduce using rule 80 (opt_table_prefix) select_no_parens go to state 487 table_ref go to state 488 opt_table_prefix go to state 318 opt_with_clause go to state 43 State 412 349 table_name: identifier . 356 function_name: identifier . OP_LP reduce using rule 356 (function_name) $default reduce using rule 349 (table_name) State 413 66 table_ref: opt_table_prefix table_name . opt_as_alias opt_index opt_on opt_using AS shift, and go to state 66 $default reduce using rule 257 (opt_as_alias) opt_as_alias go to state 489 as_alias go to state 68 State 414 67 table_ref: opt_table_prefix function_name . OP_LP expr_list OP_RP opt_as_alias opt_on opt_using OP_LP shift, and go to state 490 State 415 58 opt_group_clause: GROUP . BY expr_list opt_having_clause BY shift, and go to state 491 State 416 26 select_clause: SELECT opt_all_or_distinct select_target opt_from_clause opt_where_clause opt_group_clause . opt_window_clause WINDOW shift, and go to state 492 $default reduce using rule 34 (opt_window_clause) opt_window_clause go to state 493 window_clause go to state 494 State 417 89 expr_list: expr opt_as_alias OP_COMMA expr_list . $default reduce using rule 89 (expr_list) State 418 281 unary_expr: operand IS NOT NULL . $default reduce using rule 281 (unary_expr) State 419 279 unary_expr: operand . ISNULL 280 | operand . IS NULL 281 | operand . IS NOT NULL 285 binary_expr: operand . binary_op operand 286 | operand . LIKE operand 287 | operand . NOT LIKE operand 298 between_expr: operand NOT BETWEEN operand . AND operand 312 comp_expr: operand . OP_EQUAL operand 313 | operand . OP_NOTEQUAL operand 314 | operand . OP_GREATERTHAN operand 315 | operand . OP_LESSTHAN operand 316 | operand . OP_LESSEQ operand 317 | operand . OP_GREATEREQ operand 326 array_index: operand . OP_LBRACKET int_literal OP_RBRACKET OP_NOTEQUAL shift, and go to state 239 OP_GREATERTHAN shift, and go to state 240 OP_LESSTHAN shift, and go to state 241 OP_GREATEREQ shift, and go to state 242 OP_ADD shift, and go to state 243 OP_SUB shift, and go to state 244 OP_MUL shift, and go to state 245 OP_MOD shift, and go to state 246 IS shift, and go to state 247 AND shift, and go to state 495 NOT shift, and go to state 300 OP_XOR shift, and go to state 249 OP_LESSEQ shift, and go to state 251 LIKE shift, and go to state 252 OP_LBRACKET shift, and go to state 253 OP_DIVIDE shift, and go to state 254 ISNULL shift, and go to state 255 OP_EQUAL shift, and go to state 256 binary_op go to state 257 State 420 279 unary_expr: operand . ISNULL 280 | operand . IS NULL 281 | operand . IS NOT NULL 285 binary_expr: operand . binary_op operand 286 | operand . LIKE operand 287 | operand . NOT LIKE operand 287 | operand NOT LIKE operand . 312 comp_expr: operand . OP_EQUAL operand 313 | operand . OP_NOTEQUAL operand 314 | operand . OP_GREATERTHAN operand 315 | operand . OP_LESSTHAN operand 316 | operand . OP_LESSEQ operand 317 | operand . OP_GREATEREQ operand 326 array_index: operand . OP_LBRACKET int_literal OP_RBRACKET OP_GREATERTHAN shift, and go to state 240 OP_LESSTHAN shift, and go to state 241 OP_GREATEREQ shift, and go to state 242 OP_ADD shift, and go to state 243 OP_SUB shift, and go to state 244 OP_MUL shift, and go to state 245 OP_MOD shift, and go to state 246 IS shift, and go to state 247 OP_XOR shift, and go to state 249 OP_LESSEQ shift, and go to state 251 OP_LBRACKET shift, and go to state 253 OP_DIVIDE shift, and go to state 254 ISNULL shift, and go to state 255 OP_NOTEQUAL error (nonassociative) LIKE error (nonassociative) OP_EQUAL error (nonassociative) $default reduce using rule 287 (binary_expr) binary_op go to state 257 State 421 297 between_expr: operand BETWEEN operand AND . operand OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 221 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 operand go to state 496 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 case_expr go to state 161 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 State 422 326 array_index: operand OP_LBRACKET int_literal OP_RBRACKET . $default reduce using rule 326 (array_index) State 423 290 in_expr: operand opt_not IN OP_LP . select_no_parens OP_RP 291 | operand opt_not IN OP_LP . expr_list OP_RP WITH shift, and go to state 1 OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 141 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 CAST shift, and go to state 146 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 EXISTS reduce using rule 364 (opt_not) $default reduce using rule 111 (opt_with_clause) select_no_parens go to state 497 expr_list go to state 498 opt_with_clause go to state 43 expr go to state 153 operand go to state 154 cast_expr go to state 155 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 logic_expr go to state 159 in_expr go to state 160 case_expr go to state 161 between_expr go to state 162 exists_expr go to state 163 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 opt_not go to state 178 State 424 292 in_expr: operand opt_not IN table_name . $default reduce using rule 292 (in_expr) State 425 304 opt_filter_clause: FILTER . OP_LP WHERE expr OP_RP OP_LP shift, and go to state 499 State 426 300 function_expr: function_name OP_LP OP_RP opt_filter_clause . opt_over_clause OVER shift, and go to state 500 $default reduce using rule 308 (opt_over_clause) opt_over_clause go to state 501 State 427 301 function_expr: function_name OP_LP opt_distinct expr_list . OP_RP opt_filter_clause opt_over_clause OP_RP shift, and go to state 502 State 428 299 exists_expr: opt_not EXISTS OP_LP select_no_parens . OP_RP OP_RP shift, and go to state 503 State 429 185 opt_on_conflict: ON . CONFLICT opt_conflict_expr DO NOTHING 186 | ON . CONFLICT opt_conflict_expr DO UPDATE set_clause_list where_clause CONFLICT shift, and go to state 504 State 430 178 insert_stmt: opt_with_clause INSERT INTO table_name opt_as_alias insert_rest opt_on_conflict . $default reduce using rule 178 (insert_stmt) State 431 181 insert_rest: opt_column_name_list_p VALUES . super_values_list OP_LP shift, and go to state 505 super_values_list go to state 506 values_list go to state 507 State 432 180 insert_rest: opt_column_name_list_p DEFAULT . VALUES VALUES shift, and go to state 508 State 433 179 insert_rest: opt_column_name_list_p select_no_parens . $default reduce using rule 179 (insert_rest) State 434 104 order_item_list: order_item OP_COMMA order_item_list . $default reduce using rule 104 (order_item_list) State 435 100 opt_order_nulls: NULLS . FIRST 101 | NULLS . LAST LAST shift, and go to state 509 FIRST shift, and go to state 510 State 436 105 order_item: expr opt_order_behavior opt_order_nulls . $default reduce using rule 105 (order_item) State 437 94 limit_clause: LIMIT expr OFFSET expr . 288 logic_expr: expr . AND expr 289 | expr . OR expr OR shift, and go to state 236 AND shift, and go to state 237 $default reduce using rule 94 (limit_clause) State 438 95 limit_clause: LIMIT expr OP_COMMA expr . 288 logic_expr: expr . AND expr 289 | expr . OR expr OR shift, and go to state 236 AND shift, and go to state 237 $default reduce using rule 95 (limit_clause) State 439 193 update_stmt: UPDATE IGNORE table_name opt_as_alias SET set_clause_list opt_where_clause opt_order_clause . opt_limit_row_count LIMIT shift, and go to state 441 $default reduce using rule 97 (opt_limit_row_count) opt_limit_row_count go to state 511 State 440 255 set_clause: OP_LP column_name_list OP_RP OP_EQUAL . expr OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 141 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 CAST shift, and go to state 146 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 $default reduce using rule 364 (opt_not) expr go to state 512 operand go to state 154 cast_expr go to state 155 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 logic_expr go to state 159 in_expr go to state 160 case_expr go to state 161 between_expr go to state 162 exists_expr go to state 163 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 opt_not go to state 178 State 441 96 opt_limit_row_count: LIMIT . expr OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 141 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 CAST shift, and go to state 146 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 $default reduce using rule 364 (opt_not) expr go to state 513 operand go to state 154 cast_expr go to state 155 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 logic_expr go to state 159 in_expr go to state 160 case_expr go to state 161 between_expr go to state 162 exists_expr go to state 163 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 opt_not go to state 178 State 442 194 update_stmt: UPDATE table_name opt_as_alias SET set_clause_list opt_where_clause opt_order_clause opt_limit_row_count . $default reduce using rule 194 (update_stmt) State 443 122 create_trigger_stmt: CREATE TRIGGER trigger_name trigger_action_time trigger_events ON table_name FOR . EACH ROW trigger_body EACH shift, and go to state 514 State 444 124 create_view_stmt: CREATE OR REPLACE opt_view_algorithm opt_sql_security VIEW view_name opt_column_name_list_p . AS select_stmt opt_check_option AS shift, and go to state 515 State 445 123 create_view_stmt: CREATE opt_view_algorithm opt_sql_security VIEW view_name opt_column_name_list_p AS select_stmt . opt_check_option WITH shift, and go to state 516 $default reduce using rule 249 (opt_check_option) opt_check_option go to state 517 State 446 131 table_option: INSERT_METHOD opt_op_equal LAST . $default reduce using rule 131 (table_option) State 447 130 table_option: INSERT_METHOD opt_op_equal FIRST . $default reduce using rule 130 (table_option) State 448 129 table_option: INSERT_METHOD opt_op_equal NO . $default reduce using rule 129 (table_option) State 449 243 constraint_name: CONSTRAINT . name IDENTIFIER shift, and go to state 28 identifier go to state 518 name go to state 519 State 450 402 table_constraint: constraint_name . PRIMARY KEY OP_LP indexed_column_list OP_RP 403 | constraint_name . UNIQUE OP_LP indexed_column_list OP_RP 404 | constraint_name . CHECK OP_LP expr OP_RP opt_enforced 405 | constraint_name . FOREIGN KEY OP_LP column_name_list OP_RP reference_clause CHECK shift, and go to state 520 UNIQUE shift, and go to state 521 PRIMARY shift, and go to state 522 FOREIGN shift, and go to state 523 State 451 120 create_table_stmt: CREATE opt_temp TABLE opt_if_not_exist table_name OP_LP column_def_list opt_table_constraint_list . OP_RP opt_table_option_list OP_RP shift, and go to state 524 State 452 398 opt_table_constraint_list: table_constraint_list . $default reduce using rule 398 (opt_table_constraint_list) State 453 400 table_constraint_list: table_constraint . 401 | table_constraint . OP_COMMA table_constraint_list OP_COMMA shift, and go to state 525 $default reduce using rule 400 (table_constraint_list) State 454 208 column_def_list: column_def OP_COMMA . column_def_list IDENTIFIER shift, and go to state 28 column_def_list go to state 526 column_def go to state 361 identifier go to state 297 State 455 137 table_option: ROW_FORMAT opt_op_equal COMPACT . $default reduce using rule 137 (table_option) State 456 136 table_option: ROW_FORMAT opt_op_equal REDUNDANT . $default reduce using rule 136 (table_option) State 457 135 table_option: ROW_FORMAT opt_op_equal COMPRESSED . $default reduce using rule 135 (table_option) State 458 133 table_option: ROW_FORMAT opt_op_equal DYNAMIC . $default reduce using rule 133 (table_option) State 459 132 table_option: ROW_FORMAT opt_op_equal DEFAULT . $default reduce using rule 132 (table_option) State 460 134 table_option: ROW_FORMAT opt_op_equal FIXED . $default reduce using rule 134 (table_option) State 461 119 create_table_stmt: CREATE opt_temp TABLE opt_if_not_exist table_name opt_table_option_list opt_ignore_or_replace AS . select_stmt WITH shift, and go to state 1 OP_LP shift, and go to state 4 $default reduce using rule 111 (opt_with_clause) select_stmt go to state 527 select_with_parens go to state 14 select_no_parens go to state 15 opt_with_clause go to state 43 State 462 128 table_option_list: table_option opt_op_comma table_option_list . $default reduce using rule 128 (table_option_list) State 463 121 create_index_stmt: CREATE opt_index_keyword INDEX table_name ON table_name OP_LP indexed_column_list . OP_RP opt_index_option opt_extra_option OP_RP shift, and go to state 528 State 464 190 indexed_column_list: indexed_column . 191 | indexed_column . OP_COMMA indexed_column_list OP_COMMA shift, and go to state 529 $default reduce using rule 190 (indexed_column_list) State 465 192 indexed_column: expr . opt_order_behavior 288 logic_expr: expr . AND expr 289 | expr . OR expr OR shift, and go to state 236 AND shift, and go to state 237 ASC shift, and go to state 345 DESC shift, and go to state 346 $default reduce using rule 108 (opt_order_behavior) opt_order_behavior go to state 530 State 466 383 character_conflicta: NATIONAL CHAR . $default reduce using rule 383 (character_conflicta) State 467 382 character_conflicta: NATIONAL CHARACTER . $default reduce using rule 382 (character_conflicta) State 468 393 numeric_type: DOUBLE PRECISION . $default reduce using rule 393 (numeric_type) State 469 221 constraint_type: UNIQUE . $default reduce using rule 221 (constraint_type) State 470 219 constraint_type: PRIMARY . KEY KEY shift, and go to state 531 State 471 220 constraint_type: NOT . NULL NULL shift, and go to state 532 State 472 209 column_def: identifier type_name opt_column_constraint_list . $default reduce using rule 209 (column_def) State 473 210 opt_column_constraint_list: column_constraint_list . opt_check opt_reference_clause CHECK shift, and go to state 533 $default reduce using rule 218 (opt_check) opt_check go to state 534 State 474 212 column_constraint_list: column_constraint . 213 | column_constraint . column_constraint_list UNIQUE shift, and go to state 469 PRIMARY shift, and go to state 470 NOT shift, and go to state 471 $default reduce using rule 212 (column_constraint_list) column_constraint_list go to state 535 column_constraint go to state 474 constraint_type go to state 475 State 475 214 column_constraint: constraint_type . $default reduce using rule 214 (column_constraint) State 476 370 character_with_length: character_conflicta OP_LP . int_literal OP_RP INTLITERAL shift, and go to state 148 int_literal go to state 536 State 477 196 alter_action: RENAME opt_column column_name TO column_name . $default reduce using rule 196 (alter_action) State 478 288 logic_expr: expr . AND expr 289 | expr . OR expr 311 case_clause: WHEN expr THEN expr . OR shift, and go to state 236 AND shift, and go to state 237 $default reduce using rule 311 (case_clause) State 479 288 logic_expr: expr . AND expr 289 | expr . OR expr 295 case_expr: CASE expr case_list ELSE expr . END OR shift, and go to state 236 END shift, and go to state 537 AND shift, and go to state 237 State 480 296 case_expr: CASE case_list ELSE expr END . $default reduce using rule 296 (case_expr) State 481 288 logic_expr: expr . AND expr 289 | expr . OR expr 318 extract_expr: EXTRACT OP_LP datetime_field FROM expr . OP_RP OR shift, and go to state 236 AND shift, and go to state 237 OP_RP shift, and go to state 538 State 482 274 cast_expr: CAST OP_LP expr AS type_name . OP_RP OP_RP shift, and go to state 539 State 483 87 opt_join_type: CROSS . $default reduce using rule 87 (opt_join_type) State 484 84 opt_join_type: LEFT . 85 | LEFT . OUTER OUTER shift, and go to state 540 $default reduce using rule 84 (opt_join_type) State 485 86 opt_join_type: INNER . $default reduce using rule 86 (opt_join_type) State 486 83 join_op: NATURAL opt_join_type . JOIN JOIN shift, and go to state 541 State 487 68 table_ref: opt_table_prefix OP_LP select_no_parens . OP_RP opt_as_alias opt_on opt_using OP_RP shift, and go to state 542 State 488 69 table_ref: opt_table_prefix OP_LP table_ref . OP_RP opt_as_alias opt_on opt_using 79 opt_table_prefix: table_ref . join_op NATURAL shift, and go to state 407 OP_COMMA shift, and go to state 408 JOIN shift, and go to state 409 OP_RP shift, and go to state 543 join_op go to state 410 State 489 66 table_ref: opt_table_prefix table_name opt_as_alias . opt_index opt_on opt_using INDEXED shift, and go to state 544 NOT shift, and go to state 545 $default reduce using rule 72 (opt_index) opt_index go to state 546 State 490 67 table_ref: opt_table_prefix function_name OP_LP . expr_list OP_RP opt_as_alias opt_on opt_using OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 141 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 CAST shift, and go to state 146 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 $default reduce using rule 364 (opt_not) expr_list go to state 547 expr go to state 153 operand go to state 154 cast_expr go to state 155 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 logic_expr go to state 159 in_expr go to state 160 case_expr go to state 161 between_expr go to state 162 exists_expr go to state 163 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 opt_not go to state 178 State 491 58 opt_group_clause: GROUP BY . expr_list opt_having_clause OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 141 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 CAST shift, and go to state 146 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 $default reduce using rule 364 (opt_not) expr_list go to state 548 expr go to state 153 operand go to state 154 cast_expr go to state 155 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 logic_expr go to state 159 in_expr go to state 160 case_expr go to state 161 between_expr go to state 162 exists_expr go to state 163 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 opt_not go to state 178 State 492 35 window_clause: WINDOW . window_def_list IDENTIFIER shift, and go to state 28 window_def_list go to state 549 window_def go to state 550 window_name go to state 551 identifier go to state 552 State 493 26 select_clause: SELECT opt_all_or_distinct select_target opt_from_clause opt_where_clause opt_group_clause opt_window_clause . $default reduce using rule 26 (select_clause) State 494 33 opt_window_clause: window_clause . $default reduce using rule 33 (opt_window_clause) State 495 298 between_expr: operand NOT BETWEEN operand AND . operand OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 221 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 operand go to state 553 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 case_expr go to state 161 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 State 496 279 unary_expr: operand . ISNULL 280 | operand . IS NULL 281 | operand . IS NOT NULL 285 binary_expr: operand . binary_op operand 286 | operand . LIKE operand 287 | operand . NOT LIKE operand 297 between_expr: operand BETWEEN operand AND operand . 312 comp_expr: operand . OP_EQUAL operand 313 | operand . OP_NOTEQUAL operand 314 | operand . OP_GREATERTHAN operand 315 | operand . OP_LESSTHAN operand 316 | operand . OP_LESSEQ operand 317 | operand . OP_GREATEREQ operand 326 array_index: operand . OP_LBRACKET int_literal OP_RBRACKET OP_NOTEQUAL shift, and go to state 239 OP_GREATERTHAN shift, and go to state 240 OP_LESSTHAN shift, and go to state 241 OP_GREATEREQ shift, and go to state 242 OP_ADD shift, and go to state 243 OP_SUB shift, and go to state 244 OP_MUL shift, and go to state 245 OP_MOD shift, and go to state 246 IS shift, and go to state 247 NOT shift, and go to state 300 OP_XOR shift, and go to state 249 OP_LESSEQ shift, and go to state 251 LIKE shift, and go to state 252 OP_LBRACKET shift, and go to state 253 OP_DIVIDE shift, and go to state 254 ISNULL shift, and go to state 255 OP_EQUAL shift, and go to state 256 $default reduce using rule 297 (between_expr) binary_op go to state 257 State 497 290 in_expr: operand opt_not IN OP_LP select_no_parens . OP_RP OP_RP shift, and go to state 554 State 498 291 in_expr: operand opt_not IN OP_LP expr_list . OP_RP OP_RP shift, and go to state 555 State 499 304 opt_filter_clause: FILTER OP_LP . WHERE expr OP_RP WHERE shift, and go to state 556 State 500 306 opt_over_clause: OVER . OP_LP window OP_RP 307 | OVER . window_name OP_LP shift, and go to state 557 IDENTIFIER shift, and go to state 28 window_name go to state 558 identifier go to state 552 State 501 300 function_expr: function_name OP_LP OP_RP opt_filter_clause opt_over_clause . $default reduce using rule 300 (function_expr) State 502 301 function_expr: function_name OP_LP opt_distinct expr_list OP_RP . opt_filter_clause opt_over_clause FILTER shift, and go to state 425 $default reduce using rule 305 (opt_filter_clause) opt_filter_clause go to state 559 State 503 299 exists_expr: opt_not EXISTS OP_LP select_no_parens OP_RP . $default reduce using rule 299 (exists_expr) State 504 185 opt_on_conflict: ON CONFLICT . opt_conflict_expr DO NOTHING 186 | ON CONFLICT . opt_conflict_expr DO UPDATE set_clause_list where_clause OP_LP shift, and go to state 560 $default reduce using rule 189 (opt_conflict_expr) opt_conflict_expr go to state 561 State 505 184 values_list: OP_LP . expr_list OP_RP OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 141 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 CAST shift, and go to state 146 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 $default reduce using rule 364 (opt_not) expr_list go to state 562 expr go to state 153 operand go to state 154 cast_expr go to state 155 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 logic_expr go to state 159 in_expr go to state 160 case_expr go to state 161 between_expr go to state 162 exists_expr go to state 163 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 opt_not go to state 178 State 506 181 insert_rest: opt_column_name_list_p VALUES super_values_list . $default reduce using rule 181 (insert_rest) State 507 182 super_values_list: values_list . 183 | values_list . OP_COMMA super_values_list OP_COMMA shift, and go to state 563 $default reduce using rule 182 (super_values_list) State 508 180 insert_rest: opt_column_name_list_p DEFAULT VALUES . $default reduce using rule 180 (insert_rest) State 509 101 opt_order_nulls: NULLS LAST . $default reduce using rule 101 (opt_order_nulls) State 510 100 opt_order_nulls: NULLS FIRST . $default reduce using rule 100 (opt_order_nulls) State 511 193 update_stmt: UPDATE IGNORE table_name opt_as_alias SET set_clause_list opt_where_clause opt_order_clause opt_limit_row_count . $default reduce using rule 193 (update_stmt) State 512 255 set_clause: OP_LP column_name_list OP_RP OP_EQUAL expr . 288 logic_expr: expr . AND expr 289 | expr . OR expr OR shift, and go to state 236 AND shift, and go to state 237 $default reduce using rule 255 (set_clause) State 513 96 opt_limit_row_count: LIMIT expr . 288 logic_expr: expr . AND expr 289 | expr . OR expr OR shift, and go to state 236 AND shift, and go to state 237 $default reduce using rule 96 (opt_limit_row_count) State 514 122 create_trigger_stmt: CREATE TRIGGER trigger_name trigger_action_time trigger_events ON table_name FOR EACH . ROW trigger_body ROW shift, and go to state 564 State 515 124 create_view_stmt: CREATE OR REPLACE opt_view_algorithm opt_sql_security VIEW view_name opt_column_name_list_p AS . select_stmt opt_check_option WITH shift, and go to state 1 OP_LP shift, and go to state 4 $default reduce using rule 111 (opt_with_clause) select_stmt go to state 565 select_with_parens go to state 14 select_no_parens go to state 15 opt_with_clause go to state 43 State 516 246 opt_check_option: WITH . CHECK OPTION 247 | WITH . CASCADED CHECK OPTION 248 | WITH . LOCAL CHECK OPTION CHECK shift, and go to state 566 LOCAL shift, and go to state 567 CASCADED shift, and go to state 568 State 517 123 create_view_stmt: CREATE opt_view_algorithm opt_sql_security VIEW view_name opt_column_name_list_p AS select_stmt opt_check_option . $default reduce using rule 123 (create_view_stmt) State 518 365 name: identifier . $default reduce using rule 365 (name) State 519 243 constraint_name: CONSTRAINT name . $default reduce using rule 243 (constraint_name) State 520 404 table_constraint: constraint_name CHECK . OP_LP expr OP_RP opt_enforced OP_LP shift, and go to state 569 State 521 403 table_constraint: constraint_name UNIQUE . OP_LP indexed_column_list OP_RP OP_LP shift, and go to state 570 State 522 402 table_constraint: constraint_name PRIMARY . KEY OP_LP indexed_column_list OP_RP KEY shift, and go to state 571 State 523 405 table_constraint: constraint_name FOREIGN . KEY OP_LP column_name_list OP_RP reference_clause KEY shift, and go to state 572 State 524 120 create_table_stmt: CREATE opt_temp TABLE opt_if_not_exist table_name OP_LP column_def_list opt_table_constraint_list OP_RP . opt_table_option_list INSERT_METHOD shift, and go to state 287 ROW_FORMAT shift, and go to state 289 $default reduce using rule 126 (opt_table_option_list) opt_table_option_list go to state 573 table_option_list go to state 291 table_option go to state 292 State 525 401 table_constraint_list: table_constraint OP_COMMA . table_constraint_list CONSTRAINT shift, and go to state 449 constraint_name go to state 450 table_constraint_list go to state 574 table_constraint go to state 453 State 526 208 column_def_list: column_def OP_COMMA column_def_list . $default reduce using rule 208 (column_def_list) State 527 119 create_table_stmt: CREATE opt_temp TABLE opt_if_not_exist table_name opt_table_option_list opt_ignore_or_replace AS select_stmt . $default reduce using rule 119 (create_table_stmt) State 528 121 create_index_stmt: CREATE opt_index_keyword INDEX table_name ON table_name OP_LP indexed_column_list OP_RP . opt_index_option opt_extra_option USING shift, and go to state 575 $default reduce using rule 152 (opt_index_option) opt_index_option go to state 576 State 529 191 indexed_column_list: indexed_column OP_COMMA . indexed_column_list OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 141 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 CAST shift, and go to state 146 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 $default reduce using rule 364 (opt_not) indexed_column_list go to state 577 indexed_column go to state 464 expr go to state 465 operand go to state 154 cast_expr go to state 155 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 logic_expr go to state 159 in_expr go to state 160 case_expr go to state 161 between_expr go to state 162 exists_expr go to state 163 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 opt_not go to state 178 State 530 192 indexed_column: expr opt_order_behavior . $default reduce using rule 192 (indexed_column) State 531 219 constraint_type: PRIMARY KEY . $default reduce using rule 219 (constraint_type) State 532 220 constraint_type: NOT NULL . $default reduce using rule 220 (constraint_type) State 533 217 opt_check: CHECK . OP_LP expr OP_RP opt_enforced OP_LP shift, and go to state 578 State 534 210 opt_column_constraint_list: column_constraint_list opt_check . opt_reference_clause FOREIGN shift, and go to state 579 REFERENCES reduce using rule 224 (opt_foreign_key) $default reduce using rule 216 (opt_reference_clause) opt_reference_clause go to state 580 opt_foreign_key go to state 581 State 535 213 column_constraint_list: column_constraint column_constraint_list . $default reduce using rule 213 (column_constraint_list) State 536 370 character_with_length: character_conflicta OP_LP int_literal . OP_RP OP_RP shift, and go to state 582 State 537 295 case_expr: CASE expr case_list ELSE expr END . $default reduce using rule 295 (case_expr) State 538 318 extract_expr: EXTRACT OP_LP datetime_field FROM expr OP_RP . $default reduce using rule 318 (extract_expr) State 539 274 cast_expr: CAST OP_LP expr AS type_name OP_RP . $default reduce using rule 274 (cast_expr) State 540 85 opt_join_type: LEFT OUTER . $default reduce using rule 85 (opt_join_type) State 541 83 join_op: NATURAL opt_join_type JOIN . $default reduce using rule 83 (join_op) State 542 68 table_ref: opt_table_prefix OP_LP select_no_parens OP_RP . opt_as_alias opt_on opt_using AS shift, and go to state 66 $default reduce using rule 257 (opt_as_alias) opt_as_alias go to state 583 as_alias go to state 68 State 543 69 table_ref: opt_table_prefix OP_LP table_ref OP_RP . opt_as_alias opt_on opt_using AS shift, and go to state 66 $default reduce using rule 257 (opt_as_alias) opt_as_alias go to state 584 as_alias go to state 68 State 544 70 opt_index: INDEXED . BY column_name BY shift, and go to state 585 State 545 71 opt_index: NOT . INDEXED INDEXED shift, and go to state 586 State 546 66 table_ref: opt_table_prefix table_name opt_as_alias opt_index . opt_on opt_using ON shift, and go to state 587 $default reduce using rule 74 (opt_on) opt_on go to state 588 State 547 67 table_ref: opt_table_prefix function_name OP_LP expr_list . OP_RP opt_as_alias opt_on opt_using OP_RP shift, and go to state 589 State 548 58 opt_group_clause: GROUP BY expr_list . opt_having_clause HAVING shift, and go to state 590 $default reduce using rule 61 (opt_having_clause) opt_having_clause go to state 591 State 549 35 window_clause: WINDOW window_def_list . $default reduce using rule 35 (window_clause) State 550 36 window_def_list: window_def . 37 | window_def . OP_COMMA window_def_list OP_COMMA shift, and go to state 592 $default reduce using rule 36 (window_def_list) State 551 38 window_def: window_name . AS OP_LP window OP_RP AS shift, and go to state 593 State 552 39 window_name: identifier . $default reduce using rule 39 (window_name) State 553 279 unary_expr: operand . ISNULL 280 | operand . IS NULL 281 | operand . IS NOT NULL 285 binary_expr: operand . binary_op operand 286 | operand . LIKE operand 287 | operand . NOT LIKE operand 298 between_expr: operand NOT BETWEEN operand AND operand . 312 comp_expr: operand . OP_EQUAL operand 313 | operand . OP_NOTEQUAL operand 314 | operand . OP_GREATERTHAN operand 315 | operand . OP_LESSTHAN operand 316 | operand . OP_LESSEQ operand 317 | operand . OP_GREATEREQ operand 326 array_index: operand . OP_LBRACKET int_literal OP_RBRACKET OP_NOTEQUAL shift, and go to state 239 OP_GREATERTHAN shift, and go to state 240 OP_LESSTHAN shift, and go to state 241 OP_GREATEREQ shift, and go to state 242 OP_ADD shift, and go to state 243 OP_SUB shift, and go to state 244 OP_MUL shift, and go to state 245 OP_MOD shift, and go to state 246 IS shift, and go to state 247 NOT shift, and go to state 300 OP_XOR shift, and go to state 249 OP_LESSEQ shift, and go to state 251 LIKE shift, and go to state 252 OP_LBRACKET shift, and go to state 253 OP_DIVIDE shift, and go to state 254 ISNULL shift, and go to state 255 OP_EQUAL shift, and go to state 256 $default reduce using rule 298 (between_expr) binary_op go to state 257 State 554 290 in_expr: operand opt_not IN OP_LP select_no_parens OP_RP . $default reduce using rule 290 (in_expr) State 555 291 in_expr: operand opt_not IN OP_LP expr_list OP_RP . $default reduce using rule 291 (in_expr) State 556 304 opt_filter_clause: FILTER OP_LP WHERE . expr OP_RP OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 141 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 CAST shift, and go to state 146 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 $default reduce using rule 364 (opt_not) expr go to state 594 operand go to state 154 cast_expr go to state 155 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 logic_expr go to state 159 in_expr go to state 160 case_expr go to state 161 between_expr go to state 162 exists_expr go to state 163 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 opt_not go to state 178 State 557 306 opt_over_clause: OVER OP_LP . window OP_RP IDENTIFIER shift, and go to state 28 $default reduce using rule 57 (opt_exist_window_name) window go to state 595 opt_exist_window_name go to state 596 identifier go to state 597 State 558 307 opt_over_clause: OVER window_name . $default reduce using rule 307 (opt_over_clause) State 559 301 function_expr: function_name OP_LP opt_distinct expr_list OP_RP opt_filter_clause . opt_over_clause OVER shift, and go to state 500 $default reduce using rule 308 (opt_over_clause) opt_over_clause go to state 598 State 560 188 opt_conflict_expr: OP_LP . indexed_column_list OP_RP where_clause OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 141 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 CAST shift, and go to state 146 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 $default reduce using rule 364 (opt_not) indexed_column_list go to state 599 indexed_column go to state 464 expr go to state 465 operand go to state 154 cast_expr go to state 155 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 logic_expr go to state 159 in_expr go to state 160 case_expr go to state 161 between_expr go to state 162 exists_expr go to state 163 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 opt_not go to state 178 State 561 185 opt_on_conflict: ON CONFLICT opt_conflict_expr . DO NOTHING 186 | ON CONFLICT opt_conflict_expr . DO UPDATE set_clause_list where_clause DO shift, and go to state 600 State 562 184 values_list: OP_LP expr_list . OP_RP OP_RP shift, and go to state 601 State 563 183 super_values_list: values_list OP_COMMA . super_values_list OP_LP shift, and go to state 505 super_values_list go to state 602 values_list go to state 507 State 564 122 create_trigger_stmt: CREATE TRIGGER trigger_name trigger_action_time trigger_events ON table_name FOR EACH ROW . trigger_body WITH shift, and go to state 1 UPDATE shift, and go to state 2 DROP shift, and go to state 3 ALTER shift, and go to state 6 $default reduce using rule 111 (opt_with_clause) drop_stmt go to state 603 alter_stmt go to state 604 opt_with_clause go to state 605 drop_index_stmt go to state 21 drop_table_stmt go to state 22 drop_trigger_stmt go to state 23 drop_view_stmt go to state 24 insert_stmt go to state 606 update_stmt go to state 607 trigger_body go to state 608 State 565 124 create_view_stmt: CREATE OR REPLACE opt_view_algorithm opt_sql_security VIEW view_name opt_column_name_list_p AS select_stmt . opt_check_option WITH shift, and go to state 516 $default reduce using rule 249 (opt_check_option) opt_check_option go to state 609 State 566 246 opt_check_option: WITH CHECK . OPTION OPTION shift, and go to state 610 State 567 248 opt_check_option: WITH LOCAL . CHECK OPTION CHECK shift, and go to state 611 State 568 247 opt_check_option: WITH CASCADED . CHECK OPTION CHECK shift, and go to state 612 State 569 404 table_constraint: constraint_name CHECK OP_LP . expr OP_RP opt_enforced OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 141 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 CAST shift, and go to state 146 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 $default reduce using rule 364 (opt_not) expr go to state 613 operand go to state 154 cast_expr go to state 155 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 logic_expr go to state 159 in_expr go to state 160 case_expr go to state 161 between_expr go to state 162 exists_expr go to state 163 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 opt_not go to state 178 State 570 403 table_constraint: constraint_name UNIQUE OP_LP . indexed_column_list OP_RP OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 141 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 CAST shift, and go to state 146 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 $default reduce using rule 364 (opt_not) indexed_column_list go to state 614 indexed_column go to state 464 expr go to state 465 operand go to state 154 cast_expr go to state 155 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 logic_expr go to state 159 in_expr go to state 160 case_expr go to state 161 between_expr go to state 162 exists_expr go to state 163 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 opt_not go to state 178 State 571 402 table_constraint: constraint_name PRIMARY KEY . OP_LP indexed_column_list OP_RP OP_LP shift, and go to state 615 State 572 405 table_constraint: constraint_name FOREIGN KEY . OP_LP column_name_list OP_RP reference_clause OP_LP shift, and go to state 616 State 573 120 create_table_stmt: CREATE opt_temp TABLE opt_if_not_exist table_name OP_LP column_def_list opt_table_constraint_list OP_RP opt_table_option_list . $default reduce using rule 120 (create_table_stmt) State 574 401 table_constraint_list: table_constraint OP_COMMA table_constraint_list . $default reduce using rule 401 (table_constraint_list) State 575 150 opt_index_option: USING . BTREE 151 | USING . HASH HASH shift, and go to state 617 BTREE shift, and go to state 618 State 576 121 create_index_stmt: CREATE opt_index_keyword INDEX table_name ON table_name OP_LP indexed_column_list OP_RP opt_index_option . opt_extra_option ALGORITHM shift, and go to state 108 LOCK shift, and go to state 109 $default reduce using rule 155 (opt_extra_option) opt_extra_option go to state 619 index_algorithm_option go to state 111 lock_option go to state 112 State 577 191 indexed_column_list: indexed_column OP_COMMA indexed_column_list . $default reduce using rule 191 (indexed_column_list) State 578 217 opt_check: CHECK OP_LP . expr OP_RP opt_enforced OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 141 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 CAST shift, and go to state 146 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 $default reduce using rule 364 (opt_not) expr go to state 620 operand go to state 154 cast_expr go to state 155 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 logic_expr go to state 159 in_expr go to state 160 case_expr go to state 161 between_expr go to state 162 exists_expr go to state 163 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 opt_not go to state 178 State 579 223 opt_foreign_key: FOREIGN . KEY KEY shift, and go to state 621 State 580 210 opt_column_constraint_list: column_constraint_list opt_check opt_reference_clause . $default reduce using rule 210 (opt_column_constraint_list) State 581 215 opt_reference_clause: opt_foreign_key . reference_clause REFERENCES shift, and go to state 622 reference_clause go to state 623 State 582 370 character_with_length: character_conflicta OP_LP int_literal OP_RP . $default reduce using rule 370 (character_with_length) State 583 68 table_ref: opt_table_prefix OP_LP select_no_parens OP_RP opt_as_alias . opt_on opt_using ON shift, and go to state 587 $default reduce using rule 74 (opt_on) opt_on go to state 624 State 584 69 table_ref: opt_table_prefix OP_LP table_ref OP_RP opt_as_alias . opt_on opt_using ON shift, and go to state 587 $default reduce using rule 74 (opt_on) opt_on go to state 625 State 585 70 opt_index: INDEXED BY . column_name IDENTIFIER shift, and go to state 28 identifier go to state 99 column_name go to state 626 State 586 71 opt_index: NOT INDEXED . $default reduce using rule 71 (opt_index) State 587 73 opt_on: ON . expr OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 141 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 CAST shift, and go to state 146 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 $default reduce using rule 364 (opt_not) expr go to state 627 operand go to state 154 cast_expr go to state 155 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 logic_expr go to state 159 in_expr go to state 160 case_expr go to state 161 between_expr go to state 162 exists_expr go to state 163 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 opt_not go to state 178 State 588 66 table_ref: opt_table_prefix table_name opt_as_alias opt_index opt_on . opt_using USING shift, and go to state 628 $default reduce using rule 76 (opt_using) opt_using go to state 629 State 589 67 table_ref: opt_table_prefix function_name OP_LP expr_list OP_RP . opt_as_alias opt_on opt_using AS shift, and go to state 66 $default reduce using rule 257 (opt_as_alias) opt_as_alias go to state 630 as_alias go to state 68 State 590 60 opt_having_clause: HAVING . expr OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 141 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 CAST shift, and go to state 146 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 $default reduce using rule 364 (opt_not) expr go to state 631 operand go to state 154 cast_expr go to state 155 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 logic_expr go to state 159 in_expr go to state 160 case_expr go to state 161 between_expr go to state 162 exists_expr go to state 163 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 opt_not go to state 178 State 591 58 opt_group_clause: GROUP BY expr_list opt_having_clause . $default reduce using rule 58 (opt_group_clause) State 592 37 window_def_list: window_def OP_COMMA . window_def_list IDENTIFIER shift, and go to state 28 window_def_list go to state 632 window_def go to state 550 window_name go to state 551 identifier go to state 552 State 593 38 window_def: window_name AS . OP_LP window OP_RP OP_LP shift, and go to state 633 State 594 288 logic_expr: expr . AND expr 289 | expr . OR expr 304 opt_filter_clause: FILTER OP_LP WHERE expr . OP_RP OR shift, and go to state 236 AND shift, and go to state 237 OP_RP shift, and go to state 634 State 595 306 opt_over_clause: OVER OP_LP window . OP_RP OP_RP shift, and go to state 635 State 596 40 window: opt_exist_window_name . opt_partition opt_order_clause opt_frame_clause PARTITION shift, and go to state 636 $default reduce using rule 42 (opt_partition) opt_partition go to state 637 State 597 56 opt_exist_window_name: identifier . $default reduce using rule 56 (opt_exist_window_name) State 598 301 function_expr: function_name OP_LP opt_distinct expr_list OP_RP opt_filter_clause opt_over_clause . $default reduce using rule 301 (function_expr) State 599 188 opt_conflict_expr: OP_LP indexed_column_list . OP_RP where_clause OP_RP shift, and go to state 638 State 600 185 opt_on_conflict: ON CONFLICT opt_conflict_expr DO . NOTHING 186 | ON CONFLICT opt_conflict_expr DO . UPDATE set_clause_list where_clause UPDATE shift, and go to state 639 NOTHING shift, and go to state 640 State 601 184 values_list: OP_LP expr_list OP_RP . $default reduce using rule 184 (values_list) State 602 183 super_values_list: values_list OP_COMMA super_values_list . $default reduce using rule 183 (super_values_list) State 603 339 trigger_body: drop_stmt . $default reduce using rule 339 (trigger_body) State 604 342 trigger_body: alter_stmt . $default reduce using rule 342 (trigger_body) State 605 178 insert_stmt: opt_with_clause . INSERT INTO table_name opt_as_alias insert_rest opt_on_conflict INSERT shift, and go to state 57 State 606 341 trigger_body: insert_stmt . $default reduce using rule 341 (trigger_body) State 607 340 trigger_body: update_stmt . $default reduce using rule 340 (trigger_body) State 608 122 create_trigger_stmt: CREATE TRIGGER trigger_name trigger_action_time trigger_events ON table_name FOR EACH ROW trigger_body . $default reduce using rule 122 (create_trigger_stmt) State 609 124 create_view_stmt: CREATE OR REPLACE opt_view_algorithm opt_sql_security VIEW view_name opt_column_name_list_p AS select_stmt opt_check_option . $default reduce using rule 124 (create_view_stmt) State 610 246 opt_check_option: WITH CHECK OPTION . $default reduce using rule 246 (opt_check_option) State 611 248 opt_check_option: WITH LOCAL CHECK . OPTION OPTION shift, and go to state 641 State 612 247 opt_check_option: WITH CASCADED CHECK . OPTION OPTION shift, and go to state 642 State 613 288 logic_expr: expr . AND expr 289 | expr . OR expr 404 table_constraint: constraint_name CHECK OP_LP expr . OP_RP opt_enforced OR shift, and go to state 236 AND shift, and go to state 237 OP_RP shift, and go to state 643 State 614 403 table_constraint: constraint_name UNIQUE OP_LP indexed_column_list . OP_RP OP_RP shift, and go to state 644 State 615 402 table_constraint: constraint_name PRIMARY KEY OP_LP . indexed_column_list OP_RP OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 141 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 CAST shift, and go to state 146 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 $default reduce using rule 364 (opt_not) indexed_column_list go to state 645 indexed_column go to state 464 expr go to state 465 operand go to state 154 cast_expr go to state 155 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 logic_expr go to state 159 in_expr go to state 160 case_expr go to state 161 between_expr go to state 162 exists_expr go to state 163 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 opt_not go to state 178 State 616 405 table_constraint: constraint_name FOREIGN KEY OP_LP . column_name_list OP_RP reference_clause IDENTIFIER shift, and go to state 28 column_name_list go to state 646 identifier go to state 99 column_name go to state 100 State 617 151 opt_index_option: USING HASH . $default reduce using rule 151 (opt_index_option) State 618 150 opt_index_option: USING BTREE . $default reduce using rule 150 (opt_index_option) State 619 121 create_index_stmt: CREATE opt_index_keyword INDEX table_name ON table_name OP_LP indexed_column_list OP_RP opt_index_option opt_extra_option . $default reduce using rule 121 (create_index_stmt) State 620 217 opt_check: CHECK OP_LP expr . OP_RP opt_enforced 288 logic_expr: expr . AND expr 289 | expr . OR expr OR shift, and go to state 236 AND shift, and go to state 237 OP_RP shift, and go to state 647 State 621 223 opt_foreign_key: FOREIGN KEY . $default reduce using rule 223 (opt_foreign_key) State 622 222 reference_clause: REFERENCES . table_name opt_column_name_list_p opt_foreign_key_actions opt_constraint_attribute_spec IDENTIFIER shift, and go to state 28 identifier go to state 32 table_name go to state 648 State 623 215 opt_reference_clause: opt_foreign_key reference_clause . $default reduce using rule 215 (opt_reference_clause) State 624 68 table_ref: opt_table_prefix OP_LP select_no_parens OP_RP opt_as_alias opt_on . opt_using USING shift, and go to state 628 $default reduce using rule 76 (opt_using) opt_using go to state 649 State 625 69 table_ref: opt_table_prefix OP_LP table_ref OP_RP opt_as_alias opt_on . opt_using USING shift, and go to state 628 $default reduce using rule 76 (opt_using) opt_using go to state 650 State 626 70 opt_index: INDEXED BY column_name . $default reduce using rule 70 (opt_index) State 627 73 opt_on: ON expr . 288 logic_expr: expr . AND expr 289 | expr . OR expr OR shift, and go to state 236 AND shift, and go to state 237 $default reduce using rule 73 (opt_on) State 628 75 opt_using: USING . OP_LP column_name_list OP_RP OP_LP shift, and go to state 651 State 629 66 table_ref: opt_table_prefix table_name opt_as_alias opt_index opt_on opt_using . $default reduce using rule 66 (table_ref) State 630 67 table_ref: opt_table_prefix function_name OP_LP expr_list OP_RP opt_as_alias . opt_on opt_using ON shift, and go to state 587 $default reduce using rule 74 (opt_on) opt_on go to state 652 State 631 60 opt_having_clause: HAVING expr . 288 logic_expr: expr . AND expr 289 | expr . OR expr OR shift, and go to state 236 AND shift, and go to state 237 $default reduce using rule 60 (opt_having_clause) State 632 37 window_def_list: window_def OP_COMMA window_def_list . $default reduce using rule 37 (window_def_list) State 633 38 window_def: window_name AS OP_LP . window OP_RP IDENTIFIER shift, and go to state 28 $default reduce using rule 57 (opt_exist_window_name) window go to state 653 opt_exist_window_name go to state 596 identifier go to state 597 State 634 304 opt_filter_clause: FILTER OP_LP WHERE expr OP_RP . $default reduce using rule 304 (opt_filter_clause) State 635 306 opt_over_clause: OVER OP_LP window OP_RP . $default reduce using rule 306 (opt_over_clause) State 636 41 opt_partition: PARTITION . BY expr_list BY shift, and go to state 654 State 637 40 window: opt_exist_window_name opt_partition . opt_order_clause opt_frame_clause ORDER shift, and go to state 90 $default reduce using rule 99 (opt_order_clause) opt_order_clause go to state 655 State 638 188 opt_conflict_expr: OP_LP indexed_column_list OP_RP . where_clause WHERE shift, and go to state 270 where_clause go to state 656 State 639 186 opt_on_conflict: ON CONFLICT opt_conflict_expr DO UPDATE . set_clause_list where_clause OP_LP shift, and go to state 189 IDENTIFIER shift, and go to state 28 set_clause_list go to state 657 set_clause go to state 191 identifier go to state 99 column_name go to state 192 State 640 185 opt_on_conflict: ON CONFLICT opt_conflict_expr DO NOTHING . $default reduce using rule 185 (opt_on_conflict) State 641 248 opt_check_option: WITH LOCAL CHECK OPTION . $default reduce using rule 248 (opt_check_option) State 642 247 opt_check_option: WITH CASCADED CHECK OPTION . $default reduce using rule 247 (opt_check_option) State 643 404 table_constraint: constraint_name CHECK OP_LP expr OP_RP . opt_enforced ENFORCED shift, and go to state 658 NOT shift, and go to state 659 $default reduce using rule 408 (opt_enforced) opt_enforced go to state 660 State 644 403 table_constraint: constraint_name UNIQUE OP_LP indexed_column_list OP_RP . $default reduce using rule 403 (table_constraint) State 645 402 table_constraint: constraint_name PRIMARY KEY OP_LP indexed_column_list . OP_RP OP_RP shift, and go to state 661 State 646 405 table_constraint: constraint_name FOREIGN KEY OP_LP column_name_list . OP_RP reference_clause OP_RP shift, and go to state 662 State 647 217 opt_check: CHECK OP_LP expr OP_RP . opt_enforced ENFORCED shift, and go to state 658 NOT shift, and go to state 659 $default reduce using rule 408 (opt_enforced) opt_enforced go to state 663 State 648 222 reference_clause: REFERENCES table_name . opt_column_name_list_p opt_foreign_key_actions opt_constraint_attribute_spec OP_LP shift, and go to state 63 $default reduce using rule 251 (opt_column_name_list_p) opt_column_name_list_p go to state 664 State 649 68 table_ref: opt_table_prefix OP_LP select_no_parens OP_RP opt_as_alias opt_on opt_using . $default reduce using rule 68 (table_ref) State 650 69 table_ref: opt_table_prefix OP_LP table_ref OP_RP opt_as_alias opt_on opt_using . $default reduce using rule 69 (table_ref) State 651 75 opt_using: USING OP_LP . column_name_list OP_RP IDENTIFIER shift, and go to state 28 column_name_list go to state 665 identifier go to state 99 column_name go to state 100 State 652 67 table_ref: opt_table_prefix function_name OP_LP expr_list OP_RP opt_as_alias opt_on . opt_using USING shift, and go to state 628 $default reduce using rule 76 (opt_using) opt_using go to state 666 State 653 38 window_def: window_name AS OP_LP window . OP_RP OP_RP shift, and go to state 667 State 654 41 opt_partition: PARTITION BY . expr_list OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 141 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 CAST shift, and go to state 146 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 $default reduce using rule 364 (opt_not) expr_list go to state 668 expr go to state 153 operand go to state 154 cast_expr go to state 155 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 logic_expr go to state 159 in_expr go to state 160 case_expr go to state 161 between_expr go to state 162 exists_expr go to state 163 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 opt_not go to state 178 State 655 40 window: opt_exist_window_name opt_partition opt_order_clause . opt_frame_clause RANGE shift, and go to state 669 ROWS shift, and go to state 670 GROUPS shift, and go to state 671 $default reduce using rule 45 (opt_frame_clause) opt_frame_clause go to state 672 range_or_rows go to state 673 State 656 188 opt_conflict_expr: OP_LP indexed_column_list OP_RP where_clause . $default reduce using rule 188 (opt_conflict_expr) State 657 186 opt_on_conflict: ON CONFLICT opt_conflict_expr DO UPDATE set_clause_list . where_clause WHERE shift, and go to state 270 where_clause go to state 674 State 658 406 opt_enforced: ENFORCED . $default reduce using rule 406 (opt_enforced) State 659 407 opt_enforced: NOT . ENFORCED ENFORCED shift, and go to state 675 State 660 404 table_constraint: constraint_name CHECK OP_LP expr OP_RP opt_enforced . $default reduce using rule 404 (table_constraint) State 661 402 table_constraint: constraint_name PRIMARY KEY OP_LP indexed_column_list OP_RP . $default reduce using rule 402 (table_constraint) State 662 405 table_constraint: constraint_name FOREIGN KEY OP_LP column_name_list OP_RP . reference_clause REFERENCES shift, and go to state 622 reference_clause go to state 676 State 663 217 opt_check: CHECK OP_LP expr OP_RP opt_enforced . $default reduce using rule 217 (opt_check) State 664 222 reference_clause: REFERENCES table_name opt_column_name_list_p . opt_foreign_key_actions opt_constraint_attribute_spec ON shift, and go to state 677 MATCH shift, and go to state 678 $default reduce using rule 226 (opt_foreign_key_actions) opt_foreign_key_actions go to state 679 foreign_key_actions go to state 680 State 665 75 opt_using: USING OP_LP column_name_list . OP_RP OP_RP shift, and go to state 681 State 666 67 table_ref: opt_table_prefix function_name OP_LP expr_list OP_RP opt_as_alias opt_on opt_using . $default reduce using rule 67 (table_ref) State 667 38 window_def: window_name AS OP_LP window OP_RP . $default reduce using rule 38 (window_def) State 668 41 opt_partition: PARTITION BY expr_list . $default reduce using rule 41 (opt_partition) State 669 46 range_or_rows: RANGE . $default reduce using rule 46 (range_or_rows) State 670 47 range_or_rows: ROWS . $default reduce using rule 47 (range_or_rows) State 671 48 range_or_rows: GROUPS . $default reduce using rule 48 (range_or_rows) State 672 40 window: opt_exist_window_name opt_partition opt_order_clause opt_frame_clause . $default reduce using rule 40 (window) State 673 43 opt_frame_clause: range_or_rows . frame_bound_start 44 | range_or_rows . BETWEEN frame_bound_start AND frame_bound_end UNBOUNDED shift, and go to state 682 CURRENT shift, and go to state 683 OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 141 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 BETWEEN shift, and go to state 684 OP_LP shift, and go to state 145 CAST shift, and go to state 146 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 $default reduce using rule 364 (opt_not) frame_bound_start go to state 685 frame_bound go to state 686 expr go to state 687 operand go to state 154 cast_expr go to state 155 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 logic_expr go to state 159 in_expr go to state 160 case_expr go to state 161 between_expr go to state 162 exists_expr go to state 163 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 opt_not go to state 178 State 674 186 opt_on_conflict: ON CONFLICT opt_conflict_expr DO UPDATE set_clause_list where_clause . $default reduce using rule 186 (opt_on_conflict) State 675 407 opt_enforced: NOT ENFORCED . $default reduce using rule 407 (opt_enforced) State 676 405 table_constraint: constraint_name FOREIGN KEY OP_LP column_name_list OP_RP reference_clause . $default reduce using rule 405 (table_constraint) State 677 230 foreign_key_actions: ON . UPDATE key_actions 231 | ON . DELETE key_actions UPDATE shift, and go to state 688 DELETE shift, and go to state 689 State 678 227 foreign_key_actions: MATCH . FULL 228 | MATCH . PARTIAL 229 | MATCH . SIMPLE SIMPLE shift, and go to state 690 FULL shift, and go to state 691 PARTIAL shift, and go to state 692 State 679 222 reference_clause: REFERENCES table_name opt_column_name_list_p opt_foreign_key_actions . opt_constraint_attribute_spec NOT shift, and go to state 693 DEFFERRABLE shift, and go to state 694 $default reduce using rule 239 (opt_constraint_attribute_spec) opt_constraint_attribute_spec go to state 695 State 680 225 opt_foreign_key_actions: foreign_key_actions . $default reduce using rule 225 (opt_foreign_key_actions) State 681 75 opt_using: USING OP_LP column_name_list OP_RP . $default reduce using rule 75 (opt_using) State 682 50 frame_bound_start: UNBOUNDED . PRECEDING PRECEDING shift, and go to state 696 State 683 55 frame_bound: CURRENT . ROW ROW shift, and go to state 697 State 684 44 opt_frame_clause: range_or_rows BETWEEN . frame_bound_start AND frame_bound_end UNBOUNDED shift, and go to state 682 CURRENT shift, and go to state 683 OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 141 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 CAST shift, and go to state 146 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 $default reduce using rule 364 (opt_not) frame_bound_start go to state 698 frame_bound go to state 686 expr go to state 687 operand go to state 154 cast_expr go to state 155 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 logic_expr go to state 159 in_expr go to state 160 case_expr go to state 161 between_expr go to state 162 exists_expr go to state 163 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 opt_not go to state 178 State 685 43 opt_frame_clause: range_or_rows frame_bound_start . $default reduce using rule 43 (opt_frame_clause) State 686 49 frame_bound_start: frame_bound . $default reduce using rule 49 (frame_bound_start) State 687 53 frame_bound: expr . PRECEDING 54 | expr . FOLLOWING 288 logic_expr: expr . AND expr 289 | expr . OR expr PRECEDING shift, and go to state 699 OR shift, and go to state 236 FOLLOWING shift, and go to state 700 AND shift, and go to state 237 State 688 230 foreign_key_actions: ON UPDATE . key_actions RESTRICT shift, and go to state 701 SET shift, and go to state 702 NO shift, and go to state 703 CASCADE shift, and go to state 704 key_actions go to state 705 State 689 231 foreign_key_actions: ON DELETE . key_actions RESTRICT shift, and go to state 701 SET shift, and go to state 702 NO shift, and go to state 703 CASCADE shift, and go to state 704 key_actions go to state 706 State 690 229 foreign_key_actions: MATCH SIMPLE . $default reduce using rule 229 (foreign_key_actions) State 691 227 foreign_key_actions: MATCH FULL . $default reduce using rule 227 (foreign_key_actions) State 692 228 foreign_key_actions: MATCH PARTIAL . $default reduce using rule 228 (foreign_key_actions) State 693 238 opt_constraint_attribute_spec: NOT . DEFFERRABLE opt_initial_time DEFFERRABLE shift, and go to state 707 State 694 237 opt_constraint_attribute_spec: DEFFERRABLE . opt_initial_time INITIALLY shift, and go to state 708 $default reduce using rule 242 (opt_initial_time) opt_initial_time go to state 709 State 695 222 reference_clause: REFERENCES table_name opt_column_name_list_p opt_foreign_key_actions opt_constraint_attribute_spec . $default reduce using rule 222 (reference_clause) State 696 50 frame_bound_start: UNBOUNDED PRECEDING . $default reduce using rule 50 (frame_bound_start) State 697 55 frame_bound: CURRENT ROW . $default reduce using rule 55 (frame_bound) State 698 44 opt_frame_clause: range_or_rows BETWEEN frame_bound_start . AND frame_bound_end AND shift, and go to state 710 State 699 53 frame_bound: expr PRECEDING . $default reduce using rule 53 (frame_bound) State 700 54 frame_bound: expr FOLLOWING . $default reduce using rule 54 (frame_bound) State 701 235 key_actions: RESTRICT . $default reduce using rule 235 (key_actions) State 702 232 key_actions: SET . NULL 233 | SET . DEFAULT DEFAULT shift, and go to state 711 NULL shift, and go to state 712 State 703 236 key_actions: NO . ACTION ACTION shift, and go to state 713 State 704 234 key_actions: CASCADE . $default reduce using rule 234 (key_actions) State 705 230 foreign_key_actions: ON UPDATE key_actions . $default reduce using rule 230 (foreign_key_actions) State 706 231 foreign_key_actions: ON DELETE key_actions . $default reduce using rule 231 (foreign_key_actions) State 707 238 opt_constraint_attribute_spec: NOT DEFFERRABLE . opt_initial_time INITIALLY shift, and go to state 708 $default reduce using rule 242 (opt_initial_time) opt_initial_time go to state 714 State 708 240 opt_initial_time: INITIALLY . DEFERRED 241 | INITIALLY . IMMEDIATE DEFERRED shift, and go to state 715 IMMEDIATE shift, and go to state 716 State 709 237 opt_constraint_attribute_spec: DEFFERRABLE opt_initial_time . $default reduce using rule 237 (opt_constraint_attribute_spec) State 710 44 opt_frame_clause: range_or_rows BETWEEN frame_bound_start AND . frame_bound_end UNBOUNDED shift, and go to state 717 CURRENT shift, and go to state 683 OP_SUB shift, and go to state 137 FALSE shift, and go to state 138 OP_MUL shift, and go to state 139 TRUE shift, and go to state 140 NOT shift, and go to state 141 CASE shift, and go to state 142 ARRAY shift, and go to state 143 EXTRACT shift, and go to state 144 OP_LP shift, and go to state 145 CAST shift, and go to state 146 NULL shift, and go to state 147 INTLITERAL shift, and go to state 148 FLOATLITERAL shift, and go to state 149 IDENTIFIER shift, and go to state 28 STRINGLITERAL shift, and go to state 150 $default reduce using rule 364 (opt_not) frame_bound_end go to state 718 frame_bound go to state 719 expr go to state 687 operand go to state 154 cast_expr go to state 155 scalar_expr go to state 156 unary_expr go to state 157 binary_expr go to state 158 logic_expr go to state 159 in_expr go to state 160 case_expr go to state 161 between_expr go to state 162 exists_expr go to state 163 function_expr go to state 164 comp_expr go to state 165 extract_expr go to state 166 array_expr go to state 167 array_index go to state 168 literal go to state 169 string_literal go to state 170 bool_literal go to state 171 num_literal go to state 172 int_literal go to state 173 float_literal go to state 174 identifier go to state 175 column_name go to state 176 function_name go to state 177 opt_not go to state 178 State 711 233 key_actions: SET DEFAULT . $default reduce using rule 233 (key_actions) State 712 232 key_actions: SET NULL . $default reduce using rule 232 (key_actions) State 713 236 key_actions: NO ACTION . $default reduce using rule 236 (key_actions) State 714 238 opt_constraint_attribute_spec: NOT DEFFERRABLE opt_initial_time . $default reduce using rule 238 (opt_constraint_attribute_spec) State 715 240 opt_initial_time: INITIALLY DEFERRED . $default reduce using rule 240 (opt_initial_time) State 716 241 opt_initial_time: INITIALLY IMMEDIATE . $default reduce using rule 241 (opt_initial_time) State 717 52 frame_bound_end: UNBOUNDED . FOLLOWING FOLLOWING shift, and go to state 720 State 718 44 opt_frame_clause: range_or_rows BETWEEN frame_bound_start AND frame_bound_end . $default reduce using rule 44 (opt_frame_clause) State 719 51 frame_bound_end: frame_bound . $default reduce using rule 51 (frame_bound_end) State 720 52 frame_bound_end: UNBOUNDED FOLLOWING . $default reduce using rule 52 (frame_bound_end) ================================================ FILE: srcs/internal/mysql/parser/flex.l ================================================ %{ #include "bison_parser.h" #include #include #include #include #define TOKEN(name) { return SQL_##name; } static thread_local std::stringstream strbuf; %} %option reentrant %option bison-bridge %option never-interactive %option batch %option noyywrap %option nounput %option warn %option case-insensitive %option bison-locations %option header-file="flex_lexer.h" %option outfile="flex_lexer.cpp" %option prefix="ff_" %s COMMENT %x singlequotedstring %% "!=" TOKEN(OP_NOTEQUAL) ENABLE TOKEN(ENABLE) SIMPLE TOKEN(SIMPLE) TEXT TOKEN(TEXT) OVER TOKEN(OVER) YEAR TOKEN(YEAR) INSERT_METHOD TOKEN(INSERT_METHOD) ";" TOKEN(OP_SEMI) BIGINT TOKEN(BIGINT) LIMIT TOKEN(LIMIT) ">" TOKEN(OP_GREATERTHAN) WITH TOKEN(WITH) ORDER TOKEN(ORDER) OPTION TOKEN(OPTION) LAST TOKEN(LAST) UNBOUNDED TOKEN(UNBOUNDED) PRECEDING TOKEN(PRECEDING) EXCEPT TOKEN(EXCEPT) NUMERIC TOKEN(NUMERIC) "<" TOKEN(OP_LESSTHAN) ACTION TOKEN(ACTION) BEFORE TOKEN(BEFORE) ">=" TOKEN(OP_GREATEREQ) CHECK TOKEN(CHECK) COMPACT TOKEN(COMPACT) FULL TOKEN(FULL) NATURAL TOKEN(NATURAL) BINARY TOKEN(BINARY) NATIONAL TOKEN(NATIONAL) ENUM TOKEN(ENUM) REDUNDANT TOKEN(REDUNDANT) "+" TOKEN(OP_ADD) CURRENT TOKEN(CURRENT) MERGE TOKEN(MERGE) TRIGGER TOKEN(TRIGGER) COMPRESSED TOKEN(COMPRESSED) "-" TOKEN(OP_SUB) FALSE TOKEN(FALSE) UNIQUE TOKEN(UNIQUE) WHERE TOKEN(WHERE) MINUTE TOKEN(MINUTE) FIRST TOKEN(FIRST) ON TOKEN(ON) PARTIAL TOKEN(PARTIAL) DOUBLE TOKEN(DOUBLE) AFTER TOKEN(AFTER) PRIMARY TOKEN(PRIMARY) MONTH TOKEN(MONTH) DEFERRED TOKEN(DEFERRED) VALUES TOKEN(VALUES) LONGTEXT TOKEN(LONGTEXT) SQL TOKEN(SQL) SHARED TOKEN(SHARED) VALIDATION TOKEN(VALIDATION) OR TOKEN(OR) VIEW TOKEN(VIEW) INDEX TOKEN(INDEX) GROUP TOKEN(GROUP) "*" TOKEN(OP_MUL) INPLACE TOKEN(INPLACE) FOREIGN TOKEN(FOREIGN) RESTRICT TOKEN(RESTRICT) SPATIAL TOKEN(SPATIAL) FOLLOWING TOKEN(FOLLOWING) DEC TOKEN(DEC) SELECT TOKEN(SELECT) NONE TOKEN(NONE) DISTINCT TOKEN(DISTINCT) TRUE TOKEN(TRUE) DYNAMIC TOKEN(DYNAMIC) BY TOKEN(BY) "%" TOKEN(OP_MOD) INTEGER TOKEN(INTEGER) SECURITY TOKEN(SECURITY) IS TOKEN(IS) DEFINER TOKEN(DEFINER) ROW TOKEN(ROW) ENFORCED TOKEN(ENFORCED) END TOKEN(END) RECURSIVE TOKEN(RECURSIVE) FOR TOKEN(FOR) TEMPTABLE TOKEN(TEMPTABLE) UNION TOKEN(UNION) NULLS TOKEN(NULLS) UPDATE TOKEN(UPDATE) ELSE TOKEN(ELSE) RANGE TOKEN(RANGE) SET TOKEN(SET) INVOKER TOKEN(INVOKER) OFFSET TOKEN(OFFSET) INDEXED TOKEN(INDEXED) FORCE TOKEN(FORCE) NCHAR TOKEN(NCHAR) AND TOKEN(AND) INITIALLY TOKEN(INITIALLY) PRECISION TOKEN(PRECISION) FILTER TOKEN(FILTER) WITHOUT TOKEN(WITHOUT) NOT TOKEN(NOT) DELETE TOKEN(DELETE) DEFFERRABLE TOKEN(DEFFERRABLE) REAL TOKEN(REAL) THEN TOKEN(THEN) UNDEFINED TOKEN(UNDEFINED) DEFAULT TOKEN(DEFAULT) CROSS TOKEN(CROSS) CHAR TOKEN(CHAR) REFERENCES TOKEN(REFERENCES) "^" TOKEN(OP_XOR) CASE TOKEN(CASE) FIXED TOKEN(FIXED) HOUR TOKEN(HOUR) NO TOKEN(NO) COLUMN TOKEN(COLUMN) LOCAL TOKEN(LOCAL) DROP TOKEN(DROP) REPLACE TOKEN(REPLACE) ASC TOKEN(ASC) "," TOKEN(OP_COMMA) DISABLE TOKEN(DISABLE) TABLE TOKEN(TABLE) ARRAY TOKEN(ARRAY) IF TOKEN(IF) EXTRACT TOKEN(EXTRACT) LEFT TOKEN(LEFT) FULLTEXT TOKEN(FULLTEXT) HASH TOKEN(HASH) ALGORITHM TOKEN(ALGORITHM) LOCK TOKEN(LOCK) DECIMAL TOKEN(DECIMAL) PARTITION TOKEN(PARTITION) CASCADE TOKEN(CASCADE) ADD TOKEN(ADD) BETWEEN TOKEN(BETWEEN) "<=" TOKEN(OP_LESSEQ) MATCH TOKEN(MATCH) ALL TOKEN(ALL) ROWS TOKEN(ROWS) JOIN TOKEN(JOIN) LIKE TOKEN(LIKE) ")" TOKEN(OP_RP) IGNORE TOKEN(IGNORE) INT TOKEN(INT) MEDIUMTEXT TOKEN(MEDIUMTEXT) BOOLEAN TOKEN(BOOLEAN) KEY TOKEN(KEY) EACH TOKEN(EACH) USING TOKEN(USING) RENAME TOKEN(RENAME) DO TOKEN(DO) "(" TOKEN(OP_LP) CHARACTER TOKEN(CHARACTER) UMINUS TOKEN(UMINUS) CAST TOKEN(CAST) GROUPS TOKEN(GROUPS) OUTER TOKEN(OUTER) NULL TOKEN(NULL) SMALLINT TOKEN(SMALLINT) EXCLUSIVE TOKEN(EXCLUSIVE) TEMPORARY TOKEN(TEMPORARY) CONSTRAINT TOKEN(CONSTRAINT) CREATE TOKEN(CREATE) "[" TOKEN(OP_LBRACKET) WHEN TOKEN(WHEN) IMMEDIATE TOKEN(IMMEDIATE) TO TOKEN(TO) BTREE TOKEN(BTREE) DAY TOKEN(DAY) CONFLICT TOKEN(CONFLICT) ROW_FORMAT TOKEN(ROW_FORMAT) "]" TOKEN(OP_RBRACKET) EXISTS TOKEN(EXISTS) INSERT TOKEN(INSERT) KEYS TOKEN(KEYS) INTO TOKEN(INTO) "/" TOKEN(OP_DIVIDE) CASCADED TOKEN(CASCADED) ISNULL TOKEN(ISNULL) AS TOKEN(AS) INNER TOKEN(INNER) INTERSECT TOKEN(INTERSECT) IN TOKEN(IN) "=" TOKEN(OP_EQUAL) VARCHAR TOKEN(VARCHAR) COPY TOKEN(COPY) ALTER TOKEN(ALTER) DESC TOKEN(DESC) FROM TOKEN(FROM) TINYTEXT TOKEN(TINYTEXT) FLOAT TOKEN(FLOAT) SECOND TOKEN(SECOND) WINDOW TOKEN(WINDOW) NOTHING TOKEN(NOTHING) HAVING TOKEN(HAVING) -?[0-9]+"."[0-9]* | "."[0-9]* { yylval->fval = atof(yytext); return SQL_FLOATLITERAL; } -?[0-9]+ { yylval->ival = atol(yytext); return SQL_INTLITERAL; } \"[^\"\n]+\" { std::string s(yytext); yylval->sval = strdup(s.substr(1, s.size()-1).c_str()); return SQL_STRINGLITERAL; } [A-Za-z][A-Za-z0-9_]* { yylval->sval = strdup(yytext); return SQL_IDENTIFIER; } \' { BEGIN singlequotedstring; strbuf = std::stringstream{}; strbuf << '\''; } \'\' { strbuf << '\''; } [^']* { strbuf << yytext; } \' { BEGIN 0; strbuf << '\''; yylval->sval = strdup(strbuf.str().c_str()); return SQL_STRINGLITERAL; } <> { return 0; } [ \t\n]+ { } . { return 0; } %% ================================================ FILE: srcs/internal/mysql/parser/flex_lexer.cpp ================================================ #line 2 "flex_lexer.cpp" #line 4 "flex_lexer.cpp" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 6 #define YY_FLEX_SUBMINOR_VERSION 4 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif #ifdef yy_create_buffer #define ff__create_buffer_ALREADY_DEFINED #else #define yy_create_buffer ff__create_buffer #endif #ifdef yy_delete_buffer #define ff__delete_buffer_ALREADY_DEFINED #else #define yy_delete_buffer ff__delete_buffer #endif #ifdef yy_scan_buffer #define ff__scan_buffer_ALREADY_DEFINED #else #define yy_scan_buffer ff__scan_buffer #endif #ifdef yy_scan_string #define ff__scan_string_ALREADY_DEFINED #else #define yy_scan_string ff__scan_string #endif #ifdef yy_scan_bytes #define ff__scan_bytes_ALREADY_DEFINED #else #define yy_scan_bytes ff__scan_bytes #endif #ifdef yy_init_buffer #define ff__init_buffer_ALREADY_DEFINED #else #define yy_init_buffer ff__init_buffer #endif #ifdef yy_flush_buffer #define ff__flush_buffer_ALREADY_DEFINED #else #define yy_flush_buffer ff__flush_buffer #endif #ifdef yy_load_buffer_state #define ff__load_buffer_state_ALREADY_DEFINED #else #define yy_load_buffer_state ff__load_buffer_state #endif #ifdef yy_switch_to_buffer #define ff__switch_to_buffer_ALREADY_DEFINED #else #define yy_switch_to_buffer ff__switch_to_buffer #endif #ifdef yypush_buffer_state #define ff_push_buffer_state_ALREADY_DEFINED #else #define yypush_buffer_state ff_push_buffer_state #endif #ifdef yypop_buffer_state #define ff_pop_buffer_state_ALREADY_DEFINED #else #define yypop_buffer_state ff_pop_buffer_state #endif #ifdef yyensure_buffer_stack #define ff_ensure_buffer_stack_ALREADY_DEFINED #else #define yyensure_buffer_stack ff_ensure_buffer_stack #endif #ifdef yylex #define ff_lex_ALREADY_DEFINED #else #define yylex ff_lex #endif #ifdef yyrestart #define ff_restart_ALREADY_DEFINED #else #define yyrestart ff_restart #endif #ifdef yylex_init #define ff_lex_init_ALREADY_DEFINED #else #define yylex_init ff_lex_init #endif #ifdef yylex_init_extra #define ff_lex_init_extra_ALREADY_DEFINED #else #define yylex_init_extra ff_lex_init_extra #endif #ifdef yylex_destroy #define ff_lex_destroy_ALREADY_DEFINED #else #define yylex_destroy ff_lex_destroy #endif #ifdef yyget_debug #define ff_get_debug_ALREADY_DEFINED #else #define yyget_debug ff_get_debug #endif #ifdef yyset_debug #define ff_set_debug_ALREADY_DEFINED #else #define yyset_debug ff_set_debug #endif #ifdef yyget_extra #define ff_get_extra_ALREADY_DEFINED #else #define yyget_extra ff_get_extra #endif #ifdef yyset_extra #define ff_set_extra_ALREADY_DEFINED #else #define yyset_extra ff_set_extra #endif #ifdef yyget_in #define ff_get_in_ALREADY_DEFINED #else #define yyget_in ff_get_in #endif #ifdef yyset_in #define ff_set_in_ALREADY_DEFINED #else #define yyset_in ff_set_in #endif #ifdef yyget_out #define ff_get_out_ALREADY_DEFINED #else #define yyget_out ff_get_out #endif #ifdef yyset_out #define ff_set_out_ALREADY_DEFINED #else #define yyset_out ff_set_out #endif #ifdef yyget_leng #define ff_get_leng_ALREADY_DEFINED #else #define yyget_leng ff_get_leng #endif #ifdef yyget_text #define ff_get_text_ALREADY_DEFINED #else #define yyget_text ff_get_text #endif #ifdef yyget_lineno #define ff_get_lineno_ALREADY_DEFINED #else #define yyget_lineno ff_get_lineno #endif #ifdef yyset_lineno #define ff_set_lineno_ALREADY_DEFINED #else #define yyset_lineno ff_set_lineno #endif #ifdef yyget_column #define ff_get_column_ALREADY_DEFINED #else #define yyget_column ff_get_column #endif #ifdef yyset_column #define ff_set_column_ALREADY_DEFINED #else #define yyset_column ff_set_column #endif #ifdef yywrap #define ff_wrap_ALREADY_DEFINED #else #define yywrap ff_wrap #endif #ifdef yyget_lval #define ff_get_lval_ALREADY_DEFINED #else #define yyget_lval ff_get_lval #endif #ifdef yyset_lval #define ff_set_lval_ALREADY_DEFINED #else #define yyset_lval ff_set_lval #endif #ifdef yyget_lloc #define ff_get_lloc_ALREADY_DEFINED #else #define yyget_lloc ff_get_lloc #endif #ifdef yyset_lloc #define ff_set_lloc_ALREADY_DEFINED #else #define yyset_lloc ff_set_lloc #endif #ifdef yyalloc #define ff_alloc_ALREADY_DEFINED #else #define yyalloc ff_alloc #endif #ifdef yyrealloc #define ff_realloc_ALREADY_DEFINED #else #define yyrealloc ff_realloc #endif #ifdef yyfree #define ff_free_ALREADY_DEFINED #else #define yyfree ff_free #endif /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ #include #include #include #include /* end standard C headers. */ /* flex integer type definitions */ #ifndef FLEXINT_H #define FLEXINT_H /* C99 systems have . Non-C99 systems may or may not. */ #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. */ #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS 1 #endif #include typedef int8_t flex_int8_t; typedef uint8_t flex_uint8_t; typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; /* Limits of integral types. */ #ifndef INT8_MIN #define INT8_MIN (-128) #endif #ifndef INT16_MIN #define INT16_MIN (-32767 - 1) #endif #ifndef INT32_MIN #define INT32_MIN (-2147483647 - 1) #endif #ifndef INT8_MAX #define INT8_MAX (127) #endif #ifndef INT16_MAX #define INT16_MAX (32767) #endif #ifndef INT32_MAX #define INT32_MAX (2147483647) #endif #ifndef UINT8_MAX #define UINT8_MAX (255U) #endif #ifndef UINT16_MAX #define UINT16_MAX (65535U) #endif #ifndef UINT32_MAX #define UINT32_MAX (4294967295U) #endif #ifndef SIZE_MAX #define SIZE_MAX (~(size_t)0) #endif #endif /* ! C99 */ #endif /* ! FLEXINT_H */ /* begin standard C++ headers. */ /* TODO: this is always defined, so inline it */ #define yyconst const #if defined(__GNUC__) && __GNUC__ >= 3 #define yynoreturn __attribute__((__noreturn__)) #else #define yynoreturn #endif /* Returned upon end-of-file. */ #define YY_NULL 0 /* Promotes a possibly negative, possibly signed char to an * integer in range [0..255] for use as an array index. */ #define YY_SC_TO_UI(c) ((YY_CHAR)(c)) /* An opaque pointer. */ #ifndef YY_TYPEDEF_YY_SCANNER_T #define YY_TYPEDEF_YY_SCANNER_T typedef void *yyscan_t; #endif /* For convenience, these vars (plus the bison vars far below) are macros in the reentrant scanner. */ #define yyin yyg->yyin_r #define yyout yyg->yyout_r #define yyextra yyg->yyextra_r #define yyleng yyg->yyleng_r #define yytext yyg->yytext_r #define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno) #define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column) #define yy_flex_debug yyg->yy_flex_debug_r /* Enter a start condition. This macro really ought to take a parameter, * but we do it the disgusting crufty way forced on us by the ()-less * definition of BEGIN. */ #define BEGIN yyg->yy_start = 1 + 2 * /* Translate the current start state into a value that can be later handed * to BEGIN to return to the state. The YYSTATE alias is for lex * compatibility. */ #define YY_START ((yyg->yy_start - 1) / 2) #define YYSTATE YY_START /* Action number for EOF rule of a given start state. */ #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) /* Special action meaning "start processing a new file". */ #define YY_NEW_FILE yyrestart(yyin, yyscanner) #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ #ifndef YY_BUF_SIZE #ifdef __ia64__ /* On IA-64, the buffer size is 16k, not 8k. * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. * Ditto for the __ia64__ case accordingly. */ #define YY_BUF_SIZE 32768 #else #define YY_BUF_SIZE 16384 #endif /* __ia64__ */ #endif /* The state buf must be large enough to hold one state per character in the * main buffer. */ #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef size_t yy_size_t; #endif #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 #define YY_LESS_LINENO(n) #define YY_LINENO_REWIND_TO(ptr) /* Return all but the first "n" matched characters back to the input stream. */ #define yyless(n) \ do { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg); \ *yy_cp = yyg->yy_hold_char; \ YY_RESTORE_YY_MORE_OFFSET \ yyg->yy_c_buf_p = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ YY_DO_BEFORE_ACTION; /* set up yytext again */ \ } while (0) #define unput(c) yyunput(c, yyg->yytext_ptr, yyscanner) #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct yy_buffer_state { FILE *yy_input_file; char *yy_ch_buf; /* input buffer */ char *yy_buf_pos; /* current position in input buffer */ /* Size of input buffer in bytes, not including room for EOB * characters. */ int yy_buf_size; /* Number of characters read into yy_ch_buf, not including EOB * characters. */ int yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to * delete it. */ int yy_is_our_buffer; /* Whether this is an "interactive" input source; if so, and * if we're using stdio for input, then we want to use getc() * instead of fread(), to make sure we stop fetching input after * each newline. */ int yy_is_interactive; /* Whether we're considered to be at the beginning of a line. * If so, '^' rules will be active on the next match, otherwise * not. */ int yy_at_bol; int yy_bs_lineno; /**< The line count. */ int yy_bs_column; /**< The column count. */ /* Whether to try to fill the input buffer when we reach the * end of it. */ int yy_fill_buffer; int yy_buffer_status; #define YY_BUFFER_NEW 0 #define YY_BUFFER_NORMAL 1 /* When an EOF's been seen but there's still some text to process * then we mark the buffer as YY_EOF_PENDING, to indicate that we * shouldn't try reading from the input source any more. We might * still have a bunch of tokens to match, though, because of * possible backing-up. * * When we actually see the EOF, we change the status to "new" * (via yyrestart()), so that the user can continue scanning by * just pointing yyin at a new input file. */ #define YY_BUFFER_EOF_PENDING 2 }; #endif /* !YY_STRUCT_YY_BUFFER_STATE */ /* We provide macros for accessing buffer states in case in the * future we want to put the buffer states in a more general * "scanner state". * * Returns the top of the stack, or NULL. */ #define YY_CURRENT_BUFFER \ (yyg->yy_buffer_stack ? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] : NULL) /* Same as previous macro, but useful when we know that the buffer stack is not * NULL or when we need an lvalue. For internal use only. */ #define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] void yyrestart(FILE *input_file, yyscan_t yyscanner); void yy_switch_to_buffer(YY_BUFFER_STATE new_buffer, yyscan_t yyscanner); YY_BUFFER_STATE yy_create_buffer(FILE *file, int size, yyscan_t yyscanner); void yy_delete_buffer(YY_BUFFER_STATE b, yyscan_t yyscanner); void yy_flush_buffer(YY_BUFFER_STATE b, yyscan_t yyscanner); void yypush_buffer_state(YY_BUFFER_STATE new_buffer, yyscan_t yyscanner); void yypop_buffer_state(yyscan_t yyscanner); static void yyensure_buffer_stack(yyscan_t yyscanner); static void yy_load_buffer_state(yyscan_t yyscanner); static void yy_init_buffer(YY_BUFFER_STATE b, FILE *file, yyscan_t yyscanner); #define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER, yyscanner) YY_BUFFER_STATE yy_scan_buffer(char *base, yy_size_t size, yyscan_t yyscanner); YY_BUFFER_STATE yy_scan_string(const char *yy_str, yyscan_t yyscanner); YY_BUFFER_STATE yy_scan_bytes(const char *bytes, int len, yyscan_t yyscanner); void *yyalloc(yy_size_t, yyscan_t yyscanner); void *yyrealloc(void *, yy_size_t, yyscan_t yyscanner); void yyfree(void *, yyscan_t yyscanner); #define yy_new_buffer yy_create_buffer #define yy_set_interactive(is_interactive) \ { \ if (!YY_CURRENT_BUFFER) { \ yyensure_buffer_stack(yyscanner); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer(yyin, YY_BUF_SIZE, yyscanner); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ } #define yy_set_bol(at_bol) \ { \ if (!YY_CURRENT_BUFFER) { \ yyensure_buffer_stack(yyscanner); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer(yyin, YY_BUF_SIZE, yyscanner); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ } #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) /* Begin user sect3 */ #define ff_wrap(yyscanner) (/*CONSTCOND*/ 1) #define YY_SKIP_YYWRAP typedef flex_uint8_t YY_CHAR; typedef int yy_state_type; #define yytext_ptr yytext_r static yy_state_type yy_get_previous_state(yyscan_t yyscanner); static yy_state_type yy_try_NUL_trans(yy_state_type current_state, yyscan_t yyscanner); static int yy_get_next_buffer(yyscan_t yyscanner); static void yynoreturn yy_fatal_error(const char *msg, yyscan_t yyscanner); /* Done after the current pattern has been matched and before the * corresponding action - sets up yytext. */ #define YY_DO_BEFORE_ACTION \ yyg->yytext_ptr = yy_bp; \ yyleng = (int)(yy_cp - yy_bp); \ yyg->yy_hold_char = *yy_cp; \ *yy_cp = '\0'; \ yyg->yy_c_buf_p = yy_cp; #define YY_NUM_RULES 206 #define YY_END_OF_BUFFER 207 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info { flex_int32_t yy_verify; flex_int32_t yy_nxt; }; static const flex_int16_t yy_accept[765] = { 0, 0, 0, 0, 0, 202, 202, 207, 205, 204, 204, 205, 205, 72, 200, 151, 141, 59, 32, 119, 37, 196, 176, 197, 8, 20, 183, 11, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 163, 171, 109, 202, 203, 204, 1, 0, 197, 196, 195, 135, 23, 199, 199, 199, 199, 199, 199, 199, 179, 199, 199, 199, 199, 71, 199, 199, 199, 199, 199, 199, 199, 199, 150, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 123, 199, 199, 182, 75, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 113, 199, 199, 43, 199, 55, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 166, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 202, 201, 198, 195, 199, 133, 199, 199, 137, 199, 94, 199, 118, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 168, 65, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 79, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 81, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 143, 199, 199, 199, 146, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 99, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 77, 199, 199, 88, 199, 199, 199, 199, 52, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 110, 154, 107, 199, 199, 199, 199, 199, 185, 199, 199, 199, 199, 199, 199, 199, 199, 199, 187, 199, 199, 199, 116, 199, 147, 86, 199, 199, 30, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 188, 26, 199, 127, 199, 112, 199, 199, 199, 199, 199, 199, 199, 199, 175, 199, 199, 139, 174, 15, 125, 140, 199, 199, 129, 199, 199, 199, 199, 199, 199, 199, 199, 199, 67, 199, 157, 199, 199, 199, 199, 199, 5, 199, 199, 199, 199, 102, 199, 199, 199, 199, 199, 199, 138, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 4, 103, 199, 199, 69, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 56, 164, 199, 199, 12, 6, 199, 46, 199, 186, 122, 199, 199, 199, 199, 199, 167, 199, 199, 24, 199, 199, 199, 199, 199, 199, 106, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 38, 199, 42, 111, 190, 199, 92, 199, 199, 58, 199, 199, 199, 57, 199, 180, 199, 199, 199, 199, 199, 199, 10, 115, 199, 136, 199, 34, 199, 48, 199, 199, 93, 199, 84, 199, 199, 199, 13, 156, 199, 199, 199, 199, 87, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 121, 199, 199, 199, 199, 199, 199, 199, 83, 199, 199, 148, 199, 199, 199, 40, 199, 199, 21, 199, 22, 199, 9, 28, 199, 199, 199, 114, 199, 199, 199, 199, 162, 199, 199, 199, 199, 199, 199, 100, 199, 199, 45, 199, 2, 199, 18, 199, 172, 199, 97, 199, 199, 199, 155, 194, 142, 199, 199, 199, 199, 173, 199, 199, 199, 178, 199, 199, 41, 199, 199, 199, 199, 90, 14, 199, 199, 199, 199, 199, 199, 199, 199, 149, 199, 199, 199, 191, 199, 66, 53, 3, 199, 199, 199, 199, 199, 199, 153, 199, 199, 39, 85, 199, 50, 199, 192, 199, 199, 134, 145, 132, 199, 25, 199, 199, 199, 33, 130, 105, 199, 199, 76, 120, 199, 70, 199, 199, 124, 199, 61, 199, 199, 91, 199, 60, 199, 73, 199, 89, 199, 199, 199, 27, 193, 19, 44, 199, 199, 199, 47, 199, 199, 199, 117, 199, 199, 199, 199, 63, 199, 199, 199, 35, 199, 199, 199, 184, 98, 199, 177, 199, 199, 169, 199, 49, 199, 68, 78, 199, 199, 126, 199, 199, 199, 199, 51, 199, 29, 199, 199, 199, 199, 199, 199, 62, 199, 74, 158, 199, 199, 189, 199, 199, 199, 128, 152, 199, 199, 199, 159, 64, 165, 95, 199, 181, 199, 131, 17, 96, 80, 31, 199, 199, 160, 82, 16, 104, 199, 36, 161, 199, 199, 144, 108, 170, 54, 101, 199, 199, 7, 0}; static const YY_CHAR yy_ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 5, 1, 1, 6, 1, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 1, 17, 18, 19, 20, 1, 1, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 1, 48, 49, 50, 1, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 46, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}; static const YY_CHAR yy_meta[76] = { 0, 1, 1, 2, 1, 2, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}; static const flex_int16_t yy_base[769] = { 0, 0, 0, 0, 0, 323, 320, 319, 1532, 74, 76, 296, 0, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 280, 274, 1532, 66, 1532, 268, 1532, 209, 60, 56, 67, 118, 116, 173, 49, 68, 118, 55, 68, 133, 174, 195, 241, 121, 0, 192, 289, 336, 187, 120, 226, 72, 1532, 1532, 1532, 0, 199, 104, 1532, 195, 96, 181, 180, 1532, 1532, 0, 60, 80, 96, 231, 116, 108, 132, 175, 185, 126, 166, 0, 168, 240, 236, 239, 172, 177, 297, 220, 221, 238, 242, 255, 241, 319, 309, 249, 340, 251, 301, 286, 292, 293, 338, 296, 0, 312, 348, 391, 348, 354, 341, 349, 363, 365, 383, 352, 385, 365, 371, 381, 396, 398, 408, 408, 0, 397, 418, 403, 419, 408, 423, 415, 462, 416, 452, 444, 436, 456, 459, 449, 465, 458, 465, 459, 0, 465, 468, 511, 476, 475, 487, 483, 484, 503, 491, 0, 1532, 1532, 149, 500, 0, 516, 509, 0, 520, 0, 525, 0, 512, 505, 521, 530, 520, 528, 539, 516, 533, 516, 522, 546, 515, 540, 527, 530, 0, 540, 579, 564, 570, 574, 575, 565, 582, 578, 582, 588, 0, 576, 579, 588, 577, 579, 579, 581, 583, 599, 605, 596, 630, 596, 600, 598, 617, 620, 619, 625, 636, 638, 624, 640, 634, 642, 643, 635, 630, 638, 634, 634, 636, 652, 651, 661, 654, 661, 657, 661, 648, 659, 676, 688, 688, 687, 688, 696, 684, 695, 700, 701, 689, 688, 707, 698, 705, 701, 693, 695, 712, 717, 708, 701, 709, 711, 717, 0, 706, 713, 733, 729, 0, 741, 739, 737, 746, 736, 756, 759, 751, 751, 762, 753, 768, 757, 763, 770, 751, 762, 773, 770, 763, 767, 768, 770, 771, 767, 787, 804, 799, 797, 812, 815, 820, 0, 0, 822, 813, 812, 826, 814, 808, 0, 809, 811, 826, 819, 812, 816, 831, 823, 818, 0, 838, 832, 830, 0, 833, 0, 0, 836, 831, 0, 836, 844, 849, 872, 870, 872, 860, 877, 863, 869, 880, 877, 0, 867, 872, 0, 875, 0, 872, 887, 868, 884, 876, 895, 879, 891, 0, 889, 889, 0, 0, 0, 0, 0, 882, 892, 0, 886, 900, 891, 920, 909, 925, 920, 919, 922, 0, 932, 924, 926, 940, 931, 929, 930, 0, 940, 945, 950, 947, 0, 935, 942, 939, 945, 959, 943, 0, 956, 950, 948, 965, 964, 960, 973, 980, 988, 980, 0, 0, 977, 994, 0, 982, 983, 999, 992, 986, 988, 1002, 1006, 1006, 1004, 0, 0, 1008, 999, 1001, 0, 1003, 0, 1009, 0, 0, 1015, 1016, 1002, 999, 1025, 0, 1024, 1026, 0, 1018, 1042, 1044, 1044, 1037, 1052, 0, 1046, 1060, 1051, 1046, 1047, 1061, 1062, 1056, 1055, 1065, 1062, 1067, 1070, 1054, 1057, 1058, 1075, 0, 1062, 0, 0, 0, 1058, 0, 1075, 1079, 1067, 1081, 1084, 1083, 1100, 1108, 0, 1110, 1095, 1112, 1101, 1116, 1111, 0, 0, 1119, 0, 1112, 0, 1121, 0, 1113, 1127, 0, 1115, 0, 1121, 1111, 1118, 0, 0, 1132, 1130, 1117, 1119, 0, 1119, 1136, 1136, 1137, 1141, 1137, 1133, 1145, 1156, 1149, 1169, 1170, 1168, 1179, 0, 1163, 1182, 1179, 1180, 1167, 1173, 1179, 0, 1184, 1185, 0, 1190, 1173, 1192, 0, 1171, 1175, 0, 1177, 0, 1184, 0, 0, 1186, 1196, 1182, 0, 1184, 1187, 1205, 1208, 0, 1192, 1213, 1209, 1228, 1217, 1219, 0, 1235, 1238, 0, 1240, 0, 1239, 0, 1236, 0, 1226, 0, 1238, 1234, 1225, 0, 0, 0, 1249, 1247, 1240, 1248, 114, 1236, 1251, 1239, 0, 1234, 1240, 0, 1260, 1250, 1257, 1263, 0, 0, 1256, 1260, 1263, 1276, 1264, 1284, 1294, 1283, 0, 1295, 1298, 1285, 0, 1284, 0, 0, 0, 1291, 1294, 1306, 1306, 1285, 1292, 0, 1307, 1298, 0, 0, 1293, 0, 1296, 0, 1296, 1309, 0, 0, 1314, 1315, 0, 1302, 1302, 1315, 0, 0, 0, 1322, 1327, 0, 0, 1309, 0, 1328, 1323, 0, 1335, 0, 1333, 1335, 0, 1345, 0, 1347, 0, 1358, 0, 1343, 1359, 1353, 0, 0, 0, 0, 1351, 1353, 1353, 0, 1347, 1356, 1368, 0, 1352, 1360, 1349, 1356, 0, 1359, 1366, 1360, 0, 1376, 1377, 1375, 0, 0, 1373, 0, 1370, 1384, 0, 1378, 0, 1403, 0, 0, 1404, 1406, 0, 1410, 1392, 1415, 1401, 0, 1399, 0, 1410, 1418, 1412, 1422, 1408, 1424, 0, 1429, 0, 0, 1406, 1427, 0, 1429, 1430, 1421, 0, 0, 1433, 1418, 1428, 0, 0, 0, 0, 1421, 0, 1422, 0, 0, 0, 0, 0, 1425, 1426, 0, 0, 0, 0, 1434, 0, 0, 1444, 1444, 0, 0, 0, 0, 0, 1450, 1465, 0, 1532, 1519, 1523, 105, 1527}; static const flex_int16_t yy_def[769] = { 0, 764, 1, 1, 1, 765, 765, 764, 764, 764, 764, 764, 766, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 764, 764, 764, 768, 764, 764, 764, 766, 764, 764, 764, 764, 764, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 768, 764, 764, 764, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 0, 764, 764, 764, 764}; static const flex_int16_t yy_nxt[1608] = { 0, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 44, 51, 44, 52, 53, 54, 8, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 44, 51, 57, 57, 57, 57, 62, 73, 60, 66, 67, 74, 68, 99, 78, 100, 107, 75, 69, 108, 70, 79, 76, 152, 71, 72, 157, 77, 80, 101, 158, 81, 57, 57, 82, 65, 62, 73, 60, 66, 67, 74, 68, 99, 78, 100, 107, 75, 69, 108, 70, 79, 76, 152, 71, 72, 157, 77, 80, 101, 158, 81, 159, 89, 82, 83, 163, 148, 127, 84, 102, 103, 164, 85, 90, 149, 91, 104, 105, 86, 109, 165, 87, 106, 110, 128, 92, 170, 111, 88, 659, 156, 159, 89, 112, 83, 163, 148, 127, 84, 102, 103, 164, 85, 90, 149, 91, 104, 105, 86, 109, 165, 87, 106, 110, 128, 92, 170, 111, 88, 93, 113, 156, 61, 112, 114, 155, 166, 94, 115, 171, 95, 154, 172, 96, 116, 181, 97, 168, 129, 98, 167, 117, 130, 118, 169, 144, 145, 182, 146, 93, 113, 147, 131, 64, 114, 119, 166, 94, 115, 171, 95, 120, 172, 96, 116, 181, 97, 168, 129, 98, 167, 117, 130, 118, 169, 144, 145, 182, 146, 150, 151, 147, 131, 160, 187, 119, 173, 188, 161, 179, 174, 120, 121, 175, 176, 177, 162, 178, 189, 180, 122, 190, 123, 191, 124, 192, 200, 125, 126, 150, 151, 204, 63, 160, 187, 61, 173, 188, 161, 179, 174, 60, 121, 175, 176, 177, 162, 178, 189, 180, 122, 190, 123, 191, 124, 192, 200, 125, 126, 132, 58, 204, 133, 134, 764, 183, 207, 135, 184, 208, 136, 137, 56, 209, 185, 56, 764, 197, 205, 764, 764, 186, 212, 198, 206, 193, 764, 764, 194, 132, 195, 213, 133, 134, 199, 183, 207, 135, 184, 208, 136, 137, 138, 209, 185, 196, 139, 197, 205, 140, 141, 186, 212, 198, 206, 193, 142, 201, 194, 143, 195, 213, 210, 202, 199, 211, 214, 222, 223, 203, 764, 224, 138, 225, 226, 196, 139, 231, 764, 140, 141, 227, 764, 228, 234, 764, 142, 201, 764, 143, 235, 229, 210, 202, 232, 211, 214, 222, 223, 203, 215, 224, 230, 225, 226, 216, 236, 231, 233, 237, 217, 227, 218, 228, 234, 219, 220, 238, 221, 242, 235, 229, 243, 239, 232, 240, 241, 244, 245, 246, 215, 247, 230, 248, 250, 216, 236, 249, 233, 237, 217, 764, 218, 764, 258, 219, 220, 238, 221, 242, 262, 764, 243, 239, 263, 240, 241, 244, 245, 246, 259, 247, 264, 248, 250, 265, 266, 249, 251, 260, 252, 253, 267, 254, 258, 270, 268, 261, 271, 272, 262, 255, 274, 256, 263, 278, 257, 269, 764, 279, 259, 273, 264, 282, 283, 265, 266, 286, 251, 260, 252, 253, 267, 254, 280, 270, 268, 261, 271, 272, 281, 255, 274, 256, 287, 278, 257, 269, 275, 279, 276, 273, 284, 282, 283, 277, 288, 286, 285, 289, 290, 291, 292, 293, 280, 294, 295, 296, 297, 301, 281, 302, 303, 304, 287, 307, 308, 298, 275, 299, 276, 309, 284, 310, 311, 277, 288, 305, 285, 289, 290, 291, 292, 293, 300, 294, 295, 296, 297, 301, 306, 302, 303, 304, 316, 307, 308, 298, 317, 299, 318, 309, 320, 310, 311, 312, 321, 305, 322, 313, 314, 323, 324, 315, 300, 325, 326, 327, 328, 319, 306, 330, 331, 332, 316, 329, 333, 334, 317, 335, 318, 336, 320, 337, 340, 312, 321, 341, 322, 313, 314, 323, 324, 315, 342, 325, 326, 327, 328, 319, 343, 330, 331, 332, 344, 329, 333, 334, 338, 335, 339, 336, 345, 337, 340, 346, 347, 341, 348, 349, 350, 351, 352, 353, 342, 355, 356, 357, 358, 359, 343, 360, 361, 354, 344, 362, 365, 363, 338, 366, 339, 367, 345, 368, 369, 346, 347, 364, 348, 349, 350, 351, 352, 353, 370, 355, 356, 357, 358, 359, 371, 360, 361, 354, 373, 362, 365, 363, 374, 366, 375, 367, 372, 368, 369, 376, 377, 364, 378, 379, 380, 381, 382, 383, 370, 384, 385, 386, 387, 388, 371, 389, 390, 391, 373, 392, 393, 398, 374, 399, 375, 396, 372, 394, 400, 376, 377, 397, 378, 379, 380, 381, 382, 383, 395, 384, 385, 386, 387, 388, 401, 389, 390, 391, 402, 392, 393, 398, 403, 399, 404, 396, 405, 394, 400, 406, 407, 397, 408, 409, 410, 411, 412, 413, 415, 414, 416, 417, 419, 420, 401, 421, 423, 424, 402, 422, 425, 426, 403, 418, 404, 427, 405, 428, 429, 406, 407, 430, 408, 409, 410, 411, 412, 413, 415, 414, 416, 417, 419, 420, 431, 421, 423, 424, 432, 422, 425, 426, 433, 418, 434, 427, 435, 428, 429, 436, 437, 430, 438, 439, 440, 443, 441, 444, 445, 446, 447, 448, 449, 450, 431, 451, 452, 453, 432, 454, 455, 456, 433, 442, 434, 457, 435, 458, 459, 436, 437, 460, 438, 439, 440, 443, 441, 444, 445, 446, 447, 448, 449, 450, 461, 451, 452, 453, 462, 454, 455, 456, 463, 442, 464, 457, 465, 458, 459, 466, 467, 460, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 461, 480, 481, 482, 462, 484, 485, 486, 463, 487, 464, 488, 465, 489, 483, 466, 467, 490, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 491, 480, 481, 482, 492, 484, 485, 486, 493, 487, 494, 488, 495, 489, 483, 496, 497, 490, 498, 499, 500, 501, 502, 503, 504, 505, 507, 508, 509, 506, 491, 510, 511, 512, 492, 513, 514, 515, 493, 516, 494, 517, 495, 518, 519, 496, 497, 520, 498, 499, 500, 501, 502, 503, 504, 505, 507, 508, 509, 506, 521, 510, 511, 512, 522, 513, 514, 515, 523, 516, 524, 517, 526, 518, 519, 525, 527, 520, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 521, 540, 541, 542, 522, 543, 544, 545, 523, 546, 524, 547, 526, 548, 549, 525, 527, 550, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 551, 540, 541, 542, 552, 543, 544, 545, 553, 546, 554, 547, 555, 548, 549, 556, 557, 550, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 551, 570, 571, 572, 552, 573, 574, 575, 553, 576, 554, 577, 555, 578, 579, 556, 557, 580, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 581, 570, 571, 572, 582, 573, 574, 575, 583, 576, 584, 577, 585, 578, 579, 586, 587, 580, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 600, 581, 601, 602, 603, 582, 604, 605, 606, 583, 607, 584, 608, 585, 609, 610, 586, 587, 599, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 600, 611, 601, 602, 603, 612, 604, 605, 606, 613, 607, 614, 608, 615, 609, 610, 616, 617, 599, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 611, 630, 631, 632, 612, 633, 634, 635, 613, 636, 614, 637, 615, 638, 639, 616, 617, 640, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 641, 630, 631, 632, 642, 633, 634, 635, 643, 636, 644, 637, 645, 638, 639, 646, 647, 640, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 660, 641, 661, 662, 663, 642, 664, 665, 666, 643, 667, 644, 668, 645, 669, 670, 646, 647, 671, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 660, 672, 661, 662, 663, 673, 664, 665, 666, 674, 667, 675, 668, 676, 669, 670, 677, 678, 671, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 672, 691, 692, 693, 673, 694, 695, 696, 674, 697, 675, 698, 676, 699, 700, 677, 678, 701, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 702, 691, 692, 693, 703, 694, 695, 696, 704, 697, 705, 698, 706, 699, 700, 707, 708, 701, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 702, 721, 722, 723, 703, 724, 725, 726, 704, 727, 705, 728, 706, 729, 730, 707, 708, 731, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 732, 721, 722, 723, 733, 724, 725, 726, 734, 727, 735, 728, 736, 729, 730, 737, 738, 731, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 732, 751, 752, 753, 733, 754, 755, 756, 734, 757, 735, 758, 736, 759, 760, 737, 738, 761, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 762, 751, 752, 753, 763, 754, 755, 756, 764, 757, 764, 758, 764, 759, 760, 764, 764, 761, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 762, 764, 764, 764, 763, 55, 55, 55, 55, 59, 764, 59, 59, 153, 153, 764, 153, 7, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764}; static const flex_int16_t yy_chk[1608] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 9, 10, 10, 23, 29, 23, 28, 28, 29, 28, 34, 30, 35, 37, 29, 28, 38, 28, 30, 29, 51, 28, 28, 66, 29, 30, 35, 67, 30, 57, 57, 30, 767, 60, 29, 60, 28, 28, 29, 28, 34, 30, 35, 37, 29, 28, 38, 28, 30, 29, 51, 28, 28, 66, 29, 30, 35, 67, 30, 68, 32, 30, 31, 70, 49, 43, 31, 36, 36, 71, 31, 32, 49, 32, 36, 36, 31, 39, 72, 31, 36, 39, 43, 32, 75, 39, 31, 584, 156, 68, 32, 39, 31, 70, 49, 43, 31, 36, 36, 71, 31, 32, 49, 32, 36, 36, 31, 39, 72, 31, 36, 39, 43, 32, 75, 39, 31, 33, 40, 62, 61, 39, 40, 59, 73, 33, 40, 76, 33, 56, 78, 33, 40, 82, 33, 74, 45, 33, 73, 41, 45, 41, 74, 48, 48, 83, 48, 33, 40, 48, 45, 27, 40, 41, 73, 33, 40, 76, 33, 41, 78, 33, 40, 82, 33, 74, 45, 33, 73, 41, 45, 41, 74, 48, 48, 83, 48, 50, 50, 48, 45, 69, 85, 41, 79, 86, 69, 81, 79, 41, 42, 80, 80, 80, 69, 80, 87, 81, 42, 88, 42, 89, 42, 90, 93, 42, 42, 50, 50, 95, 25, 69, 85, 21, 79, 86, 69, 81, 79, 20, 42, 80, 80, 80, 69, 80, 87, 81, 42, 88, 42, 89, 42, 90, 93, 42, 42, 46, 11, 95, 46, 46, 7, 84, 97, 46, 84, 98, 46, 46, 6, 99, 84, 5, 0, 92, 96, 0, 0, 84, 101, 92, 96, 91, 0, 0, 91, 46, 91, 103, 46, 46, 92, 84, 97, 46, 84, 98, 46, 46, 47, 99, 84, 91, 47, 92, 96, 47, 47, 84, 101, 92, 96, 91, 47, 94, 91, 47, 91, 103, 100, 94, 92, 100, 104, 106, 107, 94, 0, 108, 47, 109, 110, 91, 47, 113, 0, 47, 47, 111, 0, 111, 115, 0, 47, 94, 0, 47, 116, 112, 100, 94, 114, 100, 104, 106, 107, 94, 105, 108, 112, 109, 110, 105, 117, 113, 114, 118, 105, 111, 105, 111, 115, 105, 105, 119, 105, 121, 116, 112, 123, 119, 114, 120, 120, 124, 125, 126, 105, 127, 112, 128, 129, 105, 117, 128, 114, 118, 105, 0, 105, 0, 131, 105, 105, 119, 105, 121, 133, 0, 123, 119, 134, 120, 120, 124, 125, 126, 132, 127, 135, 128, 129, 136, 137, 128, 130, 132, 130, 130, 138, 130, 131, 140, 139, 132, 141, 143, 133, 130, 144, 130, 134, 146, 130, 139, 0, 147, 132, 143, 135, 149, 150, 136, 137, 152, 130, 132, 130, 130, 138, 130, 148, 140, 139, 132, 141, 143, 148, 130, 144, 130, 157, 146, 130, 139, 145, 147, 145, 143, 151, 149, 150, 145, 159, 152, 151, 160, 162, 164, 166, 167, 148, 168, 169, 170, 171, 173, 148, 174, 175, 176, 157, 178, 179, 172, 145, 172, 145, 180, 151, 181, 183, 145, 159, 177, 151, 160, 162, 164, 166, 167, 172, 168, 169, 170, 171, 173, 177, 174, 175, 176, 185, 178, 179, 172, 186, 172, 187, 180, 188, 181, 183, 184, 189, 177, 190, 184, 184, 191, 192, 184, 172, 193, 195, 196, 197, 187, 177, 198, 199, 200, 185, 197, 201, 202, 186, 203, 187, 204, 188, 205, 207, 184, 189, 208, 190, 184, 184, 191, 192, 184, 209, 193, 195, 196, 197, 187, 210, 198, 199, 200, 211, 197, 201, 202, 206, 203, 206, 204, 212, 205, 207, 213, 214, 208, 215, 216, 217, 218, 219, 220, 209, 221, 222, 223, 224, 225, 210, 226, 227, 220, 211, 228, 230, 229, 206, 231, 206, 232, 212, 233, 234, 213, 214, 229, 215, 216, 217, 218, 219, 220, 235, 221, 222, 223, 224, 225, 236, 226, 227, 220, 237, 228, 230, 229, 238, 231, 239, 232, 236, 233, 234, 240, 241, 229, 242, 243, 244, 245, 246, 247, 235, 248, 249, 250, 251, 252, 236, 253, 254, 255, 237, 256, 257, 260, 238, 262, 239, 259, 236, 258, 263, 240, 241, 259, 242, 243, 244, 245, 246, 247, 258, 248, 249, 250, 251, 252, 264, 253, 254, 255, 265, 256, 257, 260, 267, 262, 268, 259, 269, 258, 263, 270, 271, 259, 272, 273, 274, 275, 276, 277, 278, 277, 279, 280, 281, 282, 264, 283, 284, 285, 265, 283, 286, 287, 267, 280, 268, 288, 269, 289, 290, 270, 271, 291, 272, 273, 274, 275, 276, 277, 278, 277, 279, 280, 281, 282, 292, 283, 284, 285, 293, 283, 286, 287, 294, 280, 295, 288, 296, 289, 290, 297, 298, 291, 301, 302, 303, 305, 304, 306, 308, 309, 310, 311, 312, 313, 292, 314, 315, 316, 293, 318, 319, 320, 294, 304, 295, 322, 296, 325, 326, 297, 298, 328, 301, 302, 303, 305, 304, 306, 308, 309, 310, 311, 312, 313, 329, 314, 315, 316, 330, 318, 319, 320, 331, 304, 332, 322, 333, 325, 326, 334, 335, 328, 336, 337, 338, 339, 341, 342, 344, 346, 347, 348, 349, 350, 329, 351, 352, 353, 330, 355, 356, 362, 331, 363, 332, 365, 333, 366, 353, 334, 335, 367, 336, 337, 338, 339, 341, 342, 344, 346, 347, 348, 349, 350, 368, 351, 352, 353, 369, 355, 356, 362, 370, 363, 371, 365, 372, 366, 353, 373, 375, 367, 376, 377, 378, 379, 380, 381, 383, 384, 385, 386, 388, 384, 368, 389, 390, 391, 369, 392, 393, 395, 370, 396, 371, 397, 372, 398, 399, 373, 375, 400, 376, 377, 378, 379, 380, 381, 383, 384, 385, 386, 388, 384, 401, 389, 390, 391, 402, 392, 393, 395, 403, 396, 404, 397, 407, 398, 399, 404, 408, 400, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 422, 423, 401, 424, 426, 428, 402, 431, 432, 433, 403, 434, 404, 435, 407, 437, 438, 404, 408, 440, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 422, 423, 441, 424, 426, 428, 442, 431, 432, 433, 443, 434, 444, 435, 445, 437, 438, 447, 448, 440, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 441, 461, 462, 463, 442, 465, 469, 471, 443, 472, 444, 473, 445, 474, 475, 447, 448, 476, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 477, 461, 462, 463, 478, 465, 469, 471, 480, 472, 481, 473, 482, 474, 475, 483, 484, 476, 485, 488, 490, 492, 494, 495, 497, 499, 500, 501, 504, 505, 477, 506, 507, 509, 478, 510, 511, 512, 480, 513, 481, 514, 482, 515, 516, 483, 484, 504, 485, 488, 490, 492, 494, 495, 497, 499, 500, 501, 504, 505, 517, 506, 507, 509, 518, 510, 511, 512, 519, 513, 520, 514, 521, 515, 516, 522, 524, 504, 525, 526, 527, 528, 529, 530, 532, 533, 535, 536, 537, 539, 517, 540, 542, 544, 518, 547, 548, 549, 519, 551, 520, 552, 521, 553, 554, 522, 524, 556, 525, 526, 527, 528, 529, 530, 532, 533, 535, 536, 537, 539, 557, 540, 542, 544, 558, 547, 548, 549, 559, 551, 560, 552, 561, 553, 554, 563, 564, 556, 566, 568, 570, 572, 574, 575, 576, 580, 581, 582, 583, 585, 557, 586, 587, 589, 558, 590, 592, 593, 559, 594, 560, 595, 561, 598, 599, 563, 564, 600, 566, 568, 570, 572, 574, 575, 576, 580, 581, 582, 583, 585, 601, 586, 587, 589, 602, 590, 592, 593, 603, 594, 604, 595, 605, 598, 599, 607, 608, 600, 609, 611, 615, 616, 617, 618, 619, 620, 622, 623, 626, 628, 601, 630, 631, 634, 602, 635, 637, 638, 603, 639, 604, 643, 605, 644, 647, 607, 608, 649, 609, 611, 615, 616, 617, 618, 619, 620, 622, 623, 626, 628, 650, 630, 631, 634, 652, 635, 637, 638, 654, 639, 655, 643, 657, 644, 647, 659, 661, 649, 663, 664, 665, 670, 671, 672, 674, 675, 676, 678, 679, 680, 650, 681, 683, 684, 652, 685, 687, 688, 654, 689, 655, 692, 657, 694, 695, 659, 661, 697, 663, 664, 665, 670, 671, 672, 674, 675, 676, 678, 679, 680, 699, 681, 683, 684, 702, 685, 687, 688, 703, 689, 705, 692, 706, 694, 695, 707, 708, 697, 710, 712, 713, 714, 715, 716, 717, 719, 722, 723, 725, 726, 699, 727, 730, 731, 702, 732, 737, 739, 703, 745, 705, 746, 706, 751, 754, 707, 708, 755, 710, 712, 713, 714, 715, 716, 717, 719, 722, 723, 725, 726, 761, 727, 730, 731, 762, 732, 737, 739, 0, 745, 0, 746, 0, 751, 754, 0, 0, 755, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 761, 0, 0, 0, 762, 765, 765, 765, 765, 766, 0, 766, 766, 768, 768, 0, 768, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764}; /* The intent behind this definition is that it'll catch * any uses of REJECT which flex missed. */ #define REJECT reject_used_but_not_detected #define yymore() yymore_used_but_not_detected #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET #line 1 "flex.l" #line 2 "flex.l" #include #include #include #include #include "bison_parser.h" #define TOKEN(name) \ { return SQL_##name; } static thread_local std::stringstream strbuf; #line 1272 "flex_lexer.cpp" #line 1274 "flex_lexer.cpp" #define INITIAL 0 #define COMMENT 1 #define singlequotedstring 2 #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way * down here because we want the user's section 1 to have been scanned first. * The user has a chance to override it with an option. */ #include #endif #ifndef YY_EXTRA_TYPE #define YY_EXTRA_TYPE void * #endif /* Holds the entire state of the reentrant scanner. */ struct yyguts_t { /* User-defined. Not touched by flex. */ YY_EXTRA_TYPE yyextra_r; /* The rest are the same as the globals declared in the non-reentrant scanner. */ FILE *yyin_r, *yyout_r; size_t yy_buffer_stack_top; /**< index of top of stack. */ size_t yy_buffer_stack_max; /**< capacity of stack. */ YY_BUFFER_STATE *yy_buffer_stack; /**< Stack as an array. */ char yy_hold_char; int yy_n_chars; int yyleng_r; char *yy_c_buf_p; int yy_init; int yy_start; int yy_did_buffer_switch_on_eof; int yy_start_stack_ptr; int yy_start_stack_depth; int *yy_start_stack; yy_state_type yy_last_accepting_state; char *yy_last_accepting_cpos; int yylineno_r; int yy_flex_debug_r; char *yytext_r; int yy_more_flag; int yy_more_len; YYSTYPE *yylval_r; YYLTYPE *yylloc_r; }; /* end struct yyguts_t */ static int yy_init_globals(yyscan_t yyscanner); /* This must go here because YYSTYPE and YYLTYPE are included * from bison output in section 1.*/ #define yylval yyg->yylval_r #define yylloc yyg->yylloc_r int yylex_init(yyscan_t *scanner); int yylex_init_extra(YY_EXTRA_TYPE user_defined, yyscan_t *scanner); /* Accessor methods to globals. These are made visible to non-reentrant scanners for convenience. */ int yylex_destroy(yyscan_t yyscanner); int yyget_debug(yyscan_t yyscanner); void yyset_debug(int debug_flag, yyscan_t yyscanner); YY_EXTRA_TYPE yyget_extra(yyscan_t yyscanner); void yyset_extra(YY_EXTRA_TYPE user_defined, yyscan_t yyscanner); FILE *yyget_in(yyscan_t yyscanner); void yyset_in(FILE *_in_str, yyscan_t yyscanner); FILE *yyget_out(yyscan_t yyscanner); void yyset_out(FILE *_out_str, yyscan_t yyscanner); int yyget_leng(yyscan_t yyscanner); char *yyget_text(yyscan_t yyscanner); int yyget_lineno(yyscan_t yyscanner); void yyset_lineno(int _line_number, yyscan_t yyscanner); int yyget_column(yyscan_t yyscanner); void yyset_column(int _column_no, yyscan_t yyscanner); YYSTYPE *yyget_lval(yyscan_t yyscanner); void yyset_lval(YYSTYPE *yylval_param, yyscan_t yyscanner); YYLTYPE *yyget_lloc(yyscan_t yyscanner); void yyset_lloc(YYLTYPE *yylloc_param, yyscan_t yyscanner); /* Macros after this point can all be overridden by user definitions in * section 1. */ #ifndef YY_SKIP_YYWRAP #ifdef __cplusplus extern "C" int yywrap(yyscan_t yyscanner); #else extern int yywrap(yyscan_t yyscanner); #endif #endif #ifndef YY_NO_UNPUT #endif #ifndef yytext_ptr static void yy_flex_strncpy(char *, const char *, int, yyscan_t yyscanner); #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen(const char *, yyscan_t yyscanner); #endif #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput(yyscan_t yyscanner); #else static int input(yyscan_t yyscanner); #endif #endif /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE #ifdef __ia64__ /* On IA-64, the buffer size is 16k, not 8k */ #define YY_READ_BUF_SIZE 16384 #else #define YY_READ_BUF_SIZE 8192 #endif /* __ia64__ */ #endif /* Copy whatever the last rule matched to the standard output. */ #ifndef ECHO /* This used to be an fputs(), but since the string might contain NUL's, * we now use fwrite(). */ #define ECHO \ do { \ if (fwrite(yytext, (size_t)yyleng, 1, yyout)) { \ } \ } while (0) #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, * is returned in "result". */ #ifndef YY_INPUT #define YY_INPUT(buf, result, max_size) \ if (YY_CURRENT_BUFFER_LVALUE->yy_is_interactive) { \ int c = '*'; \ int n; \ for (n = 0; n < max_size && (c = getc(yyin)) != EOF && c != '\n'; ++n) \ buf[n] = (char)c; \ if (c == '\n') buf[n++] = (char)c; \ if (c == EOF && ferror(yyin)) \ YY_FATAL_ERROR("input in flex scanner failed"); \ result = n; \ } else { \ errno = 0; \ while ((result = (int)fread(buf, 1, (yy_size_t)max_size, yyin)) == 0 && \ ferror(yyin)) { \ if (errno != EINTR) { \ YY_FATAL_ERROR("input in flex scanner failed"); \ break; \ } \ errno = 0; \ clearerr(yyin); \ } \ } #endif /* No semi-colon after return; correct usage is to write "yyterminate();" - * we don't want an extra ';' after the "return" because that will cause * some compilers to complain about unreachable statements. */ #ifndef yyterminate #define yyterminate() return YY_NULL #endif /* Number of entries by which start-condition stack grows. */ #ifndef YY_START_STACK_INCR #define YY_START_STACK_INCR 25 #endif /* Report a fatal error. */ #ifndef YY_FATAL_ERROR #define YY_FATAL_ERROR(msg) yy_fatal_error(msg, yyscanner) #endif /* end tables serialization structures and prototypes */ /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL_IS_OURS 1 extern int yylex(YYSTYPE *yylval_param, YYLTYPE *yylloc_param, yyscan_t yyscanner); #define YY_DECL \ int yylex(YYSTYPE *yylval_param, YYLTYPE *yylloc_param, yyscan_t yyscanner) #endif /* !YY_DECL */ /* Code executed at the beginning of each rule, after yytext and yyleng * have been set up. */ #ifndef YY_USER_ACTION #define YY_USER_ACTION #endif /* Code executed at the end of each rule. */ #ifndef YY_BREAK #define YY_BREAK /*LINTED*/ break; #endif #define YY_RULE_SETUP YY_USER_ACTION /** The main scanner function which does all the work. */ YY_DECL { yy_state_type yy_current_state; char *yy_cp, *yy_bp; int yy_act; struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; yylval = yylval_param; yylloc = yylloc_param; if (!yyg->yy_init) { yyg->yy_init = 1; #ifdef YY_USER_INIT YY_USER_INIT; #endif if (!yyg->yy_start) yyg->yy_start = 1; /* first start state */ if (!yyin) yyin = stdin; if (!yyout) yyout = stdout; if (!YY_CURRENT_BUFFER) { yyensure_buffer_stack(yyscanner); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer(yyin, YY_BUF_SIZE, yyscanner); } yy_load_buffer_state(yyscanner); } { #line 26 "flex.l" #line 1560 "flex_lexer.cpp" while (/*CONSTCOND*/ 1) /* loops until end-of-file is reached */ { yy_cp = yyg->yy_c_buf_p; /* Support of yytext. */ *yy_cp = yyg->yy_hold_char; /* yy_bp points to the position in yy_ch_buf of the start of * the current run. */ yy_bp = yy_cp; yy_current_state = yyg->yy_start; yy_match: do { YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; if (yy_accept[yy_current_state]) { yyg->yy_last_accepting_state = yy_current_state; yyg->yy_last_accepting_cpos = yy_cp; } while (yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state) { yy_current_state = (int)yy_def[yy_current_state]; if (yy_current_state >= 765) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; ++yy_cp; } while (yy_current_state != 764); yy_cp = yyg->yy_last_accepting_cpos; yy_current_state = yyg->yy_last_accepting_state; yy_find_action: yy_act = yy_accept[yy_current_state]; YY_DO_BEFORE_ACTION; do_action: /* This label is used only to access EOF actions. */ switch (yy_act) { /* beginning of action switch */ case 0: /* must back up */ /* undo the effects of YY_DO_BEFORE_ACTION */ *yy_cp = yyg->yy_hold_char; yy_cp = yyg->yy_last_accepting_cpos; yy_current_state = yyg->yy_last_accepting_state; goto yy_find_action; case 1: YY_RULE_SETUP #line 27 "flex.l" TOKEN(OP_NOTEQUAL) YY_BREAK case 2: YY_RULE_SETUP #line 28 "flex.l" TOKEN(ENABLE) YY_BREAK case 3: YY_RULE_SETUP #line 29 "flex.l" TOKEN(SIMPLE) YY_BREAK case 4: YY_RULE_SETUP #line 30 "flex.l" TOKEN(TEXT) YY_BREAK case 5: YY_RULE_SETUP #line 31 "flex.l" TOKEN(OVER) YY_BREAK case 6: YY_RULE_SETUP #line 32 "flex.l" TOKEN(YEAR) YY_BREAK case 7: YY_RULE_SETUP #line 33 "flex.l" TOKEN(INSERT_METHOD) YY_BREAK case 8: YY_RULE_SETUP #line 34 "flex.l" TOKEN(OP_SEMI) YY_BREAK case 9: YY_RULE_SETUP #line 35 "flex.l" TOKEN(BIGINT) YY_BREAK case 10: YY_RULE_SETUP #line 36 "flex.l" TOKEN(LIMIT) YY_BREAK case 11: YY_RULE_SETUP #line 37 "flex.l" TOKEN(OP_GREATERTHAN) YY_BREAK case 12: YY_RULE_SETUP #line 38 "flex.l" TOKEN(WITH) YY_BREAK case 13: YY_RULE_SETUP #line 39 "flex.l" TOKEN(ORDER) YY_BREAK case 14: YY_RULE_SETUP #line 40 "flex.l" TOKEN(OPTION) YY_BREAK case 15: YY_RULE_SETUP #line 41 "flex.l" TOKEN(LAST) YY_BREAK case 16: YY_RULE_SETUP #line 42 "flex.l" TOKEN(UNBOUNDED) YY_BREAK case 17: YY_RULE_SETUP #line 43 "flex.l" TOKEN(PRECEDING) YY_BREAK case 18: YY_RULE_SETUP #line 44 "flex.l" TOKEN(EXCEPT) YY_BREAK case 19: YY_RULE_SETUP #line 45 "flex.l" TOKEN(NUMERIC) YY_BREAK case 20: YY_RULE_SETUP #line 46 "flex.l" TOKEN(OP_LESSTHAN) YY_BREAK case 21: YY_RULE_SETUP #line 47 "flex.l" TOKEN(ACTION) YY_BREAK case 22: YY_RULE_SETUP #line 48 "flex.l" TOKEN(BEFORE) YY_BREAK case 23: YY_RULE_SETUP #line 49 "flex.l" TOKEN(OP_GREATEREQ) YY_BREAK case 24: YY_RULE_SETUP #line 50 "flex.l" TOKEN(CHECK) YY_BREAK case 25: YY_RULE_SETUP #line 51 "flex.l" TOKEN(COMPACT) YY_BREAK case 26: YY_RULE_SETUP #line 52 "flex.l" TOKEN(FULL) YY_BREAK case 27: YY_RULE_SETUP #line 53 "flex.l" TOKEN(NATURAL) YY_BREAK case 28: YY_RULE_SETUP #line 54 "flex.l" TOKEN(BINARY) YY_BREAK case 29: YY_RULE_SETUP #line 55 "flex.l" TOKEN(NATIONAL) YY_BREAK case 30: YY_RULE_SETUP #line 56 "flex.l" TOKEN(ENUM) YY_BREAK case 31: YY_RULE_SETUP #line 57 "flex.l" TOKEN(REDUNDANT) YY_BREAK case 32: YY_RULE_SETUP #line 58 "flex.l" TOKEN(OP_ADD) YY_BREAK case 33: YY_RULE_SETUP #line 59 "flex.l" TOKEN(CURRENT) YY_BREAK case 34: YY_RULE_SETUP #line 60 "flex.l" TOKEN(MERGE) YY_BREAK case 35: YY_RULE_SETUP #line 61 "flex.l" TOKEN(TRIGGER) YY_BREAK case 36: YY_RULE_SETUP #line 62 "flex.l" TOKEN(COMPRESSED) YY_BREAK case 37: YY_RULE_SETUP #line 63 "flex.l" TOKEN(OP_SUB) YY_BREAK case 38: YY_RULE_SETUP #line 64 "flex.l" TOKEN(FALSE) YY_BREAK case 39: YY_RULE_SETUP #line 65 "flex.l" TOKEN(UNIQUE) YY_BREAK case 40: YY_RULE_SETUP #line 66 "flex.l" TOKEN(WHERE) YY_BREAK case 41: YY_RULE_SETUP #line 67 "flex.l" TOKEN(MINUTE) YY_BREAK case 42: YY_RULE_SETUP #line 68 "flex.l" TOKEN(FIRST) YY_BREAK case 43: YY_RULE_SETUP #line 69 "flex.l" TOKEN(ON) YY_BREAK case 44: YY_RULE_SETUP #line 70 "flex.l" TOKEN(PARTIAL) YY_BREAK case 45: YY_RULE_SETUP #line 71 "flex.l" TOKEN(DOUBLE) YY_BREAK case 46: YY_RULE_SETUP #line 72 "flex.l" TOKEN(AFTER) YY_BREAK case 47: YY_RULE_SETUP #line 73 "flex.l" TOKEN(PRIMARY) YY_BREAK case 48: YY_RULE_SETUP #line 74 "flex.l" TOKEN(MONTH) YY_BREAK case 49: YY_RULE_SETUP #line 75 "flex.l" TOKEN(DEFERRED) YY_BREAK case 50: YY_RULE_SETUP #line 76 "flex.l" TOKEN(VALUES) YY_BREAK case 51: YY_RULE_SETUP #line 77 "flex.l" TOKEN(LONGTEXT) YY_BREAK case 52: YY_RULE_SETUP #line 78 "flex.l" TOKEN(SQL) YY_BREAK case 53: YY_RULE_SETUP #line 79 "flex.l" TOKEN(SHARED) YY_BREAK case 54: YY_RULE_SETUP #line 80 "flex.l" TOKEN(VALIDATION) YY_BREAK case 55: YY_RULE_SETUP #line 81 "flex.l" TOKEN(OR) YY_BREAK case 56: YY_RULE_SETUP #line 82 "flex.l" TOKEN(VIEW) YY_BREAK case 57: YY_RULE_SETUP #line 83 "flex.l" TOKEN(INDEX) YY_BREAK case 58: YY_RULE_SETUP #line 84 "flex.l" TOKEN(GROUP) YY_BREAK case 59: YY_RULE_SETUP #line 85 "flex.l" TOKEN(OP_MUL) YY_BREAK case 60: YY_RULE_SETUP #line 86 "flex.l" TOKEN(INPLACE) YY_BREAK case 61: YY_RULE_SETUP #line 87 "flex.l" TOKEN(FOREIGN) YY_BREAK case 62: YY_RULE_SETUP #line 88 "flex.l" TOKEN(RESTRICT) YY_BREAK case 63: YY_RULE_SETUP #line 89 "flex.l" TOKEN(SPATIAL) YY_BREAK case 64: YY_RULE_SETUP #line 90 "flex.l" TOKEN(FOLLOWING) YY_BREAK case 65: YY_RULE_SETUP #line 91 "flex.l" TOKEN(DEC) YY_BREAK case 66: YY_RULE_SETUP #line 92 "flex.l" TOKEN(SELECT) YY_BREAK case 67: YY_RULE_SETUP #line 93 "flex.l" TOKEN(NONE) YY_BREAK case 68: YY_RULE_SETUP #line 94 "flex.l" TOKEN(DISTINCT) YY_BREAK case 69: YY_RULE_SETUP #line 95 "flex.l" TOKEN(TRUE) YY_BREAK case 70: YY_RULE_SETUP #line 96 "flex.l" TOKEN(DYNAMIC) YY_BREAK case 71: YY_RULE_SETUP #line 97 "flex.l" TOKEN(BY) YY_BREAK case 72: YY_RULE_SETUP #line 98 "flex.l" TOKEN(OP_MOD) YY_BREAK case 73: YY_RULE_SETUP #line 99 "flex.l" TOKEN(INTEGER) YY_BREAK case 74: YY_RULE_SETUP #line 100 "flex.l" TOKEN(SECURITY) YY_BREAK case 75: YY_RULE_SETUP #line 101 "flex.l" TOKEN(IS) YY_BREAK case 76: YY_RULE_SETUP #line 102 "flex.l" TOKEN(DEFINER) YY_BREAK case 77: YY_RULE_SETUP #line 103 "flex.l" TOKEN(ROW) YY_BREAK case 78: YY_RULE_SETUP #line 104 "flex.l" TOKEN(ENFORCED) YY_BREAK case 79: YY_RULE_SETUP #line 105 "flex.l" TOKEN(END) YY_BREAK case 80: YY_RULE_SETUP #line 106 "flex.l" TOKEN(RECURSIVE) YY_BREAK case 81: YY_RULE_SETUP #line 107 "flex.l" TOKEN(FOR) YY_BREAK case 82: YY_RULE_SETUP #line 108 "flex.l" TOKEN(TEMPTABLE) YY_BREAK case 83: YY_RULE_SETUP #line 109 "flex.l" TOKEN(UNION) YY_BREAK case 84: YY_RULE_SETUP #line 110 "flex.l" TOKEN(NULLS) YY_BREAK case 85: YY_RULE_SETUP #line 111 "flex.l" TOKEN(UPDATE) YY_BREAK case 86: YY_RULE_SETUP #line 112 "flex.l" TOKEN(ELSE) YY_BREAK case 87: YY_RULE_SETUP #line 113 "flex.l" TOKEN(RANGE) YY_BREAK case 88: YY_RULE_SETUP #line 114 "flex.l" TOKEN(SET) YY_BREAK case 89: YY_RULE_SETUP #line 115 "flex.l" TOKEN(INVOKER) YY_BREAK case 90: YY_RULE_SETUP #line 116 "flex.l" TOKEN(OFFSET) YY_BREAK case 91: YY_RULE_SETUP #line 117 "flex.l" TOKEN(INDEXED) YY_BREAK case 92: YY_RULE_SETUP #line 118 "flex.l" TOKEN(FORCE) YY_BREAK case 93: YY_RULE_SETUP #line 119 "flex.l" TOKEN(NCHAR) YY_BREAK case 94: YY_RULE_SETUP #line 120 "flex.l" TOKEN(AND) YY_BREAK case 95: YY_RULE_SETUP #line 121 "flex.l" TOKEN(INITIALLY) YY_BREAK case 96: YY_RULE_SETUP #line 122 "flex.l" TOKEN(PRECISION) YY_BREAK case 97: YY_RULE_SETUP #line 123 "flex.l" TOKEN(FILTER) YY_BREAK case 98: YY_RULE_SETUP #line 124 "flex.l" TOKEN(WITHOUT) YY_BREAK case 99: YY_RULE_SETUP #line 125 "flex.l" TOKEN(NOT) YY_BREAK case 100: YY_RULE_SETUP #line 126 "flex.l" TOKEN(DELETE) YY_BREAK case 101: YY_RULE_SETUP #line 127 "flex.l" TOKEN(DEFFERRABLE) YY_BREAK case 102: YY_RULE_SETUP #line 128 "flex.l" TOKEN(REAL) YY_BREAK case 103: YY_RULE_SETUP #line 129 "flex.l" TOKEN(THEN) YY_BREAK case 104: YY_RULE_SETUP #line 130 "flex.l" TOKEN(UNDEFINED) YY_BREAK case 105: YY_RULE_SETUP #line 131 "flex.l" TOKEN(DEFAULT) YY_BREAK case 106: YY_RULE_SETUP #line 132 "flex.l" TOKEN(CROSS) YY_BREAK case 107: YY_RULE_SETUP #line 133 "flex.l" TOKEN(CHAR) YY_BREAK case 108: YY_RULE_SETUP #line 134 "flex.l" TOKEN(REFERENCES) YY_BREAK case 109: YY_RULE_SETUP #line 135 "flex.l" TOKEN(OP_XOR) YY_BREAK case 110: YY_RULE_SETUP #line 136 "flex.l" TOKEN(CASE) YY_BREAK case 111: YY_RULE_SETUP #line 137 "flex.l" TOKEN(FIXED) YY_BREAK case 112: YY_RULE_SETUP #line 138 "flex.l" TOKEN(HOUR) YY_BREAK case 113: YY_RULE_SETUP #line 139 "flex.l" TOKEN(NO) YY_BREAK case 114: YY_RULE_SETUP #line 140 "flex.l" TOKEN(COLUMN) YY_BREAK case 115: YY_RULE_SETUP #line 141 "flex.l" TOKEN(LOCAL) YY_BREAK case 116: YY_RULE_SETUP #line 142 "flex.l" TOKEN(DROP) YY_BREAK case 117: YY_RULE_SETUP #line 143 "flex.l" TOKEN(REPLACE) YY_BREAK case 118: YY_RULE_SETUP #line 144 "flex.l" TOKEN(ASC) YY_BREAK case 119: YY_RULE_SETUP #line 145 "flex.l" TOKEN(OP_COMMA) YY_BREAK case 120: YY_RULE_SETUP #line 146 "flex.l" TOKEN(DISABLE) YY_BREAK case 121: YY_RULE_SETUP #line 147 "flex.l" TOKEN(TABLE) YY_BREAK case 122: YY_RULE_SETUP #line 148 "flex.l" TOKEN(ARRAY) YY_BREAK case 123: YY_RULE_SETUP #line 149 "flex.l" TOKEN(IF) YY_BREAK case 124: YY_RULE_SETUP #line 150 "flex.l" TOKEN(EXTRACT) YY_BREAK case 125: YY_RULE_SETUP #line 151 "flex.l" TOKEN(LEFT) YY_BREAK case 126: YY_RULE_SETUP #line 152 "flex.l" TOKEN(FULLTEXT) YY_BREAK case 127: YY_RULE_SETUP #line 153 "flex.l" TOKEN(HASH) YY_BREAK case 128: YY_RULE_SETUP #line 154 "flex.l" TOKEN(ALGORITHM) YY_BREAK case 129: YY_RULE_SETUP #line 155 "flex.l" TOKEN(LOCK) YY_BREAK case 130: YY_RULE_SETUP #line 156 "flex.l" TOKEN(DECIMAL) YY_BREAK case 131: YY_RULE_SETUP #line 157 "flex.l" TOKEN(PARTITION) YY_BREAK case 132: YY_RULE_SETUP #line 158 "flex.l" TOKEN(CASCADE) YY_BREAK case 133: YY_RULE_SETUP #line 159 "flex.l" TOKEN(ADD) YY_BREAK case 134: YY_RULE_SETUP #line 160 "flex.l" TOKEN(BETWEEN) YY_BREAK case 135: YY_RULE_SETUP #line 161 "flex.l" TOKEN(OP_LESSEQ) YY_BREAK case 136: YY_RULE_SETUP #line 162 "flex.l" TOKEN(MATCH) YY_BREAK case 137: YY_RULE_SETUP #line 163 "flex.l" TOKEN(ALL) YY_BREAK case 138: YY_RULE_SETUP #line 164 "flex.l" TOKEN(ROWS) YY_BREAK case 139: YY_RULE_SETUP #line 165 "flex.l" TOKEN(JOIN) YY_BREAK case 140: YY_RULE_SETUP #line 166 "flex.l" TOKEN(LIKE) YY_BREAK case 141: YY_RULE_SETUP #line 167 "flex.l" TOKEN(OP_RP) YY_BREAK case 142: YY_RULE_SETUP #line 168 "flex.l" TOKEN(IGNORE) YY_BREAK case 143: YY_RULE_SETUP #line 169 "flex.l" TOKEN(INT) YY_BREAK case 144: YY_RULE_SETUP #line 170 "flex.l" TOKEN(MEDIUMTEXT) YY_BREAK case 145: YY_RULE_SETUP #line 171 "flex.l" TOKEN(BOOLEAN) YY_BREAK case 146: YY_RULE_SETUP #line 172 "flex.l" TOKEN(KEY) YY_BREAK case 147: YY_RULE_SETUP #line 173 "flex.l" TOKEN(EACH) YY_BREAK case 148: YY_RULE_SETUP #line 174 "flex.l" TOKEN(USING) YY_BREAK case 149: YY_RULE_SETUP #line 175 "flex.l" TOKEN(RENAME) YY_BREAK case 150: YY_RULE_SETUP #line 176 "flex.l" TOKEN(DO) YY_BREAK case 151: YY_RULE_SETUP #line 177 "flex.l" TOKEN(OP_LP) YY_BREAK case 152: YY_RULE_SETUP #line 178 "flex.l" TOKEN(CHARACTER) YY_BREAK case 153: YY_RULE_SETUP #line 179 "flex.l" TOKEN(UMINUS) YY_BREAK case 154: YY_RULE_SETUP #line 180 "flex.l" TOKEN(CAST) YY_BREAK case 155: YY_RULE_SETUP #line 181 "flex.l" TOKEN(GROUPS) YY_BREAK case 156: YY_RULE_SETUP #line 182 "flex.l" TOKEN(OUTER) YY_BREAK case 157: YY_RULE_SETUP #line 183 "flex.l" TOKEN(NULL) YY_BREAK case 158: YY_RULE_SETUP #line 184 "flex.l" TOKEN(SMALLINT) YY_BREAK case 159: YY_RULE_SETUP #line 185 "flex.l" TOKEN(EXCLUSIVE) YY_BREAK case 160: YY_RULE_SETUP #line 186 "flex.l" TOKEN(TEMPORARY) YY_BREAK case 161: YY_RULE_SETUP #line 187 "flex.l" TOKEN(CONSTRAINT) YY_BREAK case 162: YY_RULE_SETUP #line 188 "flex.l" TOKEN(CREATE) YY_BREAK case 163: YY_RULE_SETUP #line 189 "flex.l" TOKEN(OP_LBRACKET) YY_BREAK case 164: YY_RULE_SETUP #line 190 "flex.l" TOKEN(WHEN) YY_BREAK case 165: YY_RULE_SETUP #line 191 "flex.l" TOKEN(IMMEDIATE) YY_BREAK case 166: YY_RULE_SETUP #line 192 "flex.l" TOKEN(TO) YY_BREAK case 167: YY_RULE_SETUP #line 193 "flex.l" TOKEN(BTREE) YY_BREAK case 168: YY_RULE_SETUP #line 194 "flex.l" TOKEN(DAY) YY_BREAK case 169: YY_RULE_SETUP #line 195 "flex.l" TOKEN(CONFLICT) YY_BREAK case 170: YY_RULE_SETUP #line 196 "flex.l" TOKEN(ROW_FORMAT) YY_BREAK case 171: YY_RULE_SETUP #line 197 "flex.l" TOKEN(OP_RBRACKET) YY_BREAK case 172: YY_RULE_SETUP #line 198 "flex.l" TOKEN(EXISTS) YY_BREAK case 173: YY_RULE_SETUP #line 199 "flex.l" TOKEN(INSERT) YY_BREAK case 174: YY_RULE_SETUP #line 200 "flex.l" TOKEN(KEYS) YY_BREAK case 175: YY_RULE_SETUP #line 201 "flex.l" TOKEN(INTO) YY_BREAK case 176: YY_RULE_SETUP #line 202 "flex.l" TOKEN(OP_DIVIDE) YY_BREAK case 177: YY_RULE_SETUP #line 203 "flex.l" TOKEN(CASCADED) YY_BREAK case 178: YY_RULE_SETUP #line 204 "flex.l" TOKEN(ISNULL) YY_BREAK case 179: YY_RULE_SETUP #line 205 "flex.l" TOKEN(AS) YY_BREAK case 180: YY_RULE_SETUP #line 206 "flex.l" TOKEN(INNER) YY_BREAK case 181: YY_RULE_SETUP #line 207 "flex.l" TOKEN(INTERSECT) YY_BREAK case 182: YY_RULE_SETUP #line 208 "flex.l" TOKEN(IN) YY_BREAK case 183: YY_RULE_SETUP #line 209 "flex.l" TOKEN(OP_EQUAL) YY_BREAK case 184: YY_RULE_SETUP #line 210 "flex.l" TOKEN(VARCHAR) YY_BREAK case 185: YY_RULE_SETUP #line 211 "flex.l" TOKEN(COPY) YY_BREAK case 186: YY_RULE_SETUP #line 212 "flex.l" TOKEN(ALTER) YY_BREAK case 187: YY_RULE_SETUP #line 213 "flex.l" TOKEN(DESC) YY_BREAK case 188: YY_RULE_SETUP #line 214 "flex.l" TOKEN(FROM) YY_BREAK case 189: YY_RULE_SETUP #line 215 "flex.l" TOKEN(TINYTEXT) YY_BREAK case 190: YY_RULE_SETUP #line 216 "flex.l" TOKEN(FLOAT) YY_BREAK case 191: YY_RULE_SETUP #line 217 "flex.l" TOKEN(SECOND) YY_BREAK case 192: YY_RULE_SETUP #line 218 "flex.l" TOKEN(WINDOW) YY_BREAK case 193: YY_RULE_SETUP #line 219 "flex.l" TOKEN(NOTHING) YY_BREAK case 194: YY_RULE_SETUP #line 220 "flex.l" TOKEN(HAVING) YY_BREAK case 195: #line 222 "flex.l" case 196: YY_RULE_SETUP #line 222 "flex.l" { yylval->fval = atof(yytext); return SQL_FLOATLITERAL; } YY_BREAK case 197: YY_RULE_SETUP #line 227 "flex.l" { yylval->ival = atol(yytext); return SQL_INTLITERAL; } YY_BREAK case 198: YY_RULE_SETUP #line 232 "flex.l" { std::string s(yytext); yylval->sval = strdup(s.substr(1, s.size() - 1).c_str()); return SQL_STRINGLITERAL; } YY_BREAK case 199: YY_RULE_SETUP #line 238 "flex.l" { yylval->sval = strdup(yytext); return SQL_IDENTIFIER; } YY_BREAK case 200: YY_RULE_SETUP #line 243 "flex.l" { BEGIN singlequotedstring; strbuf = std::stringstream{}; strbuf << '\''; } YY_BREAK case 201: YY_RULE_SETUP #line 247 "flex.l" { strbuf << '\''; } YY_BREAK case 202: /* rule 202 can match eol */ YY_RULE_SETUP #line 251 "flex.l" { strbuf << yytext; } YY_BREAK case 203: YY_RULE_SETUP #line 255 "flex.l" { BEGIN 0; strbuf << '\''; yylval->sval = strdup(strbuf.str().c_str()); return SQL_STRINGLITERAL; } YY_BREAK case YY_STATE_EOF(singlequotedstring): #line 262 "flex.l" { return 0; } YY_BREAK case 204: /* rule 204 can match eol */ YY_RULE_SETUP #line 266 "flex.l" { } YY_BREAK case 205: YY_RULE_SETUP #line 269 "flex.l" { return 0; } YY_BREAK case 206: YY_RULE_SETUP #line 273 "flex.l" ECHO; YY_BREAK #line 2675 "flex_lexer.cpp" case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(COMMENT): yyterminate(); case YY_END_OF_BUFFER: { /* Amount of text matched not including the EOB char. */ int yy_amount_of_matched_text = (int)(yy_cp - yyg->yytext_ptr) - 1; /* Undo the effects of YY_DO_BEFORE_ACTION. */ *yy_cp = yyg->yy_hold_char; YY_RESTORE_YY_MORE_OFFSET if (YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW) { /* We're scanning a new file or input source. It's * possible that this happened because the user * just pointed yyin at a new source and called * yylex(). If so, then we have to assure * consistency between YY_CURRENT_BUFFER and our * globals. Here is the right place to do so, because * this is the first action (other than possibly a * back-up) that will match for the new input source. */ yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; } /* Note that here we test for yy_c_buf_p "<=" to the position * of the first EOB in the buffer, since yy_c_buf_p will * already have been incremented past the NUL character * (since all states make transitions on EOB to the * end-of-buffer state). Contrast this with the test * in input(). */ if (yyg->yy_c_buf_p <= &YY_CURRENT_BUFFER_LVALUE ->yy_ch_buf[yyg->yy_n_chars]) { /* This was really a NUL. */ yy_state_type yy_next_state; yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state(yyscanner); /* Okay, we're now positioned to make the NUL * transition. We couldn't have * yy_get_previous_state() go ahead and do it * for us because it doesn't know how to deal * with the possibility of jamming (and we don't * want to build jamming into it because then it * will run more slowly). */ yy_next_state = yy_try_NUL_trans(yy_current_state, yyscanner); yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; if (yy_next_state) { /* Consume the NUL. */ yy_cp = ++yyg->yy_c_buf_p; yy_current_state = yy_next_state; goto yy_match; } else { yy_cp = yyg->yy_last_accepting_cpos; yy_current_state = yyg->yy_last_accepting_state; goto yy_find_action; } } else switch (yy_get_next_buffer(yyscanner)) { case EOB_ACT_END_OF_FILE: { yyg->yy_did_buffer_switch_on_eof = 0; if (yywrap(yyscanner)) { /* Note: because we've taken care in * yy_get_next_buffer() to have set up * yytext, we can now set up * yy_c_buf_p so that if some total * hoser (like flex itself) wants to * call the scanner after we return the * YY_NULL, it'll still work - another * YY_NULL will get returned. */ yyg->yy_c_buf_p = yyg->yytext_ptr + YY_MORE_ADJ; yy_act = YY_STATE_EOF(YY_START); goto do_action; } else { if (!yyg->yy_did_buffer_switch_on_eof) YY_NEW_FILE; } break; } case EOB_ACT_CONTINUE_SCAN: yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state(yyscanner); yy_cp = yyg->yy_c_buf_p; yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; goto yy_match; case EOB_ACT_LAST_MATCH: yyg->yy_c_buf_p = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars]; yy_current_state = yy_get_previous_state(yyscanner); yy_cp = yyg->yy_c_buf_p; yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; goto yy_find_action; } break; } default: YY_FATAL_ERROR("fatal flex scanner internal error--no action found"); } /* end of action switch */ } /* end of scanning one token */ } /* end of user's declarations */ } /* end of yylex */ /* yy_get_next_buffer - try to read in a new buffer * * Returns a code representing an action: * EOB_ACT_LAST_MATCH - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position * EOB_ACT_END_OF_FILE - end of file */ static int yy_get_next_buffer(yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; char *source = yyg->yytext_ptr; int number_to_move, i; int ret_val; if (yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1]) YY_FATAL_ERROR("fatal flex scanner internal error--end of buffer missed"); if (YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0) { /* Don't try to fill the buffer, so this is an EOF. */ if (yyg->yy_c_buf_p - yyg->yytext_ptr - YY_MORE_ADJ == 1) { /* We matched a single character, the EOB, so * treat this as a final EOF. */ return EOB_ACT_END_OF_FILE; } else { /* We matched some text prior to the EOB, first * process it. */ return EOB_ACT_LAST_MATCH; } } /* Try to read more data. */ /* First move last chars to start of buffer. */ number_to_move = (int)(yyg->yy_c_buf_p - yyg->yytext_ptr - 1); for (i = 0; i < number_to_move; ++i) *(dest++) = *(source++); if (YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING) /* don't do the read, it's not guaranteed to return an EOF, * just force an EOF */ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0; else { int num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while (num_to_read <= 0) { /* Not enough room in the buffer - grow it. */ /* just a shorter name for the current buffer */ YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE; int yy_c_buf_p_offset = (int)(yyg->yy_c_buf_p - b->yy_ch_buf); if (b->yy_is_our_buffer) { int new_size = b->yy_buf_size * 2; if (new_size <= 0) b->yy_buf_size += b->yy_buf_size / 8; else b->yy_buf_size *= 2; b->yy_ch_buf = (char *) /* Include room in for 2 EOB chars. */ yyrealloc((void *)b->yy_ch_buf, (yy_size_t)(b->yy_buf_size + 2), yyscanner); } else /* Can't grow it, we don't own it. */ b->yy_ch_buf = NULL; if (!b->yy_ch_buf) YY_FATAL_ERROR("fatal error - scanner input buffer overflow"); yyg->yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset]; num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; } if (num_to_read > YY_READ_BUF_SIZE) num_to_read = YY_READ_BUF_SIZE; /* Read in more data. */ YY_INPUT((&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), yyg->yy_n_chars, num_to_read); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; } if (yyg->yy_n_chars == 0) { if (number_to_move == YY_MORE_ADJ) { ret_val = EOB_ACT_END_OF_FILE; yyrestart(yyin, yyscanner); } else { ret_val = EOB_ACT_LAST_MATCH; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_EOF_PENDING; } } else ret_val = EOB_ACT_CONTINUE_SCAN; if ((yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { /* Extend the array by 50%, plus the number we really need. */ int new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1); YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *)yyrealloc((void *)YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t)new_size, yyscanner); if (!YY_CURRENT_BUFFER_LVALUE->yy_ch_buf) YY_FATAL_ERROR("out of dynamic memory in yy_get_next_buffer()"); /* "- 2" to take care of EOB's */ YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int)(new_size - 2); } yyg->yy_n_chars += number_to_move; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR; yyg->yytext_ptr = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; return ret_val; } /* yy_get_previous_state - get the state just before the EOB char was reached */ static yy_state_type yy_get_previous_state(yyscan_t yyscanner) { yy_state_type yy_current_state; char *yy_cp; struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; yy_current_state = yyg->yy_start; for (yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp) { YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); if (yy_accept[yy_current_state]) { yyg->yy_last_accepting_state = yy_current_state; yyg->yy_last_accepting_cpos = yy_cp; } while (yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state) { yy_current_state = (int)yy_def[yy_current_state]; if (yy_current_state >= 765) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; } return yy_current_state; } /* yy_try_NUL_trans - try to make a transition on the NUL character * * synopsis * next_state = yy_try_NUL_trans( current_state ); */ static yy_state_type yy_try_NUL_trans(yy_state_type yy_current_state, yyscan_t yyscanner) { int yy_is_jam; struct yyguts_t *yyg = (struct yyguts_t *) yyscanner; /* This var may be unused depending upon options. */ char *yy_cp = yyg->yy_c_buf_p; YY_CHAR yy_c = 1; if (yy_accept[yy_current_state]) { yyg->yy_last_accepting_state = yy_current_state; yyg->yy_last_accepting_cpos = yy_cp; } while (yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state) { yy_current_state = (int)yy_def[yy_current_state]; if (yy_current_state >= 765) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; yy_is_jam = (yy_current_state == 764); (void)yyg; return yy_is_jam ? 0 : yy_current_state; } #ifndef YY_NO_UNPUT #endif #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput(yyscan_t yyscanner) #else static int input(yyscan_t yyscanner) #endif { int c; struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; *yyg->yy_c_buf_p = yyg->yy_hold_char; if (*yyg->yy_c_buf_p == YY_END_OF_BUFFER_CHAR) { /* yy_c_buf_p now points to the character we want to return. * If this occurs *before* the EOB characters, then it's a * valid NUL; if not, then we've hit the end of the buffer. */ if (yyg->yy_c_buf_p < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars]) /* This was really a NUL. */ *yyg->yy_c_buf_p = '\0'; else { /* need more input */ int offset = (int)(yyg->yy_c_buf_p - yyg->yytext_ptr); ++yyg->yy_c_buf_p; switch (yy_get_next_buffer(yyscanner)) { case EOB_ACT_LAST_MATCH: /* This happens because yy_g_n_b() * sees that we've accumulated a * token and flags that we need to * try matching the token before * proceeding. But for input(), * there's no matching to consider. * So convert the EOB_ACT_LAST_MATCH * to EOB_ACT_END_OF_FILE. */ /* Reset buffer status. */ yyrestart(yyin, yyscanner); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { if (yywrap(yyscanner)) return 0; if (!yyg->yy_did_buffer_switch_on_eof) YY_NEW_FILE; #ifdef __cplusplus return yyinput(yyscanner); #else return input(yyscanner); #endif } case EOB_ACT_CONTINUE_SCAN: yyg->yy_c_buf_p = yyg->yytext_ptr + offset; break; } } } c = *(unsigned char *)yyg->yy_c_buf_p; /* cast for 8-bit char's */ *yyg->yy_c_buf_p = '\0'; /* preserve yytext */ yyg->yy_hold_char = *++yyg->yy_c_buf_p; return c; } #endif /* ifndef YY_NO_INPUT */ /** Immediately switch to a different input stream. * @param input_file A readable stream. * @param yyscanner The scanner object. * @note This function does not reset the start condition to @c INITIAL . */ void yyrestart(FILE *input_file, yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; if (!YY_CURRENT_BUFFER) { yyensure_buffer_stack(yyscanner); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer(yyin, YY_BUF_SIZE, yyscanner); } yy_init_buffer(YY_CURRENT_BUFFER, input_file, yyscanner); yy_load_buffer_state(yyscanner); } /** Switch to a different input buffer. * @param new_buffer The new input buffer. * @param yyscanner The scanner object. */ void yy_switch_to_buffer(YY_BUFFER_STATE new_buffer, yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; /* TODO. We should be able to replace this entire function body * with * yypop_buffer_state(); * yypush_buffer_state(new_buffer); */ yyensure_buffer_stack(yyscanner); if (YY_CURRENT_BUFFER == new_buffer) return; if (YY_CURRENT_BUFFER) { /* Flush out information for old buffer. */ *yyg->yy_c_buf_p = yyg->yy_hold_char; YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; } YY_CURRENT_BUFFER_LVALUE = new_buffer; yy_load_buffer_state(yyscanner); /* We don't actually know whether we did this switch during * EOF (yywrap()) processing, but the only time this flag * is looked at is after yywrap() is called, so it's safe * to go ahead and always set it. */ yyg->yy_did_buffer_switch_on_eof = 1; } static void yy_load_buffer_state(yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; yyg->yytext_ptr = yyg->yy_c_buf_p = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; yyg->yy_hold_char = *yyg->yy_c_buf_p; } /** Allocate and initialize an input buffer state. * @param file A readable stream. * @param size The character buffer size in bytes. When in doubt, use @c * YY_BUF_SIZE. * @param yyscanner The scanner object. * @return the allocated buffer state. */ YY_BUFFER_STATE yy_create_buffer(FILE *file, int size, yyscan_t yyscanner) { YY_BUFFER_STATE b; b = (YY_BUFFER_STATE)yyalloc(sizeof(struct yy_buffer_state), yyscanner); if (!b) YY_FATAL_ERROR("out of dynamic memory in yy_create_buffer()"); b->yy_buf_size = size; /* yy_ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. */ b->yy_ch_buf = (char *)yyalloc((yy_size_t)(b->yy_buf_size + 2), yyscanner); if (!b->yy_ch_buf) YY_FATAL_ERROR("out of dynamic memory in yy_create_buffer()"); b->yy_is_our_buffer = 1; yy_init_buffer(b, file, yyscanner); return b; } /** Destroy the buffer. * @param b a buffer created with yy_create_buffer() * @param yyscanner The scanner object. */ void yy_delete_buffer(YY_BUFFER_STATE b, yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; if (!b) return; if (b == YY_CURRENT_BUFFER) /* Not sure if we should pop here. */ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE)0; if (b->yy_is_our_buffer) yyfree((void *)b->yy_ch_buf, yyscanner); yyfree((void *)b, yyscanner); } /* Initializes or reinitializes a buffer. * This function is sometimes called more than once on the same buffer, * such as during a yyrestart() or at EOF. */ static void yy_init_buffer(YY_BUFFER_STATE b, FILE *file, yyscan_t yyscanner) { int oerrno = errno; struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; yy_flush_buffer(b, yyscanner); b->yy_input_file = file; b->yy_fill_buffer = 1; /* If b is the current buffer, then yy_init_buffer was _probably_ * called from yyrestart() or through yy_get_next_buffer. * In that case, we don't want to reset the lineno or column. */ if (b != YY_CURRENT_BUFFER) { b->yy_bs_lineno = 1; b->yy_bs_column = 0; } b->yy_is_interactive = 0; errno = oerrno; } /** Discard all buffered characters. On the next scan, YY_INPUT will be called. * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. * @param yyscanner The scanner object. */ void yy_flush_buffer(YY_BUFFER_STATE b, yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; if (!b) return; b->yy_n_chars = 0; /* We always need two end-of-buffer characters. The first causes * a transition to the end-of-buffer state. The second causes * a jam in that state. */ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; b->yy_buf_pos = &b->yy_ch_buf[0]; b->yy_at_bol = 1; b->yy_buffer_status = YY_BUFFER_NEW; if (b == YY_CURRENT_BUFFER) yy_load_buffer_state(yyscanner); } /** Pushes the new state onto the stack. The new state becomes * the current state. This function will allocate the stack * if necessary. * @param new_buffer The new state. * @param yyscanner The scanner object. */ void yypush_buffer_state(YY_BUFFER_STATE new_buffer, yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; if (new_buffer == NULL) return; yyensure_buffer_stack(yyscanner); /* This block is copied from yy_switch_to_buffer. */ if (YY_CURRENT_BUFFER) { /* Flush out information for old buffer. */ *yyg->yy_c_buf_p = yyg->yy_hold_char; YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; } /* Only push if top exists. Otherwise, replace top. */ if (YY_CURRENT_BUFFER) yyg->yy_buffer_stack_top++; YY_CURRENT_BUFFER_LVALUE = new_buffer; /* copied from yy_switch_to_buffer. */ yy_load_buffer_state(yyscanner); yyg->yy_did_buffer_switch_on_eof = 1; } /** Removes and deletes the top of the stack, if present. * The next element becomes the new top. * @param yyscanner The scanner object. */ void yypop_buffer_state(yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; if (!YY_CURRENT_BUFFER) return; yy_delete_buffer(YY_CURRENT_BUFFER, yyscanner); YY_CURRENT_BUFFER_LVALUE = NULL; if (yyg->yy_buffer_stack_top > 0) --yyg->yy_buffer_stack_top; if (YY_CURRENT_BUFFER) { yy_load_buffer_state(yyscanner); yyg->yy_did_buffer_switch_on_eof = 1; } } /* Allocates the stack if it does not exist. * Guarantees space for at least one push. */ static void yyensure_buffer_stack(yyscan_t yyscanner) { yy_size_t num_to_alloc; struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; if (!yyg->yy_buffer_stack) { /* First allocation is just for 2 elements, since we don't know if this * scanner will even need a stack. We use 2 instead of 1 to avoid an * immediate realloc on the next call. */ num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */ yyg->yy_buffer_stack = (struct yy_buffer_state **)yyalloc( num_to_alloc * sizeof(struct yy_buffer_state *), yyscanner); if (!yyg->yy_buffer_stack) YY_FATAL_ERROR("out of dynamic memory in yyensure_buffer_stack()"); memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state *)); yyg->yy_buffer_stack_max = num_to_alloc; yyg->yy_buffer_stack_top = 0; return; } if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1) { /* Increase the buffer to prepare for a possible push. */ yy_size_t grow_size = 8 /* arbitrary grow size */; num_to_alloc = yyg->yy_buffer_stack_max + grow_size; yyg->yy_buffer_stack = (struct yy_buffer_state **)yyrealloc( yyg->yy_buffer_stack, num_to_alloc * sizeof(struct yy_buffer_state *), yyscanner); if (!yyg->yy_buffer_stack) YY_FATAL_ERROR("out of dynamic memory in yyensure_buffer_stack()"); /* zero only the new slots.*/ memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state *)); yyg->yy_buffer_stack_max = num_to_alloc; } } /** Setup the input buffer state to scan directly from a user-specified * character buffer. * @param base the character buffer * @param size the size in bytes of the character buffer * @param yyscanner The scanner object. * @return the newly allocated buffer state object. */ YY_BUFFER_STATE yy_scan_buffer(char *base, yy_size_t size, yyscan_t yyscanner) { YY_BUFFER_STATE b; if (size < 2 || base[size - 2] != YY_END_OF_BUFFER_CHAR || base[size - 1] != YY_END_OF_BUFFER_CHAR) /* They forgot to leave room for the EOB's. */ return NULL; b = (YY_BUFFER_STATE)yyalloc(sizeof(struct yy_buffer_state), yyscanner); if (!b) YY_FATAL_ERROR("out of dynamic memory in yy_scan_buffer()"); b->yy_buf_size = (int)(size - 2); /* "- 2" to take care of EOB's */ b->yy_buf_pos = b->yy_ch_buf = base; b->yy_is_our_buffer = 0; b->yy_input_file = NULL; b->yy_n_chars = b->yy_buf_size; b->yy_is_interactive = 0; b->yy_at_bol = 1; b->yy_fill_buffer = 0; b->yy_buffer_status = YY_BUFFER_NEW; yy_switch_to_buffer(b, yyscanner); return b; } /** Setup the input buffer state to scan a string. The next call to yylex() will * scan from a @e copy of @a str. * @param yystr a NUL-terminated string to scan * @param yyscanner The scanner object. * @return the newly allocated buffer state object. * @note If you want to scan bytes that may contain NUL values, then use * yy_scan_bytes() instead. */ YY_BUFFER_STATE yy_scan_string(const char *yystr, yyscan_t yyscanner) { return yy_scan_bytes(yystr, (int)strlen(yystr), yyscanner); } /** Setup the input buffer state to scan the given bytes. The next call to * yylex() will scan from a @e copy of @a bytes. * @param yybytes the byte buffer to scan * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. * @param yyscanner The scanner object. * @return the newly allocated buffer state object. */ YY_BUFFER_STATE yy_scan_bytes(const char *yybytes, int _yybytes_len, yyscan_t yyscanner) { YY_BUFFER_STATE b; char *buf; yy_size_t n; int i; /* Get memory for full buffer, including space for trailing EOB's. */ n = (yy_size_t)(_yybytes_len + 2); buf = (char *)yyalloc(n, yyscanner); if (!buf) YY_FATAL_ERROR("out of dynamic memory in yy_scan_bytes()"); for (i = 0; i < _yybytes_len; ++i) buf[i] = yybytes[i]; buf[_yybytes_len] = buf[_yybytes_len + 1] = YY_END_OF_BUFFER_CHAR; b = yy_scan_buffer(buf, n, yyscanner); if (!b) YY_FATAL_ERROR("bad buffer in yy_scan_bytes()"); /* It's okay to grow etc. this buffer, and we should throw it * away when we're done. */ b->yy_is_our_buffer = 1; return b; } #ifndef YY_EXIT_FAILURE #define YY_EXIT_FAILURE 2 #endif static void yynoreturn yy_fatal_error(const char *msg, yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; (void)yyg; fprintf(stderr, "%s\n", msg); exit(YY_EXIT_FAILURE); } /* Redefine yyless() so it works in section 3 code. */ #undef yyless #define yyless(n) \ do { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg); \ yytext[yyleng] = yyg->yy_hold_char; \ yyg->yy_c_buf_p = yytext + yyless_macro_arg; \ yyg->yy_hold_char = *yyg->yy_c_buf_p; \ *yyg->yy_c_buf_p = '\0'; \ yyleng = yyless_macro_arg; \ } while (0) /* Accessor methods (get/set functions) to struct members. */ /** Get the user-defined data for this scanner. * @param yyscanner The scanner object. */ YY_EXTRA_TYPE yyget_extra(yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; return yyextra; } /** Get the current line number. * @param yyscanner The scanner object. */ int yyget_lineno(yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; if (!YY_CURRENT_BUFFER) return 0; return yylineno; } /** Get the current column number. * @param yyscanner The scanner object. */ int yyget_column(yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; if (!YY_CURRENT_BUFFER) return 0; return yycolumn; } /** Get the input stream. * @param yyscanner The scanner object. */ FILE *yyget_in(yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; return yyin; } /** Get the output stream. * @param yyscanner The scanner object. */ FILE *yyget_out(yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; return yyout; } /** Get the length of the current token. * @param yyscanner The scanner object. */ int yyget_leng(yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; return yyleng; } /** Get the current token. * @param yyscanner The scanner object. */ char *yyget_text(yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; return yytext; } /** Set the user-defined data. This data is never touched by the scanner. * @param user_defined The data to be associated with this scanner. * @param yyscanner The scanner object. */ void yyset_extra(YY_EXTRA_TYPE user_defined, yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; yyextra = user_defined; } /** Set the current line number. * @param _line_number line number * @param yyscanner The scanner object. */ void yyset_lineno(int _line_number, yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; /* lineno is only valid if an input buffer exists. */ if (!YY_CURRENT_BUFFER) YY_FATAL_ERROR("yyset_lineno called with no buffer"); yylineno = _line_number; } /** Set the current column. * @param _column_no column number * @param yyscanner The scanner object. */ void yyset_column(int _column_no, yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; /* column is only valid if an input buffer exists. */ if (!YY_CURRENT_BUFFER) YY_FATAL_ERROR("yyset_column called with no buffer"); yycolumn = _column_no; } /** Set the input stream. This does not discard the current * input buffer. * @param _in_str A readable stream. * @param yyscanner The scanner object. * @see yy_switch_to_buffer */ void yyset_in(FILE *_in_str, yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; yyin = _in_str; } void yyset_out(FILE *_out_str, yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; yyout = _out_str; } int yyget_debug(yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; return yy_flex_debug; } void yyset_debug(int _bdebug, yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; yy_flex_debug = _bdebug; } /* Accessor methods for yylval and yylloc */ YYSTYPE *yyget_lval(yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; return yylval; } void yyset_lval(YYSTYPE *yylval_param, yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; yylval = yylval_param; } YYLTYPE *yyget_lloc(yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; return yylloc; } void yyset_lloc(YYLTYPE *yylloc_param, yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; yylloc = yylloc_param; } /* User-visible API */ /* yylex_init is special because it creates the scanner itself, so it is * the ONLY reentrant function that doesn't take the scanner as the last * argument. That's why we explicitly handle the declaration, instead of using * our macros. */ int yylex_init(yyscan_t *ptr_yy_globals) { if (ptr_yy_globals == NULL) { errno = EINVAL; return 1; } *ptr_yy_globals = (yyscan_t)yyalloc(sizeof(struct yyguts_t), NULL); if (*ptr_yy_globals == NULL) { errno = ENOMEM; return 1; } /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for * releases. */ memset(*ptr_yy_globals, 0x00, sizeof(struct yyguts_t)); return yy_init_globals(*ptr_yy_globals); } /* yylex_init_extra has the same functionality as yylex_init, but follows the * convention of taking the scanner as the last argument. Note however, that * this is a *pointer* to a scanner, as it will be allocated by this call (and * is the reason, too, why this function also must handle its own declaration). * The user defined value in the first argument will be available to yyalloc in * the yyextra field. */ int yylex_init_extra(YY_EXTRA_TYPE yy_user_defined, yyscan_t *ptr_yy_globals) { struct yyguts_t dummy_yyguts; yyset_extra(yy_user_defined, &dummy_yyguts); if (ptr_yy_globals == NULL) { errno = EINVAL; return 1; } *ptr_yy_globals = (yyscan_t)yyalloc(sizeof(struct yyguts_t), &dummy_yyguts); if (*ptr_yy_globals == NULL) { errno = ENOMEM; return 1; } /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */ memset(*ptr_yy_globals, 0x00, sizeof(struct yyguts_t)); yyset_extra(yy_user_defined, *ptr_yy_globals); return yy_init_globals(*ptr_yy_globals); } static int yy_init_globals(yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; /* Initialization is the same as for the non-reentrant scanner. * This function is called from yylex_destroy(), so don't allocate here. */ yyg->yy_buffer_stack = NULL; yyg->yy_buffer_stack_top = 0; yyg->yy_buffer_stack_max = 0; yyg->yy_c_buf_p = NULL; yyg->yy_init = 0; yyg->yy_start = 0; yyg->yy_start_stack_ptr = 0; yyg->yy_start_stack_depth = 0; yyg->yy_start_stack = NULL; /* Defined in main.c */ #ifdef YY_STDINIT yyin = stdin; yyout = stdout; #else yyin = NULL; yyout = NULL; #endif /* For future reference: Set errno on error, since we are called by * yylex_init() */ return 0; } /* yylex_destroy is for both reentrant and non-reentrant scanners. */ int yylex_destroy(yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; /* Pop the buffer stack, destroying each element. */ while (YY_CURRENT_BUFFER) { yy_delete_buffer(YY_CURRENT_BUFFER, yyscanner); YY_CURRENT_BUFFER_LVALUE = NULL; yypop_buffer_state(yyscanner); } /* Destroy the stack itself. */ yyfree(yyg->yy_buffer_stack, yyscanner); yyg->yy_buffer_stack = NULL; /* Destroy the start condition stack. */ yyfree(yyg->yy_start_stack, yyscanner); yyg->yy_start_stack = NULL; /* Reset the globals. This is important in a non-reentrant scanner so the next * time yylex() is called, initialization will occur. */ yy_init_globals(yyscanner); /* Destroy the main struct (reentrant only). */ yyfree(yyscanner, yyscanner); yyscanner = NULL; return 0; } /* * Internal utility routines. */ #ifndef yytext_ptr static void yy_flex_strncpy(char *s1, const char *s2, int n, yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; (void)yyg; int i; for (i = 0; i < n; ++i) s1[i] = s2[i]; } #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen(const char *s, yyscan_t yyscanner) { int n; for (n = 0; s[n]; ++n) ; return n; } #endif void *yyalloc(yy_size_t size, yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; (void)yyg; return malloc(size); } void *yyrealloc(void *ptr, yy_size_t size, yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; (void)yyg; /* The cast to (char *) in the following accommodates both * implementations that use char* generic pointers, and those * that use void* generic pointers. It works with the latter * because both ANSI C and C++ allow castless assignment from * any pointer type to void*, and deal with argument conversions * as though doing an assignment. */ return realloc(ptr, size); } void yyfree(void *ptr, yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; (void)yyg; free((char *)ptr); /* see yyrealloc() for (char *) cast */ } #define YYTABLES_NAME "yytables" #line 273 "flex.l" ================================================ FILE: srcs/internal/mysql/parser/flex_lexer.h ================================================ #ifndef ff_HEADER_H #define ff_HEADER_H 1 #define ff_IN_HEADER 1 #line 6 "flex_lexer.h" #line 8 "flex_lexer.h" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 6 #define YY_FLEX_SUBMINOR_VERSION 4 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif #ifdef yy_create_buffer #define ff__create_buffer_ALREADY_DEFINED #else #define yy_create_buffer ff__create_buffer #endif #ifdef yy_delete_buffer #define ff__delete_buffer_ALREADY_DEFINED #else #define yy_delete_buffer ff__delete_buffer #endif #ifdef yy_scan_buffer #define ff__scan_buffer_ALREADY_DEFINED #else #define yy_scan_buffer ff__scan_buffer #endif #ifdef yy_scan_string #define ff__scan_string_ALREADY_DEFINED #else #define yy_scan_string ff__scan_string #endif #ifdef yy_scan_bytes #define ff__scan_bytes_ALREADY_DEFINED #else #define yy_scan_bytes ff__scan_bytes #endif #ifdef yy_init_buffer #define ff__init_buffer_ALREADY_DEFINED #else #define yy_init_buffer ff__init_buffer #endif #ifdef yy_flush_buffer #define ff__flush_buffer_ALREADY_DEFINED #else #define yy_flush_buffer ff__flush_buffer #endif #ifdef yy_load_buffer_state #define ff__load_buffer_state_ALREADY_DEFINED #else #define yy_load_buffer_state ff__load_buffer_state #endif #ifdef yy_switch_to_buffer #define ff__switch_to_buffer_ALREADY_DEFINED #else #define yy_switch_to_buffer ff__switch_to_buffer #endif #ifdef yypush_buffer_state #define ff_push_buffer_state_ALREADY_DEFINED #else #define yypush_buffer_state ff_push_buffer_state #endif #ifdef yypop_buffer_state #define ff_pop_buffer_state_ALREADY_DEFINED #else #define yypop_buffer_state ff_pop_buffer_state #endif #ifdef yyensure_buffer_stack #define ff_ensure_buffer_stack_ALREADY_DEFINED #else #define yyensure_buffer_stack ff_ensure_buffer_stack #endif #ifdef yylex #define ff_lex_ALREADY_DEFINED #else #define yylex ff_lex #endif #ifdef yyrestart #define ff_restart_ALREADY_DEFINED #else #define yyrestart ff_restart #endif #ifdef yylex_init #define ff_lex_init_ALREADY_DEFINED #else #define yylex_init ff_lex_init #endif #ifdef yylex_init_extra #define ff_lex_init_extra_ALREADY_DEFINED #else #define yylex_init_extra ff_lex_init_extra #endif #ifdef yylex_destroy #define ff_lex_destroy_ALREADY_DEFINED #else #define yylex_destroy ff_lex_destroy #endif #ifdef yyget_debug #define ff_get_debug_ALREADY_DEFINED #else #define yyget_debug ff_get_debug #endif #ifdef yyset_debug #define ff_set_debug_ALREADY_DEFINED #else #define yyset_debug ff_set_debug #endif #ifdef yyget_extra #define ff_get_extra_ALREADY_DEFINED #else #define yyget_extra ff_get_extra #endif #ifdef yyset_extra #define ff_set_extra_ALREADY_DEFINED #else #define yyset_extra ff_set_extra #endif #ifdef yyget_in #define ff_get_in_ALREADY_DEFINED #else #define yyget_in ff_get_in #endif #ifdef yyset_in #define ff_set_in_ALREADY_DEFINED #else #define yyset_in ff_set_in #endif #ifdef yyget_out #define ff_get_out_ALREADY_DEFINED #else #define yyget_out ff_get_out #endif #ifdef yyset_out #define ff_set_out_ALREADY_DEFINED #else #define yyset_out ff_set_out #endif #ifdef yyget_leng #define ff_get_leng_ALREADY_DEFINED #else #define yyget_leng ff_get_leng #endif #ifdef yyget_text #define ff_get_text_ALREADY_DEFINED #else #define yyget_text ff_get_text #endif #ifdef yyget_lineno #define ff_get_lineno_ALREADY_DEFINED #else #define yyget_lineno ff_get_lineno #endif #ifdef yyset_lineno #define ff_set_lineno_ALREADY_DEFINED #else #define yyset_lineno ff_set_lineno #endif #ifdef yyget_column #define ff_get_column_ALREADY_DEFINED #else #define yyget_column ff_get_column #endif #ifdef yyset_column #define ff_set_column_ALREADY_DEFINED #else #define yyset_column ff_set_column #endif #ifdef yywrap #define ff_wrap_ALREADY_DEFINED #else #define yywrap ff_wrap #endif #ifdef yyget_lval #define ff_get_lval_ALREADY_DEFINED #else #define yyget_lval ff_get_lval #endif #ifdef yyset_lval #define ff_set_lval_ALREADY_DEFINED #else #define yyset_lval ff_set_lval #endif #ifdef yyget_lloc #define ff_get_lloc_ALREADY_DEFINED #else #define yyget_lloc ff_get_lloc #endif #ifdef yyset_lloc #define ff_set_lloc_ALREADY_DEFINED #else #define yyset_lloc ff_set_lloc #endif #ifdef yyalloc #define ff_alloc_ALREADY_DEFINED #else #define yyalloc ff_alloc #endif #ifdef yyrealloc #define ff_realloc_ALREADY_DEFINED #else #define yyrealloc ff_realloc #endif #ifdef yyfree #define ff_free_ALREADY_DEFINED #else #define yyfree ff_free #endif /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ #include #include #include #include /* end standard C headers. */ /* flex integer type definitions */ #ifndef FLEXINT_H #define FLEXINT_H /* C99 systems have . Non-C99 systems may or may not. */ #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. */ #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS 1 #endif #include typedef int8_t flex_int8_t; typedef uint8_t flex_uint8_t; typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; /* Limits of integral types. */ #ifndef INT8_MIN #define INT8_MIN (-128) #endif #ifndef INT16_MIN #define INT16_MIN (-32767 - 1) #endif #ifndef INT32_MIN #define INT32_MIN (-2147483647 - 1) #endif #ifndef INT8_MAX #define INT8_MAX (127) #endif #ifndef INT16_MAX #define INT16_MAX (32767) #endif #ifndef INT32_MAX #define INT32_MAX (2147483647) #endif #ifndef UINT8_MAX #define UINT8_MAX (255U) #endif #ifndef UINT16_MAX #define UINT16_MAX (65535U) #endif #ifndef UINT32_MAX #define UINT32_MAX (4294967295U) #endif #ifndef SIZE_MAX #define SIZE_MAX (~(size_t)0) #endif #endif /* ! C99 */ #endif /* ! FLEXINT_H */ /* begin standard C++ headers. */ /* TODO: this is always defined, so inline it */ #define yyconst const #if defined(__GNUC__) && __GNUC__ >= 3 #define yynoreturn __attribute__((__noreturn__)) #else #define yynoreturn #endif /* An opaque pointer. */ #ifndef YY_TYPEDEF_YY_SCANNER_T #define YY_TYPEDEF_YY_SCANNER_T typedef void *yyscan_t; #endif /* For convenience, these vars (plus the bison vars far below) are macros in the reentrant scanner. */ #define yyin yyg->yyin_r #define yyout yyg->yyout_r #define yyextra yyg->yyextra_r #define yyleng yyg->yyleng_r #define yytext yyg->yytext_r #define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno) #define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column) #define yy_flex_debug yyg->yy_flex_debug_r /* Size of default input buffer. */ #ifndef YY_BUF_SIZE #ifdef __ia64__ /* On IA-64, the buffer size is 16k, not 8k. * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. * Ditto for the __ia64__ case accordingly. */ #define YY_BUF_SIZE 32768 #else #define YY_BUF_SIZE 16384 #endif /* __ia64__ */ #endif #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef size_t yy_size_t; #endif #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct yy_buffer_state { FILE *yy_input_file; char *yy_ch_buf; /* input buffer */ char *yy_buf_pos; /* current position in input buffer */ /* Size of input buffer in bytes, not including room for EOB * characters. */ int yy_buf_size; /* Number of characters read into yy_ch_buf, not including EOB * characters. */ int yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to * delete it. */ int yy_is_our_buffer; /* Whether this is an "interactive" input source; if so, and * if we're using stdio for input, then we want to use getc() * instead of fread(), to make sure we stop fetching input after * each newline. */ int yy_is_interactive; /* Whether we're considered to be at the beginning of a line. * If so, '^' rules will be active on the next match, otherwise * not. */ int yy_at_bol; int yy_bs_lineno; /**< The line count. */ int yy_bs_column; /**< The column count. */ /* Whether to try to fill the input buffer when we reach the * end of it. */ int yy_fill_buffer; int yy_buffer_status; }; #endif /* !YY_STRUCT_YY_BUFFER_STATE */ void yyrestart(FILE *input_file, yyscan_t yyscanner); void yy_switch_to_buffer(YY_BUFFER_STATE new_buffer, yyscan_t yyscanner); YY_BUFFER_STATE yy_create_buffer(FILE *file, int size, yyscan_t yyscanner); void yy_delete_buffer(YY_BUFFER_STATE b, yyscan_t yyscanner); void yy_flush_buffer(YY_BUFFER_STATE b, yyscan_t yyscanner); void yypush_buffer_state(YY_BUFFER_STATE new_buffer, yyscan_t yyscanner); void yypop_buffer_state(yyscan_t yyscanner); YY_BUFFER_STATE yy_scan_buffer(char *base, yy_size_t size, yyscan_t yyscanner); YY_BUFFER_STATE yy_scan_string(const char *yy_str, yyscan_t yyscanner); YY_BUFFER_STATE yy_scan_bytes(const char *bytes, int len, yyscan_t yyscanner); void *yyalloc(yy_size_t, yyscan_t yyscanner); void *yyrealloc(void *, yy_size_t, yyscan_t yyscanner); void yyfree(void *, yyscan_t yyscanner); /* Begin user sect3 */ #define ff_wrap(yyscanner) (/*CONSTCOND*/ 1) #define YY_SKIP_YYWRAP #define yytext_ptr yytext_r #ifdef YY_HEADER_EXPORT_START_CONDITIONS #define INITIAL 0 #define COMMENT 1 #define singlequotedstring 2 #endif #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way * down here because we want the user's section 1 to have been scanned first. * The user has a chance to override it with an option. */ #include #endif #ifndef YY_EXTRA_TYPE #define YY_EXTRA_TYPE void * #endif int yylex_init(yyscan_t *scanner); int yylex_init_extra(YY_EXTRA_TYPE user_defined, yyscan_t *scanner); /* Accessor methods to globals. These are made visible to non-reentrant scanners for convenience. */ int yylex_destroy(yyscan_t yyscanner); int yyget_debug(yyscan_t yyscanner); void yyset_debug(int debug_flag, yyscan_t yyscanner); YY_EXTRA_TYPE yyget_extra(yyscan_t yyscanner); void yyset_extra(YY_EXTRA_TYPE user_defined, yyscan_t yyscanner); FILE *yyget_in(yyscan_t yyscanner); void yyset_in(FILE *_in_str, yyscan_t yyscanner); FILE *yyget_out(yyscan_t yyscanner); void yyset_out(FILE *_out_str, yyscan_t yyscanner); int yyget_leng(yyscan_t yyscanner); char *yyget_text(yyscan_t yyscanner); int yyget_lineno(yyscan_t yyscanner); void yyset_lineno(int _line_number, yyscan_t yyscanner); int yyget_column(yyscan_t yyscanner); void yyset_column(int _column_no, yyscan_t yyscanner); YYSTYPE *yyget_lval(yyscan_t yyscanner); void yyset_lval(YYSTYPE *yylval_param, yyscan_t yyscanner); YYLTYPE *yyget_lloc(yyscan_t yyscanner); void yyset_lloc(YYLTYPE *yylloc_param, yyscan_t yyscanner); /* Macros after this point can all be overridden by user definitions in * section 1. */ #ifndef YY_SKIP_YYWRAP #ifdef __cplusplus extern "C" int yywrap(yyscan_t yyscanner); #else extern int yywrap(yyscan_t yyscanner); #endif #endif #ifndef yytext_ptr static void yy_flex_strncpy(char *, const char *, int, yyscan_t yyscanner); #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen(const char *, yyscan_t yyscanner); #endif #ifndef YY_NO_INPUT #endif /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE #ifdef __ia64__ /* On IA-64, the buffer size is 16k, not 8k */ #define YY_READ_BUF_SIZE 16384 #else #define YY_READ_BUF_SIZE 8192 #endif /* __ia64__ */ #endif /* Number of entries by which start-condition stack grows. */ #ifndef YY_START_STACK_INCR #define YY_START_STACK_INCR 25 #endif /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL_IS_OURS 1 extern int yylex(YYSTYPE *yylval_param, YYLTYPE *yylloc_param, yyscan_t yyscanner); #define YY_DECL \ int yylex(YYSTYPE *yylval_param, YYLTYPE *yylloc_param, yyscan_t yyscanner) #endif /* !YY_DECL */ /* yy_get_previous_state - get the state just before the EOB char was reached */ #undef YY_NEW_FILE #undef YY_FLUSH_BUFFER #undef yy_set_bol #undef yy_new_buffer #undef yy_set_interactive #undef YY_DO_BEFORE_ACTION #ifdef YY_DECL_IS_OURS #undef YY_DECL_IS_OURS #undef YY_DECL #endif #ifndef ff__create_buffer_ALREADY_DEFINED #undef yy_create_buffer #endif #ifndef ff__delete_buffer_ALREADY_DEFINED #undef yy_delete_buffer #endif #ifndef ff__scan_buffer_ALREADY_DEFINED #undef yy_scan_buffer #endif #ifndef ff__scan_string_ALREADY_DEFINED #undef yy_scan_string #endif #ifndef ff__scan_bytes_ALREADY_DEFINED #undef yy_scan_bytes #endif #ifndef ff__init_buffer_ALREADY_DEFINED #undef yy_init_buffer #endif #ifndef ff__flush_buffer_ALREADY_DEFINED #undef yy_flush_buffer #endif #ifndef ff__load_buffer_state_ALREADY_DEFINED #undef yy_load_buffer_state #endif #ifndef ff__switch_to_buffer_ALREADY_DEFINED #undef yy_switch_to_buffer #endif #ifndef ff_push_buffer_state_ALREADY_DEFINED #undef yypush_buffer_state #endif #ifndef ff_pop_buffer_state_ALREADY_DEFINED #undef yypop_buffer_state #endif #ifndef ff_ensure_buffer_stack_ALREADY_DEFINED #undef yyensure_buffer_stack #endif #ifndef ff_lex_ALREADY_DEFINED #undef yylex #endif #ifndef ff_restart_ALREADY_DEFINED #undef yyrestart #endif #ifndef ff_lex_init_ALREADY_DEFINED #undef yylex_init #endif #ifndef ff_lex_init_extra_ALREADY_DEFINED #undef yylex_init_extra #endif #ifndef ff_lex_destroy_ALREADY_DEFINED #undef yylex_destroy #endif #ifndef ff_get_debug_ALREADY_DEFINED #undef yyget_debug #endif #ifndef ff_set_debug_ALREADY_DEFINED #undef yyset_debug #endif #ifndef ff_get_extra_ALREADY_DEFINED #undef yyget_extra #endif #ifndef ff_set_extra_ALREADY_DEFINED #undef yyset_extra #endif #ifndef ff_get_in_ALREADY_DEFINED #undef yyget_in #endif #ifndef ff_set_in_ALREADY_DEFINED #undef yyset_in #endif #ifndef ff_get_out_ALREADY_DEFINED #undef yyget_out #endif #ifndef ff_set_out_ALREADY_DEFINED #undef yyset_out #endif #ifndef ff_get_leng_ALREADY_DEFINED #undef yyget_leng #endif #ifndef ff_get_text_ALREADY_DEFINED #undef yyget_text #endif #ifndef ff_get_lineno_ALREADY_DEFINED #undef yyget_lineno #endif #ifndef ff_set_lineno_ALREADY_DEFINED #undef yyset_lineno #endif #ifndef ff_get_column_ALREADY_DEFINED #undef yyget_column #endif #ifndef ff_set_column_ALREADY_DEFINED #undef yyset_column #endif #ifndef ff_wrap_ALREADY_DEFINED #undef yywrap #endif #ifndef ff_get_lval_ALREADY_DEFINED #undef yyget_lval #endif #ifndef ff_set_lval_ALREADY_DEFINED #undef yyset_lval #endif #ifndef ff_get_lloc_ALREADY_DEFINED #undef yyget_lloc #endif #ifndef ff_set_lloc_ALREADY_DEFINED #undef yyset_lloc #endif #ifndef ff_alloc_ALREADY_DEFINED #undef yyalloc #endif #ifndef ff_realloc_ALREADY_DEFINED #undef yyrealloc #endif #ifndef ff_free_ALREADY_DEFINED #undef yyfree #endif #ifndef ff_text_ALREADY_DEFINED #undef yytext #endif #ifndef ff_leng_ALREADY_DEFINED #undef yyleng #endif #ifndef ff_in_ALREADY_DEFINED #undef yyin #endif #ifndef ff_out_ALREADY_DEFINED #undef yyout #endif #ifndef ff__flex_debug_ALREADY_DEFINED #undef yy_flex_debug #endif #ifndef ff_lineno_ALREADY_DEFINED #undef yylineno #endif #ifndef ff_tables_fload_ALREADY_DEFINED #undef yytables_fload #endif #ifndef ff_tables_destroy_ALREADY_DEFINED #undef yytables_destroy #endif #ifndef ff_TABLES_NAME_ALREADY_DEFINED #undef yyTABLES_NAME #endif #line 273 "flex.l" #line 737 "flex_lexer.h" #undef ff_IN_HEADER #endif /* ff_HEADER_H */ ================================================ FILE: srcs/internal/mysql/parser/parser_typedef.h ================================================ #ifndef __PARSER_TYPEDEF_H__ #define __PARSER_TYPEDEF_H__ #include #ifndef YYtypeDEF_YY_SCANNER_T #define YYtypeDEF_YY_SCANNER_T typedef void* yyscan_t; #endif #define YYSTYPE FF_STYPE #define YYLTYPE FF_LTYPE struct FF_CUST_LTYPE { int first_line; int first_column; int last_line; int last_column; int total_column; // Length of the string in the SQL query string int string_length; // Parameters. // int param_id; std::vector param_list; }; #define FF_LTYPE FF_CUST_LTYPE #define FF_LTYPE_IS_DECLARED 1 #define YY_USER_ACTION \ yylloc->first_line = yylloc->last_line; \ yylloc->first_column = yylloc->last_column; \ for (int i = 0; yytext[i] != '\0'; i++) { \ yylloc->total_column++; \ yylloc->string_length++; \ if (yytext[i] == '\n') { \ yylloc->last_line++; \ yylloc->last_column = 0; \ } else { \ yylloc->last_column++; \ } \ } #endif ================================================ FILE: srcs/internal/mysql/srcs/ast.cpp ================================================ #include "../include/ast.h" #include #include "../include/define.h" #include "../include/utils.h" static string s_table_name; Node *generate_ast_node_by_type(IRTYPE type) { #define DECLARE_CASE(classname) \ if (type == k##classname) return new classname(); ALLCLASS(DECLARE_CASE); #undef DECLARE_CASE return NULL; } NODETYPE get_nodetype_by_string(string s) { #define DECLARE_CASE(datatypename) \ if (s == #datatypename) return k##datatypename; ALLCLASS(DECLARE_CASE); #undef DECLARE_CASE return kUnknown; } string get_string_by_nodetype(NODETYPE tt) { #define DECLARE_CASE(datatypename) \ if (tt == k##datatypename) return string(#datatypename); ALLCLASS(DECLARE_CASE); #undef DECLARE_CASE return string(""); } string get_string_by_datatype(DATATYPE tt) { #define DECLARE_CASE(datatypename) \ if (tt == k##datatypename) return string(#datatypename); ALLDATATYPE(DECLARE_CASE); #undef DECLARE_CASE return string(""); } DATATYPE get_datatype_by_string(string s) { #define DECLARE_CASE(datatypename) \ if (s == #datatypename) return k##datatypename; ALLDATATYPE(DECLARE_CASE); #undef DECLARE_CASE return kDataWhatever; } void deep_delete(IR *root) { if (root->left_) deep_delete(root->left_); if (root->right_) deep_delete(root->right_); if (root->op_) delete root->op_; delete root; } IR *deep_copy(const IR *root) { IR *left = NULL, *right = NULL, *copy_res; if (root->left_) left = deep_copy(root->left_); // do you have a second version for // deep_copy that accept only one argument? if (root->right_) right = deep_copy(root->right_); // no I forget to update here copy_res = new IR(root, left, right); return copy_res; } string IR::to_string() { auto res = to_string_core(); trim_string(res); return res; } string IR::to_string_core() { // cout << get_string_by_nodetype(this->type_) << endl; switch (type_) { case kIntLiteral: return std::to_string(int_val_); case kFloatLiteral: return std::to_string(float_val_); case kIdentifier: return str_val_; case kStringLiteral: return str_val_; } string res; if (op_ != NULL) { // if(op_->prefix_ == NULL) /// cout << "duck NULL prefix" << endl; // cout << "OP_Prex: " << op_->prefix_ << endl; res += op_->prefix_ + " "; } // cout << "OP_1_" << op_ << endl; if (left_ != NULL) // res += left_->to_string() + " "; res += left_->to_string_core() + " "; // cout << "OP_2_" << op_ << endl; if (op_ != NULL) res += op_->middle_ + " "; // cout << "OP_3_" << op_ << endl; if (right_ != NULL) // res += right_->to_string() + " "; res += right_->to_string_core() + " "; // cout << "OP_4_" << op_ << endl; if (op_ != NULL) res += op_->suffix_; // cout << "duck" << endl; // cout << "RETURN" << endl; return res; } IR *Node::translate(vector &v_ir_collector) { return NULL; } IR *Program::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(stmtlist_); res = new IR(kProgram, OP3("", "", ""), tmp1); TRANSLATEEND } void Program::deep_delete() { SAFEDELETE(stmtlist_); delete this; }; void Program::generate() { GENERATESTART(1) stmtlist_ = new Stmtlist(); stmtlist_->generate(); GENERATEEND } IR *Stmtlist::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(stmt_); auto tmp2 = SAFETRANSLATE(stmtlist_); res = new IR(kStmtlist, OP3("", ";", ""), tmp1, tmp2); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(stmt_); res = new IR(kStmtlist, OP3("", ";", ""), tmp1); CASEEND SWITCHEND TRANSLATEEND } void Stmtlist::deep_delete() { SAFEDELETE(stmt_); SAFEDELETE(stmtlist_); delete this; }; void Stmtlist::generate() { GENERATESTART(200) SWITCHSTART CASESTART(0) stmt_ = new Stmt(); stmt_->generate(); stmtlist_ = new Stmtlist(); stmtlist_->generate(); CASEEND CASESTART(1) stmt_ = new Stmt(); stmt_->generate(); CASEEND default: { int tmp_case_idx = rand() % 1; switch (tmp_case_idx) { CASESTART(0) stmt_ = new Stmt(); stmt_->generate(); case_idx_ = 1; CASEEND } } } GENERATEEND } IR *Stmt::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(create_stmt_); res = new IR(kStmt, OP3("", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(drop_stmt_); res = new IR(kStmt, OP3("", "", ""), tmp1); CASEEND CASESTART(2) auto tmp1 = SAFETRANSLATE(select_stmt_); res = new IR(kStmt, OP3("", "", ""), tmp1); CASEEND CASESTART(3) auto tmp1 = SAFETRANSLATE(update_stmt_); res = new IR(kStmt, OP3("", "", ""), tmp1); CASEEND CASESTART(4) auto tmp1 = SAFETRANSLATE(insert_stmt_); res = new IR(kStmt, OP3("", "", ""), tmp1); CASEEND CASESTART(5) auto tmp1 = SAFETRANSLATE(alter_stmt_); res = new IR(kStmt, OP3("", "", ""), tmp1); CASEEND SWITCHEND TRANSLATEEND } void Stmt::deep_delete() { SAFEDELETE(insert_stmt_); SAFEDELETE(drop_stmt_); SAFEDELETE(create_stmt_); SAFEDELETE(select_stmt_); SAFEDELETE(alter_stmt_); SAFEDELETE(update_stmt_); delete this; }; void Stmt::generate() { GENERATESTART(6) SWITCHSTART CASESTART(0) create_stmt_ = new CreateStmt(); create_stmt_->generate(); CASEEND CASESTART(1) drop_stmt_ = new DropStmt(); drop_stmt_->generate(); CASEEND CASESTART(2) select_stmt_ = new SelectStmt(); select_stmt_->generate(); CASEEND CASESTART(3) update_stmt_ = new UpdateStmt(); update_stmt_->generate(); CASEEND CASESTART(4) insert_stmt_ = new InsertStmt(); insert_stmt_->generate(); CASEEND CASESTART(5) alter_stmt_ = new AlterStmt(); alter_stmt_->generate(); CASEEND SWITCHEND GENERATEEND } IR *CreateStmt::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(create_table_stmt_); res = new IR(kCreateStmt, OP3("", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(create_index_stmt_); res = new IR(kCreateStmt, OP3("", "", ""), tmp1); CASEEND CASESTART(2) auto tmp1 = SAFETRANSLATE(create_trigger_stmt_); res = new IR(kCreateStmt, OP3("", "", ""), tmp1); CASEEND CASESTART(3) auto tmp1 = SAFETRANSLATE(create_view_stmt_); res = new IR(kCreateStmt, OP3("", "", ""), tmp1); CASEEND SWITCHEND TRANSLATEEND } void CreateStmt::deep_delete() { SAFEDELETE(create_trigger_stmt_); SAFEDELETE(create_index_stmt_); SAFEDELETE(create_view_stmt_); SAFEDELETE(create_table_stmt_); delete this; }; void CreateStmt::generate() { GENERATESTART(4) SWITCHSTART CASESTART(0) create_table_stmt_ = new CreateTableStmt(); create_table_stmt_->generate(); CASEEND CASESTART(1) create_index_stmt_ = new CreateIndexStmt(); create_index_stmt_->generate(); CASEEND CASESTART(2) create_trigger_stmt_ = new CreateTriggerStmt(); create_trigger_stmt_->generate(); CASEEND CASESTART(3) create_view_stmt_ = new CreateViewStmt(); create_view_stmt_->generate(); CASEEND SWITCHEND GENERATEEND } IR *DropStmt::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(drop_index_stmt_); res = new IR(kDropStmt, OP3("", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(drop_table_stmt_); res = new IR(kDropStmt, OP3("", "", ""), tmp1); CASEEND CASESTART(2) auto tmp1 = SAFETRANSLATE(drop_trigger_stmt_); res = new IR(kDropStmt, OP3("", "", ""), tmp1); CASEEND CASESTART(3) auto tmp1 = SAFETRANSLATE(drop_view_stmt_); res = new IR(kDropStmt, OP3("", "", ""), tmp1); CASEEND SWITCHEND TRANSLATEEND } void DropStmt::deep_delete() { SAFEDELETE(drop_table_stmt_); SAFEDELETE(drop_view_stmt_); SAFEDELETE(drop_index_stmt_); SAFEDELETE(drop_trigger_stmt_); delete this; }; void DropStmt::generate() { GENERATESTART(4) SWITCHSTART CASESTART(0) drop_index_stmt_ = new DropIndexStmt(); drop_index_stmt_->generate(); CASEEND CASESTART(1) drop_table_stmt_ = new DropTableStmt(); drop_table_stmt_->generate(); CASEEND CASESTART(2) drop_trigger_stmt_ = new DropTriggerStmt(); drop_trigger_stmt_->generate(); CASEEND CASESTART(3) drop_view_stmt_ = new DropViewStmt(); drop_view_stmt_->generate(); CASEEND SWITCHEND GENERATEEND } IR *AlterStmt::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(table_name_); auto tmp2 = SAFETRANSLATE(alter_action_); res = new IR(kAlterStmt, OP3("ALTER TABLE", "", ""), tmp1, tmp2); TRANSLATEEND } void AlterStmt::deep_delete() { SAFEDELETE(alter_action_); SAFEDELETE(table_name_); delete this; }; void AlterStmt::generate() { GENERATESTART(1) table_name_ = new TableName(); table_name_->generate(); alter_action_ = new AlterAction(); alter_action_->generate(); GENERATEEND } IR *SelectStmt::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(select_no_parens_); res = new IR(kSelectStmt, OP3("", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(select_with_parens_); res = new IR(kSelectStmt, OP3("", "", ""), tmp1); CASEEND SWITCHEND TRANSLATEEND } void SelectStmt::deep_delete() { SAFEDELETE(select_no_parens_); SAFEDELETE(select_with_parens_); delete this; }; void SelectStmt::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) select_no_parens_ = new SelectNoParens(); select_no_parens_->generate(); CASEEND CASESTART(1) select_with_parens_ = new SelectWithParens(); select_with_parens_->generate(); CASEEND SWITCHEND GENERATEEND } IR *SelectWithParens::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(select_no_parens_); res = new IR(kSelectWithParens, OP3("(", ")", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(select_with_parens_); res = new IR(kSelectWithParens, OP3("(", ")", ""), tmp1); CASEEND SWITCHEND TRANSLATEEND } void SelectWithParens::deep_delete() { SAFEDELETE(select_no_parens_); SAFEDELETE(select_with_parens_); delete this; }; void SelectWithParens::generate() { GENERATESTART(200) SWITCHSTART CASESTART(0) select_no_parens_ = new SelectNoParens(); select_no_parens_->generate(); CASEEND CASESTART(1) select_with_parens_ = new SelectWithParens(); select_with_parens_->generate(); CASEEND default: { int tmp_case_idx = rand() % 1; switch (tmp_case_idx) { CASESTART(0) select_no_parens_ = new SelectNoParens(); select_no_parens_->generate(); case_idx_ = 0; CASEEND } } } GENERATEEND } IR *SelectNoParens::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(opt_with_clause_); auto tmp2 = SAFETRANSLATE(select_clause_list_); auto tmp3 = SAFETRANSLATE(opt_order_clause_); auto tmp4 = SAFETRANSLATE(opt_limit_clause_); auto tmp5 = new IR(kUnknown, OP3("", "", ""), tmp1, tmp2); PUSH(tmp5); auto tmp6 = new IR(kUnknown, OP3("", "", ""), tmp5, tmp3); PUSH(tmp6); res = new IR(kSelectNoParens, OP3("", "", ""), tmp6, tmp4); TRANSLATEEND } void SelectNoParens::deep_delete() { SAFEDELETE(select_clause_list_); SAFEDELETE(opt_with_clause_); SAFEDELETE(opt_order_clause_); SAFEDELETE(opt_limit_clause_); delete this; }; void SelectNoParens::generate() { GENERATESTART(1) opt_with_clause_ = new OptWithClause(); opt_with_clause_->generate(); select_clause_list_ = new SelectClauseList(); select_clause_list_->generate(); opt_order_clause_ = new OptOrderClause(); opt_order_clause_->generate(); opt_limit_clause_ = new OptLimitClause(); opt_limit_clause_->generate(); GENERATEEND } IR *SelectClauseList::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(select_clause_); res = new IR(kSelectClauseList, OP3("", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(select_clause_); auto tmp2 = SAFETRANSLATE(combine_clause_); auto tmp3 = SAFETRANSLATE(select_clause_list_); auto tmp4 = new IR(kUnknown, OP3("", "", ""), tmp1, tmp2); PUSH(tmp4); res = new IR(kSelectClauseList, OP3("", "", ""), tmp4, tmp3); CASEEND SWITCHEND TRANSLATEEND } void SelectClauseList::deep_delete() { SAFEDELETE(select_clause_list_); SAFEDELETE(combine_clause_); SAFEDELETE(select_clause_); delete this; }; void SelectClauseList::generate() { GENERATESTART(200) SWITCHSTART CASESTART(0) select_clause_ = new SelectClause(); select_clause_->generate(); CASEEND CASESTART(1) select_clause_ = new SelectClause(); select_clause_->generate(); combine_clause_ = new CombineClause(); combine_clause_->generate(); select_clause_list_ = new SelectClauseList(); select_clause_list_->generate(); CASEEND default: { int tmp_case_idx = rand() % 1; switch (tmp_case_idx) { CASESTART(0) select_clause_ = new SelectClause(); select_clause_->generate(); case_idx_ = 0; CASEEND } } } GENERATEEND } IR *SelectClause::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(opt_all_or_distinct_); auto tmp2 = SAFETRANSLATE(select_target_); auto tmp3 = SAFETRANSLATE(opt_from_clause_); auto tmp4 = SAFETRANSLATE(opt_where_clause_); auto tmp5 = SAFETRANSLATE(opt_group_clause_); auto tmp6 = SAFETRANSLATE(opt_window_clause_); auto tmp7 = new IR(kUnknown, OP3("SELECT", "", ""), tmp1, tmp2); PUSH(tmp7); auto tmp8 = new IR(kUnknown, OP3("", "", ""), tmp7, tmp3); PUSH(tmp8); auto tmp9 = new IR(kUnknown, OP3("", "", ""), tmp8, tmp4); PUSH(tmp9); auto tmp10 = new IR(kUnknown, OP3("", "", ""), tmp9, tmp5); PUSH(tmp10); res = new IR(kSelectClause, OP3("", "", ""), tmp10, tmp6); TRANSLATEEND } void SelectClause::deep_delete() { SAFEDELETE(opt_group_clause_); SAFEDELETE(opt_all_or_distinct_); SAFEDELETE(opt_from_clause_); SAFEDELETE(opt_window_clause_); SAFEDELETE(select_target_); SAFEDELETE(opt_where_clause_); delete this; }; void SelectClause::generate() { GENERATESTART(1) opt_all_or_distinct_ = new OptAllOrDistinct(); opt_all_or_distinct_->generate(); select_target_ = new SelectTarget(); select_target_->generate(); opt_from_clause_ = new OptFromClause(); opt_from_clause_->generate(); opt_where_clause_ = new OptWhereClause(); opt_where_clause_->generate(); opt_group_clause_ = new OptGroupClause(); opt_group_clause_->generate(); opt_window_clause_ = new OptWindowClause(); opt_window_clause_->generate(); GENERATEEND } IR *CombineClause::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kCombineClause, OP3("UNION", "", "")); CASEEND CASESTART(1) res = new IR(kCombineClause, OP3("INTERSECT", "", "")); CASEEND CASESTART(2) res = new IR(kCombineClause, OP3("EXCEPT", "", "")); CASEEND SWITCHEND TRANSLATEEND } void CombineClause::deep_delete() { delete this; }; void CombineClause::generate(){GENERATESTART(3) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND CASESTART(2) CASEEND SWITCHEND GENERATEEND} IR *OptFromClause::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(from_clause_); res = new IR(kOptFromClause, OP3("", "", ""), tmp1); CASEEND CASESTART(1) res = new IR(kOptFromClause, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptFromClause::deep_delete() { SAFEDELETE(from_clause_); delete this; }; void OptFromClause::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) from_clause_ = new FromClause(); from_clause_->generate(); CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND } IR *SelectTarget::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(expr_list_); res = new IR(kSelectTarget, OP3("", "", ""), tmp1); TRANSLATEEND } void SelectTarget::deep_delete() { SAFEDELETE(expr_list_); delete this; }; void SelectTarget::generate() { GENERATESTART(1) expr_list_ = new ExprList(); expr_list_->generate(); GENERATEEND } IR *OptWindowClause::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(window_clause_); res = new IR(kOptWindowClause, OP3("", "", ""), tmp1); CASEEND CASESTART(1) res = new IR(kOptWindowClause, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptWindowClause::deep_delete() { SAFEDELETE(window_clause_); delete this; }; void OptWindowClause::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) window_clause_ = new WindowClause(); window_clause_->generate(); CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND } IR *WindowClause::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(window_def_list_); res = new IR(kWindowClause, OP3("WINDOW", "", ""), tmp1); TRANSLATEEND } void WindowClause::deep_delete() { SAFEDELETE(window_def_list_); delete this; }; void WindowClause::generate() { GENERATESTART(1) window_def_list_ = new WindowDefList(); window_def_list_->generate(); GENERATEEND } IR *WindowDefList::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(window_def_); res = new IR(kWindowDefList, OP3("", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(window_def_); auto tmp2 = SAFETRANSLATE(window_def_list_); res = new IR(kWindowDefList, OP3("", ",", ""), tmp1, tmp2); CASEEND SWITCHEND TRANSLATEEND } void WindowDefList::deep_delete() { SAFEDELETE(window_def_); SAFEDELETE(window_def_list_); delete this; }; void WindowDefList::generate() { GENERATESTART(200) SWITCHSTART CASESTART(0) window_def_ = new WindowDef(); window_def_->generate(); CASEEND CASESTART(1) window_def_ = new WindowDef(); window_def_->generate(); window_def_list_ = new WindowDefList(); window_def_list_->generate(); CASEEND default: { int tmp_case_idx = rand() % 1; switch (tmp_case_idx) { CASESTART(0) window_def_ = new WindowDef(); window_def_->generate(); case_idx_ = 0; CASEEND } } } GENERATEEND } IR *WindowDef::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(window_name_); auto tmp2 = SAFETRANSLATE(window_); res = new IR(kWindowDef, OP3("", "AS (", ")"), tmp1, tmp2); TRANSLATEEND } void WindowDef::deep_delete() { SAFEDELETE(window_); SAFEDELETE(window_name_); delete this; }; void WindowDef::generate() { GENERATESTART(1) window_name_ = new WindowName(); window_name_->generate(); window_ = new Window(); window_->generate(); GENERATEEND } IR *WindowName::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(identifier_); res = new IR(kWindowName, OP3("", "", ""), tmp1); TRANSLATEEND } void WindowName::deep_delete() { SAFEDELETE(identifier_); delete this; }; void WindowName::generate() { GENERATESTART(1) identifier_ = new Identifier(); identifier_->generate(); GENERATEEND } IR *Window::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(opt_exist_window_name_); auto tmp2 = SAFETRANSLATE(opt_partition_); auto tmp3 = SAFETRANSLATE(opt_order_clause_); auto tmp4 = SAFETRANSLATE(opt_frame_clause_); auto tmp5 = new IR(kUnknown, OP3("", "", ""), tmp1, tmp2); PUSH(tmp5); auto tmp6 = new IR(kUnknown, OP3("", "", ""), tmp5, tmp3); PUSH(tmp6); res = new IR(kWindow, OP3("", "", ""), tmp6, tmp4); TRANSLATEEND } void Window::deep_delete() { SAFEDELETE(opt_exist_window_name_); SAFEDELETE(opt_frame_clause_); SAFEDELETE(opt_partition_); SAFEDELETE(opt_order_clause_); delete this; }; void Window::generate() { GENERATESTART(1) opt_exist_window_name_ = new OptExistWindowName(); opt_exist_window_name_->generate(); opt_partition_ = new OptPartition(); opt_partition_->generate(); opt_order_clause_ = new OptOrderClause(); opt_order_clause_->generate(); opt_frame_clause_ = new OptFrameClause(); opt_frame_clause_->generate(); GENERATEEND } IR *OptPartition::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(expr_list_); res = new IR(kOptPartition, OP3("PARTITION BY", "", ""), tmp1); CASEEND CASESTART(1) res = new IR(kOptPartition, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptPartition::deep_delete() { SAFEDELETE(expr_list_); delete this; }; void OptPartition::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) expr_list_ = new ExprList(); expr_list_->generate(); CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND } IR *OptFrameClause::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(range_or_rows_); auto tmp2 = SAFETRANSLATE(frame_bound_start_); res = new IR(kOptFrameClause, OP3("", "", ""), tmp1, tmp2); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(range_or_rows_); auto tmp2 = SAFETRANSLATE(frame_bound_start_); auto tmp3 = SAFETRANSLATE(frame_bound_end_); auto tmp4 = new IR(kUnknown, OP3("", "BETWEEN", "AND"), tmp1, tmp2); PUSH(tmp4); res = new IR(kOptFrameClause, OP3("", "", ""), tmp4, tmp3); CASEEND CASESTART(2) res = new IR(kOptFrameClause, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptFrameClause::deep_delete() { SAFEDELETE(frame_bound_start_); SAFEDELETE(range_or_rows_); SAFEDELETE(frame_bound_end_); delete this; }; void OptFrameClause::generate() { GENERATESTART(3) SWITCHSTART CASESTART(0) range_or_rows_ = new RangeOrRows(); range_or_rows_->generate(); frame_bound_start_ = new FrameBoundStart(); frame_bound_start_->generate(); CASEEND CASESTART(1) range_or_rows_ = new RangeOrRows(); range_or_rows_->generate(); frame_bound_start_ = new FrameBoundStart(); frame_bound_start_->generate(); frame_bound_end_ = new FrameBoundEnd(); frame_bound_end_->generate(); CASEEND CASESTART(2) CASEEND SWITCHEND GENERATEEND } IR *RangeOrRows::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kRangeOrRows, OP3("RANGE", "", "")); CASEEND CASESTART(1) res = new IR(kRangeOrRows, OP3("ROWS", "", "")); CASEEND CASESTART(2) res = new IR(kRangeOrRows, OP3("GROUPS", "", "")); CASEEND SWITCHEND TRANSLATEEND } void RangeOrRows::deep_delete() { delete this; }; void RangeOrRows::generate(){GENERATESTART(3) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND CASESTART(2) CASEEND SWITCHEND GENERATEEND} IR *FrameBoundStart::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(frame_bound_); res = new IR(kFrameBoundStart, OP3("", "", ""), tmp1); CASEEND CASESTART(1) res = new IR(kFrameBoundStart, OP3("UNBOUNDED PRECEDING", "", "")); CASEEND SWITCHEND TRANSLATEEND } void FrameBoundStart::deep_delete() { SAFEDELETE(frame_bound_); delete this; }; void FrameBoundStart::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) frame_bound_ = new FrameBound(); frame_bound_->generate(); CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND } IR *FrameBoundEnd::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(frame_bound_); res = new IR(kFrameBoundEnd, OP3("", "", ""), tmp1); CASEEND CASESTART(1) res = new IR(kFrameBoundEnd, OP3("UNBOUNDED FOLLOWING", "", "")); CASEEND SWITCHEND TRANSLATEEND } void FrameBoundEnd::deep_delete() { SAFEDELETE(frame_bound_); delete this; }; void FrameBoundEnd::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) frame_bound_ = new FrameBound(); frame_bound_->generate(); CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND } IR *FrameBound::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(expr_); res = new IR(kFrameBound, OP3("", "PRECEDING", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(expr_); res = new IR(kFrameBound, OP3("", "FOLLOWING", ""), tmp1); CASEEND CASESTART(2) res = new IR(kFrameBound, OP3("CURRENT ROW", "", "")); CASEEND SWITCHEND TRANSLATEEND } void FrameBound::deep_delete() { SAFEDELETE(expr_); delete this; }; void FrameBound::generate() { GENERATESTART(3) SWITCHSTART CASESTART(0) expr_ = new Expr(); expr_->generate(); CASEEND CASESTART(1) expr_ = new Expr(); expr_->generate(); CASEEND CASESTART(2) CASEEND SWITCHEND GENERATEEND } IR *OptExistWindowName::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(identifier_); res = new IR(kOptExistWindowName, OP3("", "", ""), tmp1); CASEEND CASESTART(1) res = new IR(kOptExistWindowName, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptExistWindowName::deep_delete() { SAFEDELETE(identifier_); delete this; }; void OptExistWindowName::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) identifier_ = new Identifier(); identifier_->generate(); CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND } IR *OptGroupClause::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(expr_list_); auto tmp2 = SAFETRANSLATE(opt_having_clause_); res = new IR(kOptGroupClause, OP3("GROUP BY", "", ""), tmp1, tmp2); CASEEND CASESTART(1) res = new IR(kOptGroupClause, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptGroupClause::deep_delete() { SAFEDELETE(expr_list_); SAFEDELETE(opt_having_clause_); delete this; }; void OptGroupClause::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) expr_list_ = new ExprList(); expr_list_->generate(); opt_having_clause_ = new OptHavingClause(); opt_having_clause_->generate(); CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND } IR *OptHavingClause::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(expr_); res = new IR(kOptHavingClause, OP3("HAVING", "", ""), tmp1); CASEEND CASESTART(1) res = new IR(kOptHavingClause, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptHavingClause::deep_delete() { SAFEDELETE(expr_); delete this; }; void OptHavingClause::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) expr_ = new Expr(); expr_->generate(); CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND } IR *OptWhereClause::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(where_clause_); res = new IR(kOptWhereClause, OP3("", "", ""), tmp1); CASEEND CASESTART(1) res = new IR(kOptWhereClause, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptWhereClause::deep_delete() { SAFEDELETE(where_clause_); delete this; }; void OptWhereClause::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) where_clause_ = new WhereClause(); where_clause_->generate(); CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND } IR *WhereClause::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(expr_); res = new IR(kWhereClause, OP3("WHERE", "", ""), tmp1); TRANSLATEEND } void WhereClause::deep_delete() { SAFEDELETE(expr_); delete this; }; void WhereClause::generate() { GENERATESTART(1) expr_ = new Expr(); expr_->generate(); GENERATEEND } IR *FromClause::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(table_ref_); res = new IR(kFromClause, OP3("FROM", "", ""), tmp1); TRANSLATEEND } void FromClause::deep_delete() { SAFEDELETE(table_ref_); delete this; }; void FromClause::generate() { GENERATESTART(1) table_ref_ = new TableRef(); table_ref_->generate(); GENERATEEND } IR *TableRef::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(opt_table_prefix_); auto tmp2 = SAFETRANSLATE(table_name_); auto tmp3 = SAFETRANSLATE(opt_as_alias_); auto tmp4 = SAFETRANSLATE(opt_index_); auto tmp5 = SAFETRANSLATE(opt_on_); auto tmp6 = SAFETRANSLATE(opt_using_); auto tmp7 = new IR(kUnknown, OP3("", "", ""), tmp1, tmp2); PUSH(tmp7); auto tmp8 = new IR(kUnknown, OP3("", "", ""), tmp7, tmp3); PUSH(tmp8); auto tmp9 = new IR(kUnknown, OP3("", "", ""), tmp8, tmp4); PUSH(tmp9); auto tmp10 = new IR(kUnknown, OP3("", "", ""), tmp9, tmp5); PUSH(tmp10); res = new IR(kTableRef, OP3("", "", ""), tmp10, tmp6); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(opt_table_prefix_); auto tmp2 = SAFETRANSLATE(function_name_); auto tmp3 = SAFETRANSLATE(expr_list_); auto tmp4 = SAFETRANSLATE(opt_as_alias_); auto tmp5 = SAFETRANSLATE(opt_on_); auto tmp6 = SAFETRANSLATE(opt_using_); auto tmp7 = new IR(kUnknown, OP3("", "", "("), tmp1, tmp2); PUSH(tmp7); auto tmp8 = new IR(kUnknown, OP3("", "", ")"), tmp7, tmp3); PUSH(tmp8); auto tmp9 = new IR(kUnknown, OP3("", "", ""), tmp8, tmp4); PUSH(tmp9); auto tmp10 = new IR(kUnknown, OP3("", "", ""), tmp9, tmp5); PUSH(tmp10); res = new IR(kTableRef, OP3("", "", ""), tmp10, tmp6); CASEEND CASESTART(2) auto tmp1 = SAFETRANSLATE(opt_table_prefix_); auto tmp2 = SAFETRANSLATE(select_no_parens_); auto tmp3 = SAFETRANSLATE(opt_as_alias_); auto tmp4 = SAFETRANSLATE(opt_on_); auto tmp5 = SAFETRANSLATE(opt_using_); auto tmp6 = new IR(kUnknown, OP3("", "(", ")"), tmp1, tmp2); PUSH(tmp6); auto tmp7 = new IR(kUnknown, OP3("", "", ""), tmp6, tmp3); PUSH(tmp7); auto tmp8 = new IR(kUnknown, OP3("", "", ""), tmp7, tmp4); PUSH(tmp8); res = new IR(kTableRef, OP3("", "", ""), tmp8, tmp5); CASEEND CASESTART(3) auto tmp1 = SAFETRANSLATE(opt_table_prefix_); auto tmp2 = SAFETRANSLATE(table_ref_); auto tmp3 = SAFETRANSLATE(opt_as_alias_); auto tmp4 = SAFETRANSLATE(opt_on_); auto tmp5 = SAFETRANSLATE(opt_using_); auto tmp6 = new IR(kUnknown, OP3("", "(", ")"), tmp1, tmp2); PUSH(tmp6); auto tmp7 = new IR(kUnknown, OP3("", "", ""), tmp6, tmp3); PUSH(tmp7); auto tmp8 = new IR(kUnknown, OP3("", "", ""), tmp7, tmp4); PUSH(tmp8); res = new IR(kTableRef, OP3("", "", ""), tmp8, tmp5); CASEEND SWITCHEND TRANSLATEEND } void TableRef::deep_delete() { SAFEDELETE(opt_as_alias_); SAFEDELETE(opt_table_prefix_); SAFEDELETE(expr_list_); SAFEDELETE(opt_index_); SAFEDELETE(opt_on_); SAFEDELETE(select_no_parens_); SAFEDELETE(opt_using_); SAFEDELETE(table_name_); SAFEDELETE(table_ref_); SAFEDELETE(function_name_); delete this; }; void TableRef::generate() { GENERATESTART(400) SWITCHSTART CASESTART(0) opt_table_prefix_ = new OptTablePrefix(); opt_table_prefix_->generate(); table_name_ = new TableName(); table_name_->generate(); opt_as_alias_ = new OptAsAlias(); opt_as_alias_->generate(); opt_index_ = new OptIndex(); opt_index_->generate(); opt_on_ = new OptOn(); opt_on_->generate(); opt_using_ = new OptUsing(); opt_using_->generate(); CASEEND CASESTART(1) opt_table_prefix_ = new OptTablePrefix(); opt_table_prefix_->generate(); function_name_ = new FunctionName(); function_name_->generate(); expr_list_ = new ExprList(); expr_list_->generate(); opt_as_alias_ = new OptAsAlias(); opt_as_alias_->generate(); opt_on_ = new OptOn(); opt_on_->generate(); opt_using_ = new OptUsing(); opt_using_->generate(); CASEEND CASESTART(2) opt_table_prefix_ = new OptTablePrefix(); opt_table_prefix_->generate(); select_no_parens_ = new SelectNoParens(); select_no_parens_->generate(); opt_as_alias_ = new OptAsAlias(); opt_as_alias_->generate(); opt_on_ = new OptOn(); opt_on_->generate(); opt_using_ = new OptUsing(); opt_using_->generate(); CASEEND CASESTART(3) opt_table_prefix_ = new OptTablePrefix(); opt_table_prefix_->generate(); table_ref_ = new TableRef(); table_ref_->generate(); opt_as_alias_ = new OptAsAlias(); opt_as_alias_->generate(); opt_on_ = new OptOn(); opt_on_->generate(); opt_using_ = new OptUsing(); opt_using_->generate(); CASEEND default: { int tmp_case_idx = rand() % 3; switch (tmp_case_idx) { CASESTART(0) opt_table_prefix_ = new OptTablePrefix(); opt_table_prefix_->generate(); table_name_ = new TableName(); table_name_->generate(); opt_as_alias_ = new OptAsAlias(); opt_as_alias_->generate(); opt_index_ = new OptIndex(); opt_index_->generate(); opt_on_ = new OptOn(); opt_on_->generate(); opt_using_ = new OptUsing(); opt_using_->generate(); case_idx_ = 0; CASEEND CASESTART(1) opt_table_prefix_ = new OptTablePrefix(); opt_table_prefix_->generate(); function_name_ = new FunctionName(); function_name_->generate(); expr_list_ = new ExprList(); expr_list_->generate(); opt_as_alias_ = new OptAsAlias(); opt_as_alias_->generate(); opt_on_ = new OptOn(); opt_on_->generate(); opt_using_ = new OptUsing(); opt_using_->generate(); case_idx_ = 1; CASEEND CASESTART(2) opt_table_prefix_ = new OptTablePrefix(); opt_table_prefix_->generate(); select_no_parens_ = new SelectNoParens(); select_no_parens_->generate(); opt_as_alias_ = new OptAsAlias(); opt_as_alias_->generate(); opt_on_ = new OptOn(); opt_on_->generate(); opt_using_ = new OptUsing(); opt_using_->generate(); case_idx_ = 2; CASEEND } } } GENERATEEND } IR *OptIndex::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(column_name_); res = new IR(kOptIndex, OP3("INDEXED BY", "", ""), tmp1); CASEEND CASESTART(1) res = new IR(kOptIndex, OP3("NOT INDEXED", "", "")); CASEEND CASESTART(2) res = new IR(kOptIndex, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptIndex::deep_delete() { SAFEDELETE(column_name_); delete this; }; void OptIndex::generate() { GENERATESTART(3) SWITCHSTART CASESTART(0) column_name_ = new ColumnName(); column_name_->generate(); CASEEND CASESTART(1) CASEEND CASESTART(2) CASEEND SWITCHEND GENERATEEND } IR *OptOn::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(expr_); res = new IR(kOptOn, OP3("ON", "", ""), tmp1); CASEEND CASESTART(1) res = new IR(kOptOn, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptOn::deep_delete() { SAFEDELETE(expr_); delete this; }; void OptOn::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) expr_ = new Expr(); expr_->generate(); CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND } IR *OptUsing::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(column_name_list_); res = new IR(kOptUsing, OP3("USING (", ")", ""), tmp1); CASEEND CASESTART(1) res = new IR(kOptUsing, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptUsing::deep_delete() { SAFEDELETE(column_name_list_); delete this; }; void OptUsing::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) column_name_list_ = new ColumnNameList(); column_name_list_->generate(); CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND } IR *ColumnNameList::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(column_name_); res = new IR(kColumnNameList, OP3("", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(column_name_); auto tmp2 = SAFETRANSLATE(column_name_list_); res = new IR(kColumnNameList, OP3("", ",", ""), tmp1, tmp2); CASEEND SWITCHEND TRANSLATEEND } void ColumnNameList::deep_delete() { SAFEDELETE(column_name_list_); SAFEDELETE(column_name_); delete this; }; void ColumnNameList::generate() { GENERATESTART(200) SWITCHSTART CASESTART(0) column_name_ = new ColumnName(); column_name_->generate(); CASEEND CASESTART(1) column_name_ = new ColumnName(); column_name_->generate(); column_name_list_ = new ColumnNameList(); column_name_list_->generate(); CASEEND default: { int tmp_case_idx = rand() % 1; switch (tmp_case_idx) { CASESTART(0) column_name_ = new ColumnName(); column_name_->generate(); case_idx_ = 0; CASEEND } } } GENERATEEND } IR *OptTablePrefix::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(table_ref_); auto tmp2 = SAFETRANSLATE(join_op_); res = new IR(kOptTablePrefix, OP3("", "", ""), tmp1, tmp2); CASEEND CASESTART(1) res = new IR(kOptTablePrefix, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptTablePrefix::deep_delete() { SAFEDELETE(join_op_); SAFEDELETE(table_ref_); delete this; }; void OptTablePrefix::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) table_ref_ = new TableRef(); table_ref_->generate(); join_op_ = new JoinOp(); join_op_->generate(); CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND } IR *JoinOp::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kJoinOp, OP3(",", "", "")); CASEEND CASESTART(1) res = new IR(kJoinOp, OP3("JOIN", "", "")); CASEEND CASESTART(2) auto tmp1 = SAFETRANSLATE(opt_join_type_); res = new IR(kJoinOp, OP3("NATURAL", "JOIN", ""), tmp1); CASEEND SWITCHEND TRANSLATEEND } void JoinOp::deep_delete() { SAFEDELETE(opt_join_type_); delete this; }; void JoinOp::generate() { GENERATESTART(3) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND CASESTART(2) opt_join_type_ = new OptJoinType(); opt_join_type_->generate(); CASEEND SWITCHEND GENERATEEND } IR *OptJoinType::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kOptJoinType, OP3("LEFT", "", "")); CASEEND CASESTART(1) res = new IR(kOptJoinType, OP3("LEFT OUTER", "", "")); CASEEND CASESTART(2) res = new IR(kOptJoinType, OP3("INNER", "", "")); CASEEND CASESTART(3) res = new IR(kOptJoinType, OP3("CROSS", "", "")); CASEEND CASESTART(4) res = new IR(kOptJoinType, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptJoinType::deep_delete() { delete this; }; void OptJoinType::generate(){GENERATESTART(5) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND CASESTART(2) CASEEND CASESTART(3) CASEEND CASESTART(4) CASEEND SWITCHEND GENERATEEND} IR *ExprList::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(expr_); auto tmp2 = SAFETRANSLATE(opt_as_alias_); auto tmp3 = SAFETRANSLATE(expr_list_); auto tmp4 = new IR(kUnknown, OP3("", "", ","), tmp1, tmp2); PUSH(tmp4); res = new IR(kExprList, OP3("", "", ""), tmp4, tmp3); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(expr_); auto tmp2 = SAFETRANSLATE(opt_as_alias_); res = new IR(kExprList, OP3("", "", ""), tmp1, tmp2); CASEEND SWITCHEND TRANSLATEEND } void ExprList::deep_delete() { SAFEDELETE(expr_); SAFEDELETE(opt_as_alias_); SAFEDELETE(expr_list_); delete this; }; void ExprList::generate() { GENERATESTART(200) SWITCHSTART CASESTART(0) expr_ = new Expr(); expr_->generate(); opt_as_alias_ = new OptAsAlias(); opt_as_alias_->generate(); expr_list_ = new ExprList(); expr_list_->generate(); CASEEND CASESTART(1) expr_ = new Expr(); expr_->generate(); opt_as_alias_ = new OptAsAlias(); opt_as_alias_->generate(); CASEEND default: { int tmp_case_idx = rand() % 1; switch (tmp_case_idx) { CASESTART(0) expr_ = new Expr(); expr_->generate(); opt_as_alias_ = new OptAsAlias(); opt_as_alias_->generate(); case_idx_ = 1; CASEEND } } } GENERATEEND } IR *OptLimitClause::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(limit_clause_); res = new IR(kOptLimitClause, OP3("", "", ""), tmp1); CASEEND CASESTART(1) res = new IR(kOptLimitClause, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptLimitClause::deep_delete() { SAFEDELETE(limit_clause_); delete this; }; void OptLimitClause::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) limit_clause_ = new LimitClause(); limit_clause_->generate(); CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND } IR *LimitClause::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(expr_1_); res = new IR(kLimitClause, OP3("LIMIT", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(expr_1_); auto tmp2 = SAFETRANSLATE(expr_2_); res = new IR(kLimitClause, OP3("LIMIT", "OFFSET", ""), tmp1, tmp2); CASEEND CASESTART(2) auto tmp1 = SAFETRANSLATE(expr_1_); auto tmp2 = SAFETRANSLATE(expr_2_); res = new IR(kLimitClause, OP3("LIMIT", ",", ""), tmp1, tmp2); CASEEND SWITCHEND TRANSLATEEND } void LimitClause::deep_delete() { SAFEDELETE(expr_1_); SAFEDELETE(expr_2_); delete this; }; void LimitClause::generate() { GENERATESTART(3) SWITCHSTART CASESTART(0) expr_1_ = new Expr(); expr_1_->generate(); CASEEND CASESTART(1) expr_1_ = new Expr(); expr_1_->generate(); expr_2_ = new Expr(); expr_2_->generate(); CASEEND CASESTART(2) expr_1_ = new Expr(); expr_1_->generate(); expr_2_ = new Expr(); expr_2_->generate(); CASEEND SWITCHEND GENERATEEND } IR *OptLimitRowCount::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(expr_); res = new IR(kOptLimitRowCount, OP3("LIMIT", "", ""), tmp1); CASEEND CASESTART(1) res = new IR(kOptLimitRowCount, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptLimitRowCount::deep_delete() { SAFEDELETE(expr_); delete this; }; void OptLimitRowCount::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) expr_ = new Expr(); expr_->generate(); CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND } IR *OptOrderClause::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(order_item_list_); res = new IR(kOptOrderClause, OP3("ORDER BY", "", ""), tmp1); CASEEND CASESTART(1) res = new IR(kOptOrderClause, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptOrderClause::deep_delete() { SAFEDELETE(order_item_list_); delete this; }; void OptOrderClause::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) order_item_list_ = new OrderItemList(); order_item_list_->generate(); CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND } IR *OptOrderNulls::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kOptOrderNulls, OP3("NULLS FIRST", "", "")); CASEEND CASESTART(1) res = new IR(kOptOrderNulls, OP3("NULLS LAST", "", "")); CASEEND CASESTART(2) res = new IR(kOptOrderNulls, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptOrderNulls::deep_delete() { delete this; }; void OptOrderNulls::generate(){GENERATESTART(3) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND CASESTART(2) CASEEND SWITCHEND GENERATEEND} IR *OrderItemList::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(order_item_); res = new IR(kOrderItemList, OP3("", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(order_item_); auto tmp2 = SAFETRANSLATE(order_item_list_); res = new IR(kOrderItemList, OP3("", ",", ""), tmp1, tmp2); CASEEND SWITCHEND TRANSLATEEND } void OrderItemList::deep_delete() { SAFEDELETE(order_item_); SAFEDELETE(order_item_list_); delete this; }; void OrderItemList::generate() { GENERATESTART(200) SWITCHSTART CASESTART(0) order_item_ = new OrderItem(); order_item_->generate(); CASEEND CASESTART(1) order_item_ = new OrderItem(); order_item_->generate(); order_item_list_ = new OrderItemList(); order_item_list_->generate(); CASEEND default: { int tmp_case_idx = rand() % 1; switch (tmp_case_idx) { CASESTART(0) order_item_ = new OrderItem(); order_item_->generate(); case_idx_ = 0; CASEEND } } } GENERATEEND } IR *OrderItem::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(expr_); auto tmp2 = SAFETRANSLATE(opt_order_behavior_); auto tmp3 = SAFETRANSLATE(opt_order_nulls_); auto tmp4 = new IR(kUnknown, OP3("", "", ""), tmp1, tmp2); PUSH(tmp4); res = new IR(kOrderItem, OP3("", "", ""), tmp4, tmp3); TRANSLATEEND } void OrderItem::deep_delete() { SAFEDELETE(expr_); SAFEDELETE(opt_order_nulls_); SAFEDELETE(opt_order_behavior_); delete this; }; void OrderItem::generate() { GENERATESTART(1) expr_ = new Expr(); expr_->generate(); opt_order_behavior_ = new OptOrderBehavior(); opt_order_behavior_->generate(); opt_order_nulls_ = new OptOrderNulls(); opt_order_nulls_->generate(); GENERATEEND } IR *OptOrderBehavior::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kOptOrderBehavior, OP3("ASC", "", "")); CASEEND CASESTART(1) res = new IR(kOptOrderBehavior, OP3("DESC", "", "")); CASEEND CASESTART(2) res = new IR(kOptOrderBehavior, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptOrderBehavior::deep_delete() { delete this; }; void OptOrderBehavior::generate(){ GENERATESTART(3) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND CASESTART(2) CASEEND SWITCHEND GENERATEEND} IR *OptWithClause::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(cte_table_list_); res = new IR(kOptWithClause, OP3("WITH", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(cte_table_list_); res = new IR(kOptWithClause, OP3("WITH RECURSIVE", "", ""), tmp1); CASEEND CASESTART(2) res = new IR(kOptWithClause, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptWithClause::deep_delete() { SAFEDELETE(cte_table_list_); delete this; }; void OptWithClause::generate() { GENERATESTART(3) SWITCHSTART CASESTART(0) cte_table_list_ = new CteTableList(); cte_table_list_->generate(); CASEEND CASESTART(1) cte_table_list_ = new CteTableList(); cte_table_list_->generate(); CASEEND CASESTART(2) CASEEND SWITCHEND GENERATEEND } IR *CteTableList::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(cte_table_); res = new IR(kCteTableList, OP3("", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(cte_table_); auto tmp2 = SAFETRANSLATE(cte_table_list_); res = new IR(kCteTableList, OP3("", ",", ""), tmp1, tmp2); CASEEND SWITCHEND TRANSLATEEND } void CteTableList::deep_delete() { SAFEDELETE(cte_table_list_); SAFEDELETE(cte_table_); delete this; }; void CteTableList::generate() { GENERATESTART(200) SWITCHSTART CASESTART(0) cte_table_ = new CteTable(); cte_table_->generate(); CASEEND CASESTART(1) cte_table_ = new CteTable(); cte_table_->generate(); cte_table_list_ = new CteTableList(); cte_table_list_->generate(); CASEEND default: { int tmp_case_idx = rand() % 1; switch (tmp_case_idx) { CASESTART(0) cte_table_ = new CteTable(); cte_table_->generate(); case_idx_ = 0; CASEEND } } } GENERATEEND } IR *CteTable::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(cte_table_name_); auto tmp2 = SAFETRANSLATE(select_stmt_); res = new IR(kCteTable, OP3("", "AS (", ")"), tmp1, tmp2); TRANSLATEEND } void CteTable::deep_delete() { SAFEDELETE(cte_table_name_); SAFEDELETE(select_stmt_); delete this; }; void CteTable::generate() { GENERATESTART(1) cte_table_name_ = new CteTableName(); cte_table_name_->generate(); select_stmt_ = new SelectStmt(); select_stmt_->generate(); GENERATEEND } IR *CteTableName::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(table_name_); auto tmp2 = SAFETRANSLATE(opt_column_name_list_p_); res = new IR(kCteTableName, OP3("", "", ""), tmp1, tmp2); TRANSLATEEND } void CteTableName::deep_delete() { SAFEDELETE(opt_column_name_list_p_); SAFEDELETE(table_name_); delete this; }; void CteTableName::generate() { GENERATESTART(1) table_name_ = new TableName(); table_name_->generate(); opt_column_name_list_p_ = new OptColumnNameListP(); opt_column_name_list_p_->generate(); GENERATEEND } IR *OptAllOrDistinct::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kOptAllOrDistinct, OP3("ALL", "", "")); CASEEND CASESTART(1) res = new IR(kOptAllOrDistinct, OP3("DISTINCT", "", "")); CASEEND CASESTART(2) res = new IR(kOptAllOrDistinct, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptAllOrDistinct::deep_delete() { delete this; }; void OptAllOrDistinct::generate(){ GENERATESTART(3) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND CASESTART(2) CASEEND SWITCHEND GENERATEEND} IR *CreateTableStmt::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(opt_temp_); auto tmp2 = SAFETRANSLATE(opt_if_not_exist_); auto tmp3 = SAFETRANSLATE(table_name_); auto tmp4 = SAFETRANSLATE(opt_table_option_list_); auto tmp5 = SAFETRANSLATE(opt_ignore_or_replace_); auto tmp6 = SAFETRANSLATE(select_stmt_); auto tmp7 = new IR(kUnknown, OP3("CREATE", "TABLE", ""), tmp1, tmp2); PUSH(tmp7); auto tmp8 = new IR(kUnknown, OP3("", "", ""), tmp7, tmp3); PUSH(tmp8); auto tmp9 = new IR(kUnknown, OP3("", "", ""), tmp8, tmp4); PUSH(tmp9); auto tmp10 = new IR(kUnknown, OP3("", "", "AS"), tmp9, tmp5); PUSH(tmp10); res = new IR(kCreateTableStmt, OP3("", "", ""), tmp10, tmp6); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(opt_temp_); auto tmp2 = SAFETRANSLATE(opt_if_not_exist_); auto tmp3 = SAFETRANSLATE(table_name_); auto tmp4 = SAFETRANSLATE(column_def_list_); auto tmp5 = SAFETRANSLATE(opt_table_constraint_list_); auto tmp6 = SAFETRANSLATE(opt_table_option_list_); auto tmp7 = new IR(kUnknown, OP3("CREATE", "TABLE", ""), tmp1, tmp2); PUSH(tmp7); auto tmp8 = new IR(kUnknown, OP3("", "", "("), tmp7, tmp3); PUSH(tmp8); auto tmp9 = new IR(kUnknown, OP3("", "", ""), tmp8, tmp4); PUSH(tmp9); auto tmp10 = new IR(kUnknown, OP3("", "", ")"), tmp9, tmp5); PUSH(tmp10); res = new IR(kCreateTableStmt, OP3("", "", ""), tmp10, tmp6); CASEEND SWITCHEND TRANSLATEEND } void CreateTableStmt::deep_delete() { SAFEDELETE(opt_table_option_list_); SAFEDELETE(opt_table_constraint_list_); SAFEDELETE(opt_temp_); SAFEDELETE(select_stmt_); SAFEDELETE(table_name_); SAFEDELETE(column_def_list_); SAFEDELETE(opt_ignore_or_replace_); SAFEDELETE(opt_if_not_exist_); delete this; }; void CreateTableStmt::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) opt_temp_ = new OptTemp(); opt_temp_->generate(); opt_if_not_exist_ = new OptIfNotExist(); opt_if_not_exist_->generate(); table_name_ = new TableName(); table_name_->generate(); opt_table_option_list_ = new OptTableOptionList(); opt_table_option_list_->generate(); opt_ignore_or_replace_ = new OptIgnoreOrReplace(); opt_ignore_or_replace_->generate(); select_stmt_ = new SelectStmt(); select_stmt_->generate(); CASEEND CASESTART(1) opt_temp_ = new OptTemp(); opt_temp_->generate(); opt_if_not_exist_ = new OptIfNotExist(); opt_if_not_exist_->generate(); table_name_ = new TableName(); table_name_->generate(); column_def_list_ = new ColumnDefList(); column_def_list_->generate(); opt_table_constraint_list_ = new OptTableConstraintList(); opt_table_constraint_list_->generate(); opt_table_option_list_ = new OptTableOptionList(); opt_table_option_list_->generate(); CASEEND SWITCHEND GENERATEEND } IR *CreateIndexStmt::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(opt_index_keyword_); auto tmp2 = SAFETRANSLATE(table_name_1_); auto tmp3 = SAFETRANSLATE(table_name_2_); auto tmp4 = SAFETRANSLATE(indexed_column_list_); auto tmp5 = SAFETRANSLATE(opt_index_option_); auto tmp6 = SAFETRANSLATE(opt_extra_option_); auto tmp7 = new IR(kUnknown, OP3("CREATE", "INDEX", "ON"), tmp1, tmp2); PUSH(tmp7); auto tmp8 = new IR(kUnknown, OP3("", "", "("), tmp7, tmp3); PUSH(tmp8); auto tmp9 = new IR(kUnknown, OP3("", "", ")"), tmp8, tmp4); PUSH(tmp9); auto tmp10 = new IR(kUnknown, OP3("", "", ""), tmp9, tmp5); PUSH(tmp10); res = new IR(kCreateIndexStmt, OP3("", "", ""), tmp10, tmp6); TRANSLATEEND } void CreateIndexStmt::deep_delete() { SAFEDELETE(table_name_1_); SAFEDELETE(table_name_2_); SAFEDELETE(opt_index_option_); SAFEDELETE(opt_index_keyword_); SAFEDELETE(indexed_column_list_); SAFEDELETE(opt_extra_option_); delete this; }; void CreateIndexStmt::generate() { GENERATESTART(1) opt_index_keyword_ = new OptIndexKeyword(); opt_index_keyword_->generate(); table_name_1_ = new TableName(); table_name_1_->generate(); table_name_2_ = new TableName(); table_name_2_->generate(); indexed_column_list_ = new IndexedColumnList(); indexed_column_list_->generate(); opt_index_option_ = new OptIndexOption(); opt_index_option_->generate(); opt_extra_option_ = new OptExtraOption(); opt_extra_option_->generate(); GENERATEEND } IR *CreateTriggerStmt::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(trigger_name_); auto tmp2 = SAFETRANSLATE(trigger_action_time_); auto tmp3 = SAFETRANSLATE(trigger_events_); auto tmp4 = SAFETRANSLATE(table_name_); auto tmp5 = SAFETRANSLATE(trigger_body_); auto tmp6 = new IR(kUnknown, OP3("CREATE TRIGGER", "", ""), tmp1, tmp2); PUSH(tmp6); auto tmp7 = new IR(kUnknown, OP3("", "", "ON"), tmp6, tmp3); PUSH(tmp7); auto tmp8 = new IR(kUnknown, OP3("", "", "FOR"), tmp7, tmp4); PUSH(tmp8); res = new IR(kCreateTriggerStmt, OP3("", "EACH ROW", ""), tmp8, tmp5); TRANSLATEEND } void CreateTriggerStmt::deep_delete() { SAFEDELETE(trigger_action_time_); SAFEDELETE(trigger_name_); SAFEDELETE(table_name_); SAFEDELETE(trigger_events_); SAFEDELETE(trigger_body_); delete this; }; void CreateTriggerStmt::generate() { GENERATESTART(1) trigger_name_ = new TriggerName(); trigger_name_->generate(); trigger_action_time_ = new TriggerActionTime(); trigger_action_time_->generate(); trigger_events_ = new TriggerEvents(); trigger_events_->generate(); table_name_ = new TableName(); table_name_->generate(); trigger_body_ = new TriggerBody(); trigger_body_->generate(); GENERATEEND } IR *CreateViewStmt::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(opt_view_algorithm_); auto tmp2 = SAFETRANSLATE(opt_sql_security_); auto tmp3 = SAFETRANSLATE(view_name_); auto tmp4 = SAFETRANSLATE(opt_column_name_list_p_); auto tmp5 = SAFETRANSLATE(select_stmt_); auto tmp6 = SAFETRANSLATE(opt_check_option_); auto tmp7 = new IR(kUnknown, OP3("CREATE", "", "VIEW"), tmp1, tmp2); PUSH(tmp7); auto tmp8 = new IR(kUnknown, OP3("", "", ""), tmp7, tmp3); PUSH(tmp8); auto tmp9 = new IR(kUnknown, OP3("", "", "AS"), tmp8, tmp4); PUSH(tmp9); auto tmp10 = new IR(kUnknown, OP3("", "", ""), tmp9, tmp5); PUSH(tmp10); res = new IR(kCreateViewStmt, OP3("", "", ""), tmp10, tmp6); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(opt_view_algorithm_); auto tmp2 = SAFETRANSLATE(opt_sql_security_); auto tmp3 = SAFETRANSLATE(view_name_); auto tmp4 = SAFETRANSLATE(opt_column_name_list_p_); auto tmp5 = SAFETRANSLATE(select_stmt_); auto tmp6 = SAFETRANSLATE(opt_check_option_); auto tmp7 = new IR(kUnknown, OP3("CREATE OR REPLACE", "", "VIEW"), tmp1, tmp2); PUSH(tmp7); auto tmp8 = new IR(kUnknown, OP3("", "", ""), tmp7, tmp3); PUSH(tmp8); auto tmp9 = new IR(kUnknown, OP3("", "", "AS"), tmp8, tmp4); PUSH(tmp9); auto tmp10 = new IR(kUnknown, OP3("", "", ""), tmp9, tmp5); PUSH(tmp10); res = new IR(kCreateViewStmt, OP3("", "", ""), tmp10, tmp6); CASEEND SWITCHEND TRANSLATEEND } void CreateViewStmt::deep_delete() { SAFEDELETE(opt_view_algorithm_); SAFEDELETE(opt_check_option_); SAFEDELETE(opt_sql_security_); SAFEDELETE(view_name_); SAFEDELETE(select_stmt_); SAFEDELETE(opt_column_name_list_p_); delete this; }; void CreateViewStmt::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) opt_view_algorithm_ = new OptViewAlgorithm(); opt_view_algorithm_->generate(); opt_sql_security_ = new OptSqlSecurity(); opt_sql_security_->generate(); view_name_ = new ViewName(); view_name_->generate(); opt_column_name_list_p_ = new OptColumnNameListP(); opt_column_name_list_p_->generate(); select_stmt_ = new SelectStmt(); select_stmt_->generate(); opt_check_option_ = new OptCheckOption(); opt_check_option_->generate(); CASEEND CASESTART(1) opt_view_algorithm_ = new OptViewAlgorithm(); opt_view_algorithm_->generate(); opt_sql_security_ = new OptSqlSecurity(); opt_sql_security_->generate(); view_name_ = new ViewName(); view_name_->generate(); opt_column_name_list_p_ = new OptColumnNameListP(); opt_column_name_list_p_->generate(); select_stmt_ = new SelectStmt(); select_stmt_->generate(); opt_check_option_ = new OptCheckOption(); opt_check_option_->generate(); CASEEND SWITCHEND GENERATEEND } IR *OptTableOptionList::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(table_option_list_); res = new IR(kOptTableOptionList, OP3("", "", ""), tmp1); CASEEND CASESTART(1) res = new IR(kOptTableOptionList, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptTableOptionList::deep_delete() { SAFEDELETE(table_option_list_); delete this; }; void OptTableOptionList::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) table_option_list_ = new TableOptionList(); table_option_list_->generate(); CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND } IR *TableOptionList::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(table_option_); res = new IR(kTableOptionList, OP3("", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(table_option_); auto tmp2 = SAFETRANSLATE(opt_op_comma_); auto tmp3 = SAFETRANSLATE(table_option_list_); auto tmp4 = new IR(kUnknown, OP3("", "", ""), tmp1, tmp2); PUSH(tmp4); res = new IR(kTableOptionList, OP3("", "", ""), tmp4, tmp3); CASEEND SWITCHEND TRANSLATEEND } void TableOptionList::deep_delete() { SAFEDELETE(table_option_list_); SAFEDELETE(opt_op_comma_); SAFEDELETE(table_option_); delete this; }; void TableOptionList::generate() { GENERATESTART(200) SWITCHSTART CASESTART(0) table_option_ = new TableOption(); table_option_->generate(); CASEEND CASESTART(1) table_option_ = new TableOption(); table_option_->generate(); opt_op_comma_ = new OptOpComma(); opt_op_comma_->generate(); table_option_list_ = new TableOptionList(); table_option_list_->generate(); CASEEND default: { int tmp_case_idx = rand() % 1; switch (tmp_case_idx) { CASESTART(0) table_option_ = new TableOption(); table_option_->generate(); case_idx_ = 0; CASEEND } } } GENERATEEND } IR *TableOption::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(opt_op_equal_); res = new IR(kTableOption, OP3("INSERT_METHOD", "NO", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(opt_op_equal_); res = new IR(kTableOption, OP3("INSERT_METHOD", "FIRST", ""), tmp1); CASEEND CASESTART(2) auto tmp1 = SAFETRANSLATE(opt_op_equal_); res = new IR(kTableOption, OP3("INSERT_METHOD", "LAST", ""), tmp1); CASEEND CASESTART(3) auto tmp1 = SAFETRANSLATE(opt_op_equal_); res = new IR(kTableOption, OP3("ROW_FORMAT", "DEFAULT", ""), tmp1); CASEEND CASESTART(4) auto tmp1 = SAFETRANSLATE(opt_op_equal_); res = new IR(kTableOption, OP3("ROW_FORMAT", "DYNAMIC", ""), tmp1); CASEEND CASESTART(5) auto tmp1 = SAFETRANSLATE(opt_op_equal_); res = new IR(kTableOption, OP3("ROW_FORMAT", "FIXED", ""), tmp1); CASEEND CASESTART(6) auto tmp1 = SAFETRANSLATE(opt_op_equal_); res = new IR(kTableOption, OP3("ROW_FORMAT", "COMPRESSED", ""), tmp1); CASEEND CASESTART(7) auto tmp1 = SAFETRANSLATE(opt_op_equal_); res = new IR(kTableOption, OP3("ROW_FORMAT", "REDUNDANT", ""), tmp1); CASEEND CASESTART(8) auto tmp1 = SAFETRANSLATE(opt_op_equal_); res = new IR(kTableOption, OP3("ROW_FORMAT", "COMPACT", ""), tmp1); CASEEND SWITCHEND TRANSLATEEND } void TableOption::deep_delete() { SAFEDELETE(opt_op_equal_); delete this; }; void TableOption::generate() { GENERATESTART(9) SWITCHSTART CASESTART(0) opt_op_equal_ = new OptOpEqual(); opt_op_equal_->generate(); CASEEND CASESTART(1) opt_op_equal_ = new OptOpEqual(); opt_op_equal_->generate(); CASEEND CASESTART(2) opt_op_equal_ = new OptOpEqual(); opt_op_equal_->generate(); CASEEND CASESTART(3) opt_op_equal_ = new OptOpEqual(); opt_op_equal_->generate(); CASEEND CASESTART(4) opt_op_equal_ = new OptOpEqual(); opt_op_equal_->generate(); CASEEND CASESTART(5) opt_op_equal_ = new OptOpEqual(); opt_op_equal_->generate(); CASEEND CASESTART(6) opt_op_equal_ = new OptOpEqual(); opt_op_equal_->generate(); CASEEND CASESTART(7) opt_op_equal_ = new OptOpEqual(); opt_op_equal_->generate(); CASEEND CASESTART(8) opt_op_equal_ = new OptOpEqual(); opt_op_equal_->generate(); CASEEND SWITCHEND GENERATEEND } IR *OptOpComma::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kOptOpComma, OP3(",", "", "")); CASEEND CASESTART(1) res = new IR(kOptOpComma, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptOpComma::deep_delete() { delete this; }; void OptOpComma::generate(){GENERATESTART(2) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND} IR *OptIgnoreOrReplace::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kOptIgnoreOrReplace, OP3("IGNORE", "", "")); CASEEND CASESTART(1) res = new IR(kOptIgnoreOrReplace, OP3("REPLACE", "", "")); CASEEND CASESTART(2) res = new IR(kOptIgnoreOrReplace, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptIgnoreOrReplace::deep_delete() { delete this; }; void OptIgnoreOrReplace::generate(){ GENERATESTART(3) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND CASESTART(2) CASEEND SWITCHEND GENERATEEND} IR *OptViewAlgorithm::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kOptViewAlgorithm, OP3("ALGORITHM = UNDEFINED", "", "")); CASEEND CASESTART(1) res = new IR(kOptViewAlgorithm, OP3("ALGORITHM = MERGE", "", "")); CASEEND CASESTART(2) res = new IR(kOptViewAlgorithm, OP3("ALGORITHM = TEMPTABLE", "", "")); CASEEND CASESTART(3) res = new IR(kOptViewAlgorithm, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptViewAlgorithm::deep_delete() { delete this; }; void OptViewAlgorithm::generate(){ GENERATESTART(4) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND CASESTART(2) CASEEND CASESTART(3) CASEEND SWITCHEND GENERATEEND} IR *OptSqlSecurity::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kOptSqlSecurity, OP3("SQL SECURITY DEFINER", "", "")); CASEEND CASESTART(1) res = new IR(kOptSqlSecurity, OP3("SQL SECURITY INVOKER", "", "")); CASEEND CASESTART(2) res = new IR(kOptSqlSecurity, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptSqlSecurity::deep_delete() { delete this; }; void OptSqlSecurity::generate(){ GENERATESTART(3) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND CASESTART(2) CASEEND SWITCHEND GENERATEEND} IR *OptIndexOption::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kOptIndexOption, OP3("USING BTREE", "", "")); CASEEND CASESTART(1) res = new IR(kOptIndexOption, OP3("USING HASH", "", "")); CASEEND CASESTART(2) res = new IR(kOptIndexOption, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptIndexOption::deep_delete() { delete this; }; void OptIndexOption::generate(){ GENERATESTART(3) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND CASESTART(2) CASEEND SWITCHEND GENERATEEND} IR *OptExtraOption::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(index_algorithm_option_); res = new IR(kOptExtraOption, OP3("", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(lock_option_); res = new IR(kOptExtraOption, OP3("", "", ""), tmp1); CASEEND CASESTART(2) res = new IR(kOptExtraOption, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptExtraOption::deep_delete() { SAFEDELETE(lock_option_); SAFEDELETE(index_algorithm_option_); delete this; }; void OptExtraOption::generate() { GENERATESTART(3) SWITCHSTART CASESTART(0) index_algorithm_option_ = new IndexAlgorithmOption(); index_algorithm_option_->generate(); CASEEND CASESTART(1) lock_option_ = new LockOption(); lock_option_->generate(); CASEEND CASESTART(2) CASEEND SWITCHEND GENERATEEND } IR *IndexAlgorithmOption::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(opt_op_equal_); res = new IR(kIndexAlgorithmOption, OP3("ALGORITHM", "DEFAULT", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(opt_op_equal_); res = new IR(kIndexAlgorithmOption, OP3("ALGORITHM", "INPLACE", ""), tmp1); CASEEND CASESTART(2) auto tmp1 = SAFETRANSLATE(opt_op_equal_); res = new IR(kIndexAlgorithmOption, OP3("ALGORITHM", "COPY", ""), tmp1); CASEEND SWITCHEND TRANSLATEEND } void IndexAlgorithmOption::deep_delete() { SAFEDELETE(opt_op_equal_); delete this; }; void IndexAlgorithmOption::generate() { GENERATESTART(3) SWITCHSTART CASESTART(0) opt_op_equal_ = new OptOpEqual(); opt_op_equal_->generate(); CASEEND CASESTART(1) opt_op_equal_ = new OptOpEqual(); opt_op_equal_->generate(); CASEEND CASESTART(2) opt_op_equal_ = new OptOpEqual(); opt_op_equal_->generate(); CASEEND SWITCHEND GENERATEEND } IR *LockOption::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(opt_op_equal_); res = new IR(kLockOption, OP3("LOCK", "DEFAULT", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(opt_op_equal_); res = new IR(kLockOption, OP3("LOCK", "NONE", ""), tmp1); CASEEND CASESTART(2) auto tmp1 = SAFETRANSLATE(opt_op_equal_); res = new IR(kLockOption, OP3("LOCK", "SHARED", ""), tmp1); CASEEND CASESTART(3) auto tmp1 = SAFETRANSLATE(opt_op_equal_); res = new IR(kLockOption, OP3("LOCK", "EXCLUSIVE", ""), tmp1); CASEEND SWITCHEND TRANSLATEEND } void LockOption::deep_delete() { SAFEDELETE(opt_op_equal_); delete this; }; void LockOption::generate() { GENERATESTART(4) SWITCHSTART CASESTART(0) opt_op_equal_ = new OptOpEqual(); opt_op_equal_->generate(); CASEEND CASESTART(1) opt_op_equal_ = new OptOpEqual(); opt_op_equal_->generate(); CASEEND CASESTART(2) opt_op_equal_ = new OptOpEqual(); opt_op_equal_->generate(); CASEEND CASESTART(3) opt_op_equal_ = new OptOpEqual(); opt_op_equal_->generate(); CASEEND SWITCHEND GENERATEEND } IR *OptOpEqual::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kOptOpEqual, OP3("=", "", "")); CASEEND CASESTART(1) res = new IR(kOptOpEqual, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptOpEqual::deep_delete() { delete this; }; void OptOpEqual::generate(){GENERATESTART(2) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND} IR *TriggerEvents::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kTriggerEvents, OP3("DELETE", "", "")); CASEEND CASESTART(1) res = new IR(kTriggerEvents, OP3("INSERT", "", "")); CASEEND CASESTART(2) res = new IR(kTriggerEvents, OP3("UPDATE", "", "")); CASEEND SWITCHEND TRANSLATEEND } void TriggerEvents::deep_delete() { delete this; }; void TriggerEvents::generate(){GENERATESTART(3) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND CASESTART(2) CASEEND SWITCHEND GENERATEEND} IR *TriggerName::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(identifier_); res = new IR(kTriggerName, OP3("", "", ""), tmp1); TRANSLATEEND } void TriggerName::deep_delete() { SAFEDELETE(identifier_); delete this; }; void TriggerName::generate() { GENERATESTART(1) identifier_ = new Identifier(); identifier_->generate(); GENERATEEND } IR *TriggerActionTime::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kTriggerActionTime, OP3("BEFORE", "", "")); CASEEND CASESTART(1) res = new IR(kTriggerActionTime, OP3("AFTER", "", "")); CASEEND SWITCHEND TRANSLATEEND } void TriggerActionTime::deep_delete() { delete this; }; void TriggerActionTime::generate(){ GENERATESTART(2) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND} IR *DropIndexStmt::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(table_name_); auto tmp2 = SAFETRANSLATE(opt_extra_option_); res = new IR(kDropIndexStmt, OP3("DROP INDEX", "", ""), tmp1, tmp2); TRANSLATEEND } void DropIndexStmt::deep_delete() { SAFEDELETE(table_name_); SAFEDELETE(opt_extra_option_); delete this; }; void DropIndexStmt::generate() { GENERATESTART(1) table_name_ = new TableName(); table_name_->generate(); opt_extra_option_ = new OptExtraOption(); opt_extra_option_->generate(); GENERATEEND } IR *DropTableStmt::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(opt_temp_); auto tmp2 = SAFETRANSLATE(opt_if_exist_); auto tmp3 = SAFETRANSLATE(table_name_); auto tmp4 = SAFETRANSLATE(opt_restrict_or_cascade_); auto tmp5 = new IR(kUnknown, OP3("DROP", "TABLE", ""), tmp1, tmp2); PUSH(tmp5); auto tmp6 = new IR(kUnknown, OP3("", "", ""), tmp5, tmp3); PUSH(tmp6); res = new IR(kDropTableStmt, OP3("", "", ""), tmp6, tmp4); TRANSLATEEND } void DropTableStmt::deep_delete() { SAFEDELETE(opt_temp_); SAFEDELETE(table_name_); SAFEDELETE(opt_restrict_or_cascade_); SAFEDELETE(opt_if_exist_); delete this; }; void DropTableStmt::generate() { GENERATESTART(1) opt_temp_ = new OptTemp(); opt_temp_->generate(); opt_if_exist_ = new OptIfExist(); opt_if_exist_->generate(); table_name_ = new TableName(); table_name_->generate(); opt_restrict_or_cascade_ = new OptRestrictOrCascade(); opt_restrict_or_cascade_->generate(); GENERATEEND } IR *OptRestrictOrCascade::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kOptRestrictOrCascade, OP3("RESTRICT", "", "")); CASEEND CASESTART(1) res = new IR(kOptRestrictOrCascade, OP3("CASCADE", "", "")); CASEEND CASESTART(2) res = new IR(kOptRestrictOrCascade, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptRestrictOrCascade::deep_delete() { delete this; }; void OptRestrictOrCascade::generate(){ GENERATESTART(3) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND CASESTART(2) CASEEND SWITCHEND GENERATEEND} IR *DropTriggerStmt::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(opt_if_exist_); auto tmp2 = SAFETRANSLATE(trigger_name_); res = new IR(kDropTriggerStmt, OP3("DROP TRIGGER", "", ""), tmp1, tmp2); TRANSLATEEND } void DropTriggerStmt::deep_delete() { SAFEDELETE(trigger_name_); SAFEDELETE(opt_if_exist_); delete this; }; void DropTriggerStmt::generate() { GENERATESTART(1) opt_if_exist_ = new OptIfExist(); opt_if_exist_->generate(); trigger_name_ = new TriggerName(); trigger_name_->generate(); GENERATEEND } IR *DropViewStmt::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(opt_if_exist_); auto tmp2 = SAFETRANSLATE(view_name_); auto tmp3 = SAFETRANSLATE(opt_restrict_or_cascade_); auto tmp4 = new IR(kUnknown, OP3("DROP VIEW", "", ""), tmp1, tmp2); PUSH(tmp4); res = new IR(kDropViewStmt, OP3("", "", ""), tmp4, tmp3); TRANSLATEEND } void DropViewStmt::deep_delete() { SAFEDELETE(view_name_); SAFEDELETE(opt_restrict_or_cascade_); SAFEDELETE(opt_if_exist_); delete this; }; void DropViewStmt::generate() { GENERATESTART(1) opt_if_exist_ = new OptIfExist(); opt_if_exist_->generate(); view_name_ = new ViewName(); view_name_->generate(); opt_restrict_or_cascade_ = new OptRestrictOrCascade(); opt_restrict_or_cascade_->generate(); GENERATEEND } IR *InsertStmt::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(opt_with_clause_); auto tmp2 = SAFETRANSLATE(table_name_); auto tmp3 = SAFETRANSLATE(opt_as_alias_); auto tmp4 = SAFETRANSLATE(insert_rest_); auto tmp5 = SAFETRANSLATE(opt_on_conflict_); auto tmp6 = new IR(kUnknown, OP3("", "INSERT INTO", ""), tmp1, tmp2); PUSH(tmp6); auto tmp7 = new IR(kUnknown, OP3("", "", ""), tmp6, tmp3); PUSH(tmp7); auto tmp8 = new IR(kUnknown, OP3("", "", ""), tmp7, tmp4); PUSH(tmp8); res = new IR(kInsertStmt, OP3("", "", ""), tmp8, tmp5); TRANSLATEEND } void InsertStmt::deep_delete() { SAFEDELETE(insert_rest_); SAFEDELETE(opt_as_alias_); SAFEDELETE(table_name_); SAFEDELETE(opt_on_conflict_); SAFEDELETE(opt_with_clause_); delete this; }; void InsertStmt::generate() { GENERATESTART(1) opt_with_clause_ = new OptWithClause(); opt_with_clause_->generate(); table_name_ = new TableName(); table_name_->generate(); opt_as_alias_ = new OptAsAlias(); opt_as_alias_->generate(); insert_rest_ = new InsertRest(); insert_rest_->generate(); opt_on_conflict_ = new OptOnConflict(); opt_on_conflict_->generate(); GENERATEEND } IR *InsertRest::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(opt_column_name_list_p_); auto tmp2 = SAFETRANSLATE(select_no_parens_); res = new IR(kInsertRest, OP3("", "", ""), tmp1, tmp2); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(opt_column_name_list_p_); res = new IR(kInsertRest, OP3("", "DEFAULT VALUES", ""), tmp1); CASEEND CASESTART(2) auto tmp1 = SAFETRANSLATE(opt_column_name_list_p_); auto tmp2 = SAFETRANSLATE(super_values_list_); res = new IR(kInsertRest, OP3("", "VALUES", ""), tmp1, tmp2); CASEEND SWITCHEND TRANSLATEEND } void InsertRest::deep_delete() { SAFEDELETE(opt_column_name_list_p_); SAFEDELETE(super_values_list_); SAFEDELETE(select_no_parens_); delete this; }; void InsertRest::generate() { GENERATESTART(3) SWITCHSTART CASESTART(0) opt_column_name_list_p_ = new OptColumnNameListP(); opt_column_name_list_p_->generate(); select_no_parens_ = new SelectNoParens(); select_no_parens_->generate(); CASEEND CASESTART(1) opt_column_name_list_p_ = new OptColumnNameListP(); opt_column_name_list_p_->generate(); CASEEND CASESTART(2) opt_column_name_list_p_ = new OptColumnNameListP(); opt_column_name_list_p_->generate(); super_values_list_ = new SuperValuesList(); super_values_list_->generate(); CASEEND SWITCHEND GENERATEEND } IR *SuperValuesList::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(values_list_); res = new IR(kSuperValuesList, OP3("", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(values_list_); auto tmp2 = SAFETRANSLATE(super_values_list_); res = new IR(kSuperValuesList, OP3("", ",", ""), tmp1, tmp2); CASEEND SWITCHEND TRANSLATEEND } void SuperValuesList::deep_delete() { SAFEDELETE(values_list_); SAFEDELETE(super_values_list_); delete this; }; void SuperValuesList::generate() { GENERATESTART(200) SWITCHSTART CASESTART(0) values_list_ = new ValuesList(); values_list_->generate(); CASEEND CASESTART(1) values_list_ = new ValuesList(); values_list_->generate(); super_values_list_ = new SuperValuesList(); super_values_list_->generate(); CASEEND default: { int tmp_case_idx = rand() % 1; switch (tmp_case_idx) { CASESTART(0) values_list_ = new ValuesList(); values_list_->generate(); case_idx_ = 0; CASEEND } } } GENERATEEND } IR *ValuesList::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(expr_list_); res = new IR(kValuesList, OP3("(", ")", ""), tmp1); TRANSLATEEND } void ValuesList::deep_delete() { SAFEDELETE(expr_list_); delete this; }; void ValuesList::generate() { GENERATESTART(1) expr_list_ = new ExprList(); expr_list_->generate(); GENERATEEND } IR *OptOnConflict::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(opt_conflict_expr_); res = new IR(kOptOnConflict, OP3("ON CONFLICT", "DO NOTHING", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(opt_conflict_expr_); auto tmp2 = SAFETRANSLATE(set_clause_list_); auto tmp3 = SAFETRANSLATE(where_clause_); auto tmp4 = new IR(kUnknown, OP3("ON CONFLICT", "DO UPDATE", ""), tmp1, tmp2); PUSH(tmp4); res = new IR(kOptOnConflict, OP3("", "", ""), tmp4, tmp3); CASEEND CASESTART(2) res = new IR(kOptOnConflict, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptOnConflict::deep_delete() { SAFEDELETE(opt_conflict_expr_); SAFEDELETE(set_clause_list_); SAFEDELETE(where_clause_); delete this; }; void OptOnConflict::generate() { GENERATESTART(3) SWITCHSTART CASESTART(0) opt_conflict_expr_ = new OptConflictExpr(); opt_conflict_expr_->generate(); CASEEND CASESTART(1) opt_conflict_expr_ = new OptConflictExpr(); opt_conflict_expr_->generate(); set_clause_list_ = new SetClauseList(); set_clause_list_->generate(); where_clause_ = new WhereClause(); where_clause_->generate(); CASEEND CASESTART(2) CASEEND SWITCHEND GENERATEEND } IR *OptConflictExpr::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(indexed_column_list_); auto tmp2 = SAFETRANSLATE(where_clause_); res = new IR(kOptConflictExpr, OP3("(", ")", ""), tmp1, tmp2); CASEEND CASESTART(1) res = new IR(kOptConflictExpr, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptConflictExpr::deep_delete() { SAFEDELETE(indexed_column_list_); SAFEDELETE(where_clause_); delete this; }; void OptConflictExpr::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) indexed_column_list_ = new IndexedColumnList(); indexed_column_list_->generate(); where_clause_ = new WhereClause(); where_clause_->generate(); CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND } IR *IndexedColumnList::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(indexed_column_); res = new IR(kIndexedColumnList, OP3("", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(indexed_column_); auto tmp2 = SAFETRANSLATE(indexed_column_list_); res = new IR(kIndexedColumnList, OP3("", ",", ""), tmp1, tmp2); CASEEND SWITCHEND TRANSLATEEND } void IndexedColumnList::deep_delete() { SAFEDELETE(indexed_column_); SAFEDELETE(indexed_column_list_); delete this; }; void IndexedColumnList::generate() { GENERATESTART(200) SWITCHSTART CASESTART(0) indexed_column_ = new IndexedColumn(); indexed_column_->generate(); CASEEND CASESTART(1) indexed_column_ = new IndexedColumn(); indexed_column_->generate(); indexed_column_list_ = new IndexedColumnList(); indexed_column_list_->generate(); CASEEND default: { int tmp_case_idx = rand() % 1; switch (tmp_case_idx) { CASESTART(0) indexed_column_ = new IndexedColumn(); indexed_column_->generate(); case_idx_ = 0; CASEEND } } } GENERATEEND } IR *IndexedColumn::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(expr_); auto tmp2 = SAFETRANSLATE(opt_order_behavior_); res = new IR(kIndexedColumn, OP3("", "", ""), tmp1, tmp2); TRANSLATEEND } void IndexedColumn::deep_delete() { SAFEDELETE(expr_); SAFEDELETE(opt_order_behavior_); delete this; }; void IndexedColumn::generate() { GENERATESTART(1) expr_ = new Expr(); expr_->generate(); opt_order_behavior_ = new OptOrderBehavior(); opt_order_behavior_->generate(); GENERATEEND } IR *UpdateStmt::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(table_name_); auto tmp2 = SAFETRANSLATE(opt_as_alias_); auto tmp3 = SAFETRANSLATE(set_clause_list_); auto tmp4 = SAFETRANSLATE(opt_where_clause_); auto tmp5 = SAFETRANSLATE(opt_order_clause_); auto tmp6 = SAFETRANSLATE(opt_limit_row_count_); auto tmp7 = new IR(kUnknown, OP3("UPDATE IGNORE", "", "SET"), tmp1, tmp2); PUSH(tmp7); auto tmp8 = new IR(kUnknown, OP3("", "", ""), tmp7, tmp3); PUSH(tmp8); auto tmp9 = new IR(kUnknown, OP3("", "", ""), tmp8, tmp4); PUSH(tmp9); auto tmp10 = new IR(kUnknown, OP3("", "", ""), tmp9, tmp5); PUSH(tmp10); res = new IR(kUpdateStmt, OP3("", "", ""), tmp10, tmp6); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(table_name_); auto tmp2 = SAFETRANSLATE(opt_as_alias_); auto tmp3 = SAFETRANSLATE(set_clause_list_); auto tmp4 = SAFETRANSLATE(opt_where_clause_); auto tmp5 = SAFETRANSLATE(opt_order_clause_); auto tmp6 = SAFETRANSLATE(opt_limit_row_count_); auto tmp7 = new IR(kUnknown, OP3("UPDATE", "", "SET"), tmp1, tmp2); PUSH(tmp7); auto tmp8 = new IR(kUnknown, OP3("", "", ""), tmp7, tmp3); PUSH(tmp8); auto tmp9 = new IR(kUnknown, OP3("", "", ""), tmp8, tmp4); PUSH(tmp9); auto tmp10 = new IR(kUnknown, OP3("", "", ""), tmp9, tmp5); PUSH(tmp10); res = new IR(kUpdateStmt, OP3("", "", ""), tmp10, tmp6); CASEEND SWITCHEND TRANSLATEEND } void UpdateStmt::deep_delete() { SAFEDELETE(opt_as_alias_); SAFEDELETE(opt_where_clause_); SAFEDELETE(table_name_); SAFEDELETE(set_clause_list_); SAFEDELETE(opt_limit_row_count_); SAFEDELETE(opt_order_clause_); delete this; }; void UpdateStmt::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) table_name_ = new TableName(); table_name_->generate(); opt_as_alias_ = new OptAsAlias(); opt_as_alias_->generate(); set_clause_list_ = new SetClauseList(); set_clause_list_->generate(); opt_where_clause_ = new OptWhereClause(); opt_where_clause_->generate(); opt_order_clause_ = new OptOrderClause(); opt_order_clause_->generate(); opt_limit_row_count_ = new OptLimitRowCount(); opt_limit_row_count_->generate(); CASEEND CASESTART(1) table_name_ = new TableName(); table_name_->generate(); opt_as_alias_ = new OptAsAlias(); opt_as_alias_->generate(); set_clause_list_ = new SetClauseList(); set_clause_list_->generate(); opt_where_clause_ = new OptWhereClause(); opt_where_clause_->generate(); opt_order_clause_ = new OptOrderClause(); opt_order_clause_->generate(); opt_limit_row_count_ = new OptLimitRowCount(); opt_limit_row_count_->generate(); CASEEND SWITCHEND GENERATEEND } IR *AlterAction::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(table_name_); res = new IR(kAlterAction, OP3("RENAME TO", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(opt_column_); auto tmp2 = SAFETRANSLATE(column_name_1_); auto tmp3 = SAFETRANSLATE(column_name_2_); auto tmp4 = new IR(kUnknown, OP3("RENAME", "", "TO"), tmp1, tmp2); PUSH(tmp4); res = new IR(kAlterAction, OP3("", "", ""), tmp4, tmp3); CASEEND CASESTART(2) auto tmp1 = SAFETRANSLATE(opt_column_); auto tmp2 = SAFETRANSLATE(column_def_); res = new IR(kAlterAction, OP3("ADD", "", ""), tmp1, tmp2); CASEEND CASESTART(3) auto tmp1 = SAFETRANSLATE(opt_column_); auto tmp2 = SAFETRANSLATE(column_name_1_); res = new IR(kAlterAction, OP3("DROP", "", ""), tmp1, tmp2); CASEEND CASESTART(4) auto tmp1 = SAFETRANSLATE(alter_constant_action_); res = new IR(kAlterAction, OP3("", "", ""), tmp1); CASEEND SWITCHEND TRANSLATEEND } void AlterAction::deep_delete() { SAFEDELETE(column_def_); SAFEDELETE(alter_constant_action_); SAFEDELETE(opt_column_); SAFEDELETE(table_name_); SAFEDELETE(column_name_1_); SAFEDELETE(column_name_2_); delete this; }; void AlterAction::generate() { GENERATESTART(5) SWITCHSTART CASESTART(0) table_name_ = new TableName(); table_name_->generate(); CASEEND CASESTART(1) opt_column_ = new OptColumn(); opt_column_->generate(); column_name_1_ = new ColumnName(); column_name_1_->generate(); column_name_2_ = new ColumnName(); column_name_2_->generate(); CASEEND CASESTART(2) opt_column_ = new OptColumn(); opt_column_->generate(); column_def_ = new ColumnDef(); column_def_->generate(); CASEEND CASESTART(3) opt_column_ = new OptColumn(); opt_column_->generate(); column_name_1_ = new ColumnName(); column_name_1_->generate(); CASEEND CASESTART(4) alter_constant_action_ = new AlterConstantAction(); alter_constant_action_->generate(); CASEEND SWITCHEND GENERATEEND } IR *AlterConstantAction::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kAlterConstantAction, OP3("DROP PRIMARY KEY", "", "")); CASEEND CASESTART(1) res = new IR(kAlterConstantAction, OP3("FORCE", "", "")); CASEEND CASESTART(2) res = new IR(kAlterConstantAction, OP3("DISABLE KEYS", "", "")); CASEEND CASESTART(3) res = new IR(kAlterConstantAction, OP3("ENABLE KEYS", "", "")); CASEEND CASESTART(4) auto tmp1 = SAFETRANSLATE(lock_option_); res = new IR(kAlterConstantAction, OP3("", "", ""), tmp1); CASEEND CASESTART(5) res = new IR(kAlterConstantAction, OP3("WITH VALIDATION", "", "")); CASEEND CASESTART(6) res = new IR(kAlterConstantAction, OP3("WITHOUT VALIDATION", "", "")); CASEEND SWITCHEND TRANSLATEEND } void AlterConstantAction::deep_delete() { SAFEDELETE(lock_option_); delete this; }; void AlterConstantAction::generate() { GENERATESTART(7) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND CASESTART(2) CASEEND CASESTART(3) CASEEND CASESTART(4) lock_option_ = new LockOption(); lock_option_->generate(); CASEEND CASESTART(5) CASEEND CASESTART(6) CASEEND SWITCHEND GENERATEEND } IR *ColumnDefList::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(column_def_); res = new IR(kColumnDefList, OP3("", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(column_def_); auto tmp2 = SAFETRANSLATE(column_def_list_); res = new IR(kColumnDefList, OP3("", ",", ""), tmp1, tmp2); CASEEND SWITCHEND TRANSLATEEND } void ColumnDefList::deep_delete() { SAFEDELETE(column_def_); SAFEDELETE(column_def_list_); delete this; }; void ColumnDefList::generate() { GENERATESTART(200) SWITCHSTART CASESTART(0) column_def_ = new ColumnDef(); column_def_->generate(); CASEEND CASESTART(1) column_def_ = new ColumnDef(); column_def_->generate(); column_def_list_ = new ColumnDefList(); column_def_list_->generate(); CASEEND default: { int tmp_case_idx = rand() % 1; switch (tmp_case_idx) { CASESTART(0) column_def_ = new ColumnDef(); column_def_->generate(); case_idx_ = 0; CASEEND } } } GENERATEEND } IR *ColumnDef::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(identifier_); auto tmp2 = SAFETRANSLATE(type_name_); auto tmp3 = SAFETRANSLATE(opt_column_constraint_list_); auto tmp4 = new IR(kUnknown, OP3("", "", ""), tmp1, tmp2); PUSH(tmp4); res = new IR(kColumnDef, OP3("", "", ""), tmp4, tmp3); TRANSLATEEND } void ColumnDef::deep_delete() { SAFEDELETE(type_name_); SAFEDELETE(identifier_); SAFEDELETE(opt_column_constraint_list_); delete this; }; void ColumnDef::generate() { GENERATESTART(1) identifier_ = new Identifier(); identifier_->generate(); type_name_ = new TypeName(); type_name_->generate(); opt_column_constraint_list_ = new OptColumnConstraintList(); opt_column_constraint_list_->generate(); GENERATEEND } IR *OptColumnConstraintList::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(column_constraint_list_); auto tmp2 = SAFETRANSLATE(opt_check_); auto tmp3 = SAFETRANSLATE(opt_reference_clause_); auto tmp4 = new IR(kUnknown, OP3("", "", ""), tmp1, tmp2); PUSH(tmp4); res = new IR(kOptColumnConstraintList, OP3("", "", ""), tmp4, tmp3); CASEEND CASESTART(1) res = new IR(kOptColumnConstraintList, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptColumnConstraintList::deep_delete() { SAFEDELETE(column_constraint_list_); SAFEDELETE(opt_reference_clause_); SAFEDELETE(opt_check_); delete this; }; void OptColumnConstraintList::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) column_constraint_list_ = new ColumnConstraintList(); column_constraint_list_->generate(); opt_check_ = new OptCheck(); opt_check_->generate(); opt_reference_clause_ = new OptReferenceClause(); opt_reference_clause_->generate(); CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND } IR *ColumnConstraintList::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(column_constraint_); res = new IR(kColumnConstraintList, OP3("", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(column_constraint_); auto tmp2 = SAFETRANSLATE(column_constraint_list_); res = new IR(kColumnConstraintList, OP3("", "", ""), tmp1, tmp2); CASEEND SWITCHEND TRANSLATEEND } void ColumnConstraintList::deep_delete() { SAFEDELETE(column_constraint_list_); SAFEDELETE(column_constraint_); delete this; }; void ColumnConstraintList::generate() { GENERATESTART(200) SWITCHSTART CASESTART(0) column_constraint_ = new ColumnConstraint(); column_constraint_->generate(); CASEEND CASESTART(1) column_constraint_ = new ColumnConstraint(); column_constraint_->generate(); column_constraint_list_ = new ColumnConstraintList(); column_constraint_list_->generate(); CASEEND default: { int tmp_case_idx = rand() % 1; switch (tmp_case_idx) { CASESTART(0) column_constraint_ = new ColumnConstraint(); column_constraint_->generate(); case_idx_ = 0; CASEEND } } } GENERATEEND } IR *ColumnConstraint::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(constraint_type_); res = new IR(kColumnConstraint, OP3("", "", ""), tmp1); TRANSLATEEND } void ColumnConstraint::deep_delete() { SAFEDELETE(constraint_type_); delete this; }; void ColumnConstraint::generate() { GENERATESTART(1) constraint_type_ = new ConstraintType(); constraint_type_->generate(); GENERATEEND } IR *OptReferenceClause::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(opt_foreign_key_); auto tmp2 = SAFETRANSLATE(reference_clause_); res = new IR(kOptReferenceClause, OP3("", "", ""), tmp1, tmp2); CASEEND CASESTART(1) res = new IR(kOptReferenceClause, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptReferenceClause::deep_delete() { SAFEDELETE(reference_clause_); SAFEDELETE(opt_foreign_key_); delete this; }; void OptReferenceClause::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) opt_foreign_key_ = new OptForeignKey(); opt_foreign_key_->generate(); reference_clause_ = new ReferenceClause(); reference_clause_->generate(); CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND } IR *OptCheck::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(expr_); auto tmp2 = SAFETRANSLATE(opt_enforced_); res = new IR(kOptCheck, OP3("CHECK (", ")", ""), tmp1, tmp2); CASEEND CASESTART(1) res = new IR(kOptCheck, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptCheck::deep_delete() { SAFEDELETE(opt_enforced_); SAFEDELETE(expr_); delete this; }; void OptCheck::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) expr_ = new Expr(); expr_->generate(); opt_enforced_ = new OptEnforced(); opt_enforced_->generate(); CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND } IR *ConstraintType::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kConstraintType, OP3("PRIMARY KEY", "", "")); CASEEND CASESTART(1) res = new IR(kConstraintType, OP3("NOT NULL", "", "")); CASEEND CASESTART(2) res = new IR(kConstraintType, OP3("UNIQUE", "", "")); CASEEND SWITCHEND TRANSLATEEND } void ConstraintType::deep_delete() { delete this; }; void ConstraintType::generate(){ GENERATESTART(3) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND CASESTART(2) CASEEND SWITCHEND GENERATEEND} IR *ReferenceClause::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(table_name_); auto tmp2 = SAFETRANSLATE(opt_column_name_list_p_); auto tmp3 = SAFETRANSLATE(opt_foreign_key_actions_); auto tmp4 = SAFETRANSLATE(opt_constraint_attribute_spec_); auto tmp5 = new IR(kUnknown, OP3("REFERENCES", "", ""), tmp1, tmp2); PUSH(tmp5); auto tmp6 = new IR(kUnknown, OP3("", "", ""), tmp5, tmp3); PUSH(tmp6); res = new IR(kReferenceClause, OP3("", "", ""), tmp6, tmp4); TRANSLATEEND } void ReferenceClause::deep_delete() { SAFEDELETE(opt_constraint_attribute_spec_); SAFEDELETE(opt_column_name_list_p_); SAFEDELETE(table_name_); SAFEDELETE(opt_foreign_key_actions_); delete this; }; void ReferenceClause::generate() { GENERATESTART(1) table_name_ = new TableName(); table_name_->generate(); opt_column_name_list_p_ = new OptColumnNameListP(); opt_column_name_list_p_->generate(); opt_foreign_key_actions_ = new OptForeignKeyActions(); opt_foreign_key_actions_->generate(); opt_constraint_attribute_spec_ = new OptConstraintAttributeSpec(); opt_constraint_attribute_spec_->generate(); GENERATEEND } IR *OptForeignKey::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kOptForeignKey, OP3("FOREIGN KEY", "", "")); CASEEND CASESTART(1) res = new IR(kOptForeignKey, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptForeignKey::deep_delete() { delete this; }; void OptForeignKey::generate(){GENERATESTART(2) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND} IR *OptForeignKeyActions::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(foreign_key_actions_); res = new IR(kOptForeignKeyActions, OP3("", "", ""), tmp1); CASEEND CASESTART(1) res = new IR(kOptForeignKeyActions, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptForeignKeyActions::deep_delete() { SAFEDELETE(foreign_key_actions_); delete this; }; void OptForeignKeyActions::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) foreign_key_actions_ = new ForeignKeyActions(); foreign_key_actions_->generate(); CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND } IR *ForeignKeyActions::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kForeignKeyActions, OP3("MATCH FULL", "", "")); CASEEND CASESTART(1) res = new IR(kForeignKeyActions, OP3("MATCH PARTIAL", "", "")); CASEEND CASESTART(2) res = new IR(kForeignKeyActions, OP3("MATCH SIMPLE", "", "")); CASEEND CASESTART(3) auto tmp1 = SAFETRANSLATE(key_actions_); res = new IR(kForeignKeyActions, OP3("ON UPDATE", "", ""), tmp1); CASEEND CASESTART(4) auto tmp1 = SAFETRANSLATE(key_actions_); res = new IR(kForeignKeyActions, OP3("ON DELETE", "", ""), tmp1); CASEEND SWITCHEND TRANSLATEEND } void ForeignKeyActions::deep_delete() { SAFEDELETE(key_actions_); delete this; }; void ForeignKeyActions::generate() { GENERATESTART(5) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND CASESTART(2) CASEEND CASESTART(3) key_actions_ = new KeyActions(); key_actions_->generate(); CASEEND CASESTART(4) key_actions_ = new KeyActions(); key_actions_->generate(); CASEEND SWITCHEND GENERATEEND } IR *KeyActions::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kKeyActions, OP3("SET NULL", "", "")); CASEEND CASESTART(1) res = new IR(kKeyActions, OP3("SET DEFAULT", "", "")); CASEEND CASESTART(2) res = new IR(kKeyActions, OP3("CASCADE", "", "")); CASEEND CASESTART(3) res = new IR(kKeyActions, OP3("RESTRICT", "", "")); CASEEND CASESTART(4) res = new IR(kKeyActions, OP3("NO ACTION", "", "")); CASEEND SWITCHEND TRANSLATEEND } void KeyActions::deep_delete() { delete this; }; void KeyActions::generate(){GENERATESTART(5) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND CASESTART(2) CASEEND CASESTART(3) CASEEND CASESTART(4) CASEEND SWITCHEND GENERATEEND} IR *OptConstraintAttributeSpec::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(opt_initial_time_); res = new IR(kOptConstraintAttributeSpec, OP3("DEFFERRABLE", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(opt_initial_time_); res = new IR(kOptConstraintAttributeSpec, OP3("NOT DEFFERRABLE", "", ""), tmp1); CASEEND CASESTART(2) res = new IR(kOptConstraintAttributeSpec, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptConstraintAttributeSpec::deep_delete() { SAFEDELETE(opt_initial_time_); delete this; }; void OptConstraintAttributeSpec::generate() { GENERATESTART(3) SWITCHSTART CASESTART(0) opt_initial_time_ = new OptInitialTime(); opt_initial_time_->generate(); CASEEND CASESTART(1) opt_initial_time_ = new OptInitialTime(); opt_initial_time_->generate(); CASEEND CASESTART(2) CASEEND SWITCHEND GENERATEEND } IR *OptInitialTime::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kOptInitialTime, OP3("INITIALLY DEFERRED", "", "")); CASEEND CASESTART(1) res = new IR(kOptInitialTime, OP3("INITIALLY IMMEDIATE", "", "")); CASEEND CASESTART(2) res = new IR(kOptInitialTime, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptInitialTime::deep_delete() { delete this; }; void OptInitialTime::generate(){ GENERATESTART(3) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND CASESTART(2) CASEEND SWITCHEND GENERATEEND} IR *ConstraintName::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(name_); res = new IR(kConstraintName, OP3("CONSTRAINT", "", ""), tmp1); TRANSLATEEND } void ConstraintName::deep_delete() { SAFEDELETE(name_); delete this; }; void ConstraintName::generate() { GENERATESTART(1) name_ = new Name(); name_->generate(); GENERATEEND } IR *OptTemp::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kOptTemp, OP3("TEMPORARY", "", "")); CASEEND CASESTART(1) res = new IR(kOptTemp, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptTemp::deep_delete() { delete this; }; void OptTemp::generate(){GENERATESTART(2) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND} IR *OptCheckOption::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kOptCheckOption, OP3("WITH CHECK OPTION", "", "")); CASEEND CASESTART(1) res = new IR(kOptCheckOption, OP3("WITH CASCADED CHECK OPTION", "", "")); CASEEND CASESTART(2) res = new IR(kOptCheckOption, OP3("WITH LOCAL CHECK OPTION", "", "")); CASEEND CASESTART(3) res = new IR(kOptCheckOption, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptCheckOption::deep_delete() { delete this; }; void OptCheckOption::generate(){ GENERATESTART(4) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND CASESTART(2) CASEEND CASESTART(3) CASEEND SWITCHEND GENERATEEND} IR *OptColumnNameListP::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(column_name_list_); res = new IR(kOptColumnNameListP, OP3("(", ")", ""), tmp1); CASEEND CASESTART(1) res = new IR(kOptColumnNameListP, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptColumnNameListP::deep_delete() { SAFEDELETE(column_name_list_); delete this; }; void OptColumnNameListP::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) column_name_list_ = new ColumnNameList(); column_name_list_->generate(); CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND } IR *SetClauseList::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(set_clause_); res = new IR(kSetClauseList, OP3("", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(set_clause_); auto tmp2 = SAFETRANSLATE(set_clause_list_); res = new IR(kSetClauseList, OP3("", ",", ""), tmp1, tmp2); CASEEND SWITCHEND TRANSLATEEND } void SetClauseList::deep_delete() { SAFEDELETE(set_clause_); SAFEDELETE(set_clause_list_); delete this; }; void SetClauseList::generate() { GENERATESTART(200) SWITCHSTART CASESTART(0) set_clause_ = new SetClause(); set_clause_->generate(); CASEEND CASESTART(1) set_clause_ = new SetClause(); set_clause_->generate(); set_clause_list_ = new SetClauseList(); set_clause_list_->generate(); CASEEND default: { int tmp_case_idx = rand() % 1; switch (tmp_case_idx) { CASESTART(0) set_clause_ = new SetClause(); set_clause_->generate(); case_idx_ = 0; CASEEND } } } GENERATEEND } IR *SetClause::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(column_name_); auto tmp2 = SAFETRANSLATE(expr_); res = new IR(kSetClause, OP3("", "=", ""), tmp1, tmp2); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(column_name_list_); auto tmp2 = SAFETRANSLATE(expr_); res = new IR(kSetClause, OP3("(", ") =", ""), tmp1, tmp2); CASEEND SWITCHEND TRANSLATEEND } void SetClause::deep_delete() { SAFEDELETE(expr_); SAFEDELETE(column_name_list_); SAFEDELETE(column_name_); delete this; }; void SetClause::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) column_name_ = new ColumnName(); column_name_->generate(); expr_ = new Expr(); expr_->generate(); CASEEND CASESTART(1) column_name_list_ = new ColumnNameList(); column_name_list_->generate(); expr_ = new Expr(); expr_->generate(); CASEEND SWITCHEND GENERATEEND } IR *OptAsAlias::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(as_alias_); res = new IR(kOptAsAlias, OP3("", "", ""), tmp1); CASEEND CASESTART(1) res = new IR(kOptAsAlias, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptAsAlias::deep_delete() { SAFEDELETE(as_alias_); delete this; }; void OptAsAlias::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) as_alias_ = new AsAlias(); as_alias_->generate(); CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND } IR *Expr::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(operand_); res = new IR(kExpr, OP3("", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(between_expr_); res = new IR(kExpr, OP3("", "", ""), tmp1); CASEEND CASESTART(2) auto tmp1 = SAFETRANSLATE(exists_expr_); res = new IR(kExpr, OP3("", "", ""), tmp1); CASEEND CASESTART(3) auto tmp1 = SAFETRANSLATE(in_expr_); res = new IR(kExpr, OP3("", "", ""), tmp1); CASEEND CASESTART(4) auto tmp1 = SAFETRANSLATE(cast_expr_); res = new IR(kExpr, OP3("", "", ""), tmp1); CASEEND CASESTART(5) auto tmp1 = SAFETRANSLATE(logic_expr_); res = new IR(kExpr, OP3("", "", ""), tmp1); CASEEND SWITCHEND TRANSLATEEND } void Expr::deep_delete() { SAFEDELETE(cast_expr_); SAFEDELETE(in_expr_); SAFEDELETE(between_expr_); SAFEDELETE(operand_); SAFEDELETE(exists_expr_); SAFEDELETE(logic_expr_); delete this; }; void Expr::generate() { GENERATESTART(6) SWITCHSTART CASESTART(0) operand_ = new Operand(); operand_->generate(); CASEEND CASESTART(1) between_expr_ = new BetweenExpr(); between_expr_->generate(); CASEEND CASESTART(2) exists_expr_ = new ExistsExpr(); exists_expr_->generate(); CASEEND CASESTART(3) in_expr_ = new InExpr(); in_expr_->generate(); CASEEND CASESTART(4) cast_expr_ = new CastExpr(); cast_expr_->generate(); CASEEND CASESTART(5) logic_expr_ = new LogicExpr(); logic_expr_->generate(); CASEEND SWITCHEND GENERATEEND } IR *Operand::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(expr_list_); res = new IR(kOperand, OP3("(", ")", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(array_index_); res = new IR(kOperand, OP3("", "", ""), tmp1); CASEEND CASESTART(2) auto tmp1 = SAFETRANSLATE(scalar_expr_); res = new IR(kOperand, OP3("", "", ""), tmp1); CASEEND CASESTART(3) auto tmp1 = SAFETRANSLATE(unary_expr_); res = new IR(kOperand, OP3("", "", ""), tmp1); CASEEND CASESTART(4) auto tmp1 = SAFETRANSLATE(binary_expr_); res = new IR(kOperand, OP3("", "", ""), tmp1); CASEEND CASESTART(5) auto tmp1 = SAFETRANSLATE(case_expr_); res = new IR(kOperand, OP3("", "", ""), tmp1); CASEEND CASESTART(6) auto tmp1 = SAFETRANSLATE(extract_expr_); res = new IR(kOperand, OP3("", "", ""), tmp1); CASEEND CASESTART(7) auto tmp1 = SAFETRANSLATE(array_expr_); res = new IR(kOperand, OP3("", "", ""), tmp1); CASEEND CASESTART(8) auto tmp1 = SAFETRANSLATE(function_expr_); res = new IR(kOperand, OP3("", "", ""), tmp1); CASEEND CASESTART(9) auto tmp1 = SAFETRANSLATE(select_no_parens_); res = new IR(kOperand, OP3("(", ")", ""), tmp1); CASEEND SWITCHEND TRANSLATEEND } void Operand::deep_delete() { SAFEDELETE(function_expr_); SAFEDELETE(unary_expr_); SAFEDELETE(expr_list_); SAFEDELETE(case_expr_); SAFEDELETE(array_expr_); SAFEDELETE(select_no_parens_); SAFEDELETE(extract_expr_); SAFEDELETE(array_index_); SAFEDELETE(binary_expr_); SAFEDELETE(scalar_expr_); delete this; }; void Operand::generate() { GENERATESTART(10) SWITCHSTART CASESTART(0) expr_list_ = new ExprList(); expr_list_->generate(); CASEEND CASESTART(1) array_index_ = new ArrayIndex(); array_index_->generate(); CASEEND CASESTART(2) scalar_expr_ = new ScalarExpr(); scalar_expr_->generate(); CASEEND CASESTART(3) unary_expr_ = new UnaryExpr(); unary_expr_->generate(); CASEEND CASESTART(4) binary_expr_ = new BinaryExpr(); binary_expr_->generate(); CASEEND CASESTART(5) case_expr_ = new CaseExpr(); case_expr_->generate(); CASEEND CASESTART(6) extract_expr_ = new ExtractExpr(); extract_expr_->generate(); CASEEND CASESTART(7) array_expr_ = new ArrayExpr(); array_expr_->generate(); CASEEND CASESTART(8) function_expr_ = new FunctionExpr(); function_expr_->generate(); CASEEND CASESTART(9) select_no_parens_ = new SelectNoParens(); select_no_parens_->generate(); CASEEND SWITCHEND GENERATEEND } IR *CastExpr::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(expr_); auto tmp2 = SAFETRANSLATE(type_name_); res = new IR(kCastExpr, OP3("CAST (", "AS", ")"), tmp1, tmp2); TRANSLATEEND } void CastExpr::deep_delete() { SAFEDELETE(expr_); SAFEDELETE(type_name_); delete this; }; void CastExpr::generate() { GENERATESTART(1) expr_ = new Expr(); expr_->generate(); type_name_ = new TypeName(); type_name_->generate(); GENERATEEND } IR *ScalarExpr::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(column_name_); res = new IR(kScalarExpr, OP3("", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(literal_); res = new IR(kScalarExpr, OP3("", "", ""), tmp1); CASEEND SWITCHEND TRANSLATEEND } void ScalarExpr::deep_delete() { SAFEDELETE(literal_); SAFEDELETE(column_name_); delete this; }; void ScalarExpr::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) column_name_ = new ColumnName(); column_name_->generate(); CASEEND CASESTART(1) literal_ = new Literal(); literal_->generate(); CASEEND SWITCHEND GENERATEEND } IR *UnaryExpr::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(operand_); res = new IR(kUnaryExpr, OP3("-", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(operand_); res = new IR(kUnaryExpr, OP3("NOT", "", ""), tmp1); CASEEND CASESTART(2) auto tmp1 = SAFETRANSLATE(operand_); res = new IR(kUnaryExpr, OP3("", "ISNULL", ""), tmp1); CASEEND CASESTART(3) auto tmp1 = SAFETRANSLATE(operand_); res = new IR(kUnaryExpr, OP3("", "IS NULL", ""), tmp1); CASEEND CASESTART(4) auto tmp1 = SAFETRANSLATE(operand_); res = new IR(kUnaryExpr, OP3("", "IS NOT NULL", ""), tmp1); CASEEND CASESTART(5) res = new IR(kUnaryExpr, OP3("NULL", "", "")); CASEEND CASESTART(6) res = new IR(kUnaryExpr, OP3("*", "", "")); CASEEND SWITCHEND TRANSLATEEND } void UnaryExpr::deep_delete() { SAFEDELETE(operand_); delete this; }; void UnaryExpr::generate() { GENERATESTART(7) SWITCHSTART CASESTART(0) operand_ = new Operand(); operand_->generate(); CASEEND CASESTART(1) operand_ = new Operand(); operand_->generate(); CASEEND CASESTART(2) operand_ = new Operand(); operand_->generate(); CASEEND CASESTART(3) operand_ = new Operand(); operand_->generate(); CASEEND CASESTART(4) operand_ = new Operand(); operand_->generate(); CASEEND CASESTART(5) CASEEND CASESTART(6) CASEEND SWITCHEND GENERATEEND } IR *BinaryExpr::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(comp_expr_); res = new IR(kBinaryExpr, OP3("", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(operand_1_); auto tmp2 = SAFETRANSLATE(binary_op_); auto tmp3 = SAFETRANSLATE(operand_2_); auto tmp4 = new IR(kUnknown, OP3("", "", ""), tmp1, tmp2); PUSH(tmp4); res = new IR(kBinaryExpr, OP3("", "", ""), tmp4, tmp3); CASEEND CASESTART(2) auto tmp1 = SAFETRANSLATE(operand_1_); auto tmp2 = SAFETRANSLATE(operand_2_); res = new IR(kBinaryExpr, OP3("", "LIKE", ""), tmp1, tmp2); CASEEND CASESTART(3) auto tmp1 = SAFETRANSLATE(operand_1_); auto tmp2 = SAFETRANSLATE(operand_2_); res = new IR(kBinaryExpr, OP3("", "NOT LIKE", ""), tmp1, tmp2); CASEEND SWITCHEND TRANSLATEEND } void BinaryExpr::deep_delete() { SAFEDELETE(operand_1_); SAFEDELETE(operand_2_); SAFEDELETE(binary_op_); SAFEDELETE(comp_expr_); delete this; }; void BinaryExpr::generate() { GENERATESTART(4) SWITCHSTART CASESTART(0) comp_expr_ = new CompExpr(); comp_expr_->generate(); CASEEND CASESTART(1) operand_1_ = new Operand(); operand_1_->generate(); binary_op_ = new BinaryOp(); binary_op_->generate(); operand_2_ = new Operand(); operand_2_->generate(); CASEEND CASESTART(2) operand_1_ = new Operand(); operand_1_->generate(); operand_2_ = new Operand(); operand_2_->generate(); CASEEND CASESTART(3) operand_1_ = new Operand(); operand_1_->generate(); operand_2_ = new Operand(); operand_2_->generate(); CASEEND SWITCHEND GENERATEEND } IR *LogicExpr::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(expr_1_); auto tmp2 = SAFETRANSLATE(expr_2_); res = new IR(kLogicExpr, OP3("", "AND", ""), tmp1, tmp2); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(expr_1_); auto tmp2 = SAFETRANSLATE(expr_2_); res = new IR(kLogicExpr, OP3("", "OR", ""), tmp1, tmp2); CASEEND SWITCHEND TRANSLATEEND } void LogicExpr::deep_delete() { SAFEDELETE(expr_1_); SAFEDELETE(expr_2_); delete this; }; void LogicExpr::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) expr_1_ = new Expr(); expr_1_->generate(); expr_2_ = new Expr(); expr_2_->generate(); CASEEND CASESTART(1) expr_1_ = new Expr(); expr_1_->generate(); expr_2_ = new Expr(); expr_2_->generate(); CASEEND SWITCHEND GENERATEEND } IR *InExpr::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(operand_); auto tmp2 = SAFETRANSLATE(opt_not_); auto tmp3 = SAFETRANSLATE(select_no_parens_); auto tmp4 = new IR(kUnknown, OP3("", "", "IN"), tmp1, tmp2); PUSH(tmp4); res = new IR(kInExpr, OP3("", "(", ")"), tmp4, tmp3); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(operand_); auto tmp2 = SAFETRANSLATE(opt_not_); auto tmp3 = SAFETRANSLATE(expr_list_); auto tmp4 = new IR(kUnknown, OP3("", "", "IN"), tmp1, tmp2); PUSH(tmp4); res = new IR(kInExpr, OP3("", "(", ")"), tmp4, tmp3); CASEEND CASESTART(2) auto tmp1 = SAFETRANSLATE(operand_); auto tmp2 = SAFETRANSLATE(opt_not_); auto tmp3 = SAFETRANSLATE(table_name_); auto tmp4 = new IR(kUnknown, OP3("", "", "IN"), tmp1, tmp2); PUSH(tmp4); res = new IR(kInExpr, OP3("", "", ""), tmp4, tmp3); CASEEND SWITCHEND TRANSLATEEND } void InExpr::deep_delete() { SAFEDELETE(operand_); SAFEDELETE(expr_list_); SAFEDELETE(opt_not_); SAFEDELETE(table_name_); SAFEDELETE(select_no_parens_); delete this; }; void InExpr::generate() { GENERATESTART(3) SWITCHSTART CASESTART(0) operand_ = new Operand(); operand_->generate(); opt_not_ = new OptNot(); opt_not_->generate(); select_no_parens_ = new SelectNoParens(); select_no_parens_->generate(); CASEEND CASESTART(1) operand_ = new Operand(); operand_->generate(); opt_not_ = new OptNot(); opt_not_->generate(); expr_list_ = new ExprList(); expr_list_->generate(); CASEEND CASESTART(2) operand_ = new Operand(); operand_->generate(); opt_not_ = new OptNot(); opt_not_->generate(); table_name_ = new TableName(); table_name_->generate(); CASEEND SWITCHEND GENERATEEND } IR *CaseExpr::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(expr_1_); auto tmp2 = SAFETRANSLATE(case_list_); res = new IR(kCaseExpr, OP3("CASE", "", "END"), tmp1, tmp2); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(case_list_); res = new IR(kCaseExpr, OP3("CASE", "END", ""), tmp1); CASEEND CASESTART(2) auto tmp1 = SAFETRANSLATE(expr_1_); auto tmp2 = SAFETRANSLATE(case_list_); auto tmp3 = SAFETRANSLATE(expr_2_); auto tmp4 = new IR(kUnknown, OP3("CASE", "", "ELSE"), tmp1, tmp2); PUSH(tmp4); res = new IR(kCaseExpr, OP3("", "", "END"), tmp4, tmp3); CASEEND CASESTART(3) auto tmp1 = SAFETRANSLATE(case_list_); auto tmp2 = SAFETRANSLATE(expr_1_); res = new IR(kCaseExpr, OP3("CASE", "ELSE", "END"), tmp1, tmp2); CASEEND SWITCHEND TRANSLATEEND } void CaseExpr::deep_delete() { SAFEDELETE(expr_1_); SAFEDELETE(expr_2_); SAFEDELETE(case_list_); delete this; }; void CaseExpr::generate() { GENERATESTART(4) SWITCHSTART CASESTART(0) expr_1_ = new Expr(); expr_1_->generate(); case_list_ = new CaseList(); case_list_->generate(); CASEEND CASESTART(1) case_list_ = new CaseList(); case_list_->generate(); CASEEND CASESTART(2) expr_1_ = new Expr(); expr_1_->generate(); case_list_ = new CaseList(); case_list_->generate(); expr_2_ = new Expr(); expr_2_->generate(); CASEEND CASESTART(3) case_list_ = new CaseList(); case_list_->generate(); expr_1_ = new Expr(); expr_1_->generate(); CASEEND SWITCHEND GENERATEEND } IR *BetweenExpr::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(operand_1_); auto tmp2 = SAFETRANSLATE(operand_2_); auto tmp3 = SAFETRANSLATE(operand_3_); auto tmp4 = new IR(kUnknown, OP3("", "BETWEEN", "AND"), tmp1, tmp2); PUSH(tmp4); res = new IR(kBetweenExpr, OP3("", "", ""), tmp4, tmp3); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(operand_1_); auto tmp2 = SAFETRANSLATE(operand_2_); auto tmp3 = SAFETRANSLATE(operand_3_); auto tmp4 = new IR(kUnknown, OP3("", "NOT BETWEEN", "AND"), tmp1, tmp2); PUSH(tmp4); res = new IR(kBetweenExpr, OP3("", "", ""), tmp4, tmp3); CASEEND SWITCHEND TRANSLATEEND } void BetweenExpr::deep_delete() { SAFEDELETE(operand_1_); SAFEDELETE(operand_2_); SAFEDELETE(operand_3_); delete this; }; void BetweenExpr::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) operand_1_ = new Operand(); operand_1_->generate(); operand_2_ = new Operand(); operand_2_->generate(); operand_3_ = new Operand(); operand_3_->generate(); CASEEND CASESTART(1) operand_1_ = new Operand(); operand_1_->generate(); operand_2_ = new Operand(); operand_2_->generate(); operand_3_ = new Operand(); operand_3_->generate(); CASEEND SWITCHEND GENERATEEND } IR *ExistsExpr::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(opt_not_); auto tmp2 = SAFETRANSLATE(select_no_parens_); res = new IR(kExistsExpr, OP3("", "EXISTS (", ")"), tmp1, tmp2); TRANSLATEEND } void ExistsExpr::deep_delete() { SAFEDELETE(opt_not_); SAFEDELETE(select_no_parens_); delete this; }; void ExistsExpr::generate() { GENERATESTART(1) opt_not_ = new OptNot(); opt_not_->generate(); select_no_parens_ = new SelectNoParens(); select_no_parens_->generate(); GENERATEEND } IR *FunctionExpr::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(function_name_); auto tmp2 = SAFETRANSLATE(opt_filter_clause_); auto tmp3 = SAFETRANSLATE(opt_over_clause_); auto tmp4 = new IR(kUnknown, OP3("", "( )", ""), tmp1, tmp2); PUSH(tmp4); res = new IR(kFunctionExpr, OP3("", "", ""), tmp4, tmp3); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(function_name_); auto tmp2 = SAFETRANSLATE(opt_distinct_); auto tmp3 = SAFETRANSLATE(expr_list_); auto tmp4 = SAFETRANSLATE(opt_filter_clause_); auto tmp5 = SAFETRANSLATE(opt_over_clause_); auto tmp6 = new IR(kUnknown, OP3("", "(", ""), tmp1, tmp2); PUSH(tmp6); auto tmp7 = new IR(kUnknown, OP3("", "", ")"), tmp6, tmp3); PUSH(tmp7); auto tmp8 = new IR(kUnknown, OP3("", "", ""), tmp7, tmp4); PUSH(tmp8); res = new IR(kFunctionExpr, OP3("", "", ""), tmp8, tmp5); CASEEND SWITCHEND TRANSLATEEND } void FunctionExpr::deep_delete() { SAFEDELETE(expr_list_); SAFEDELETE(function_name_); SAFEDELETE(opt_filter_clause_); SAFEDELETE(opt_distinct_); SAFEDELETE(opt_over_clause_); delete this; }; void FunctionExpr::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) function_name_ = new FunctionName(); function_name_->generate(); opt_filter_clause_ = new OptFilterClause(); opt_filter_clause_->generate(); opt_over_clause_ = new OptOverClause(); opt_over_clause_->generate(); CASEEND CASESTART(1) function_name_ = new FunctionName(); function_name_->generate(); opt_distinct_ = new OptDistinct(); opt_distinct_->generate(); expr_list_ = new ExprList(); expr_list_->generate(); opt_filter_clause_ = new OptFilterClause(); opt_filter_clause_->generate(); opt_over_clause_ = new OptOverClause(); opt_over_clause_->generate(); CASEEND SWITCHEND GENERATEEND } IR *OptDistinct::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kOptDistinct, OP3("DISTINCT", "", "")); CASEEND CASESTART(1) res = new IR(kOptDistinct, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptDistinct::deep_delete() { delete this; }; void OptDistinct::generate(){GENERATESTART(2) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND} IR *OptFilterClause::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(expr_); res = new IR(kOptFilterClause, OP3("FILTER ( WHERE", ")", ""), tmp1); CASEEND CASESTART(1) res = new IR(kOptFilterClause, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptFilterClause::deep_delete() { SAFEDELETE(expr_); delete this; }; void OptFilterClause::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) expr_ = new Expr(); expr_->generate(); CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND } IR *OptOverClause::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(window_); res = new IR(kOptOverClause, OP3("OVER (", ")", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(window_name_); res = new IR(kOptOverClause, OP3("OVER", "", ""), tmp1); CASEEND CASESTART(2) res = new IR(kOptOverClause, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptOverClause::deep_delete() { SAFEDELETE(window_); SAFEDELETE(window_name_); delete this; }; void OptOverClause::generate() { GENERATESTART(3) SWITCHSTART CASESTART(0) window_ = new Window(); window_->generate(); CASEEND CASESTART(1) window_name_ = new WindowName(); window_name_->generate(); CASEEND CASESTART(2) CASEEND SWITCHEND GENERATEEND } IR *CaseList::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(case_clause_); res = new IR(kCaseList, OP3("", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(case_clause_); auto tmp2 = SAFETRANSLATE(case_list_); res = new IR(kCaseList, OP3("", "", ""), tmp1, tmp2); CASEEND SWITCHEND TRANSLATEEND } void CaseList::deep_delete() { SAFEDELETE(case_list_); SAFEDELETE(case_clause_); delete this; }; void CaseList::generate() { GENERATESTART(200) SWITCHSTART CASESTART(0) case_clause_ = new CaseClause(); case_clause_->generate(); CASEEND CASESTART(1) case_clause_ = new CaseClause(); case_clause_->generate(); case_list_ = new CaseList(); case_list_->generate(); CASEEND default: { int tmp_case_idx = rand() % 1; switch (tmp_case_idx) { CASESTART(0) case_clause_ = new CaseClause(); case_clause_->generate(); case_idx_ = 0; CASEEND } } } GENERATEEND } IR *CaseClause::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(expr_1_); auto tmp2 = SAFETRANSLATE(expr_2_); res = new IR(kCaseClause, OP3("WHEN", "THEN", ""), tmp1, tmp2); TRANSLATEEND } void CaseClause::deep_delete() { SAFEDELETE(expr_1_); SAFEDELETE(expr_2_); delete this; }; void CaseClause::generate() { GENERATESTART(1) expr_1_ = new Expr(); expr_1_->generate(); expr_2_ = new Expr(); expr_2_->generate(); GENERATEEND } IR *CompExpr::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(operand_1_); auto tmp2 = SAFETRANSLATE(operand_2_); res = new IR(kCompExpr, OP3("", "=", ""), tmp1, tmp2); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(operand_1_); auto tmp2 = SAFETRANSLATE(operand_2_); res = new IR(kCompExpr, OP3("", "!=", ""), tmp1, tmp2); CASEEND CASESTART(2) auto tmp1 = SAFETRANSLATE(operand_1_); auto tmp2 = SAFETRANSLATE(operand_2_); res = new IR(kCompExpr, OP3("", ">", ""), tmp1, tmp2); CASEEND CASESTART(3) auto tmp1 = SAFETRANSLATE(operand_1_); auto tmp2 = SAFETRANSLATE(operand_2_); res = new IR(kCompExpr, OP3("", "<", ""), tmp1, tmp2); CASEEND CASESTART(4) auto tmp1 = SAFETRANSLATE(operand_1_); auto tmp2 = SAFETRANSLATE(operand_2_); res = new IR(kCompExpr, OP3("", "<=", ""), tmp1, tmp2); CASEEND CASESTART(5) auto tmp1 = SAFETRANSLATE(operand_1_); auto tmp2 = SAFETRANSLATE(operand_2_); res = new IR(kCompExpr, OP3("", ">=", ""), tmp1, tmp2); CASEEND SWITCHEND TRANSLATEEND } void CompExpr::deep_delete() { SAFEDELETE(operand_1_); SAFEDELETE(operand_2_); delete this; }; void CompExpr::generate() { GENERATESTART(6) SWITCHSTART CASESTART(0) operand_1_ = new Operand(); operand_1_->generate(); operand_2_ = new Operand(); operand_2_->generate(); CASEEND CASESTART(1) operand_1_ = new Operand(); operand_1_->generate(); operand_2_ = new Operand(); operand_2_->generate(); CASEEND CASESTART(2) operand_1_ = new Operand(); operand_1_->generate(); operand_2_ = new Operand(); operand_2_->generate(); CASEEND CASESTART(3) operand_1_ = new Operand(); operand_1_->generate(); operand_2_ = new Operand(); operand_2_->generate(); CASEEND CASESTART(4) operand_1_ = new Operand(); operand_1_->generate(); operand_2_ = new Operand(); operand_2_->generate(); CASEEND CASESTART(5) operand_1_ = new Operand(); operand_1_->generate(); operand_2_ = new Operand(); operand_2_->generate(); CASEEND SWITCHEND GENERATEEND } IR *ExtractExpr::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(datetime_field_); auto tmp2 = SAFETRANSLATE(expr_); res = new IR(kExtractExpr, OP3("EXTRACT (", "FROM", ")"), tmp1, tmp2); TRANSLATEEND } void ExtractExpr::deep_delete() { SAFEDELETE(datetime_field_); SAFEDELETE(expr_); delete this; }; void ExtractExpr::generate() { GENERATESTART(1) datetime_field_ = new DatetimeField(); datetime_field_->generate(); expr_ = new Expr(); expr_->generate(); GENERATEEND } IR *DatetimeField::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kDatetimeField, OP3("SECOND", "", "")); CASEEND CASESTART(1) res = new IR(kDatetimeField, OP3("MINUTE", "", "")); CASEEND CASESTART(2) res = new IR(kDatetimeField, OP3("HOUR", "", "")); CASEEND CASESTART(3) res = new IR(kDatetimeField, OP3("DAY", "", "")); CASEEND CASESTART(4) res = new IR(kDatetimeField, OP3("MONTH", "", "")); CASEEND CASESTART(5) res = new IR(kDatetimeField, OP3("YEAR", "", "")); CASEEND SWITCHEND TRANSLATEEND } void DatetimeField::deep_delete() { delete this; }; void DatetimeField::generate(){ GENERATESTART(6) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND CASESTART(2) CASEEND CASESTART(3) CASEEND CASESTART(4) CASEEND CASESTART(5) CASEEND SWITCHEND GENERATEEND} IR *ArrayExpr::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(expr_list_); res = new IR(kArrayExpr, OP3("ARRAY [", "]", ""), tmp1); TRANSLATEEND } void ArrayExpr::deep_delete() { SAFEDELETE(expr_list_); delete this; }; void ArrayExpr::generate() { GENERATESTART(1) expr_list_ = new ExprList(); expr_list_->generate(); GENERATEEND } IR *ArrayIndex::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(operand_); auto tmp2 = SAFETRANSLATE(int_literal_); res = new IR(kArrayIndex, OP3("", "[", "]"), tmp1, tmp2); TRANSLATEEND } void ArrayIndex::deep_delete() { SAFEDELETE(operand_); SAFEDELETE(int_literal_); delete this; }; void ArrayIndex::generate() { GENERATESTART(1) operand_ = new Operand(); operand_->generate(); int_literal_ = new IntLiteral(); int_literal_->generate(); GENERATEEND } IR *Literal::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(string_literal_); res = new IR(kLiteral, OP3("", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(bool_literal_); res = new IR(kLiteral, OP3("", "", ""), tmp1); CASEEND CASESTART(2) auto tmp1 = SAFETRANSLATE(num_literal_); res = new IR(kLiteral, OP3("", "", ""), tmp1); CASEEND SWITCHEND TRANSLATEEND } void Literal::deep_delete() { SAFEDELETE(bool_literal_); SAFEDELETE(string_literal_); SAFEDELETE(num_literal_); delete this; }; void Literal::generate() { GENERATESTART(3) SWITCHSTART CASESTART(0) string_literal_ = new StringLiteral(); string_literal_->generate(); CASEEND CASESTART(1) bool_literal_ = new BoolLiteral(); bool_literal_->generate(); CASEEND CASESTART(2) num_literal_ = new NumLiteral(); num_literal_->generate(); CASEEND SWITCHEND GENERATEEND } IR *StringLiteral::translate(vector &v_ir_collector) { TRANSLATESTART res = new IR(kStringLiteral, string_val_, data_type_, scope_, data_flag_); TRANSLATEEND } void StringLiteral::deep_delete() { delete this; }; void StringLiteral::generate() { GENERATESTART(1) string_val_ = gen_string(); GENERATEEND } IR *BoolLiteral::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kBoolLiteral, OP3("TRUE", "", "")); CASEEND CASESTART(1) res = new IR(kBoolLiteral, OP3("FALSE", "", "")); CASEEND SWITCHEND TRANSLATEEND } void BoolLiteral::deep_delete() { delete this; }; void BoolLiteral::generate(){GENERATESTART(2) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND} IR *NumLiteral::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(int_literal_); res = new IR(kNumLiteral, OP3("", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(float_literal_); res = new IR(kNumLiteral, OP3("", "", ""), tmp1); CASEEND SWITCHEND TRANSLATEEND } void NumLiteral::deep_delete() { SAFEDELETE(int_literal_); SAFEDELETE(float_literal_); delete this; }; void NumLiteral::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) int_literal_ = new IntLiteral(); int_literal_->generate(); CASEEND CASESTART(1) float_literal_ = new FloatLiteral(); float_literal_->generate(); CASEEND SWITCHEND GENERATEEND } IR *IntLiteral::translate(vector &v_ir_collector) { TRANSLATESTART res = new IR(kIntLiteral, int_val_, data_type_, scope_, data_flag_); TRANSLATEEND } void IntLiteral::deep_delete() { delete this; }; void IntLiteral::generate() { GENERATESTART(1) int_val_ = gen_int(); GENERATEEND } IR *FloatLiteral::translate(vector &v_ir_collector) { TRANSLATESTART res = new IR(kFloatLiteral, float_val_, data_type_, scope_, data_flag_); TRANSLATEEND } void FloatLiteral::deep_delete() { delete this; }; void FloatLiteral::generate() { GENERATESTART(1) float_val_ = gen_float(); GENERATEEND } IR *OptColumn::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kOptColumn, OP3("COLUMN", "", "")); CASEEND CASESTART(1) res = new IR(kOptColumn, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptColumn::deep_delete() { delete this; }; void OptColumn::generate(){GENERATESTART(2) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND} IR *TriggerBody::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(drop_stmt_); res = new IR(kTriggerBody, OP3("", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(update_stmt_); res = new IR(kTriggerBody, OP3("", "", ""), tmp1); CASEEND CASESTART(2) auto tmp1 = SAFETRANSLATE(insert_stmt_); res = new IR(kTriggerBody, OP3("", "", ""), tmp1); CASEEND CASESTART(3) auto tmp1 = SAFETRANSLATE(alter_stmt_); res = new IR(kTriggerBody, OP3("", "", ""), tmp1); CASEEND SWITCHEND TRANSLATEEND } void TriggerBody::deep_delete() { SAFEDELETE(alter_stmt_); SAFEDELETE(drop_stmt_); SAFEDELETE(insert_stmt_); SAFEDELETE(update_stmt_); delete this; }; void TriggerBody::generate() { GENERATESTART(4) SWITCHSTART CASESTART(0) drop_stmt_ = new DropStmt(); drop_stmt_->generate(); CASEEND CASESTART(1) update_stmt_ = new UpdateStmt(); update_stmt_->generate(); CASEEND CASESTART(2) insert_stmt_ = new InsertStmt(); insert_stmt_->generate(); CASEEND CASESTART(3) alter_stmt_ = new AlterStmt(); alter_stmt_->generate(); CASEEND SWITCHEND GENERATEEND } IR *OptIfNotExist::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kOptIfNotExist, OP3("IF NOT EXISTS", "", "")); CASEEND CASESTART(1) res = new IR(kOptIfNotExist, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptIfNotExist::deep_delete() { delete this; }; void OptIfNotExist::generate(){GENERATESTART(2) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND} IR *OptIfExist::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kOptIfExist, OP3("IF EXISTS", "", "")); CASEEND CASESTART(1) res = new IR(kOptIfExist, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptIfExist::deep_delete() { delete this; }; void OptIfExist::generate(){GENERATESTART(2) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND} IR *Identifier::translate(vector &v_ir_collector) { TRANSLATESTART res = new IR(kIdentifier, string_val_, data_type_, scope_, data_flag_); TRANSLATEEND } void Identifier::deep_delete() { delete this; }; void Identifier::generate() { GENERATESTART(1) string_val_ = gen_string(); GENERATEEND } IR *AsAlias::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(identifier_); res = new IR(kAsAlias, OP3("AS", "", ""), tmp1); TRANSLATEEND } void AsAlias::deep_delete() { SAFEDELETE(identifier_); delete this; }; void AsAlias::generate() { GENERATESTART(1) identifier_ = new Identifier(); identifier_->generate(); GENERATEEND } IR *TableName::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(identifier_); res = new IR(kTableName, OP3("", "", ""), tmp1); TRANSLATEEND } void TableName::deep_delete() { SAFEDELETE(identifier_); delete this; }; void TableName::generate() { GENERATESTART(1) identifier_ = new Identifier(); identifier_->generate(); GENERATEEND } IR *ColumnName::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(identifier_); res = new IR(kColumnName, OP3("", "", ""), tmp1); TRANSLATEEND } void ColumnName::deep_delete() { SAFEDELETE(identifier_); delete this; }; void ColumnName::generate() { GENERATESTART(1) identifier_ = new Identifier(); identifier_->generate(); GENERATEEND } IR *OptIndexKeyword::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kOptIndexKeyword, OP3("UNIQUE", "", "")); CASEEND CASESTART(1) res = new IR(kOptIndexKeyword, OP3("FULLTEXT", "", "")); CASEEND CASESTART(2) res = new IR(kOptIndexKeyword, OP3("SPATIAL", "", "")); CASEEND CASESTART(3) res = new IR(kOptIndexKeyword, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptIndexKeyword::deep_delete() { delete this; }; void OptIndexKeyword::generate(){ GENERATESTART(4) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND CASESTART(2) CASEEND CASESTART(3) CASEEND SWITCHEND GENERATEEND} IR *ViewName::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(identifier_); res = new IR(kViewName, OP3("", "", ""), tmp1); TRANSLATEEND } void ViewName::deep_delete() { SAFEDELETE(identifier_); delete this; }; void ViewName::generate() { GENERATESTART(1) identifier_ = new Identifier(); identifier_->generate(); GENERATEEND } IR *FunctionName::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(identifier_); res = new IR(kFunctionName, OP3("", "", ""), tmp1); TRANSLATEEND } void FunctionName::deep_delete() { SAFEDELETE(identifier_); delete this; }; void FunctionName::generate() { GENERATESTART(1) identifier_ = new Identifier(); identifier_->generate(); GENERATEEND } IR *BinaryOp::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kBinaryOp, OP3("+", "", "")); CASEEND CASESTART(1) res = new IR(kBinaryOp, OP3("-", "", "")); CASEEND CASESTART(2) res = new IR(kBinaryOp, OP3("/", "", "")); CASEEND CASESTART(3) res = new IR(kBinaryOp, OP3("%", "", "")); CASEEND CASESTART(4) res = new IR(kBinaryOp, OP3("*", "", "")); CASEEND CASESTART(5) res = new IR(kBinaryOp, OP3("^", "", "")); CASEEND SWITCHEND TRANSLATEEND } void BinaryOp::deep_delete() { delete this; }; void BinaryOp::generate(){GENERATESTART(6) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND CASESTART(2) CASEEND CASESTART(3) CASEEND CASESTART(4) CASEEND CASESTART(5) CASEEND SWITCHEND GENERATEEND} IR *OptNot::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kOptNot, OP3("NOT", "", "")); CASEEND CASESTART(1) res = new IR(kOptNot, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptNot::deep_delete() { delete this; }; void OptNot::generate(){GENERATESTART(2) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND} IR *Name::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(identifier_); res = new IR(kName, OP3("", "", ""), tmp1); TRANSLATEEND } void Name::deep_delete() { SAFEDELETE(identifier_); delete this; }; void Name::generate() { GENERATESTART(1) identifier_ = new Identifier(); identifier_->generate(); GENERATEEND } IR *TypeName::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(numeric_type_); res = new IR(kTypeName, OP3("", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(character_type_); res = new IR(kTypeName, OP3("", "", ""), tmp1); CASEEND SWITCHEND TRANSLATEEND } void TypeName::deep_delete() { SAFEDELETE(numeric_type_); SAFEDELETE(character_type_); delete this; }; void TypeName::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) numeric_type_ = new NumericType(); numeric_type_->generate(); CASEEND CASESTART(1) character_type_ = new CharacterType(); character_type_->generate(); CASEEND SWITCHEND GENERATEEND } IR *CharacterType::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(character_with_length_); res = new IR(kCharacterType, OP3("", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(character_without_length_); res = new IR(kCharacterType, OP3("", "", ""), tmp1); CASEEND SWITCHEND TRANSLATEEND } void CharacterType::deep_delete() { SAFEDELETE(character_with_length_); SAFEDELETE(character_without_length_); delete this; }; void CharacterType::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) character_with_length_ = new CharacterWithLength(); character_with_length_->generate(); CASEEND CASESTART(1) character_without_length_ = new CharacterWithoutLength(); character_without_length_->generate(); CASEEND SWITCHEND GENERATEEND } IR *CharacterWithLength::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(character_conflicta_); auto tmp2 = SAFETRANSLATE(int_literal_); res = new IR(kCharacterWithLength, OP3("", "(", ")"), tmp1, tmp2); TRANSLATEEND } void CharacterWithLength::deep_delete() { SAFEDELETE(character_conflicta_); SAFEDELETE(int_literal_); delete this; }; void CharacterWithLength::generate() { GENERATESTART(1) character_conflicta_ = new CharacterConflicta(); character_conflicta_->generate(); int_literal_ = new IntLiteral(); int_literal_->generate(); GENERATEEND } IR *CharacterWithoutLength::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(character_conflicta_); res = new IR(kCharacterWithoutLength, OP3("", "", ""), tmp1); CASEEND CASESTART(1) res = new IR(kCharacterWithoutLength, OP3("SET", "", "")); CASEEND CASESTART(2) res = new IR(kCharacterWithoutLength, OP3("ENUM", "", "")); CASEEND CASESTART(3) res = new IR(kCharacterWithoutLength, OP3("BINARY", "", "")); CASEEND SWITCHEND TRANSLATEEND } void CharacterWithoutLength::deep_delete() { SAFEDELETE(character_conflicta_); delete this; }; void CharacterWithoutLength::generate() { GENERATESTART(4) SWITCHSTART CASESTART(0) character_conflicta_ = new CharacterConflicta(); character_conflicta_->generate(); CASEEND CASESTART(1) CASEEND CASESTART(2) CASEEND CASESTART(3) CASEEND SWITCHEND GENERATEEND } IR *CharacterConflicta::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kCharacterConflicta, OP3("CHARACTER", "", "")); CASEEND CASESTART(1) res = new IR(kCharacterConflicta, OP3("CHAR", "", "")); CASEEND CASESTART(2) res = new IR(kCharacterConflicta, OP3("VARCHAR", "", "")); CASEEND CASESTART(3) res = new IR(kCharacterConflicta, OP3("TEXT", "", "")); CASEEND CASESTART(4) res = new IR(kCharacterConflicta, OP3("TINYTEXT", "", "")); CASEEND CASESTART(5) res = new IR(kCharacterConflicta, OP3("MEDIUMTEXT", "", "")); CASEEND CASESTART(6) res = new IR(kCharacterConflicta, OP3("LONGTEXT", "", "")); CASEEND CASESTART(7) res = new IR(kCharacterConflicta, OP3("NATIONAL CHARACTER", "", "")); CASEEND CASESTART(8) res = new IR(kCharacterConflicta, OP3("NATIONAL CHAR", "", "")); CASEEND CASESTART(9) res = new IR(kCharacterConflicta, OP3("NCHAR", "", "")); CASEEND SWITCHEND TRANSLATEEND } void CharacterConflicta::deep_delete() { delete this; }; void CharacterConflicta::generate(){ GENERATESTART(10) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND CASESTART(2) CASEEND CASESTART(3) CASEEND CASESTART(4) CASEEND CASESTART(5) CASEEND CASESTART(6) CASEEND CASESTART(7) CASEEND CASESTART(8) CASEEND CASESTART(9) CASEEND SWITCHEND GENERATEEND} IR *NumericType::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kNumericType, OP3("INT", "", "")); CASEEND CASESTART(1) res = new IR(kNumericType, OP3("INTEGER", "", "")); CASEEND CASESTART(2) res = new IR(kNumericType, OP3("SMALLINT", "", "")); CASEEND CASESTART(3) res = new IR(kNumericType, OP3("BIGINT", "", "")); CASEEND CASESTART(4) res = new IR(kNumericType, OP3("REAL", "", "")); CASEEND CASESTART(5) res = new IR(kNumericType, OP3("FLOAT", "", "")); CASEEND CASESTART(6) res = new IR(kNumericType, OP3("FIXED", "", "")); CASEEND CASESTART(7) res = new IR(kNumericType, OP3("DOUBLE", "", "")); CASEEND CASESTART(8) res = new IR(kNumericType, OP3("DOUBLE PRECISION", "", "")); CASEEND CASESTART(9) res = new IR(kNumericType, OP3("DECIMAL", "", "")); CASEEND CASESTART(10) res = new IR(kNumericType, OP3("DEC", "", "")); CASEEND CASESTART(11) res = new IR(kNumericType, OP3("NUMERIC", "", "")); CASEEND CASESTART(12) res = new IR(kNumericType, OP3("BOOLEAN", "", "")); CASEEND SWITCHEND TRANSLATEEND } void NumericType::deep_delete() { delete this; }; void NumericType::generate(){ GENERATESTART(13) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND CASESTART(2) CASEEND CASESTART(3) CASEEND CASESTART(4) CASEEND CASESTART(5) CASEEND CASESTART(6) CASEEND CASESTART(7) CASEEND CASESTART(8) CASEEND CASESTART(9) CASEEND CASESTART(10) CASEEND CASESTART(11) CASEEND CASESTART(12) CASEEND SWITCHEND GENERATEEND} IR *OptTableConstraintList::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(table_constraint_list_); res = new IR(kOptTableConstraintList, OP3("", "", ""), tmp1); CASEEND CASESTART(1) res = new IR(kOptTableConstraintList, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptTableConstraintList::deep_delete() { SAFEDELETE(table_constraint_list_); delete this; }; void OptTableConstraintList::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) table_constraint_list_ = new TableConstraintList(); table_constraint_list_->generate(); CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND } IR *TableConstraintList::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(table_constraint_); res = new IR(kTableConstraintList, OP3("", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(table_constraint_); auto tmp2 = SAFETRANSLATE(table_constraint_list_); res = new IR(kTableConstraintList, OP3("", ",", ""), tmp1, tmp2); CASEEND SWITCHEND TRANSLATEEND } void TableConstraintList::deep_delete() { SAFEDELETE(table_constraint_); SAFEDELETE(table_constraint_list_); delete this; }; void TableConstraintList::generate() { GENERATESTART(200) SWITCHSTART CASESTART(0) table_constraint_ = new TableConstraint(); table_constraint_->generate(); CASEEND CASESTART(1) table_constraint_ = new TableConstraint(); table_constraint_->generate(); table_constraint_list_ = new TableConstraintList(); table_constraint_list_->generate(); CASEEND default: { int tmp_case_idx = rand() % 1; switch (tmp_case_idx) { CASESTART(0) table_constraint_ = new TableConstraint(); table_constraint_->generate(); case_idx_ = 0; CASEEND } } } GENERATEEND } IR *TableConstraint::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(constraint_name_); auto tmp2 = SAFETRANSLATE(indexed_column_list_); res = new IR(kTableConstraint, OP3("", "PRIMARY KEY (", ")"), tmp1, tmp2); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(constraint_name_); auto tmp2 = SAFETRANSLATE(indexed_column_list_); res = new IR(kTableConstraint, OP3("", "UNIQUE (", ")"), tmp1, tmp2); CASEEND CASESTART(2) auto tmp1 = SAFETRANSLATE(constraint_name_); auto tmp2 = SAFETRANSLATE(expr_); auto tmp3 = SAFETRANSLATE(opt_enforced_); auto tmp4 = new IR(kUnknown, OP3("", "CHECK (", ")"), tmp1, tmp2); PUSH(tmp4); res = new IR(kTableConstraint, OP3("", "", ""), tmp4, tmp3); CASEEND CASESTART(3) auto tmp1 = SAFETRANSLATE(constraint_name_); auto tmp2 = SAFETRANSLATE(column_name_list_); auto tmp3 = SAFETRANSLATE(reference_clause_); auto tmp4 = new IR(kUnknown, OP3("", "FOREIGN KEY (", ")"), tmp1, tmp2); PUSH(tmp4); res = new IR(kTableConstraint, OP3("", "", ""), tmp4, tmp3); CASEEND SWITCHEND TRANSLATEEND } void TableConstraint::deep_delete() { SAFEDELETE(indexed_column_list_); SAFEDELETE(column_name_list_); SAFEDELETE(expr_); SAFEDELETE(constraint_name_); SAFEDELETE(opt_enforced_); SAFEDELETE(reference_clause_); delete this; }; void TableConstraint::generate() { GENERATESTART(4) SWITCHSTART CASESTART(0) constraint_name_ = new ConstraintName(); constraint_name_->generate(); indexed_column_list_ = new IndexedColumnList(); indexed_column_list_->generate(); CASEEND CASESTART(1) constraint_name_ = new ConstraintName(); constraint_name_->generate(); indexed_column_list_ = new IndexedColumnList(); indexed_column_list_->generate(); CASEEND CASESTART(2) constraint_name_ = new ConstraintName(); constraint_name_->generate(); expr_ = new Expr(); expr_->generate(); opt_enforced_ = new OptEnforced(); opt_enforced_->generate(); CASEEND CASESTART(3) constraint_name_ = new ConstraintName(); constraint_name_->generate(); column_name_list_ = new ColumnNameList(); column_name_list_->generate(); reference_clause_ = new ReferenceClause(); reference_clause_->generate(); CASEEND SWITCHEND GENERATEEND } IR *OptEnforced::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kOptEnforced, OP3("ENFORCED", "", "")); CASEEND CASESTART(1) res = new IR(kOptEnforced, OP3("NOT ENFORCED", "", "")); CASEEND CASESTART(2) res = new IR(kOptEnforced, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptEnforced::deep_delete() { delete this; }; void OptEnforced::generate() { GENERATESTART(3) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND CASESTART(2) CASEEND SWITCHEND GENERATEEND } ================================================ FILE: srcs/internal/mysql/srcs/mutator.cpp ================================================ #include "../include/mutator.h" #include #include #include #include #include #include #include #include "../include/ast.h" #include "../include/define.h" #include "../include/utils.h" #define _NON_REPLACE_ using namespace std; //#define GRAPHLOG IR *Mutator::deep_copy_with_record(const IR *root, const IR *record) { IR *left = NULL, *right = NULL, *copy_res; if (root->left_) left = deep_copy_with_record(root->left_, record); if (root->right_) right = deep_copy_with_record(root->right_, record); if (root->op_ != NULL) copy_res = new IR(root->type_, OP3(root->op_->prefix_, root->op_->middle_, root->op_->suffix_), left, right, root->float_val_, root->str_val_, root->name_, root->mutated_times_, root->scope_, root->data_flag_); else copy_res = new IR(root->type_, NULL, left, right, root->float_val_, root->str_val_, root->name_, root->mutated_times_, root->scope_, root->data_flag_); copy_res->data_type_ = root->data_type_; if (root == record && record != NULL) { this->record_ = copy_res; } return copy_res; } vector Mutator::mutate_all(vector &v_ir_collector) { vector res; IR *root = v_ir_collector[v_ir_collector.size() - 1]; mutated_root_ = root; for (auto ir : v_ir_collector) { if (not_mutatable_types_.find(ir->type_) != not_mutatable_types_.end()) continue; vector v_mutated_ir = mutate(ir); for (auto i : v_mutated_ir) { IR *new_ir_tree = deep_copy_with_record(root, ir); replace(new_ir_tree, this->record_, i); extract_struct(new_ir_tree); string tmp = new_ir_tree->to_string(); unsigned tmp_hash = hash(tmp); if (global_hash_.find(tmp_hash) != global_hash_.end()) { deep_delete(new_ir_tree); continue; } global_hash_.insert(tmp_hash); res.push_back(new_ir_tree); } } return res; } void Mutator::add_ir_to_library(IR *cur) { extract_struct(cur); cur = deep_copy(cur); add_ir_to_library_no_deepcopy(cur); return; } void Mutator::add_ir_to_library_no_deepcopy(IR *cur) { if (cur->left_) add_ir_to_library_no_deepcopy(cur->left_); if (cur->right_) add_ir_to_library_no_deepcopy(cur->right_); auto type = cur->type_; auto h = hash(cur); if (find(ir_library_hash_[type].begin(), ir_library_hash_[type].end(), h) != ir_library_hash_[type].end()) return; ir_library_hash_[type].insert(h); ir_library_[type].push_back(cur); return; } void Mutator::init_common_string(string filename) { common_string_library_.push_back("DO_NOT_BE_EMPTY"); if (filename != "") { ifstream input_string(filename); string s; while (getline(input_string, s)) { common_string_library_.push_back(s); } } } void Mutator::init_data_library_2d(string filename) { ifstream input_file(filename); string s; cout << "[*] init data_library_2d: " << filename << endl; while (getline(input_file, s)) { vector v_strbuf; auto prev_pos = -1; for (int i = 0; i < 3; i++) { auto pos = s.find(" ", prev_pos + 1); v_strbuf.push_back(s.substr(prev_pos + 1, pos - prev_pos - 1)); prev_pos = pos; } v_strbuf.push_back(s.substr(prev_pos + 1, s.size() - prev_pos - 1)); auto data_type1 = get_datatype_by_string(v_strbuf[0]); auto data_type2 = get_datatype_by_string(v_strbuf[2]); g_data_library_2d_[data_type1][v_strbuf[1]][data_type2].push_back( v_strbuf[3]); } return; } void Mutator::init_data_library(string filename) { ifstream input_file(filename); string s; cout << "[*] init data_library: " << filename << endl; while (getline(input_file, s)) { auto pos = s.find(" "); if (pos == string::npos) continue; auto data_type = get_datatype_by_string(s.substr(0, pos)); auto v = s.substr(pos + 1, s.size() - pos - 1); g_data_library_[data_type].push_back(v); } return; } void Mutator::init_value_library() { vector value_lib_init = {0, (unsigned long)LONG_MAX, (unsigned long)ULONG_MAX, (unsigned long)CHAR_BIT, (unsigned long)SCHAR_MIN, (unsigned long)SCHAR_MAX, (unsigned long)UCHAR_MAX, (unsigned long)CHAR_MIN, (unsigned long)CHAR_MAX, (unsigned long)MB_LEN_MAX, (unsigned long)SHRT_MIN, (unsigned long)INT_MIN, (unsigned long)INT_MAX, (unsigned long)SCHAR_MIN, (unsigned long)SCHAR_MIN, (unsigned long)UINT_MAX, (unsigned long)FLT_MAX, (unsigned long)DBL_MAX, (unsigned long)LDBL_MAX, (unsigned long)FLT_MIN, (unsigned long)DBL_MIN, (unsigned long)LDBL_MIN}; value_library_.insert(value_library_.begin(), value_lib_init.begin(), value_lib_init.end()); return; } void Mutator::init_ir_library(string filename) { ifstream input_file(filename); string line; cout << "[*] init ir_library: " << filename << endl; while (getline(input_file, line)) { if (line.empty()) continue; auto p = parser(line); if (p == NULL) continue; vector v_ir; auto res = p->translate(v_ir); p->deep_delete(); p = NULL; add_ir_to_library(res); deep_delete(res); } return; } void Mutator::init_safe_generate_type(string filename) { ifstream input_file(filename); string line; cout << "[*] init safe generate type: " << filename << endl; while (getline(input_file, line)) { if (line.empty()) continue; auto node_type = get_nodetype_by_string("k" + line); safe_generate_type_.insert(node_type); } } void Mutator::init(string f_testcase, string f_common_string, string file2d, string file1d, string f_gen_type) { if (!f_testcase.empty()) init_ir_library(f_testcase); // init value_library_ init_value_library(); // init common_string_library if (!f_common_string.empty()) init_common_string(f_common_string); // init data_library_2d if (!file2d.empty()) init_data_library_2d(file2d); if (!file1d.empty()) init_data_library(file1d); if (!f_gen_type.empty()) init_safe_generate_type(f_gen_type); float_types_.insert({kFloatLiteral}); int_types_.insert(kIntLiteral); string_types_.insert(kStringLiteral); relationmap_[kDataColumnName][kDataTableName] = kRelationSubtype; relationmap_[kDataPragmaValue][kDataPragmaKey] = kRelationSubtype; relationmap_[kDataTableName][kDataTableName] = kRelationElement; relationmap_[kDataColumnName][kDataColumnName] = kRelationElement; split_stmt_types_.insert(kStmt); split_substmt_types_.insert({kStmt, kSelectClause, kSelectStmt}); #define MYSQLFUZZ #ifdef MYSQLFUZZ not_mutatable_types_.insert( {kProgram, kStmtlist, kStmt, kCreateStmt, kDropStmt, kCreateTableStmt, kCreateIndexStmt, kCreateTriggerStmt, kCreateViewStmt, kDropIndexStmt, kDropTableStmt, kDropTriggerStmt, kDropViewStmt, kSelectStmt, kUpdateStmt, kInsertStmt, kAlterStmt}); #else not_mutatable_types_.insert({kProgram, kStmtlist, kStmt, kCreateStmt, kDropStmt, kCreateTableStmt, kCreateIndexStmt, kCreateViewStmt, kDropIndexStmt, kDropTableStmt, kDropViewStmt, kSelectStmt, kUpdateStmt, kInsertStmt, kAlterStmt, kReindexStmt}); #endif return; } vector Mutator::mutate(IR *input) { vector res; if (!lucky_enough_to_be_mutated(input->mutated_times_)) { return res; } auto tmp = strategy_delete(input); if (tmp != NULL) { res.push_back(tmp); } tmp = strategy_insert(input); if (tmp != NULL) { res.push_back(tmp); } tmp = strategy_replace(input); if (tmp != NULL) { res.push_back(tmp); } input->mutated_times_ += res.size(); for (auto i : res) { if (i == NULL) continue; i->mutated_times_ = input->mutated_times_; } return res; } bool Mutator::replace(IR *root, IR *old_ir, IR *new_ir) { auto parent_ir = locate_parent(root, old_ir); if (parent_ir == NULL) return false; if (parent_ir->left_ == old_ir) { deep_delete(old_ir); parent_ir->left_ = new_ir; return true; } else if (parent_ir->right_ == old_ir) { deep_delete(old_ir); parent_ir->right_ = new_ir; return true; } return false; } IR *Mutator::locate_parent(IR *root, IR *old_ir) { if (root->left_ == old_ir || root->right_ == old_ir) return root; if (root->left_ != NULL) if (auto res = locate_parent(root->left_, old_ir)) return res; if (root->right_ != NULL) if (auto res = locate_parent(root->right_, old_ir)) return res; return NULL; } IR *Mutator::strategy_delete(IR *cur) { assert(cur); MUTATESTART DOLEFT res = deep_copy(cur); if (res->left_ != NULL) deep_delete(res->left_); res->left_ = NULL; DORIGHT res = deep_copy(cur); if (res->right_ != NULL) deep_delete(res->right_); res->right_ = NULL; DOBOTH res = deep_copy(cur); if (res->left_ != NULL) deep_delete(res->left_); if (res->right_ != NULL) deep_delete(res->right_); res->left_ = res->right_ = NULL; MUTATEEND } IR *Mutator::strategy_insert(IR *cur) { assert(cur); auto res = deep_copy(cur); auto parent_type = cur->type_; if (res->right_ == NULL && res->left_ != NULL) { auto left_type = res->left_->type_; for (int k = 0; k < 4; k++) { auto fetch_ir = get_ir_from_library(parent_type); if (fetch_ir->left_ != NULL && fetch_ir->left_->type_ == left_type && fetch_ir->right_ != NULL) { res->right_ = deep_copy(fetch_ir->right_); return res; } } } else if (res->right_ != NULL && res->left_ == NULL) { auto right_type = res->left_->type_; for (int k = 0; k < 4; k++) { auto fetch_ir = get_ir_from_library(parent_type); if (fetch_ir->right_ != NULL && fetch_ir->right_->type_ == right_type && fetch_ir->left_ != NULL) { res->left_ = deep_copy(fetch_ir->left_); return res; } } } else if (res->left_ == NULL && res->right_ == NULL) { for (int k = 0; k < 4; k++) { auto fetch_ir = get_ir_from_library(parent_type); if (fetch_ir->right_ != NULL && fetch_ir->left_ != NULL) { res->left_ = deep_copy(fetch_ir->left_); res->right_ = deep_copy(fetch_ir->right_); return res; } } } return res; } IR *Mutator::strategy_replace(IR *cur) { assert(cur); MUTATESTART DOLEFT if (cur->left_ != NULL) { res = deep_copy(cur); auto new_node = get_ir_from_library(res->left_->type_); new_node->data_type_ = res->left_->data_type_; deep_delete(res->left_); res->left_ = deep_copy(new_node); } DORIGHT if (cur->right_ != NULL) { res = deep_copy(cur); auto new_node = get_ir_from_library(res->right_->type_); new_node->data_type_ = res->right_->data_type_; deep_delete(res->right_); res->right_ = deep_copy(new_node); } DOBOTH if (cur->left_ != NULL && cur->right_ != NULL) { res = deep_copy(cur); auto new_left = get_ir_from_library(res->left_->type_); auto new_right = get_ir_from_library(res->right_->type_); new_left->data_type_ = res->left_->data_type_; new_right->data_type_ = res->right_->data_type_; deep_delete(res->right_); res->right_ = deep_copy(new_right); deep_delete(res->left_); res->left_ = deep_copy(new_left); } MUTATEEND return res; } bool Mutator::lucky_enough_to_be_mutated(unsigned int mutated_times) { if (get_rand_int(mutated_times + 1) < LUCKY_NUMBER) { return true; } return false; } pair Mutator::get_data_2d_by_type(DATATYPE type1, DATATYPE type2) { pair res("", ""); auto size = data_library_2d_[type1].size(); if (size == 0) return res; auto rint = get_rand_int(size); int counter = 0; for (auto &i : data_library_2d_[type1]) { if (counter++ == rint) { return std::make_pair(i.first, vector_rand_ele(i.second[type2])); } } return res; } IR *Mutator::generate_ir_by_type(IRTYPE type) { auto ast_node = generate_ast_node_by_type(type); ast_node->generate(); vector tmp_vector; ast_node->translate(tmp_vector); assert(tmp_vector.size()); return tmp_vector[tmp_vector.size() - 1]; } IR *Mutator::get_ir_from_library(IRTYPE type) { const int generate_prop = 1; const int threshold = 0; static IR *empty_ir = new IR(kStringLiteral, ""); #ifdef USEGENERATE if (ir_library_[type].empty() == true || (get_rand_int(400) == 0 && type != kUnknown)) { auto ir = generate_ir_by_type(type); add_ir_to_library_no_deepcopy(ir); return ir; } #endif if (ir_library_[type].empty()) return empty_ir; return vector_rand_ele(ir_library_[type]); } string Mutator::get_a_string() { unsigned com_size = common_string_library_.size(); unsigned lib_size = string_library_.size(); unsigned double_lib_size = lib_size * 2; unsigned rand_int = get_rand_int(double_lib_size + com_size); if (rand_int < double_lib_size) { return string_library_[rand_int >> 1]; } else { rand_int -= double_lib_size; return common_string_library_[rand_int]; } } unsigned long Mutator::get_a_val() { assert(value_library_.size()); return vector_rand_ele(value_library_); } unsigned long Mutator::hash(string &sql) { return ducking_hash(sql.c_str(), sql.size()); } unsigned long Mutator::hash(IR *root) { auto tmp_str = move(root->to_string()); return this->hash(tmp_str); } void Mutator::debug(IR *root) { for (auto &i : data_library_[kDataFunctionName]) { cout << i << endl; } } Mutator::~Mutator() {} void Mutator::extract_struct(IR *root) { static int counter = 0; auto type = root->type_; if (root->left_) { extract_struct(root->left_); } if (root->right_) { extract_struct(root->right_); } if (root->left_ || root->right_) return; if (root->data_type_ != kDataWhatever) { root->str_val_ = "x"; return; } if (string_types_.find(type) != string_types_.end()) { root->str_val_ = "'x'"; } else if (int_types_.find(type) != int_types_.end()) { root->int_val_ = 1; } else if (float_types_.find(type) != float_types_.end()) { root->float_val_ = 1.0; } } void Mutator::extract_struct2(IR *root) { static int counter = 0; auto type = root->type_; if (root->left_) { extract_struct2(root->left_); } if (root->right_) { extract_struct2(root->right_); } if (root->left_ || root->right_) return; if (root->data_type_ != kDataWhatever) { root->str_val_ = "x" + to_string(counter++); return; } if (string_types_.find(type) != string_types_.end()) { root->str_val_ = "'x'"; } else if (int_types_.find(type) != int_types_.end()) { root->int_val_ = 1; } else if (float_types_.find(type) != float_types_.end()) { root->float_val_ = 1.0; } } void Mutator::reset_data_library() { data_library_.clear(); data_library_2d_.clear(); } string Mutator::parse_data(string &input) { string res; if (!input.compare("_int_")) { res = to_string(get_a_val()); } else if (!input.compare("_empty_")) { res = ""; } else if (!input.compare("_boolean_")) { if (get_rand_int(2) == 0) res = "false"; else res = "true"; } else if (!input.compare("_string_")) { res = get_a_string(); } else { res = input; } return res; } bool Mutator::validate(IR *&root) { reset_data_library(); string sql = root->to_string(); auto ast = parser(sql); if (ast == NULL) return false; deep_delete(root); root = NULL; vector ir_vector; ast->translate(ir_vector); ast->deep_delete(); root = ir_vector[ir_vector.size() - 1]; reset_id_counter(); if (fix(root) == false) { return false; } return true; } unsigned int Mutator::calc_node(IR *root) { unsigned int res = 0; if (root->left_) res += calc_node(root->left_); if (root->right_) res += calc_node(root->right_); return res + 1; } bool Mutator::fix(IR *root) { map m_save; bool res = true; auto stmts = split_to_stmt(root, m_save, split_stmt_types_); if (stmts.size() > 8) { connect_back(m_save); return false; } clear_scope_library(true); for (auto &stmt : stmts) { map m_substmt_save; auto substmts = split_to_stmt(stmt, m_substmt_save, split_substmt_types_); int stmt_num = substmts.size(); if (stmt_num > 4) { connect_back(m_save); connect_back(m_substmt_save); return false; } for (auto &substmt : substmts) { clear_scope_library(false); int tmp_node_num = calc_node(substmt); if ((stmt_num == 1 && tmp_node_num > 150) || tmp_node_num > 120) { connect_back(m_save); connect_back(m_substmt_save); return false; } res = fix_one(substmt, scope_library_) && res; if (res == false) { connect_back(m_save); connect_back(m_substmt_save); return false; } } res = connect_back(m_substmt_save) && res; } res = connect_back(m_save) && res; return res; } vector Mutator::split_to_stmt(IR *root, map &m_save, set &split_set) { vector res; deque bfs = {root}; while (!bfs.empty()) { auto node = bfs.front(); bfs.pop_front(); if (node && node->left_) bfs.push_back(node->left_); if (node && node->right_) bfs.push_back(node->right_); if (node->left_ && find(split_set.begin(), split_set.end(), node->left_->type_) != split_set.end()) { res.push_back(node->left_); m_save[&node->left_] = node->left_; node->left_ = NULL; } if (node->right_ && find(split_set.begin(), split_set.end(), node->right_->type_) != split_set.end()) { res.push_back(node->right_); m_save[&node->right_] = node->right_; node->right_ = NULL; } } if (find(split_set.begin(), split_set.end(), root->type_) != split_set.end()) res.push_back(root); return res; } bool Mutator::connect_back(map &m_save) { for (auto &iter : m_save) { *(iter.first) = iter.second; } return true; } static set visited; bool Mutator::fix_one(IR *stmt_root, map>> &scope_library) { visited.clear(); analyze_scope(stmt_root); auto graph = build_graph(stmt_root, scope_library); #ifdef GRAPHLOG for (auto &iter : graph) { cout << "Node: " << iter.first->to_string() << " connected with:" << endl; for (auto &k : iter.second) { cout << k->to_string() << endl; } cout << "--------" << endl; } cout << "OUTPUT END" << endl; #endif return fill_stmt_graph(graph); } void Mutator::analyze_scope(IR *stmt_root) { if (stmt_root->left_) { analyze_scope(stmt_root->left_); } if (stmt_root->right_) { analyze_scope(stmt_root->right_); } auto data_type = stmt_root->data_type_; if (data_type == kDataWhatever) return; scope_library_[stmt_root->scope_][data_type].push_back(stmt_root); } map> Mutator::build_graph( IR *stmt_root, map>> &scope_library) { map> res; deque bfs = {stmt_root}; while (!bfs.empty()) { auto node = bfs.front(); bfs.pop_front(); auto cur_scope = node->scope_; auto cur_data_flag = node->data_flag_; auto cur_data_type = node->data_type_; if (find(int_types_.begin(), int_types_.end(), node->type_) != int_types_.end()) { if (get_rand_int(100) > 50) node->int_val_ = vector_rand_ele(value_library_); else node->int_val_ = get_rand_int(100); } else if (find(float_types_.begin(), float_types_.end(), node->type_) != float_types_.end()) { node->float_val_ = (double)(get_rand_int(100000000)); } if (node->left_) bfs.push_back(node->left_); if (node->right_) bfs.push_back(node->right_); if (cur_data_type == kDataWhatever) continue; res[node]; cur_scope--; if (relationmap_.find(cur_data_type) != relationmap_.end()) { auto &target_data_type_map = relationmap_[cur_data_type]; for (auto &target : target_data_type_map) { IR *pick_node = NULL; if (isMapToClosestOne(cur_data_flag)) { pick_node = find_closest_node(stmt_root, node, target.first); if (pick_node && pick_node->scope_ != cur_scope) { pick_node = NULL; } } else { if (!node->str_val_.empty()) { } if (!isDefine(cur_data_flag) || relationmap_[cur_data_type][target.first] != kRelationElement) { if (!scope_library[cur_scope][target.first].empty()) pick_node = vector_rand_ele(scope_library[cur_scope][target.first]); } } if (pick_node != NULL) res[pick_node].push_back(node); } } } return res; } bool Mutator::fill_stmt_graph(map> &graph) { bool res = true; map zero_indegrees; for (auto &iter : graph) { if (zero_indegrees.find(iter.first) == zero_indegrees.end()) { zero_indegrees[iter.first] = true; } for (auto ir : iter.second) { zero_indegrees[ir] = false; } } for (auto &iter : graph) { auto type1 = iter.first->data_type_; auto beg = iter.first; if (zero_indegrees[beg] == false || visited.find(beg) != visited.end()) { continue; } res &= fill_one(iter.first); res &= fill_stmt_graph_one(graph, iter.first); } return res; } bool Mutator::fill_stmt_graph_one(map> &graph, IR *ir) { if (graph.find(ir) == graph.end()) return true; bool res = true; auto type = ir->data_type_; auto &vec = graph[ir]; if (!vec.empty()) { for (auto d : vec) { res = res & fill_one_pair(ir, d); res = res & fill_stmt_graph_one(graph, d); } } return res; } static bool replace_in_vector(string &old_str, string &new_str, vector &victim) { for (int i = 0; i < victim.size(); i++) { if (victim[i] == old_str) { victim[i] = new_str; return true; } } return false; } static bool remove_in_vector(string &str_to_remove, vector &victim) { for (auto iter = victim.begin(); iter != victim.end(); iter++) { if (*iter == str_to_remove) { victim.erase(iter); return true; } } return false; } bool Mutator::remove_one_from_datalibrary(DATATYPE datatype, string &key) { return remove_in_vector(key, data_library_[datatype]); } bool Mutator::replace_one_from_datalibrary(DATATYPE datatype, string &old_str, string &new_str) { return replace_in_vector(old_str, new_str, data_library_[datatype]); } bool Mutator::remove_one_pair_from_datalibrary_2d(DATATYPE p_datatype, DATATYPE c_data_type, string &p_key) { for (auto &value : data_library_2d_[p_datatype][p_key][c_data_type]) { remove_one_from_datalibrary(c_data_type, value); } data_library_2d_[p_datatype][p_key].erase(c_data_type); if (data_library_2d_[p_datatype][p_key].empty()) { remove_one_from_datalibrary(p_datatype, p_key); data_library_2d_[p_datatype].erase(p_key); } return true; } #define has_element(a, b) (find(a.begin(), a.end(), b) != (a).end()) #define has_key(a, b) ((a).find(b) != (a).end()) bool Mutator::replace_one_value_from_datalibray_2d(DATATYPE p_datatype, DATATYPE c_data_type, string &p_key, string &old_c_value, string &new_c_value) { replace_one_from_datalibrary(c_data_type, old_c_value, new_c_value); replace_in_vector(old_c_value, new_c_value, data_library_2d_[p_datatype][p_key][c_data_type]); return true; } bool Mutator::fill_one(IR *ir) { auto type = ir->data_type_; visited.insert(ir); if (isDefine(ir->data_flag_)) { string new_name = gen_id_name(); data_library_[type].push_back(new_name); ir->str_val_ = new_name; for (auto iter : relationmap_) { for (auto iter2 : iter.second) { if (iter2.first == type && iter2.second == kRelationSubtype) { data_library_2d_[type][new_name]; } } } return true; } else if (isAlias(ir->data_flag_)) { string alias_target; if (data_library_[type].size() != 0) alias_target = vector_rand_ele(data_library_[type]); else { alias_target = get_rand_int(2) ? "v0" : "v1"; } string new_name = gen_id_name(); data_library_[type].push_back(new_name); ir->str_val_ = new_name; if (has_key(data_library_2d_, type)) { if (has_key(data_library_2d_[type], alias_target)) { data_library_2d_[type][new_name] = data_library_2d_[type][alias_target]; } } return true; } else if (data_library_.find(type) != data_library_.end()) { if (data_library_[type].empty()) { ir->str_val_ = "v0"; return false; } ir->str_val_ = vector_rand_ele(data_library_[type]); if (isUndefine(ir->data_flag_)) { remove_one_from_datalibrary(ir->data_type_, ir->str_val_); if (has_key(data_library_2d_, type) && has_key(data_library_2d_[type], ir->str_val_)) { for (auto itr = data_library_2d_[type][ir->str_val_].begin(); has_key(data_library_2d_[type], ir->str_val_) && itr != data_library_2d_[type][ir->str_val_].end(); itr++) { auto c_data_type = *itr; remove_one_pair_from_datalibrary_2d(type, c_data_type.first, ir->str_val_); if (!has_key(data_library_2d_[type], ir->str_val_)) break; itr--; } } } return true; } else if (g_data_library_.find(type) != g_data_library_.end()) { if (g_data_library_[type].empty()) { return false; } ir->str_val_ = vector_rand_ele(g_data_library_[type]); return true; } else if (g_data_library_2d_.find(type) != g_data_library_2d_.end()) { int choice = get_rand_int(g_data_library_2d_[type].size()); auto iter = g_data_library_2d_[type].begin(); while (choice > 0) { iter++; choice--; } ir->str_val_ = iter->first; return true; } else { return false; } return true; } bool Mutator::fill_one_pair(IR *parent, IR *child) { visited.insert(child); bool is_define = isDefine(child->data_flag_); bool is_replace = isReplace(child->data_flag_); bool is_undefine = isUndefine(child->data_flag_); bool is_alias = isAlias(child->data_flag_); string new_name = ""; if (is_define || is_replace || is_alias) { new_name = gen_id_name(); } auto p_type = parent->data_type_; auto c_type = child->data_type_; auto p_str = parent->str_val_; auto r_type = relationmap_[c_type][p_type]; switch (r_type) { case kRelationElement: if (is_replace) { child->str_val_ = new_name; replace_one_from_datalibrary(c_type, p_str, new_name); if (has_key(data_library_2d_, p_type)) { if (has_key(data_library_2d_[p_type], p_str)) { auto tmp = data_library_2d_[p_type].extract(p_str); tmp.key() = new_name; data_library_2d_[p_type].insert(move(tmp)); } } else { for (auto &i1 : data_library_2d_) { for (auto &i2 : i1.second) { for (auto &i3 : i2.second) { if (i3.first == c_type) { if (has_element(i3.second, p_str)) { replace_in_vector(p_str, new_name, i3.second); goto END; } } } } } } } else if (is_alias) { child->str_val_ = new_name; if (has_key(data_library_2d_, p_type)) { if (has_key(data_library_2d_[p_type], p_str)) { data_library_2d_[p_type][new_name] = data_library_2d_[p_type][p_str]; data_library_[p_type].push_back(new_name); } } } else { child->str_val_ = p_str; } END: break; case kRelationSubtype: if (data_library_2d_.find(p_type) != data_library_2d_.end()) { if (data_library_2d_[p_type].find(p_str) != data_library_2d_[p_type].end()) { if (is_define) { data_library_2d_[p_type][p_str][c_type].push_back(new_name); child->str_val_ = new_name; data_library_[c_type].push_back(new_name); break; } else if (is_undefine) { if ((data_library_2d_[p_type][p_str][c_type]).empty()) { child->str_val_ = "v1"; break; } child->str_val_ = vector_rand_ele(data_library_2d_[p_type][p_str][c_type]); remove_in_vector(child->str_val_, data_library_2d_[p_type][p_str][c_type]); remove_in_vector(child->str_val_, data_library_[c_type]); break; } else if (data_library_2d_[p_type][p_str].find(c_type) != data_library_2d_[p_type][p_str].end()) { if (data_library_2d_[p_type][p_str][c_type].empty() == false) { child->str_val_ = vector_rand_ele(data_library_2d_[p_type][p_str][c_type]); } } else { if (data_library_[c_type].empty()) { if (get_rand_int(2) == 1) { child->str_val_ = "v0"; } else { child->str_val_ = "v1"; } } else child->str_val_ = vector_rand_ele(data_library_[c_type]); } } else { } } else if (g_data_library_2d_.find(p_type) != g_data_library_2d_.end()) { if (g_data_library_2d_[p_type].find(p_str) != g_data_library_2d_[p_type].end()) { if (g_data_library_2d_[p_type][p_str].find(c_type) != g_data_library_2d_[p_type][p_str].end()) { if (g_data_library_2d_[p_type][p_str][c_type].empty() == false) { child->str_val_ = vector_rand_ele(g_data_library_2d_[p_type][p_str][c_type]); } } } } else { return false; } break; default: assert(0); break; } return true; } void Mutator::clear_scope_library(bool clear_define) { int level = clear_define ? 0 : 1; int sz = scope_library_.size(); scope_library_.clear(); return; } static IR *search_mapped_ir(IR *ir, DATATYPE type) { vector to_search; vector backup; to_search.push_back(ir); while (!to_search.empty()) { for (auto i : to_search) { if (i->data_type_ == type) { return i; } if (i->left_) { backup.push_back(i->left_); } if (i->right_) { backup.push_back(i->right_); } } to_search = move(backup); backup.clear(); } return NULL; } IR *Mutator::find_closest_node(IR *stmt_root, IR *node, DATATYPE type) { auto cur = node; while (true) { auto parent = locate_parent(stmt_root, cur); if (!parent) break; bool flag = false; while (parent->left_ == NULL || parent->right_ == NULL) { cur = parent; parent = locate_parent(stmt_root, cur); if (!parent) { flag = true; break; } } if (flag) return NULL; auto search_root = parent->left_ == cur ? parent->right_ : parent->left_; auto res = search_mapped_ir(search_root, type); if (res) return res; cur = parent; } return NULL; } int Mutator::try_fix(char *buf, int len, char *&new_buf, int &new_len) { string sql(buf); auto ast = parser(sql); new_buf = buf; new_len = len; if (ast == NULL) return 0; vector v_ir; auto ir_root = ast->translate(v_ir); ast->deep_delete(); if (ir_root == NULL) return 0; bool fixed_result = validate(ir_root); string fixed; if (fixed_result != false) { fixed = ir_root->to_string(); } deep_delete(ir_root); if (fixed.empty()) return 0; char *sfixed = (char *)malloc(fixed.size() + 1); memcpy(sfixed, fixed.c_str(), fixed.size()); sfixed[fixed.size()] = 0; new_buf = sfixed; new_len = fixed.size(); return 1; } ================================================ FILE: srcs/internal/mysql/srcs/utils.cpp ================================================ #include "../include/utils.h" #include #include #include #include void trim_string(string &res) { int count = 0; int idx = 0; bool expect_space = false; for (int i = 0; i < res.size(); i++) { if (res[i] == ';' && i != res.size() - 1) { res[i + 1] = '\n'; } if (res[i] == ' ') { if (expect_space == false) { continue; } else { expect_space = false; res[idx++] = res[i]; count++; } } else { expect_space = true; res[idx++] = res[i]; count++; } } res.resize(count); } string gen_string() { return string("x"); } double gen_float() { return 1.2; } long gen_long() { return 1; } int gen_int() { return 1; } typedef unsigned long uint64_t; Program *parser(string sql) { yyscan_t scanner; YY_BUFFER_STATE state; Program *p = new Program(); if (ff_lex_init(&scanner)) { return NULL; } state = ff__scan_string(sql.c_str(), scanner); int ret = ff_parse(p, scanner); ff__delete_buffer(state, scanner); ff_lex_destroy(scanner); if (ret != 0) { p->deep_delete(); return NULL; } return p; } uint64_t ducking_hash(const void *key, int len) { const uint64_t m = 0xc6a4a7935bd1e995; const int r = 47; uint64_t h = 0xdeadbeefdeadbeef ^ (len * m); const uint64_t *data = (const uint64_t *)key; const uint64_t *end = data + (len / 8); while (data != end) { uint64_t k = *data++; k *= m; k ^= k >> r; k *= m; h ^= k; h *= m; } const unsigned char *data2 = (const unsigned char *)data; switch (len & 7) { case 7: h ^= uint64_t(data2[6]) << 48; case 6: h ^= uint64_t(data2[5]) << 40; case 5: h ^= uint64_t(data2[4]) << 32; case 4: h ^= uint64_t(data2[3]) << 24; case 3: h ^= uint64_t(data2[2]) << 16; case 2: h ^= uint64_t(data2[1]) << 8; case 1: h ^= uint64_t(data2[0]); h *= m; }; h ^= h >> r; h *= m; h ^= h >> r; return h; } vector get_all_files_in_dir(const char *dir_name) { vector file_list; if (NULL == dir_name) { cout << " dir_name is null ! " << endl; return file_list; } struct stat s; lstat(dir_name, &s); if (!S_ISDIR(s.st_mode)) { cout << "dir_name is not a valid directory !" << endl; return file_list; } struct dirent *filename; // return value for readdir() DIR *dir; // return value for opendir() dir = opendir(dir_name); if (NULL == dir) { cout << "Can not open dir " << dir_name << endl; return file_list; } cout << "Successfully opened the dir !" << endl; while ((filename = readdir(dir)) != NULL) { if (strcmp(filename->d_name, ".") == 0 || strcmp(filename->d_name, "..") == 0) continue; cout << filename->d_name << endl; file_list.push_back(string(filename->d_name)); } return file_list; } ================================================ FILE: srcs/internal/postgresql/include/ast.h ================================================ #ifndef __AST_H__ #define __AST_H__ #include #include #include #include "define.h" using namespace std; enum NODETYPE { #define DECLARE_TYPE(v) v, ALLTYPE(DECLARE_TYPE) #undef DECLARE_TYPE }; typedef NODETYPE IRTYPE; enum CASEIDX { CASE0, CASE1, CASE2, CASE3, CASE4, CASE5, CASE6, CASE7, CASE8, CASE9, CASE10, CASE11, CASE12, CASE13, CASE14, CASE15, CASE16, CASE17, CASE18, CASE19, CASE20, CASE21, CASE22, CASE23, CASE24, CASE25, CASE26, CASE27, CASE28, CASE29, CASE30, CASE31, CASE32, CASE33, CASE34, CASE35, CASE36, CASE37, CASE38, CASE39, CASE40, CASE41, CASE42, CASE43, CASE44, CASE45, CASE46, CASE47, CASE48, CASE49, CASE50, CASE51, CASE52, CASE53, CASE54, CASE55, CASE56, CASE57, CASE58, CASE59, CASE60, CASE61, CASE62, CASE63, CASE64, CASE65, CASE66, CASE67, CASE68, CASE69, CASE70, CASE71, CASE72, CASE73, CASE74, CASE75, CASE76, CASE77, CASE78, CASE79, CASE80, CASE81, CASE82, CASE83, CASE84, CASE85, CASE86, CASE87, CASE88, CASE89, CASE90, CASE91, CASE92, CASE93, CASE94, CASE95, CASE96, CASE97, CASE98, CASE99, CASE100, CASE101, CASE102, CASE103, CASE104, CASE105, CASE106, CASE107, CASE108, CASE109, CASE110, CASE111, CASE112, CASE113, CASE114, CASE115, CASE116, CASE117, CASE118, CASE119, CASE120, CASE121, CASE122, CASE123, CASE124, CASE125, CASE126, CASE127, CASE128, CASE129, CASE130, CASE131, CASE132, CASE133, CASE134, CASE135, CASE136, CASE137, CASE138, CASE139, CASE140, CASE141, CASE142, CASE143, CASE144, CASE145, CASE146, CASE147, CASE148, CASE149, CASE150, CASE151, CASE152, CASE153, CASE154, CASE155, CASE156, CASE157, CASE158, CASE159, CASE160, CASE161, CASE162, CASE163, CASE164, CASE165, CASE166, CASE167, CASE168, CASE169, CASE170, CASE171, CASE172, CASE173, CASE174, CASE175, CASE176, CASE177, CASE178, CASE179, CASE180, CASE181, CASE182, CASE183, CASE184, CASE185, CASE186, CASE187, CASE188, CASE189, CASE190, CASE191, CASE192, CASE193, CASE194, CASE195, CASE196, CASE197, CASE198, CASE199, CASE200, CASE201, CASE202, CASE203, CASE204, CASE205, CASE206, CASE207, CASE208, CASE209, CASE210, CASE211, CASE212, CASE213, CASE214, CASE215, CASE216, CASE217, CASE218, CASE219, CASE220, CASE221, CASE222, CASE223, CASE224, CASE225, CASE226, CASE227, CASE228, CASE229, CASE230, CASE231, CASE232, CASE233, CASE234, CASE235, CASE236, CASE237, CASE238, CASE239, CASE240, CASE241, CASE242, CASE243, CASE244, CASE245, CASE246, CASE247, CASE248, CASE249, CASE250, CASE251, CASE252, CASE253, CASE254, CASE255, CASE256, CASE257, CASE258, CASE259, CASE260, CASE261, CASE262, CASE263, CASE264, CASE265, CASE266, CASE267, CASE268, CASE269, CASE270, CASE271, CASE272, CASE273, CASE274, CASE275, CASE276, CASE277, CASE278, CASE279, CASE280, CASE281, CASE282, CASE283, CASE284, CASE285, CASE286, CASE287, CASE288, CASE289, CASE290, CASE291, CASE292, CASE293, CASE294, CASE295, CASE296, CASE297, CASE298, CASE299, CASE300, CASE301, CASE302, CASE303, CASE304, CASE305, CASE306, CASE307, CASE308, CASE309, CASE310, CASE311, CASE312, CASE313, CASE314, CASE315, CASE316, CASE317, CASE318, CASE319, CASE320, CASE321, CASE322, CASE323, CASE324, CASE325, CASE326, CASE327, CASE328, CASE329, CASE330, CASE331, CASE332, CASE333, CASE334, CASE335, CASE336, CASE337, CASE338, CASE339, CASE340, CASE341, CASE342, CASE343, CASE344, CASE345, CASE346, CASE347, CASE348, CASE349, CASE350, CASE351, CASE352, CASE353, CASE354, CASE355, CASE356, CASE357, CASE358, CASE359, CASE360, CASE361, CASE362, CASE363, CASE364, CASE365, CASE366, CASE367, CASE368, CASE369, CASE370, CASE371, CASE372, CASE373, CASE374, CASE375, CASE376, CASE377, CASE378, CASE379, CASE380, CASE381, CASE382, CASE383, CASE384, CASE385, CASE386, CASE387, CASE388, CASE389, CASE390, CASE391, CASE392, CASE393, CASE394, CASE395, CASE396, CASE397, CASE398, CASE399, }; enum DATATYPE { #define DECLARE_TYPE(v) k##v, ALLDATATYPE(DECLARE_TYPE) #undef DECLARE_TYPE }; #define GEN_NAME() name_ = gen_id_name(); static unsigned long g_id_counter; static inline void reset_id_counter() { g_id_counter = 0; } static string gen_id_name() { return "v" + to_string(g_id_counter++); } class IROperator { public: IROperator(string prefix = "", string middle = "", string suffix = "") : prefix_(prefix), middle_(middle), suffix_(suffix) {} string prefix_; string middle_; string suffix_; }; enum UnionType { kUnionUnknown = 0, kUnionString = 1, kUnionFloat, kUnionInt, kUnionLong, kUnionBool, }; enum DATAFLAG { kUse = 0x8, kMapToClosestOne = 0x10, kNoSplit = 0x100, kGlobal = 0x4, kReplace = 0x40, kUndefine = 0x2, kAlias = 0x80, kMapToAll = 0x20, kDefine = 0x1, }; #define isUse(a) ((a)&kUse) #define isMapToClosestOne(a) ((a)&kMapToClosestOne) #define isNoSplit(a) ((a)&kNoSplit) #define isGlobal(a) ((a)&kGlobal) #define isReplace(a) ((a)&kReplace) #define isUndefine(a) ((a)&kUndefine) #define isAlias(a) ((a)&kAlias) #define isMapToAll(a) ((a)&kMapToAll) #define isDefine(a) ((a)&kDefine) class IR { public: IR(IRTYPE type, IROperator* op, IR* left = NULL, IR* right = NULL) : type_(type), op_(op), left_(left), right_(right), operand_num_((!!right) + (!!left)), data_type_(kDataWhatever) { GEN_NAME(); } IR(IRTYPE type, string str_val, DATATYPE data_type = kDataWhatever, int scope = -1, DATAFLAG flag = kUse) : type_(type), str_val_(str_val), op_(NULL), left_(NULL), right_(NULL), operand_num_(0), data_type_(data_type), scope_(scope), data_flag_(flag) { GEN_NAME(); } IR(IRTYPE type, bool b_val, DATATYPE data_type = kDataWhatever, int scope = -1, DATAFLAG flag = kUse) : type_(type), bool_val_(b_val), left_(NULL), op_(NULL), right_(NULL), operand_num_(0), data_type_(kDataWhatever), scope_(scope), data_flag_(flag) { GEN_NAME(); } IR(IRTYPE type, unsigned long long_val, DATATYPE data_type = kDataWhatever, int scope = -1, DATAFLAG flag = kUse) : type_(type), long_val_(long_val), left_(NULL), op_(NULL), right_(NULL), operand_num_(0), data_type_(kDataWhatever), scope_(scope), data_flag_(flag) { GEN_NAME(); } IR(IRTYPE type, int int_val, DATATYPE data_type = kDataWhatever, int scope = -1, DATAFLAG flag = kUse) : type_(type), int_val_(int_val), left_(NULL), op_(NULL), right_(NULL), operand_num_(0), data_type_(kDataWhatever), scope_(scope), data_flag_(flag) { GEN_NAME(); } IR(IRTYPE type, double f_val, DATATYPE data_type = kDataWhatever, int scope = -1, DATAFLAG flag = kUse) : type_(type), float_val_(f_val), left_(NULL), op_(NULL), right_(NULL), operand_num_(0), data_type_(kDataWhatever), scope_(scope), data_flag_(flag) { GEN_NAME(); } IR(IRTYPE type, IROperator* op, IR* left, IR* right, double f_val, string str_val, string name, unsigned int mutated_times, int scope, DATAFLAG flag) : type_(type), op_(op), left_(left), right_(right), operand_num_((!!right) + (!!left)), name_(name), str_val_(str_val), float_val_(f_val), mutated_times_(mutated_times), data_type_(kDataWhatever), scope_(scope), data_flag_(flag) {} IR(const IR* ir, IR* left, IR* right) { this->type_ = ir->type_; if (ir->op_ != NULL) this->op_ = OP3(ir->op_->prefix_, ir->op_->middle_, ir->op_->suffix_); else { this->op_ = OP0(); } this->left_ = left; this->right_ = right; this->str_val_ = ir->str_val_; this->long_val_ = ir->long_val_; this->data_type_ = ir->data_type_; this->scope_ = ir->scope_; this->data_flag_ = ir->data_flag_; this->name_ = ir->name_; this->operand_num_ = ir->operand_num_; this->mutated_times_ = ir->mutated_times_; } union { int int_val_; unsigned long long_val_; double float_val_; bool bool_val_; }; int scope_; DATAFLAG data_flag_; DATATYPE data_type_; IRTYPE type_; string name_; string str_val_; IROperator* op_; IR* left_; IR* right_; int operand_num_; unsigned int mutated_times_ = 0; string to_string(); string to_string_core(); }; class Node { public: void set_sub_type(unsigned int i) { case_idx_ = i; } NODETYPE type_; DATATYPE data_type_; DATAFLAG data_flag_; int scope_; unsigned int case_idx_; virtual IR* translate(vector& v_ir_collector); virtual void generate() {} virtual void deep_delete() {} Node(){}; ~Node(){}; }; Node* generate_ast_node_by_type(IRTYPE); DATATYPE get_datatype_by_string(string s); NODETYPE get_nodetype_by_string(string s); string get_string_by_nodetype(NODETYPE tt); string get_string_by_datatype(DATATYPE tt); IR* deep_copy(const IR* root); void deep_delete(IR* root); #define DECLARE_CLASS(v) class v; ALLCLASS(DECLARE_CLASS); #undef DECLARE_CLASS class Program : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Stmtlist* stmtlist_; }; class Stmtlist : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Stmt* stmt_; Stmtlist* stmtlist_; }; class Stmt : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); InsertStmt* insert_stmt_; DropStmt* drop_stmt_; CreateStmt* create_stmt_; SelectStmt* select_stmt_; AlterStmt* alter_stmt_; ReindexStmt* reindex_stmt_; UpdateStmt* update_stmt_; }; class CreateStmt : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); CreateIndexStmt* create_index_stmt_; CreateViewStmt* create_view_stmt_; CreateTableStmt* create_table_stmt_; }; class DropStmt : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); DropTableStmt* drop_table_stmt_; DropViewStmt* drop_view_stmt_; DropIndexStmt* drop_index_stmt_; }; class AlterStmt : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); AlterAction* alter_action_; TableName* table_name_; }; class SelectStmt : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); SelectNoParens* select_no_parens_; SelectWithParens* select_with_parens_; }; class SelectWithParens : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); SelectNoParens* select_no_parens_; SelectWithParens* select_with_parens_; }; class SelectNoParens : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); SelectClauseList* select_clause_list_; OptWithClause* opt_with_clause_; OptOrderClause* opt_order_clause_; OptLimitClause* opt_limit_clause_; }; class SelectClauseList : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); SelectClauseList* select_clause_list_; CombineClause* combine_clause_; SelectClause* select_clause_; }; class SelectClause : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); OptGroupClause* opt_group_clause_; OptAllOrDistinct* opt_all_or_distinct_; OptFromClause* opt_from_clause_; OptWindowClause* opt_window_clause_; SelectTarget* select_target_; OptWhereClause* opt_where_clause_; }; class CombineClause : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); }; class OptFromClause : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); FromClause* from_clause_; }; class SelectTarget : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); ExprList* expr_list_; }; class OptWindowClause : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); WindowClause* window_clause_; }; class WindowClause : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); WindowDefList* window_def_list_; }; class WindowDefList : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); WindowDef* window_def_; WindowDefList* window_def_list_; }; class WindowDef : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Window* window_; WindowName* window_name_; }; class WindowName : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Identifier* identifier_; }; class Window : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); OptExistWindowName* opt_exist_window_name_; OptFrameClause* opt_frame_clause_; OptPartition* opt_partition_; OptOrderClause* opt_order_clause_; }; class OptPartition : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); ExprList* expr_list_; }; class OptFrameClause : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); FrameBoundStart* frame_bound_start_; OptFrameExclude* opt_frame_exclude_; RangeOrRows* range_or_rows_; FrameBoundEnd* frame_bound_end_; }; class RangeOrRows : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); }; class FrameBoundStart : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); FrameBound* frame_bound_; }; class FrameBoundEnd : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); FrameBound* frame_bound_; }; class FrameBound : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Expr* expr_; }; class OptFrameExclude : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); FrameExclude* frame_exclude_; }; class FrameExclude : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); }; class OptExistWindowName : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Identifier* identifier_; }; class OptGroupClause : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); ExprList* expr_list_; OptHavingClause* opt_having_clause_; }; class OptHavingClause : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Expr* expr_; }; class OptWhereClause : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); WhereClause* where_clause_; }; class WhereClause : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Expr* expr_; }; class FromClause : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); TableRef* table_ref_; }; class TableRef : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); SelectNoParens* select_no_parens_; TableRef* table_ref_; TableName* table_name_; OptTablePrefix* opt_table_prefix_; OptOnOrUsing* opt_on_or_using_; }; class OptOnOrUsing : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); OnOrUsing* on_or_using_; }; class OnOrUsing : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Expr* expr_; ColumnNameList* column_name_list_; }; class ColumnNameList : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); ColumnNameList* column_name_list_; ColumnName* column_name_; }; class OptTablePrefix : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); JoinOp* join_op_; TableRef* table_ref_; }; class JoinOp : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); OptJoinType* opt_join_type_; }; class OptJoinType : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); }; class ExprList : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Expr* expr_; ExprList* expr_list_; }; class OptLimitClause : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); LimitClause* limit_clause_; }; class LimitClause : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Expr* expr_1_; Expr* expr_2_; }; class OptOrderClause : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); OrderItemList* order_item_list_; }; class OptOrderNulls : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); }; class OrderItemList : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); OrderItem* order_item_; OrderItemList* order_item_list_; }; class OrderItem : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Expr* expr_; OptOrderNulls* opt_order_nulls_; OptOrderBehavior* opt_order_behavior_; }; class OptOrderBehavior : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); }; class OptWithClause : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); CteTableList* cte_table_list_; }; class CteTableList : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); CteTableList* cte_table_list_; CteTable* cte_table_; }; class CteTable : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); CteTableName* cte_table_name_; SelectStmt* select_stmt_; }; class CteTableName : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); OptColumnNameListP* opt_column_name_list_p_; TableName* table_name_; }; class OptAllOrDistinct : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); }; class CreateTableStmt : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); OptTableConstraintList* opt_table_constraint_list_; OptTemp* opt_temp_; SelectStmt* select_stmt_; TableName* table_name_; ColumnDefList* column_def_list_; OptIfNotExist* opt_if_not_exist_; }; class CreateIndexStmt : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); TableName* table_name_1_; TableName* table_name_2_; OptIfNotExist* opt_if_not_exist_; IndexedColumnList* indexed_column_list_; OptWhereClause* opt_where_clause_; OptUnique* opt_unique_; }; class CreateViewStmt : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); OptTemp* opt_temp_; ViewName* view_name_; OptColumnNameListP* opt_column_name_list_p_; SelectStmt* select_stmt_; OptCheckOption* opt_check_option_; }; class DropIndexStmt : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); TableName* table_name_; OptIfExist* opt_if_exist_; }; class DropTableStmt : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); TableName* table_name_; OptIfExist* opt_if_exist_; }; class DropViewStmt : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); ViewName* view_name_; OptIfExist* opt_if_exist_; }; class InsertStmt : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); InsertRest* insert_rest_; TableName* table_name_; OptOnConflict* opt_on_conflict_; OptWithClause* opt_with_clause_; }; class InsertRest : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); OptColumnNameListP* opt_column_name_list_p_; SuperValuesList* super_values_list_; SelectNoParens* select_no_parens_; }; class SuperValuesList : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); ValuesList* values_list_; SuperValuesList* super_values_list_; }; class ValuesList : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); ExprList* expr_list_; }; class OptOnConflict : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); OptConflictExpr* opt_conflict_expr_; SetClauseList* set_clause_list_; WhereClause* where_clause_; }; class OptConflictExpr : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); IndexedColumnList* indexed_column_list_; WhereClause* where_clause_; }; class IndexedColumnList : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); IndexedColumn* indexed_column_; IndexedColumnList* indexed_column_list_; }; class IndexedColumn : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Expr* expr_; OptOrderBehavior* opt_order_behavior_; }; class UpdateStmt : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); TableName* table_name_; SetClauseList* set_clause_list_; OptWithClause* opt_with_clause_; OptWhereClause* opt_where_clause_; }; class ReindexStmt : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); TableName* table_name_; }; class AlterAction : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); ColumnDef* column_def_; OptColumn* opt_column_; TableName* table_name_; ColumnName* column_name_1_; ColumnName* column_name_2_; }; class ColumnDefList : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); ColumnDef* column_def_; ColumnDefList* column_def_list_; }; class ColumnDef : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); TypeName* type_name_; Identifier* identifier_; OptColumnConstraintList* opt_column_constraint_list_; }; class OptColumnConstraintList : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); ColumnConstraintList* column_constraint_list_; }; class ColumnConstraintList : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); ColumnConstraintList* column_constraint_list_; ColumnConstraint* column_constraint_; }; class ColumnConstraint : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); ConstraintType* constraint_type_; }; class ConstraintType : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Expr* expr_; ForeignClause* foreign_clause_; }; class ForeignClause : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); OptConstraintAttributeSpec* opt_constraint_attribute_spec_; OptColumnNameListP* opt_column_name_list_p_; TableName* table_name_; OptForeignKeyActions* opt_foreign_key_actions_; }; class OptForeignKeyActions : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); ForeignKeyActions* foreign_key_actions_; }; class ForeignKeyActions : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); KeyActions* key_actions_; }; class KeyActions : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); }; class OptConstraintAttributeSpec : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); OptInitialTime* opt_initial_time_; }; class OptInitialTime : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); }; class ConstraintName : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Name* name_; }; class OptTemp : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); }; class OptCheckOption : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); }; class OptColumnNameListP : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); ColumnNameList* column_name_list_; }; class SetClauseList : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); SetClause* set_clause_; SetClauseList* set_clause_list_; }; class SetClause : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Expr* expr_; ColumnNameList* column_name_list_; ColumnName* column_name_; }; class Expr : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); CastExpr* cast_expr_; InExpr* in_expr_; BetweenExpr* between_expr_; Operand* operand_; ExistsExpr* exists_expr_; LogicExpr* logic_expr_; }; class Operand : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); UnaryExpr* unary_expr_; ExprList* expr_list_; CaseExpr* case_expr_; SelectNoParens* select_no_parens_; ExtractExpr* extract_expr_; ArrayIndex* array_index_; BinaryExpr* binary_expr_; ScalarExpr* scalar_expr_; }; class CastExpr : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Expr* expr_; TypeName* type_name_; }; class ScalarExpr : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Literal* literal_; ColumnName* column_name_; }; class UnaryExpr : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Operand* operand_; }; class BinaryExpr : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Operand* operand_1_; Operand* operand_2_; BinaryOp* binary_op_; CompExpr* comp_expr_; }; class LogicExpr : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Expr* expr_1_; Expr* expr_2_; }; class InExpr : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Operand* operand_; ExprList* expr_list_; OptNot* opt_not_; TableName* table_name_; SelectNoParens* select_no_parens_; }; class CaseExpr : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Expr* expr_1_; Expr* expr_2_; CaseList* case_list_; }; class BetweenExpr : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Operand* operand_1_; Operand* operand_2_; Operand* operand_3_; }; class ExistsExpr : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); OptNot* opt_not_; SelectNoParens* select_no_parens_; }; class CaseList : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); CaseList* case_list_; CaseClause* case_clause_; }; class CaseClause : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Expr* expr_1_; Expr* expr_2_; }; class CompExpr : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Operand* operand_1_; Operand* operand_2_; }; class ExtractExpr : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); DatetimeField* datetime_field_; Expr* expr_; }; class DatetimeField : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); }; class ArrayIndex : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Operand* operand_; IntLiteral* int_literal_; }; class Literal : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); BoolLiteral* bool_literal_; StringLiteral* string_literal_; NumLiteral* num_literal_; }; class StringLiteral : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); string string_val_; }; class BoolLiteral : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); }; class NumLiteral : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); IntLiteral* int_literal_; FloatLiteral* float_literal_; }; class IntLiteral : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); int int_val_; }; class FloatLiteral : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); float float_val_; }; class OptColumn : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); }; class OptIfNotExist : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); }; class OptIfExist : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); }; class Identifier : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); string string_val_; }; class TableName : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Identifier* identifier_; }; class ColumnName : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Identifier* identifier_; }; class OptUnique : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); }; class ViewName : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Identifier* identifier_; }; class BinaryOp : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); }; class OptNot : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); }; class Name : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Identifier* identifier_; }; class TypeName : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); NumericType* numeric_type_; CharacterType* character_type_; }; class CharacterType : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); CharacterWithLength* character_with_length_; CharacterWithoutLength* character_without_length_; }; class CharacterWithLength : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); CharacterConflicta* character_conflicta_; IntLiteral* int_literal_; }; class CharacterWithoutLength : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); CharacterConflicta* character_conflicta_; }; class CharacterConflicta : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); OptVarying* opt_varying_; }; class OptVarying : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); }; class NumericType : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); }; class OptTableConstraintList : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); TableConstraintList* table_constraint_list_; }; class TableConstraintList : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); TableConstraint* table_constraint_; TableConstraintList* table_constraint_list_; }; class TableConstraint : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); virtual void generate(); Expr* expr_; IndexedColumnList* indexed_column_list_; ForeignClause* foreign_clause_; ConstraintName* constraint_name_; ColumnNameList* column_name_list_; }; #endif ================================================ FILE: srcs/internal/postgresql/include/define.h ================================================ #pragma once #ifndef __DEFINE_H__ #define __DEFINE_H__ #define ALLTYPE(V) \ V(kProgram) \ V(kStmtlist) \ V(kStmt) \ V(kCreateStmt) \ V(kDropStmt) \ V(kAlterStmt) \ V(kSelectStmt) \ V(kSelectWithParens) \ V(kSelectNoParens) \ V(kSelectClauseList) \ V(kSelectClause) \ V(kCombineClause) \ V(kOptFromClause) \ V(kSelectTarget) \ V(kOptWindowClause) \ V(kWindowClause) \ V(kWindowDefList) \ V(kWindowDef) \ V(kWindowName) \ V(kWindow) \ V(kOptPartition) \ V(kOptFrameClause) \ V(kRangeOrRows) \ V(kFrameBoundStart) \ V(kFrameBoundEnd) \ V(kFrameBound) \ V(kOptFrameExclude) \ V(kFrameExclude) \ V(kOptExistWindowName) \ V(kOptGroupClause) \ V(kOptHavingClause) \ V(kOptWhereClause) \ V(kWhereClause) \ V(kFromClause) \ V(kTableRef) \ V(kOptOnOrUsing) \ V(kOnOrUsing) \ V(kColumnNameList) \ V(kOptTablePrefix) \ V(kJoinOp) \ V(kOptJoinType) \ V(kExprList) \ V(kOptLimitClause) \ V(kLimitClause) \ V(kOptOrderClause) \ V(kOptOrderNulls) \ V(kOrderItemList) \ V(kOrderItem) \ V(kOptOrderBehavior) \ V(kOptWithClause) \ V(kCteTableList) \ V(kCteTable) \ V(kCteTableName) \ V(kOptAllOrDistinct) \ V(kCreateTableStmt) \ V(kCreateIndexStmt) \ V(kCreateViewStmt) \ V(kDropIndexStmt) \ V(kDropTableStmt) \ V(kDropViewStmt) \ V(kInsertStmt) \ V(kInsertRest) \ V(kSuperValuesList) \ V(kValuesList) \ V(kOptOnConflict) \ V(kOptConflictExpr) \ V(kIndexedColumnList) \ V(kIndexedColumn) \ V(kUpdateStmt) \ V(kReindexStmt) \ V(kAlterAction) \ V(kColumnDefList) \ V(kColumnDef) \ V(kOptColumnConstraintList) \ V(kColumnConstraintList) \ V(kColumnConstraint) \ V(kConstraintType) \ V(kForeignClause) \ V(kOptForeignKeyActions) \ V(kForeignKeyActions) \ V(kKeyActions) \ V(kOptConstraintAttributeSpec) \ V(kOptInitialTime) \ V(kConstraintName) \ V(kOptTemp) \ V(kOptCheckOption) \ V(kOptColumnNameListP) \ V(kSetClauseList) \ V(kSetClause) \ V(kExpr) \ V(kOperand) \ V(kCastExpr) \ V(kScalarExpr) \ V(kUnaryExpr) \ V(kBinaryExpr) \ V(kLogicExpr) \ V(kInExpr) \ V(kCaseExpr) \ V(kBetweenExpr) \ V(kExistsExpr) \ V(kCaseList) \ V(kCaseClause) \ V(kCompExpr) \ V(kExtractExpr) \ V(kDatetimeField) \ V(kArrayIndex) \ V(kLiteral) \ V(kStringLiteral) \ V(kBoolLiteral) \ V(kNumLiteral) \ V(kIntLiteral) \ V(kFloatLiteral) \ V(kOptColumn) \ V(kOptIfNotExist) \ V(kOptIfExist) \ V(kIdentifier) \ V(kTableName) \ V(kColumnName) \ V(kOptUnique) \ V(kViewName) \ V(kBinaryOp) \ V(kOptNot) \ V(kName) \ V(kTypeName) \ V(kCharacterType) \ V(kCharacterWithLength) \ V(kCharacterWithoutLength) \ V(kCharacterConflicta) \ V(kOptVarying) \ V(kNumericType) \ V(kOptTableConstraintList) \ V(kTableConstraintList) \ V(kTableConstraint) \ V(kUnknown) #define ALLCLASS(V) \ V(Program) \ V(Stmtlist) \ V(Stmt) \ V(CreateStmt) \ V(DropStmt) \ V(AlterStmt) \ V(SelectStmt) \ V(SelectWithParens) \ V(SelectNoParens) \ V(SelectClauseList) \ V(SelectClause) \ V(CombineClause) \ V(OptFromClause) \ V(SelectTarget) \ V(OptWindowClause) \ V(WindowClause) \ V(WindowDefList) \ V(WindowDef) \ V(WindowName) \ V(Window) \ V(OptPartition) \ V(OptFrameClause) \ V(RangeOrRows) \ V(FrameBoundStart) \ V(FrameBoundEnd) \ V(FrameBound) \ V(OptFrameExclude) \ V(FrameExclude) \ V(OptExistWindowName) \ V(OptGroupClause) \ V(OptHavingClause) \ V(OptWhereClause) \ V(WhereClause) \ V(FromClause) \ V(TableRef) \ V(OptOnOrUsing) \ V(OnOrUsing) \ V(ColumnNameList) \ V(OptTablePrefix) \ V(JoinOp) \ V(OptJoinType) \ V(ExprList) \ V(OptLimitClause) \ V(LimitClause) \ V(OptOrderClause) \ V(OptOrderNulls) \ V(OrderItemList) \ V(OrderItem) \ V(OptOrderBehavior) \ V(OptWithClause) \ V(CteTableList) \ V(CteTable) \ V(CteTableName) \ V(OptAllOrDistinct) \ V(CreateTableStmt) \ V(CreateIndexStmt) \ V(CreateViewStmt) \ V(DropIndexStmt) \ V(DropTableStmt) \ V(DropViewStmt) \ V(InsertStmt) \ V(InsertRest) \ V(SuperValuesList) \ V(ValuesList) \ V(OptOnConflict) \ V(OptConflictExpr) \ V(IndexedColumnList) \ V(IndexedColumn) \ V(UpdateStmt) \ V(ReindexStmt) \ V(AlterAction) \ V(ColumnDefList) \ V(ColumnDef) \ V(OptColumnConstraintList) \ V(ColumnConstraintList) \ V(ColumnConstraint) \ V(ConstraintType) \ V(ForeignClause) \ V(OptForeignKeyActions) \ V(ForeignKeyActions) \ V(KeyActions) \ V(OptConstraintAttributeSpec) \ V(OptInitialTime) \ V(ConstraintName) \ V(OptTemp) \ V(OptCheckOption) \ V(OptColumnNameListP) \ V(SetClauseList) \ V(SetClause) \ V(Expr) \ V(Operand) \ V(CastExpr) \ V(ScalarExpr) \ V(UnaryExpr) \ V(BinaryExpr) \ V(LogicExpr) \ V(InExpr) \ V(CaseExpr) \ V(BetweenExpr) \ V(ExistsExpr) \ V(CaseList) \ V(CaseClause) \ V(CompExpr) \ V(ExtractExpr) \ V(DatetimeField) \ V(ArrayIndex) \ V(Literal) \ V(StringLiteral) \ V(BoolLiteral) \ V(NumLiteral) \ V(IntLiteral) \ V(FloatLiteral) \ V(OptColumn) \ V(OptIfNotExist) \ V(OptIfExist) \ V(Identifier) \ V(TableName) \ V(ColumnName) \ V(OptUnique) \ V(ViewName) \ V(BinaryOp) \ V(OptNot) \ V(Name) \ V(TypeName) \ V(CharacterType) \ V(CharacterWithLength) \ V(CharacterWithoutLength) \ V(CharacterConflicta) \ V(OptVarying) \ V(NumericType) \ V(OptTableConstraintList) \ V(TableConstraintList) \ V(TableConstraint) #define ALLDATATYPE(V) \ V(DataWhatever) \ V(DataTableName) \ V(DataColumnName) \ V(DataViewName) \ V(DataFunctionName) \ V(DataPragmaKey) \ V(DataPragmaValue) \ V(DataTableSpaceName) \ V(DataSequenceName) \ V(DataExtensionName) \ V(DataRoleName) \ V(DataSchemaName) \ V(DataDatabase) \ V(DataTriggerName) \ V(DataWindowName) \ V(DataTriggerFunction) \ V(DataDomainName) \ V(DataAliasName) #define SWITCHSTART switch (case_idx_) { #define SWITCHEND \ default: \ \ assert(0); \ } #define CASESTART(idx) case CASE##idx: { #define CASEEND \ break; \ } #define TRANSLATESTART IR *res = NULL; #define GENERATESTART(len) case_idx_ = rand() % len; #define GENERATEEND return; #define TRANSLATEEND \ v_ir_collector.push_back(res); \ \ return res; #define TRANSLATEENDNOPUSH return res; #define SAFETRANSLATE(a) (assert(a != NULL), a->translate(v_ir_collector)) #define SAFEDELETE(a) \ if (a != NULL) a->deep_delete() #define SAFEDELETELIST(a) \ for (auto _i : a) SAFEDELETE(_i) #define OP1(a) new IROperator(a) #define OP2(a, b) new IROperator(a, b) #define OP3(a, b, c) new IROperator(a, b, c) #define OPSTART(a) new IROperator(a) #define OPMID(a) new IROperator("", a, "") #define OPEND(a) new IROperator("", "", a) #define OP0() new IROperator() #define TRANSLATELIST(t, a, b) \ res = SAFETRANSLATE(a[0]); \ res = new IR(t, OP0(), res); \ v_ir_collector.push_back(res); \ for (int i = 1; i < a.size(); i++) { \ IR *tmp = SAFETRANSLATE(a[i]); \ res = new IR(t, OPMID(b), res, tmp); \ v_ir_collector.push_back(res); \ } #define PUSH(a) v_ir_collector.push_back(a) #define MUTATESTART \ IR *res = NULL; \ auto randint = get_rand_int(3); \ switch (randint) { #define DOLEFT case 0: { #define DORIGHT \ break; \ } \ \ case 1: { #define DOBOTH \ break; \ } \ case 2: { #define MUTATEEND \ } \ } \ \ return res; #endif ================================================ FILE: srcs/internal/postgresql/include/mutator.h ================================================ #ifndef __MUTATOR_H__ #define __MUTATOR_H__ #include #include #include "ast.h" #include "define.h" #include "utils.h" #define LUCKY_NUMBER 500 using namespace std; enum RELATIONTYPE { kRelationElement, kRelationSubtype, kRelationAlias, }; class Mutator { public: Mutator() { srand(time(nullptr)); } IR *deep_copy_with_record(const IR *root, const IR *record); unsigned long hash(IR *); unsigned long hash(string &); IR *ir_random_generator(vector v_ir_collector); vector mutate_all(vector &v_ir_collector); // done vector mutate(IR *input); // done IR *strategy_delete(IR *cur); // Done IR *strategy_insert(IR *cur); // Done IR *strategy_replace(IR *cur); // done bool lucky_enough_to_be_mutated(unsigned int mutated_times); // done bool replace(IR *root, IR *old_ir, IR *new_ir); // done IR *locate_parent(IR *root, IR *old_ir); // done void init(string f_testcase = "", string f_common_string = "", string file2d = "", string file1d = "", string f_gen_type = ""); // DONE void init_ir_library(string filename); // DONE void init_value_library(); // DONE void init_common_string(string filename); // DONE void init_data_library(string filename); // DONE void init_data_library_2d(string filename); // DONE void init_not_mutatable_type(string filename); // DONE void init_safe_generate_type(string filename); void add_ir_to_library(IR *); // DONE string get_a_string(); // DONE unsigned long get_a_val(); // DONE IR *get_ir_from_library(IRTYPE); // DONE IR *generate_ir_by_type(IRTYPE); // Done string get_data_by_type(DATATYPE); pair get_data_2d_by_type(DATATYPE, DATATYPE); // DONE void reset_data_library(); // DONE string parse_data(string &); // DONE void extract_struct(IR *); // Done void extract_struct2(IR *); // Done bool fix(IR *root); // done vector split_to_stmt(IR *root, map &m_save, set &split_set); // done bool connect_back(map &m_save); // done bool fix_one(IR *stmt_root, map>> &scope_library); // done void analyze_scope(IR *stmt_root); map> build_graph( IR *stmt_root, map>> &scope_library); bool fill_stmt_graph(map> &graph); // done void clear_scope_library(bool clear_define); // done IR *find_closest_node(IR *stmt_root, IR *node, DATATYPE type); // done bool fill_one(IR *parent); // done bool fill_one_pair(IR *parent, IR *child); // done bool fill_stmt_graph_one(map> &graph, IR *ir); // done bool validate(IR *&root); // done unsigned int calc_node(IR *root); bool replace_one_value_from_datalibray_2d(DATATYPE p_datatype, DATATYPE c_data_type, string &p_key, string &old_c_value, string &new_c_value); bool remove_one_pair_from_datalibrary_2d(DATATYPE p_datatype, DATATYPE c_data_type, string &p_key); bool replace_one_from_datalibrary(DATATYPE datatype, string &old_str, string &new_str); bool remove_one_from_datalibrary(DATATYPE datatype, string &key); ~Mutator(); void debug(IR *root); int try_fix(char *buf, int len, char *&new_buf, int &new_len); void add_ir_to_library_no_deepcopy(IR *); // DONE IR *record_ = NULL; IR *mutated_root_ = NULL; map> ir_library_; map> ir_library_hash_; vector string_library_; set string_library_hash_; vector value_library_; map> relationmap_; vector common_string_library_; set not_mutatable_types_; set string_types_; set int_types_; set float_types_; set safe_generate_type_; set split_stmt_types_; set split_substmt_types_; map> data_library_; map>>> data_library_2d_; map> g_data_library_; map> g_data_library_hash_; map>>> g_data_library_2d_; map>>> g_data_library_2d_hash_; map>> scope_library_; set global_hash_; }; #endif ================================================ FILE: srcs/internal/postgresql/include/utils.h ================================================ #ifndef __UTILS_H__ #define __UTILS_H__ #include #include #include "../parser/bison_parser.h" #include "../parser/flex_lexer.h" using std::string; using std::vector; #define get_rand_int(range) rand() % (range) #define vector_rand_ele_safe(a) \ (a.size() != 0 ? a[get_rand_int(a.size())] : gen_id_name()) #define vector_rand_ele(a) (a[get_rand_int(a.size())]) void trim_string(string &); string gen_string(); double gen_float(); long gen_long(); int gen_int(); uint64_t ducking_hash(const void *key, int len); vector get_all_files_in_dir(const char *dir_name); Program *parser(string sql); #endif ================================================ FILE: srcs/internal/postgresql/parser/Makefile ================================================ # bison's version is too old on OSX, allow user to pass in custom path BISON?=bison FLEX?=flex #BISON_VERSION=$(shell $(BISON) --version | head -n 1 | grep -o '[0-9]\.[0-9]\+') #BISON_VERSION_SUPPORTED=$(shell echo $(BISON_VERSION) \>= 3.0 | bc) #ifneq ($(BISON_VERSION_SUPPORTED), 1) #$(error Bison version $(BISON_VERSION) not supported. If you are using OS X, `bison` uses the system default instead of the brew version. Run BISON=/usr/local/opt/bison/bin/bison make) #endif #FLEX_VERSION=$(shell $(FLEX) --version | head -n 1 | grep -o '[0-9]\.[0-9]\+') #FLEX_VERSION_SUPPORTED=$(shell echo $(FLEX_VERSION) \>= 2.6 | bc) #ifneq ($(FLEX_VERSION_SUPPORTED), 1) #$(error Flex version $(FLEX_VERSION) not supported. If you are using OS X, `flex` uses the system default instead of the brew version. Run FLEX=/usr/local/opt/flex/bin/flex make) #endif all: bison_parser.cpp flex_lexer.cpp bison_parser.cpp: bison.y $(BISON) bison.y --output=bison_parser.cpp --defines=bison_parser.h --verbose -Wconflicts-rr flex_lexer.cpp: flex.l $(FLEX) flex.l clean: rm -f bison_parser.cpp flex_lexer.cpp bison_parser.h flex_lexer.h *.output # Tests if the parser builds correctly and doesn't contain conflicts. test: ! $(BISON) bison_parser.y -v --output=conflict_test.cpp 2>&1 | grep "conflict" >/tmp/2 ================================================ FILE: srcs/internal/postgresql/parser/bison.y ================================================ %{ #include "bison_parser.h" #include "flex_lexer.h" #include #include int yyerror(YYLTYPE* llocp, Program * result, yyscan_t scanner, const char *msg) { return 0; } %} %code requires { #include "../include/ast.h" #include "parser_typedef.h" } %define api.prefix {ff_} %define parse.error verbose %define api.pure full %define api.token.prefix {SQL_} %locations %initial-action { // Initialize @$.first_column = 0; @$.last_column = 0; @$.first_line = 0; @$.last_line = 0; @$.total_column = 0; @$.string_length = 0; }; %lex-param { yyscan_t scanner } %parse-param { Program* result } %parse-param { yyscan_t scanner } %union FF_STYPE{ long ival; char* sval; double fval; Program * program_t; Stmtlist * stmtlist_t; Stmt * stmt_t; CreateStmt * create_stmt_t; DropStmt * drop_stmt_t; AlterStmt * alter_stmt_t; SelectStmt * select_stmt_t; SelectWithParens * select_with_parens_t; SelectNoParens * select_no_parens_t; SelectClauseList * select_clause_list_t; SelectClause * select_clause_t; CombineClause * combine_clause_t; OptFromClause * opt_from_clause_t; SelectTarget * select_target_t; OptWindowClause * opt_window_clause_t; WindowClause * window_clause_t; WindowDefList * window_def_list_t; WindowDef * window_def_t; WindowName * window_name_t; Window * window_t; OptPartition * opt_partition_t; OptFrameClause * opt_frame_clause_t; RangeOrRows * range_or_rows_t; FrameBoundStart * frame_bound_start_t; FrameBoundEnd * frame_bound_end_t; FrameBound * frame_bound_t; OptFrameExclude * opt_frame_exclude_t; FrameExclude * frame_exclude_t; OptExistWindowName * opt_exist_window_name_t; OptGroupClause * opt_group_clause_t; OptHavingClause * opt_having_clause_t; OptWhereClause * opt_where_clause_t; WhereClause * where_clause_t; FromClause * from_clause_t; TableRef * table_ref_t; OptOnOrUsing * opt_on_or_using_t; OnOrUsing * on_or_using_t; ColumnNameList * column_name_list_t; OptTablePrefix * opt_table_prefix_t; JoinOp * join_op_t; OptJoinType * opt_join_type_t; ExprList * expr_list_t; OptLimitClause * opt_limit_clause_t; LimitClause * limit_clause_t; OptOrderClause * opt_order_clause_t; OptOrderNulls * opt_order_nulls_t; OrderItemList * order_item_list_t; OrderItem * order_item_t; OptOrderBehavior * opt_order_behavior_t; OptWithClause * opt_with_clause_t; CteTableList * cte_table_list_t; CteTable * cte_table_t; CteTableName * cte_table_name_t; OptAllOrDistinct * opt_all_or_distinct_t; CreateTableStmt * create_table_stmt_t; CreateIndexStmt * create_index_stmt_t; CreateViewStmt * create_view_stmt_t; DropIndexStmt * drop_index_stmt_t; DropTableStmt * drop_table_stmt_t; DropViewStmt * drop_view_stmt_t; InsertStmt * insert_stmt_t; InsertRest * insert_rest_t; SuperValuesList * super_values_list_t; ValuesList * values_list_t; OptOnConflict * opt_on_conflict_t; OptConflictExpr * opt_conflict_expr_t; IndexedColumnList * indexed_column_list_t; IndexedColumn * indexed_column_t; UpdateStmt * update_stmt_t; ReindexStmt * reindex_stmt_t; AlterAction * alter_action_t; ColumnDefList * column_def_list_t; ColumnDef * column_def_t; OptColumnConstraintList * opt_column_constraint_list_t; ColumnConstraintList * column_constraint_list_t; ColumnConstraint * column_constraint_t; ConstraintType * constraint_type_t; ForeignClause * foreign_clause_t; OptForeignKeyActions * opt_foreign_key_actions_t; ForeignKeyActions * foreign_key_actions_t; KeyActions * key_actions_t; OptConstraintAttributeSpec * opt_constraint_attribute_spec_t; OptInitialTime * opt_initial_time_t; ConstraintName * constraint_name_t; OptTemp * opt_temp_t; OptCheckOption * opt_check_option_t; OptColumnNameListP * opt_column_name_list_p_t; SetClauseList * set_clause_list_t; SetClause * set_clause_t; Expr * expr_t; Operand * operand_t; CastExpr * cast_expr_t; ScalarExpr * scalar_expr_t; UnaryExpr * unary_expr_t; BinaryExpr * binary_expr_t; LogicExpr * logic_expr_t; InExpr * in_expr_t; CaseExpr * case_expr_t; BetweenExpr * between_expr_t; ExistsExpr * exists_expr_t; CaseList * case_list_t; CaseClause * case_clause_t; CompExpr * comp_expr_t; ExtractExpr * extract_expr_t; DatetimeField * datetime_field_t; ArrayIndex * array_index_t; Literal * literal_t; StringLiteral * string_literal_t; BoolLiteral * bool_literal_t; NumLiteral * num_literal_t; IntLiteral * int_literal_t; FloatLiteral * float_literal_t; OptColumn * opt_column_t; OptIfNotExist * opt_if_not_exist_t; OptIfExist * opt_if_exist_t; Identifier * identifier_t; TableName * table_name_t; ColumnName * column_name_t; OptUnique * opt_unique_t; ViewName * view_name_t; BinaryOp * binary_op_t; OptNot * opt_not_t; Name * name_t; TypeName * type_name_t; CharacterType * character_type_t; CharacterWithLength * character_with_length_t; CharacterWithoutLength * character_without_length_t; CharacterConflicta * character_conflicta_t; OptVarying * opt_varying_t; NumericType * numeric_type_t; OptTableConstraintList * opt_table_constraint_list_t; TableConstraintList * table_constraint_list_t; TableConstraint * table_constraint_t; } %token OP_NOTEQUAL SIMPLE TEXT OVER BETWEEN OP_SEMI BIGINT LIMIT %token WITH ORDER LAST UNBOUNDED PRECEDING EXCEPT NUMERIC OP_LESSTHAN %token PROCEDURE ACTION FIRST OP_GREATEREQ CHECK FULL NATURAL DOUBLE %token NATIONAL OP_ADD CURRENT TRIGGER OP_SUB FALSE UNIQUE WHERE %token MINUTE BEFORE ON PARTIAL OF AFTER PRIMARY MONTH %token DEFERRED OP_DOUBLE_DOLLAR VARYING OP_GREATERTHAN OR PLPGSQL DELETE INDEX %token RETURN OP_MUL FOREIGN RESTRICT FOLLOWING TIES DEC SELECT %token BEGIN LANGUAGE DISTINCT TRUE BY OP_MOD VALUES IS %token ROW FUNCTION END RECURSIVE FOR UNION NULLS UPDATE %token ELSE RANGE OFFSET INDEXED INSTEAD NCHAR AND REINDEX %token INITIALLY YEAR PRECISION FILTER NOT VIEW DEFFERRABLE REAL %token THEN OPTION DEFAULT GLOBAL CROSS CHAR REFERENCES OP_XOR %token GROUP CASE SET HOUR NO COLUMN LOCAL DROP %token REPLACE ASC OP_COMMA TABLE ARRAY IF EXTRACT LEFT %token OUTER DECIMAL PARTITION CASCADE ADD OTHERS OP_LESSEQ MATCH %token ALL ROWS JOIN LIKE INTEGER OP_RP INT BOOLEAN %token KEY EACH USING RENAME DO FLOAT OP_LP CHARACTER %token UMINUS CAST GROUPS NULL SMALLINT INSERT TEMPORARY CONSTRAINT %token CREATE OP_LBRACKET WHEN IMMEDIATE TO EXCLUDE DAY CONFLICT %token OP_RBRACKET EXECUTE EXISTS INTO OP_DIVIDE CASCADED ISNULL AS %token INNER INTERSECT IN OP_EQUAL VARCHAR ALTER DESC FROM %token TEMP UNLOGGED SECOND WINDOW NOTHING HAVING %token INTLITERAL %token STRINGLITERAL %token FLOATLITERAL %token IDENTIFIER %type program %type stmtlist %type stmt %type create_stmt %type drop_stmt %type alter_stmt %type select_stmt %type select_with_parens %type select_no_parens %type select_clause_list %type select_clause %type combine_clause %type opt_from_clause %type select_target %type opt_window_clause %type window_clause %type window_def_list %type window_def %type window_name %type window %type opt_partition %type opt_frame_clause %type range_or_rows %type frame_bound_start %type frame_bound_end %type frame_bound %type opt_frame_exclude %type frame_exclude %type opt_exist_window_name %type opt_group_clause %type opt_having_clause %type opt_where_clause %type where_clause %type from_clause %type table_ref %type opt_on_or_using %type on_or_using %type column_name_list %type opt_table_prefix %type join_op %type opt_join_type %type expr_list %type opt_limit_clause %type limit_clause %type opt_order_clause %type opt_order_nulls %type order_item_list %type order_item %type opt_order_behavior %type opt_with_clause %type cte_table_list %type cte_table %type cte_table_name %type opt_all_or_distinct %type create_table_stmt %type create_index_stmt %type create_view_stmt %type drop_index_stmt %type drop_table_stmt %type drop_view_stmt %type insert_stmt %type insert_rest %type super_values_list %type values_list %type opt_on_conflict %type opt_conflict_expr %type indexed_column_list %type indexed_column %type update_stmt %type reindex_stmt %type alter_action %type column_def_list %type column_def %type opt_column_constraint_list %type column_constraint_list %type column_constraint %type constraint_type %type foreign_clause %type opt_foreign_key_actions %type foreign_key_actions %type key_actions %type opt_constraint_attribute_spec %type opt_initial_time %type constraint_name %type opt_temp %type opt_check_option %type opt_column_name_list_p %type set_clause_list %type set_clause %type expr %type operand %type cast_expr %type scalar_expr %type unary_expr %type binary_expr %type logic_expr %type in_expr %type case_expr %type between_expr %type exists_expr %type case_list %type case_clause %type comp_expr %type extract_expr %type datetime_field %type array_index %type literal %type string_literal %type bool_literal %type num_literal %type int_literal %type float_literal %type opt_column %type opt_if_not_exist %type opt_if_exist %type identifier %type table_name %type column_name %type opt_unique %type view_name %type binary_op %type opt_not %type name %type type_name %type character_type %type character_with_length %type character_without_length %type character_conflicta %type opt_varying %type numeric_type %type opt_table_constraint_list %type table_constraint_list %type table_constraint %left OR %left AND %left NOT %nonassoc OP_NOTEQUAL MATCH LIKE OP_EQUAL %nonassoc OP_LESSTHAN OP_GREATEREQ OP_GREATERTHAN OP_LESSEQ %nonassoc ISNULL %nonassoc IS %left OP_ADD OP_SUB %left OP_MUL OP_MOD OP_DIVIDE %left OP_XOR %right UMINUS %left OP_LBRACKET OP_RBRACKET %left OP_RP OP_LP %nonassoc JOIN %nonassoc ON %destructor{ free( ($$) ); } %destructor{ } %destructor { if($$!=NULL)$$->deep_delete(); } <*> %% program: stmtlist { $$ = result; $$->case_idx_ = CASE0; $$->stmtlist_ = $1; $$ = NULL; } ; stmtlist: stmt OP_SEMI stmtlist { $$ = new Stmtlist(); $$->case_idx_ = CASE0; $$->stmt_ = $1; $$->stmtlist_ = $3; } | stmt OP_SEMI { $$ = new Stmtlist(); $$->case_idx_ = CASE1; $$->stmt_ = $1; } ; stmt: create_stmt { $$ = new Stmt(); $$->case_idx_ = CASE0; $$->create_stmt_ = $1; } | drop_stmt { $$ = new Stmt(); $$->case_idx_ = CASE1; $$->drop_stmt_ = $1; } | select_stmt { $$ = new Stmt(); $$->case_idx_ = CASE2; $$->select_stmt_ = $1; } | update_stmt { $$ = new Stmt(); $$->case_idx_ = CASE3; $$->update_stmt_ = $1; } | insert_stmt { $$ = new Stmt(); $$->case_idx_ = CASE4; $$->insert_stmt_ = $1; } | alter_stmt { $$ = new Stmt(); $$->case_idx_ = CASE5; $$->alter_stmt_ = $1; } | reindex_stmt { $$ = new Stmt(); $$->case_idx_ = CASE6; $$->reindex_stmt_ = $1; } ; create_stmt: create_table_stmt { $$ = new CreateStmt(); $$->case_idx_ = CASE0; $$->create_table_stmt_ = $1; } | create_index_stmt { $$ = new CreateStmt(); $$->case_idx_ = CASE1; $$->create_index_stmt_ = $1; } | create_view_stmt { $$ = new CreateStmt(); $$->case_idx_ = CASE2; $$->create_view_stmt_ = $1; } ; drop_stmt: drop_index_stmt { $$ = new DropStmt(); $$->case_idx_ = CASE0; $$->drop_index_stmt_ = $1; } | drop_table_stmt { $$ = new DropStmt(); $$->case_idx_ = CASE1; $$->drop_table_stmt_ = $1; } | drop_view_stmt { $$ = new DropStmt(); $$->case_idx_ = CASE2; $$->drop_view_stmt_ = $1; } ; alter_stmt: ALTER TABLE table_name alter_action { $$ = new AlterStmt(); $$->case_idx_ = CASE0; $$->table_name_ = $3; $$->alter_action_ = $4; } ; select_stmt: select_no_parens %prec UMINUS { $$ = new SelectStmt(); $$->case_idx_ = CASE0; $$->select_no_parens_ = $1; } | select_with_parens %prec UMINUS { $$ = new SelectStmt(); $$->case_idx_ = CASE1; $$->select_with_parens_ = $1; } ; select_with_parens: OP_LP select_no_parens OP_RP { $$ = new SelectWithParens(); $$->case_idx_ = CASE0; $$->select_no_parens_ = $2; } | OP_LP select_with_parens OP_RP { $$ = new SelectWithParens(); $$->case_idx_ = CASE1; $$->select_with_parens_ = $2; } ; select_no_parens: opt_with_clause select_clause_list opt_order_clause opt_limit_clause { $$ = new SelectNoParens(); $$->case_idx_ = CASE0; $$->opt_with_clause_ = $1; $$->select_clause_list_ = $2; $$->opt_order_clause_ = $3; $$->opt_limit_clause_ = $4; } ; select_clause_list: select_clause { $$ = new SelectClauseList(); $$->case_idx_ = CASE0; $$->select_clause_ = $1; } | select_clause combine_clause select_clause_list { $$ = new SelectClauseList(); $$->case_idx_ = CASE1; $$->select_clause_ = $1; $$->combine_clause_ = $2; $$->select_clause_list_ = $3; } ; select_clause: SELECT opt_all_or_distinct select_target opt_from_clause opt_where_clause opt_group_clause opt_window_clause { $$ = new SelectClause(); $$->case_idx_ = CASE0; $$->opt_all_or_distinct_ = $2; $$->select_target_ = $3; $$->opt_from_clause_ = $4; $$->opt_where_clause_ = $5; $$->opt_group_clause_ = $6; $$->opt_window_clause_ = $7; } ; combine_clause: UNION { $$ = new CombineClause(); $$->case_idx_ = CASE0; } | INTERSECT { $$ = new CombineClause(); $$->case_idx_ = CASE1; } | EXCEPT { $$ = new CombineClause(); $$->case_idx_ = CASE2; } ; opt_from_clause: from_clause { $$ = new OptFromClause(); $$->case_idx_ = CASE0; $$->from_clause_ = $1; } | { $$ = new OptFromClause(); $$->case_idx_ = CASE1; } ; select_target: expr_list { $$ = new SelectTarget(); $$->case_idx_ = CASE0; $$->expr_list_ = $1; } ; opt_window_clause: window_clause { $$ = new OptWindowClause(); $$->case_idx_ = CASE0; $$->window_clause_ = $1; } | { $$ = new OptWindowClause(); $$->case_idx_ = CASE1; } ; window_clause: WINDOW window_def_list { $$ = new WindowClause(); $$->case_idx_ = CASE0; $$->window_def_list_ = $2; } ; window_def_list: window_def { $$ = new WindowDefList(); $$->case_idx_ = CASE0; $$->window_def_ = $1; } | window_def OP_COMMA window_def_list { $$ = new WindowDefList(); $$->case_idx_ = CASE1; $$->window_def_ = $1; $$->window_def_list_ = $3; } ; window_def: window_name AS OP_LP window OP_RP { $$ = new WindowDef(); $$->case_idx_ = CASE0; $$->window_name_ = $1; $$->window_ = $4; if($$){ auto tmp1 = $$->window_name_; if(tmp1){ auto tmp2 = tmp1->identifier_; if(tmp2){ tmp2->data_type_ = kDataWindowName; tmp2->scope_ = 1; tmp2->data_flag_ =(DATAFLAG)1; } } } } ; window_name: identifier { $$ = new WindowName(); $$->case_idx_ = CASE0; $$->identifier_ = $1; } ; window: opt_exist_window_name opt_partition opt_order_clause opt_frame_clause { $$ = new Window(); $$->case_idx_ = CASE0; $$->opt_exist_window_name_ = $1; $$->opt_partition_ = $2; $$->opt_order_clause_ = $3; $$->opt_frame_clause_ = $4; } ; opt_partition: PARTITION BY expr_list { $$ = new OptPartition(); $$->case_idx_ = CASE0; $$->expr_list_ = $3; } | { $$ = new OptPartition(); $$->case_idx_ = CASE1; } ; opt_frame_clause: range_or_rows frame_bound_start opt_frame_exclude { $$ = new OptFrameClause(); $$->case_idx_ = CASE0; $$->range_or_rows_ = $1; $$->frame_bound_start_ = $2; $$->opt_frame_exclude_ = $3; } | range_or_rows BETWEEN frame_bound_start AND frame_bound_end opt_frame_exclude { $$ = new OptFrameClause(); $$->case_idx_ = CASE1; $$->range_or_rows_ = $1; $$->frame_bound_start_ = $3; $$->frame_bound_end_ = $5; $$->opt_frame_exclude_ = $6; } | { $$ = new OptFrameClause(); $$->case_idx_ = CASE2; } ; range_or_rows: RANGE { $$ = new RangeOrRows(); $$->case_idx_ = CASE0; } | ROWS { $$ = new RangeOrRows(); $$->case_idx_ = CASE1; } | GROUPS { $$ = new RangeOrRows(); $$->case_idx_ = CASE2; } ; frame_bound_start: frame_bound { $$ = new FrameBoundStart(); $$->case_idx_ = CASE0; $$->frame_bound_ = $1; } | UNBOUNDED PRECEDING { $$ = new FrameBoundStart(); $$->case_idx_ = CASE1; } ; frame_bound_end: frame_bound { $$ = new FrameBoundEnd(); $$->case_idx_ = CASE0; $$->frame_bound_ = $1; } | UNBOUNDED FOLLOWING { $$ = new FrameBoundEnd(); $$->case_idx_ = CASE1; } ; frame_bound: expr PRECEDING { $$ = new FrameBound(); $$->case_idx_ = CASE0; $$->expr_ = $1; } | expr FOLLOWING { $$ = new FrameBound(); $$->case_idx_ = CASE1; $$->expr_ = $1; } | CURRENT ROW { $$ = new FrameBound(); $$->case_idx_ = CASE2; } ; opt_frame_exclude: EXCLUDE frame_exclude { $$ = new OptFrameExclude(); $$->case_idx_ = CASE0; $$->frame_exclude_ = $2; } | { $$ = new OptFrameExclude(); $$->case_idx_ = CASE1; } ; frame_exclude: NO OTHERS { $$ = new FrameExclude(); $$->case_idx_ = CASE0; } | CURRENT ROW { $$ = new FrameExclude(); $$->case_idx_ = CASE1; } | GROUP { $$ = new FrameExclude(); $$->case_idx_ = CASE2; } | TIES { $$ = new FrameExclude(); $$->case_idx_ = CASE3; } ; opt_exist_window_name: identifier { $$ = new OptExistWindowName(); $$->case_idx_ = CASE0; $$->identifier_ = $1; if($$){ auto tmp1 = $$->identifier_; if(tmp1){ tmp1->data_type_ = kDataWindowName; tmp1->scope_ = 1; tmp1->data_flag_ =(DATAFLAG)8; } } } | { $$ = new OptExistWindowName(); $$->case_idx_ = CASE1; } ; opt_group_clause: GROUP BY expr_list opt_having_clause { $$ = new OptGroupClause(); $$->case_idx_ = CASE0; $$->expr_list_ = $3; $$->opt_having_clause_ = $4; } | { $$ = new OptGroupClause(); $$->case_idx_ = CASE1; } ; opt_having_clause: HAVING expr { $$ = new OptHavingClause(); $$->case_idx_ = CASE0; $$->expr_ = $2; } | { $$ = new OptHavingClause(); $$->case_idx_ = CASE1; } ; opt_where_clause: where_clause { $$ = new OptWhereClause(); $$->case_idx_ = CASE0; $$->where_clause_ = $1; } | { $$ = new OptWhereClause(); $$->case_idx_ = CASE1; } ; where_clause: WHERE expr { $$ = new WhereClause(); $$->case_idx_ = CASE0; $$->expr_ = $2; } ; from_clause: FROM table_ref { $$ = new FromClause(); $$->case_idx_ = CASE0; $$->table_ref_ = $2; } ; table_ref: opt_table_prefix table_name opt_on_or_using { $$ = new TableRef(); $$->case_idx_ = CASE0; $$->opt_table_prefix_ = $1; $$->table_name_ = $2; $$->opt_on_or_using_ = $3; } | opt_table_prefix OP_LP select_no_parens OP_RP opt_on_or_using { $$ = new TableRef(); $$->case_idx_ = CASE1; $$->opt_table_prefix_ = $1; $$->select_no_parens_ = $3; $$->opt_on_or_using_ = $5; } | opt_table_prefix OP_LP table_ref OP_RP opt_on_or_using { $$ = new TableRef(); $$->case_idx_ = CASE2; $$->opt_table_prefix_ = $1; $$->table_ref_ = $3; $$->opt_on_or_using_ = $5; } ; opt_on_or_using: on_or_using { $$ = new OptOnOrUsing(); $$->case_idx_ = CASE0; $$->on_or_using_ = $1; } | %prec JOIN { $$ = new OptOnOrUsing(); $$->case_idx_ = CASE1; } ; on_or_using: ON expr { $$ = new OnOrUsing(); $$->case_idx_ = CASE0; $$->expr_ = $2; } | USING OP_LP column_name_list OP_RP { $$ = new OnOrUsing(); $$->case_idx_ = CASE1; $$->column_name_list_ = $3; } ; column_name_list: column_name { $$ = new ColumnNameList(); $$->case_idx_ = CASE0; $$->column_name_ = $1; } | column_name OP_COMMA column_name_list { $$ = new ColumnNameList(); $$->case_idx_ = CASE1; $$->column_name_ = $1; $$->column_name_list_ = $3; } ; opt_table_prefix: table_ref join_op { $$ = new OptTablePrefix(); $$->case_idx_ = CASE0; $$->table_ref_ = $1; $$->join_op_ = $2; } | { $$ = new OptTablePrefix(); $$->case_idx_ = CASE1; } ; join_op: OP_COMMA { $$ = new JoinOp(); $$->case_idx_ = CASE0; } | JOIN { $$ = new JoinOp(); $$->case_idx_ = CASE1; } | NATURAL opt_join_type JOIN { $$ = new JoinOp(); $$->case_idx_ = CASE2; $$->opt_join_type_ = $2; } ; opt_join_type: LEFT { $$ = new OptJoinType(); $$->case_idx_ = CASE0; } | LEFT OUTER { $$ = new OptJoinType(); $$->case_idx_ = CASE1; } | INNER { $$ = new OptJoinType(); $$->case_idx_ = CASE2; } | CROSS { $$ = new OptJoinType(); $$->case_idx_ = CASE3; } | { $$ = new OptJoinType(); $$->case_idx_ = CASE4; } ; expr_list: expr OP_COMMA expr_list { $$ = new ExprList(); $$->case_idx_ = CASE0; $$->expr_ = $1; $$->expr_list_ = $3; } | expr { $$ = new ExprList(); $$->case_idx_ = CASE1; $$->expr_ = $1; } ; opt_limit_clause: limit_clause { $$ = new OptLimitClause(); $$->case_idx_ = CASE0; $$->limit_clause_ = $1; } | { $$ = new OptLimitClause(); $$->case_idx_ = CASE1; } ; limit_clause: LIMIT expr { $$ = new LimitClause(); $$->case_idx_ = CASE0; $$->expr_1_ = $2; } | LIMIT expr OFFSET expr { $$ = new LimitClause(); $$->case_idx_ = CASE1; $$->expr_1_ = $2; $$->expr_2_ = $4; } | LIMIT expr OP_COMMA expr { $$ = new LimitClause(); $$->case_idx_ = CASE2; $$->expr_1_ = $2; $$->expr_2_ = $4; } ; opt_order_clause: ORDER BY order_item_list { $$ = new OptOrderClause(); $$->case_idx_ = CASE0; $$->order_item_list_ = $3; } | { $$ = new OptOrderClause(); $$->case_idx_ = CASE1; } ; opt_order_nulls: NULLS FIRST { $$ = new OptOrderNulls(); $$->case_idx_ = CASE0; } | NULLS LAST { $$ = new OptOrderNulls(); $$->case_idx_ = CASE1; } | { $$ = new OptOrderNulls(); $$->case_idx_ = CASE2; } ; order_item_list: order_item { $$ = new OrderItemList(); $$->case_idx_ = CASE0; $$->order_item_ = $1; } | order_item OP_COMMA order_item_list { $$ = new OrderItemList(); $$->case_idx_ = CASE1; $$->order_item_ = $1; $$->order_item_list_ = $3; } ; order_item: expr opt_order_behavior opt_order_nulls { $$ = new OrderItem(); $$->case_idx_ = CASE0; $$->expr_ = $1; $$->opt_order_behavior_ = $2; $$->opt_order_nulls_ = $3; } ; opt_order_behavior: ASC { $$ = new OptOrderBehavior(); $$->case_idx_ = CASE0; } | DESC { $$ = new OptOrderBehavior(); $$->case_idx_ = CASE1; } | { $$ = new OptOrderBehavior(); $$->case_idx_ = CASE2; } ; opt_with_clause: WITH cte_table_list { $$ = new OptWithClause(); $$->case_idx_ = CASE0; $$->cte_table_list_ = $2; } | WITH RECURSIVE cte_table_list { $$ = new OptWithClause(); $$->case_idx_ = CASE1; $$->cte_table_list_ = $3; } | { $$ = new OptWithClause(); $$->case_idx_ = CASE2; } ; cte_table_list: cte_table { $$ = new CteTableList(); $$->case_idx_ = CASE0; $$->cte_table_ = $1; } | cte_table OP_COMMA cte_table_list { $$ = new CteTableList(); $$->case_idx_ = CASE1; $$->cte_table_ = $1; $$->cte_table_list_ = $3; } ; cte_table: cte_table_name AS OP_LP select_stmt OP_RP { $$ = new CteTable(); $$->case_idx_ = CASE0; $$->cte_table_name_ = $1; $$->select_stmt_ = $4; } ; cte_table_name: table_name opt_column_name_list_p { $$ = new CteTableName(); $$->case_idx_ = CASE0; $$->table_name_ = $1; $$->opt_column_name_list_p_ = $2; } ; opt_all_or_distinct: ALL { $$ = new OptAllOrDistinct(); $$->case_idx_ = CASE0; } | DISTINCT { $$ = new OptAllOrDistinct(); $$->case_idx_ = CASE1; } | { $$ = new OptAllOrDistinct(); $$->case_idx_ = CASE2; } ; create_table_stmt: CREATE opt_temp TABLE opt_if_not_exist table_name AS select_stmt { $$ = new CreateTableStmt(); $$->case_idx_ = CASE0; $$->opt_temp_ = $2; $$->opt_if_not_exist_ = $4; $$->table_name_ = $5; $$->select_stmt_ = $7; if($$){ auto tmp1 = $$->table_name_; if(tmp1){ auto tmp2 = tmp1->identifier_; if(tmp2){ tmp2->data_type_ = kDataTableName; tmp2->scope_ = 1; tmp2->data_flag_ =(DATAFLAG)128; } } } } | CREATE opt_temp TABLE opt_if_not_exist table_name OP_LP column_def_list opt_table_constraint_list OP_RP { $$ = new CreateTableStmt(); $$->case_idx_ = CASE1; $$->opt_temp_ = $2; $$->opt_if_not_exist_ = $4; $$->table_name_ = $5; $$->column_def_list_ = $7; $$->opt_table_constraint_list_ = $8; if($$){ auto tmp1 = $$->table_name_; if(tmp1){ auto tmp2 = tmp1->identifier_; if(tmp2){ tmp2->data_type_ = kDataTableName; tmp2->scope_ = 1; tmp2->data_flag_ =(DATAFLAG)1; } } } if($$){ auto tmp1 = $$->column_def_list_; while(tmp1){ auto tmp2 = tmp1->column_def_; if(tmp2){ auto tmp3 = tmp2->identifier_; if(tmp3){ tmp3->data_type_ = kDataColumnName; tmp3->scope_ = 2; tmp3->data_flag_ =(DATAFLAG)1; } } tmp1 = tmp1->column_def_list_; } } } ; create_index_stmt: CREATE opt_unique INDEX opt_if_not_exist table_name ON table_name OP_LP indexed_column_list OP_RP opt_where_clause { $$ = new CreateIndexStmt(); $$->case_idx_ = CASE0; $$->opt_unique_ = $2; $$->opt_if_not_exist_ = $4; $$->table_name_1_ = $5; $$->table_name_2_ = $7; $$->indexed_column_list_ = $9; $$->opt_where_clause_ = $11; if($$){ auto tmp1 = $$->table_name_1_; if(tmp1){ auto tmp2 = tmp1->identifier_; if(tmp2){ tmp2->data_type_ = kDataTableName; tmp2->scope_ = 2; tmp2->data_flag_ =(DATAFLAG)128; } } } if($$){ auto tmp1 = $$->table_name_2_; if(tmp1){ auto tmp2 = tmp1->identifier_; if(tmp2){ tmp2->data_type_ = kDataTableName; tmp2->scope_ = 1; tmp2->data_flag_ =(DATAFLAG)8; } } } } ; create_view_stmt: CREATE opt_temp VIEW view_name opt_column_name_list_p AS select_stmt opt_check_option { $$ = new CreateViewStmt(); $$->case_idx_ = CASE0; $$->opt_temp_ = $2; $$->view_name_ = $4; $$->opt_column_name_list_p_ = $5; $$->select_stmt_ = $7; $$->opt_check_option_ = $8; if($$){ auto tmp1 = $$->view_name_; if(tmp1){ auto tmp2 = tmp1->identifier_; if(tmp2){ tmp2->data_type_ = kDataTableName; tmp2->scope_ = 10; tmp2->data_flag_ =(DATAFLAG)1; } } } if($$){ auto tmp1 = $$->opt_column_name_list_p_; if(tmp1){ auto tmp2 = tmp1->column_name_list_; while(tmp2){ auto tmp3 = tmp2->column_name_; if(tmp3){ auto tmp4 = tmp3->identifier_; if(tmp4){ tmp4->data_type_ = kDataColumnName; tmp4->scope_ = 11; tmp4->data_flag_ =(DATAFLAG)1; } } tmp2 = tmp2->column_name_list_; } } } } | CREATE opt_temp RECURSIVE VIEW view_name opt_column_name_list_p AS select_stmt opt_check_option { $$ = new CreateViewStmt(); $$->case_idx_ = CASE1; $$->opt_temp_ = $2; $$->view_name_ = $5; $$->opt_column_name_list_p_ = $6; $$->select_stmt_ = $8; $$->opt_check_option_ = $9; if($$){ auto tmp1 = $$->view_name_; if(tmp1){ auto tmp2 = tmp1->identifier_; if(tmp2){ tmp2->data_type_ = kDataTableName; tmp2->scope_ = 10; tmp2->data_flag_ =(DATAFLAG)1; } } } if($$){ auto tmp1 = $$->opt_column_name_list_p_; if(tmp1){ auto tmp2 = tmp1->column_name_list_; while(tmp2){ auto tmp3 = tmp2->column_name_; if(tmp3){ auto tmp4 = tmp3->identifier_; if(tmp4){ tmp4->data_type_ = kDataColumnName; tmp4->scope_ = 11; tmp4->data_flag_ =(DATAFLAG)1; } } tmp2 = tmp2->column_name_list_; } } } } | CREATE OR REPLACE opt_temp VIEW view_name opt_column_name_list_p AS select_stmt opt_check_option { $$ = new CreateViewStmt(); $$->case_idx_ = CASE2; $$->opt_temp_ = $4; $$->view_name_ = $6; $$->opt_column_name_list_p_ = $7; $$->select_stmt_ = $9; $$->opt_check_option_ = $10; if($$){ auto tmp1 = $$->view_name_; if(tmp1){ auto tmp2 = tmp1->identifier_; if(tmp2){ tmp2->data_type_ = kDataTableName; tmp2->scope_ = 10; tmp2->data_flag_ =(DATAFLAG)1; } } } if($$){ auto tmp1 = $$->opt_column_name_list_p_; if(tmp1){ auto tmp2 = tmp1->column_name_list_; while(tmp2){ auto tmp3 = tmp2->column_name_; if(tmp3){ auto tmp4 = tmp3->identifier_; if(tmp4){ tmp4->data_type_ = kDataColumnName; tmp4->scope_ = 11; tmp4->data_flag_ =(DATAFLAG)1; } } tmp2 = tmp2->column_name_list_; } } } } | CREATE OR REPLACE opt_temp RECURSIVE VIEW view_name opt_column_name_list_p AS select_stmt opt_check_option { $$ = new CreateViewStmt(); $$->case_idx_ = CASE3; $$->opt_temp_ = $4; $$->view_name_ = $7; $$->opt_column_name_list_p_ = $8; $$->select_stmt_ = $10; $$->opt_check_option_ = $11; if($$){ auto tmp1 = $$->view_name_; if(tmp1){ auto tmp2 = tmp1->identifier_; if(tmp2){ tmp2->data_type_ = kDataTableName; tmp2->scope_ = 10; tmp2->data_flag_ =(DATAFLAG)1; } } } if($$){ auto tmp1 = $$->opt_column_name_list_p_; if(tmp1){ auto tmp2 = tmp1->column_name_list_; while(tmp2){ auto tmp3 = tmp2->column_name_; if(tmp3){ auto tmp4 = tmp3->identifier_; if(tmp4){ tmp4->data_type_ = kDataColumnName; tmp4->scope_ = 11; tmp4->data_flag_ =(DATAFLAG)1; } } tmp2 = tmp2->column_name_list_; } } } } ; drop_index_stmt: DROP INDEX opt_if_exist table_name { $$ = new DropIndexStmt(); $$->case_idx_ = CASE0; $$->opt_if_exist_ = $3; $$->table_name_ = $4; if($$){ auto tmp1 = $$->table_name_; if(tmp1){ auto tmp2 = tmp1->identifier_; if(tmp2){ tmp2->data_type_ = kDataTableName; tmp2->scope_ = 1; tmp2->data_flag_ =(DATAFLAG)2; } } } } ; drop_table_stmt: DROP TABLE opt_if_exist table_name { $$ = new DropTableStmt(); $$->case_idx_ = CASE0; $$->opt_if_exist_ = $3; $$->table_name_ = $4; if($$){ auto tmp1 = $$->table_name_; if(tmp1){ auto tmp2 = tmp1->identifier_; if(tmp2){ tmp2->data_type_ = kDataTableName; tmp2->scope_ = 1; tmp2->data_flag_ =(DATAFLAG)2; } } } } ; drop_view_stmt: DROP VIEW opt_if_exist view_name { $$ = new DropViewStmt(); $$->case_idx_ = CASE0; $$->opt_if_exist_ = $3; $$->view_name_ = $4; if($$){ auto tmp1 = $$->view_name_; if(tmp1){ auto tmp2 = tmp1->identifier_; if(tmp2){ tmp2->data_type_ = kDataTableName; tmp2->scope_ = 1; tmp2->data_flag_ =(DATAFLAG)2; } } } } ; insert_stmt: opt_with_clause INSERT INTO table_name insert_rest opt_on_conflict { $$ = new InsertStmt(); $$->case_idx_ = CASE0; $$->opt_with_clause_ = $1; $$->table_name_ = $4; $$->insert_rest_ = $5; $$->opt_on_conflict_ = $6; } ; insert_rest: opt_column_name_list_p select_no_parens { $$ = new InsertRest(); $$->case_idx_ = CASE0; $$->opt_column_name_list_p_ = $1; $$->select_no_parens_ = $2; } | opt_column_name_list_p DEFAULT VALUES { $$ = new InsertRest(); $$->case_idx_ = CASE1; $$->opt_column_name_list_p_ = $1; } | opt_column_name_list_p VALUES super_values_list { $$ = new InsertRest(); $$->case_idx_ = CASE2; $$->opt_column_name_list_p_ = $1; $$->super_values_list_ = $3; } ; super_values_list: values_list { $$ = new SuperValuesList(); $$->case_idx_ = CASE0; $$->values_list_ = $1; } | values_list OP_COMMA super_values_list { $$ = new SuperValuesList(); $$->case_idx_ = CASE1; $$->values_list_ = $1; $$->super_values_list_ = $3; } ; values_list: OP_LP expr_list OP_RP { $$ = new ValuesList(); $$->case_idx_ = CASE0; $$->expr_list_ = $2; } ; opt_on_conflict: ON CONFLICT opt_conflict_expr DO NOTHING { $$ = new OptOnConflict(); $$->case_idx_ = CASE0; $$->opt_conflict_expr_ = $3; } | ON CONFLICT opt_conflict_expr DO UPDATE set_clause_list where_clause { $$ = new OptOnConflict(); $$->case_idx_ = CASE1; $$->opt_conflict_expr_ = $3; $$->set_clause_list_ = $6; $$->where_clause_ = $7; } | { $$ = new OptOnConflict(); $$->case_idx_ = CASE2; } ; opt_conflict_expr: OP_LP indexed_column_list OP_RP where_clause { $$ = new OptConflictExpr(); $$->case_idx_ = CASE0; $$->indexed_column_list_ = $2; $$->where_clause_ = $4; } | { $$ = new OptConflictExpr(); $$->case_idx_ = CASE1; } ; indexed_column_list: indexed_column { $$ = new IndexedColumnList(); $$->case_idx_ = CASE0; $$->indexed_column_ = $1; } | indexed_column OP_COMMA indexed_column_list { $$ = new IndexedColumnList(); $$->case_idx_ = CASE1; $$->indexed_column_ = $1; $$->indexed_column_list_ = $3; } ; indexed_column: expr opt_order_behavior { $$ = new IndexedColumn(); $$->case_idx_ = CASE0; $$->expr_ = $1; $$->opt_order_behavior_ = $2; } ; update_stmt: opt_with_clause UPDATE table_name SET set_clause_list opt_where_clause { $$ = new UpdateStmt(); $$->case_idx_ = CASE0; $$->opt_with_clause_ = $1; $$->table_name_ = $3; $$->set_clause_list_ = $5; $$->opt_where_clause_ = $6; } ; reindex_stmt: REINDEX TABLE table_name { $$ = new ReindexStmt(); $$->case_idx_ = CASE0; $$->table_name_ = $3; } | REINDEX INDEX table_name { $$ = new ReindexStmt(); $$->case_idx_ = CASE1; $$->table_name_ = $3; } ; alter_action: RENAME TO table_name { $$ = new AlterAction(); $$->case_idx_ = CASE0; $$->table_name_ = $3; if($$){ auto tmp1 = $$->table_name_; if(tmp1){ auto tmp2 = tmp1->identifier_; if(tmp2){ tmp2->data_type_ = kDataTableName; tmp2->scope_ = 2; tmp2->data_flag_ =(DATAFLAG)64; } } } } | RENAME opt_column column_name TO column_name { $$ = new AlterAction(); $$->case_idx_ = CASE1; $$->opt_column_ = $2; $$->column_name_1_ = $3; $$->column_name_2_ = $5; if($$){ auto tmp1 = $$->column_name_1_; if(tmp1){ auto tmp2 = tmp1->identifier_; if(tmp2){ tmp2->data_type_ = kDataColumnName; tmp2->scope_ = 2; tmp2->data_flag_ =(DATAFLAG)8; } } } if($$){ auto tmp1 = $$->column_name_2_; if(tmp1){ auto tmp2 = tmp1->identifier_; if(tmp2){ tmp2->data_type_ = kDataColumnName; tmp2->scope_ = 3; tmp2->data_flag_ =(DATAFLAG)64; } } } } | ADD opt_column column_def { $$ = new AlterAction(); $$->case_idx_ = CASE2; $$->opt_column_ = $2; $$->column_def_ = $3; } ; column_def_list: column_def { $$ = new ColumnDefList(); $$->case_idx_ = CASE0; $$->column_def_ = $1; } | column_def OP_COMMA column_def_list { $$ = new ColumnDefList(); $$->case_idx_ = CASE1; $$->column_def_ = $1; $$->column_def_list_ = $3; } ; column_def: identifier type_name opt_column_constraint_list { $$ = new ColumnDef(); $$->case_idx_ = CASE0; $$->identifier_ = $1; $$->type_name_ = $2; $$->opt_column_constraint_list_ = $3; if($$){ auto tmp1 = $$->identifier_; if(tmp1){ tmp1->data_type_ = kDataColumnName; tmp1->scope_ = 2; tmp1->data_flag_ =(DATAFLAG)1; } } } ; opt_column_constraint_list: column_constraint_list { $$ = new OptColumnConstraintList(); $$->case_idx_ = CASE0; $$->column_constraint_list_ = $1; } | { $$ = new OptColumnConstraintList(); $$->case_idx_ = CASE1; } ; column_constraint_list: column_constraint { $$ = new ColumnConstraintList(); $$->case_idx_ = CASE0; $$->column_constraint_ = $1; } | column_constraint column_constraint_list { $$ = new ColumnConstraintList(); $$->case_idx_ = CASE1; $$->column_constraint_ = $1; $$->column_constraint_list_ = $2; } ; column_constraint: constraint_type { $$ = new ColumnConstraint(); $$->case_idx_ = CASE0; $$->constraint_type_ = $1; } ; constraint_type: PRIMARY KEY { $$ = new ConstraintType(); $$->case_idx_ = CASE0; } | NOT NULL { $$ = new ConstraintType(); $$->case_idx_ = CASE1; } | UNIQUE { $$ = new ConstraintType(); $$->case_idx_ = CASE2; } | CHECK OP_LP expr OP_RP { $$ = new ConstraintType(); $$->case_idx_ = CASE3; $$->expr_ = $3; } | foreign_clause { $$ = new ConstraintType(); $$->case_idx_ = CASE4; $$->foreign_clause_ = $1; } ; foreign_clause: REFERENCES table_name opt_column_name_list_p opt_foreign_key_actions opt_constraint_attribute_spec { $$ = new ForeignClause(); $$->case_idx_ = CASE0; $$->table_name_ = $2; $$->opt_column_name_list_p_ = $3; $$->opt_foreign_key_actions_ = $4; $$->opt_constraint_attribute_spec_ = $5; if($$){ auto tmp1 = $$->table_name_; if(tmp1){ auto tmp2 = tmp1->identifier_; if(tmp2){ tmp2->data_type_ = kDataTableName; tmp2->scope_ = 100; tmp2->data_flag_ =(DATAFLAG)8; } } } if($$){ auto tmp1 = $$->opt_column_name_list_p_; if(tmp1){ auto tmp2 = tmp1->column_name_list_; while(tmp2){ auto tmp3 = tmp2->column_name_; if(tmp3){ auto tmp4 = tmp3->identifier_; if(tmp4){ tmp4->data_type_ = kDataColumnName; tmp4->scope_ = 101; tmp4->data_flag_ =(DATAFLAG)8; } } tmp2 = tmp2->column_name_list_; } } } } ; opt_foreign_key_actions: foreign_key_actions { $$ = new OptForeignKeyActions(); $$->case_idx_ = CASE0; $$->foreign_key_actions_ = $1; } | { $$ = new OptForeignKeyActions(); $$->case_idx_ = CASE1; } ; foreign_key_actions: MATCH FULL { $$ = new ForeignKeyActions(); $$->case_idx_ = CASE0; } | MATCH PARTIAL { $$ = new ForeignKeyActions(); $$->case_idx_ = CASE1; } | MATCH SIMPLE { $$ = new ForeignKeyActions(); $$->case_idx_ = CASE2; } | ON UPDATE key_actions { $$ = new ForeignKeyActions(); $$->case_idx_ = CASE3; $$->key_actions_ = $3; } | ON DELETE key_actions { $$ = new ForeignKeyActions(); $$->case_idx_ = CASE4; $$->key_actions_ = $3; } ; key_actions: SET NULL { $$ = new KeyActions(); $$->case_idx_ = CASE0; } | SET DEFAULT { $$ = new KeyActions(); $$->case_idx_ = CASE1; } | CASCADE { $$ = new KeyActions(); $$->case_idx_ = CASE2; } | RESTRICT { $$ = new KeyActions(); $$->case_idx_ = CASE3; } | NO ACTION { $$ = new KeyActions(); $$->case_idx_ = CASE4; } ; opt_constraint_attribute_spec: DEFFERRABLE opt_initial_time { $$ = new OptConstraintAttributeSpec(); $$->case_idx_ = CASE0; $$->opt_initial_time_ = $2; } | NOT DEFFERRABLE opt_initial_time { $$ = new OptConstraintAttributeSpec(); $$->case_idx_ = CASE1; $$->opt_initial_time_ = $3; } | { $$ = new OptConstraintAttributeSpec(); $$->case_idx_ = CASE2; } ; opt_initial_time: INITIALLY DEFERRED { $$ = new OptInitialTime(); $$->case_idx_ = CASE0; } | INITIALLY IMMEDIATE { $$ = new OptInitialTime(); $$->case_idx_ = CASE1; } | { $$ = new OptInitialTime(); $$->case_idx_ = CASE2; } ; constraint_name: CONSTRAINT name { $$ = new ConstraintName(); $$->case_idx_ = CASE0; $$->name_ = $2; } ; opt_temp: TEMPORARY { $$ = new OptTemp(); $$->case_idx_ = CASE0; } | TEMP { $$ = new OptTemp(); $$->case_idx_ = CASE1; } | LOCAL TEMPORARY { $$ = new OptTemp(); $$->case_idx_ = CASE2; } | LOCAL TEMP { $$ = new OptTemp(); $$->case_idx_ = CASE3; } | GLOBAL TEMPORARY { $$ = new OptTemp(); $$->case_idx_ = CASE4; } | GLOBAL TEMP { $$ = new OptTemp(); $$->case_idx_ = CASE5; } | UNLOGGED { $$ = new OptTemp(); $$->case_idx_ = CASE6; } | { $$ = new OptTemp(); $$->case_idx_ = CASE7; } ; opt_check_option: WITH CHECK OPTION { $$ = new OptCheckOption(); $$->case_idx_ = CASE0; } | WITH CASCADED CHECK OPTION { $$ = new OptCheckOption(); $$->case_idx_ = CASE1; } | WITH LOCAL CHECK OPTION { $$ = new OptCheckOption(); $$->case_idx_ = CASE2; } | { $$ = new OptCheckOption(); $$->case_idx_ = CASE3; } ; opt_column_name_list_p: OP_LP column_name_list OP_RP { $$ = new OptColumnNameListP(); $$->case_idx_ = CASE0; $$->column_name_list_ = $2; } | { $$ = new OptColumnNameListP(); $$->case_idx_ = CASE1; } ; set_clause_list: set_clause { $$ = new SetClauseList(); $$->case_idx_ = CASE0; $$->set_clause_ = $1; } | set_clause OP_COMMA set_clause_list { $$ = new SetClauseList(); $$->case_idx_ = CASE1; $$->set_clause_ = $1; $$->set_clause_list_ = $3; } ; set_clause: column_name OP_EQUAL expr { $$ = new SetClause(); $$->case_idx_ = CASE0; $$->column_name_ = $1; $$->expr_ = $3; } | OP_LP column_name_list OP_RP OP_EQUAL expr { $$ = new SetClause(); $$->case_idx_ = CASE1; $$->column_name_list_ = $2; $$->expr_ = $5; } ; expr: operand { $$ = new Expr(); $$->case_idx_ = CASE0; $$->operand_ = $1; } | between_expr { $$ = new Expr(); $$->case_idx_ = CASE1; $$->between_expr_ = $1; } | exists_expr { $$ = new Expr(); $$->case_idx_ = CASE2; $$->exists_expr_ = $1; } | in_expr { $$ = new Expr(); $$->case_idx_ = CASE3; $$->in_expr_ = $1; } | cast_expr { $$ = new Expr(); $$->case_idx_ = CASE4; $$->cast_expr_ = $1; } | logic_expr { $$ = new Expr(); $$->case_idx_ = CASE5; $$->logic_expr_ = $1; } ; operand: OP_LP expr_list OP_RP { $$ = new Operand(); $$->case_idx_ = CASE0; $$->expr_list_ = $2; } | array_index { $$ = new Operand(); $$->case_idx_ = CASE1; $$->array_index_ = $1; } | scalar_expr { $$ = new Operand(); $$->case_idx_ = CASE2; $$->scalar_expr_ = $1; } | unary_expr { $$ = new Operand(); $$->case_idx_ = CASE3; $$->unary_expr_ = $1; } | binary_expr { $$ = new Operand(); $$->case_idx_ = CASE4; $$->binary_expr_ = $1; } | case_expr { $$ = new Operand(); $$->case_idx_ = CASE5; $$->case_expr_ = $1; } | extract_expr { $$ = new Operand(); $$->case_idx_ = CASE6; $$->extract_expr_ = $1; } | OP_LP select_no_parens OP_RP { $$ = new Operand(); $$->case_idx_ = CASE7; $$->select_no_parens_ = $2; } ; cast_expr: CAST OP_LP expr AS type_name OP_RP { $$ = new CastExpr(); $$->case_idx_ = CASE0; $$->expr_ = $3; $$->type_name_ = $5; } ; scalar_expr: column_name { $$ = new ScalarExpr(); $$->case_idx_ = CASE0; $$->column_name_ = $1; } | literal { $$ = new ScalarExpr(); $$->case_idx_ = CASE1; $$->literal_ = $1; } ; unary_expr: OP_SUB operand %prec OP_SUB { $$ = new UnaryExpr(); $$->case_idx_ = CASE0; $$->operand_ = $2; } | NOT operand %prec NOT { $$ = new UnaryExpr(); $$->case_idx_ = CASE1; $$->operand_ = $2; } | operand ISNULL %prec ISNULL { $$ = new UnaryExpr(); $$->case_idx_ = CASE2; $$->operand_ = $1; } | operand IS NULL { $$ = new UnaryExpr(); $$->case_idx_ = CASE3; $$->operand_ = $1; } | operand IS NOT NULL { $$ = new UnaryExpr(); $$->case_idx_ = CASE4; $$->operand_ = $1; } | NULL { $$ = new UnaryExpr(); $$->case_idx_ = CASE5; } | OP_MUL { $$ = new UnaryExpr(); $$->case_idx_ = CASE6; } ; binary_expr: comp_expr { $$ = new BinaryExpr(); $$->case_idx_ = CASE0; $$->comp_expr_ = $1; } | operand binary_op operand %prec OP_ADD { $$ = new BinaryExpr(); $$->case_idx_ = CASE1; $$->operand_1_ = $1; $$->binary_op_ = $2; $$->operand_2_ = $3; } | operand LIKE operand { $$ = new BinaryExpr(); $$->case_idx_ = CASE2; $$->operand_1_ = $1; $$->operand_2_ = $3; } | operand NOT LIKE operand { $$ = new BinaryExpr(); $$->case_idx_ = CASE3; $$->operand_1_ = $1; $$->operand_2_ = $4; } ; logic_expr: expr AND expr { $$ = new LogicExpr(); $$->case_idx_ = CASE0; $$->expr_1_ = $1; $$->expr_2_ = $3; } | expr OR expr { $$ = new LogicExpr(); $$->case_idx_ = CASE1; $$->expr_1_ = $1; $$->expr_2_ = $3; } ; in_expr: operand opt_not IN OP_LP select_no_parens OP_RP { $$ = new InExpr(); $$->case_idx_ = CASE0; $$->operand_ = $1; $$->opt_not_ = $2; $$->select_no_parens_ = $5; } | operand opt_not IN OP_LP expr_list OP_RP { $$ = new InExpr(); $$->case_idx_ = CASE1; $$->operand_ = $1; $$->opt_not_ = $2; $$->expr_list_ = $5; } | operand opt_not IN table_name { $$ = new InExpr(); $$->case_idx_ = CASE2; $$->operand_ = $1; $$->opt_not_ = $2; $$->table_name_ = $4; } ; case_expr: CASE expr case_list END { $$ = new CaseExpr(); $$->case_idx_ = CASE0; $$->expr_1_ = $2; $$->case_list_ = $3; } | CASE case_list END { $$ = new CaseExpr(); $$->case_idx_ = CASE1; $$->case_list_ = $2; } | CASE expr case_list ELSE expr END { $$ = new CaseExpr(); $$->case_idx_ = CASE2; $$->expr_1_ = $2; $$->case_list_ = $3; $$->expr_2_ = $5; } | CASE case_list ELSE expr END { $$ = new CaseExpr(); $$->case_idx_ = CASE3; $$->case_list_ = $2; $$->expr_1_ = $4; } ; between_expr: operand BETWEEN operand AND operand %prec BETWEEN { $$ = new BetweenExpr(); $$->case_idx_ = CASE0; $$->operand_1_ = $1; $$->operand_2_ = $3; $$->operand_3_ = $5; } | operand NOT BETWEEN operand AND operand %prec NOT { $$ = new BetweenExpr(); $$->case_idx_ = CASE1; $$->operand_1_ = $1; $$->operand_2_ = $4; $$->operand_3_ = $6; } ; exists_expr: opt_not EXISTS OP_LP select_no_parens OP_RP { $$ = new ExistsExpr(); $$->case_idx_ = CASE0; $$->opt_not_ = $1; $$->select_no_parens_ = $4; } ; case_list: case_clause { $$ = new CaseList(); $$->case_idx_ = CASE0; $$->case_clause_ = $1; } | case_clause case_list { $$ = new CaseList(); $$->case_idx_ = CASE1; $$->case_clause_ = $1; $$->case_list_ = $2; } ; case_clause: WHEN expr THEN expr { $$ = new CaseClause(); $$->case_idx_ = CASE0; $$->expr_1_ = $2; $$->expr_2_ = $4; } ; comp_expr: operand OP_EQUAL operand { $$ = new CompExpr(); $$->case_idx_ = CASE0; $$->operand_1_ = $1; $$->operand_2_ = $3; } | operand OP_NOTEQUAL operand { $$ = new CompExpr(); $$->case_idx_ = CASE1; $$->operand_1_ = $1; $$->operand_2_ = $3; } | operand OP_GREATERTHAN operand { $$ = new CompExpr(); $$->case_idx_ = CASE2; $$->operand_1_ = $1; $$->operand_2_ = $3; } | operand OP_LESSTHAN operand { $$ = new CompExpr(); $$->case_idx_ = CASE3; $$->operand_1_ = $1; $$->operand_2_ = $3; } | operand OP_LESSEQ operand { $$ = new CompExpr(); $$->case_idx_ = CASE4; $$->operand_1_ = $1; $$->operand_2_ = $3; } | operand OP_GREATEREQ operand { $$ = new CompExpr(); $$->case_idx_ = CASE5; $$->operand_1_ = $1; $$->operand_2_ = $3; } ; extract_expr: EXTRACT OP_LP datetime_field FROM expr OP_RP { $$ = new ExtractExpr(); $$->case_idx_ = CASE0; $$->datetime_field_ = $3; $$->expr_ = $5; } ; datetime_field: SECOND { $$ = new DatetimeField(); $$->case_idx_ = CASE0; } | MINUTE { $$ = new DatetimeField(); $$->case_idx_ = CASE1; } | HOUR { $$ = new DatetimeField(); $$->case_idx_ = CASE2; } | DAY { $$ = new DatetimeField(); $$->case_idx_ = CASE3; } | MONTH { $$ = new DatetimeField(); $$->case_idx_ = CASE4; } | YEAR { $$ = new DatetimeField(); $$->case_idx_ = CASE5; } ; array_index: operand OP_LBRACKET int_literal OP_RBRACKET { $$ = new ArrayIndex(); $$->case_idx_ = CASE0; $$->operand_ = $1; $$->int_literal_ = $3; } ; literal: string_literal { $$ = new Literal(); $$->case_idx_ = CASE0; $$->string_literal_ = $1; } | bool_literal { $$ = new Literal(); $$->case_idx_ = CASE1; $$->bool_literal_ = $1; } | num_literal { $$ = new Literal(); $$->case_idx_ = CASE2; $$->num_literal_ = $1; } ; string_literal: STRINGLITERAL { $$ = new StringLiteral(); $$->string_val_ = $1; free($1); } ; bool_literal: TRUE { $$ = new BoolLiteral(); $$->case_idx_ = CASE0; } | FALSE { $$ = new BoolLiteral(); $$->case_idx_ = CASE1; } ; num_literal: int_literal { $$ = new NumLiteral(); $$->case_idx_ = CASE0; $$->int_literal_ = $1; } | float_literal { $$ = new NumLiteral(); $$->case_idx_ = CASE1; $$->float_literal_ = $1; } ; int_literal: INTLITERAL { $$ = new IntLiteral(); $$->int_val_ = $1; } ; float_literal: FLOATLITERAL { $$ = new FloatLiteral(); $$->float_val_ = $1; } ; opt_column: COLUMN { $$ = new OptColumn(); $$->case_idx_ = CASE0; } | { $$ = new OptColumn(); $$->case_idx_ = CASE1; } ; opt_if_not_exist: IF NOT EXISTS { $$ = new OptIfNotExist(); $$->case_idx_ = CASE0; } | { $$ = new OptIfNotExist(); $$->case_idx_ = CASE1; } ; opt_if_exist: IF EXISTS { $$ = new OptIfExist(); $$->case_idx_ = CASE0; } | { $$ = new OptIfExist(); $$->case_idx_ = CASE1; } ; identifier: IDENTIFIER { $$ = new Identifier(); $$->string_val_ = $1; free($1); } ; table_name: identifier { $$ = new TableName(); $$->case_idx_ = CASE0; $$->identifier_ = $1; if($$){ auto tmp1 = $$->identifier_; if(tmp1){ tmp1->data_type_ = kDataTableName; tmp1->scope_ = 1; tmp1->data_flag_ =(DATAFLAG)8; } } } ; column_name: identifier { $$ = new ColumnName(); $$->case_idx_ = CASE0; $$->identifier_ = $1; if($$){ auto tmp1 = $$->identifier_; if(tmp1){ tmp1->data_type_ = kDataColumnName; tmp1->scope_ = 2; tmp1->data_flag_ =(DATAFLAG)8; } } } ; opt_unique: UNIQUE { $$ = new OptUnique(); $$->case_idx_ = CASE0; } | { $$ = new OptUnique(); $$->case_idx_ = CASE1; } ; view_name: identifier { $$ = new ViewName(); $$->case_idx_ = CASE0; $$->identifier_ = $1; } ; binary_op: OP_ADD { $$ = new BinaryOp(); $$->case_idx_ = CASE0; } | OP_SUB { $$ = new BinaryOp(); $$->case_idx_ = CASE1; } | OP_DIVIDE { $$ = new BinaryOp(); $$->case_idx_ = CASE2; } | OP_MOD { $$ = new BinaryOp(); $$->case_idx_ = CASE3; } | OP_MUL { $$ = new BinaryOp(); $$->case_idx_ = CASE4; } ; opt_not: NOT { $$ = new OptNot(); $$->case_idx_ = CASE0; } | { $$ = new OptNot(); $$->case_idx_ = CASE1; } ; name: identifier { $$ = new Name(); $$->case_idx_ = CASE0; $$->identifier_ = $1; } ; type_name: numeric_type { $$ = new TypeName(); $$->case_idx_ = CASE0; $$->numeric_type_ = $1; } | character_type { $$ = new TypeName(); $$->case_idx_ = CASE1; $$->character_type_ = $1; } ; character_type: character_with_length { $$ = new CharacterType(); $$->case_idx_ = CASE0; $$->character_with_length_ = $1; } | character_without_length { $$ = new CharacterType(); $$->case_idx_ = CASE1; $$->character_without_length_ = $1; } ; character_with_length: character_conflicta OP_LP int_literal OP_RP { $$ = new CharacterWithLength(); $$->case_idx_ = CASE0; $$->character_conflicta_ = $1; $$->int_literal_ = $3; } ; character_without_length: character_conflicta { $$ = new CharacterWithoutLength(); $$->case_idx_ = CASE0; $$->character_conflicta_ = $1; } ; character_conflicta: CHARACTER opt_varying { $$ = new CharacterConflicta(); $$->case_idx_ = CASE0; $$->opt_varying_ = $2; } | CHAR opt_varying { $$ = new CharacterConflicta(); $$->case_idx_ = CASE1; $$->opt_varying_ = $2; } | VARCHAR { $$ = new CharacterConflicta(); $$->case_idx_ = CASE2; } | TEXT { $$ = new CharacterConflicta(); $$->case_idx_ = CASE3; } | NATIONAL CHARACTER opt_varying { $$ = new CharacterConflicta(); $$->case_idx_ = CASE4; $$->opt_varying_ = $3; } | NATIONAL CHAR opt_varying { $$ = new CharacterConflicta(); $$->case_idx_ = CASE5; $$->opt_varying_ = $3; } | NCHAR opt_varying { $$ = new CharacterConflicta(); $$->case_idx_ = CASE6; $$->opt_varying_ = $2; } ; opt_varying: VARYING { $$ = new OptVarying(); $$->case_idx_ = CASE0; } | { $$ = new OptVarying(); $$->case_idx_ = CASE1; } ; numeric_type: INT { $$ = new NumericType(); $$->case_idx_ = CASE0; } | INTEGER { $$ = new NumericType(); $$->case_idx_ = CASE1; } | SMALLINT { $$ = new NumericType(); $$->case_idx_ = CASE2; } | BIGINT { $$ = new NumericType(); $$->case_idx_ = CASE3; } | REAL { $$ = new NumericType(); $$->case_idx_ = CASE4; } | FLOAT { $$ = new NumericType(); $$->case_idx_ = CASE5; } | DOUBLE PRECISION { $$ = new NumericType(); $$->case_idx_ = CASE6; } | DECIMAL { $$ = new NumericType(); $$->case_idx_ = CASE7; } | DEC { $$ = new NumericType(); $$->case_idx_ = CASE8; } | NUMERIC { $$ = new NumericType(); $$->case_idx_ = CASE9; } | BOOLEAN { $$ = new NumericType(); $$->case_idx_ = CASE10; } ; opt_table_constraint_list: table_constraint_list { $$ = new OptTableConstraintList(); $$->case_idx_ = CASE0; $$->table_constraint_list_ = $1; } | { $$ = new OptTableConstraintList(); $$->case_idx_ = CASE1; } ; table_constraint_list: table_constraint { $$ = new TableConstraintList(); $$->case_idx_ = CASE0; $$->table_constraint_ = $1; } | table_constraint OP_COMMA table_constraint_list { $$ = new TableConstraintList(); $$->case_idx_ = CASE1; $$->table_constraint_ = $1; $$->table_constraint_list_ = $3; } ; table_constraint: constraint_name PRIMARY KEY OP_LP indexed_column_list OP_RP { $$ = new TableConstraint(); $$->case_idx_ = CASE0; $$->constraint_name_ = $1; $$->indexed_column_list_ = $5; } | constraint_name UNIQUE OP_LP indexed_column_list OP_RP { $$ = new TableConstraint(); $$->case_idx_ = CASE1; $$->constraint_name_ = $1; $$->indexed_column_list_ = $4; } | constraint_name CHECK OP_LP expr OP_RP { $$ = new TableConstraint(); $$->case_idx_ = CASE2; $$->constraint_name_ = $1; $$->expr_ = $4; } | constraint_name FOREIGN KEY OP_LP column_name_list OP_RP foreign_clause { $$ = new TableConstraint(); $$->case_idx_ = CASE3; $$->constraint_name_ = $1; $$->column_name_list_ = $5; $$->foreign_clause_ = $7; if($$){ auto tmp1 = $$->column_name_list_; while(tmp1){ auto tmp2 = tmp1->column_name_; if(tmp2){ auto tmp3 = tmp2->identifier_; if(tmp3){ tmp3->data_type_ = kDataColumnName; tmp3->scope_ = 2; tmp3->data_flag_ =(DATAFLAG)8; } } tmp1 = tmp1->column_name_list_; } } } ; %% ================================================ FILE: srcs/internal/postgresql/parser/bison_parser.cpp ================================================ /* A Bison parser, made by GNU Bison 3.3.2. */ /* Bison implementation for Yacc-like parsers in C Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2019 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* C LALR(1) parser skeleton written by Richard Stallman, by simplifying the original so-called "semantic" parser. */ /* All symbols defined below should begin with yy or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. There are some unavoidable exceptions within include files to define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ /* Undocumented macros, especially those whose name start with YY_, are private implementation details. Do not rely on them. */ /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ #define YYBISON_VERSION "3.3.2" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ #define YYPURE 2 /* Push parsers. */ #define YYPUSH 0 /* Pull parsers. */ #define YYPULL 1 /* Substitute the type names. */ #define YYSTYPE FF_STYPE #define YYLTYPE FF_LTYPE /* Substitute the variable and function names. */ #define yyparse ff_parse #define yylex ff_lex #define yyerror ff_error #define yydebug ff_debug #define yynerrs ff_nerrs /* First part of user prologue. */ #line 1 "bison.y" /* yacc.c:337 */ #include "bison_parser.h" #include #include #include "flex_lexer.h" int yyerror(YYLTYPE *llocp, Program *result, yyscan_t scanner, const char *msg) { return 0; } #line 86 "bison_parser.cpp" /* yacc.c:337 */ #ifndef YY_NULLPTR #if defined __cplusplus #if 201103L <= __cplusplus #define YY_NULLPTR nullptr #else #define YY_NULLPTR 0 #endif #else #define YY_NULLPTR ((void *)0) #endif #endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE #undef YYERROR_VERBOSE #define YYERROR_VERBOSE 1 #else #define YYERROR_VERBOSE 1 #endif /* In a future release of Bison, this section will be replaced by #include "bison_parser.h". */ #ifndef YY_FF_BISON_PARSER_H_INCLUDED #define YY_FF_BISON_PARSER_H_INCLUDED /* Debug traces. */ #ifndef FF_DEBUG #if defined YYDEBUG #if YYDEBUG #define FF_DEBUG 1 #else #define FF_DEBUG 0 #endif #else /* ! defined YYDEBUG */ #define FF_DEBUG 0 #endif /* ! defined YYDEBUG */ #endif /* ! defined FF_DEBUG */ #if FF_DEBUG extern int ff_debug; #endif /* "%code requires" blocks. */ #line 8 "bison.y" /* yacc.c:352 */ #include "../include/ast.h" #include "parser_typedef.h" #line 132 "bison_parser.cpp" /* yacc.c:352 */ /* Token type. */ #ifndef FF_TOKENTYPE #define FF_TOKENTYPE enum ff_tokentype { SQL_OP_NOTEQUAL = 258, SQL_SIMPLE = 259, SQL_TEXT = 260, SQL_OVER = 261, SQL_BETWEEN = 262, SQL_OP_SEMI = 263, SQL_BIGINT = 264, SQL_LIMIT = 265, SQL_WITH = 266, SQL_ORDER = 267, SQL_LAST = 268, SQL_UNBOUNDED = 269, SQL_PRECEDING = 270, SQL_EXCEPT = 271, SQL_NUMERIC = 272, SQL_OP_LESSTHAN = 273, SQL_PROCEDURE = 274, SQL_ACTION = 275, SQL_FIRST = 276, SQL_OP_GREATEREQ = 277, SQL_CHECK = 278, SQL_FULL = 279, SQL_NATURAL = 280, SQL_DOUBLE = 281, SQL_NATIONAL = 282, SQL_OP_ADD = 283, SQL_CURRENT = 284, SQL_TRIGGER = 285, SQL_OP_SUB = 286, SQL_FALSE = 287, SQL_UNIQUE = 288, SQL_WHERE = 289, SQL_MINUTE = 290, SQL_BEFORE = 291, SQL_ON = 292, SQL_PARTIAL = 293, SQL_OF = 294, SQL_AFTER = 295, SQL_PRIMARY = 296, SQL_MONTH = 297, SQL_DEFERRED = 298, SQL_OP_DOUBLE_DOLLAR = 299, SQL_VARYING = 300, SQL_OP_GREATERTHAN = 301, SQL_OR = 302, SQL_PLPGSQL = 303, SQL_DELETE = 304, SQL_INDEX = 305, SQL_RETURN = 306, SQL_OP_MUL = 307, SQL_FOREIGN = 308, SQL_RESTRICT = 309, SQL_FOLLOWING = 310, SQL_TIES = 311, SQL_DEC = 312, SQL_SELECT = 313, SQL_BEGIN = 314, SQL_LANGUAGE = 315, SQL_DISTINCT = 316, SQL_TRUE = 317, SQL_BY = 318, SQL_OP_MOD = 319, SQL_VALUES = 320, SQL_IS = 321, SQL_ROW = 322, SQL_FUNCTION = 323, SQL_END = 324, SQL_RECURSIVE = 325, SQL_FOR = 326, SQL_UNION = 327, SQL_NULLS = 328, SQL_UPDATE = 329, SQL_ELSE = 330, SQL_RANGE = 331, SQL_OFFSET = 332, SQL_INDEXED = 333, SQL_INSTEAD = 334, SQL_NCHAR = 335, SQL_AND = 336, SQL_REINDEX = 337, SQL_INITIALLY = 338, SQL_YEAR = 339, SQL_PRECISION = 340, SQL_FILTER = 341, SQL_NOT = 342, SQL_VIEW = 343, SQL_DEFFERRABLE = 344, SQL_REAL = 345, SQL_THEN = 346, SQL_OPTION = 347, SQL_DEFAULT = 348, SQL_GLOBAL = 349, SQL_CROSS = 350, SQL_CHAR = 351, SQL_REFERENCES = 352, SQL_OP_XOR = 353, SQL_GROUP = 354, SQL_CASE = 355, SQL_SET = 356, SQL_HOUR = 357, SQL_NO = 358, SQL_COLUMN = 359, SQL_LOCAL = 360, SQL_DROP = 361, SQL_REPLACE = 362, SQL_ASC = 363, SQL_OP_COMMA = 364, SQL_TABLE = 365, SQL_ARRAY = 366, SQL_IF = 367, SQL_EXTRACT = 368, SQL_LEFT = 369, SQL_OUTER = 370, SQL_DECIMAL = 371, SQL_PARTITION = 372, SQL_CASCADE = 373, SQL_ADD = 374, SQL_OTHERS = 375, SQL_OP_LESSEQ = 376, SQL_MATCH = 377, SQL_ALL = 378, SQL_ROWS = 379, SQL_JOIN = 380, SQL_LIKE = 381, SQL_INTEGER = 382, SQL_OP_RP = 383, SQL_INT = 384, SQL_BOOLEAN = 385, SQL_KEY = 386, SQL_EACH = 387, SQL_USING = 388, SQL_RENAME = 389, SQL_DO = 390, SQL_FLOAT = 391, SQL_OP_LP = 392, SQL_CHARACTER = 393, SQL_UMINUS = 394, SQL_CAST = 395, SQL_GROUPS = 396, SQL_NULL = 397, SQL_SMALLINT = 398, SQL_INSERT = 399, SQL_TEMPORARY = 400, SQL_CONSTRAINT = 401, SQL_CREATE = 402, SQL_OP_LBRACKET = 403, SQL_WHEN = 404, SQL_IMMEDIATE = 405, SQL_TO = 406, SQL_EXCLUDE = 407, SQL_DAY = 408, SQL_CONFLICT = 409, SQL_OP_RBRACKET = 410, SQL_EXECUTE = 411, SQL_EXISTS = 412, SQL_INTO = 413, SQL_OP_DIVIDE = 414, SQL_CASCADED = 415, SQL_ISNULL = 416, SQL_AS = 417, SQL_INNER = 418, SQL_INTERSECT = 419, SQL_IN = 420, SQL_OP_EQUAL = 421, SQL_VARCHAR = 422, SQL_ALTER = 423, SQL_DESC = 424, SQL_FROM = 425, SQL_TEMP = 426, SQL_UNLOGGED = 427, SQL_SECOND = 428, SQL_WINDOW = 429, SQL_NOTHING = 430, SQL_HAVING = 431, SQL_INTLITERAL = 432, SQL_STRINGLITERAL = 433, SQL_FLOATLITERAL = 434, SQL_IDENTIFIER = 435 }; #endif /* Value type. */ #if !defined FF_STYPE && !defined FF_STYPE_IS_DECLARED #line 30 "bison.y" /* yacc.c:352 */ union FF_STYPE { #line 30 "bison.y" /* yacc.c:352 */ long ival; char *sval; double fval; Program *program_t; Stmtlist *stmtlist_t; Stmt *stmt_t; CreateStmt *create_stmt_t; DropStmt *drop_stmt_t; AlterStmt *alter_stmt_t; SelectStmt *select_stmt_t; SelectWithParens *select_with_parens_t; SelectNoParens *select_no_parens_t; SelectClauseList *select_clause_list_t; SelectClause *select_clause_t; CombineClause *combine_clause_t; OptFromClause *opt_from_clause_t; SelectTarget *select_target_t; OptWindowClause *opt_window_clause_t; WindowClause *window_clause_t; WindowDefList *window_def_list_t; WindowDef *window_def_t; WindowName *window_name_t; Window *window_t; OptPartition *opt_partition_t; OptFrameClause *opt_frame_clause_t; RangeOrRows *range_or_rows_t; FrameBoundStart *frame_bound_start_t; FrameBoundEnd *frame_bound_end_t; FrameBound *frame_bound_t; OptFrameExclude *opt_frame_exclude_t; FrameExclude *frame_exclude_t; OptExistWindowName *opt_exist_window_name_t; OptGroupClause *opt_group_clause_t; OptHavingClause *opt_having_clause_t; OptWhereClause *opt_where_clause_t; WhereClause *where_clause_t; FromClause *from_clause_t; TableRef *table_ref_t; OptOnOrUsing *opt_on_or_using_t; OnOrUsing *on_or_using_t; ColumnNameList *column_name_list_t; OptTablePrefix *opt_table_prefix_t; JoinOp *join_op_t; OptJoinType *opt_join_type_t; ExprList *expr_list_t; OptLimitClause *opt_limit_clause_t; LimitClause *limit_clause_t; OptOrderClause *opt_order_clause_t; OptOrderNulls *opt_order_nulls_t; OrderItemList *order_item_list_t; OrderItem *order_item_t; OptOrderBehavior *opt_order_behavior_t; OptWithClause *opt_with_clause_t; CteTableList *cte_table_list_t; CteTable *cte_table_t; CteTableName *cte_table_name_t; OptAllOrDistinct *opt_all_or_distinct_t; CreateTableStmt *create_table_stmt_t; CreateIndexStmt *create_index_stmt_t; CreateViewStmt *create_view_stmt_t; DropIndexStmt *drop_index_stmt_t; DropTableStmt *drop_table_stmt_t; DropViewStmt *drop_view_stmt_t; InsertStmt *insert_stmt_t; InsertRest *insert_rest_t; SuperValuesList *super_values_list_t; ValuesList *values_list_t; OptOnConflict *opt_on_conflict_t; OptConflictExpr *opt_conflict_expr_t; IndexedColumnList *indexed_column_list_t; IndexedColumn *indexed_column_t; UpdateStmt *update_stmt_t; ReindexStmt *reindex_stmt_t; AlterAction *alter_action_t; ColumnDefList *column_def_list_t; ColumnDef *column_def_t; OptColumnConstraintList *opt_column_constraint_list_t; ColumnConstraintList *column_constraint_list_t; ColumnConstraint *column_constraint_t; ConstraintType *constraint_type_t; ForeignClause *foreign_clause_t; OptForeignKeyActions *opt_foreign_key_actions_t; ForeignKeyActions *foreign_key_actions_t; KeyActions *key_actions_t; OptConstraintAttributeSpec *opt_constraint_attribute_spec_t; OptInitialTime *opt_initial_time_t; ConstraintName *constraint_name_t; OptTemp *opt_temp_t; OptCheckOption *opt_check_option_t; OptColumnNameListP *opt_column_name_list_p_t; SetClauseList *set_clause_list_t; SetClause *set_clause_t; Expr *expr_t; Operand *operand_t; CastExpr *cast_expr_t; ScalarExpr *scalar_expr_t; UnaryExpr *unary_expr_t; BinaryExpr *binary_expr_t; LogicExpr *logic_expr_t; InExpr *in_expr_t; CaseExpr *case_expr_t; BetweenExpr *between_expr_t; ExistsExpr *exists_expr_t; CaseList *case_list_t; CaseClause *case_clause_t; CompExpr *comp_expr_t; ExtractExpr *extract_expr_t; DatetimeField *datetime_field_t; ArrayIndex *array_index_t; Literal *literal_t; StringLiteral *string_literal_t; BoolLiteral *bool_literal_t; NumLiteral *num_literal_t; IntLiteral *int_literal_t; FloatLiteral *float_literal_t; OptColumn *opt_column_t; OptIfNotExist *opt_if_not_exist_t; OptIfExist *opt_if_exist_t; Identifier *identifier_t; TableName *table_name_t; ColumnName *column_name_t; OptUnique *opt_unique_t; ViewName *view_name_t; BinaryOp *binary_op_t; OptNot *opt_not_t; Name *name_t; TypeName *type_name_t; CharacterType *character_type_t; CharacterWithLength *character_with_length_t; CharacterWithoutLength *character_without_length_t; CharacterConflicta *character_conflicta_t; OptVarying *opt_varying_t; NumericType *numeric_type_t; OptTableConstraintList *opt_table_constraint_list_t; TableConstraintList *table_constraint_list_t; TableConstraint *table_constraint_t; #line 464 "bison_parser.cpp" /* yacc.c:352 */ }; #line 30 "bison.y" /* yacc.c:352 */ typedef union FF_STYPE FF_STYPE; #define FF_STYPE_IS_TRIVIAL 1 #define FF_STYPE_IS_DECLARED 1 #endif /* Location type. */ #if !defined FF_LTYPE && !defined FF_LTYPE_IS_DECLARED typedef struct FF_LTYPE FF_LTYPE; struct FF_LTYPE { int first_line; int first_column; int last_line; int last_column; }; #define FF_LTYPE_IS_DECLARED 1 #define FF_LTYPE_IS_TRIVIAL 1 #endif int ff_parse(Program *result, yyscan_t scanner); #endif /* !YY_FF_BISON_PARSER_H_INCLUDED */ #ifdef short #undef short #endif #ifdef YYTYPE_UINT8 typedef YYTYPE_UINT8 yytype_uint8; #else typedef unsigned char yytype_uint8; #endif #ifdef YYTYPE_INT8 typedef YYTYPE_INT8 yytype_int8; #else typedef signed char yytype_int8; #endif #ifdef YYTYPE_UINT16 typedef YYTYPE_UINT16 yytype_uint16; #else typedef unsigned short yytype_uint16; #endif #ifdef YYTYPE_INT16 typedef YYTYPE_INT16 yytype_int16; #else typedef short yytype_int16; #endif #ifndef YYSIZE_T #ifdef __SIZE_TYPE__ #define YYSIZE_T __SIZE_TYPE__ #elif defined size_t #define YYSIZE_T size_t #elif !defined YYSIZE_T #include /* INFRINGES ON USER NAME SPACE */ #define YYSIZE_T size_t #else #define YYSIZE_T unsigned #endif #endif #define YYSIZE_MAXIMUM ((YYSIZE_T)-1) #ifndef YY_ #if defined YYENABLE_NLS && YYENABLE_NLS #if ENABLE_NLS #include /* INFRINGES ON USER NAME SPACE */ #define YY_(Msgid) dgettext("bison-runtime", Msgid) #endif #endif #ifndef YY_ #define YY_(Msgid) Msgid #endif #endif #ifndef YY_ATTRIBUTE #if (defined __GNUC__ && \ (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) || \ defined __SUNPRO_C && 0x5110 <= __SUNPRO_C #define YY_ATTRIBUTE(Spec) __attribute__(Spec) #else #define YY_ATTRIBUTE(Spec) /* empty */ #endif #endif #ifndef YY_ATTRIBUTE_PURE #define YY_ATTRIBUTE_PURE YY_ATTRIBUTE((__pure__)) #endif #ifndef YY_ATTRIBUTE_UNUSED #define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE((__unused__)) #endif /* Suppress unused-variable warnings by "using" E. */ #if !defined lint || defined __GNUC__ #define YYUSE(E) ((void)(E)) #else #define YYUSE(E) /* empty */ #endif #if defined __GNUC__ && !defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ /* Suppress an incorrect diagnostic about yylval being uninitialized. */ #define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ _Pragma("GCC diagnostic push") \ _Pragma("GCC diagnostic ignored \"-Wuninitialized\"") \ _Pragma("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") #define YY_IGNORE_MAYBE_UNINITIALIZED_END _Pragma("GCC diagnostic pop") #else #define YY_INITIAL_VALUE(Value) Value #endif #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN #define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN #define YY_IGNORE_MAYBE_UNINITIALIZED_END #endif #ifndef YY_INITIAL_VALUE #define YY_INITIAL_VALUE(Value) /* Nothing. */ #endif #if !defined yyoverflow || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ #ifdef YYSTACK_USE_ALLOCA #if YYSTACK_USE_ALLOCA #ifdef __GNUC__ #define YYSTACK_ALLOC __builtin_alloca #elif defined __BUILTIN_VA_ARG_INCR #include /* INFRINGES ON USER NAME SPACE */ #elif defined _AIX #define YYSTACK_ALLOC __alloca #elif defined _MSC_VER #include /* INFRINGES ON USER NAME SPACE */ #define alloca _alloca #else #define YYSTACK_ALLOC alloca #if !defined _ALLOCA_H && !defined EXIT_SUCCESS #include /* INFRINGES ON USER NAME SPACE */ /* Use EXIT_SUCCESS as a witness for stdlib.h. */ #ifndef EXIT_SUCCESS #define EXIT_SUCCESS 0 #endif #endif #endif #endif #endif #ifdef YYSTACK_ALLOC /* Pacify GCC's 'empty if-body' warning. */ #define YYSTACK_FREE(Ptr) \ do { /* empty */ \ ; \ } while (0) #ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely invoke alloca (N) if N exceeds 4096. Use a slightly smaller number to allow for a few compiler-allocated temporary stack slots. */ #define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ #endif #else #define YYSTACK_ALLOC YYMALLOC #define YYSTACK_FREE YYFREE #ifndef YYSTACK_ALLOC_MAXIMUM #define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM #endif #if (defined __cplusplus && !defined EXIT_SUCCESS && \ !((defined YYMALLOC || defined malloc) && \ (defined YYFREE || defined free))) #include /* INFRINGES ON USER NAME SPACE */ #ifndef EXIT_SUCCESS #define EXIT_SUCCESS 0 #endif #endif #ifndef YYMALLOC #define YYMALLOC malloc #if !defined malloc && !defined EXIT_SUCCESS void *malloc(YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ #endif #endif #ifndef YYFREE #define YYFREE free #if !defined free && !defined EXIT_SUCCESS void free(void *); /* INFRINGES ON USER NAME SPACE */ #endif #endif #endif #endif /* ! defined yyoverflow || YYERROR_VERBOSE */ #if (!defined yyoverflow && \ (!defined __cplusplus || \ (defined FF_LTYPE_IS_TRIVIAL && FF_LTYPE_IS_TRIVIAL && \ defined FF_STYPE_IS_TRIVIAL && FF_STYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc { yytype_int16 yyss_alloc; YYSTYPE yyvs_alloc; YYLTYPE yyls_alloc; }; /* The size of the maximum gap between one aligned stack and the next. */ #define YYSTACK_GAP_MAXIMUM (sizeof(union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ #define YYSTACK_BYTES(N) \ ((N) * (sizeof(yytype_int16) + sizeof(YYSTYPE) + sizeof(YYLTYPE)) + \ 2 * YYSTACK_GAP_MAXIMUM) #define YYCOPY_NEEDED 1 /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ #define YYSTACK_RELOCATE(Stack_alloc, Stack) \ do { \ YYSIZE_T yynewbytes; \ YYCOPY(&yyptr->Stack_alloc, Stack, yysize); \ Stack = &yyptr->Stack_alloc; \ yynewbytes = yystacksize * sizeof(*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof(*yyptr); \ } while (0) #endif #if defined YYCOPY_NEEDED && YYCOPY_NEEDED /* Copy COUNT objects from SRC to DST. The source and destination do not overlap. */ #ifndef YYCOPY #if defined __GNUC__ && 1 < __GNUC__ #define YYCOPY(Dst, Src, Count) \ __builtin_memcpy(Dst, Src, (Count) * sizeof(*(Src))) #else #define YYCOPY(Dst, Src, Count) \ do { \ YYSIZE_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) (Dst)[yyi] = (Src)[yyi]; \ } while (0) #endif #endif #endif /* !YYCOPY_NEEDED */ /* YYFINAL -- State number of the termination state. */ #define YYFINAL 51 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 844 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 181 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 134 /* YYNRULES -- Number of rules. */ #define YYNRULES 321 /* YYNSTATES -- Number of states. */ #define YYNSTATES 581 #define YYUNDEFTOK 2 #define YYMAXUTOK 435 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM as returned by yylex, with out-of-bounds checking. */ #define YYTRANSLATE(YYX) \ ((unsigned)(YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM as returned by yylex. */ static const yytype_uint8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180}; #if FF_DEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { 0, 362, 362, 372, 379, 388, 394, 400, 406, 412, 418, 424, 433, 439, 445, 454, 460, 466, 475, 485, 491, 500, 506, 515, 527, 533, 544, 558, 563, 568, 576, 582, 590, 599, 605, 613, 622, 628, 638, 660, 669, 681, 687, 695, 703, 712, 720, 725, 730, 738, 744, 752, 758, 766, 772, 778, 786, 792, 800, 805, 810, 815, 823, 838, 846, 853, 861, 867, 875, 881, 889, 898, 907, 915, 923, 934, 940, 948, 954, 963, 969, 979, 986, 994, 999, 1004, 1013, 1018, 1023, 1028, 1033, 1041, 1048, 1057, 1063, 1071, 1077, 1084, 1094, 1100, 1108, 1113, 1118, 1126, 1132, 1142, 1153, 1158, 1163, 1171, 1177, 1183, 1191, 1197, 1207, 1217, 1227, 1232, 1237, 1245, 1266, 1307, 1345, 1386, 1427, 1468, 1512, 1534, 1556, 1578, 1590, 1597, 1603, 1613, 1619, 1629, 1638, 1644, 1652, 1660, 1667, 1675, 1681, 1691, 1701, 1713, 1719, 1728, 1746, 1778, 1788, 1794, 1804, 1824, 1830, 1838, 1844, 1854, 1863, 1868, 1873, 1878, 1884, 1893, 1936, 1942, 1950, 1955, 1960, 1965, 1971, 1980, 1985, 1990, 1995, 2000, 2008, 2014, 2020, 2028, 2033, 2038, 2046, 2055, 2060, 2065, 2070, 2075, 2080, 2085, 2090, 2098, 2103, 2108, 2113, 2121, 2127, 2135, 2141, 2151, 2158, 2168, 2174, 2180, 2186, 2192, 2198, 2207, 2213, 2219, 2225, 2231, 2237, 2243, 2249, 2258, 2268, 2274, 2283, 2289, 2295, 2301, 2307, 2313, 2318, 2326, 2332, 2340, 2347, 2357, 2364, 2374, 2382, 2390, 2401, 2408, 2414, 2422, 2432, 2440, 2451, 2461, 2467, 2477, 2487, 2494, 2501, 2508, 2515, 2522, 2532, 2542, 2547, 2552, 2557, 2562, 2567, 2575, 2585, 2591, 2597, 2606, 2615, 2620, 2628, 2634, 2643, 2651, 2659, 2664, 2672, 2677, 2685, 2690, 2698, 2707, 2725, 2743, 2748, 2756, 2765, 2770, 2775, 2780, 2785, 2793, 2798, 2806, 2815, 2821, 2830, 2836, 2845, 2855, 2864, 2870, 2876, 2881, 2886, 2892, 2898, 2907, 2912, 2920, 2925, 2930, 2935, 2940, 2945, 2950, 2955, 2960, 2965, 2970, 2978, 2984, 2992, 2998, 3008, 3015, 3022, 3029}; #endif #if FF_DEBUG || YYERROR_VERBOSE || 1 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = {"$end", "error", "$undefined", "OP_NOTEQUAL", "SIMPLE", "TEXT", "OVER", "BETWEEN", "OP_SEMI", "BIGINT", "LIMIT", "WITH", "ORDER", "LAST", "UNBOUNDED", "PRECEDING", "EXCEPT", "NUMERIC", "OP_LESSTHAN", "PROCEDURE", "ACTION", "FIRST", "OP_GREATEREQ", "CHECK", "FULL", "NATURAL", "DOUBLE", "NATIONAL", "OP_ADD", "CURRENT", "TRIGGER", "OP_SUB", "FALSE", "UNIQUE", "WHERE", "MINUTE", "BEFORE", "ON", "PARTIAL", "OF", "AFTER", "PRIMARY", "MONTH", "DEFERRED", "OP_DOUBLE_DOLLAR", "VARYING", "OP_GREATERTHAN", "OR", "PLPGSQL", "DELETE", "INDEX", "RETURN", "OP_MUL", "FOREIGN", "RESTRICT", "FOLLOWING", "TIES", "DEC", "SELECT", "BEGIN", "LANGUAGE", "DISTINCT", "TRUE", "BY", "OP_MOD", "VALUES", "IS", "ROW", "FUNCTION", "END", "RECURSIVE", "FOR", "UNION", "NULLS", "UPDATE", "ELSE", "RANGE", "OFFSET", "INDEXED", "INSTEAD", "NCHAR", "AND", "REINDEX", "INITIALLY", "YEAR", "PRECISION", "FILTER", "NOT", "VIEW", "DEFFERRABLE", "REAL", "THEN", "OPTION", "DEFAULT", "GLOBAL", "CROSS", "CHAR", "REFERENCES", "OP_XOR", "GROUP", "CASE", "SET", "HOUR", "NO", "COLUMN", "LOCAL", "DROP", "REPLACE", "ASC", "OP_COMMA", "TABLE", "ARRAY", "IF", "EXTRACT", "LEFT", "OUTER", "DECIMAL", "PARTITION", "CASCADE", "ADD", "OTHERS", "OP_LESSEQ", "MATCH", "ALL", "ROWS", "JOIN", "LIKE", "INTEGER", "OP_RP", "INT", "BOOLEAN", "KEY", "EACH", "USING", "RENAME", "DO", "FLOAT", "OP_LP", "CHARACTER", "UMINUS", "CAST", "GROUPS", "NULL", "SMALLINT", "INSERT", "TEMPORARY", "CONSTRAINT", "CREATE", "OP_LBRACKET", "WHEN", "IMMEDIATE", "TO", "EXCLUDE", "DAY", "CONFLICT", "OP_RBRACKET", "EXECUTE", "EXISTS", "INTO", "OP_DIVIDE", "CASCADED", "ISNULL", "AS", "INNER", "INTERSECT", "IN", "OP_EQUAL", "VARCHAR", "ALTER", "DESC", "FROM", "TEMP", "UNLOGGED", "SECOND", "WINDOW", "NOTHING", "HAVING", "INTLITERAL", "STRINGLITERAL", "FLOATLITERAL", "IDENTIFIER", "$accept", "program", "stmtlist", "stmt", "create_stmt", "drop_stmt", "alter_stmt", "select_stmt", "select_with_parens", "select_no_parens", "select_clause_list", "select_clause", "combine_clause", "opt_from_clause", "select_target", "opt_window_clause", "window_clause", "window_def_list", "window_def", "window_name", "window", "opt_partition", "opt_frame_clause", "range_or_rows", "frame_bound_start", "frame_bound_end", "frame_bound", "opt_frame_exclude", "frame_exclude", "opt_exist_window_name", "opt_group_clause", "opt_having_clause", "opt_where_clause", "where_clause", "from_clause", "table_ref", "opt_on_or_using", "on_or_using", "column_name_list", "opt_table_prefix", "join_op", "opt_join_type", "expr_list", "opt_limit_clause", "limit_clause", "opt_order_clause", "opt_order_nulls", "order_item_list", "order_item", "opt_order_behavior", "opt_with_clause", "cte_table_list", "cte_table", "cte_table_name", "opt_all_or_distinct", "create_table_stmt", "create_index_stmt", "create_view_stmt", "drop_index_stmt", "drop_table_stmt", "drop_view_stmt", "insert_stmt", "insert_rest", "super_values_list", "values_list", "opt_on_conflict", "opt_conflict_expr", "indexed_column_list", "indexed_column", "update_stmt", "reindex_stmt", "alter_action", "column_def_list", "column_def", "opt_column_constraint_list", "column_constraint_list", "column_constraint", "constraint_type", "foreign_clause", "opt_foreign_key_actions", "foreign_key_actions", "key_actions", "opt_constraint_attribute_spec", "opt_initial_time", "constraint_name", "opt_temp", "opt_check_option", "opt_column_name_list_p", "set_clause_list", "set_clause", "expr", "operand", "cast_expr", "scalar_expr", "unary_expr", "binary_expr", "logic_expr", "in_expr", "case_expr", "between_expr", "exists_expr", "case_list", "case_clause", "comp_expr", "extract_expr", "datetime_field", "array_index", "literal", "string_literal", "bool_literal", "num_literal", "int_literal", "float_literal", "opt_column", "opt_if_not_exist", "opt_if_exist", "identifier", "table_name", "column_name", "opt_unique", "view_name", "binary_op", "opt_not", "name", "type_name", "character_type", "character_with_length", "character_without_length", "character_conflicta", "opt_varying", "numeric_type", "opt_table_constraint_list", "table_constraint_list", "table_constraint", YY_NULLPTR}; #endif #ifdef YYPRINT /* YYTOKNUM[NUM] -- (External) token number corresponding to the (internal) symbol number NUM (which must be that of a token). */ static const yytype_uint16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435}; #endif #define YYPACT_NINF -331 #define yypact_value_is_default(Yystate) (!!((Yystate) == (-331))) #define YYTABLE_NINF -287 #define yytable_value_is_error(Yytable_value) (!!((Yytable_value) == (-287))) /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ static const yytype_int16 yypact[] = { 40, -33, 47, 177, 2, 95, -79, 20, -331, 26, -331, -331, -331, -331, -331, -331, -36, -331, -331, -331, -331, -331, -331, -331, -331, -331, -119, -331, -331, -16, 31, -331, 39, -119, -119, 117, 117, 117, 109, 128, 202, -331, 166, 216, 230, -331, -331, -331, 237, 227, -119, -331, 89, -40, -119, 193, 312, -2, -331, -119, 218, -119, -331, -331, -331, 214, -119, -119, -119, -331, -331, 139, -331, -331, -331, -331, 305, -119, 273, 273, 200, -331, -331, -331, 640, 309, -119, 348, 392, -331, -331, -331, 202, -331, 2, 285, -331, 306, -331, -331, -331, -331, -331, 298, -119, 39, 334, -119, -119, 318, 88, -331, 655, -331, -331, -331, 655, 623, 287, 73, 289, -331, -331, -331, -331, 258, -331, 256, 366, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, 270, 68, 39, 640, 640, -331, -331, -331, 308, -331, -119, 346, -119, 39, 278, 286, 168, 405, -331, -119, -119, -119, 655, 22, 518, 640, 1, 320, 296, 12, 321, 322, 640, -331, 412, -331, 640, 640, 640, 655, 655, 655, 655, -331, -331, 655, -331, -331, -69, 17, 655, 655, 274, -331, -331, 655, 655, 282, 311, -119, 412, 349, 300, 427, 90, -331, 358, -31, 208, -331, -331, -119, 39, 307, 2, -331, -119, 2, -119, -331, 616, -331, 317, 344, 257, 329, -331, 640, -331, -331, -331, -331, -331, -331, -331, 302, -331, -331, -18, 63, 141, 640, 374, -331, 390, -331, -331, 572, 413, 683, 683, 683, 333, -331, 655, 655, 683, 572, 323, 572, 22, 176, 465, 352, -331, 68, 640, 327, -331, 345, 418, -331, 640, -331, -331, 415, 640, 640, 39, 324, 2, 474, 350, 381, -331, 354, -331, -331, -331, 410, 158, -331, 452, -331, 452, -331, -331, -331, -331, -331, 452, -331, -331, 249, -331, -331, -331, 361, -331, -119, 640, -331, 640, 271, 640, 616, -52, -331, -331, -331, 34, 19, 28, 438, 330, 655, -331, 471, 572, -331, 73, -331, 375, 341, -331, 28, 371, 640, -331, 400, -331, -331, 99, -331, 28, 28, 351, 2, 474, -11, -331, -119, 339, 382, -331, 402, -119, 640, -331, 452, 452, -331, -331, -331, -331, 378, -331, 385, 370, -119, -331, -331, 249, -331, -331, 274, -331, 28, 297, -331, 151, 391, -331, 403, -331, 397, 398, 54, 640, 401, -331, -331, 640, -119, -331, -331, 502, 655, 414, 416, -331, 640, 640, 393, 417, 345, -331, -331, 2, 474, -331, 437, 520, 524, -331, -331, 404, 419, 420, 422, -331, 350, -331, 429, 441, -31, -331, -331, 640, -331, -331, 39, -331, 431, -331, -331, -331, -331, -331, 19, 19, 28, -119, 379, -331, 451, 407, -331, 502, -331, -331, 28, 434, -19, -331, -331, 474, -331, -331, 473, 475, 640, 640, 426, 436, -331, 412, 640, -331, 160, -9, -331, -331, -331, 443, 640, -331, -119, 439, 412, 68, -331, -331, -331, -331, 164, 449, 640, -119, -331, -331, -331, 325, 319, 239, -331, -331, 28, -331, -119, -331, 412, -331, -331, 450, 453, 180, 180, -331, -331, -331, 491, 500, -331, 457, 469, -331, -331, -331, 490, -331, -51, 568, -331, -331, -331, 500, -26, -331, -331, 528, 312, -331, -331, -331, -331, -331, -331, -331, 640, -46, -331, -331, -331, -331, -331, 122, 277, 578, 529, 446, -331, 165, 514, -331, -331, 172, -331, -331, -331, 283, 532, -331, -331, 481, -331, 547, 446, -331, -331, -331, -331, -331}; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. Performed when YYTABLE does not specify something else to do. Zero means the default is an error. */ static const yytype_uint16 yydefact[] = { 111, 0, 0, 0, 111, 190, 0, 0, 2, 0, 5, 6, 10, 7, 20, 19, 0, 12, 13, 14, 15, 16, 17, 9, 8, 11, 0, 274, 109, 112, 0, 275, 196, 0, 0, 273, 273, 273, 0, 0, 0, 277, 0, 0, 0, 183, 184, 189, 0, 0, 0, 1, 111, 118, 0, 0, 99, 24, 110, 0, 0, 0, 115, 146, 145, 0, 0, 0, 0, 22, 21, 190, 187, 188, 185, 186, 0, 0, 271, 271, 0, 3, 117, 116, 286, 0, 0, 0, 94, 29, 27, 28, 0, 113, 111, 0, 276, 79, 272, 126, 279, 128, 127, 0, 0, 196, 0, 0, 0, 269, 269, 18, 0, 263, 224, 262, 285, 286, 0, 111, 0, 223, 266, 261, 267, 31, 32, 92, 201, 205, 209, 210, 211, 206, 204, 212, 202, 203, 225, 213, 208, 217, 258, 259, 260, 264, 265, 216, 0, 0, 196, 286, 286, 23, 93, 25, 0, 195, 0, 0, 0, 196, 0, 0, 0, 0, 268, 0, 0, 0, 0, 218, 219, 286, 0, 0, 241, 0, 0, 0, 286, 82, 69, 30, 286, 286, 286, 0, 0, 0, 0, 280, 281, 0, 284, 283, 0, 285, 0, 0, 0, 282, 220, 0, 0, 0, 0, 0, 69, 197, 0, 138, 111, 98, 103, 108, 95, 114, 80, 0, 196, 0, 111, 270, 0, 111, 0, 149, 0, 147, 0, 0, 0, 0, 235, 286, 242, 252, 255, 256, 253, 254, 251, 0, 214, 207, 0, 71, 0, 286, 65, 68, 230, 229, 91, 245, 0, 247, 249, 246, 0, 221, 0, 0, 248, 227, 0, 244, 226, 0, 111, 0, 144, 0, 286, 0, 129, 0, 0, 130, 286, 106, 107, 102, 286, 286, 196, 0, 111, 194, 315, 150, 119, 0, 297, 306, 312, 0, 0, 311, 302, 307, 302, 310, 304, 303, 313, 308, 302, 305, 296, 154, 289, 290, 291, 293, 288, 0, 286, 234, 286, 0, 286, 0, 90, 83, 84, 81, 82, 76, 70, 0, 34, 0, 222, 0, 228, 257, 111, 233, 0, 0, 198, 199, 140, 286, 132, 133, 131, 104, 0, 105, 96, 97, 0, 111, 194, 0, 122, 0, 0, 0, 314, 316, 0, 286, 309, 302, 302, 301, 300, 295, 294, 0, 160, 0, 0, 0, 152, 153, 155, 157, 162, 0, 148, 243, 0, 237, 0, 0, 89, 86, 88, 0, 0, 0, 286, 0, 72, 75, 286, 0, 26, 33, 238, 0, 0, 0, 240, 286, 286, 0, 0, 0, 101, 100, 111, 194, 123, 0, 0, 0, 287, 182, 0, 0, 0, 0, 120, 0, 151, 0, 141, 108, 299, 298, 286, 158, 159, 196, 156, 0, 236, 250, 215, 87, 85, 76, 76, 77, 0, 67, 35, 36, 0, 39, 239, 231, 232, 200, 0, 0, 135, 134, 194, 124, 191, 0, 0, 286, 286, 0, 0, 317, 69, 286, 143, 0, 165, 292, 73, 74, 0, 286, 64, 0, 0, 0, 0, 136, 125, 193, 192, 0, 0, 286, 0, 121, 142, 161, 0, 0, 178, 164, 78, 66, 37, 63, 139, 0, 320, 319, 0, 0, 0, 0, 168, 166, 167, 0, 181, 163, 0, 42, 62, 137, 318, 0, 174, 0, 0, 173, 170, 169, 181, 0, 176, 38, 0, 99, 321, 172, 171, 175, 177, 179, 180, 286, 45, 41, 46, 47, 48, 40, 286, 286, 0, 0, 57, 49, 0, 0, 50, 55, 0, 43, 53, 54, 286, 0, 61, 60, 0, 56, 0, 57, 51, 59, 58, 52, 44}; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { -331, -331, 552, -331, -331, -331, -331, -85, 601, 4, 515, -331, -331, -331, -331, -331, -331, 121, -331, -331, -331, -331, -331, -331, 53, -331, 41, 35, -331, -331, -331, -331, -198, -312, -331, 284, -41, -331, -155, -331, -331, -331, -114, -331, -331, 72, -331, 335, -331, 181, 217, 301, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, 203, -331, -331, -331, -232, -331, -331, -331, -331, 253, 455, -331, 233, -331, -331, 93, -331, -331, 111, -331, 97, -331, 556, -330, -90, -269, -331, -116, -72, -331, -331, -331, -331, -331, -331, -331, -331, -331, 229, -331, -331, -331, -331, -331, -331, -331, -331, -331, -189, -331, 519, 555, 372, -1, -27, -59, -331, -58, -331, 507, -331, 326, -331, -331, -331, -331, 14, -331, -331, 211, -331}; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { -1, 7, 8, 9, 10, 11, 12, 13, 14, 15, 56, 57, 92, 182, 125, 402, 403, 452, 453, 454, 522, 539, 553, 554, 558, 575, 559, 565, 573, 523, 332, 484, 250, 251, 183, 247, 398, 399, 95, 248, 327, 393, 126, 153, 154, 88, 351, 213, 214, 283, 40, 28, 29, 30, 84, 17, 18, 19, 20, 21, 22, 23, 211, 346, 347, 276, 411, 431, 432, 24, 25, 111, 290, 291, 378, 379, 380, 381, 382, 502, 503, 532, 521, 536, 360, 48, 358, 62, 208, 209, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 175, 176, 138, 139, 243, 140, 141, 142, 143, 144, 145, 146, 167, 107, 66, 96, 32, 147, 49, 101, 204, 148, 423, 311, 312, 313, 314, 315, 370, 316, 361, 362, 363}; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule whose number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { 31, 174, 97, 218, 342, 179, 63, 64, 39, 156, 272, 266, 419, 1, 89, 162, 184, 545, 260, 105, 51, 82, 53, 80, 262, 31, 418, 85, 500, 184, 550, 50, 31, 31, 52, 215, 216, 26, 54, 99, 171, 102, 541, 390, 172, 1, 161, 237, 184, 31, 185, 1, 271, 31, 238, 488, 396, 232, 31, 150, 212, 27, 391, 185, 246, 31, 100, 31, 252, 253, 90, 221, 254, 261, 194, 184, 100, 281, 551, 324, 164, 165, 185, 83, 1, 31, 195, 465, 324, -4, 210, 542, -111, 59, 420, 552, 239, 33, 172, 97, 1, 1, 220, 100, 112, 113, 31, 31, 55, 185, 230, 392, 414, 501, 240, 255, 256, 257, 258, 321, 415, 259, 2, 178, 546, 114, 264, 265, 41, 555, 287, 267, 268, 330, 490, 115, 556, 289, 282, 4, 292, 229, 42, 263, 323, -278, 3, 27, 97, 421, 173, 557, 397, 112, 113, 277, 489, 34, 343, 100, 116, 286, 91, 325, 215, 241, 228, 31, 352, 353, 200, 2, 325, 117, 114, 508, 61, 4, 460, 326, 566, 201, 448, 278, 115, 242, 118, 5, 326, 43, 335, 336, 166, 60, 441, 3, 354, 525, 184, 293, 44, 569, 385, 356, 386, 207, 388, 184, 6, 116, 119, 184, 184, 120, 210, 121, 279, 16, 100, 509, 567, 329, 117, 228, 407, 31, 4, 35, 570, 65, -286, 412, 185, 43, 528, 118, 5, 69, 494, 168, 45, 185, 339, 498, 44, 185, 185, 31, 27, 433, 122, 123, 124, 27, 367, 184, 70, 6, 384, 119, 53, 404, 120, 512, 121, 36, 46, 47, 31, 16, 417, 571, 373, 71, 340, 572, 497, 79, 328, 443, 449, 529, 374, 530, 45, 284, 451, 37, 499, 185, 375, 556, 510, 459, 433, 482, 368, 574, 531, 122, 123, 124, 27, 184, 184, 224, 557, 76, 112, 113, 46, 47, 557, 338, 112, 113, 371, 285, 184, 109, 477, 27, 372, 516, 87, 77, 519, 58, 520, 114, 225, 464, 394, 456, 110, 114, 376, 185, 185, 115, 387, 513, 406, 517, 184, 115, 377, 78, 318, 478, 439, 86, 185, 493, 433, 94, 27, 518, 422, 433, 93, 72, 424, 228, 116, 186, 442, 505, 159, 187, 116, 98, 425, 188, 514, 74, 31, 117, 185, 433, 426, 434, 435, 117, 189, 106, 160, 73, 190, 234, 118, 97, 427, 104, 191, 235, 118, 192, 319, 515, 455, 75, 152, 233, 320, 236, 480, 481, 67, 68, 149, 151, 193, 157, 119, 158, 187, 120, 194, 121, 119, 163, 166, 120, 177, 121, 180, 206, 181, 210, 195, 189, 196, 549, 219, 190, 217, 97, 560, 560, 222, 191, 226, 223, 192, 173, 249, 269, 270, 244, 245, 122, 560, 197, 122, 123, 124, 27, 273, 193, 122, 123, 124, 27, 275, 194, 274, 280, 317, 288, 263, 185, 322, 331, 187, 334, 1, 195, 337, 196, 341, 344, 345, 348, 455, 357, 355, 198, 350, 189, 364, 365, 199, 190, 333, 366, 359, 369, 383, 191, 231, 400, 192, 408, 401, 187, 524, 409, 410, 413, 428, 429, 438, 416, 200, 436, 437, 193, 445, 444, 189, 187, 446, 194, 190, 201, 447, 202, 461, 466, 191, -286, 203, 192, 198, 195, 189, 196, 450, 199, 190, 469, 457, 467, 458, 462, 191, 468, 193, 192, 475, 471, 405, 472, 194, 483, 470, 474, 231, 479, 485, 200, 487, 495, 193, 491, 195, 492, 196, 486, 194, 504, 201, 496, 202, -287, 507, 511, 526, 203, 534, 527, 195, 535, 196, 537, 538, 377, 543, 231, 189, 547, 198, 562, 190, 568, 563, 199, 564, 577, 191, 578, 579, 192, 81, 38, 506, 155, 561, 576, 580, 548, 395, 440, 476, 349, 463, 430, 193, 200, 540, 294, 227, 198, 194, 295, 533, 103, 199, 169, 201, 544, 202, 296, 108, 205, 195, 203, 196, 198, 473, 0, 297, 298, 199, 0, 0, 0, 0, 389, 200, 0, 0, 0, 112, 113, 0, 0, 0, 0, 0, 201, 0, 202, 0, 0, 200, 0, 203, 0, 0, 112, 113, 299, 0, 114, 0, 201, 0, 202, 0, 0, 0, 0, 203, 115, 112, 113, 0, 0, 0, 0, 114, 198, 0, 0, 300, 0, -287, 0, 0, -287, 115, 0, 0, -287, 301, 114, 0, 0, 116, 191, 302, 0, 192, 0, 0, 115, 0, 0, 200, 0, 0, 117, 0, 0, 0, 116, 0, -287, 0, 201, 303, 202, 0, 194, 118, 0, -287, 0, 117, 0, 170, 304, 0, 305, 306, 195, 0, 196, 0, 0, 307, 118, 308, 117, 0, 0, 0, 309, 119, 0, 0, 120, 0, 121, 0, 0, 118, 0, 0, 0, 173, 0, 0, 0, 0, 119, 0, 0, 120, 0, 121, 310, 0, 0, 0, 0, 0, 0, 0, 0, 119, 0, 0, 0, 0, 121, 0, 0, 122, 123, 124, 27, -287, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 123, 124, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, 122, 123, 124, 27, 0, 0, 0, 0, 0, 0, 201, 0, 202}; static const yytype_int16 yycheck[] = { 1, 117, 61, 158, 273, 119, 33, 34, 4, 94, 208, 200, 23, 11, 16, 105, 47, 43, 87, 77, 0, 61, 58, 50, 7, 26, 356, 54, 37, 47, 76, 110, 33, 34, 8, 151, 152, 70, 74, 66, 112, 68, 93, 95, 116, 11, 104, 35, 47, 50, 81, 11, 207, 54, 42, 74, 37, 173, 59, 86, 150, 180, 114, 81, 180, 66, 67, 68, 184, 185, 72, 161, 186, 142, 52, 47, 77, 108, 124, 25, 107, 108, 81, 123, 11, 86, 64, 417, 25, 0, 149, 142, 58, 109, 105, 141, 84, 50, 170, 158, 11, 11, 160, 104, 31, 32, 107, 108, 144, 81, 169, 163, 13, 122, 102, 187, 188, 189, 190, 235, 21, 193, 82, 119, 150, 52, 198, 199, 33, 7, 220, 203, 204, 249, 464, 62, 14, 222, 169, 137, 225, 168, 47, 126, 162, 50, 106, 180, 207, 160, 149, 29, 133, 31, 32, 65, 175, 110, 274, 160, 87, 219, 164, 109, 280, 153, 167, 168, 284, 285, 148, 82, 109, 100, 52, 487, 137, 137, 410, 125, 15, 159, 128, 93, 62, 173, 113, 147, 125, 94, 262, 263, 104, 162, 383, 106, 286, 509, 47, 226, 105, 29, 318, 288, 320, 137, 322, 47, 168, 87, 137, 47, 47, 140, 273, 142, 212, 0, 219, 488, 55, 248, 100, 224, 338, 226, 137, 50, 56, 112, 157, 345, 81, 94, 54, 113, 147, 128, 470, 151, 145, 81, 269, 475, 105, 81, 81, 248, 180, 365, 177, 178, 179, 180, 96, 47, 128, 168, 317, 137, 58, 333, 140, 495, 142, 88, 171, 172, 269, 52, 355, 99, 23, 107, 270, 103, 474, 50, 137, 128, 396, 101, 33, 103, 145, 77, 400, 110, 128, 81, 41, 14, 128, 409, 410, 450, 138, 14, 118, 177, 178, 179, 180, 47, 47, 137, 29, 70, 31, 32, 171, 172, 29, 137, 31, 32, 302, 109, 47, 119, 436, 180, 308, 4, 12, 88, 87, 26, 89, 52, 162, 416, 328, 405, 134, 52, 87, 81, 81, 62, 69, 496, 338, 24, 47, 62, 97, 110, 91, 439, 377, 158, 81, 469, 470, 137, 180, 38, 359, 475, 59, 145, 23, 364, 87, 109, 69, 483, 70, 3, 87, 157, 33, 7, 49, 145, 377, 100, 81, 495, 41, 367, 368, 100, 18, 112, 88, 171, 22, 69, 113, 450, 53, 88, 28, 75, 113, 31, 69, 74, 401, 171, 10, 174, 75, 176, 447, 448, 36, 37, 101, 63, 46, 128, 137, 109, 3, 140, 52, 142, 137, 87, 104, 140, 137, 142, 137, 157, 170, 488, 64, 18, 66, 547, 88, 22, 128, 496, 554, 555, 162, 28, 37, 157, 31, 149, 34, 165, 137, 128, 128, 177, 568, 87, 177, 178, 179, 180, 109, 46, 177, 178, 179, 180, 37, 52, 166, 109, 151, 162, 126, 81, 170, 99, 3, 142, 11, 64, 155, 66, 128, 154, 137, 65, 485, 11, 162, 121, 73, 18, 109, 137, 126, 22, 81, 85, 146, 45, 137, 28, 87, 63, 31, 128, 174, 3, 507, 166, 137, 109, 128, 109, 142, 162, 148, 137, 131, 46, 115, 128, 18, 3, 125, 52, 22, 159, 128, 161, 135, 92, 28, 165, 166, 31, 121, 64, 18, 66, 137, 126, 22, 137, 128, 23, 128, 128, 28, 23, 46, 31, 109, 131, 81, 131, 52, 176, 137, 128, 87, 128, 109, 148, 128, 137, 46, 92, 64, 92, 66, 162, 52, 128, 159, 137, 161, 3, 137, 128, 128, 166, 89, 128, 64, 83, 66, 128, 117, 97, 20, 87, 18, 63, 121, 15, 22, 81, 67, 126, 152, 67, 28, 120, 55, 31, 52, 4, 485, 92, 555, 568, 575, 539, 328, 380, 433, 280, 413, 364, 46, 148, 527, 5, 167, 121, 52, 9, 515, 71, 126, 110, 159, 534, 161, 17, 79, 128, 64, 166, 66, 121, 429, -1, 26, 27, 126, -1, -1, -1, -1, 323, 148, -1, -1, -1, 31, 32, -1, -1, -1, -1, -1, 159, -1, 161, -1, -1, 148, -1, 166, -1, -1, 31, 32, 57, -1, 52, -1, 159, -1, 161, -1, -1, -1, -1, 166, 62, 31, 32, -1, -1, -1, -1, 52, 121, -1, -1, 80, -1, 126, -1, -1, 18, 62, -1, -1, 22, 90, 52, -1, -1, 87, 28, 96, -1, 31, -1, -1, 62, -1, -1, 148, -1, -1, 100, -1, -1, -1, 87, -1, 46, -1, 159, 116, 161, -1, 52, 113, -1, 166, -1, 100, -1, 87, 127, -1, 129, 130, 64, -1, 66, -1, -1, 136, 113, 138, 100, -1, -1, -1, 143, 137, -1, -1, 140, -1, 142, -1, -1, 113, -1, -1, -1, 149, -1, -1, -1, -1, 137, -1, -1, 140, -1, 142, 167, -1, -1, -1, -1, -1, -1, -1, -1, 137, -1, -1, -1, -1, 142, -1, -1, 177, 178, 179, 180, 121, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 177, 178, 179, 180, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 148, 177, 178, 179, 180, -1, -1, -1, -1, -1, -1, 159, -1, 161}; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint16 yystos[] = { 0, 11, 82, 106, 137, 147, 168, 182, 183, 184, 185, 186, 187, 188, 189, 190, 231, 236, 237, 238, 239, 240, 241, 242, 250, 251, 70, 180, 232, 233, 234, 297, 298, 50, 110, 50, 88, 110, 189, 190, 231, 33, 47, 94, 105, 145, 171, 172, 266, 300, 110, 0, 8, 58, 74, 144, 191, 192, 232, 109, 162, 137, 268, 298, 298, 112, 296, 296, 296, 128, 128, 107, 145, 171, 145, 171, 70, 88, 110, 50, 298, 183, 61, 123, 235, 298, 158, 12, 226, 16, 72, 164, 193, 232, 137, 219, 297, 299, 157, 298, 297, 301, 298, 266, 88, 301, 112, 295, 295, 119, 134, 252, 31, 32, 52, 62, 87, 100, 113, 137, 140, 142, 177, 178, 179, 195, 223, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 284, 285, 287, 288, 289, 290, 291, 292, 293, 299, 303, 101, 298, 63, 10, 224, 225, 191, 188, 128, 109, 70, 88, 301, 268, 87, 298, 298, 104, 294, 151, 294, 87, 272, 272, 149, 271, 282, 283, 137, 190, 223, 137, 170, 194, 215, 47, 81, 109, 3, 7, 18, 22, 28, 31, 46, 52, 64, 66, 87, 121, 126, 148, 159, 161, 166, 302, 303, 157, 137, 269, 270, 299, 243, 268, 228, 229, 271, 271, 128, 219, 88, 301, 268, 162, 157, 137, 162, 37, 254, 297, 298, 299, 87, 271, 282, 69, 75, 282, 35, 42, 84, 102, 153, 173, 286, 128, 128, 271, 216, 220, 34, 213, 214, 271, 271, 223, 272, 272, 272, 272, 272, 87, 142, 7, 126, 272, 272, 292, 272, 272, 165, 137, 219, 213, 109, 166, 37, 246, 65, 93, 190, 109, 108, 169, 230, 77, 109, 301, 268, 162, 188, 253, 254, 188, 298, 5, 9, 17, 26, 27, 57, 80, 90, 96, 116, 127, 129, 130, 136, 138, 143, 167, 305, 306, 307, 308, 309, 311, 151, 91, 69, 75, 271, 170, 162, 25, 109, 125, 221, 137, 298, 271, 99, 211, 81, 142, 272, 272, 155, 137, 298, 190, 128, 269, 271, 154, 137, 244, 245, 65, 228, 73, 227, 271, 271, 268, 162, 188, 11, 267, 146, 265, 312, 313, 314, 109, 137, 85, 96, 138, 45, 310, 310, 310, 23, 33, 41, 87, 97, 255, 256, 257, 258, 259, 137, 299, 271, 271, 69, 271, 305, 95, 114, 163, 222, 190, 216, 37, 133, 217, 218, 63, 174, 196, 197, 272, 81, 190, 223, 128, 166, 137, 247, 223, 109, 13, 21, 162, 188, 267, 23, 105, 160, 297, 304, 23, 33, 41, 53, 128, 109, 253, 248, 249, 271, 310, 310, 137, 131, 142, 298, 256, 292, 69, 128, 128, 115, 125, 128, 128, 271, 137, 223, 198, 199, 200, 297, 272, 128, 128, 271, 248, 135, 128, 244, 188, 267, 92, 23, 23, 137, 137, 131, 131, 313, 128, 109, 230, 271, 268, 128, 217, 217, 219, 176, 212, 109, 162, 128, 74, 175, 267, 92, 92, 271, 248, 137, 137, 213, 248, 128, 37, 122, 260, 261, 128, 271, 198, 137, 214, 269, 128, 128, 248, 219, 49, 74, 4, 24, 38, 87, 89, 263, 201, 210, 297, 214, 128, 128, 54, 101, 103, 118, 262, 262, 89, 83, 264, 128, 117, 202, 259, 93, 142, 20, 264, 43, 150, 63, 226, 223, 76, 124, 141, 203, 204, 7, 14, 29, 205, 207, 271, 205, 15, 67, 152, 208, 15, 55, 81, 29, 56, 99, 103, 209, 14, 206, 207, 67, 120, 55, 208}; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint16 yyr1[] = { 0, 181, 182, 183, 183, 184, 184, 184, 184, 184, 184, 184, 185, 185, 185, 186, 186, 186, 187, 188, 188, 189, 189, 190, 191, 191, 192, 193, 193, 193, 194, 194, 195, 196, 196, 197, 198, 198, 199, 200, 201, 202, 202, 203, 203, 203, 204, 204, 204, 205, 205, 206, 206, 207, 207, 207, 208, 208, 209, 209, 209, 209, 210, 210, 211, 211, 212, 212, 213, 213, 214, 215, 216, 216, 216, 217, 217, 218, 218, 219, 219, 220, 220, 221, 221, 221, 222, 222, 222, 222, 222, 223, 223, 224, 224, 225, 225, 225, 226, 226, 227, 227, 227, 228, 228, 229, 230, 230, 230, 231, 231, 231, 232, 232, 233, 234, 235, 235, 235, 236, 236, 237, 238, 238, 238, 238, 239, 240, 241, 242, 243, 243, 243, 244, 244, 245, 246, 246, 246, 247, 247, 248, 248, 249, 250, 251, 251, 252, 252, 252, 253, 253, 254, 255, 255, 256, 256, 257, 258, 258, 258, 258, 258, 259, 260, 260, 261, 261, 261, 261, 261, 262, 262, 262, 262, 262, 263, 263, 263, 264, 264, 264, 265, 266, 266, 266, 266, 266, 266, 266, 266, 267, 267, 267, 267, 268, 268, 269, 269, 270, 270, 271, 271, 271, 271, 271, 271, 272, 272, 272, 272, 272, 272, 272, 272, 273, 274, 274, 275, 275, 275, 275, 275, 275, 275, 276, 276, 276, 276, 277, 277, 278, 278, 278, 279, 279, 279, 279, 280, 280, 281, 282, 282, 283, 284, 284, 284, 284, 284, 284, 285, 286, 286, 286, 286, 286, 286, 287, 288, 288, 288, 289, 290, 290, 291, 291, 292, 293, 294, 294, 295, 295, 296, 296, 297, 298, 299, 300, 300, 301, 302, 302, 302, 302, 302, 303, 303, 304, 305, 305, 306, 306, 307, 308, 309, 309, 309, 309, 309, 309, 309, 310, 310, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 312, 312, 313, 313, 314, 314, 314, 314}; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { 0, 2, 1, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 3, 3, 4, 1, 3, 7, 1, 1, 1, 1, 0, 1, 1, 0, 2, 1, 3, 5, 1, 4, 3, 0, 3, 6, 0, 1, 1, 1, 1, 2, 1, 2, 2, 2, 2, 2, 0, 2, 2, 1, 1, 1, 0, 4, 0, 2, 0, 1, 0, 2, 2, 3, 5, 5, 1, 0, 2, 4, 1, 3, 2, 0, 1, 1, 3, 1, 2, 1, 1, 0, 3, 1, 1, 0, 2, 4, 4, 3, 0, 2, 2, 0, 1, 3, 3, 1, 1, 0, 2, 3, 0, 1, 3, 5, 2, 1, 1, 0, 7, 9, 11, 8, 9, 10, 11, 4, 4, 4, 6, 2, 3, 3, 1, 3, 3, 5, 7, 0, 4, 0, 1, 3, 2, 6, 3, 3, 3, 5, 3, 1, 3, 3, 1, 0, 1, 2, 1, 2, 2, 1, 4, 1, 5, 1, 0, 2, 2, 2, 3, 3, 2, 2, 1, 1, 2, 2, 3, 0, 2, 2, 0, 2, 1, 1, 2, 2, 2, 2, 1, 0, 3, 4, 4, 0, 3, 0, 1, 3, 3, 5, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 3, 6, 1, 1, 2, 2, 2, 3, 4, 1, 1, 1, 3, 3, 4, 3, 3, 6, 6, 4, 4, 3, 6, 5, 5, 6, 5, 1, 2, 4, 3, 3, 3, 3, 3, 3, 6, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 3, 0, 2, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 4, 1, 2, 2, 1, 1, 3, 3, 2, 1, 0, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 0, 1, 3, 6, 5, 5, 7}; #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) #define YYEMPTY (-2) #define YYEOF 0 #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrorlab #define YYRECOVERING() (!!yyerrstatus) #define YYBACKUP(Token, Value) \ do \ if (yychar == YYEMPTY) { \ yychar = (Token); \ yylval = (Value); \ YYPOPSTACK(yylen); \ yystate = *yyssp; \ goto yybackup; \ } else { \ yyerror(&yylloc, result, scanner, YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (0) /* Error token number */ #define YYTERROR 1 #define YYERRCODE 256 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. If N is 0, then set CURRENT to the empty location which ends the previous symbol: RHS[0] (always defined). */ #ifndef YYLLOC_DEFAULT #define YYLLOC_DEFAULT(Current, Rhs, N) \ do \ if (N) { \ (Current).first_line = YYRHSLOC(Rhs, 1).first_line; \ (Current).first_column = YYRHSLOC(Rhs, 1).first_column; \ (Current).last_line = YYRHSLOC(Rhs, N).last_line; \ (Current).last_column = YYRHSLOC(Rhs, N).last_column; \ } else { \ (Current).first_line = (Current).last_line = YYRHSLOC(Rhs, 0).last_line; \ (Current).first_column = (Current).last_column = \ YYRHSLOC(Rhs, 0).last_column; \ } \ while (0) #endif #define YYRHSLOC(Rhs, K) ((Rhs)[K]) /* Enable debugging if requested. */ #if FF_DEBUG #ifndef YYFPRINTF #include /* INFRINGES ON USER NAME SPACE */ #define YYFPRINTF fprintf #endif #define YYDPRINTF(Args) \ do { \ if (yydebug) YYFPRINTF Args; \ } while (0) /* YY_LOCATION_PRINT -- Print the location on the stream. This macro was not mandated originally: define only if we know we won't break user code: when these are the locations we know. */ #ifndef YY_LOCATION_PRINT #if defined FF_LTYPE_IS_TRIVIAL && FF_LTYPE_IS_TRIVIAL /* Print *YYLOCP on YYO. Private, do not rely on its existence. */ YY_ATTRIBUTE_UNUSED static int yy_location_print_(FILE *yyo, YYLTYPE const *const yylocp) { int res = 0; int end_col = 0 != yylocp->last_column ? yylocp->last_column - 1 : 0; if (0 <= yylocp->first_line) { res += YYFPRINTF(yyo, "%d", yylocp->first_line); if (0 <= yylocp->first_column) res += YYFPRINTF(yyo, ".%d", yylocp->first_column); } if (0 <= yylocp->last_line) { if (yylocp->first_line < yylocp->last_line) { res += YYFPRINTF(yyo, "-%d", yylocp->last_line); if (0 <= end_col) res += YYFPRINTF(yyo, ".%d", end_col); } else if (0 <= end_col && yylocp->first_column < end_col) res += YYFPRINTF(yyo, "-%d", end_col); } return res; } #define YY_LOCATION_PRINT(File, Loc) yy_location_print_(File, &(Loc)) #else #define YY_LOCATION_PRINT(File, Loc) ((void)0) #endif #endif #define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ do { \ if (yydebug) { \ YYFPRINTF(stderr, "%s ", Title); \ yy_symbol_print(stderr, Type, Value, Location, result, scanner); \ YYFPRINTF(stderr, "\n"); \ } \ } while (0) /*-----------------------------------. | Print this symbol's value on YYO. | `-----------------------------------*/ static void yy_symbol_value_print(FILE *yyo, int yytype, YYSTYPE const *const yyvaluep, YYLTYPE const *const yylocationp, Program *result, yyscan_t scanner) { FILE *yyoutput = yyo; YYUSE(yyoutput); YYUSE(yylocationp); YYUSE(result); YYUSE(scanner); if (!yyvaluep) return; #ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT(yyo, yytoknum[yytype], *yyvaluep); #endif YYUSE(yytype); } /*---------------------------. | Print this symbol on YYO. | `---------------------------*/ static void yy_symbol_print(FILE *yyo, int yytype, YYSTYPE const *const yyvaluep, YYLTYPE const *const yylocationp, Program *result, yyscan_t scanner) { YYFPRINTF(yyo, "%s %s (", yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]); YY_LOCATION_PRINT(yyo, *yylocationp); YYFPRINTF(yyo, ": "); yy_symbol_value_print(yyo, yytype, yyvaluep, yylocationp, result, scanner); YYFPRINTF(yyo, ")"); } /*------------------------------------------------------------------. | yy_stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ static void yy_stack_print(yytype_int16 *yybottom, yytype_int16 *yytop) { YYFPRINTF(stderr, "Stack now"); for (; yybottom <= yytop; yybottom++) { int yybot = *yybottom; YYFPRINTF(stderr, " %d", yybot); } YYFPRINTF(stderr, "\n"); } #define YY_STACK_PRINT(Bottom, Top) \ do { \ if (yydebug) yy_stack_print((Bottom), (Top)); \ } while (0) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ static void yy_reduce_print(yytype_int16 *yyssp, YYSTYPE *yyvsp, YYLTYPE *yylsp, int yyrule, Program *result, yyscan_t scanner) { unsigned long yylno = yyrline[yyrule]; int yynrhs = yyr2[yyrule]; int yyi; YYFPRINTF(stderr, "Reducing stack by rule %d (line %lu):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { YYFPRINTF(stderr, " $%d = ", yyi + 1); yy_symbol_print(stderr, yystos[yyssp[yyi + 1 - yynrhs]], &yyvsp[(yyi + 1) - (yynrhs)], &(yylsp[(yyi + 1) - (yynrhs)]), result, scanner); YYFPRINTF(stderr, "\n"); } } #define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) yy_reduce_print(yyssp, yyvsp, yylsp, Rule, result, scanner); \ } while (0) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; #else /* !FF_DEBUG */ #define YYDPRINTF(Args) #define YY_SYMBOL_PRINT(Title, Type, Value, Location) #define YY_STACK_PRINT(Bottom, Top) #define YY_REDUCE_PRINT(Rule) #endif /* !FF_DEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH #define YYINITDEPTH 200 #endif /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only if the built-in stack extension method is used). Do not make this value too large; the results are undefined if YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ #ifndef YYMAXDEPTH #define YYMAXDEPTH 10000 #endif #if YYERROR_VERBOSE #ifndef yystrlen #if defined __GLIBC__ && defined _STRING_H #define yystrlen strlen #else /* Return the length of YYSTR. */ static YYSIZE_T yystrlen(const char *yystr) { YYSIZE_T yylen; for (yylen = 0; yystr[yylen]; yylen++) continue; return yylen; } #endif #endif #ifndef yystpcpy #if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE #define yystpcpy stpcpy #else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ static char *yystpcpy(char *yydest, const char *yysrc) { char *yyd = yydest; const char *yys = yysrc; while ((*yyd++ = *yys++) != '\0') continue; return yyd - 1; } #endif #endif #ifndef yytnamerr /* Copy to YYRES the contents of YYSTR after stripping away unnecessary quotes and backslashes, so that it's suitable for yyerror. The heuristic is that double-quoting is unnecessary unless the string contains an apostrophe, a comma, or backslash (other than backslash-backslash). YYSTR is taken from yytname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ static YYSIZE_T yytnamerr(char *yyres, const char *yystr) { if (*yystr == '"') { YYSIZE_T yyn = 0; char const *yyp = yystr; for (;;) switch (*++yyp) { case '\'': case ',': goto do_not_strip_quotes; case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; else goto append; append: default: if (yyres) yyres[yyn] = *yyp; yyn++; break; case '"': if (yyres) yyres[yyn] = '\0'; return yyn; } do_not_strip_quotes:; } if (!yyres) return yystrlen(yystr); return (YYSIZE_T)(yystpcpy(yyres, yystr) - yyres); } #endif /* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message about the unexpected token YYTOKEN for the state stack whose top is YYSSP. Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is not large enough to hold the message. In that case, also set *YYMSG_ALLOC to the required number of bytes. Return 2 if the required number of bytes is too large to store. */ static int yysyntax_error(YYSIZE_T *yymsg_alloc, char **yymsg, yytype_int16 *yyssp, int yytoken) { YYSIZE_T yysize0 = yytnamerr(YY_NULLPTR, yytname[yytoken]); YYSIZE_T yysize = yysize0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; /* Internationalized format string. */ const char *yyformat = YY_NULLPTR; /* Arguments of yyformat. */ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; /* Number of reported tokens (one for the "unexpected", one per "expected"). */ int yycount = 0; /* There are many possibilities here to consider: - If this state is a consistent state with a default action, then the only way this function was invoked is if the default action is an error action. In that case, don't check for expected tokens because there are none. - The only way there can be no lookahead present (in yychar) is if this state is a consistent state with a default action. Thus, detecting the absence of a lookahead is sufficient to determine that there is no unexpected or expected token to report. In that case, just report a simple "syntax error". - Don't assume there isn't a lookahead just because this state is a consistent state with a default action. There might have been a previous inconsistent state, consistent state with a non-default action, or user semantic action that manipulated yychar. - Of course, the expected token list depends on states to have correct lookahead information, and it depends on the parser not to perform extra reductions after fetching a lookahead from the scanner and before detecting a syntax error. Thus, state merging (from LALR or IELR) and default reductions corrupt the expected token list. However, the list is correct for canonical LR with one exception: it will still contain any token that will not be accepted due to an error action in a later state. */ if (yytoken != YYEMPTY) { int yyn = yypact[*yyssp]; yyarg[yycount++] = yytname[yytoken]; if (!yypact_value_is_default(yyn)) { /* Start YYX at -YYN if negative to avoid negative indexes in YYCHECK. In other words, skip the first -YYN actions for this state because they are default actions. */ int yyxbegin = yyn < 0 ? -yyn : 0; /* Stay within bounds of both yycheck and yytname. */ int yychecklim = YYLAST - yyn + 1; int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; int yyx; for (yyx = yyxbegin; yyx < yyxend; ++yyx) if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR && !yytable_value_is_error(yytable[yyx + yyn])) { if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) { yycount = 1; yysize = yysize0; break; } yyarg[yycount++] = yytname[yyx]; { YYSIZE_T yysize1 = yysize + yytnamerr(YY_NULLPTR, yytname[yyx]); if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) yysize = yysize1; else return 2; } } } } switch (yycount) { #define YYCASE_(N, S) \ case N: \ yyformat = S; \ break default: /* Avoid compiler warnings. */ YYCASE_(0, YY_("syntax error")); YYCASE_(1, YY_("syntax error, unexpected %s")); YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); YYCASE_( 5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); #undef YYCASE_ } { YYSIZE_T yysize1 = yysize + yystrlen(yyformat); if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) yysize = yysize1; else return 2; } if (*yymsg_alloc < yysize) { *yymsg_alloc = 2 * yysize; if (!(yysize <= *yymsg_alloc && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM; return 1; } /* Avoid sprintf, as that infringes on the user's name space. Don't have undefined behavior even if the translation produced a string with the wrong number of "%s"s. */ { char *yyp = *yymsg; int yyi = 0; while ((*yyp = *yyformat) != '\0') if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount) { yyp += yytnamerr(yyp, yyarg[yyi++]); yyformat += 2; } else { yyp++; yyformat++; } } return 0; } #endif /* YYERROR_VERBOSE */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ static void yydestruct(const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocationp, Program *result, yyscan_t scanner) { YYUSE(yyvaluep); YYUSE(yylocationp); YYUSE(result); YYUSE(scanner); if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT(yymsg, yytype, yyvaluep, yylocationp); YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN switch (yytype) { case 177: /* INTLITERAL */ #line 354 "bison.y" /* yacc.c:1257 */ { } #line 1938 "bison_parser.cpp" /* yacc.c:1257 */ break; case 178: /* STRINGLITERAL */ #line 350 "bison.y" /* yacc.c:1257 */ { free((((*yyvaluep).sval))); } #line 1946 "bison_parser.cpp" /* yacc.c:1257 */ break; case 179: /* FLOATLITERAL */ #line 354 "bison.y" /* yacc.c:1257 */ { } #line 1954 "bison_parser.cpp" /* yacc.c:1257 */ break; case 180: /* IDENTIFIER */ #line 350 "bison.y" /* yacc.c:1257 */ { free((((*yyvaluep).sval))); } #line 1962 "bison_parser.cpp" /* yacc.c:1257 */ break; case 182: /* program */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).program_t) != NULL) ((*yyvaluep).program_t)->deep_delete(); } #line 1968 "bison_parser.cpp" /* yacc.c:1257 */ break; case 183: /* stmtlist */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).stmtlist_t) != NULL) ((*yyvaluep).stmtlist_t)->deep_delete(); } #line 1974 "bison_parser.cpp" /* yacc.c:1257 */ break; case 184: /* stmt */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).stmt_t) != NULL) ((*yyvaluep).stmt_t)->deep_delete(); } #line 1980 "bison_parser.cpp" /* yacc.c:1257 */ break; case 185: /* create_stmt */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).create_stmt_t) != NULL) ((*yyvaluep).create_stmt_t)->deep_delete(); } #line 1986 "bison_parser.cpp" /* yacc.c:1257 */ break; case 186: /* drop_stmt */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).drop_stmt_t) != NULL) ((*yyvaluep).drop_stmt_t)->deep_delete(); } #line 1992 "bison_parser.cpp" /* yacc.c:1257 */ break; case 187: /* alter_stmt */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).alter_stmt_t) != NULL) ((*yyvaluep).alter_stmt_t)->deep_delete(); } #line 1998 "bison_parser.cpp" /* yacc.c:1257 */ break; case 188: /* select_stmt */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).select_stmt_t) != NULL) ((*yyvaluep).select_stmt_t)->deep_delete(); } #line 2004 "bison_parser.cpp" /* yacc.c:1257 */ break; case 189: /* select_with_parens */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).select_with_parens_t) != NULL) ((*yyvaluep).select_with_parens_t)->deep_delete(); } #line 2010 "bison_parser.cpp" /* yacc.c:1257 */ break; case 190: /* select_no_parens */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).select_no_parens_t) != NULL) ((*yyvaluep).select_no_parens_t)->deep_delete(); } #line 2016 "bison_parser.cpp" /* yacc.c:1257 */ break; case 191: /* select_clause_list */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).select_clause_list_t) != NULL) ((*yyvaluep).select_clause_list_t)->deep_delete(); } #line 2022 "bison_parser.cpp" /* yacc.c:1257 */ break; case 192: /* select_clause */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).select_clause_t) != NULL) ((*yyvaluep).select_clause_t)->deep_delete(); } #line 2028 "bison_parser.cpp" /* yacc.c:1257 */ break; case 193: /* combine_clause */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).combine_clause_t) != NULL) ((*yyvaluep).combine_clause_t)->deep_delete(); } #line 2034 "bison_parser.cpp" /* yacc.c:1257 */ break; case 194: /* opt_from_clause */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_from_clause_t) != NULL) ((*yyvaluep).opt_from_clause_t)->deep_delete(); } #line 2040 "bison_parser.cpp" /* yacc.c:1257 */ break; case 195: /* select_target */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).select_target_t) != NULL) ((*yyvaluep).select_target_t)->deep_delete(); } #line 2046 "bison_parser.cpp" /* yacc.c:1257 */ break; case 196: /* opt_window_clause */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_window_clause_t) != NULL) ((*yyvaluep).opt_window_clause_t)->deep_delete(); } #line 2052 "bison_parser.cpp" /* yacc.c:1257 */ break; case 197: /* window_clause */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).window_clause_t) != NULL) ((*yyvaluep).window_clause_t)->deep_delete(); } #line 2058 "bison_parser.cpp" /* yacc.c:1257 */ break; case 198: /* window_def_list */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).window_def_list_t) != NULL) ((*yyvaluep).window_def_list_t)->deep_delete(); } #line 2064 "bison_parser.cpp" /* yacc.c:1257 */ break; case 199: /* window_def */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).window_def_t) != NULL) ((*yyvaluep).window_def_t)->deep_delete(); } #line 2070 "bison_parser.cpp" /* yacc.c:1257 */ break; case 200: /* window_name */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).window_name_t) != NULL) ((*yyvaluep).window_name_t)->deep_delete(); } #line 2076 "bison_parser.cpp" /* yacc.c:1257 */ break; case 201: /* window */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).window_t) != NULL) ((*yyvaluep).window_t)->deep_delete(); } #line 2082 "bison_parser.cpp" /* yacc.c:1257 */ break; case 202: /* opt_partition */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_partition_t) != NULL) ((*yyvaluep).opt_partition_t)->deep_delete(); } #line 2088 "bison_parser.cpp" /* yacc.c:1257 */ break; case 203: /* opt_frame_clause */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_frame_clause_t) != NULL) ((*yyvaluep).opt_frame_clause_t)->deep_delete(); } #line 2094 "bison_parser.cpp" /* yacc.c:1257 */ break; case 204: /* range_or_rows */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).range_or_rows_t) != NULL) ((*yyvaluep).range_or_rows_t)->deep_delete(); } #line 2100 "bison_parser.cpp" /* yacc.c:1257 */ break; case 205: /* frame_bound_start */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).frame_bound_start_t) != NULL) ((*yyvaluep).frame_bound_start_t)->deep_delete(); } #line 2106 "bison_parser.cpp" /* yacc.c:1257 */ break; case 206: /* frame_bound_end */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).frame_bound_end_t) != NULL) ((*yyvaluep).frame_bound_end_t)->deep_delete(); } #line 2112 "bison_parser.cpp" /* yacc.c:1257 */ break; case 207: /* frame_bound */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).frame_bound_t) != NULL) ((*yyvaluep).frame_bound_t)->deep_delete(); } #line 2118 "bison_parser.cpp" /* yacc.c:1257 */ break; case 208: /* opt_frame_exclude */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_frame_exclude_t) != NULL) ((*yyvaluep).opt_frame_exclude_t)->deep_delete(); } #line 2124 "bison_parser.cpp" /* yacc.c:1257 */ break; case 209: /* frame_exclude */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).frame_exclude_t) != NULL) ((*yyvaluep).frame_exclude_t)->deep_delete(); } #line 2130 "bison_parser.cpp" /* yacc.c:1257 */ break; case 210: /* opt_exist_window_name */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_exist_window_name_t) != NULL) ((*yyvaluep).opt_exist_window_name_t)->deep_delete(); } #line 2136 "bison_parser.cpp" /* yacc.c:1257 */ break; case 211: /* opt_group_clause */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_group_clause_t) != NULL) ((*yyvaluep).opt_group_clause_t)->deep_delete(); } #line 2142 "bison_parser.cpp" /* yacc.c:1257 */ break; case 212: /* opt_having_clause */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_having_clause_t) != NULL) ((*yyvaluep).opt_having_clause_t)->deep_delete(); } #line 2148 "bison_parser.cpp" /* yacc.c:1257 */ break; case 213: /* opt_where_clause */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_where_clause_t) != NULL) ((*yyvaluep).opt_where_clause_t)->deep_delete(); } #line 2154 "bison_parser.cpp" /* yacc.c:1257 */ break; case 214: /* where_clause */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).where_clause_t) != NULL) ((*yyvaluep).where_clause_t)->deep_delete(); } #line 2160 "bison_parser.cpp" /* yacc.c:1257 */ break; case 215: /* from_clause */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).from_clause_t) != NULL) ((*yyvaluep).from_clause_t)->deep_delete(); } #line 2166 "bison_parser.cpp" /* yacc.c:1257 */ break; case 216: /* table_ref */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).table_ref_t) != NULL) ((*yyvaluep).table_ref_t)->deep_delete(); } #line 2172 "bison_parser.cpp" /* yacc.c:1257 */ break; case 217: /* opt_on_or_using */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_on_or_using_t) != NULL) ((*yyvaluep).opt_on_or_using_t)->deep_delete(); } #line 2178 "bison_parser.cpp" /* yacc.c:1257 */ break; case 218: /* on_or_using */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).on_or_using_t) != NULL) ((*yyvaluep).on_or_using_t)->deep_delete(); } #line 2184 "bison_parser.cpp" /* yacc.c:1257 */ break; case 219: /* column_name_list */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).column_name_list_t) != NULL) ((*yyvaluep).column_name_list_t)->deep_delete(); } #line 2190 "bison_parser.cpp" /* yacc.c:1257 */ break; case 220: /* opt_table_prefix */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_table_prefix_t) != NULL) ((*yyvaluep).opt_table_prefix_t)->deep_delete(); } #line 2196 "bison_parser.cpp" /* yacc.c:1257 */ break; case 221: /* join_op */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).join_op_t) != NULL) ((*yyvaluep).join_op_t)->deep_delete(); } #line 2202 "bison_parser.cpp" /* yacc.c:1257 */ break; case 222: /* opt_join_type */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_join_type_t) != NULL) ((*yyvaluep).opt_join_type_t)->deep_delete(); } #line 2208 "bison_parser.cpp" /* yacc.c:1257 */ break; case 223: /* expr_list */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).expr_list_t) != NULL) ((*yyvaluep).expr_list_t)->deep_delete(); } #line 2214 "bison_parser.cpp" /* yacc.c:1257 */ break; case 224: /* opt_limit_clause */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_limit_clause_t) != NULL) ((*yyvaluep).opt_limit_clause_t)->deep_delete(); } #line 2220 "bison_parser.cpp" /* yacc.c:1257 */ break; case 225: /* limit_clause */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).limit_clause_t) != NULL) ((*yyvaluep).limit_clause_t)->deep_delete(); } #line 2226 "bison_parser.cpp" /* yacc.c:1257 */ break; case 226: /* opt_order_clause */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_order_clause_t) != NULL) ((*yyvaluep).opt_order_clause_t)->deep_delete(); } #line 2232 "bison_parser.cpp" /* yacc.c:1257 */ break; case 227: /* opt_order_nulls */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_order_nulls_t) != NULL) ((*yyvaluep).opt_order_nulls_t)->deep_delete(); } #line 2238 "bison_parser.cpp" /* yacc.c:1257 */ break; case 228: /* order_item_list */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).order_item_list_t) != NULL) ((*yyvaluep).order_item_list_t)->deep_delete(); } #line 2244 "bison_parser.cpp" /* yacc.c:1257 */ break; case 229: /* order_item */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).order_item_t) != NULL) ((*yyvaluep).order_item_t)->deep_delete(); } #line 2250 "bison_parser.cpp" /* yacc.c:1257 */ break; case 230: /* opt_order_behavior */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_order_behavior_t) != NULL) ((*yyvaluep).opt_order_behavior_t)->deep_delete(); } #line 2256 "bison_parser.cpp" /* yacc.c:1257 */ break; case 231: /* opt_with_clause */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_with_clause_t) != NULL) ((*yyvaluep).opt_with_clause_t)->deep_delete(); } #line 2262 "bison_parser.cpp" /* yacc.c:1257 */ break; case 232: /* cte_table_list */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).cte_table_list_t) != NULL) ((*yyvaluep).cte_table_list_t)->deep_delete(); } #line 2268 "bison_parser.cpp" /* yacc.c:1257 */ break; case 233: /* cte_table */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).cte_table_t) != NULL) ((*yyvaluep).cte_table_t)->deep_delete(); } #line 2274 "bison_parser.cpp" /* yacc.c:1257 */ break; case 234: /* cte_table_name */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).cte_table_name_t) != NULL) ((*yyvaluep).cte_table_name_t)->deep_delete(); } #line 2280 "bison_parser.cpp" /* yacc.c:1257 */ break; case 235: /* opt_all_or_distinct */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_all_or_distinct_t) != NULL) ((*yyvaluep).opt_all_or_distinct_t)->deep_delete(); } #line 2286 "bison_parser.cpp" /* yacc.c:1257 */ break; case 236: /* create_table_stmt */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).create_table_stmt_t) != NULL) ((*yyvaluep).create_table_stmt_t)->deep_delete(); } #line 2292 "bison_parser.cpp" /* yacc.c:1257 */ break; case 237: /* create_index_stmt */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).create_index_stmt_t) != NULL) ((*yyvaluep).create_index_stmt_t)->deep_delete(); } #line 2298 "bison_parser.cpp" /* yacc.c:1257 */ break; case 238: /* create_view_stmt */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).create_view_stmt_t) != NULL) ((*yyvaluep).create_view_stmt_t)->deep_delete(); } #line 2304 "bison_parser.cpp" /* yacc.c:1257 */ break; case 239: /* drop_index_stmt */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).drop_index_stmt_t) != NULL) ((*yyvaluep).drop_index_stmt_t)->deep_delete(); } #line 2310 "bison_parser.cpp" /* yacc.c:1257 */ break; case 240: /* drop_table_stmt */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).drop_table_stmt_t) != NULL) ((*yyvaluep).drop_table_stmt_t)->deep_delete(); } #line 2316 "bison_parser.cpp" /* yacc.c:1257 */ break; case 241: /* drop_view_stmt */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).drop_view_stmt_t) != NULL) ((*yyvaluep).drop_view_stmt_t)->deep_delete(); } #line 2322 "bison_parser.cpp" /* yacc.c:1257 */ break; case 242: /* insert_stmt */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).insert_stmt_t) != NULL) ((*yyvaluep).insert_stmt_t)->deep_delete(); } #line 2328 "bison_parser.cpp" /* yacc.c:1257 */ break; case 243: /* insert_rest */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).insert_rest_t) != NULL) ((*yyvaluep).insert_rest_t)->deep_delete(); } #line 2334 "bison_parser.cpp" /* yacc.c:1257 */ break; case 244: /* super_values_list */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).super_values_list_t) != NULL) ((*yyvaluep).super_values_list_t)->deep_delete(); } #line 2340 "bison_parser.cpp" /* yacc.c:1257 */ break; case 245: /* values_list */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).values_list_t) != NULL) ((*yyvaluep).values_list_t)->deep_delete(); } #line 2346 "bison_parser.cpp" /* yacc.c:1257 */ break; case 246: /* opt_on_conflict */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_on_conflict_t) != NULL) ((*yyvaluep).opt_on_conflict_t)->deep_delete(); } #line 2352 "bison_parser.cpp" /* yacc.c:1257 */ break; case 247: /* opt_conflict_expr */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_conflict_expr_t) != NULL) ((*yyvaluep).opt_conflict_expr_t)->deep_delete(); } #line 2358 "bison_parser.cpp" /* yacc.c:1257 */ break; case 248: /* indexed_column_list */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).indexed_column_list_t) != NULL) ((*yyvaluep).indexed_column_list_t)->deep_delete(); } #line 2364 "bison_parser.cpp" /* yacc.c:1257 */ break; case 249: /* indexed_column */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).indexed_column_t) != NULL) ((*yyvaluep).indexed_column_t)->deep_delete(); } #line 2370 "bison_parser.cpp" /* yacc.c:1257 */ break; case 250: /* update_stmt */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).update_stmt_t) != NULL) ((*yyvaluep).update_stmt_t)->deep_delete(); } #line 2376 "bison_parser.cpp" /* yacc.c:1257 */ break; case 251: /* reindex_stmt */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).reindex_stmt_t) != NULL) ((*yyvaluep).reindex_stmt_t)->deep_delete(); } #line 2382 "bison_parser.cpp" /* yacc.c:1257 */ break; case 252: /* alter_action */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).alter_action_t) != NULL) ((*yyvaluep).alter_action_t)->deep_delete(); } #line 2388 "bison_parser.cpp" /* yacc.c:1257 */ break; case 253: /* column_def_list */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).column_def_list_t) != NULL) ((*yyvaluep).column_def_list_t)->deep_delete(); } #line 2394 "bison_parser.cpp" /* yacc.c:1257 */ break; case 254: /* column_def */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).column_def_t) != NULL) ((*yyvaluep).column_def_t)->deep_delete(); } #line 2400 "bison_parser.cpp" /* yacc.c:1257 */ break; case 255: /* opt_column_constraint_list */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_column_constraint_list_t) != NULL) ((*yyvaluep).opt_column_constraint_list_t)->deep_delete(); } #line 2406 "bison_parser.cpp" /* yacc.c:1257 */ break; case 256: /* column_constraint_list */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).column_constraint_list_t) != NULL) ((*yyvaluep).column_constraint_list_t)->deep_delete(); } #line 2412 "bison_parser.cpp" /* yacc.c:1257 */ break; case 257: /* column_constraint */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).column_constraint_t) != NULL) ((*yyvaluep).column_constraint_t)->deep_delete(); } #line 2418 "bison_parser.cpp" /* yacc.c:1257 */ break; case 258: /* constraint_type */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).constraint_type_t) != NULL) ((*yyvaluep).constraint_type_t)->deep_delete(); } #line 2424 "bison_parser.cpp" /* yacc.c:1257 */ break; case 259: /* foreign_clause */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).foreign_clause_t) != NULL) ((*yyvaluep).foreign_clause_t)->deep_delete(); } #line 2430 "bison_parser.cpp" /* yacc.c:1257 */ break; case 260: /* opt_foreign_key_actions */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_foreign_key_actions_t) != NULL) ((*yyvaluep).opt_foreign_key_actions_t)->deep_delete(); } #line 2436 "bison_parser.cpp" /* yacc.c:1257 */ break; case 261: /* foreign_key_actions */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).foreign_key_actions_t) != NULL) ((*yyvaluep).foreign_key_actions_t)->deep_delete(); } #line 2442 "bison_parser.cpp" /* yacc.c:1257 */ break; case 262: /* key_actions */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).key_actions_t) != NULL) ((*yyvaluep).key_actions_t)->deep_delete(); } #line 2448 "bison_parser.cpp" /* yacc.c:1257 */ break; case 263: /* opt_constraint_attribute_spec */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_constraint_attribute_spec_t) != NULL) ((*yyvaluep).opt_constraint_attribute_spec_t)->deep_delete(); } #line 2454 "bison_parser.cpp" /* yacc.c:1257 */ break; case 264: /* opt_initial_time */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_initial_time_t) != NULL) ((*yyvaluep).opt_initial_time_t)->deep_delete(); } #line 2460 "bison_parser.cpp" /* yacc.c:1257 */ break; case 265: /* constraint_name */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).constraint_name_t) != NULL) ((*yyvaluep).constraint_name_t)->deep_delete(); } #line 2466 "bison_parser.cpp" /* yacc.c:1257 */ break; case 266: /* opt_temp */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_temp_t) != NULL) ((*yyvaluep).opt_temp_t)->deep_delete(); } #line 2472 "bison_parser.cpp" /* yacc.c:1257 */ break; case 267: /* opt_check_option */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_check_option_t) != NULL) ((*yyvaluep).opt_check_option_t)->deep_delete(); } #line 2478 "bison_parser.cpp" /* yacc.c:1257 */ break; case 268: /* opt_column_name_list_p */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_column_name_list_p_t) != NULL) ((*yyvaluep).opt_column_name_list_p_t)->deep_delete(); } #line 2484 "bison_parser.cpp" /* yacc.c:1257 */ break; case 269: /* set_clause_list */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).set_clause_list_t) != NULL) ((*yyvaluep).set_clause_list_t)->deep_delete(); } #line 2490 "bison_parser.cpp" /* yacc.c:1257 */ break; case 270: /* set_clause */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).set_clause_t) != NULL) ((*yyvaluep).set_clause_t)->deep_delete(); } #line 2496 "bison_parser.cpp" /* yacc.c:1257 */ break; case 271: /* expr */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).expr_t) != NULL) ((*yyvaluep).expr_t)->deep_delete(); } #line 2502 "bison_parser.cpp" /* yacc.c:1257 */ break; case 272: /* operand */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).operand_t) != NULL) ((*yyvaluep).operand_t)->deep_delete(); } #line 2508 "bison_parser.cpp" /* yacc.c:1257 */ break; case 273: /* cast_expr */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).cast_expr_t) != NULL) ((*yyvaluep).cast_expr_t)->deep_delete(); } #line 2514 "bison_parser.cpp" /* yacc.c:1257 */ break; case 274: /* scalar_expr */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).scalar_expr_t) != NULL) ((*yyvaluep).scalar_expr_t)->deep_delete(); } #line 2520 "bison_parser.cpp" /* yacc.c:1257 */ break; case 275: /* unary_expr */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).unary_expr_t) != NULL) ((*yyvaluep).unary_expr_t)->deep_delete(); } #line 2526 "bison_parser.cpp" /* yacc.c:1257 */ break; case 276: /* binary_expr */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).binary_expr_t) != NULL) ((*yyvaluep).binary_expr_t)->deep_delete(); } #line 2532 "bison_parser.cpp" /* yacc.c:1257 */ break; case 277: /* logic_expr */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).logic_expr_t) != NULL) ((*yyvaluep).logic_expr_t)->deep_delete(); } #line 2538 "bison_parser.cpp" /* yacc.c:1257 */ break; case 278: /* in_expr */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).in_expr_t) != NULL) ((*yyvaluep).in_expr_t)->deep_delete(); } #line 2544 "bison_parser.cpp" /* yacc.c:1257 */ break; case 279: /* case_expr */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).case_expr_t) != NULL) ((*yyvaluep).case_expr_t)->deep_delete(); } #line 2550 "bison_parser.cpp" /* yacc.c:1257 */ break; case 280: /* between_expr */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).between_expr_t) != NULL) ((*yyvaluep).between_expr_t)->deep_delete(); } #line 2556 "bison_parser.cpp" /* yacc.c:1257 */ break; case 281: /* exists_expr */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).exists_expr_t) != NULL) ((*yyvaluep).exists_expr_t)->deep_delete(); } #line 2562 "bison_parser.cpp" /* yacc.c:1257 */ break; case 282: /* case_list */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).case_list_t) != NULL) ((*yyvaluep).case_list_t)->deep_delete(); } #line 2568 "bison_parser.cpp" /* yacc.c:1257 */ break; case 283: /* case_clause */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).case_clause_t) != NULL) ((*yyvaluep).case_clause_t)->deep_delete(); } #line 2574 "bison_parser.cpp" /* yacc.c:1257 */ break; case 284: /* comp_expr */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).comp_expr_t) != NULL) ((*yyvaluep).comp_expr_t)->deep_delete(); } #line 2580 "bison_parser.cpp" /* yacc.c:1257 */ break; case 285: /* extract_expr */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).extract_expr_t) != NULL) ((*yyvaluep).extract_expr_t)->deep_delete(); } #line 2586 "bison_parser.cpp" /* yacc.c:1257 */ break; case 286: /* datetime_field */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).datetime_field_t) != NULL) ((*yyvaluep).datetime_field_t)->deep_delete(); } #line 2592 "bison_parser.cpp" /* yacc.c:1257 */ break; case 287: /* array_index */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).array_index_t) != NULL) ((*yyvaluep).array_index_t)->deep_delete(); } #line 2598 "bison_parser.cpp" /* yacc.c:1257 */ break; case 288: /* literal */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).literal_t) != NULL) ((*yyvaluep).literal_t)->deep_delete(); } #line 2604 "bison_parser.cpp" /* yacc.c:1257 */ break; case 289: /* string_literal */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).string_literal_t) != NULL) ((*yyvaluep).string_literal_t)->deep_delete(); } #line 2610 "bison_parser.cpp" /* yacc.c:1257 */ break; case 290: /* bool_literal */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).bool_literal_t) != NULL) ((*yyvaluep).bool_literal_t)->deep_delete(); } #line 2616 "bison_parser.cpp" /* yacc.c:1257 */ break; case 291: /* num_literal */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).num_literal_t) != NULL) ((*yyvaluep).num_literal_t)->deep_delete(); } #line 2622 "bison_parser.cpp" /* yacc.c:1257 */ break; case 292: /* int_literal */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).int_literal_t) != NULL) ((*yyvaluep).int_literal_t)->deep_delete(); } #line 2628 "bison_parser.cpp" /* yacc.c:1257 */ break; case 293: /* float_literal */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).float_literal_t) != NULL) ((*yyvaluep).float_literal_t)->deep_delete(); } #line 2634 "bison_parser.cpp" /* yacc.c:1257 */ break; case 294: /* opt_column */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_column_t) != NULL) ((*yyvaluep).opt_column_t)->deep_delete(); } #line 2640 "bison_parser.cpp" /* yacc.c:1257 */ break; case 295: /* opt_if_not_exist */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_if_not_exist_t) != NULL) ((*yyvaluep).opt_if_not_exist_t)->deep_delete(); } #line 2646 "bison_parser.cpp" /* yacc.c:1257 */ break; case 296: /* opt_if_exist */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_if_exist_t) != NULL) ((*yyvaluep).opt_if_exist_t)->deep_delete(); } #line 2652 "bison_parser.cpp" /* yacc.c:1257 */ break; case 297: /* identifier */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).identifier_t) != NULL) ((*yyvaluep).identifier_t)->deep_delete(); } #line 2658 "bison_parser.cpp" /* yacc.c:1257 */ break; case 298: /* table_name */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).table_name_t) != NULL) ((*yyvaluep).table_name_t)->deep_delete(); } #line 2664 "bison_parser.cpp" /* yacc.c:1257 */ break; case 299: /* column_name */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).column_name_t) != NULL) ((*yyvaluep).column_name_t)->deep_delete(); } #line 2670 "bison_parser.cpp" /* yacc.c:1257 */ break; case 300: /* opt_unique */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_unique_t) != NULL) ((*yyvaluep).opt_unique_t)->deep_delete(); } #line 2676 "bison_parser.cpp" /* yacc.c:1257 */ break; case 301: /* view_name */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).view_name_t) != NULL) ((*yyvaluep).view_name_t)->deep_delete(); } #line 2682 "bison_parser.cpp" /* yacc.c:1257 */ break; case 302: /* binary_op */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).binary_op_t) != NULL) ((*yyvaluep).binary_op_t)->deep_delete(); } #line 2688 "bison_parser.cpp" /* yacc.c:1257 */ break; case 303: /* opt_not */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_not_t) != NULL) ((*yyvaluep).opt_not_t)->deep_delete(); } #line 2694 "bison_parser.cpp" /* yacc.c:1257 */ break; case 304: /* name */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).name_t) != NULL) ((*yyvaluep).name_t)->deep_delete(); } #line 2700 "bison_parser.cpp" /* yacc.c:1257 */ break; case 305: /* type_name */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).type_name_t) != NULL) ((*yyvaluep).type_name_t)->deep_delete(); } #line 2706 "bison_parser.cpp" /* yacc.c:1257 */ break; case 306: /* character_type */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).character_type_t) != NULL) ((*yyvaluep).character_type_t)->deep_delete(); } #line 2712 "bison_parser.cpp" /* yacc.c:1257 */ break; case 307: /* character_with_length */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).character_with_length_t) != NULL) ((*yyvaluep).character_with_length_t)->deep_delete(); } #line 2718 "bison_parser.cpp" /* yacc.c:1257 */ break; case 308: /* character_without_length */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).character_without_length_t) != NULL) ((*yyvaluep).character_without_length_t)->deep_delete(); } #line 2724 "bison_parser.cpp" /* yacc.c:1257 */ break; case 309: /* character_conflicta */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).character_conflicta_t) != NULL) ((*yyvaluep).character_conflicta_t)->deep_delete(); } #line 2730 "bison_parser.cpp" /* yacc.c:1257 */ break; case 310: /* opt_varying */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_varying_t) != NULL) ((*yyvaluep).opt_varying_t)->deep_delete(); } #line 2736 "bison_parser.cpp" /* yacc.c:1257 */ break; case 311: /* numeric_type */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).numeric_type_t) != NULL) ((*yyvaluep).numeric_type_t)->deep_delete(); } #line 2742 "bison_parser.cpp" /* yacc.c:1257 */ break; case 312: /* opt_table_constraint_list */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_table_constraint_list_t) != NULL) ((*yyvaluep).opt_table_constraint_list_t)->deep_delete(); } #line 2748 "bison_parser.cpp" /* yacc.c:1257 */ break; case 313: /* table_constraint_list */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).table_constraint_list_t) != NULL) ((*yyvaluep).table_constraint_list_t)->deep_delete(); } #line 2754 "bison_parser.cpp" /* yacc.c:1257 */ break; case 314: /* table_constraint */ #line 358 "bison.y" /* yacc.c:1257 */ { if (((*yyvaluep).table_constraint_t) != NULL) ((*yyvaluep).table_constraint_t)->deep_delete(); } #line 2760 "bison_parser.cpp" /* yacc.c:1257 */ break; default: break; } YY_IGNORE_MAYBE_UNINITIALIZED_END } /*----------. | yyparse. | `----------*/ int yyparse(Program *result, yyscan_t scanner) { /* The lookahead symbol. */ int yychar; /* The semantic value of the lookahead symbol. */ /* Default value used for initialization, for pacifying older GCCs or non-GCC compilers. */ YY_INITIAL_VALUE(static YYSTYPE yyval_default;) YYSTYPE yylval YY_INITIAL_VALUE(= yyval_default); /* Location data for the lookahead symbol. */ static YYLTYPE yyloc_default #if defined FF_LTYPE_IS_TRIVIAL && FF_LTYPE_IS_TRIVIAL = {1, 1, 1, 1} #endif ; YYLTYPE yylloc = yyloc_default; /* Number of syntax errors so far. */ int yynerrs; int yystate; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; /* The stacks and their tools: 'yyss': related to states. 'yyvs': related to semantic values. 'yyls': related to locations. Refer to the stacks through separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* The state stack. */ yytype_int16 yyssa[YYINITDEPTH]; yytype_int16 *yyss; yytype_int16 *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs; YYSTYPE *yyvsp; /* The location stack. */ YYLTYPE yylsa[YYINITDEPTH]; YYLTYPE *yyls; YYLTYPE *yylsp; /* The locations where the error started and ended. */ YYLTYPE yyerror_range[3]; YYSIZE_T yystacksize; int yyn; int yyresult; /* Lookahead token as an internal (translated) token number. */ int yytoken = 0; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; YYLTYPE yyloc; #if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; char *yymsg = yymsgbuf; YYSIZE_T yymsg_alloc = sizeof yymsgbuf; #endif #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N), yylsp -= (N)) /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; yyssp = yyss = yyssa; yyvsp = yyvs = yyvsa; yylsp = yyls = yylsa; yystacksize = YYINITDEPTH; YYDPRINTF((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ /* User initialization code. */ #line 18 "bison.y" /* yacc.c:1431 */ { // Initialize yylloc.first_column = 0; yylloc.last_column = 0; yylloc.first_line = 0; yylloc.last_line = 0; yylloc.total_column = 0; yylloc.string_length = 0; } #line 2878 "bison_parser.cpp" /* yacc.c:1431 */ yylsp[0] = yylloc; goto yysetstate; /*------------------------------------------------------------. | yynewstate -- push a new state, which is found in yystate. | `------------------------------------------------------------*/ yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; /*--------------------------------------------------------------------. | yynewstate -- set current state (the top of the stack) to yystate. | `--------------------------------------------------------------------*/ yysetstate: *yyssp = (yytype_int16)yystate; if (yyss + yystacksize - 1 <= yyssp) #if !defined yyoverflow && !defined YYSTACK_RELOCATE goto yyexhaustedlab; #else { /* Get the current used size of the three stacks, in elements. */ YYSIZE_T yysize = (YYSIZE_T)(yyssp - yyss + 1); #if defined yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ YYSTYPE *yyvs1 = yyvs; yytype_int16 *yyss1 = yyss; YYLTYPE *yyls1 = yyls; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow(YY_("memory exhausted"), &yyss1, yysize * sizeof(*yyssp), &yyvs1, yysize * sizeof(*yyvsp), &yyls1, yysize * sizeof(*yylsp), &yystacksize); yyss = yyss1; yyvs = yyvs1; yyls = yyls1; } #else /* defined YYSTACK_RELOCATE */ /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; { yytype_int16 *yyss1 = yyss; union yyalloc *yyptr = (union yyalloc *)YYSTACK_ALLOC(YYSTACK_BYTES(yystacksize)); if (!yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE(yyss_alloc, yyss); YYSTACK_RELOCATE(yyvs_alloc, yyvs); YYSTACK_RELOCATE(yyls_alloc, yyls); #undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE(yyss1); } #endif yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; yylsp = yyls + yysize - 1; YYDPRINTF( (stderr, "Stack size increased to %lu\n", (unsigned long)yystacksize)); if (yyss + yystacksize - 1 <= yyssp) YYABORT; } #endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */ YYDPRINTF((stderr, "Entering state %d\n", yystate)); if (yystate == YYFINAL) YYACCEPT; goto yybackup; /*-----------. | yybackup. | `-----------*/ yybackup: /* Do appropriate processing given the current state. Read a lookahead token if we need one and don't already have one. */ /* First try to decide what to do without reference to lookahead token. */ yyn = yypact[yystate]; if (yypact_value_is_default(yyn)) goto yydefault; /* Not known => get a lookahead token if don't already have one. */ /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF((stderr, "Reading a token: ")); yychar = yylex(&yylval, &yylloc, scanner); } if (yychar <= YYEOF) { yychar = yytoken = YYEOF; YYDPRINTF((stderr, "Now at end of input.\n")); } else { yytoken = YYTRANSLATE(yychar); YY_SYMBOL_PRINT("Next token is", yytoken, &yylval, &yylloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ yyn += yytoken; if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) goto yydefault; yyn = yytable[yyn]; if (yyn <= 0) { if (yytable_value_is_error(yyn)) goto yyerrlab; yyn = -yyn; goto yyreduce; } /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; /* Shift the lookahead token. */ YY_SYMBOL_PRINT("Shifting", yytoken, &yylval, &yylloc); /* Discard the shifted token. */ yychar = YYEMPTY; yystate = yyn; YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END *++yylsp = yylloc; goto yynewstate; /*-----------------------------------------------------------. | yydefault -- do the default action for the current state. | `-----------------------------------------------------------*/ yydefault: yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; goto yyreduce; /*-----------------------------. | yyreduce -- do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ yylen = yyr2[yyn]; /* If YYLEN is nonzero, implement the default value of the action: '$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison users should not rely upon it. Assigning to YYVAL unconditionally makes the parser a bit smaller, and it avoids a GCC warning that YYVAL may be used uninitialized. */ yyval = yyvsp[1 - yylen]; /* Default location. */ YYLLOC_DEFAULT(yyloc, (yylsp - yylen), yylen); yyerror_range[1] = yyloc; YY_REDUCE_PRINT(yyn); switch (yyn) { case 2: #line 362 "bison.y" /* yacc.c:1652 */ { (yyval.program_t) = result; (yyval.program_t)->case_idx_ = CASE0; (yyval.program_t)->stmtlist_ = (yyvsp[0].stmtlist_t); (yyval.program_t) = NULL; } #line 3078 "bison_parser.cpp" /* yacc.c:1652 */ break; case 3: #line 372 "bison.y" /* yacc.c:1652 */ { (yyval.stmtlist_t) = new Stmtlist(); (yyval.stmtlist_t)->case_idx_ = CASE0; (yyval.stmtlist_t)->stmt_ = (yyvsp[-2].stmt_t); (yyval.stmtlist_t)->stmtlist_ = (yyvsp[0].stmtlist_t); } #line 3090 "bison_parser.cpp" /* yacc.c:1652 */ break; case 4: #line 379 "bison.y" /* yacc.c:1652 */ { (yyval.stmtlist_t) = new Stmtlist(); (yyval.stmtlist_t)->case_idx_ = CASE1; (yyval.stmtlist_t)->stmt_ = (yyvsp[-1].stmt_t); } #line 3101 "bison_parser.cpp" /* yacc.c:1652 */ break; case 5: #line 388 "bison.y" /* yacc.c:1652 */ { (yyval.stmt_t) = new Stmt(); (yyval.stmt_t)->case_idx_ = CASE0; (yyval.stmt_t)->create_stmt_ = (yyvsp[0].create_stmt_t); } #line 3112 "bison_parser.cpp" /* yacc.c:1652 */ break; case 6: #line 394 "bison.y" /* yacc.c:1652 */ { (yyval.stmt_t) = new Stmt(); (yyval.stmt_t)->case_idx_ = CASE1; (yyval.stmt_t)->drop_stmt_ = (yyvsp[0].drop_stmt_t); } #line 3123 "bison_parser.cpp" /* yacc.c:1652 */ break; case 7: #line 400 "bison.y" /* yacc.c:1652 */ { (yyval.stmt_t) = new Stmt(); (yyval.stmt_t)->case_idx_ = CASE2; (yyval.stmt_t)->select_stmt_ = (yyvsp[0].select_stmt_t); } #line 3134 "bison_parser.cpp" /* yacc.c:1652 */ break; case 8: #line 406 "bison.y" /* yacc.c:1652 */ { (yyval.stmt_t) = new Stmt(); (yyval.stmt_t)->case_idx_ = CASE3; (yyval.stmt_t)->update_stmt_ = (yyvsp[0].update_stmt_t); } #line 3145 "bison_parser.cpp" /* yacc.c:1652 */ break; case 9: #line 412 "bison.y" /* yacc.c:1652 */ { (yyval.stmt_t) = new Stmt(); (yyval.stmt_t)->case_idx_ = CASE4; (yyval.stmt_t)->insert_stmt_ = (yyvsp[0].insert_stmt_t); } #line 3156 "bison_parser.cpp" /* yacc.c:1652 */ break; case 10: #line 418 "bison.y" /* yacc.c:1652 */ { (yyval.stmt_t) = new Stmt(); (yyval.stmt_t)->case_idx_ = CASE5; (yyval.stmt_t)->alter_stmt_ = (yyvsp[0].alter_stmt_t); } #line 3167 "bison_parser.cpp" /* yacc.c:1652 */ break; case 11: #line 424 "bison.y" /* yacc.c:1652 */ { (yyval.stmt_t) = new Stmt(); (yyval.stmt_t)->case_idx_ = CASE6; (yyval.stmt_t)->reindex_stmt_ = (yyvsp[0].reindex_stmt_t); } #line 3178 "bison_parser.cpp" /* yacc.c:1652 */ break; case 12: #line 433 "bison.y" /* yacc.c:1652 */ { (yyval.create_stmt_t) = new CreateStmt(); (yyval.create_stmt_t)->case_idx_ = CASE0; (yyval.create_stmt_t)->create_table_stmt_ = (yyvsp[0].create_table_stmt_t); } #line 3189 "bison_parser.cpp" /* yacc.c:1652 */ break; case 13: #line 439 "bison.y" /* yacc.c:1652 */ { (yyval.create_stmt_t) = new CreateStmt(); (yyval.create_stmt_t)->case_idx_ = CASE1; (yyval.create_stmt_t)->create_index_stmt_ = (yyvsp[0].create_index_stmt_t); } #line 3200 "bison_parser.cpp" /* yacc.c:1652 */ break; case 14: #line 445 "bison.y" /* yacc.c:1652 */ { (yyval.create_stmt_t) = new CreateStmt(); (yyval.create_stmt_t)->case_idx_ = CASE2; (yyval.create_stmt_t)->create_view_stmt_ = (yyvsp[0].create_view_stmt_t); } #line 3211 "bison_parser.cpp" /* yacc.c:1652 */ break; case 15: #line 454 "bison.y" /* yacc.c:1652 */ { (yyval.drop_stmt_t) = new DropStmt(); (yyval.drop_stmt_t)->case_idx_ = CASE0; (yyval.drop_stmt_t)->drop_index_stmt_ = (yyvsp[0].drop_index_stmt_t); } #line 3222 "bison_parser.cpp" /* yacc.c:1652 */ break; case 16: #line 460 "bison.y" /* yacc.c:1652 */ { (yyval.drop_stmt_t) = new DropStmt(); (yyval.drop_stmt_t)->case_idx_ = CASE1; (yyval.drop_stmt_t)->drop_table_stmt_ = (yyvsp[0].drop_table_stmt_t); } #line 3233 "bison_parser.cpp" /* yacc.c:1652 */ break; case 17: #line 466 "bison.y" /* yacc.c:1652 */ { (yyval.drop_stmt_t) = new DropStmt(); (yyval.drop_stmt_t)->case_idx_ = CASE2; (yyval.drop_stmt_t)->drop_view_stmt_ = (yyvsp[0].drop_view_stmt_t); } #line 3244 "bison_parser.cpp" /* yacc.c:1652 */ break; case 18: #line 475 "bison.y" /* yacc.c:1652 */ { (yyval.alter_stmt_t) = new AlterStmt(); (yyval.alter_stmt_t)->case_idx_ = CASE0; (yyval.alter_stmt_t)->table_name_ = (yyvsp[-1].table_name_t); (yyval.alter_stmt_t)->alter_action_ = (yyvsp[0].alter_action_t); } #line 3256 "bison_parser.cpp" /* yacc.c:1652 */ break; case 19: #line 485 "bison.y" /* yacc.c:1652 */ { (yyval.select_stmt_t) = new SelectStmt(); (yyval.select_stmt_t)->case_idx_ = CASE0; (yyval.select_stmt_t)->select_no_parens_ = (yyvsp[0].select_no_parens_t); } #line 3267 "bison_parser.cpp" /* yacc.c:1652 */ break; case 20: #line 491 "bison.y" /* yacc.c:1652 */ { (yyval.select_stmt_t) = new SelectStmt(); (yyval.select_stmt_t)->case_idx_ = CASE1; (yyval.select_stmt_t)->select_with_parens_ = (yyvsp[0].select_with_parens_t); } #line 3278 "bison_parser.cpp" /* yacc.c:1652 */ break; case 21: #line 500 "bison.y" /* yacc.c:1652 */ { (yyval.select_with_parens_t) = new SelectWithParens(); (yyval.select_with_parens_t)->case_idx_ = CASE0; (yyval.select_with_parens_t)->select_no_parens_ = (yyvsp[-1].select_no_parens_t); } #line 3289 "bison_parser.cpp" /* yacc.c:1652 */ break; case 22: #line 506 "bison.y" /* yacc.c:1652 */ { (yyval.select_with_parens_t) = new SelectWithParens(); (yyval.select_with_parens_t)->case_idx_ = CASE1; (yyval.select_with_parens_t)->select_with_parens_ = (yyvsp[-1].select_with_parens_t); } #line 3300 "bison_parser.cpp" /* yacc.c:1652 */ break; case 23: #line 515 "bison.y" /* yacc.c:1652 */ { (yyval.select_no_parens_t) = new SelectNoParens(); (yyval.select_no_parens_t)->case_idx_ = CASE0; (yyval.select_no_parens_t)->opt_with_clause_ = (yyvsp[-3].opt_with_clause_t); (yyval.select_no_parens_t)->select_clause_list_ = (yyvsp[-2].select_clause_list_t); (yyval.select_no_parens_t)->opt_order_clause_ = (yyvsp[-1].opt_order_clause_t); (yyval.select_no_parens_t)->opt_limit_clause_ = (yyvsp[0].opt_limit_clause_t); } #line 3314 "bison_parser.cpp" /* yacc.c:1652 */ break; case 24: #line 527 "bison.y" /* yacc.c:1652 */ { (yyval.select_clause_list_t) = new SelectClauseList(); (yyval.select_clause_list_t)->case_idx_ = CASE0; (yyval.select_clause_list_t)->select_clause_ = (yyvsp[0].select_clause_t); } #line 3325 "bison_parser.cpp" /* yacc.c:1652 */ break; case 25: #line 533 "bison.y" /* yacc.c:1652 */ { (yyval.select_clause_list_t) = new SelectClauseList(); (yyval.select_clause_list_t)->case_idx_ = CASE1; (yyval.select_clause_list_t)->select_clause_ = (yyvsp[-2].select_clause_t); (yyval.select_clause_list_t)->combine_clause_ = (yyvsp[-1].combine_clause_t); (yyval.select_clause_list_t)->select_clause_list_ = (yyvsp[0].select_clause_list_t); } #line 3338 "bison_parser.cpp" /* yacc.c:1652 */ break; case 26: #line 544 "bison.y" /* yacc.c:1652 */ { (yyval.select_clause_t) = new SelectClause(); (yyval.select_clause_t)->case_idx_ = CASE0; (yyval.select_clause_t)->opt_all_or_distinct_ = (yyvsp[-5].opt_all_or_distinct_t); (yyval.select_clause_t)->select_target_ = (yyvsp[-4].select_target_t); (yyval.select_clause_t)->opt_from_clause_ = (yyvsp[-3].opt_from_clause_t); (yyval.select_clause_t)->opt_where_clause_ = (yyvsp[-2].opt_where_clause_t); (yyval.select_clause_t)->opt_group_clause_ = (yyvsp[-1].opt_group_clause_t); (yyval.select_clause_t)->opt_window_clause_ = (yyvsp[0].opt_window_clause_t); } #line 3354 "bison_parser.cpp" /* yacc.c:1652 */ break; case 27: #line 558 "bison.y" /* yacc.c:1652 */ { (yyval.combine_clause_t) = new CombineClause(); (yyval.combine_clause_t)->case_idx_ = CASE0; } #line 3364 "bison_parser.cpp" /* yacc.c:1652 */ break; case 28: #line 563 "bison.y" /* yacc.c:1652 */ { (yyval.combine_clause_t) = new CombineClause(); (yyval.combine_clause_t)->case_idx_ = CASE1; } #line 3374 "bison_parser.cpp" /* yacc.c:1652 */ break; case 29: #line 568 "bison.y" /* yacc.c:1652 */ { (yyval.combine_clause_t) = new CombineClause(); (yyval.combine_clause_t)->case_idx_ = CASE2; } #line 3384 "bison_parser.cpp" /* yacc.c:1652 */ break; case 30: #line 576 "bison.y" /* yacc.c:1652 */ { (yyval.opt_from_clause_t) = new OptFromClause(); (yyval.opt_from_clause_t)->case_idx_ = CASE0; (yyval.opt_from_clause_t)->from_clause_ = (yyvsp[0].from_clause_t); } #line 3395 "bison_parser.cpp" /* yacc.c:1652 */ break; case 31: #line 582 "bison.y" /* yacc.c:1652 */ { (yyval.opt_from_clause_t) = new OptFromClause(); (yyval.opt_from_clause_t)->case_idx_ = CASE1; } #line 3405 "bison_parser.cpp" /* yacc.c:1652 */ break; case 32: #line 590 "bison.y" /* yacc.c:1652 */ { (yyval.select_target_t) = new SelectTarget(); (yyval.select_target_t)->case_idx_ = CASE0; (yyval.select_target_t)->expr_list_ = (yyvsp[0].expr_list_t); } #line 3416 "bison_parser.cpp" /* yacc.c:1652 */ break; case 33: #line 599 "bison.y" /* yacc.c:1652 */ { (yyval.opt_window_clause_t) = new OptWindowClause(); (yyval.opt_window_clause_t)->case_idx_ = CASE0; (yyval.opt_window_clause_t)->window_clause_ = (yyvsp[0].window_clause_t); } #line 3427 "bison_parser.cpp" /* yacc.c:1652 */ break; case 34: #line 605 "bison.y" /* yacc.c:1652 */ { (yyval.opt_window_clause_t) = new OptWindowClause(); (yyval.opt_window_clause_t)->case_idx_ = CASE1; } #line 3437 "bison_parser.cpp" /* yacc.c:1652 */ break; case 35: #line 613 "bison.y" /* yacc.c:1652 */ { (yyval.window_clause_t) = new WindowClause(); (yyval.window_clause_t)->case_idx_ = CASE0; (yyval.window_clause_t)->window_def_list_ = (yyvsp[0].window_def_list_t); } #line 3448 "bison_parser.cpp" /* yacc.c:1652 */ break; case 36: #line 622 "bison.y" /* yacc.c:1652 */ { (yyval.window_def_list_t) = new WindowDefList(); (yyval.window_def_list_t)->case_idx_ = CASE0; (yyval.window_def_list_t)->window_def_ = (yyvsp[0].window_def_t); } #line 3459 "bison_parser.cpp" /* yacc.c:1652 */ break; case 37: #line 628 "bison.y" /* yacc.c:1652 */ { (yyval.window_def_list_t) = new WindowDefList(); (yyval.window_def_list_t)->case_idx_ = CASE1; (yyval.window_def_list_t)->window_def_ = (yyvsp[-2].window_def_t); (yyval.window_def_list_t)->window_def_list_ = (yyvsp[0].window_def_list_t); } #line 3471 "bison_parser.cpp" /* yacc.c:1652 */ break; case 38: #line 638 "bison.y" /* yacc.c:1652 */ { (yyval.window_def_t) = new WindowDef(); (yyval.window_def_t)->case_idx_ = CASE0; (yyval.window_def_t)->window_name_ = (yyvsp[-4].window_name_t); (yyval.window_def_t)->window_ = (yyvsp[-1].window_t); if ((yyval.window_def_t)) { auto tmp1 = (yyval.window_def_t)->window_name_; if (tmp1) { auto tmp2 = tmp1->identifier_; if (tmp2) { tmp2->data_type_ = kDataWindowName; tmp2->scope_ = 1; tmp2->data_flag_ = (DATAFLAG)1; } } } } #line 3495 "bison_parser.cpp" /* yacc.c:1652 */ break; case 39: #line 660 "bison.y" /* yacc.c:1652 */ { (yyval.window_name_t) = new WindowName(); (yyval.window_name_t)->case_idx_ = CASE0; (yyval.window_name_t)->identifier_ = (yyvsp[0].identifier_t); } #line 3506 "bison_parser.cpp" /* yacc.c:1652 */ break; case 40: #line 669 "bison.y" /* yacc.c:1652 */ { (yyval.window_t) = new Window(); (yyval.window_t)->case_idx_ = CASE0; (yyval.window_t)->opt_exist_window_name_ = (yyvsp[-3].opt_exist_window_name_t); (yyval.window_t)->opt_partition_ = (yyvsp[-2].opt_partition_t); (yyval.window_t)->opt_order_clause_ = (yyvsp[-1].opt_order_clause_t); (yyval.window_t)->opt_frame_clause_ = (yyvsp[0].opt_frame_clause_t); } #line 3520 "bison_parser.cpp" /* yacc.c:1652 */ break; case 41: #line 681 "bison.y" /* yacc.c:1652 */ { (yyval.opt_partition_t) = new OptPartition(); (yyval.opt_partition_t)->case_idx_ = CASE0; (yyval.opt_partition_t)->expr_list_ = (yyvsp[0].expr_list_t); } #line 3531 "bison_parser.cpp" /* yacc.c:1652 */ break; case 42: #line 687 "bison.y" /* yacc.c:1652 */ { (yyval.opt_partition_t) = new OptPartition(); (yyval.opt_partition_t)->case_idx_ = CASE1; } #line 3541 "bison_parser.cpp" /* yacc.c:1652 */ break; case 43: #line 695 "bison.y" /* yacc.c:1652 */ { (yyval.opt_frame_clause_t) = new OptFrameClause(); (yyval.opt_frame_clause_t)->case_idx_ = CASE0; (yyval.opt_frame_clause_t)->range_or_rows_ = (yyvsp[-2].range_or_rows_t); (yyval.opt_frame_clause_t)->frame_bound_start_ = (yyvsp[-1].frame_bound_start_t); (yyval.opt_frame_clause_t)->opt_frame_exclude_ = (yyvsp[0].opt_frame_exclude_t); } #line 3554 "bison_parser.cpp" /* yacc.c:1652 */ break; case 44: #line 703 "bison.y" /* yacc.c:1652 */ { (yyval.opt_frame_clause_t) = new OptFrameClause(); (yyval.opt_frame_clause_t)->case_idx_ = CASE1; (yyval.opt_frame_clause_t)->range_or_rows_ = (yyvsp[-5].range_or_rows_t); (yyval.opt_frame_clause_t)->frame_bound_start_ = (yyvsp[-3].frame_bound_start_t); (yyval.opt_frame_clause_t)->frame_bound_end_ = (yyvsp[-1].frame_bound_end_t); (yyval.opt_frame_clause_t)->opt_frame_exclude_ = (yyvsp[0].opt_frame_exclude_t); } #line 3568 "bison_parser.cpp" /* yacc.c:1652 */ break; case 45: #line 712 "bison.y" /* yacc.c:1652 */ { (yyval.opt_frame_clause_t) = new OptFrameClause(); (yyval.opt_frame_clause_t)->case_idx_ = CASE2; } #line 3578 "bison_parser.cpp" /* yacc.c:1652 */ break; case 46: #line 720 "bison.y" /* yacc.c:1652 */ { (yyval.range_or_rows_t) = new RangeOrRows(); (yyval.range_or_rows_t)->case_idx_ = CASE0; } #line 3588 "bison_parser.cpp" /* yacc.c:1652 */ break; case 47: #line 725 "bison.y" /* yacc.c:1652 */ { (yyval.range_or_rows_t) = new RangeOrRows(); (yyval.range_or_rows_t)->case_idx_ = CASE1; } #line 3598 "bison_parser.cpp" /* yacc.c:1652 */ break; case 48: #line 730 "bison.y" /* yacc.c:1652 */ { (yyval.range_or_rows_t) = new RangeOrRows(); (yyval.range_or_rows_t)->case_idx_ = CASE2; } #line 3608 "bison_parser.cpp" /* yacc.c:1652 */ break; case 49: #line 738 "bison.y" /* yacc.c:1652 */ { (yyval.frame_bound_start_t) = new FrameBoundStart(); (yyval.frame_bound_start_t)->case_idx_ = CASE0; (yyval.frame_bound_start_t)->frame_bound_ = (yyvsp[0].frame_bound_t); } #line 3619 "bison_parser.cpp" /* yacc.c:1652 */ break; case 50: #line 744 "bison.y" /* yacc.c:1652 */ { (yyval.frame_bound_start_t) = new FrameBoundStart(); (yyval.frame_bound_start_t)->case_idx_ = CASE1; } #line 3629 "bison_parser.cpp" /* yacc.c:1652 */ break; case 51: #line 752 "bison.y" /* yacc.c:1652 */ { (yyval.frame_bound_end_t) = new FrameBoundEnd(); (yyval.frame_bound_end_t)->case_idx_ = CASE0; (yyval.frame_bound_end_t)->frame_bound_ = (yyvsp[0].frame_bound_t); } #line 3640 "bison_parser.cpp" /* yacc.c:1652 */ break; case 52: #line 758 "bison.y" /* yacc.c:1652 */ { (yyval.frame_bound_end_t) = new FrameBoundEnd(); (yyval.frame_bound_end_t)->case_idx_ = CASE1; } #line 3650 "bison_parser.cpp" /* yacc.c:1652 */ break; case 53: #line 766 "bison.y" /* yacc.c:1652 */ { (yyval.frame_bound_t) = new FrameBound(); (yyval.frame_bound_t)->case_idx_ = CASE0; (yyval.frame_bound_t)->expr_ = (yyvsp[-1].expr_t); } #line 3661 "bison_parser.cpp" /* yacc.c:1652 */ break; case 54: #line 772 "bison.y" /* yacc.c:1652 */ { (yyval.frame_bound_t) = new FrameBound(); (yyval.frame_bound_t)->case_idx_ = CASE1; (yyval.frame_bound_t)->expr_ = (yyvsp[-1].expr_t); } #line 3672 "bison_parser.cpp" /* yacc.c:1652 */ break; case 55: #line 778 "bison.y" /* yacc.c:1652 */ { (yyval.frame_bound_t) = new FrameBound(); (yyval.frame_bound_t)->case_idx_ = CASE2; } #line 3682 "bison_parser.cpp" /* yacc.c:1652 */ break; case 56: #line 786 "bison.y" /* yacc.c:1652 */ { (yyval.opt_frame_exclude_t) = new OptFrameExclude(); (yyval.opt_frame_exclude_t)->case_idx_ = CASE0; (yyval.opt_frame_exclude_t)->frame_exclude_ = (yyvsp[0].frame_exclude_t); } #line 3693 "bison_parser.cpp" /* yacc.c:1652 */ break; case 57: #line 792 "bison.y" /* yacc.c:1652 */ { (yyval.opt_frame_exclude_t) = new OptFrameExclude(); (yyval.opt_frame_exclude_t)->case_idx_ = CASE1; } #line 3703 "bison_parser.cpp" /* yacc.c:1652 */ break; case 58: #line 800 "bison.y" /* yacc.c:1652 */ { (yyval.frame_exclude_t) = new FrameExclude(); (yyval.frame_exclude_t)->case_idx_ = CASE0; } #line 3713 "bison_parser.cpp" /* yacc.c:1652 */ break; case 59: #line 805 "bison.y" /* yacc.c:1652 */ { (yyval.frame_exclude_t) = new FrameExclude(); (yyval.frame_exclude_t)->case_idx_ = CASE1; } #line 3723 "bison_parser.cpp" /* yacc.c:1652 */ break; case 60: #line 810 "bison.y" /* yacc.c:1652 */ { (yyval.frame_exclude_t) = new FrameExclude(); (yyval.frame_exclude_t)->case_idx_ = CASE2; } #line 3733 "bison_parser.cpp" /* yacc.c:1652 */ break; case 61: #line 815 "bison.y" /* yacc.c:1652 */ { (yyval.frame_exclude_t) = new FrameExclude(); (yyval.frame_exclude_t)->case_idx_ = CASE3; } #line 3743 "bison_parser.cpp" /* yacc.c:1652 */ break; case 62: #line 823 "bison.y" /* yacc.c:1652 */ { (yyval.opt_exist_window_name_t) = new OptExistWindowName(); (yyval.opt_exist_window_name_t)->case_idx_ = CASE0; (yyval.opt_exist_window_name_t)->identifier_ = (yyvsp[0].identifier_t); if ((yyval.opt_exist_window_name_t)) { auto tmp1 = (yyval.opt_exist_window_name_t)->identifier_; if (tmp1) { tmp1->data_type_ = kDataWindowName; tmp1->scope_ = 1; tmp1->data_flag_ = (DATAFLAG)8; } } } #line 3763 "bison_parser.cpp" /* yacc.c:1652 */ break; case 63: #line 838 "bison.y" /* yacc.c:1652 */ { (yyval.opt_exist_window_name_t) = new OptExistWindowName(); (yyval.opt_exist_window_name_t)->case_idx_ = CASE1; } #line 3773 "bison_parser.cpp" /* yacc.c:1652 */ break; case 64: #line 846 "bison.y" /* yacc.c:1652 */ { (yyval.opt_group_clause_t) = new OptGroupClause(); (yyval.opt_group_clause_t)->case_idx_ = CASE0; (yyval.opt_group_clause_t)->expr_list_ = (yyvsp[-1].expr_list_t); (yyval.opt_group_clause_t)->opt_having_clause_ = (yyvsp[0].opt_having_clause_t); } #line 3785 "bison_parser.cpp" /* yacc.c:1652 */ break; case 65: #line 853 "bison.y" /* yacc.c:1652 */ { (yyval.opt_group_clause_t) = new OptGroupClause(); (yyval.opt_group_clause_t)->case_idx_ = CASE1; } #line 3795 "bison_parser.cpp" /* yacc.c:1652 */ break; case 66: #line 861 "bison.y" /* yacc.c:1652 */ { (yyval.opt_having_clause_t) = new OptHavingClause(); (yyval.opt_having_clause_t)->case_idx_ = CASE0; (yyval.opt_having_clause_t)->expr_ = (yyvsp[0].expr_t); } #line 3806 "bison_parser.cpp" /* yacc.c:1652 */ break; case 67: #line 867 "bison.y" /* yacc.c:1652 */ { (yyval.opt_having_clause_t) = new OptHavingClause(); (yyval.opt_having_clause_t)->case_idx_ = CASE1; } #line 3816 "bison_parser.cpp" /* yacc.c:1652 */ break; case 68: #line 875 "bison.y" /* yacc.c:1652 */ { (yyval.opt_where_clause_t) = new OptWhereClause(); (yyval.opt_where_clause_t)->case_idx_ = CASE0; (yyval.opt_where_clause_t)->where_clause_ = (yyvsp[0].where_clause_t); } #line 3827 "bison_parser.cpp" /* yacc.c:1652 */ break; case 69: #line 881 "bison.y" /* yacc.c:1652 */ { (yyval.opt_where_clause_t) = new OptWhereClause(); (yyval.opt_where_clause_t)->case_idx_ = CASE1; } #line 3837 "bison_parser.cpp" /* yacc.c:1652 */ break; case 70: #line 889 "bison.y" /* yacc.c:1652 */ { (yyval.where_clause_t) = new WhereClause(); (yyval.where_clause_t)->case_idx_ = CASE0; (yyval.where_clause_t)->expr_ = (yyvsp[0].expr_t); } #line 3848 "bison_parser.cpp" /* yacc.c:1652 */ break; case 71: #line 898 "bison.y" /* yacc.c:1652 */ { (yyval.from_clause_t) = new FromClause(); (yyval.from_clause_t)->case_idx_ = CASE0; (yyval.from_clause_t)->table_ref_ = (yyvsp[0].table_ref_t); } #line 3859 "bison_parser.cpp" /* yacc.c:1652 */ break; case 72: #line 907 "bison.y" /* yacc.c:1652 */ { (yyval.table_ref_t) = new TableRef(); (yyval.table_ref_t)->case_idx_ = CASE0; (yyval.table_ref_t)->opt_table_prefix_ = (yyvsp[-2].opt_table_prefix_t); (yyval.table_ref_t)->table_name_ = (yyvsp[-1].table_name_t); (yyval.table_ref_t)->opt_on_or_using_ = (yyvsp[0].opt_on_or_using_t); } #line 3872 "bison_parser.cpp" /* yacc.c:1652 */ break; case 73: #line 915 "bison.y" /* yacc.c:1652 */ { (yyval.table_ref_t) = new TableRef(); (yyval.table_ref_t)->case_idx_ = CASE1; (yyval.table_ref_t)->opt_table_prefix_ = (yyvsp[-4].opt_table_prefix_t); (yyval.table_ref_t)->select_no_parens_ = (yyvsp[-2].select_no_parens_t); (yyval.table_ref_t)->opt_on_or_using_ = (yyvsp[0].opt_on_or_using_t); } #line 3885 "bison_parser.cpp" /* yacc.c:1652 */ break; case 74: #line 923 "bison.y" /* yacc.c:1652 */ { (yyval.table_ref_t) = new TableRef(); (yyval.table_ref_t)->case_idx_ = CASE2; (yyval.table_ref_t)->opt_table_prefix_ = (yyvsp[-4].opt_table_prefix_t); (yyval.table_ref_t)->table_ref_ = (yyvsp[-2].table_ref_t); (yyval.table_ref_t)->opt_on_or_using_ = (yyvsp[0].opt_on_or_using_t); } #line 3898 "bison_parser.cpp" /* yacc.c:1652 */ break; case 75: #line 934 "bison.y" /* yacc.c:1652 */ { (yyval.opt_on_or_using_t) = new OptOnOrUsing(); (yyval.opt_on_or_using_t)->case_idx_ = CASE0; (yyval.opt_on_or_using_t)->on_or_using_ = (yyvsp[0].on_or_using_t); } #line 3909 "bison_parser.cpp" /* yacc.c:1652 */ break; case 76: #line 940 "bison.y" /* yacc.c:1652 */ { (yyval.opt_on_or_using_t) = new OptOnOrUsing(); (yyval.opt_on_or_using_t)->case_idx_ = CASE1; } #line 3919 "bison_parser.cpp" /* yacc.c:1652 */ break; case 77: #line 948 "bison.y" /* yacc.c:1652 */ { (yyval.on_or_using_t) = new OnOrUsing(); (yyval.on_or_using_t)->case_idx_ = CASE0; (yyval.on_or_using_t)->expr_ = (yyvsp[0].expr_t); } #line 3930 "bison_parser.cpp" /* yacc.c:1652 */ break; case 78: #line 954 "bison.y" /* yacc.c:1652 */ { (yyval.on_or_using_t) = new OnOrUsing(); (yyval.on_or_using_t)->case_idx_ = CASE1; (yyval.on_or_using_t)->column_name_list_ = (yyvsp[-1].column_name_list_t); } #line 3941 "bison_parser.cpp" /* yacc.c:1652 */ break; case 79: #line 963 "bison.y" /* yacc.c:1652 */ { (yyval.column_name_list_t) = new ColumnNameList(); (yyval.column_name_list_t)->case_idx_ = CASE0; (yyval.column_name_list_t)->column_name_ = (yyvsp[0].column_name_t); } #line 3952 "bison_parser.cpp" /* yacc.c:1652 */ break; case 80: #line 969 "bison.y" /* yacc.c:1652 */ { (yyval.column_name_list_t) = new ColumnNameList(); (yyval.column_name_list_t)->case_idx_ = CASE1; (yyval.column_name_list_t)->column_name_ = (yyvsp[-2].column_name_t); (yyval.column_name_list_t)->column_name_list_ = (yyvsp[0].column_name_list_t); } #line 3964 "bison_parser.cpp" /* yacc.c:1652 */ break; case 81: #line 979 "bison.y" /* yacc.c:1652 */ { (yyval.opt_table_prefix_t) = new OptTablePrefix(); (yyval.opt_table_prefix_t)->case_idx_ = CASE0; (yyval.opt_table_prefix_t)->table_ref_ = (yyvsp[-1].table_ref_t); (yyval.opt_table_prefix_t)->join_op_ = (yyvsp[0].join_op_t); } #line 3976 "bison_parser.cpp" /* yacc.c:1652 */ break; case 82: #line 986 "bison.y" /* yacc.c:1652 */ { (yyval.opt_table_prefix_t) = new OptTablePrefix(); (yyval.opt_table_prefix_t)->case_idx_ = CASE1; } #line 3986 "bison_parser.cpp" /* yacc.c:1652 */ break; case 83: #line 994 "bison.y" /* yacc.c:1652 */ { (yyval.join_op_t) = new JoinOp(); (yyval.join_op_t)->case_idx_ = CASE0; } #line 3996 "bison_parser.cpp" /* yacc.c:1652 */ break; case 84: #line 999 "bison.y" /* yacc.c:1652 */ { (yyval.join_op_t) = new JoinOp(); (yyval.join_op_t)->case_idx_ = CASE1; } #line 4006 "bison_parser.cpp" /* yacc.c:1652 */ break; case 85: #line 1004 "bison.y" /* yacc.c:1652 */ { (yyval.join_op_t) = new JoinOp(); (yyval.join_op_t)->case_idx_ = CASE2; (yyval.join_op_t)->opt_join_type_ = (yyvsp[-1].opt_join_type_t); } #line 4017 "bison_parser.cpp" /* yacc.c:1652 */ break; case 86: #line 1013 "bison.y" /* yacc.c:1652 */ { (yyval.opt_join_type_t) = new OptJoinType(); (yyval.opt_join_type_t)->case_idx_ = CASE0; } #line 4027 "bison_parser.cpp" /* yacc.c:1652 */ break; case 87: #line 1018 "bison.y" /* yacc.c:1652 */ { (yyval.opt_join_type_t) = new OptJoinType(); (yyval.opt_join_type_t)->case_idx_ = CASE1; } #line 4037 "bison_parser.cpp" /* yacc.c:1652 */ break; case 88: #line 1023 "bison.y" /* yacc.c:1652 */ { (yyval.opt_join_type_t) = new OptJoinType(); (yyval.opt_join_type_t)->case_idx_ = CASE2; } #line 4047 "bison_parser.cpp" /* yacc.c:1652 */ break; case 89: #line 1028 "bison.y" /* yacc.c:1652 */ { (yyval.opt_join_type_t) = new OptJoinType(); (yyval.opt_join_type_t)->case_idx_ = CASE3; } #line 4057 "bison_parser.cpp" /* yacc.c:1652 */ break; case 90: #line 1033 "bison.y" /* yacc.c:1652 */ { (yyval.opt_join_type_t) = new OptJoinType(); (yyval.opt_join_type_t)->case_idx_ = CASE4; } #line 4067 "bison_parser.cpp" /* yacc.c:1652 */ break; case 91: #line 1041 "bison.y" /* yacc.c:1652 */ { (yyval.expr_list_t) = new ExprList(); (yyval.expr_list_t)->case_idx_ = CASE0; (yyval.expr_list_t)->expr_ = (yyvsp[-2].expr_t); (yyval.expr_list_t)->expr_list_ = (yyvsp[0].expr_list_t); } #line 4079 "bison_parser.cpp" /* yacc.c:1652 */ break; case 92: #line 1048 "bison.y" /* yacc.c:1652 */ { (yyval.expr_list_t) = new ExprList(); (yyval.expr_list_t)->case_idx_ = CASE1; (yyval.expr_list_t)->expr_ = (yyvsp[0].expr_t); } #line 4090 "bison_parser.cpp" /* yacc.c:1652 */ break; case 93: #line 1057 "bison.y" /* yacc.c:1652 */ { (yyval.opt_limit_clause_t) = new OptLimitClause(); (yyval.opt_limit_clause_t)->case_idx_ = CASE0; (yyval.opt_limit_clause_t)->limit_clause_ = (yyvsp[0].limit_clause_t); } #line 4101 "bison_parser.cpp" /* yacc.c:1652 */ break; case 94: #line 1063 "bison.y" /* yacc.c:1652 */ { (yyval.opt_limit_clause_t) = new OptLimitClause(); (yyval.opt_limit_clause_t)->case_idx_ = CASE1; } #line 4111 "bison_parser.cpp" /* yacc.c:1652 */ break; case 95: #line 1071 "bison.y" /* yacc.c:1652 */ { (yyval.limit_clause_t) = new LimitClause(); (yyval.limit_clause_t)->case_idx_ = CASE0; (yyval.limit_clause_t)->expr_1_ = (yyvsp[0].expr_t); } #line 4122 "bison_parser.cpp" /* yacc.c:1652 */ break; case 96: #line 1077 "bison.y" /* yacc.c:1652 */ { (yyval.limit_clause_t) = new LimitClause(); (yyval.limit_clause_t)->case_idx_ = CASE1; (yyval.limit_clause_t)->expr_1_ = (yyvsp[-2].expr_t); (yyval.limit_clause_t)->expr_2_ = (yyvsp[0].expr_t); } #line 4134 "bison_parser.cpp" /* yacc.c:1652 */ break; case 97: #line 1084 "bison.y" /* yacc.c:1652 */ { (yyval.limit_clause_t) = new LimitClause(); (yyval.limit_clause_t)->case_idx_ = CASE2; (yyval.limit_clause_t)->expr_1_ = (yyvsp[-2].expr_t); (yyval.limit_clause_t)->expr_2_ = (yyvsp[0].expr_t); } #line 4146 "bison_parser.cpp" /* yacc.c:1652 */ break; case 98: #line 1094 "bison.y" /* yacc.c:1652 */ { (yyval.opt_order_clause_t) = new OptOrderClause(); (yyval.opt_order_clause_t)->case_idx_ = CASE0; (yyval.opt_order_clause_t)->order_item_list_ = (yyvsp[0].order_item_list_t); } #line 4157 "bison_parser.cpp" /* yacc.c:1652 */ break; case 99: #line 1100 "bison.y" /* yacc.c:1652 */ { (yyval.opt_order_clause_t) = new OptOrderClause(); (yyval.opt_order_clause_t)->case_idx_ = CASE1; } #line 4167 "bison_parser.cpp" /* yacc.c:1652 */ break; case 100: #line 1108 "bison.y" /* yacc.c:1652 */ { (yyval.opt_order_nulls_t) = new OptOrderNulls(); (yyval.opt_order_nulls_t)->case_idx_ = CASE0; } #line 4177 "bison_parser.cpp" /* yacc.c:1652 */ break; case 101: #line 1113 "bison.y" /* yacc.c:1652 */ { (yyval.opt_order_nulls_t) = new OptOrderNulls(); (yyval.opt_order_nulls_t)->case_idx_ = CASE1; } #line 4187 "bison_parser.cpp" /* yacc.c:1652 */ break; case 102: #line 1118 "bison.y" /* yacc.c:1652 */ { (yyval.opt_order_nulls_t) = new OptOrderNulls(); (yyval.opt_order_nulls_t)->case_idx_ = CASE2; } #line 4197 "bison_parser.cpp" /* yacc.c:1652 */ break; case 103: #line 1126 "bison.y" /* yacc.c:1652 */ { (yyval.order_item_list_t) = new OrderItemList(); (yyval.order_item_list_t)->case_idx_ = CASE0; (yyval.order_item_list_t)->order_item_ = (yyvsp[0].order_item_t); } #line 4208 "bison_parser.cpp" /* yacc.c:1652 */ break; case 104: #line 1132 "bison.y" /* yacc.c:1652 */ { (yyval.order_item_list_t) = new OrderItemList(); (yyval.order_item_list_t)->case_idx_ = CASE1; (yyval.order_item_list_t)->order_item_ = (yyvsp[-2].order_item_t); (yyval.order_item_list_t)->order_item_list_ = (yyvsp[0].order_item_list_t); } #line 4220 "bison_parser.cpp" /* yacc.c:1652 */ break; case 105: #line 1142 "bison.y" /* yacc.c:1652 */ { (yyval.order_item_t) = new OrderItem(); (yyval.order_item_t)->case_idx_ = CASE0; (yyval.order_item_t)->expr_ = (yyvsp[-2].expr_t); (yyval.order_item_t)->opt_order_behavior_ = (yyvsp[-1].opt_order_behavior_t); (yyval.order_item_t)->opt_order_nulls_ = (yyvsp[0].opt_order_nulls_t); } #line 4233 "bison_parser.cpp" /* yacc.c:1652 */ break; case 106: #line 1153 "bison.y" /* yacc.c:1652 */ { (yyval.opt_order_behavior_t) = new OptOrderBehavior(); (yyval.opt_order_behavior_t)->case_idx_ = CASE0; } #line 4243 "bison_parser.cpp" /* yacc.c:1652 */ break; case 107: #line 1158 "bison.y" /* yacc.c:1652 */ { (yyval.opt_order_behavior_t) = new OptOrderBehavior(); (yyval.opt_order_behavior_t)->case_idx_ = CASE1; } #line 4253 "bison_parser.cpp" /* yacc.c:1652 */ break; case 108: #line 1163 "bison.y" /* yacc.c:1652 */ { (yyval.opt_order_behavior_t) = new OptOrderBehavior(); (yyval.opt_order_behavior_t)->case_idx_ = CASE2; } #line 4263 "bison_parser.cpp" /* yacc.c:1652 */ break; case 109: #line 1171 "bison.y" /* yacc.c:1652 */ { (yyval.opt_with_clause_t) = new OptWithClause(); (yyval.opt_with_clause_t)->case_idx_ = CASE0; (yyval.opt_with_clause_t)->cte_table_list_ = (yyvsp[0].cte_table_list_t); } #line 4274 "bison_parser.cpp" /* yacc.c:1652 */ break; case 110: #line 1177 "bison.y" /* yacc.c:1652 */ { (yyval.opt_with_clause_t) = new OptWithClause(); (yyval.opt_with_clause_t)->case_idx_ = CASE1; (yyval.opt_with_clause_t)->cte_table_list_ = (yyvsp[0].cte_table_list_t); } #line 4285 "bison_parser.cpp" /* yacc.c:1652 */ break; case 111: #line 1183 "bison.y" /* yacc.c:1652 */ { (yyval.opt_with_clause_t) = new OptWithClause(); (yyval.opt_with_clause_t)->case_idx_ = CASE2; } #line 4295 "bison_parser.cpp" /* yacc.c:1652 */ break; case 112: #line 1191 "bison.y" /* yacc.c:1652 */ { (yyval.cte_table_list_t) = new CteTableList(); (yyval.cte_table_list_t)->case_idx_ = CASE0; (yyval.cte_table_list_t)->cte_table_ = (yyvsp[0].cte_table_t); } #line 4306 "bison_parser.cpp" /* yacc.c:1652 */ break; case 113: #line 1197 "bison.y" /* yacc.c:1652 */ { (yyval.cte_table_list_t) = new CteTableList(); (yyval.cte_table_list_t)->case_idx_ = CASE1; (yyval.cte_table_list_t)->cte_table_ = (yyvsp[-2].cte_table_t); (yyval.cte_table_list_t)->cte_table_list_ = (yyvsp[0].cte_table_list_t); } #line 4318 "bison_parser.cpp" /* yacc.c:1652 */ break; case 114: #line 1207 "bison.y" /* yacc.c:1652 */ { (yyval.cte_table_t) = new CteTable(); (yyval.cte_table_t)->case_idx_ = CASE0; (yyval.cte_table_t)->cte_table_name_ = (yyvsp[-4].cte_table_name_t); (yyval.cte_table_t)->select_stmt_ = (yyvsp[-1].select_stmt_t); } #line 4330 "bison_parser.cpp" /* yacc.c:1652 */ break; case 115: #line 1217 "bison.y" /* yacc.c:1652 */ { (yyval.cte_table_name_t) = new CteTableName(); (yyval.cte_table_name_t)->case_idx_ = CASE0; (yyval.cte_table_name_t)->table_name_ = (yyvsp[-1].table_name_t); (yyval.cte_table_name_t)->opt_column_name_list_p_ = (yyvsp[0].opt_column_name_list_p_t); } #line 4342 "bison_parser.cpp" /* yacc.c:1652 */ break; case 116: #line 1227 "bison.y" /* yacc.c:1652 */ { (yyval.opt_all_or_distinct_t) = new OptAllOrDistinct(); (yyval.opt_all_or_distinct_t)->case_idx_ = CASE0; } #line 4352 "bison_parser.cpp" /* yacc.c:1652 */ break; case 117: #line 1232 "bison.y" /* yacc.c:1652 */ { (yyval.opt_all_or_distinct_t) = new OptAllOrDistinct(); (yyval.opt_all_or_distinct_t)->case_idx_ = CASE1; } #line 4362 "bison_parser.cpp" /* yacc.c:1652 */ break; case 118: #line 1237 "bison.y" /* yacc.c:1652 */ { (yyval.opt_all_or_distinct_t) = new OptAllOrDistinct(); (yyval.opt_all_or_distinct_t)->case_idx_ = CASE2; } #line 4372 "bison_parser.cpp" /* yacc.c:1652 */ break; case 119: #line 1245 "bison.y" /* yacc.c:1652 */ { (yyval.create_table_stmt_t) = new CreateTableStmt(); (yyval.create_table_stmt_t)->case_idx_ = CASE0; (yyval.create_table_stmt_t)->opt_temp_ = (yyvsp[-5].opt_temp_t); (yyval.create_table_stmt_t)->opt_if_not_exist_ = (yyvsp[-3].opt_if_not_exist_t); (yyval.create_table_stmt_t)->table_name_ = (yyvsp[-2].table_name_t); (yyval.create_table_stmt_t)->select_stmt_ = (yyvsp[0].select_stmt_t); if ((yyval.create_table_stmt_t)) { auto tmp1 = (yyval.create_table_stmt_t)->table_name_; if (tmp1) { auto tmp2 = tmp1->identifier_; if (tmp2) { tmp2->data_type_ = kDataTableName; tmp2->scope_ = 1; tmp2->data_flag_ = (DATAFLAG)128; } } } } #line 4398 "bison_parser.cpp" /* yacc.c:1652 */ break; case 120: #line 1266 "bison.y" /* yacc.c:1652 */ { (yyval.create_table_stmt_t) = new CreateTableStmt(); (yyval.create_table_stmt_t)->case_idx_ = CASE1; (yyval.create_table_stmt_t)->opt_temp_ = (yyvsp[-7].opt_temp_t); (yyval.create_table_stmt_t)->opt_if_not_exist_ = (yyvsp[-5].opt_if_not_exist_t); (yyval.create_table_stmt_t)->table_name_ = (yyvsp[-4].table_name_t); (yyval.create_table_stmt_t)->column_def_list_ = (yyvsp[-2].column_def_list_t); (yyval.create_table_stmt_t)->opt_table_constraint_list_ = (yyvsp[-1].opt_table_constraint_list_t); if ((yyval.create_table_stmt_t)) { auto tmp1 = (yyval.create_table_stmt_t)->table_name_; if (tmp1) { auto tmp2 = tmp1->identifier_; if (tmp2) { tmp2->data_type_ = kDataTableName; tmp2->scope_ = 1; tmp2->data_flag_ = (DATAFLAG)1; } } } if ((yyval.create_table_stmt_t)) { auto tmp1 = (yyval.create_table_stmt_t)->column_def_list_; while (tmp1) { auto tmp2 = tmp1->column_def_; if (tmp2) { auto tmp3 = tmp2->identifier_; if (tmp3) { tmp3->data_type_ = kDataColumnName; tmp3->scope_ = 2; tmp3->data_flag_ = (DATAFLAG)1; } } tmp1 = tmp1->column_def_list_; } } } #line 4441 "bison_parser.cpp" /* yacc.c:1652 */ break; case 121: #line 1307 "bison.y" /* yacc.c:1652 */ { (yyval.create_index_stmt_t) = new CreateIndexStmt(); (yyval.create_index_stmt_t)->case_idx_ = CASE0; (yyval.create_index_stmt_t)->opt_unique_ = (yyvsp[-9].opt_unique_t); (yyval.create_index_stmt_t)->opt_if_not_exist_ = (yyvsp[-7].opt_if_not_exist_t); (yyval.create_index_stmt_t)->table_name_1_ = (yyvsp[-6].table_name_t); (yyval.create_index_stmt_t)->table_name_2_ = (yyvsp[-4].table_name_t); (yyval.create_index_stmt_t)->indexed_column_list_ = (yyvsp[-2].indexed_column_list_t); (yyval.create_index_stmt_t)->opt_where_clause_ = (yyvsp[0].opt_where_clause_t); if ((yyval.create_index_stmt_t)) { auto tmp1 = (yyval.create_index_stmt_t)->table_name_1_; if (tmp1) { auto tmp2 = tmp1->identifier_; if (tmp2) { tmp2->data_type_ = kDataTableName; tmp2->scope_ = 2; tmp2->data_flag_ = (DATAFLAG)128; } } } if ((yyval.create_index_stmt_t)) { auto tmp1 = (yyval.create_index_stmt_t)->table_name_2_; if (tmp1) { auto tmp2 = tmp1->identifier_; if (tmp2) { tmp2->data_type_ = kDataTableName; tmp2->scope_ = 1; tmp2->data_flag_ = (DATAFLAG)8; } } } } #line 4481 "bison_parser.cpp" /* yacc.c:1652 */ break; case 122: #line 1345 "bison.y" /* yacc.c:1652 */ { (yyval.create_view_stmt_t) = new CreateViewStmt(); (yyval.create_view_stmt_t)->case_idx_ = CASE0; (yyval.create_view_stmt_t)->opt_temp_ = (yyvsp[-6].opt_temp_t); (yyval.create_view_stmt_t)->view_name_ = (yyvsp[-4].view_name_t); (yyval.create_view_stmt_t)->opt_column_name_list_p_ = (yyvsp[-3].opt_column_name_list_p_t); (yyval.create_view_stmt_t)->select_stmt_ = (yyvsp[-1].select_stmt_t); (yyval.create_view_stmt_t)->opt_check_option_ = (yyvsp[0].opt_check_option_t); if ((yyval.create_view_stmt_t)) { auto tmp1 = (yyval.create_view_stmt_t)->view_name_; if (tmp1) { auto tmp2 = tmp1->identifier_; if (tmp2) { tmp2->data_type_ = kDataTableName; tmp2->scope_ = 10; tmp2->data_flag_ = (DATAFLAG)1; } } } if ((yyval.create_view_stmt_t)) { auto tmp1 = (yyval.create_view_stmt_t)->opt_column_name_list_p_; if (tmp1) { auto tmp2 = tmp1->column_name_list_; while (tmp2) { auto tmp3 = tmp2->column_name_; if (tmp3) { auto tmp4 = tmp3->identifier_; if (tmp4) { tmp4->data_type_ = kDataColumnName; tmp4->scope_ = 11; tmp4->data_flag_ = (DATAFLAG)1; } } tmp2 = tmp2->column_name_list_; } } } } #line 4527 "bison_parser.cpp" /* yacc.c:1652 */ break; case 123: #line 1386 "bison.y" /* yacc.c:1652 */ { (yyval.create_view_stmt_t) = new CreateViewStmt(); (yyval.create_view_stmt_t)->case_idx_ = CASE1; (yyval.create_view_stmt_t)->opt_temp_ = (yyvsp[-7].opt_temp_t); (yyval.create_view_stmt_t)->view_name_ = (yyvsp[-4].view_name_t); (yyval.create_view_stmt_t)->opt_column_name_list_p_ = (yyvsp[-3].opt_column_name_list_p_t); (yyval.create_view_stmt_t)->select_stmt_ = (yyvsp[-1].select_stmt_t); (yyval.create_view_stmt_t)->opt_check_option_ = (yyvsp[0].opt_check_option_t); if ((yyval.create_view_stmt_t)) { auto tmp1 = (yyval.create_view_stmt_t)->view_name_; if (tmp1) { auto tmp2 = tmp1->identifier_; if (tmp2) { tmp2->data_type_ = kDataTableName; tmp2->scope_ = 10; tmp2->data_flag_ = (DATAFLAG)1; } } } if ((yyval.create_view_stmt_t)) { auto tmp1 = (yyval.create_view_stmt_t)->opt_column_name_list_p_; if (tmp1) { auto tmp2 = tmp1->column_name_list_; while (tmp2) { auto tmp3 = tmp2->column_name_; if (tmp3) { auto tmp4 = tmp3->identifier_; if (tmp4) { tmp4->data_type_ = kDataColumnName; tmp4->scope_ = 11; tmp4->data_flag_ = (DATAFLAG)1; } } tmp2 = tmp2->column_name_list_; } } } } #line 4573 "bison_parser.cpp" /* yacc.c:1652 */ break; case 124: #line 1427 "bison.y" /* yacc.c:1652 */ { (yyval.create_view_stmt_t) = new CreateViewStmt(); (yyval.create_view_stmt_t)->case_idx_ = CASE2; (yyval.create_view_stmt_t)->opt_temp_ = (yyvsp[-6].opt_temp_t); (yyval.create_view_stmt_t)->view_name_ = (yyvsp[-4].view_name_t); (yyval.create_view_stmt_t)->opt_column_name_list_p_ = (yyvsp[-3].opt_column_name_list_p_t); (yyval.create_view_stmt_t)->select_stmt_ = (yyvsp[-1].select_stmt_t); (yyval.create_view_stmt_t)->opt_check_option_ = (yyvsp[0].opt_check_option_t); if ((yyval.create_view_stmt_t)) { auto tmp1 = (yyval.create_view_stmt_t)->view_name_; if (tmp1) { auto tmp2 = tmp1->identifier_; if (tmp2) { tmp2->data_type_ = kDataTableName; tmp2->scope_ = 10; tmp2->data_flag_ = (DATAFLAG)1; } } } if ((yyval.create_view_stmt_t)) { auto tmp1 = (yyval.create_view_stmt_t)->opt_column_name_list_p_; if (tmp1) { auto tmp2 = tmp1->column_name_list_; while (tmp2) { auto tmp3 = tmp2->column_name_; if (tmp3) { auto tmp4 = tmp3->identifier_; if (tmp4) { tmp4->data_type_ = kDataColumnName; tmp4->scope_ = 11; tmp4->data_flag_ = (DATAFLAG)1; } } tmp2 = tmp2->column_name_list_; } } } } #line 4619 "bison_parser.cpp" /* yacc.c:1652 */ break; case 125: #line 1468 "bison.y" /* yacc.c:1652 */ { (yyval.create_view_stmt_t) = new CreateViewStmt(); (yyval.create_view_stmt_t)->case_idx_ = CASE3; (yyval.create_view_stmt_t)->opt_temp_ = (yyvsp[-7].opt_temp_t); (yyval.create_view_stmt_t)->view_name_ = (yyvsp[-4].view_name_t); (yyval.create_view_stmt_t)->opt_column_name_list_p_ = (yyvsp[-3].opt_column_name_list_p_t); (yyval.create_view_stmt_t)->select_stmt_ = (yyvsp[-1].select_stmt_t); (yyval.create_view_stmt_t)->opt_check_option_ = (yyvsp[0].opt_check_option_t); if ((yyval.create_view_stmt_t)) { auto tmp1 = (yyval.create_view_stmt_t)->view_name_; if (tmp1) { auto tmp2 = tmp1->identifier_; if (tmp2) { tmp2->data_type_ = kDataTableName; tmp2->scope_ = 10; tmp2->data_flag_ = (DATAFLAG)1; } } } if ((yyval.create_view_stmt_t)) { auto tmp1 = (yyval.create_view_stmt_t)->opt_column_name_list_p_; if (tmp1) { auto tmp2 = tmp1->column_name_list_; while (tmp2) { auto tmp3 = tmp2->column_name_; if (tmp3) { auto tmp4 = tmp3->identifier_; if (tmp4) { tmp4->data_type_ = kDataColumnName; tmp4->scope_ = 11; tmp4->data_flag_ = (DATAFLAG)1; } } tmp2 = tmp2->column_name_list_; } } } } #line 4665 "bison_parser.cpp" /* yacc.c:1652 */ break; case 126: #line 1512 "bison.y" /* yacc.c:1652 */ { (yyval.drop_index_stmt_t) = new DropIndexStmt(); (yyval.drop_index_stmt_t)->case_idx_ = CASE0; (yyval.drop_index_stmt_t)->opt_if_exist_ = (yyvsp[-1].opt_if_exist_t); (yyval.drop_index_stmt_t)->table_name_ = (yyvsp[0].table_name_t); if ((yyval.drop_index_stmt_t)) { auto tmp1 = (yyval.drop_index_stmt_t)->table_name_; if (tmp1) { auto tmp2 = tmp1->identifier_; if (tmp2) { tmp2->data_type_ = kDataTableName; tmp2->scope_ = 1; tmp2->data_flag_ = (DATAFLAG)2; } } } } #line 4689 "bison_parser.cpp" /* yacc.c:1652 */ break; case 127: #line 1534 "bison.y" /* yacc.c:1652 */ { (yyval.drop_table_stmt_t) = new DropTableStmt(); (yyval.drop_table_stmt_t)->case_idx_ = CASE0; (yyval.drop_table_stmt_t)->opt_if_exist_ = (yyvsp[-1].opt_if_exist_t); (yyval.drop_table_stmt_t)->table_name_ = (yyvsp[0].table_name_t); if ((yyval.drop_table_stmt_t)) { auto tmp1 = (yyval.drop_table_stmt_t)->table_name_; if (tmp1) { auto tmp2 = tmp1->identifier_; if (tmp2) { tmp2->data_type_ = kDataTableName; tmp2->scope_ = 1; tmp2->data_flag_ = (DATAFLAG)2; } } } } #line 4713 "bison_parser.cpp" /* yacc.c:1652 */ break; case 128: #line 1556 "bison.y" /* yacc.c:1652 */ { (yyval.drop_view_stmt_t) = new DropViewStmt(); (yyval.drop_view_stmt_t)->case_idx_ = CASE0; (yyval.drop_view_stmt_t)->opt_if_exist_ = (yyvsp[-1].opt_if_exist_t); (yyval.drop_view_stmt_t)->view_name_ = (yyvsp[0].view_name_t); if ((yyval.drop_view_stmt_t)) { auto tmp1 = (yyval.drop_view_stmt_t)->view_name_; if (tmp1) { auto tmp2 = tmp1->identifier_; if (tmp2) { tmp2->data_type_ = kDataTableName; tmp2->scope_ = 1; tmp2->data_flag_ = (DATAFLAG)2; } } } } #line 4737 "bison_parser.cpp" /* yacc.c:1652 */ break; case 129: #line 1578 "bison.y" /* yacc.c:1652 */ { (yyval.insert_stmt_t) = new InsertStmt(); (yyval.insert_stmt_t)->case_idx_ = CASE0; (yyval.insert_stmt_t)->opt_with_clause_ = (yyvsp[-5].opt_with_clause_t); (yyval.insert_stmt_t)->table_name_ = (yyvsp[-2].table_name_t); (yyval.insert_stmt_t)->insert_rest_ = (yyvsp[-1].insert_rest_t); (yyval.insert_stmt_t)->opt_on_conflict_ = (yyvsp[0].opt_on_conflict_t); } #line 4751 "bison_parser.cpp" /* yacc.c:1652 */ break; case 130: #line 1590 "bison.y" /* yacc.c:1652 */ { (yyval.insert_rest_t) = new InsertRest(); (yyval.insert_rest_t)->case_idx_ = CASE0; (yyval.insert_rest_t)->opt_column_name_list_p_ = (yyvsp[-1].opt_column_name_list_p_t); (yyval.insert_rest_t)->select_no_parens_ = (yyvsp[0].select_no_parens_t); } #line 4763 "bison_parser.cpp" /* yacc.c:1652 */ break; case 131: #line 1597 "bison.y" /* yacc.c:1652 */ { (yyval.insert_rest_t) = new InsertRest(); (yyval.insert_rest_t)->case_idx_ = CASE1; (yyval.insert_rest_t)->opt_column_name_list_p_ = (yyvsp[-2].opt_column_name_list_p_t); } #line 4774 "bison_parser.cpp" /* yacc.c:1652 */ break; case 132: #line 1603 "bison.y" /* yacc.c:1652 */ { (yyval.insert_rest_t) = new InsertRest(); (yyval.insert_rest_t)->case_idx_ = CASE2; (yyval.insert_rest_t)->opt_column_name_list_p_ = (yyvsp[-2].opt_column_name_list_p_t); (yyval.insert_rest_t)->super_values_list_ = (yyvsp[0].super_values_list_t); } #line 4786 "bison_parser.cpp" /* yacc.c:1652 */ break; case 133: #line 1613 "bison.y" /* yacc.c:1652 */ { (yyval.super_values_list_t) = new SuperValuesList(); (yyval.super_values_list_t)->case_idx_ = CASE0; (yyval.super_values_list_t)->values_list_ = (yyvsp[0].values_list_t); } #line 4797 "bison_parser.cpp" /* yacc.c:1652 */ break; case 134: #line 1619 "bison.y" /* yacc.c:1652 */ { (yyval.super_values_list_t) = new SuperValuesList(); (yyval.super_values_list_t)->case_idx_ = CASE1; (yyval.super_values_list_t)->values_list_ = (yyvsp[-2].values_list_t); (yyval.super_values_list_t)->super_values_list_ = (yyvsp[0].super_values_list_t); } #line 4809 "bison_parser.cpp" /* yacc.c:1652 */ break; case 135: #line 1629 "bison.y" /* yacc.c:1652 */ { (yyval.values_list_t) = new ValuesList(); (yyval.values_list_t)->case_idx_ = CASE0; (yyval.values_list_t)->expr_list_ = (yyvsp[-1].expr_list_t); } #line 4820 "bison_parser.cpp" /* yacc.c:1652 */ break; case 136: #line 1638 "bison.y" /* yacc.c:1652 */ { (yyval.opt_on_conflict_t) = new OptOnConflict(); (yyval.opt_on_conflict_t)->case_idx_ = CASE0; (yyval.opt_on_conflict_t)->opt_conflict_expr_ = (yyvsp[-2].opt_conflict_expr_t); } #line 4831 "bison_parser.cpp" /* yacc.c:1652 */ break; case 137: #line 1644 "bison.y" /* yacc.c:1652 */ { (yyval.opt_on_conflict_t) = new OptOnConflict(); (yyval.opt_on_conflict_t)->case_idx_ = CASE1; (yyval.opt_on_conflict_t)->opt_conflict_expr_ = (yyvsp[-4].opt_conflict_expr_t); (yyval.opt_on_conflict_t)->set_clause_list_ = (yyvsp[-1].set_clause_list_t); (yyval.opt_on_conflict_t)->where_clause_ = (yyvsp[0].where_clause_t); } #line 4844 "bison_parser.cpp" /* yacc.c:1652 */ break; case 138: #line 1652 "bison.y" /* yacc.c:1652 */ { (yyval.opt_on_conflict_t) = new OptOnConflict(); (yyval.opt_on_conflict_t)->case_idx_ = CASE2; } #line 4854 "bison_parser.cpp" /* yacc.c:1652 */ break; case 139: #line 1660 "bison.y" /* yacc.c:1652 */ { (yyval.opt_conflict_expr_t) = new OptConflictExpr(); (yyval.opt_conflict_expr_t)->case_idx_ = CASE0; (yyval.opt_conflict_expr_t)->indexed_column_list_ = (yyvsp[-2].indexed_column_list_t); (yyval.opt_conflict_expr_t)->where_clause_ = (yyvsp[0].where_clause_t); } #line 4866 "bison_parser.cpp" /* yacc.c:1652 */ break; case 140: #line 1667 "bison.y" /* yacc.c:1652 */ { (yyval.opt_conflict_expr_t) = new OptConflictExpr(); (yyval.opt_conflict_expr_t)->case_idx_ = CASE1; } #line 4876 "bison_parser.cpp" /* yacc.c:1652 */ break; case 141: #line 1675 "bison.y" /* yacc.c:1652 */ { (yyval.indexed_column_list_t) = new IndexedColumnList(); (yyval.indexed_column_list_t)->case_idx_ = CASE0; (yyval.indexed_column_list_t)->indexed_column_ = (yyvsp[0].indexed_column_t); } #line 4887 "bison_parser.cpp" /* yacc.c:1652 */ break; case 142: #line 1681 "bison.y" /* yacc.c:1652 */ { (yyval.indexed_column_list_t) = new IndexedColumnList(); (yyval.indexed_column_list_t)->case_idx_ = CASE1; (yyval.indexed_column_list_t)->indexed_column_ = (yyvsp[-2].indexed_column_t); (yyval.indexed_column_list_t)->indexed_column_list_ = (yyvsp[0].indexed_column_list_t); } #line 4899 "bison_parser.cpp" /* yacc.c:1652 */ break; case 143: #line 1691 "bison.y" /* yacc.c:1652 */ { (yyval.indexed_column_t) = new IndexedColumn(); (yyval.indexed_column_t)->case_idx_ = CASE0; (yyval.indexed_column_t)->expr_ = (yyvsp[-1].expr_t); (yyval.indexed_column_t)->opt_order_behavior_ = (yyvsp[0].opt_order_behavior_t); } #line 4911 "bison_parser.cpp" /* yacc.c:1652 */ break; case 144: #line 1701 "bison.y" /* yacc.c:1652 */ { (yyval.update_stmt_t) = new UpdateStmt(); (yyval.update_stmt_t)->case_idx_ = CASE0; (yyval.update_stmt_t)->opt_with_clause_ = (yyvsp[-5].opt_with_clause_t); (yyval.update_stmt_t)->table_name_ = (yyvsp[-3].table_name_t); (yyval.update_stmt_t)->set_clause_list_ = (yyvsp[-1].set_clause_list_t); (yyval.update_stmt_t)->opt_where_clause_ = (yyvsp[0].opt_where_clause_t); } #line 4925 "bison_parser.cpp" /* yacc.c:1652 */ break; case 145: #line 1713 "bison.y" /* yacc.c:1652 */ { (yyval.reindex_stmt_t) = new ReindexStmt(); (yyval.reindex_stmt_t)->case_idx_ = CASE0; (yyval.reindex_stmt_t)->table_name_ = (yyvsp[0].table_name_t); } #line 4936 "bison_parser.cpp" /* yacc.c:1652 */ break; case 146: #line 1719 "bison.y" /* yacc.c:1652 */ { (yyval.reindex_stmt_t) = new ReindexStmt(); (yyval.reindex_stmt_t)->case_idx_ = CASE1; (yyval.reindex_stmt_t)->table_name_ = (yyvsp[0].table_name_t); } #line 4947 "bison_parser.cpp" /* yacc.c:1652 */ break; case 147: #line 1728 "bison.y" /* yacc.c:1652 */ { (yyval.alter_action_t) = new AlterAction(); (yyval.alter_action_t)->case_idx_ = CASE0; (yyval.alter_action_t)->table_name_ = (yyvsp[0].table_name_t); if ((yyval.alter_action_t)) { auto tmp1 = (yyval.alter_action_t)->table_name_; if (tmp1) { auto tmp2 = tmp1->identifier_; if (tmp2) { tmp2->data_type_ = kDataTableName; tmp2->scope_ = 2; tmp2->data_flag_ = (DATAFLAG)64; } } } } #line 4970 "bison_parser.cpp" /* yacc.c:1652 */ break; case 148: #line 1746 "bison.y" /* yacc.c:1652 */ { (yyval.alter_action_t) = new AlterAction(); (yyval.alter_action_t)->case_idx_ = CASE1; (yyval.alter_action_t)->opt_column_ = (yyvsp[-3].opt_column_t); (yyval.alter_action_t)->column_name_1_ = (yyvsp[-2].column_name_t); (yyval.alter_action_t)->column_name_2_ = (yyvsp[0].column_name_t); if ((yyval.alter_action_t)) { auto tmp1 = (yyval.alter_action_t)->column_name_1_; if (tmp1) { auto tmp2 = tmp1->identifier_; if (tmp2) { tmp2->data_type_ = kDataColumnName; tmp2->scope_ = 2; tmp2->data_flag_ = (DATAFLAG)8; } } } if ((yyval.alter_action_t)) { auto tmp1 = (yyval.alter_action_t)->column_name_2_; if (tmp1) { auto tmp2 = tmp1->identifier_; if (tmp2) { tmp2->data_type_ = kDataColumnName; tmp2->scope_ = 3; tmp2->data_flag_ = (DATAFLAG)64; } } } } #line 5007 "bison_parser.cpp" /* yacc.c:1652 */ break; case 149: #line 1778 "bison.y" /* yacc.c:1652 */ { (yyval.alter_action_t) = new AlterAction(); (yyval.alter_action_t)->case_idx_ = CASE2; (yyval.alter_action_t)->opt_column_ = (yyvsp[-1].opt_column_t); (yyval.alter_action_t)->column_def_ = (yyvsp[0].column_def_t); } #line 5019 "bison_parser.cpp" /* yacc.c:1652 */ break; case 150: #line 1788 "bison.y" /* yacc.c:1652 */ { (yyval.column_def_list_t) = new ColumnDefList(); (yyval.column_def_list_t)->case_idx_ = CASE0; (yyval.column_def_list_t)->column_def_ = (yyvsp[0].column_def_t); } #line 5030 "bison_parser.cpp" /* yacc.c:1652 */ break; case 151: #line 1794 "bison.y" /* yacc.c:1652 */ { (yyval.column_def_list_t) = new ColumnDefList(); (yyval.column_def_list_t)->case_idx_ = CASE1; (yyval.column_def_list_t)->column_def_ = (yyvsp[-2].column_def_t); (yyval.column_def_list_t)->column_def_list_ = (yyvsp[0].column_def_list_t); } #line 5042 "bison_parser.cpp" /* yacc.c:1652 */ break; case 152: #line 1804 "bison.y" /* yacc.c:1652 */ { (yyval.column_def_t) = new ColumnDef(); (yyval.column_def_t)->case_idx_ = CASE0; (yyval.column_def_t)->identifier_ = (yyvsp[-2].identifier_t); (yyval.column_def_t)->type_name_ = (yyvsp[-1].type_name_t); (yyval.column_def_t)->opt_column_constraint_list_ = (yyvsp[0].opt_column_constraint_list_t); if ((yyval.column_def_t)) { auto tmp1 = (yyval.column_def_t)->identifier_; if (tmp1) { tmp1->data_type_ = kDataColumnName; tmp1->scope_ = 2; tmp1->data_flag_ = (DATAFLAG)1; } } } #line 5064 "bison_parser.cpp" /* yacc.c:1652 */ break; case 153: #line 1824 "bison.y" /* yacc.c:1652 */ { (yyval.opt_column_constraint_list_t) = new OptColumnConstraintList(); (yyval.opt_column_constraint_list_t)->case_idx_ = CASE0; (yyval.opt_column_constraint_list_t)->column_constraint_list_ = (yyvsp[0].column_constraint_list_t); } #line 5075 "bison_parser.cpp" /* yacc.c:1652 */ break; case 154: #line 1830 "bison.y" /* yacc.c:1652 */ { (yyval.opt_column_constraint_list_t) = new OptColumnConstraintList(); (yyval.opt_column_constraint_list_t)->case_idx_ = CASE1; } #line 5085 "bison_parser.cpp" /* yacc.c:1652 */ break; case 155: #line 1838 "bison.y" /* yacc.c:1652 */ { (yyval.column_constraint_list_t) = new ColumnConstraintList(); (yyval.column_constraint_list_t)->case_idx_ = CASE0; (yyval.column_constraint_list_t)->column_constraint_ = (yyvsp[0].column_constraint_t); } #line 5096 "bison_parser.cpp" /* yacc.c:1652 */ break; case 156: #line 1844 "bison.y" /* yacc.c:1652 */ { (yyval.column_constraint_list_t) = new ColumnConstraintList(); (yyval.column_constraint_list_t)->case_idx_ = CASE1; (yyval.column_constraint_list_t)->column_constraint_ = (yyvsp[-1].column_constraint_t); (yyval.column_constraint_list_t)->column_constraint_list_ = (yyvsp[0].column_constraint_list_t); } #line 5108 "bison_parser.cpp" /* yacc.c:1652 */ break; case 157: #line 1854 "bison.y" /* yacc.c:1652 */ { (yyval.column_constraint_t) = new ColumnConstraint(); (yyval.column_constraint_t)->case_idx_ = CASE0; (yyval.column_constraint_t)->constraint_type_ = (yyvsp[0].constraint_type_t); } #line 5119 "bison_parser.cpp" /* yacc.c:1652 */ break; case 158: #line 1863 "bison.y" /* yacc.c:1652 */ { (yyval.constraint_type_t) = new ConstraintType(); (yyval.constraint_type_t)->case_idx_ = CASE0; } #line 5129 "bison_parser.cpp" /* yacc.c:1652 */ break; case 159: #line 1868 "bison.y" /* yacc.c:1652 */ { (yyval.constraint_type_t) = new ConstraintType(); (yyval.constraint_type_t)->case_idx_ = CASE1; } #line 5139 "bison_parser.cpp" /* yacc.c:1652 */ break; case 160: #line 1873 "bison.y" /* yacc.c:1652 */ { (yyval.constraint_type_t) = new ConstraintType(); (yyval.constraint_type_t)->case_idx_ = CASE2; } #line 5149 "bison_parser.cpp" /* yacc.c:1652 */ break; case 161: #line 1878 "bison.y" /* yacc.c:1652 */ { (yyval.constraint_type_t) = new ConstraintType(); (yyval.constraint_type_t)->case_idx_ = CASE3; (yyval.constraint_type_t)->expr_ = (yyvsp[-1].expr_t); } #line 5160 "bison_parser.cpp" /* yacc.c:1652 */ break; case 162: #line 1884 "bison.y" /* yacc.c:1652 */ { (yyval.constraint_type_t) = new ConstraintType(); (yyval.constraint_type_t)->case_idx_ = CASE4; (yyval.constraint_type_t)->foreign_clause_ = (yyvsp[0].foreign_clause_t); } #line 5171 "bison_parser.cpp" /* yacc.c:1652 */ break; case 163: #line 1893 "bison.y" /* yacc.c:1652 */ { (yyval.foreign_clause_t) = new ForeignClause(); (yyval.foreign_clause_t)->case_idx_ = CASE0; (yyval.foreign_clause_t)->table_name_ = (yyvsp[-3].table_name_t); (yyval.foreign_clause_t)->opt_column_name_list_p_ = (yyvsp[-2].opt_column_name_list_p_t); (yyval.foreign_clause_t)->opt_foreign_key_actions_ = (yyvsp[-1].opt_foreign_key_actions_t); (yyval.foreign_clause_t)->opt_constraint_attribute_spec_ = (yyvsp[0].opt_constraint_attribute_spec_t); if ((yyval.foreign_clause_t)) { auto tmp1 = (yyval.foreign_clause_t)->table_name_; if (tmp1) { auto tmp2 = tmp1->identifier_; if (tmp2) { tmp2->data_type_ = kDataTableName; tmp2->scope_ = 100; tmp2->data_flag_ = (DATAFLAG)8; } } } if ((yyval.foreign_clause_t)) { auto tmp1 = (yyval.foreign_clause_t)->opt_column_name_list_p_; if (tmp1) { auto tmp2 = tmp1->column_name_list_; while (tmp2) { auto tmp3 = tmp2->column_name_; if (tmp3) { auto tmp4 = tmp3->identifier_; if (tmp4) { tmp4->data_type_ = kDataColumnName; tmp4->scope_ = 101; tmp4->data_flag_ = (DATAFLAG)8; } } tmp2 = tmp2->column_name_list_; } } } } #line 5216 "bison_parser.cpp" /* yacc.c:1652 */ break; case 164: #line 1936 "bison.y" /* yacc.c:1652 */ { (yyval.opt_foreign_key_actions_t) = new OptForeignKeyActions(); (yyval.opt_foreign_key_actions_t)->case_idx_ = CASE0; (yyval.opt_foreign_key_actions_t)->foreign_key_actions_ = (yyvsp[0].foreign_key_actions_t); } #line 5227 "bison_parser.cpp" /* yacc.c:1652 */ break; case 165: #line 1942 "bison.y" /* yacc.c:1652 */ { (yyval.opt_foreign_key_actions_t) = new OptForeignKeyActions(); (yyval.opt_foreign_key_actions_t)->case_idx_ = CASE1; } #line 5237 "bison_parser.cpp" /* yacc.c:1652 */ break; case 166: #line 1950 "bison.y" /* yacc.c:1652 */ { (yyval.foreign_key_actions_t) = new ForeignKeyActions(); (yyval.foreign_key_actions_t)->case_idx_ = CASE0; } #line 5247 "bison_parser.cpp" /* yacc.c:1652 */ break; case 167: #line 1955 "bison.y" /* yacc.c:1652 */ { (yyval.foreign_key_actions_t) = new ForeignKeyActions(); (yyval.foreign_key_actions_t)->case_idx_ = CASE1; } #line 5257 "bison_parser.cpp" /* yacc.c:1652 */ break; case 168: #line 1960 "bison.y" /* yacc.c:1652 */ { (yyval.foreign_key_actions_t) = new ForeignKeyActions(); (yyval.foreign_key_actions_t)->case_idx_ = CASE2; } #line 5267 "bison_parser.cpp" /* yacc.c:1652 */ break; case 169: #line 1965 "bison.y" /* yacc.c:1652 */ { (yyval.foreign_key_actions_t) = new ForeignKeyActions(); (yyval.foreign_key_actions_t)->case_idx_ = CASE3; (yyval.foreign_key_actions_t)->key_actions_ = (yyvsp[0].key_actions_t); } #line 5278 "bison_parser.cpp" /* yacc.c:1652 */ break; case 170: #line 1971 "bison.y" /* yacc.c:1652 */ { (yyval.foreign_key_actions_t) = new ForeignKeyActions(); (yyval.foreign_key_actions_t)->case_idx_ = CASE4; (yyval.foreign_key_actions_t)->key_actions_ = (yyvsp[0].key_actions_t); } #line 5289 "bison_parser.cpp" /* yacc.c:1652 */ break; case 171: #line 1980 "bison.y" /* yacc.c:1652 */ { (yyval.key_actions_t) = new KeyActions(); (yyval.key_actions_t)->case_idx_ = CASE0; } #line 5299 "bison_parser.cpp" /* yacc.c:1652 */ break; case 172: #line 1985 "bison.y" /* yacc.c:1652 */ { (yyval.key_actions_t) = new KeyActions(); (yyval.key_actions_t)->case_idx_ = CASE1; } #line 5309 "bison_parser.cpp" /* yacc.c:1652 */ break; case 173: #line 1990 "bison.y" /* yacc.c:1652 */ { (yyval.key_actions_t) = new KeyActions(); (yyval.key_actions_t)->case_idx_ = CASE2; } #line 5319 "bison_parser.cpp" /* yacc.c:1652 */ break; case 174: #line 1995 "bison.y" /* yacc.c:1652 */ { (yyval.key_actions_t) = new KeyActions(); (yyval.key_actions_t)->case_idx_ = CASE3; } #line 5329 "bison_parser.cpp" /* yacc.c:1652 */ break; case 175: #line 2000 "bison.y" /* yacc.c:1652 */ { (yyval.key_actions_t) = new KeyActions(); (yyval.key_actions_t)->case_idx_ = CASE4; } #line 5339 "bison_parser.cpp" /* yacc.c:1652 */ break; case 176: #line 2008 "bison.y" /* yacc.c:1652 */ { (yyval.opt_constraint_attribute_spec_t) = new OptConstraintAttributeSpec(); (yyval.opt_constraint_attribute_spec_t)->case_idx_ = CASE0; (yyval.opt_constraint_attribute_spec_t)->opt_initial_time_ = (yyvsp[0].opt_initial_time_t); } #line 5350 "bison_parser.cpp" /* yacc.c:1652 */ break; case 177: #line 2014 "bison.y" /* yacc.c:1652 */ { (yyval.opt_constraint_attribute_spec_t) = new OptConstraintAttributeSpec(); (yyval.opt_constraint_attribute_spec_t)->case_idx_ = CASE1; (yyval.opt_constraint_attribute_spec_t)->opt_initial_time_ = (yyvsp[0].opt_initial_time_t); } #line 5361 "bison_parser.cpp" /* yacc.c:1652 */ break; case 178: #line 2020 "bison.y" /* yacc.c:1652 */ { (yyval.opt_constraint_attribute_spec_t) = new OptConstraintAttributeSpec(); (yyval.opt_constraint_attribute_spec_t)->case_idx_ = CASE2; } #line 5371 "bison_parser.cpp" /* yacc.c:1652 */ break; case 179: #line 2028 "bison.y" /* yacc.c:1652 */ { (yyval.opt_initial_time_t) = new OptInitialTime(); (yyval.opt_initial_time_t)->case_idx_ = CASE0; } #line 5381 "bison_parser.cpp" /* yacc.c:1652 */ break; case 180: #line 2033 "bison.y" /* yacc.c:1652 */ { (yyval.opt_initial_time_t) = new OptInitialTime(); (yyval.opt_initial_time_t)->case_idx_ = CASE1; } #line 5391 "bison_parser.cpp" /* yacc.c:1652 */ break; case 181: #line 2038 "bison.y" /* yacc.c:1652 */ { (yyval.opt_initial_time_t) = new OptInitialTime(); (yyval.opt_initial_time_t)->case_idx_ = CASE2; } #line 5401 "bison_parser.cpp" /* yacc.c:1652 */ break; case 182: #line 2046 "bison.y" /* yacc.c:1652 */ { (yyval.constraint_name_t) = new ConstraintName(); (yyval.constraint_name_t)->case_idx_ = CASE0; (yyval.constraint_name_t)->name_ = (yyvsp[0].name_t); } #line 5412 "bison_parser.cpp" /* yacc.c:1652 */ break; case 183: #line 2055 "bison.y" /* yacc.c:1652 */ { (yyval.opt_temp_t) = new OptTemp(); (yyval.opt_temp_t)->case_idx_ = CASE0; } #line 5422 "bison_parser.cpp" /* yacc.c:1652 */ break; case 184: #line 2060 "bison.y" /* yacc.c:1652 */ { (yyval.opt_temp_t) = new OptTemp(); (yyval.opt_temp_t)->case_idx_ = CASE1; } #line 5432 "bison_parser.cpp" /* yacc.c:1652 */ break; case 185: #line 2065 "bison.y" /* yacc.c:1652 */ { (yyval.opt_temp_t) = new OptTemp(); (yyval.opt_temp_t)->case_idx_ = CASE2; } #line 5442 "bison_parser.cpp" /* yacc.c:1652 */ break; case 186: #line 2070 "bison.y" /* yacc.c:1652 */ { (yyval.opt_temp_t) = new OptTemp(); (yyval.opt_temp_t)->case_idx_ = CASE3; } #line 5452 "bison_parser.cpp" /* yacc.c:1652 */ break; case 187: #line 2075 "bison.y" /* yacc.c:1652 */ { (yyval.opt_temp_t) = new OptTemp(); (yyval.opt_temp_t)->case_idx_ = CASE4; } #line 5462 "bison_parser.cpp" /* yacc.c:1652 */ break; case 188: #line 2080 "bison.y" /* yacc.c:1652 */ { (yyval.opt_temp_t) = new OptTemp(); (yyval.opt_temp_t)->case_idx_ = CASE5; } #line 5472 "bison_parser.cpp" /* yacc.c:1652 */ break; case 189: #line 2085 "bison.y" /* yacc.c:1652 */ { (yyval.opt_temp_t) = new OptTemp(); (yyval.opt_temp_t)->case_idx_ = CASE6; } #line 5482 "bison_parser.cpp" /* yacc.c:1652 */ break; case 190: #line 2090 "bison.y" /* yacc.c:1652 */ { (yyval.opt_temp_t) = new OptTemp(); (yyval.opt_temp_t)->case_idx_ = CASE7; } #line 5492 "bison_parser.cpp" /* yacc.c:1652 */ break; case 191: #line 2098 "bison.y" /* yacc.c:1652 */ { (yyval.opt_check_option_t) = new OptCheckOption(); (yyval.opt_check_option_t)->case_idx_ = CASE0; } #line 5502 "bison_parser.cpp" /* yacc.c:1652 */ break; case 192: #line 2103 "bison.y" /* yacc.c:1652 */ { (yyval.opt_check_option_t) = new OptCheckOption(); (yyval.opt_check_option_t)->case_idx_ = CASE1; } #line 5512 "bison_parser.cpp" /* yacc.c:1652 */ break; case 193: #line 2108 "bison.y" /* yacc.c:1652 */ { (yyval.opt_check_option_t) = new OptCheckOption(); (yyval.opt_check_option_t)->case_idx_ = CASE2; } #line 5522 "bison_parser.cpp" /* yacc.c:1652 */ break; case 194: #line 2113 "bison.y" /* yacc.c:1652 */ { (yyval.opt_check_option_t) = new OptCheckOption(); (yyval.opt_check_option_t)->case_idx_ = CASE3; } #line 5532 "bison_parser.cpp" /* yacc.c:1652 */ break; case 195: #line 2121 "bison.y" /* yacc.c:1652 */ { (yyval.opt_column_name_list_p_t) = new OptColumnNameListP(); (yyval.opt_column_name_list_p_t)->case_idx_ = CASE0; (yyval.opt_column_name_list_p_t)->column_name_list_ = (yyvsp[-1].column_name_list_t); } #line 5543 "bison_parser.cpp" /* yacc.c:1652 */ break; case 196: #line 2127 "bison.y" /* yacc.c:1652 */ { (yyval.opt_column_name_list_p_t) = new OptColumnNameListP(); (yyval.opt_column_name_list_p_t)->case_idx_ = CASE1; } #line 5553 "bison_parser.cpp" /* yacc.c:1652 */ break; case 197: #line 2135 "bison.y" /* yacc.c:1652 */ { (yyval.set_clause_list_t) = new SetClauseList(); (yyval.set_clause_list_t)->case_idx_ = CASE0; (yyval.set_clause_list_t)->set_clause_ = (yyvsp[0].set_clause_t); } #line 5564 "bison_parser.cpp" /* yacc.c:1652 */ break; case 198: #line 2141 "bison.y" /* yacc.c:1652 */ { (yyval.set_clause_list_t) = new SetClauseList(); (yyval.set_clause_list_t)->case_idx_ = CASE1; (yyval.set_clause_list_t)->set_clause_ = (yyvsp[-2].set_clause_t); (yyval.set_clause_list_t)->set_clause_list_ = (yyvsp[0].set_clause_list_t); } #line 5576 "bison_parser.cpp" /* yacc.c:1652 */ break; case 199: #line 2151 "bison.y" /* yacc.c:1652 */ { (yyval.set_clause_t) = new SetClause(); (yyval.set_clause_t)->case_idx_ = CASE0; (yyval.set_clause_t)->column_name_ = (yyvsp[-2].column_name_t); (yyval.set_clause_t)->expr_ = (yyvsp[0].expr_t); } #line 5588 "bison_parser.cpp" /* yacc.c:1652 */ break; case 200: #line 2158 "bison.y" /* yacc.c:1652 */ { (yyval.set_clause_t) = new SetClause(); (yyval.set_clause_t)->case_idx_ = CASE1; (yyval.set_clause_t)->column_name_list_ = (yyvsp[-3].column_name_list_t); (yyval.set_clause_t)->expr_ = (yyvsp[0].expr_t); } #line 5600 "bison_parser.cpp" /* yacc.c:1652 */ break; case 201: #line 2168 "bison.y" /* yacc.c:1652 */ { (yyval.expr_t) = new Expr(); (yyval.expr_t)->case_idx_ = CASE0; (yyval.expr_t)->operand_ = (yyvsp[0].operand_t); } #line 5611 "bison_parser.cpp" /* yacc.c:1652 */ break; case 202: #line 2174 "bison.y" /* yacc.c:1652 */ { (yyval.expr_t) = new Expr(); (yyval.expr_t)->case_idx_ = CASE1; (yyval.expr_t)->between_expr_ = (yyvsp[0].between_expr_t); } #line 5622 "bison_parser.cpp" /* yacc.c:1652 */ break; case 203: #line 2180 "bison.y" /* yacc.c:1652 */ { (yyval.expr_t) = new Expr(); (yyval.expr_t)->case_idx_ = CASE2; (yyval.expr_t)->exists_expr_ = (yyvsp[0].exists_expr_t); } #line 5633 "bison_parser.cpp" /* yacc.c:1652 */ break; case 204: #line 2186 "bison.y" /* yacc.c:1652 */ { (yyval.expr_t) = new Expr(); (yyval.expr_t)->case_idx_ = CASE3; (yyval.expr_t)->in_expr_ = (yyvsp[0].in_expr_t); } #line 5644 "bison_parser.cpp" /* yacc.c:1652 */ break; case 205: #line 2192 "bison.y" /* yacc.c:1652 */ { (yyval.expr_t) = new Expr(); (yyval.expr_t)->case_idx_ = CASE4; (yyval.expr_t)->cast_expr_ = (yyvsp[0].cast_expr_t); } #line 5655 "bison_parser.cpp" /* yacc.c:1652 */ break; case 206: #line 2198 "bison.y" /* yacc.c:1652 */ { (yyval.expr_t) = new Expr(); (yyval.expr_t)->case_idx_ = CASE5; (yyval.expr_t)->logic_expr_ = (yyvsp[0].logic_expr_t); } #line 5666 "bison_parser.cpp" /* yacc.c:1652 */ break; case 207: #line 2207 "bison.y" /* yacc.c:1652 */ { (yyval.operand_t) = new Operand(); (yyval.operand_t)->case_idx_ = CASE0; (yyval.operand_t)->expr_list_ = (yyvsp[-1].expr_list_t); } #line 5677 "bison_parser.cpp" /* yacc.c:1652 */ break; case 208: #line 2213 "bison.y" /* yacc.c:1652 */ { (yyval.operand_t) = new Operand(); (yyval.operand_t)->case_idx_ = CASE1; (yyval.operand_t)->array_index_ = (yyvsp[0].array_index_t); } #line 5688 "bison_parser.cpp" /* yacc.c:1652 */ break; case 209: #line 2219 "bison.y" /* yacc.c:1652 */ { (yyval.operand_t) = new Operand(); (yyval.operand_t)->case_idx_ = CASE2; (yyval.operand_t)->scalar_expr_ = (yyvsp[0].scalar_expr_t); } #line 5699 "bison_parser.cpp" /* yacc.c:1652 */ break; case 210: #line 2225 "bison.y" /* yacc.c:1652 */ { (yyval.operand_t) = new Operand(); (yyval.operand_t)->case_idx_ = CASE3; (yyval.operand_t)->unary_expr_ = (yyvsp[0].unary_expr_t); } #line 5710 "bison_parser.cpp" /* yacc.c:1652 */ break; case 211: #line 2231 "bison.y" /* yacc.c:1652 */ { (yyval.operand_t) = new Operand(); (yyval.operand_t)->case_idx_ = CASE4; (yyval.operand_t)->binary_expr_ = (yyvsp[0].binary_expr_t); } #line 5721 "bison_parser.cpp" /* yacc.c:1652 */ break; case 212: #line 2237 "bison.y" /* yacc.c:1652 */ { (yyval.operand_t) = new Operand(); (yyval.operand_t)->case_idx_ = CASE5; (yyval.operand_t)->case_expr_ = (yyvsp[0].case_expr_t); } #line 5732 "bison_parser.cpp" /* yacc.c:1652 */ break; case 213: #line 2243 "bison.y" /* yacc.c:1652 */ { (yyval.operand_t) = new Operand(); (yyval.operand_t)->case_idx_ = CASE6; (yyval.operand_t)->extract_expr_ = (yyvsp[0].extract_expr_t); } #line 5743 "bison_parser.cpp" /* yacc.c:1652 */ break; case 214: #line 2249 "bison.y" /* yacc.c:1652 */ { (yyval.operand_t) = new Operand(); (yyval.operand_t)->case_idx_ = CASE7; (yyval.operand_t)->select_no_parens_ = (yyvsp[-1].select_no_parens_t); } #line 5754 "bison_parser.cpp" /* yacc.c:1652 */ break; case 215: #line 2258 "bison.y" /* yacc.c:1652 */ { (yyval.cast_expr_t) = new CastExpr(); (yyval.cast_expr_t)->case_idx_ = CASE0; (yyval.cast_expr_t)->expr_ = (yyvsp[-3].expr_t); (yyval.cast_expr_t)->type_name_ = (yyvsp[-1].type_name_t); } #line 5766 "bison_parser.cpp" /* yacc.c:1652 */ break; case 216: #line 2268 "bison.y" /* yacc.c:1652 */ { (yyval.scalar_expr_t) = new ScalarExpr(); (yyval.scalar_expr_t)->case_idx_ = CASE0; (yyval.scalar_expr_t)->column_name_ = (yyvsp[0].column_name_t); } #line 5777 "bison_parser.cpp" /* yacc.c:1652 */ break; case 217: #line 2274 "bison.y" /* yacc.c:1652 */ { (yyval.scalar_expr_t) = new ScalarExpr(); (yyval.scalar_expr_t)->case_idx_ = CASE1; (yyval.scalar_expr_t)->literal_ = (yyvsp[0].literal_t); } #line 5788 "bison_parser.cpp" /* yacc.c:1652 */ break; case 218: #line 2283 "bison.y" /* yacc.c:1652 */ { (yyval.unary_expr_t) = new UnaryExpr(); (yyval.unary_expr_t)->case_idx_ = CASE0; (yyval.unary_expr_t)->operand_ = (yyvsp[0].operand_t); } #line 5799 "bison_parser.cpp" /* yacc.c:1652 */ break; case 219: #line 2289 "bison.y" /* yacc.c:1652 */ { (yyval.unary_expr_t) = new UnaryExpr(); (yyval.unary_expr_t)->case_idx_ = CASE1; (yyval.unary_expr_t)->operand_ = (yyvsp[0].operand_t); } #line 5810 "bison_parser.cpp" /* yacc.c:1652 */ break; case 220: #line 2295 "bison.y" /* yacc.c:1652 */ { (yyval.unary_expr_t) = new UnaryExpr(); (yyval.unary_expr_t)->case_idx_ = CASE2; (yyval.unary_expr_t)->operand_ = (yyvsp[-1].operand_t); } #line 5821 "bison_parser.cpp" /* yacc.c:1652 */ break; case 221: #line 2301 "bison.y" /* yacc.c:1652 */ { (yyval.unary_expr_t) = new UnaryExpr(); (yyval.unary_expr_t)->case_idx_ = CASE3; (yyval.unary_expr_t)->operand_ = (yyvsp[-2].operand_t); } #line 5832 "bison_parser.cpp" /* yacc.c:1652 */ break; case 222: #line 2307 "bison.y" /* yacc.c:1652 */ { (yyval.unary_expr_t) = new UnaryExpr(); (yyval.unary_expr_t)->case_idx_ = CASE4; (yyval.unary_expr_t)->operand_ = (yyvsp[-3].operand_t); } #line 5843 "bison_parser.cpp" /* yacc.c:1652 */ break; case 223: #line 2313 "bison.y" /* yacc.c:1652 */ { (yyval.unary_expr_t) = new UnaryExpr(); (yyval.unary_expr_t)->case_idx_ = CASE5; } #line 5853 "bison_parser.cpp" /* yacc.c:1652 */ break; case 224: #line 2318 "bison.y" /* yacc.c:1652 */ { (yyval.unary_expr_t) = new UnaryExpr(); (yyval.unary_expr_t)->case_idx_ = CASE6; } #line 5863 "bison_parser.cpp" /* yacc.c:1652 */ break; case 225: #line 2326 "bison.y" /* yacc.c:1652 */ { (yyval.binary_expr_t) = new BinaryExpr(); (yyval.binary_expr_t)->case_idx_ = CASE0; (yyval.binary_expr_t)->comp_expr_ = (yyvsp[0].comp_expr_t); } #line 5874 "bison_parser.cpp" /* yacc.c:1652 */ break; case 226: #line 2332 "bison.y" /* yacc.c:1652 */ { (yyval.binary_expr_t) = new BinaryExpr(); (yyval.binary_expr_t)->case_idx_ = CASE1; (yyval.binary_expr_t)->operand_1_ = (yyvsp[-2].operand_t); (yyval.binary_expr_t)->binary_op_ = (yyvsp[-1].binary_op_t); (yyval.binary_expr_t)->operand_2_ = (yyvsp[0].operand_t); } #line 5887 "bison_parser.cpp" /* yacc.c:1652 */ break; case 227: #line 2340 "bison.y" /* yacc.c:1652 */ { (yyval.binary_expr_t) = new BinaryExpr(); (yyval.binary_expr_t)->case_idx_ = CASE2; (yyval.binary_expr_t)->operand_1_ = (yyvsp[-2].operand_t); (yyval.binary_expr_t)->operand_2_ = (yyvsp[0].operand_t); } #line 5899 "bison_parser.cpp" /* yacc.c:1652 */ break; case 228: #line 2347 "bison.y" /* yacc.c:1652 */ { (yyval.binary_expr_t) = new BinaryExpr(); (yyval.binary_expr_t)->case_idx_ = CASE3; (yyval.binary_expr_t)->operand_1_ = (yyvsp[-3].operand_t); (yyval.binary_expr_t)->operand_2_ = (yyvsp[0].operand_t); } #line 5911 "bison_parser.cpp" /* yacc.c:1652 */ break; case 229: #line 2357 "bison.y" /* yacc.c:1652 */ { (yyval.logic_expr_t) = new LogicExpr(); (yyval.logic_expr_t)->case_idx_ = CASE0; (yyval.logic_expr_t)->expr_1_ = (yyvsp[-2].expr_t); (yyval.logic_expr_t)->expr_2_ = (yyvsp[0].expr_t); } #line 5923 "bison_parser.cpp" /* yacc.c:1652 */ break; case 230: #line 2364 "bison.y" /* yacc.c:1652 */ { (yyval.logic_expr_t) = new LogicExpr(); (yyval.logic_expr_t)->case_idx_ = CASE1; (yyval.logic_expr_t)->expr_1_ = (yyvsp[-2].expr_t); (yyval.logic_expr_t)->expr_2_ = (yyvsp[0].expr_t); } #line 5935 "bison_parser.cpp" /* yacc.c:1652 */ break; case 231: #line 2374 "bison.y" /* yacc.c:1652 */ { (yyval.in_expr_t) = new InExpr(); (yyval.in_expr_t)->case_idx_ = CASE0; (yyval.in_expr_t)->operand_ = (yyvsp[-5].operand_t); (yyval.in_expr_t)->opt_not_ = (yyvsp[-4].opt_not_t); (yyval.in_expr_t)->select_no_parens_ = (yyvsp[-1].select_no_parens_t); } #line 5948 "bison_parser.cpp" /* yacc.c:1652 */ break; case 232: #line 2382 "bison.y" /* yacc.c:1652 */ { (yyval.in_expr_t) = new InExpr(); (yyval.in_expr_t)->case_idx_ = CASE1; (yyval.in_expr_t)->operand_ = (yyvsp[-5].operand_t); (yyval.in_expr_t)->opt_not_ = (yyvsp[-4].opt_not_t); (yyval.in_expr_t)->expr_list_ = (yyvsp[-1].expr_list_t); } #line 5961 "bison_parser.cpp" /* yacc.c:1652 */ break; case 233: #line 2390 "bison.y" /* yacc.c:1652 */ { (yyval.in_expr_t) = new InExpr(); (yyval.in_expr_t)->case_idx_ = CASE2; (yyval.in_expr_t)->operand_ = (yyvsp[-3].operand_t); (yyval.in_expr_t)->opt_not_ = (yyvsp[-2].opt_not_t); (yyval.in_expr_t)->table_name_ = (yyvsp[0].table_name_t); } #line 5974 "bison_parser.cpp" /* yacc.c:1652 */ break; case 234: #line 2401 "bison.y" /* yacc.c:1652 */ { (yyval.case_expr_t) = new CaseExpr(); (yyval.case_expr_t)->case_idx_ = CASE0; (yyval.case_expr_t)->expr_1_ = (yyvsp[-2].expr_t); (yyval.case_expr_t)->case_list_ = (yyvsp[-1].case_list_t); } #line 5986 "bison_parser.cpp" /* yacc.c:1652 */ break; case 235: #line 2408 "bison.y" /* yacc.c:1652 */ { (yyval.case_expr_t) = new CaseExpr(); (yyval.case_expr_t)->case_idx_ = CASE1; (yyval.case_expr_t)->case_list_ = (yyvsp[-1].case_list_t); } #line 5997 "bison_parser.cpp" /* yacc.c:1652 */ break; case 236: #line 2414 "bison.y" /* yacc.c:1652 */ { (yyval.case_expr_t) = new CaseExpr(); (yyval.case_expr_t)->case_idx_ = CASE2; (yyval.case_expr_t)->expr_1_ = (yyvsp[-4].expr_t); (yyval.case_expr_t)->case_list_ = (yyvsp[-3].case_list_t); (yyval.case_expr_t)->expr_2_ = (yyvsp[-1].expr_t); } #line 6010 "bison_parser.cpp" /* yacc.c:1652 */ break; case 237: #line 2422 "bison.y" /* yacc.c:1652 */ { (yyval.case_expr_t) = new CaseExpr(); (yyval.case_expr_t)->case_idx_ = CASE3; (yyval.case_expr_t)->case_list_ = (yyvsp[-3].case_list_t); (yyval.case_expr_t)->expr_1_ = (yyvsp[-1].expr_t); } #line 6022 "bison_parser.cpp" /* yacc.c:1652 */ break; case 238: #line 2432 "bison.y" /* yacc.c:1652 */ { (yyval.between_expr_t) = new BetweenExpr(); (yyval.between_expr_t)->case_idx_ = CASE0; (yyval.between_expr_t)->operand_1_ = (yyvsp[-4].operand_t); (yyval.between_expr_t)->operand_2_ = (yyvsp[-2].operand_t); (yyval.between_expr_t)->operand_3_ = (yyvsp[0].operand_t); } #line 6035 "bison_parser.cpp" /* yacc.c:1652 */ break; case 239: #line 2440 "bison.y" /* yacc.c:1652 */ { (yyval.between_expr_t) = new BetweenExpr(); (yyval.between_expr_t)->case_idx_ = CASE1; (yyval.between_expr_t)->operand_1_ = (yyvsp[-5].operand_t); (yyval.between_expr_t)->operand_2_ = (yyvsp[-2].operand_t); (yyval.between_expr_t)->operand_3_ = (yyvsp[0].operand_t); } #line 6048 "bison_parser.cpp" /* yacc.c:1652 */ break; case 240: #line 2451 "bison.y" /* yacc.c:1652 */ { (yyval.exists_expr_t) = new ExistsExpr(); (yyval.exists_expr_t)->case_idx_ = CASE0; (yyval.exists_expr_t)->opt_not_ = (yyvsp[-4].opt_not_t); (yyval.exists_expr_t)->select_no_parens_ = (yyvsp[-1].select_no_parens_t); } #line 6060 "bison_parser.cpp" /* yacc.c:1652 */ break; case 241: #line 2461 "bison.y" /* yacc.c:1652 */ { (yyval.case_list_t) = new CaseList(); (yyval.case_list_t)->case_idx_ = CASE0; (yyval.case_list_t)->case_clause_ = (yyvsp[0].case_clause_t); } #line 6071 "bison_parser.cpp" /* yacc.c:1652 */ break; case 242: #line 2467 "bison.y" /* yacc.c:1652 */ { (yyval.case_list_t) = new CaseList(); (yyval.case_list_t)->case_idx_ = CASE1; (yyval.case_list_t)->case_clause_ = (yyvsp[-1].case_clause_t); (yyval.case_list_t)->case_list_ = (yyvsp[0].case_list_t); } #line 6083 "bison_parser.cpp" /* yacc.c:1652 */ break; case 243: #line 2477 "bison.y" /* yacc.c:1652 */ { (yyval.case_clause_t) = new CaseClause(); (yyval.case_clause_t)->case_idx_ = CASE0; (yyval.case_clause_t)->expr_1_ = (yyvsp[-2].expr_t); (yyval.case_clause_t)->expr_2_ = (yyvsp[0].expr_t); } #line 6095 "bison_parser.cpp" /* yacc.c:1652 */ break; case 244: #line 2487 "bison.y" /* yacc.c:1652 */ { (yyval.comp_expr_t) = new CompExpr(); (yyval.comp_expr_t)->case_idx_ = CASE0; (yyval.comp_expr_t)->operand_1_ = (yyvsp[-2].operand_t); (yyval.comp_expr_t)->operand_2_ = (yyvsp[0].operand_t); } #line 6107 "bison_parser.cpp" /* yacc.c:1652 */ break; case 245: #line 2494 "bison.y" /* yacc.c:1652 */ { (yyval.comp_expr_t) = new CompExpr(); (yyval.comp_expr_t)->case_idx_ = CASE1; (yyval.comp_expr_t)->operand_1_ = (yyvsp[-2].operand_t); (yyval.comp_expr_t)->operand_2_ = (yyvsp[0].operand_t); } #line 6119 "bison_parser.cpp" /* yacc.c:1652 */ break; case 246: #line 2501 "bison.y" /* yacc.c:1652 */ { (yyval.comp_expr_t) = new CompExpr(); (yyval.comp_expr_t)->case_idx_ = CASE2; (yyval.comp_expr_t)->operand_1_ = (yyvsp[-2].operand_t); (yyval.comp_expr_t)->operand_2_ = (yyvsp[0].operand_t); } #line 6131 "bison_parser.cpp" /* yacc.c:1652 */ break; case 247: #line 2508 "bison.y" /* yacc.c:1652 */ { (yyval.comp_expr_t) = new CompExpr(); (yyval.comp_expr_t)->case_idx_ = CASE3; (yyval.comp_expr_t)->operand_1_ = (yyvsp[-2].operand_t); (yyval.comp_expr_t)->operand_2_ = (yyvsp[0].operand_t); } #line 6143 "bison_parser.cpp" /* yacc.c:1652 */ break; case 248: #line 2515 "bison.y" /* yacc.c:1652 */ { (yyval.comp_expr_t) = new CompExpr(); (yyval.comp_expr_t)->case_idx_ = CASE4; (yyval.comp_expr_t)->operand_1_ = (yyvsp[-2].operand_t); (yyval.comp_expr_t)->operand_2_ = (yyvsp[0].operand_t); } #line 6155 "bison_parser.cpp" /* yacc.c:1652 */ break; case 249: #line 2522 "bison.y" /* yacc.c:1652 */ { (yyval.comp_expr_t) = new CompExpr(); (yyval.comp_expr_t)->case_idx_ = CASE5; (yyval.comp_expr_t)->operand_1_ = (yyvsp[-2].operand_t); (yyval.comp_expr_t)->operand_2_ = (yyvsp[0].operand_t); } #line 6167 "bison_parser.cpp" /* yacc.c:1652 */ break; case 250: #line 2532 "bison.y" /* yacc.c:1652 */ { (yyval.extract_expr_t) = new ExtractExpr(); (yyval.extract_expr_t)->case_idx_ = CASE0; (yyval.extract_expr_t)->datetime_field_ = (yyvsp[-3].datetime_field_t); (yyval.extract_expr_t)->expr_ = (yyvsp[-1].expr_t); } #line 6179 "bison_parser.cpp" /* yacc.c:1652 */ break; case 251: #line 2542 "bison.y" /* yacc.c:1652 */ { (yyval.datetime_field_t) = new DatetimeField(); (yyval.datetime_field_t)->case_idx_ = CASE0; } #line 6189 "bison_parser.cpp" /* yacc.c:1652 */ break; case 252: #line 2547 "bison.y" /* yacc.c:1652 */ { (yyval.datetime_field_t) = new DatetimeField(); (yyval.datetime_field_t)->case_idx_ = CASE1; } #line 6199 "bison_parser.cpp" /* yacc.c:1652 */ break; case 253: #line 2552 "bison.y" /* yacc.c:1652 */ { (yyval.datetime_field_t) = new DatetimeField(); (yyval.datetime_field_t)->case_idx_ = CASE2; } #line 6209 "bison_parser.cpp" /* yacc.c:1652 */ break; case 254: #line 2557 "bison.y" /* yacc.c:1652 */ { (yyval.datetime_field_t) = new DatetimeField(); (yyval.datetime_field_t)->case_idx_ = CASE3; } #line 6219 "bison_parser.cpp" /* yacc.c:1652 */ break; case 255: #line 2562 "bison.y" /* yacc.c:1652 */ { (yyval.datetime_field_t) = new DatetimeField(); (yyval.datetime_field_t)->case_idx_ = CASE4; } #line 6229 "bison_parser.cpp" /* yacc.c:1652 */ break; case 256: #line 2567 "bison.y" /* yacc.c:1652 */ { (yyval.datetime_field_t) = new DatetimeField(); (yyval.datetime_field_t)->case_idx_ = CASE5; } #line 6239 "bison_parser.cpp" /* yacc.c:1652 */ break; case 257: #line 2575 "bison.y" /* yacc.c:1652 */ { (yyval.array_index_t) = new ArrayIndex(); (yyval.array_index_t)->case_idx_ = CASE0; (yyval.array_index_t)->operand_ = (yyvsp[-3].operand_t); (yyval.array_index_t)->int_literal_ = (yyvsp[-1].int_literal_t); } #line 6251 "bison_parser.cpp" /* yacc.c:1652 */ break; case 258: #line 2585 "bison.y" /* yacc.c:1652 */ { (yyval.literal_t) = new Literal(); (yyval.literal_t)->case_idx_ = CASE0; (yyval.literal_t)->string_literal_ = (yyvsp[0].string_literal_t); } #line 6262 "bison_parser.cpp" /* yacc.c:1652 */ break; case 259: #line 2591 "bison.y" /* yacc.c:1652 */ { (yyval.literal_t) = new Literal(); (yyval.literal_t)->case_idx_ = CASE1; (yyval.literal_t)->bool_literal_ = (yyvsp[0].bool_literal_t); } #line 6273 "bison_parser.cpp" /* yacc.c:1652 */ break; case 260: #line 2597 "bison.y" /* yacc.c:1652 */ { (yyval.literal_t) = new Literal(); (yyval.literal_t)->case_idx_ = CASE2; (yyval.literal_t)->num_literal_ = (yyvsp[0].num_literal_t); } #line 6284 "bison_parser.cpp" /* yacc.c:1652 */ break; case 261: #line 2606 "bison.y" /* yacc.c:1652 */ { (yyval.string_literal_t) = new StringLiteral(); (yyval.string_literal_t)->string_val_ = (yyvsp[0].sval); free((yyvsp[0].sval)); } #line 6295 "bison_parser.cpp" /* yacc.c:1652 */ break; case 262: #line 2615 "bison.y" /* yacc.c:1652 */ { (yyval.bool_literal_t) = new BoolLiteral(); (yyval.bool_literal_t)->case_idx_ = CASE0; } #line 6305 "bison_parser.cpp" /* yacc.c:1652 */ break; case 263: #line 2620 "bison.y" /* yacc.c:1652 */ { (yyval.bool_literal_t) = new BoolLiteral(); (yyval.bool_literal_t)->case_idx_ = CASE1; } #line 6315 "bison_parser.cpp" /* yacc.c:1652 */ break; case 264: #line 2628 "bison.y" /* yacc.c:1652 */ { (yyval.num_literal_t) = new NumLiteral(); (yyval.num_literal_t)->case_idx_ = CASE0; (yyval.num_literal_t)->int_literal_ = (yyvsp[0].int_literal_t); } #line 6326 "bison_parser.cpp" /* yacc.c:1652 */ break; case 265: #line 2634 "bison.y" /* yacc.c:1652 */ { (yyval.num_literal_t) = new NumLiteral(); (yyval.num_literal_t)->case_idx_ = CASE1; (yyval.num_literal_t)->float_literal_ = (yyvsp[0].float_literal_t); } #line 6337 "bison_parser.cpp" /* yacc.c:1652 */ break; case 266: #line 2643 "bison.y" /* yacc.c:1652 */ { (yyval.int_literal_t) = new IntLiteral(); (yyval.int_literal_t)->int_val_ = (yyvsp[0].ival); } #line 6347 "bison_parser.cpp" /* yacc.c:1652 */ break; case 267: #line 2651 "bison.y" /* yacc.c:1652 */ { (yyval.float_literal_t) = new FloatLiteral(); (yyval.float_literal_t)->float_val_ = (yyvsp[0].fval); } #line 6357 "bison_parser.cpp" /* yacc.c:1652 */ break; case 268: #line 2659 "bison.y" /* yacc.c:1652 */ { (yyval.opt_column_t) = new OptColumn(); (yyval.opt_column_t)->case_idx_ = CASE0; } #line 6367 "bison_parser.cpp" /* yacc.c:1652 */ break; case 269: #line 2664 "bison.y" /* yacc.c:1652 */ { (yyval.opt_column_t) = new OptColumn(); (yyval.opt_column_t)->case_idx_ = CASE1; } #line 6377 "bison_parser.cpp" /* yacc.c:1652 */ break; case 270: #line 2672 "bison.y" /* yacc.c:1652 */ { (yyval.opt_if_not_exist_t) = new OptIfNotExist(); (yyval.opt_if_not_exist_t)->case_idx_ = CASE0; } #line 6387 "bison_parser.cpp" /* yacc.c:1652 */ break; case 271: #line 2677 "bison.y" /* yacc.c:1652 */ { (yyval.opt_if_not_exist_t) = new OptIfNotExist(); (yyval.opt_if_not_exist_t)->case_idx_ = CASE1; } #line 6397 "bison_parser.cpp" /* yacc.c:1652 */ break; case 272: #line 2685 "bison.y" /* yacc.c:1652 */ { (yyval.opt_if_exist_t) = new OptIfExist(); (yyval.opt_if_exist_t)->case_idx_ = CASE0; } #line 6407 "bison_parser.cpp" /* yacc.c:1652 */ break; case 273: #line 2690 "bison.y" /* yacc.c:1652 */ { (yyval.opt_if_exist_t) = new OptIfExist(); (yyval.opt_if_exist_t)->case_idx_ = CASE1; } #line 6417 "bison_parser.cpp" /* yacc.c:1652 */ break; case 274: #line 2698 "bison.y" /* yacc.c:1652 */ { (yyval.identifier_t) = new Identifier(); (yyval.identifier_t)->string_val_ = (yyvsp[0].sval); free((yyvsp[0].sval)); } #line 6428 "bison_parser.cpp" /* yacc.c:1652 */ break; case 275: #line 2707 "bison.y" /* yacc.c:1652 */ { (yyval.table_name_t) = new TableName(); (yyval.table_name_t)->case_idx_ = CASE0; (yyval.table_name_t)->identifier_ = (yyvsp[0].identifier_t); if ((yyval.table_name_t)) { auto tmp1 = (yyval.table_name_t)->identifier_; if (tmp1) { tmp1->data_type_ = kDataTableName; tmp1->scope_ = 1; tmp1->data_flag_ = (DATAFLAG)8; } } } #line 6448 "bison_parser.cpp" /* yacc.c:1652 */ break; case 276: #line 2725 "bison.y" /* yacc.c:1652 */ { (yyval.column_name_t) = new ColumnName(); (yyval.column_name_t)->case_idx_ = CASE0; (yyval.column_name_t)->identifier_ = (yyvsp[0].identifier_t); if ((yyval.column_name_t)) { auto tmp1 = (yyval.column_name_t)->identifier_; if (tmp1) { tmp1->data_type_ = kDataColumnName; tmp1->scope_ = 2; tmp1->data_flag_ = (DATAFLAG)8; } } } #line 6468 "bison_parser.cpp" /* yacc.c:1652 */ break; case 277: #line 2743 "bison.y" /* yacc.c:1652 */ { (yyval.opt_unique_t) = new OptUnique(); (yyval.opt_unique_t)->case_idx_ = CASE0; } #line 6478 "bison_parser.cpp" /* yacc.c:1652 */ break; case 278: #line 2748 "bison.y" /* yacc.c:1652 */ { (yyval.opt_unique_t) = new OptUnique(); (yyval.opt_unique_t)->case_idx_ = CASE1; } #line 6488 "bison_parser.cpp" /* yacc.c:1652 */ break; case 279: #line 2756 "bison.y" /* yacc.c:1652 */ { (yyval.view_name_t) = new ViewName(); (yyval.view_name_t)->case_idx_ = CASE0; (yyval.view_name_t)->identifier_ = (yyvsp[0].identifier_t); } #line 6499 "bison_parser.cpp" /* yacc.c:1652 */ break; case 280: #line 2765 "bison.y" /* yacc.c:1652 */ { (yyval.binary_op_t) = new BinaryOp(); (yyval.binary_op_t)->case_idx_ = CASE0; } #line 6509 "bison_parser.cpp" /* yacc.c:1652 */ break; case 281: #line 2770 "bison.y" /* yacc.c:1652 */ { (yyval.binary_op_t) = new BinaryOp(); (yyval.binary_op_t)->case_idx_ = CASE1; } #line 6519 "bison_parser.cpp" /* yacc.c:1652 */ break; case 282: #line 2775 "bison.y" /* yacc.c:1652 */ { (yyval.binary_op_t) = new BinaryOp(); (yyval.binary_op_t)->case_idx_ = CASE2; } #line 6529 "bison_parser.cpp" /* yacc.c:1652 */ break; case 283: #line 2780 "bison.y" /* yacc.c:1652 */ { (yyval.binary_op_t) = new BinaryOp(); (yyval.binary_op_t)->case_idx_ = CASE3; } #line 6539 "bison_parser.cpp" /* yacc.c:1652 */ break; case 284: #line 2785 "bison.y" /* yacc.c:1652 */ { (yyval.binary_op_t) = new BinaryOp(); (yyval.binary_op_t)->case_idx_ = CASE4; } #line 6549 "bison_parser.cpp" /* yacc.c:1652 */ break; case 285: #line 2793 "bison.y" /* yacc.c:1652 */ { (yyval.opt_not_t) = new OptNot(); (yyval.opt_not_t)->case_idx_ = CASE0; } #line 6559 "bison_parser.cpp" /* yacc.c:1652 */ break; case 286: #line 2798 "bison.y" /* yacc.c:1652 */ { (yyval.opt_not_t) = new OptNot(); (yyval.opt_not_t)->case_idx_ = CASE1; } #line 6569 "bison_parser.cpp" /* yacc.c:1652 */ break; case 287: #line 2806 "bison.y" /* yacc.c:1652 */ { (yyval.name_t) = new Name(); (yyval.name_t)->case_idx_ = CASE0; (yyval.name_t)->identifier_ = (yyvsp[0].identifier_t); } #line 6580 "bison_parser.cpp" /* yacc.c:1652 */ break; case 288: #line 2815 "bison.y" /* yacc.c:1652 */ { (yyval.type_name_t) = new TypeName(); (yyval.type_name_t)->case_idx_ = CASE0; (yyval.type_name_t)->numeric_type_ = (yyvsp[0].numeric_type_t); } #line 6591 "bison_parser.cpp" /* yacc.c:1652 */ break; case 289: #line 2821 "bison.y" /* yacc.c:1652 */ { (yyval.type_name_t) = new TypeName(); (yyval.type_name_t)->case_idx_ = CASE1; (yyval.type_name_t)->character_type_ = (yyvsp[0].character_type_t); } #line 6602 "bison_parser.cpp" /* yacc.c:1652 */ break; case 290: #line 2830 "bison.y" /* yacc.c:1652 */ { (yyval.character_type_t) = new CharacterType(); (yyval.character_type_t)->case_idx_ = CASE0; (yyval.character_type_t)->character_with_length_ = (yyvsp[0].character_with_length_t); } #line 6613 "bison_parser.cpp" /* yacc.c:1652 */ break; case 291: #line 2836 "bison.y" /* yacc.c:1652 */ { (yyval.character_type_t) = new CharacterType(); (yyval.character_type_t)->case_idx_ = CASE1; (yyval.character_type_t)->character_without_length_ = (yyvsp[0].character_without_length_t); } #line 6624 "bison_parser.cpp" /* yacc.c:1652 */ break; case 292: #line 2845 "bison.y" /* yacc.c:1652 */ { (yyval.character_with_length_t) = new CharacterWithLength(); (yyval.character_with_length_t)->case_idx_ = CASE0; (yyval.character_with_length_t)->character_conflicta_ = (yyvsp[-3].character_conflicta_t); (yyval.character_with_length_t)->int_literal_ = (yyvsp[-1].int_literal_t); } #line 6636 "bison_parser.cpp" /* yacc.c:1652 */ break; case 293: #line 2855 "bison.y" /* yacc.c:1652 */ { (yyval.character_without_length_t) = new CharacterWithoutLength(); (yyval.character_without_length_t)->case_idx_ = CASE0; (yyval.character_without_length_t)->character_conflicta_ = (yyvsp[0].character_conflicta_t); } #line 6647 "bison_parser.cpp" /* yacc.c:1652 */ break; case 294: #line 2864 "bison.y" /* yacc.c:1652 */ { (yyval.character_conflicta_t) = new CharacterConflicta(); (yyval.character_conflicta_t)->case_idx_ = CASE0; (yyval.character_conflicta_t)->opt_varying_ = (yyvsp[0].opt_varying_t); } #line 6658 "bison_parser.cpp" /* yacc.c:1652 */ break; case 295: #line 2870 "bison.y" /* yacc.c:1652 */ { (yyval.character_conflicta_t) = new CharacterConflicta(); (yyval.character_conflicta_t)->case_idx_ = CASE1; (yyval.character_conflicta_t)->opt_varying_ = (yyvsp[0].opt_varying_t); } #line 6669 "bison_parser.cpp" /* yacc.c:1652 */ break; case 296: #line 2876 "bison.y" /* yacc.c:1652 */ { (yyval.character_conflicta_t) = new CharacterConflicta(); (yyval.character_conflicta_t)->case_idx_ = CASE2; } #line 6679 "bison_parser.cpp" /* yacc.c:1652 */ break; case 297: #line 2881 "bison.y" /* yacc.c:1652 */ { (yyval.character_conflicta_t) = new CharacterConflicta(); (yyval.character_conflicta_t)->case_idx_ = CASE3; } #line 6689 "bison_parser.cpp" /* yacc.c:1652 */ break; case 298: #line 2886 "bison.y" /* yacc.c:1652 */ { (yyval.character_conflicta_t) = new CharacterConflicta(); (yyval.character_conflicta_t)->case_idx_ = CASE4; (yyval.character_conflicta_t)->opt_varying_ = (yyvsp[0].opt_varying_t); } #line 6700 "bison_parser.cpp" /* yacc.c:1652 */ break; case 299: #line 2892 "bison.y" /* yacc.c:1652 */ { (yyval.character_conflicta_t) = new CharacterConflicta(); (yyval.character_conflicta_t)->case_idx_ = CASE5; (yyval.character_conflicta_t)->opt_varying_ = (yyvsp[0].opt_varying_t); } #line 6711 "bison_parser.cpp" /* yacc.c:1652 */ break; case 300: #line 2898 "bison.y" /* yacc.c:1652 */ { (yyval.character_conflicta_t) = new CharacterConflicta(); (yyval.character_conflicta_t)->case_idx_ = CASE6; (yyval.character_conflicta_t)->opt_varying_ = (yyvsp[0].opt_varying_t); } #line 6722 "bison_parser.cpp" /* yacc.c:1652 */ break; case 301: #line 2907 "bison.y" /* yacc.c:1652 */ { (yyval.opt_varying_t) = new OptVarying(); (yyval.opt_varying_t)->case_idx_ = CASE0; } #line 6732 "bison_parser.cpp" /* yacc.c:1652 */ break; case 302: #line 2912 "bison.y" /* yacc.c:1652 */ { (yyval.opt_varying_t) = new OptVarying(); (yyval.opt_varying_t)->case_idx_ = CASE1; } #line 6742 "bison_parser.cpp" /* yacc.c:1652 */ break; case 303: #line 2920 "bison.y" /* yacc.c:1652 */ { (yyval.numeric_type_t) = new NumericType(); (yyval.numeric_type_t)->case_idx_ = CASE0; } #line 6752 "bison_parser.cpp" /* yacc.c:1652 */ break; case 304: #line 2925 "bison.y" /* yacc.c:1652 */ { (yyval.numeric_type_t) = new NumericType(); (yyval.numeric_type_t)->case_idx_ = CASE1; } #line 6762 "bison_parser.cpp" /* yacc.c:1652 */ break; case 305: #line 2930 "bison.y" /* yacc.c:1652 */ { (yyval.numeric_type_t) = new NumericType(); (yyval.numeric_type_t)->case_idx_ = CASE2; } #line 6772 "bison_parser.cpp" /* yacc.c:1652 */ break; case 306: #line 2935 "bison.y" /* yacc.c:1652 */ { (yyval.numeric_type_t) = new NumericType(); (yyval.numeric_type_t)->case_idx_ = CASE3; } #line 6782 "bison_parser.cpp" /* yacc.c:1652 */ break; case 307: #line 2940 "bison.y" /* yacc.c:1652 */ { (yyval.numeric_type_t) = new NumericType(); (yyval.numeric_type_t)->case_idx_ = CASE4; } #line 6792 "bison_parser.cpp" /* yacc.c:1652 */ break; case 308: #line 2945 "bison.y" /* yacc.c:1652 */ { (yyval.numeric_type_t) = new NumericType(); (yyval.numeric_type_t)->case_idx_ = CASE5; } #line 6802 "bison_parser.cpp" /* yacc.c:1652 */ break; case 309: #line 2950 "bison.y" /* yacc.c:1652 */ { (yyval.numeric_type_t) = new NumericType(); (yyval.numeric_type_t)->case_idx_ = CASE6; } #line 6812 "bison_parser.cpp" /* yacc.c:1652 */ break; case 310: #line 2955 "bison.y" /* yacc.c:1652 */ { (yyval.numeric_type_t) = new NumericType(); (yyval.numeric_type_t)->case_idx_ = CASE7; } #line 6822 "bison_parser.cpp" /* yacc.c:1652 */ break; case 311: #line 2960 "bison.y" /* yacc.c:1652 */ { (yyval.numeric_type_t) = new NumericType(); (yyval.numeric_type_t)->case_idx_ = CASE8; } #line 6832 "bison_parser.cpp" /* yacc.c:1652 */ break; case 312: #line 2965 "bison.y" /* yacc.c:1652 */ { (yyval.numeric_type_t) = new NumericType(); (yyval.numeric_type_t)->case_idx_ = CASE9; } #line 6842 "bison_parser.cpp" /* yacc.c:1652 */ break; case 313: #line 2970 "bison.y" /* yacc.c:1652 */ { (yyval.numeric_type_t) = new NumericType(); (yyval.numeric_type_t)->case_idx_ = CASE10; } #line 6852 "bison_parser.cpp" /* yacc.c:1652 */ break; case 314: #line 2978 "bison.y" /* yacc.c:1652 */ { (yyval.opt_table_constraint_list_t) = new OptTableConstraintList(); (yyval.opt_table_constraint_list_t)->case_idx_ = CASE0; (yyval.opt_table_constraint_list_t)->table_constraint_list_ = (yyvsp[0].table_constraint_list_t); } #line 6863 "bison_parser.cpp" /* yacc.c:1652 */ break; case 315: #line 2984 "bison.y" /* yacc.c:1652 */ { (yyval.opt_table_constraint_list_t) = new OptTableConstraintList(); (yyval.opt_table_constraint_list_t)->case_idx_ = CASE1; } #line 6873 "bison_parser.cpp" /* yacc.c:1652 */ break; case 316: #line 2992 "bison.y" /* yacc.c:1652 */ { (yyval.table_constraint_list_t) = new TableConstraintList(); (yyval.table_constraint_list_t)->case_idx_ = CASE0; (yyval.table_constraint_list_t)->table_constraint_ = (yyvsp[0].table_constraint_t); } #line 6884 "bison_parser.cpp" /* yacc.c:1652 */ break; case 317: #line 2998 "bison.y" /* yacc.c:1652 */ { (yyval.table_constraint_list_t) = new TableConstraintList(); (yyval.table_constraint_list_t)->case_idx_ = CASE1; (yyval.table_constraint_list_t)->table_constraint_ = (yyvsp[-2].table_constraint_t); (yyval.table_constraint_list_t)->table_constraint_list_ = (yyvsp[0].table_constraint_list_t); } #line 6896 "bison_parser.cpp" /* yacc.c:1652 */ break; case 318: #line 3008 "bison.y" /* yacc.c:1652 */ { (yyval.table_constraint_t) = new TableConstraint(); (yyval.table_constraint_t)->case_idx_ = CASE0; (yyval.table_constraint_t)->constraint_name_ = (yyvsp[-5].constraint_name_t); (yyval.table_constraint_t)->indexed_column_list_ = (yyvsp[-1].indexed_column_list_t); } #line 6908 "bison_parser.cpp" /* yacc.c:1652 */ break; case 319: #line 3015 "bison.y" /* yacc.c:1652 */ { (yyval.table_constraint_t) = new TableConstraint(); (yyval.table_constraint_t)->case_idx_ = CASE1; (yyval.table_constraint_t)->constraint_name_ = (yyvsp[-4].constraint_name_t); (yyval.table_constraint_t)->indexed_column_list_ = (yyvsp[-1].indexed_column_list_t); } #line 6920 "bison_parser.cpp" /* yacc.c:1652 */ break; case 320: #line 3022 "bison.y" /* yacc.c:1652 */ { (yyval.table_constraint_t) = new TableConstraint(); (yyval.table_constraint_t)->case_idx_ = CASE2; (yyval.table_constraint_t)->constraint_name_ = (yyvsp[-4].constraint_name_t); (yyval.table_constraint_t)->expr_ = (yyvsp[-1].expr_t); } #line 6932 "bison_parser.cpp" /* yacc.c:1652 */ break; case 321: #line 3029 "bison.y" /* yacc.c:1652 */ { (yyval.table_constraint_t) = new TableConstraint(); (yyval.table_constraint_t)->case_idx_ = CASE3; (yyval.table_constraint_t)->constraint_name_ = (yyvsp[-6].constraint_name_t); (yyval.table_constraint_t)->column_name_list_ = (yyvsp[-2].column_name_list_t); (yyval.table_constraint_t)->foreign_clause_ = (yyvsp[0].foreign_clause_t); if ((yyval.table_constraint_t)) { auto tmp1 = (yyval.table_constraint_t)->column_name_list_; while (tmp1) { auto tmp2 = tmp1->column_name_; if (tmp2) { auto tmp3 = tmp2->identifier_; if (tmp3) { tmp3->data_type_ = kDataColumnName; tmp3->scope_ = 2; tmp3->data_flag_ = (DATAFLAG)8; } } tmp1 = tmp1->column_name_list_; } } } #line 6961 "bison_parser.cpp" /* yacc.c:1652 */ break; #line 6965 "bison_parser.cpp" /* yacc.c:1652 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires that yytoken be updated with the new translation. We take the approach of translating immediately before every use of yytoken. One alternative is translating here after every semantic action, but that translation would be missed if the semantic action invokes YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an incorrect destructor might then be invoked immediately. In the case of YYERROR or YYBACKUP, subsequent parser actions might lead to an incorrect destructor call or verbose syntax error message before the lookahead is translated. */ YY_SYMBOL_PRINT("-> $$ =", yyr1[yyn], &yyval, &yyloc); YYPOPSTACK(yylen); yylen = 0; YY_STACK_PRINT(yyss, yyssp); *++yyvsp = yyval; *++yylsp = yyloc; /* Now 'shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ { const int yylhs = yyr1[yyn] - YYNTOKENS; const int yyi = yypgoto[yylhs] + *yyssp; yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp ? yytable[yyi] : yydefgoto[yylhs]); } goto yynewstate; /*--------------------------------------. | yyerrlab -- here on detecting error. | `--------------------------------------*/ yyerrlab: /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE(yychar); /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { ++yynerrs; #if !YYERROR_VERBOSE yyerror(&yylloc, result, scanner, YY_("syntax error")); #else #define YYSYNTAX_ERROR yysyntax_error(&yymsg_alloc, &yymsg, yyssp, yytoken) { char const *yymsgp = YY_("syntax error"); int yysyntax_error_status; yysyntax_error_status = YYSYNTAX_ERROR; if (yysyntax_error_status == 0) yymsgp = yymsg; else if (yysyntax_error_status == 1) { if (yymsg != yymsgbuf) YYSTACK_FREE(yymsg); yymsg = (char *)YYSTACK_ALLOC(yymsg_alloc); if (!yymsg) { yymsg = yymsgbuf; yymsg_alloc = sizeof yymsgbuf; yysyntax_error_status = 2; } else { yysyntax_error_status = YYSYNTAX_ERROR; yymsgp = yymsg; } } yyerror(&yylloc, result, scanner, yymsgp); if (yysyntax_error_status == 2) goto yyexhaustedlab; } #undef YYSYNTAX_ERROR #endif } yyerror_range[1] = yylloc; if (yyerrstatus == 3) { /* If just tried and failed to reuse lookahead token after an error, discard it. */ if (yychar <= YYEOF) { /* Return failure if at end of input. */ if (yychar == YYEOF) YYABORT; } else { yydestruct("Error: discarding", yytoken, &yylval, &yylloc, result, scanner); yychar = YYEMPTY; } } /* Else will try to reuse lookahead token after shifting the error token. */ goto yyerrlab1; /*---------------------------------------------------. | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: /* Pacify compilers when the user code never invokes YYERROR and the label yyerrorlab therefore never appears in user code. */ if (0) YYERROR; /* Do not reclaim the symbols of the rule whose action triggered this YYERROR. */ YYPOPSTACK(yylen); yylen = 0; YY_STACK_PRINT(yyss, yyssp); yystate = *yyssp; goto yyerrlab1; /*-------------------------------------------------------------. | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) { yyn = yypact[yystate]; if (!yypact_value_is_default(yyn)) { yyn += YYTERROR; if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) { yyn = yytable[yyn]; if (0 < yyn) break; } } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) YYABORT; yyerror_range[1] = *yylsp; yydestruct("Error: popping", yystos[yystate], yyvsp, yylsp, result, scanner); YYPOPSTACK(1); yystate = *yyssp; YY_STACK_PRINT(yyss, yyssp); } YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END yyerror_range[2] = yylloc; /* Using YYLLOC is tempting, but would change the location of the lookahead. YYLOC is available though. */ YYLLOC_DEFAULT(yyloc, yyerror_range, 2); *++yylsp = yyloc; /* Shift the error token. */ YY_SYMBOL_PRINT("Shifting", yystos[yyn], yyvsp, yylsp); yystate = yyn; goto yynewstate; /*-------------------------------------. | yyacceptlab -- YYACCEPT comes here. | `-------------------------------------*/ yyacceptlab: yyresult = 0; goto yyreturn; /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: yyresult = 1; goto yyreturn; #if !defined yyoverflow || YYERROR_VERBOSE /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ yyexhaustedlab: yyerror(&yylloc, result, scanner, YY_("memory exhausted")); yyresult = 2; /* Fall through. */ #endif /*-----------------------------------------------------. | yyreturn -- parsing is finished, return the result. | `-----------------------------------------------------*/ yyreturn: if (yychar != YYEMPTY) { /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ yytoken = YYTRANSLATE(yychar); yydestruct("Cleanup: discarding lookahead", yytoken, &yylval, &yylloc, result, scanner); } /* Do not reclaim the symbols of the rule whose action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK(yylen); YY_STACK_PRINT(yyss, yyssp); while (yyssp != yyss) { yydestruct("Cleanup: popping", yystos[*yyssp], yyvsp, yylsp, result, scanner); YYPOPSTACK(1); } #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE(yyss); #endif #if YYERROR_VERBOSE if (yymsg != yymsgbuf) YYSTACK_FREE(yymsg); #endif return yyresult; } #line 3055 "bison.y" /* yacc.c:1918 */ ================================================ FILE: srcs/internal/postgresql/parser/bison_parser.h ================================================ /* A Bison parser, made by GNU Bison 3.3.2. */ /* Bison interface for Yacc-like parsers in C Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2019 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* Undocumented macros, especially those whose name start with YY_, are private implementation details. Do not rely on them. */ #ifndef YY_FF_BISON_PARSER_H_INCLUDED #define YY_FF_BISON_PARSER_H_INCLUDED /* Debug traces. */ #ifndef FF_DEBUG #if defined YYDEBUG #if YYDEBUG #define FF_DEBUG 1 #else #define FF_DEBUG 0 #endif #else /* ! defined YYDEBUG */ #define FF_DEBUG 0 #endif /* ! defined YYDEBUG */ #endif /* ! defined FF_DEBUG */ #if FF_DEBUG extern int ff_debug; #endif /* "%code requires" blocks. */ #line 8 "bison.y" /* yacc.c:1921 */ #include "../include/ast.h" #include "parser_typedef.h" #line 61 "bison_parser.h" /* yacc.c:1921 */ /* Token type. */ #ifndef FF_TOKENTYPE #define FF_TOKENTYPE enum ff_tokentype { SQL_OP_NOTEQUAL = 258, SQL_SIMPLE = 259, SQL_TEXT = 260, SQL_OVER = 261, SQL_BETWEEN = 262, SQL_OP_SEMI = 263, SQL_BIGINT = 264, SQL_LIMIT = 265, SQL_WITH = 266, SQL_ORDER = 267, SQL_LAST = 268, SQL_UNBOUNDED = 269, SQL_PRECEDING = 270, SQL_EXCEPT = 271, SQL_NUMERIC = 272, SQL_OP_LESSTHAN = 273, SQL_PROCEDURE = 274, SQL_ACTION = 275, SQL_FIRST = 276, SQL_OP_GREATEREQ = 277, SQL_CHECK = 278, SQL_FULL = 279, SQL_NATURAL = 280, SQL_DOUBLE = 281, SQL_NATIONAL = 282, SQL_OP_ADD = 283, SQL_CURRENT = 284, SQL_TRIGGER = 285, SQL_OP_SUB = 286, SQL_FALSE = 287, SQL_UNIQUE = 288, SQL_WHERE = 289, SQL_MINUTE = 290, SQL_BEFORE = 291, SQL_ON = 292, SQL_PARTIAL = 293, SQL_OF = 294, SQL_AFTER = 295, SQL_PRIMARY = 296, SQL_MONTH = 297, SQL_DEFERRED = 298, SQL_OP_DOUBLE_DOLLAR = 299, SQL_VARYING = 300, SQL_OP_GREATERTHAN = 301, SQL_OR = 302, SQL_PLPGSQL = 303, SQL_DELETE = 304, SQL_INDEX = 305, SQL_RETURN = 306, SQL_OP_MUL = 307, SQL_FOREIGN = 308, SQL_RESTRICT = 309, SQL_FOLLOWING = 310, SQL_TIES = 311, SQL_DEC = 312, SQL_SELECT = 313, SQL_BEGIN = 314, SQL_LANGUAGE = 315, SQL_DISTINCT = 316, SQL_TRUE = 317, SQL_BY = 318, SQL_OP_MOD = 319, SQL_VALUES = 320, SQL_IS = 321, SQL_ROW = 322, SQL_FUNCTION = 323, SQL_END = 324, SQL_RECURSIVE = 325, SQL_FOR = 326, SQL_UNION = 327, SQL_NULLS = 328, SQL_UPDATE = 329, SQL_ELSE = 330, SQL_RANGE = 331, SQL_OFFSET = 332, SQL_INDEXED = 333, SQL_INSTEAD = 334, SQL_NCHAR = 335, SQL_AND = 336, SQL_REINDEX = 337, SQL_INITIALLY = 338, SQL_YEAR = 339, SQL_PRECISION = 340, SQL_FILTER = 341, SQL_NOT = 342, SQL_VIEW = 343, SQL_DEFFERRABLE = 344, SQL_REAL = 345, SQL_THEN = 346, SQL_OPTION = 347, SQL_DEFAULT = 348, SQL_GLOBAL = 349, SQL_CROSS = 350, SQL_CHAR = 351, SQL_REFERENCES = 352, SQL_OP_XOR = 353, SQL_GROUP = 354, SQL_CASE = 355, SQL_SET = 356, SQL_HOUR = 357, SQL_NO = 358, SQL_COLUMN = 359, SQL_LOCAL = 360, SQL_DROP = 361, SQL_REPLACE = 362, SQL_ASC = 363, SQL_OP_COMMA = 364, SQL_TABLE = 365, SQL_ARRAY = 366, SQL_IF = 367, SQL_EXTRACT = 368, SQL_LEFT = 369, SQL_OUTER = 370, SQL_DECIMAL = 371, SQL_PARTITION = 372, SQL_CASCADE = 373, SQL_ADD = 374, SQL_OTHERS = 375, SQL_OP_LESSEQ = 376, SQL_MATCH = 377, SQL_ALL = 378, SQL_ROWS = 379, SQL_JOIN = 380, SQL_LIKE = 381, SQL_INTEGER = 382, SQL_OP_RP = 383, SQL_INT = 384, SQL_BOOLEAN = 385, SQL_KEY = 386, SQL_EACH = 387, SQL_USING = 388, SQL_RENAME = 389, SQL_DO = 390, SQL_FLOAT = 391, SQL_OP_LP = 392, SQL_CHARACTER = 393, SQL_UMINUS = 394, SQL_CAST = 395, SQL_GROUPS = 396, SQL_NULL = 397, SQL_SMALLINT = 398, SQL_INSERT = 399, SQL_TEMPORARY = 400, SQL_CONSTRAINT = 401, SQL_CREATE = 402, SQL_OP_LBRACKET = 403, SQL_WHEN = 404, SQL_IMMEDIATE = 405, SQL_TO = 406, SQL_EXCLUDE = 407, SQL_DAY = 408, SQL_CONFLICT = 409, SQL_OP_RBRACKET = 410, SQL_EXECUTE = 411, SQL_EXISTS = 412, SQL_INTO = 413, SQL_OP_DIVIDE = 414, SQL_CASCADED = 415, SQL_ISNULL = 416, SQL_AS = 417, SQL_INNER = 418, SQL_INTERSECT = 419, SQL_IN = 420, SQL_OP_EQUAL = 421, SQL_VARCHAR = 422, SQL_ALTER = 423, SQL_DESC = 424, SQL_FROM = 425, SQL_TEMP = 426, SQL_UNLOGGED = 427, SQL_SECOND = 428, SQL_WINDOW = 429, SQL_NOTHING = 430, SQL_HAVING = 431, SQL_INTLITERAL = 432, SQL_STRINGLITERAL = 433, SQL_FLOATLITERAL = 434, SQL_IDENTIFIER = 435 }; #endif /* Value type. */ #if !defined FF_STYPE && !defined FF_STYPE_IS_DECLARED #line 30 "bison.y" /* yacc.c:1921 */ union FF_STYPE { #line 30 "bison.y" /* yacc.c:1921 */ long ival; char* sval; double fval; Program* program_t; Stmtlist* stmtlist_t; Stmt* stmt_t; CreateStmt* create_stmt_t; DropStmt* drop_stmt_t; AlterStmt* alter_stmt_t; SelectStmt* select_stmt_t; SelectWithParens* select_with_parens_t; SelectNoParens* select_no_parens_t; SelectClauseList* select_clause_list_t; SelectClause* select_clause_t; CombineClause* combine_clause_t; OptFromClause* opt_from_clause_t; SelectTarget* select_target_t; OptWindowClause* opt_window_clause_t; WindowClause* window_clause_t; WindowDefList* window_def_list_t; WindowDef* window_def_t; WindowName* window_name_t; Window* window_t; OptPartition* opt_partition_t; OptFrameClause* opt_frame_clause_t; RangeOrRows* range_or_rows_t; FrameBoundStart* frame_bound_start_t; FrameBoundEnd* frame_bound_end_t; FrameBound* frame_bound_t; OptFrameExclude* opt_frame_exclude_t; FrameExclude* frame_exclude_t; OptExistWindowName* opt_exist_window_name_t; OptGroupClause* opt_group_clause_t; OptHavingClause* opt_having_clause_t; OptWhereClause* opt_where_clause_t; WhereClause* where_clause_t; FromClause* from_clause_t; TableRef* table_ref_t; OptOnOrUsing* opt_on_or_using_t; OnOrUsing* on_or_using_t; ColumnNameList* column_name_list_t; OptTablePrefix* opt_table_prefix_t; JoinOp* join_op_t; OptJoinType* opt_join_type_t; ExprList* expr_list_t; OptLimitClause* opt_limit_clause_t; LimitClause* limit_clause_t; OptOrderClause* opt_order_clause_t; OptOrderNulls* opt_order_nulls_t; OrderItemList* order_item_list_t; OrderItem* order_item_t; OptOrderBehavior* opt_order_behavior_t; OptWithClause* opt_with_clause_t; CteTableList* cte_table_list_t; CteTable* cte_table_t; CteTableName* cte_table_name_t; OptAllOrDistinct* opt_all_or_distinct_t; CreateTableStmt* create_table_stmt_t; CreateIndexStmt* create_index_stmt_t; CreateViewStmt* create_view_stmt_t; DropIndexStmt* drop_index_stmt_t; DropTableStmt* drop_table_stmt_t; DropViewStmt* drop_view_stmt_t; InsertStmt* insert_stmt_t; InsertRest* insert_rest_t; SuperValuesList* super_values_list_t; ValuesList* values_list_t; OptOnConflict* opt_on_conflict_t; OptConflictExpr* opt_conflict_expr_t; IndexedColumnList* indexed_column_list_t; IndexedColumn* indexed_column_t; UpdateStmt* update_stmt_t; ReindexStmt* reindex_stmt_t; AlterAction* alter_action_t; ColumnDefList* column_def_list_t; ColumnDef* column_def_t; OptColumnConstraintList* opt_column_constraint_list_t; ColumnConstraintList* column_constraint_list_t; ColumnConstraint* column_constraint_t; ConstraintType* constraint_type_t; ForeignClause* foreign_clause_t; OptForeignKeyActions* opt_foreign_key_actions_t; ForeignKeyActions* foreign_key_actions_t; KeyActions* key_actions_t; OptConstraintAttributeSpec* opt_constraint_attribute_spec_t; OptInitialTime* opt_initial_time_t; ConstraintName* constraint_name_t; OptTemp* opt_temp_t; OptCheckOption* opt_check_option_t; OptColumnNameListP* opt_column_name_list_p_t; SetClauseList* set_clause_list_t; SetClause* set_clause_t; Expr* expr_t; Operand* operand_t; CastExpr* cast_expr_t; ScalarExpr* scalar_expr_t; UnaryExpr* unary_expr_t; BinaryExpr* binary_expr_t; LogicExpr* logic_expr_t; InExpr* in_expr_t; CaseExpr* case_expr_t; BetweenExpr* between_expr_t; ExistsExpr* exists_expr_t; CaseList* case_list_t; CaseClause* case_clause_t; CompExpr* comp_expr_t; ExtractExpr* extract_expr_t; DatetimeField* datetime_field_t; ArrayIndex* array_index_t; Literal* literal_t; StringLiteral* string_literal_t; BoolLiteral* bool_literal_t; NumLiteral* num_literal_t; IntLiteral* int_literal_t; FloatLiteral* float_literal_t; OptColumn* opt_column_t; OptIfNotExist* opt_if_not_exist_t; OptIfExist* opt_if_exist_t; Identifier* identifier_t; TableName* table_name_t; ColumnName* column_name_t; OptUnique* opt_unique_t; ViewName* view_name_t; BinaryOp* binary_op_t; OptNot* opt_not_t; Name* name_t; TypeName* type_name_t; CharacterType* character_type_t; CharacterWithLength* character_with_length_t; CharacterWithoutLength* character_without_length_t; CharacterConflicta* character_conflicta_t; OptVarying* opt_varying_t; NumericType* numeric_type_t; OptTableConstraintList* opt_table_constraint_list_t; TableConstraintList* table_constraint_list_t; TableConstraint* table_constraint_t; #line 393 "bison_parser.h" /* yacc.c:1921 */ }; #line 30 "bison.y" /* yacc.c:1921 */ typedef union FF_STYPE FF_STYPE; #define FF_STYPE_IS_TRIVIAL 1 #define FF_STYPE_IS_DECLARED 1 #endif /* Location type. */ #if !defined FF_LTYPE && !defined FF_LTYPE_IS_DECLARED typedef struct FF_LTYPE FF_LTYPE; struct FF_LTYPE { int first_line; int first_column; int last_line; int last_column; }; #define FF_LTYPE_IS_DECLARED 1 #define FF_LTYPE_IS_TRIVIAL 1 #endif int ff_parse(Program* result, yyscan_t scanner); #endif /* !YY_FF_BISON_PARSER_H_INCLUDED */ ================================================ FILE: srcs/internal/postgresql/parser/bison_parser.output ================================================ Terminals unused in grammar OVER PROCEDURE TRIGGER BEFORE OF AFTER OP_DOUBLE_DOLLAR PLPGSQL RETURN BEGIN LANGUAGE FUNCTION FOR INDEXED INSTEAD FILTER OP_XOR ARRAY EACH EXECUTE State 502 conflicts: 1 shift/reduce Grammar 0 $accept: program $end 1 program: stmtlist 2 stmtlist: stmt OP_SEMI stmtlist 3 | stmt OP_SEMI 4 stmt: create_stmt 5 | drop_stmt 6 | select_stmt 7 | update_stmt 8 | insert_stmt 9 | alter_stmt 10 | reindex_stmt 11 create_stmt: create_table_stmt 12 | create_index_stmt 13 | create_view_stmt 14 drop_stmt: drop_index_stmt 15 | drop_table_stmt 16 | drop_view_stmt 17 alter_stmt: ALTER TABLE table_name alter_action 18 select_stmt: select_no_parens 19 | select_with_parens 20 select_with_parens: OP_LP select_no_parens OP_RP 21 | OP_LP select_with_parens OP_RP 22 select_no_parens: opt_with_clause select_clause_list opt_order_clause opt_limit_clause 23 select_clause_list: select_clause 24 | select_clause combine_clause select_clause_list 25 select_clause: SELECT opt_all_or_distinct select_target opt_from_clause opt_where_clause opt_group_clause opt_window_clause 26 combine_clause: UNION 27 | INTERSECT 28 | EXCEPT 29 opt_from_clause: from_clause 30 | %empty 31 select_target: expr_list 32 opt_window_clause: window_clause 33 | %empty 34 window_clause: WINDOW window_def_list 35 window_def_list: window_def 36 | window_def OP_COMMA window_def_list 37 window_def: window_name AS OP_LP window OP_RP 38 window_name: identifier 39 window: opt_exist_window_name opt_partition opt_order_clause opt_frame_clause 40 opt_partition: PARTITION BY expr_list 41 | %empty 42 opt_frame_clause: range_or_rows frame_bound_start opt_frame_exclude 43 | range_or_rows BETWEEN frame_bound_start AND frame_bound_end opt_frame_exclude 44 | %empty 45 range_or_rows: RANGE 46 | ROWS 47 | GROUPS 48 frame_bound_start: frame_bound 49 | UNBOUNDED PRECEDING 50 frame_bound_end: frame_bound 51 | UNBOUNDED FOLLOWING 52 frame_bound: expr PRECEDING 53 | expr FOLLOWING 54 | CURRENT ROW 55 opt_frame_exclude: EXCLUDE frame_exclude 56 | %empty 57 frame_exclude: NO OTHERS 58 | CURRENT ROW 59 | GROUP 60 | TIES 61 opt_exist_window_name: identifier 62 | %empty 63 opt_group_clause: GROUP BY expr_list opt_having_clause 64 | %empty 65 opt_having_clause: HAVING expr 66 | %empty 67 opt_where_clause: where_clause 68 | %empty 69 where_clause: WHERE expr 70 from_clause: FROM table_ref 71 table_ref: opt_table_prefix table_name opt_on_or_using 72 | opt_table_prefix OP_LP select_no_parens OP_RP opt_on_or_using 73 | opt_table_prefix OP_LP table_ref OP_RP opt_on_or_using 74 opt_on_or_using: on_or_using 75 | %empty 76 on_or_using: ON expr 77 | USING OP_LP column_name_list OP_RP 78 column_name_list: column_name 79 | column_name OP_COMMA column_name_list 80 opt_table_prefix: table_ref join_op 81 | %empty 82 join_op: OP_COMMA 83 | JOIN 84 | NATURAL opt_join_type JOIN 85 opt_join_type: LEFT 86 | LEFT OUTER 87 | INNER 88 | CROSS 89 | %empty 90 expr_list: expr OP_COMMA expr_list 91 | expr 92 opt_limit_clause: limit_clause 93 | %empty 94 limit_clause: LIMIT expr 95 | LIMIT expr OFFSET expr 96 | LIMIT expr OP_COMMA expr 97 opt_order_clause: ORDER BY order_item_list 98 | %empty 99 opt_order_nulls: NULLS FIRST 100 | NULLS LAST 101 | %empty 102 order_item_list: order_item 103 | order_item OP_COMMA order_item_list 104 order_item: expr opt_order_behavior opt_order_nulls 105 opt_order_behavior: ASC 106 | DESC 107 | %empty 108 opt_with_clause: WITH cte_table_list 109 | WITH RECURSIVE cte_table_list 110 | %empty 111 cte_table_list: cte_table 112 | cte_table OP_COMMA cte_table_list 113 cte_table: cte_table_name AS OP_LP select_stmt OP_RP 114 cte_table_name: table_name opt_column_name_list_p 115 opt_all_or_distinct: ALL 116 | DISTINCT 117 | %empty 118 create_table_stmt: CREATE opt_temp TABLE opt_if_not_exist table_name AS select_stmt 119 | CREATE opt_temp TABLE opt_if_not_exist table_name OP_LP column_def_list opt_table_constraint_list OP_RP 120 create_index_stmt: CREATE opt_unique INDEX opt_if_not_exist table_name ON table_name OP_LP indexed_column_list OP_RP opt_where_clause 121 create_view_stmt: CREATE opt_temp VIEW view_name opt_column_name_list_p AS select_stmt opt_check_option 122 | CREATE opt_temp RECURSIVE VIEW view_name opt_column_name_list_p AS select_stmt opt_check_option 123 | CREATE OR REPLACE opt_temp VIEW view_name opt_column_name_list_p AS select_stmt opt_check_option 124 | CREATE OR REPLACE opt_temp RECURSIVE VIEW view_name opt_column_name_list_p AS select_stmt opt_check_option 125 drop_index_stmt: DROP INDEX opt_if_exist table_name 126 drop_table_stmt: DROP TABLE opt_if_exist table_name 127 drop_view_stmt: DROP VIEW opt_if_exist view_name 128 insert_stmt: opt_with_clause INSERT INTO table_name insert_rest opt_on_conflict 129 insert_rest: opt_column_name_list_p select_no_parens 130 | opt_column_name_list_p DEFAULT VALUES 131 | opt_column_name_list_p VALUES super_values_list 132 super_values_list: values_list 133 | values_list OP_COMMA super_values_list 134 values_list: OP_LP expr_list OP_RP 135 opt_on_conflict: ON CONFLICT opt_conflict_expr DO NOTHING 136 | ON CONFLICT opt_conflict_expr DO UPDATE set_clause_list where_clause 137 | %empty 138 opt_conflict_expr: OP_LP indexed_column_list OP_RP where_clause 139 | %empty 140 indexed_column_list: indexed_column 141 | indexed_column OP_COMMA indexed_column_list 142 indexed_column: expr opt_order_behavior 143 update_stmt: opt_with_clause UPDATE table_name SET set_clause_list opt_where_clause 144 reindex_stmt: REINDEX TABLE table_name 145 | REINDEX INDEX table_name 146 alter_action: RENAME TO table_name 147 | RENAME opt_column column_name TO column_name 148 | ADD opt_column column_def 149 column_def_list: column_def 150 | column_def OP_COMMA column_def_list 151 column_def: identifier type_name opt_column_constraint_list 152 opt_column_constraint_list: column_constraint_list 153 | %empty 154 column_constraint_list: column_constraint 155 | column_constraint column_constraint_list 156 column_constraint: constraint_type 157 constraint_type: PRIMARY KEY 158 | NOT NULL 159 | UNIQUE 160 | CHECK OP_LP expr OP_RP 161 | foreign_clause 162 foreign_clause: REFERENCES table_name opt_column_name_list_p opt_foreign_key_actions opt_constraint_attribute_spec 163 opt_foreign_key_actions: foreign_key_actions 164 | %empty 165 foreign_key_actions: MATCH FULL 166 | MATCH PARTIAL 167 | MATCH SIMPLE 168 | ON UPDATE key_actions 169 | ON DELETE key_actions 170 key_actions: SET NULL 171 | SET DEFAULT 172 | CASCADE 173 | RESTRICT 174 | NO ACTION 175 opt_constraint_attribute_spec: DEFFERRABLE opt_initial_time 176 | NOT DEFFERRABLE opt_initial_time 177 | %empty 178 opt_initial_time: INITIALLY DEFERRED 179 | INITIALLY IMMEDIATE 180 | %empty 181 constraint_name: CONSTRAINT name 182 opt_temp: TEMPORARY 183 | TEMP 184 | LOCAL TEMPORARY 185 | LOCAL TEMP 186 | GLOBAL TEMPORARY 187 | GLOBAL TEMP 188 | UNLOGGED 189 | %empty 190 opt_check_option: WITH CHECK OPTION 191 | WITH CASCADED CHECK OPTION 192 | WITH LOCAL CHECK OPTION 193 | %empty 194 opt_column_name_list_p: OP_LP column_name_list OP_RP 195 | %empty 196 set_clause_list: set_clause 197 | set_clause OP_COMMA set_clause_list 198 set_clause: column_name OP_EQUAL expr 199 | OP_LP column_name_list OP_RP OP_EQUAL expr 200 expr: operand 201 | between_expr 202 | exists_expr 203 | in_expr 204 | cast_expr 205 | logic_expr 206 operand: OP_LP expr_list OP_RP 207 | array_index 208 | scalar_expr 209 | unary_expr 210 | binary_expr 211 | case_expr 212 | extract_expr 213 | OP_LP select_no_parens OP_RP 214 cast_expr: CAST OP_LP expr AS type_name OP_RP 215 scalar_expr: column_name 216 | literal 217 unary_expr: OP_SUB operand 218 | NOT operand 219 | operand ISNULL 220 | operand IS NULL 221 | operand IS NOT NULL 222 | NULL 223 | OP_MUL 224 binary_expr: comp_expr 225 | operand binary_op operand 226 | operand LIKE operand 227 | operand NOT LIKE operand 228 logic_expr: expr AND expr 229 | expr OR expr 230 in_expr: operand opt_not IN OP_LP select_no_parens OP_RP 231 | operand opt_not IN OP_LP expr_list OP_RP 232 | operand opt_not IN table_name 233 case_expr: CASE expr case_list END 234 | CASE case_list END 235 | CASE expr case_list ELSE expr END 236 | CASE case_list ELSE expr END 237 between_expr: operand BETWEEN operand AND operand 238 | operand NOT BETWEEN operand AND operand 239 exists_expr: opt_not EXISTS OP_LP select_no_parens OP_RP 240 case_list: case_clause 241 | case_clause case_list 242 case_clause: WHEN expr THEN expr 243 comp_expr: operand OP_EQUAL operand 244 | operand OP_NOTEQUAL operand 245 | operand OP_GREATERTHAN operand 246 | operand OP_LESSTHAN operand 247 | operand OP_LESSEQ operand 248 | operand OP_GREATEREQ operand 249 extract_expr: EXTRACT OP_LP datetime_field FROM expr OP_RP 250 datetime_field: SECOND 251 | MINUTE 252 | HOUR 253 | DAY 254 | MONTH 255 | YEAR 256 array_index: operand OP_LBRACKET int_literal OP_RBRACKET 257 literal: string_literal 258 | bool_literal 259 | num_literal 260 string_literal: STRINGLITERAL 261 bool_literal: TRUE 262 | FALSE 263 num_literal: int_literal 264 | float_literal 265 int_literal: INTLITERAL 266 float_literal: FLOATLITERAL 267 opt_column: COLUMN 268 | %empty 269 opt_if_not_exist: IF NOT EXISTS 270 | %empty 271 opt_if_exist: IF EXISTS 272 | %empty 273 identifier: IDENTIFIER 274 table_name: identifier 275 column_name: identifier 276 opt_unique: UNIQUE 277 | %empty 278 view_name: identifier 279 binary_op: OP_ADD 280 | OP_SUB 281 | OP_DIVIDE 282 | OP_MOD 283 | OP_MUL 284 opt_not: NOT 285 | %empty 286 name: identifier 287 type_name: numeric_type 288 | character_type 289 character_type: character_with_length 290 | character_without_length 291 character_with_length: character_conflicta OP_LP int_literal OP_RP 292 character_without_length: character_conflicta 293 character_conflicta: CHARACTER opt_varying 294 | CHAR opt_varying 295 | VARCHAR 296 | TEXT 297 | NATIONAL CHARACTER opt_varying 298 | NATIONAL CHAR opt_varying 299 | NCHAR opt_varying 300 opt_varying: VARYING 301 | %empty 302 numeric_type: INT 303 | INTEGER 304 | SMALLINT 305 | BIGINT 306 | REAL 307 | FLOAT 308 | DOUBLE PRECISION 309 | DECIMAL 310 | DEC 311 | NUMERIC 312 | BOOLEAN 313 opt_table_constraint_list: table_constraint_list 314 | %empty 315 table_constraint_list: table_constraint 316 | table_constraint OP_COMMA table_constraint_list 317 table_constraint: constraint_name PRIMARY KEY OP_LP indexed_column_list OP_RP 318 | constraint_name UNIQUE OP_LP indexed_column_list OP_RP 319 | constraint_name CHECK OP_LP expr OP_RP 320 | constraint_name FOREIGN KEY OP_LP column_name_list OP_RP foreign_clause Terminals, with rules where they appear $end (0) 0 error (256) OP_NOTEQUAL (258) 244 SIMPLE (259) 167 TEXT (260) 296 OVER (261) BETWEEN (262) 43 237 238 OP_SEMI (263) 2 3 BIGINT (264) 305 LIMIT (265) 94 95 96 WITH (266) 108 109 190 191 192 ORDER (267) 97 LAST (268) 100 UNBOUNDED (269) 49 51 PRECEDING (270) 49 52 EXCEPT (271) 28 NUMERIC (272) 311 OP_LESSTHAN (273) 246 PROCEDURE (274) ACTION (275) 174 FIRST (276) 99 OP_GREATEREQ (277) 248 CHECK (278) 160 190 191 192 319 FULL (279) 165 NATURAL (280) 84 DOUBLE (281) 308 NATIONAL (282) 297 298 OP_ADD (283) 279 CURRENT (284) 54 58 TRIGGER (285) OP_SUB (286) 217 280 FALSE (287) 262 UNIQUE (288) 159 276 318 WHERE (289) 69 MINUTE (290) 251 BEFORE (291) ON (292) 76 120 135 136 168 169 PARTIAL (293) 166 OF (294) AFTER (295) PRIMARY (296) 157 317 MONTH (297) 254 DEFERRED (298) 178 OP_DOUBLE_DOLLAR (299) VARYING (300) 300 OP_GREATERTHAN (301) 245 OR (302) 123 124 229 PLPGSQL (303) DELETE (304) 169 INDEX (305) 120 125 145 RETURN (306) OP_MUL (307) 223 283 FOREIGN (308) 320 RESTRICT (309) 173 FOLLOWING (310) 51 53 TIES (311) 60 DEC (312) 310 SELECT (313) 25 BEGIN (314) LANGUAGE (315) DISTINCT (316) 116 TRUE (317) 261 BY (318) 40 63 97 OP_MOD (319) 282 VALUES (320) 130 131 IS (321) 220 221 ROW (322) 54 58 FUNCTION (323) END (324) 233 234 235 236 RECURSIVE (325) 109 122 124 FOR (326) UNION (327) 26 NULLS (328) 99 100 UPDATE (329) 136 143 168 ELSE (330) 235 236 RANGE (331) 45 OFFSET (332) 95 INDEXED (333) INSTEAD (334) NCHAR (335) 299 AND (336) 43 228 237 238 REINDEX (337) 144 145 INITIALLY (338) 178 179 YEAR (339) 255 PRECISION (340) 308 FILTER (341) NOT (342) 158 176 218 221 227 238 269 284 VIEW (343) 121 122 123 124 127 DEFFERRABLE (344) 175 176 REAL (345) 306 THEN (346) 242 OPTION (347) 190 191 192 DEFAULT (348) 130 171 GLOBAL (349) 186 187 CROSS (350) 88 CHAR (351) 294 298 REFERENCES (352) 162 OP_XOR (353) GROUP (354) 59 63 CASE (355) 233 234 235 236 SET (356) 143 170 171 HOUR (357) 252 NO (358) 57 174 COLUMN (359) 267 LOCAL (360) 184 185 192 DROP (361) 125 126 127 REPLACE (362) 123 124 ASC (363) 105 OP_COMMA (364) 36 79 82 90 96 103 112 133 141 150 197 316 TABLE (365) 17 118 119 126 144 ARRAY (366) IF (367) 269 271 EXTRACT (368) 249 LEFT (369) 85 86 OUTER (370) 86 DECIMAL (371) 309 PARTITION (372) 40 CASCADE (373) 172 ADD (374) 148 OTHERS (375) 57 OP_LESSEQ (376) 247 MATCH (377) 165 166 167 ALL (378) 115 ROWS (379) 46 JOIN (380) 83 84 LIKE (381) 226 227 INTEGER (382) 303 OP_RP (383) 20 21 37 72 73 77 113 119 120 134 138 160 194 199 206 213 214 230 231 239 249 291 317 318 319 320 INT (384) 302 BOOLEAN (385) 312 KEY (386) 157 317 320 EACH (387) USING (388) 77 RENAME (389) 146 147 DO (390) 135 136 FLOAT (391) 307 OP_LP (392) 20 21 37 72 73 77 113 119 120 134 138 160 194 199 206 213 214 230 231 239 249 291 317 318 319 320 CHARACTER (393) 293 297 UMINUS (394) CAST (395) 214 GROUPS (396) 47 NULL (397) 158 170 220 221 222 SMALLINT (398) 304 INSERT (399) 128 TEMPORARY (400) 182 184 186 CONSTRAINT (401) 181 CREATE (402) 118 119 120 121 122 123 124 OP_LBRACKET (403) 256 WHEN (404) 242 IMMEDIATE (405) 179 TO (406) 146 147 EXCLUDE (407) 55 DAY (408) 253 CONFLICT (409) 135 136 OP_RBRACKET (410) 256 EXECUTE (411) EXISTS (412) 239 269 271 INTO (413) 128 OP_DIVIDE (414) 281 CASCADED (415) 191 ISNULL (416) 219 AS (417) 37 113 118 121 122 123 124 214 INNER (418) 87 INTERSECT (419) 27 IN (420) 230 231 232 OP_EQUAL (421) 198 199 243 VARCHAR (422) 295 ALTER (423) 17 DESC (424) 106 FROM (425) 70 249 TEMP (426) 183 185 187 UNLOGGED (427) 188 SECOND (428) 250 WINDOW (429) 34 NOTHING (430) 135 HAVING (431) 65 INTLITERAL (432) 265 STRINGLITERAL (433) 260 FLOATLITERAL (434) 266 IDENTIFIER (435) 273 Nonterminals, with rules where they appear $accept (181) on left: 0 program (182) on left: 1, on right: 0 stmtlist (183) on left: 2 3, on right: 1 2 stmt (184) on left: 4 5 6 7 8 9 10, on right: 2 3 create_stmt (185) on left: 11 12 13, on right: 4 drop_stmt (186) on left: 14 15 16, on right: 5 alter_stmt (187) on left: 17, on right: 9 select_stmt (188) on left: 18 19, on right: 6 113 118 121 122 123 124 select_with_parens (189) on left: 20 21, on right: 19 21 select_no_parens (190) on left: 22, on right: 18 20 72 129 213 230 239 select_clause_list (191) on left: 23 24, on right: 22 24 select_clause (192) on left: 25, on right: 23 24 combine_clause (193) on left: 26 27 28, on right: 24 opt_from_clause (194) on left: 29 30, on right: 25 select_target (195) on left: 31, on right: 25 opt_window_clause (196) on left: 32 33, on right: 25 window_clause (197) on left: 34, on right: 32 window_def_list (198) on left: 35 36, on right: 34 36 window_def (199) on left: 37, on right: 35 36 window_name (200) on left: 38, on right: 37 window (201) on left: 39, on right: 37 opt_partition (202) on left: 40 41, on right: 39 opt_frame_clause (203) on left: 42 43 44, on right: 39 range_or_rows (204) on left: 45 46 47, on right: 42 43 frame_bound_start (205) on left: 48 49, on right: 42 43 frame_bound_end (206) on left: 50 51, on right: 43 frame_bound (207) on left: 52 53 54, on right: 48 50 opt_frame_exclude (208) on left: 55 56, on right: 42 43 frame_exclude (209) on left: 57 58 59 60, on right: 55 opt_exist_window_name (210) on left: 61 62, on right: 39 opt_group_clause (211) on left: 63 64, on right: 25 opt_having_clause (212) on left: 65 66, on right: 63 opt_where_clause (213) on left: 67 68, on right: 25 120 143 where_clause (214) on left: 69, on right: 67 136 138 from_clause (215) on left: 70, on right: 29 table_ref (216) on left: 71 72 73, on right: 70 73 80 opt_on_or_using (217) on left: 74 75, on right: 71 72 73 on_or_using (218) on left: 76 77, on right: 74 column_name_list (219) on left: 78 79, on right: 77 79 194 199 320 opt_table_prefix (220) on left: 80 81, on right: 71 72 73 join_op (221) on left: 82 83 84, on right: 80 opt_join_type (222) on left: 85 86 87 88 89, on right: 84 expr_list (223) on left: 90 91, on right: 31 40 63 90 134 206 231 opt_limit_clause (224) on left: 92 93, on right: 22 limit_clause (225) on left: 94 95 96, on right: 92 opt_order_clause (226) on left: 97 98, on right: 22 39 opt_order_nulls (227) on left: 99 100 101, on right: 104 order_item_list (228) on left: 102 103, on right: 97 103 order_item (229) on left: 104, on right: 102 103 opt_order_behavior (230) on left: 105 106 107, on right: 104 142 opt_with_clause (231) on left: 108 109 110, on right: 22 128 143 cte_table_list (232) on left: 111 112, on right: 108 109 112 cte_table (233) on left: 113, on right: 111 112 cte_table_name (234) on left: 114, on right: 113 opt_all_or_distinct (235) on left: 115 116 117, on right: 25 create_table_stmt (236) on left: 118 119, on right: 11 create_index_stmt (237) on left: 120, on right: 12 create_view_stmt (238) on left: 121 122 123 124, on right: 13 drop_index_stmt (239) on left: 125, on right: 14 drop_table_stmt (240) on left: 126, on right: 15 drop_view_stmt (241) on left: 127, on right: 16 insert_stmt (242) on left: 128, on right: 8 insert_rest (243) on left: 129 130 131, on right: 128 super_values_list (244) on left: 132 133, on right: 131 133 values_list (245) on left: 134, on right: 132 133 opt_on_conflict (246) on left: 135 136 137, on right: 128 opt_conflict_expr (247) on left: 138 139, on right: 135 136 indexed_column_list (248) on left: 140 141, on right: 120 138 141 317 318 indexed_column (249) on left: 142, on right: 140 141 update_stmt (250) on left: 143, on right: 7 reindex_stmt (251) on left: 144 145, on right: 10 alter_action (252) on left: 146 147 148, on right: 17 column_def_list (253) on left: 149 150, on right: 119 150 column_def (254) on left: 151, on right: 148 149 150 opt_column_constraint_list (255) on left: 152 153, on right: 151 column_constraint_list (256) on left: 154 155, on right: 152 155 column_constraint (257) on left: 156, on right: 154 155 constraint_type (258) on left: 157 158 159 160 161, on right: 156 foreign_clause (259) on left: 162, on right: 161 320 opt_foreign_key_actions (260) on left: 163 164, on right: 162 foreign_key_actions (261) on left: 165 166 167 168 169, on right: 163 key_actions (262) on left: 170 171 172 173 174, on right: 168 169 opt_constraint_attribute_spec (263) on left: 175 176 177, on right: 162 opt_initial_time (264) on left: 178 179 180, on right: 175 176 constraint_name (265) on left: 181, on right: 317 318 319 320 opt_temp (266) on left: 182 183 184 185 186 187 188 189, on right: 118 119 121 122 123 124 opt_check_option (267) on left: 190 191 192 193, on right: 121 122 123 124 opt_column_name_list_p (268) on left: 194 195, on right: 114 121 122 123 124 129 130 131 162 set_clause_list (269) on left: 196 197, on right: 136 143 197 set_clause (270) on left: 198 199, on right: 196 197 expr (271) on left: 200 201 202 203 204 205, on right: 52 53 65 69 76 90 91 94 95 96 104 142 160 198 199 214 228 229 233 235 236 242 249 319 operand (272) on left: 206 207 208 209 210 211 212 213, on right: 200 217 218 219 220 221 225 226 227 230 231 232 237 238 243 244 245 246 247 248 256 cast_expr (273) on left: 214, on right: 204 scalar_expr (274) on left: 215 216, on right: 208 unary_expr (275) on left: 217 218 219 220 221 222 223, on right: 209 binary_expr (276) on left: 224 225 226 227, on right: 210 logic_expr (277) on left: 228 229, on right: 205 in_expr (278) on left: 230 231 232, on right: 203 case_expr (279) on left: 233 234 235 236, on right: 211 between_expr (280) on left: 237 238, on right: 201 exists_expr (281) on left: 239, on right: 202 case_list (282) on left: 240 241, on right: 233 234 235 236 241 case_clause (283) on left: 242, on right: 240 241 comp_expr (284) on left: 243 244 245 246 247 248, on right: 224 extract_expr (285) on left: 249, on right: 212 datetime_field (286) on left: 250 251 252 253 254 255, on right: 249 array_index (287) on left: 256, on right: 207 literal (288) on left: 257 258 259, on right: 216 string_literal (289) on left: 260, on right: 257 bool_literal (290) on left: 261 262, on right: 258 num_literal (291) on left: 263 264, on right: 259 int_literal (292) on left: 265, on right: 256 263 291 float_literal (293) on left: 266, on right: 264 opt_column (294) on left: 267 268, on right: 147 148 opt_if_not_exist (295) on left: 269 270, on right: 118 119 120 opt_if_exist (296) on left: 271 272, on right: 125 126 127 identifier (297) on left: 273, on right: 38 61 151 274 275 278 286 table_name (298) on left: 274, on right: 17 71 114 118 119 120 125 126 128 143 144 145 146 162 232 column_name (299) on left: 275, on right: 78 79 147 198 215 opt_unique (300) on left: 276 277, on right: 120 view_name (301) on left: 278, on right: 121 122 123 124 127 binary_op (302) on left: 279 280 281 282 283, on right: 225 opt_not (303) on left: 284 285, on right: 230 231 232 239 name (304) on left: 286, on right: 181 type_name (305) on left: 287 288, on right: 151 214 character_type (306) on left: 289 290, on right: 288 character_with_length (307) on left: 291, on right: 289 character_without_length (308) on left: 292, on right: 290 character_conflicta (309) on left: 293 294 295 296 297 298 299, on right: 291 292 opt_varying (310) on left: 300 301, on right: 293 294 297 298 299 numeric_type (311) on left: 302 303 304 305 306 307 308 309 310 311 312, on right: 287 opt_table_constraint_list (312) on left: 313 314, on right: 119 table_constraint_list (313) on left: 315 316, on right: 313 316 table_constraint (314) on left: 317 318 319 320, on right: 315 316 State 0 0 $accept: . program $end WITH shift, and go to state 1 REINDEX shift, and go to state 2 DROP shift, and go to state 3 OP_LP shift, and go to state 4 CREATE shift, and go to state 5 ALTER shift, and go to state 6 $default reduce using rule 110 (opt_with_clause) program go to state 7 stmtlist go to state 8 stmt go to state 9 create_stmt go to state 10 drop_stmt go to state 11 alter_stmt go to state 12 select_stmt go to state 13 select_with_parens go to state 14 select_no_parens go to state 15 opt_with_clause go to state 16 create_table_stmt go to state 17 create_index_stmt go to state 18 create_view_stmt go to state 19 drop_index_stmt go to state 20 drop_table_stmt go to state 21 drop_view_stmt go to state 22 insert_stmt go to state 23 update_stmt go to state 24 reindex_stmt go to state 25 State 1 108 opt_with_clause: WITH . cte_table_list 109 | WITH . RECURSIVE cte_table_list RECURSIVE shift, and go to state 26 IDENTIFIER shift, and go to state 27 cte_table_list go to state 28 cte_table go to state 29 cte_table_name go to state 30 identifier go to state 31 table_name go to state 32 State 2 144 reindex_stmt: REINDEX . TABLE table_name 145 | REINDEX . INDEX table_name INDEX shift, and go to state 33 TABLE shift, and go to state 34 State 3 125 drop_index_stmt: DROP . INDEX opt_if_exist table_name 126 drop_table_stmt: DROP . TABLE opt_if_exist table_name 127 drop_view_stmt: DROP . VIEW opt_if_exist view_name INDEX shift, and go to state 35 VIEW shift, and go to state 36 TABLE shift, and go to state 37 State 4 20 select_with_parens: OP_LP . select_no_parens OP_RP 21 | OP_LP . select_with_parens OP_RP WITH shift, and go to state 1 OP_LP shift, and go to state 4 $default reduce using rule 110 (opt_with_clause) select_with_parens go to state 38 select_no_parens go to state 39 opt_with_clause go to state 40 State 5 118 create_table_stmt: CREATE . opt_temp TABLE opt_if_not_exist table_name AS select_stmt 119 | CREATE . opt_temp TABLE opt_if_not_exist table_name OP_LP column_def_list opt_table_constraint_list OP_RP 120 create_index_stmt: CREATE . opt_unique INDEX opt_if_not_exist table_name ON table_name OP_LP indexed_column_list OP_RP opt_where_clause 121 create_view_stmt: CREATE . opt_temp VIEW view_name opt_column_name_list_p AS select_stmt opt_check_option 122 | CREATE . opt_temp RECURSIVE VIEW view_name opt_column_name_list_p AS select_stmt opt_check_option 123 | CREATE . OR REPLACE opt_temp VIEW view_name opt_column_name_list_p AS select_stmt opt_check_option 124 | CREATE . OR REPLACE opt_temp RECURSIVE VIEW view_name opt_column_name_list_p AS select_stmt opt_check_option UNIQUE shift, and go to state 41 OR shift, and go to state 42 GLOBAL shift, and go to state 43 LOCAL shift, and go to state 44 TEMPORARY shift, and go to state 45 TEMP shift, and go to state 46 UNLOGGED shift, and go to state 47 INDEX reduce using rule 277 (opt_unique) $default reduce using rule 189 (opt_temp) opt_temp go to state 48 opt_unique go to state 49 State 6 17 alter_stmt: ALTER . TABLE table_name alter_action TABLE shift, and go to state 50 State 7 0 $accept: program . $end $end shift, and go to state 51 State 8 1 program: stmtlist . $default reduce using rule 1 (program) State 9 2 stmtlist: stmt . OP_SEMI stmtlist 3 | stmt . OP_SEMI OP_SEMI shift, and go to state 52 State 10 4 stmt: create_stmt . $default reduce using rule 4 (stmt) State 11 5 stmt: drop_stmt . $default reduce using rule 5 (stmt) State 12 9 stmt: alter_stmt . $default reduce using rule 9 (stmt) State 13 6 stmt: select_stmt . $default reduce using rule 6 (stmt) State 14 19 select_stmt: select_with_parens . $default reduce using rule 19 (select_stmt) State 15 18 select_stmt: select_no_parens . $default reduce using rule 18 (select_stmt) State 16 22 select_no_parens: opt_with_clause . select_clause_list opt_order_clause opt_limit_clause 128 insert_stmt: opt_with_clause . INSERT INTO table_name insert_rest opt_on_conflict 143 update_stmt: opt_with_clause . UPDATE table_name SET set_clause_list opt_where_clause SELECT shift, and go to state 53 UPDATE shift, and go to state 54 INSERT shift, and go to state 55 select_clause_list go to state 56 select_clause go to state 57 State 17 11 create_stmt: create_table_stmt . $default reduce using rule 11 (create_stmt) State 18 12 create_stmt: create_index_stmt . $default reduce using rule 12 (create_stmt) State 19 13 create_stmt: create_view_stmt . $default reduce using rule 13 (create_stmt) State 20 14 drop_stmt: drop_index_stmt . $default reduce using rule 14 (drop_stmt) State 21 15 drop_stmt: drop_table_stmt . $default reduce using rule 15 (drop_stmt) State 22 16 drop_stmt: drop_view_stmt . $default reduce using rule 16 (drop_stmt) State 23 8 stmt: insert_stmt . $default reduce using rule 8 (stmt) State 24 7 stmt: update_stmt . $default reduce using rule 7 (stmt) State 25 10 stmt: reindex_stmt . $default reduce using rule 10 (stmt) State 26 109 opt_with_clause: WITH RECURSIVE . cte_table_list IDENTIFIER shift, and go to state 27 cte_table_list go to state 58 cte_table go to state 29 cte_table_name go to state 30 identifier go to state 31 table_name go to state 32 State 27 273 identifier: IDENTIFIER . $default reduce using rule 273 (identifier) State 28 108 opt_with_clause: WITH cte_table_list . $default reduce using rule 108 (opt_with_clause) State 29 111 cte_table_list: cte_table . 112 | cte_table . OP_COMMA cte_table_list OP_COMMA shift, and go to state 59 $default reduce using rule 111 (cte_table_list) State 30 113 cte_table: cte_table_name . AS OP_LP select_stmt OP_RP AS shift, and go to state 60 State 31 274 table_name: identifier . $default reduce using rule 274 (table_name) State 32 114 cte_table_name: table_name . opt_column_name_list_p OP_LP shift, and go to state 61 $default reduce using rule 195 (opt_column_name_list_p) opt_column_name_list_p go to state 62 State 33 145 reindex_stmt: REINDEX INDEX . table_name IDENTIFIER shift, and go to state 27 identifier go to state 31 table_name go to state 63 State 34 144 reindex_stmt: REINDEX TABLE . table_name IDENTIFIER shift, and go to state 27 identifier go to state 31 table_name go to state 64 State 35 125 drop_index_stmt: DROP INDEX . opt_if_exist table_name IF shift, and go to state 65 $default reduce using rule 272 (opt_if_exist) opt_if_exist go to state 66 State 36 127 drop_view_stmt: DROP VIEW . opt_if_exist view_name IF shift, and go to state 65 $default reduce using rule 272 (opt_if_exist) opt_if_exist go to state 67 State 37 126 drop_table_stmt: DROP TABLE . opt_if_exist table_name IF shift, and go to state 65 $default reduce using rule 272 (opt_if_exist) opt_if_exist go to state 68 State 38 21 select_with_parens: OP_LP select_with_parens . OP_RP OP_RP shift, and go to state 69 State 39 20 select_with_parens: OP_LP select_no_parens . OP_RP OP_RP shift, and go to state 70 State 40 22 select_no_parens: opt_with_clause . select_clause_list opt_order_clause opt_limit_clause SELECT shift, and go to state 53 select_clause_list go to state 56 select_clause go to state 57 State 41 276 opt_unique: UNIQUE . $default reduce using rule 276 (opt_unique) State 42 123 create_view_stmt: CREATE OR . REPLACE opt_temp VIEW view_name opt_column_name_list_p AS select_stmt opt_check_option 124 | CREATE OR . REPLACE opt_temp RECURSIVE VIEW view_name opt_column_name_list_p AS select_stmt opt_check_option REPLACE shift, and go to state 71 State 43 186 opt_temp: GLOBAL . TEMPORARY 187 | GLOBAL . TEMP TEMPORARY shift, and go to state 72 TEMP shift, and go to state 73 State 44 184 opt_temp: LOCAL . TEMPORARY 185 | LOCAL . TEMP TEMPORARY shift, and go to state 74 TEMP shift, and go to state 75 State 45 182 opt_temp: TEMPORARY . $default reduce using rule 182 (opt_temp) State 46 183 opt_temp: TEMP . $default reduce using rule 183 (opt_temp) State 47 188 opt_temp: UNLOGGED . $default reduce using rule 188 (opt_temp) State 48 118 create_table_stmt: CREATE opt_temp . TABLE opt_if_not_exist table_name AS select_stmt 119 | CREATE opt_temp . TABLE opt_if_not_exist table_name OP_LP column_def_list opt_table_constraint_list OP_RP 121 create_view_stmt: CREATE opt_temp . VIEW view_name opt_column_name_list_p AS select_stmt opt_check_option 122 | CREATE opt_temp . RECURSIVE VIEW view_name opt_column_name_list_p AS select_stmt opt_check_option RECURSIVE shift, and go to state 76 VIEW shift, and go to state 77 TABLE shift, and go to state 78 State 49 120 create_index_stmt: CREATE opt_unique . INDEX opt_if_not_exist table_name ON table_name OP_LP indexed_column_list OP_RP opt_where_clause INDEX shift, and go to state 79 State 50 17 alter_stmt: ALTER TABLE . table_name alter_action IDENTIFIER shift, and go to state 27 identifier go to state 31 table_name go to state 80 State 51 0 $accept: program $end . $default accept State 52 2 stmtlist: stmt OP_SEMI . stmtlist 3 | stmt OP_SEMI . WITH shift, and go to state 1 REINDEX shift, and go to state 2 DROP shift, and go to state 3 OP_LP shift, and go to state 4 CREATE shift, and go to state 5 ALTER shift, and go to state 6 $end reduce using rule 3 (stmtlist) $default reduce using rule 110 (opt_with_clause) stmtlist go to state 81 stmt go to state 9 create_stmt go to state 10 drop_stmt go to state 11 alter_stmt go to state 12 select_stmt go to state 13 select_with_parens go to state 14 select_no_parens go to state 15 opt_with_clause go to state 16 create_table_stmt go to state 17 create_index_stmt go to state 18 create_view_stmt go to state 19 drop_index_stmt go to state 20 drop_table_stmt go to state 21 drop_view_stmt go to state 22 insert_stmt go to state 23 update_stmt go to state 24 reindex_stmt go to state 25 State 53 25 select_clause: SELECT . opt_all_or_distinct select_target opt_from_clause opt_where_clause opt_group_clause opt_window_clause DISTINCT shift, and go to state 82 ALL shift, and go to state 83 $default reduce using rule 117 (opt_all_or_distinct) opt_all_or_distinct go to state 84 State 54 143 update_stmt: opt_with_clause UPDATE . table_name SET set_clause_list opt_where_clause IDENTIFIER shift, and go to state 27 identifier go to state 31 table_name go to state 85 State 55 128 insert_stmt: opt_with_clause INSERT . INTO table_name insert_rest opt_on_conflict INTO shift, and go to state 86 State 56 22 select_no_parens: opt_with_clause select_clause_list . opt_order_clause opt_limit_clause ORDER shift, and go to state 87 $default reduce using rule 98 (opt_order_clause) opt_order_clause go to state 88 State 57 23 select_clause_list: select_clause . 24 | select_clause . combine_clause select_clause_list EXCEPT shift, and go to state 89 UNION shift, and go to state 90 INTERSECT shift, and go to state 91 $default reduce using rule 23 (select_clause_list) combine_clause go to state 92 State 58 109 opt_with_clause: WITH RECURSIVE cte_table_list . $default reduce using rule 109 (opt_with_clause) State 59 112 cte_table_list: cte_table OP_COMMA . cte_table_list IDENTIFIER shift, and go to state 27 cte_table_list go to state 93 cte_table go to state 29 cte_table_name go to state 30 identifier go to state 31 table_name go to state 32 State 60 113 cte_table: cte_table_name AS . OP_LP select_stmt OP_RP OP_LP shift, and go to state 94 State 61 194 opt_column_name_list_p: OP_LP . column_name_list OP_RP IDENTIFIER shift, and go to state 27 column_name_list go to state 95 identifier go to state 96 column_name go to state 97 State 62 114 cte_table_name: table_name opt_column_name_list_p . $default reduce using rule 114 (cte_table_name) State 63 145 reindex_stmt: REINDEX INDEX table_name . $default reduce using rule 145 (reindex_stmt) State 64 144 reindex_stmt: REINDEX TABLE table_name . $default reduce using rule 144 (reindex_stmt) State 65 271 opt_if_exist: IF . EXISTS EXISTS shift, and go to state 98 State 66 125 drop_index_stmt: DROP INDEX opt_if_exist . table_name IDENTIFIER shift, and go to state 27 identifier go to state 31 table_name go to state 99 State 67 127 drop_view_stmt: DROP VIEW opt_if_exist . view_name IDENTIFIER shift, and go to state 27 identifier go to state 100 view_name go to state 101 State 68 126 drop_table_stmt: DROP TABLE opt_if_exist . table_name IDENTIFIER shift, and go to state 27 identifier go to state 31 table_name go to state 102 State 69 21 select_with_parens: OP_LP select_with_parens OP_RP . $default reduce using rule 21 (select_with_parens) State 70 20 select_with_parens: OP_LP select_no_parens OP_RP . $default reduce using rule 20 (select_with_parens) State 71 123 create_view_stmt: CREATE OR REPLACE . opt_temp VIEW view_name opt_column_name_list_p AS select_stmt opt_check_option 124 | CREATE OR REPLACE . opt_temp RECURSIVE VIEW view_name opt_column_name_list_p AS select_stmt opt_check_option GLOBAL shift, and go to state 43 LOCAL shift, and go to state 44 TEMPORARY shift, and go to state 45 TEMP shift, and go to state 46 UNLOGGED shift, and go to state 47 $default reduce using rule 189 (opt_temp) opt_temp go to state 103 State 72 186 opt_temp: GLOBAL TEMPORARY . $default reduce using rule 186 (opt_temp) State 73 187 opt_temp: GLOBAL TEMP . $default reduce using rule 187 (opt_temp) State 74 184 opt_temp: LOCAL TEMPORARY . $default reduce using rule 184 (opt_temp) State 75 185 opt_temp: LOCAL TEMP . $default reduce using rule 185 (opt_temp) State 76 122 create_view_stmt: CREATE opt_temp RECURSIVE . VIEW view_name opt_column_name_list_p AS select_stmt opt_check_option VIEW shift, and go to state 104 State 77 121 create_view_stmt: CREATE opt_temp VIEW . view_name opt_column_name_list_p AS select_stmt opt_check_option IDENTIFIER shift, and go to state 27 identifier go to state 100 view_name go to state 105 State 78 118 create_table_stmt: CREATE opt_temp TABLE . opt_if_not_exist table_name AS select_stmt 119 | CREATE opt_temp TABLE . opt_if_not_exist table_name OP_LP column_def_list opt_table_constraint_list OP_RP IF shift, and go to state 106 $default reduce using rule 270 (opt_if_not_exist) opt_if_not_exist go to state 107 State 79 120 create_index_stmt: CREATE opt_unique INDEX . opt_if_not_exist table_name ON table_name OP_LP indexed_column_list OP_RP opt_where_clause IF shift, and go to state 106 $default reduce using rule 270 (opt_if_not_exist) opt_if_not_exist go to state 108 State 80 17 alter_stmt: ALTER TABLE table_name . alter_action ADD shift, and go to state 109 RENAME shift, and go to state 110 alter_action go to state 111 State 81 2 stmtlist: stmt OP_SEMI stmtlist . $default reduce using rule 2 (stmtlist) State 82 116 opt_all_or_distinct: DISTINCT . $default reduce using rule 116 (opt_all_or_distinct) State 83 115 opt_all_or_distinct: ALL . $default reduce using rule 115 (opt_all_or_distinct) State 84 25 select_clause: SELECT opt_all_or_distinct . select_target opt_from_clause opt_where_clause opt_group_clause opt_window_clause OP_SUB shift, and go to state 112 FALSE shift, and go to state 113 OP_MUL shift, and go to state 114 TRUE shift, and go to state 115 NOT shift, and go to state 116 CASE shift, and go to state 117 EXTRACT shift, and go to state 118 OP_LP shift, and go to state 119 CAST shift, and go to state 120 NULL shift, and go to state 121 INTLITERAL shift, and go to state 122 STRINGLITERAL shift, and go to state 123 FLOATLITERAL shift, and go to state 124 IDENTIFIER shift, and go to state 27 $default reduce using rule 285 (opt_not) select_target go to state 125 expr_list go to state 126 expr go to state 127 operand go to state 128 cast_expr go to state 129 scalar_expr go to state 130 unary_expr go to state 131 binary_expr go to state 132 logic_expr go to state 133 in_expr go to state 134 case_expr go to state 135 between_expr go to state 136 exists_expr go to state 137 comp_expr go to state 138 extract_expr go to state 139 array_index go to state 140 literal go to state 141 string_literal go to state 142 bool_literal go to state 143 num_literal go to state 144 int_literal go to state 145 float_literal go to state 146 identifier go to state 96 column_name go to state 147 opt_not go to state 148 State 85 143 update_stmt: opt_with_clause UPDATE table_name . SET set_clause_list opt_where_clause SET shift, and go to state 149 State 86 128 insert_stmt: opt_with_clause INSERT INTO . table_name insert_rest opt_on_conflict IDENTIFIER shift, and go to state 27 identifier go to state 31 table_name go to state 150 State 87 97 opt_order_clause: ORDER . BY order_item_list BY shift, and go to state 151 State 88 22 select_no_parens: opt_with_clause select_clause_list opt_order_clause . opt_limit_clause LIMIT shift, and go to state 152 $default reduce using rule 93 (opt_limit_clause) opt_limit_clause go to state 153 limit_clause go to state 154 State 89 28 combine_clause: EXCEPT . $default reduce using rule 28 (combine_clause) State 90 26 combine_clause: UNION . $default reduce using rule 26 (combine_clause) State 91 27 combine_clause: INTERSECT . $default reduce using rule 27 (combine_clause) State 92 24 select_clause_list: select_clause combine_clause . select_clause_list SELECT shift, and go to state 53 select_clause_list go to state 155 select_clause go to state 57 State 93 112 cte_table_list: cte_table OP_COMMA cte_table_list . $default reduce using rule 112 (cte_table_list) State 94 113 cte_table: cte_table_name AS OP_LP . select_stmt OP_RP WITH shift, and go to state 1 OP_LP shift, and go to state 4 $default reduce using rule 110 (opt_with_clause) select_stmt go to state 156 select_with_parens go to state 14 select_no_parens go to state 15 opt_with_clause go to state 40 State 95 194 opt_column_name_list_p: OP_LP column_name_list . OP_RP OP_RP shift, and go to state 157 State 96 275 column_name: identifier . $default reduce using rule 275 (column_name) State 97 78 column_name_list: column_name . 79 | column_name . OP_COMMA column_name_list OP_COMMA shift, and go to state 158 $default reduce using rule 78 (column_name_list) State 98 271 opt_if_exist: IF EXISTS . $default reduce using rule 271 (opt_if_exist) State 99 125 drop_index_stmt: DROP INDEX opt_if_exist table_name . $default reduce using rule 125 (drop_index_stmt) State 100 278 view_name: identifier . $default reduce using rule 278 (view_name) State 101 127 drop_view_stmt: DROP VIEW opt_if_exist view_name . $default reduce using rule 127 (drop_view_stmt) State 102 126 drop_table_stmt: DROP TABLE opt_if_exist table_name . $default reduce using rule 126 (drop_table_stmt) State 103 123 create_view_stmt: CREATE OR REPLACE opt_temp . VIEW view_name opt_column_name_list_p AS select_stmt opt_check_option 124 | CREATE OR REPLACE opt_temp . RECURSIVE VIEW view_name opt_column_name_list_p AS select_stmt opt_check_option RECURSIVE shift, and go to state 159 VIEW shift, and go to state 160 State 104 122 create_view_stmt: CREATE opt_temp RECURSIVE VIEW . view_name opt_column_name_list_p AS select_stmt opt_check_option IDENTIFIER shift, and go to state 27 identifier go to state 100 view_name go to state 161 State 105 121 create_view_stmt: CREATE opt_temp VIEW view_name . opt_column_name_list_p AS select_stmt opt_check_option OP_LP shift, and go to state 61 $default reduce using rule 195 (opt_column_name_list_p) opt_column_name_list_p go to state 162 State 106 269 opt_if_not_exist: IF . NOT EXISTS NOT shift, and go to state 163 State 107 118 create_table_stmt: CREATE opt_temp TABLE opt_if_not_exist . table_name AS select_stmt 119 | CREATE opt_temp TABLE opt_if_not_exist . table_name OP_LP column_def_list opt_table_constraint_list OP_RP IDENTIFIER shift, and go to state 27 identifier go to state 31 table_name go to state 164 State 108 120 create_index_stmt: CREATE opt_unique INDEX opt_if_not_exist . table_name ON table_name OP_LP indexed_column_list OP_RP opt_where_clause IDENTIFIER shift, and go to state 27 identifier go to state 31 table_name go to state 165 State 109 148 alter_action: ADD . opt_column column_def COLUMN shift, and go to state 166 $default reduce using rule 268 (opt_column) opt_column go to state 167 State 110 146 alter_action: RENAME . TO table_name 147 | RENAME . opt_column column_name TO column_name COLUMN shift, and go to state 166 TO shift, and go to state 168 $default reduce using rule 268 (opt_column) opt_column go to state 169 State 111 17 alter_stmt: ALTER TABLE table_name alter_action . $default reduce using rule 17 (alter_stmt) State 112 217 unary_expr: OP_SUB . operand OP_SUB shift, and go to state 112 FALSE shift, and go to state 113 OP_MUL shift, and go to state 114 TRUE shift, and go to state 115 NOT shift, and go to state 170 CASE shift, and go to state 117 EXTRACT shift, and go to state 118 OP_LP shift, and go to state 119 NULL shift, and go to state 121 INTLITERAL shift, and go to state 122 STRINGLITERAL shift, and go to state 123 FLOATLITERAL shift, and go to state 124 IDENTIFIER shift, and go to state 27 operand go to state 171 scalar_expr go to state 130 unary_expr go to state 131 binary_expr go to state 132 case_expr go to state 135 comp_expr go to state 138 extract_expr go to state 139 array_index go to state 140 literal go to state 141 string_literal go to state 142 bool_literal go to state 143 num_literal go to state 144 int_literal go to state 145 float_literal go to state 146 identifier go to state 96 column_name go to state 147 State 113 262 bool_literal: FALSE . $default reduce using rule 262 (bool_literal) State 114 223 unary_expr: OP_MUL . $default reduce using rule 223 (unary_expr) State 115 261 bool_literal: TRUE . $default reduce using rule 261 (bool_literal) State 116 218 unary_expr: NOT . operand 284 opt_not: NOT . OP_SUB shift, and go to state 112 FALSE shift, and go to state 113 OP_MUL shift, and go to state 114 TRUE shift, and go to state 115 NOT shift, and go to state 170 CASE shift, and go to state 117 EXTRACT shift, and go to state 118 OP_LP shift, and go to state 119 NULL shift, and go to state 121 INTLITERAL shift, and go to state 122 STRINGLITERAL shift, and go to state 123 FLOATLITERAL shift, and go to state 124 IDENTIFIER shift, and go to state 27 $default reduce using rule 284 (opt_not) operand go to state 172 scalar_expr go to state 130 unary_expr go to state 131 binary_expr go to state 132 case_expr go to state 135 comp_expr go to state 138 extract_expr go to state 139 array_index go to state 140 literal go to state 141 string_literal go to state 142 bool_literal go to state 143 num_literal go to state 144 int_literal go to state 145 float_literal go to state 146 identifier go to state 96 column_name go to state 147 State 117 233 case_expr: CASE . expr case_list END 234 | CASE . case_list END 235 | CASE . expr case_list ELSE expr END 236 | CASE . case_list ELSE expr END OP_SUB shift, and go to state 112 FALSE shift, and go to state 113 OP_MUL shift, and go to state 114 TRUE shift, and go to state 115 NOT shift, and go to state 116 CASE shift, and go to state 117 EXTRACT shift, and go to state 118 OP_LP shift, and go to state 119 CAST shift, and go to state 120 NULL shift, and go to state 121 WHEN shift, and go to state 173 INTLITERAL shift, and go to state 122 STRINGLITERAL shift, and go to state 123 FLOATLITERAL shift, and go to state 124 IDENTIFIER shift, and go to state 27 $default reduce using rule 285 (opt_not) expr go to state 174 operand go to state 128 cast_expr go to state 129 scalar_expr go to state 130 unary_expr go to state 131 binary_expr go to state 132 logic_expr go to state 133 in_expr go to state 134 case_expr go to state 135 between_expr go to state 136 exists_expr go to state 137 case_list go to state 175 case_clause go to state 176 comp_expr go to state 138 extract_expr go to state 139 array_index go to state 140 literal go to state 141 string_literal go to state 142 bool_literal go to state 143 num_literal go to state 144 int_literal go to state 145 float_literal go to state 146 identifier go to state 96 column_name go to state 147 opt_not go to state 148 State 118 249 extract_expr: EXTRACT . OP_LP datetime_field FROM expr OP_RP OP_LP shift, and go to state 177 State 119 206 operand: OP_LP . expr_list OP_RP 213 | OP_LP . select_no_parens OP_RP WITH shift, and go to state 1 OP_SUB shift, and go to state 112 FALSE shift, and go to state 113 OP_MUL shift, and go to state 114 TRUE shift, and go to state 115 NOT shift, and go to state 116 CASE shift, and go to state 117 EXTRACT shift, and go to state 118 OP_LP shift, and go to state 119 CAST shift, and go to state 120 NULL shift, and go to state 121 INTLITERAL shift, and go to state 122 STRINGLITERAL shift, and go to state 123 FLOATLITERAL shift, and go to state 124 IDENTIFIER shift, and go to state 27 EXISTS reduce using rule 285 (opt_not) $default reduce using rule 110 (opt_with_clause) select_no_parens go to state 178 expr_list go to state 179 opt_with_clause go to state 40 expr go to state 127 operand go to state 128 cast_expr go to state 129 scalar_expr go to state 130 unary_expr go to state 131 binary_expr go to state 132 logic_expr go to state 133 in_expr go to state 134 case_expr go to state 135 between_expr go to state 136 exists_expr go to state 137 comp_expr go to state 138 extract_expr go to state 139 array_index go to state 140 literal go to state 141 string_literal go to state 142 bool_literal go to state 143 num_literal go to state 144 int_literal go to state 145 float_literal go to state 146 identifier go to state 96 column_name go to state 147 opt_not go to state 148 State 120 214 cast_expr: CAST . OP_LP expr AS type_name OP_RP OP_LP shift, and go to state 180 State 121 222 unary_expr: NULL . $default reduce using rule 222 (unary_expr) State 122 265 int_literal: INTLITERAL . $default reduce using rule 265 (int_literal) State 123 260 string_literal: STRINGLITERAL . $default reduce using rule 260 (string_literal) State 124 266 float_literal: FLOATLITERAL . $default reduce using rule 266 (float_literal) State 125 25 select_clause: SELECT opt_all_or_distinct select_target . opt_from_clause opt_where_clause opt_group_clause opt_window_clause FROM shift, and go to state 181 $default reduce using rule 30 (opt_from_clause) opt_from_clause go to state 182 from_clause go to state 183 State 126 31 select_target: expr_list . $default reduce using rule 31 (select_target) State 127 90 expr_list: expr . OP_COMMA expr_list 91 | expr . 228 logic_expr: expr . AND expr 229 | expr . OR expr OR shift, and go to state 184 AND shift, and go to state 185 OP_COMMA shift, and go to state 186 $default reduce using rule 91 (expr_list) State 128 200 expr: operand . 219 unary_expr: operand . ISNULL 220 | operand . IS NULL 221 | operand . IS NOT NULL 225 binary_expr: operand . binary_op operand 226 | operand . LIKE operand 227 | operand . NOT LIKE operand 230 in_expr: operand . opt_not IN OP_LP select_no_parens OP_RP 231 | operand . opt_not IN OP_LP expr_list OP_RP 232 | operand . opt_not IN table_name 237 between_expr: operand . BETWEEN operand AND operand 238 | operand . NOT BETWEEN operand AND operand 243 comp_expr: operand . OP_EQUAL operand 244 | operand . OP_NOTEQUAL operand 245 | operand . OP_GREATERTHAN operand 246 | operand . OP_LESSTHAN operand 247 | operand . OP_LESSEQ operand 248 | operand . OP_GREATEREQ operand 256 array_index: operand . OP_LBRACKET int_literal OP_RBRACKET OP_NOTEQUAL shift, and go to state 187 BETWEEN shift, and go to state 188 OP_LESSTHAN shift, and go to state 189 OP_GREATEREQ shift, and go to state 190 OP_ADD shift, and go to state 191 OP_SUB shift, and go to state 192 OP_GREATERTHAN shift, and go to state 193 OP_MUL shift, and go to state 194 OP_MOD shift, and go to state 195 IS shift, and go to state 196 NOT shift, and go to state 197 OP_LESSEQ shift, and go to state 198 LIKE shift, and go to state 199 OP_LBRACKET shift, and go to state 200 OP_DIVIDE shift, and go to state 201 ISNULL shift, and go to state 202 OP_EQUAL shift, and go to state 203 IN reduce using rule 285 (opt_not) $default reduce using rule 200 (expr) binary_op go to state 204 opt_not go to state 205 State 129 204 expr: cast_expr . $default reduce using rule 204 (expr) State 130 208 operand: scalar_expr . $default reduce using rule 208 (operand) State 131 209 operand: unary_expr . $default reduce using rule 209 (operand) State 132 210 operand: binary_expr . $default reduce using rule 210 (operand) State 133 205 expr: logic_expr . $default reduce using rule 205 (expr) State 134 203 expr: in_expr . $default reduce using rule 203 (expr) State 135 211 operand: case_expr . $default reduce using rule 211 (operand) State 136 201 expr: between_expr . $default reduce using rule 201 (expr) State 137 202 expr: exists_expr . $default reduce using rule 202 (expr) State 138 224 binary_expr: comp_expr . $default reduce using rule 224 (binary_expr) State 139 212 operand: extract_expr . $default reduce using rule 212 (operand) State 140 207 operand: array_index . $default reduce using rule 207 (operand) State 141 216 scalar_expr: literal . $default reduce using rule 216 (scalar_expr) State 142 257 literal: string_literal . $default reduce using rule 257 (literal) State 143 258 literal: bool_literal . $default reduce using rule 258 (literal) State 144 259 literal: num_literal . $default reduce using rule 259 (literal) State 145 263 num_literal: int_literal . $default reduce using rule 263 (num_literal) State 146 264 num_literal: float_literal . $default reduce using rule 264 (num_literal) State 147 215 scalar_expr: column_name . $default reduce using rule 215 (scalar_expr) State 148 239 exists_expr: opt_not . EXISTS OP_LP select_no_parens OP_RP EXISTS shift, and go to state 206 State 149 143 update_stmt: opt_with_clause UPDATE table_name SET . set_clause_list opt_where_clause OP_LP shift, and go to state 207 IDENTIFIER shift, and go to state 27 set_clause_list go to state 208 set_clause go to state 209 identifier go to state 96 column_name go to state 210 State 150 128 insert_stmt: opt_with_clause INSERT INTO table_name . insert_rest opt_on_conflict OP_LP shift, and go to state 61 $default reduce using rule 195 (opt_column_name_list_p) insert_rest go to state 211 opt_column_name_list_p go to state 212 State 151 97 opt_order_clause: ORDER BY . order_item_list OP_SUB shift, and go to state 112 FALSE shift, and go to state 113 OP_MUL shift, and go to state 114 TRUE shift, and go to state 115 NOT shift, and go to state 116 CASE shift, and go to state 117 EXTRACT shift, and go to state 118 OP_LP shift, and go to state 119 CAST shift, and go to state 120 NULL shift, and go to state 121 INTLITERAL shift, and go to state 122 STRINGLITERAL shift, and go to state 123 FLOATLITERAL shift, and go to state 124 IDENTIFIER shift, and go to state 27 $default reduce using rule 285 (opt_not) order_item_list go to state 213 order_item go to state 214 expr go to state 215 operand go to state 128 cast_expr go to state 129 scalar_expr go to state 130 unary_expr go to state 131 binary_expr go to state 132 logic_expr go to state 133 in_expr go to state 134 case_expr go to state 135 between_expr go to state 136 exists_expr go to state 137 comp_expr go to state 138 extract_expr go to state 139 array_index go to state 140 literal go to state 141 string_literal go to state 142 bool_literal go to state 143 num_literal go to state 144 int_literal go to state 145 float_literal go to state 146 identifier go to state 96 column_name go to state 147 opt_not go to state 148 State 152 94 limit_clause: LIMIT . expr 95 | LIMIT . expr OFFSET expr 96 | LIMIT . expr OP_COMMA expr OP_SUB shift, and go to state 112 FALSE shift, and go to state 113 OP_MUL shift, and go to state 114 TRUE shift, and go to state 115 NOT shift, and go to state 116 CASE shift, and go to state 117 EXTRACT shift, and go to state 118 OP_LP shift, and go to state 119 CAST shift, and go to state 120 NULL shift, and go to state 121 INTLITERAL shift, and go to state 122 STRINGLITERAL shift, and go to state 123 FLOATLITERAL shift, and go to state 124 IDENTIFIER shift, and go to state 27 $default reduce using rule 285 (opt_not) expr go to state 216 operand go to state 128 cast_expr go to state 129 scalar_expr go to state 130 unary_expr go to state 131 binary_expr go to state 132 logic_expr go to state 133 in_expr go to state 134 case_expr go to state 135 between_expr go to state 136 exists_expr go to state 137 comp_expr go to state 138 extract_expr go to state 139 array_index go to state 140 literal go to state 141 string_literal go to state 142 bool_literal go to state 143 num_literal go to state 144 int_literal go to state 145 float_literal go to state 146 identifier go to state 96 column_name go to state 147 opt_not go to state 148 State 153 22 select_no_parens: opt_with_clause select_clause_list opt_order_clause opt_limit_clause . $default reduce using rule 22 (select_no_parens) State 154 92 opt_limit_clause: limit_clause . $default reduce using rule 92 (opt_limit_clause) State 155 24 select_clause_list: select_clause combine_clause select_clause_list . $default reduce using rule 24 (select_clause_list) State 156 113 cte_table: cte_table_name AS OP_LP select_stmt . OP_RP OP_RP shift, and go to state 217 State 157 194 opt_column_name_list_p: OP_LP column_name_list OP_RP . $default reduce using rule 194 (opt_column_name_list_p) State 158 79 column_name_list: column_name OP_COMMA . column_name_list IDENTIFIER shift, and go to state 27 column_name_list go to state 218 identifier go to state 96 column_name go to state 97 State 159 124 create_view_stmt: CREATE OR REPLACE opt_temp RECURSIVE . VIEW view_name opt_column_name_list_p AS select_stmt opt_check_option VIEW shift, and go to state 219 State 160 123 create_view_stmt: CREATE OR REPLACE opt_temp VIEW . view_name opt_column_name_list_p AS select_stmt opt_check_option IDENTIFIER shift, and go to state 27 identifier go to state 100 view_name go to state 220 State 161 122 create_view_stmt: CREATE opt_temp RECURSIVE VIEW view_name . opt_column_name_list_p AS select_stmt opt_check_option OP_LP shift, and go to state 61 $default reduce using rule 195 (opt_column_name_list_p) opt_column_name_list_p go to state 221 State 162 121 create_view_stmt: CREATE opt_temp VIEW view_name opt_column_name_list_p . AS select_stmt opt_check_option AS shift, and go to state 222 State 163 269 opt_if_not_exist: IF NOT . EXISTS EXISTS shift, and go to state 223 State 164 118 create_table_stmt: CREATE opt_temp TABLE opt_if_not_exist table_name . AS select_stmt 119 | CREATE opt_temp TABLE opt_if_not_exist table_name . OP_LP column_def_list opt_table_constraint_list OP_RP OP_LP shift, and go to state 224 AS shift, and go to state 225 State 165 120 create_index_stmt: CREATE opt_unique INDEX opt_if_not_exist table_name . ON table_name OP_LP indexed_column_list OP_RP opt_where_clause ON shift, and go to state 226 State 166 267 opt_column: COLUMN . $default reduce using rule 267 (opt_column) State 167 148 alter_action: ADD opt_column . column_def IDENTIFIER shift, and go to state 27 column_def go to state 227 identifier go to state 228 State 168 146 alter_action: RENAME TO . table_name IDENTIFIER shift, and go to state 27 identifier go to state 31 table_name go to state 229 State 169 147 alter_action: RENAME opt_column . column_name TO column_name IDENTIFIER shift, and go to state 27 identifier go to state 96 column_name go to state 230 State 170 218 unary_expr: NOT . operand OP_SUB shift, and go to state 112 FALSE shift, and go to state 113 OP_MUL shift, and go to state 114 TRUE shift, and go to state 115 NOT shift, and go to state 170 CASE shift, and go to state 117 EXTRACT shift, and go to state 118 OP_LP shift, and go to state 119 NULL shift, and go to state 121 INTLITERAL shift, and go to state 122 STRINGLITERAL shift, and go to state 123 FLOATLITERAL shift, and go to state 124 IDENTIFIER shift, and go to state 27 operand go to state 172 scalar_expr go to state 130 unary_expr go to state 131 binary_expr go to state 132 case_expr go to state 135 comp_expr go to state 138 extract_expr go to state 139 array_index go to state 140 literal go to state 141 string_literal go to state 142 bool_literal go to state 143 num_literal go to state 144 int_literal go to state 145 float_literal go to state 146 identifier go to state 96 column_name go to state 147 State 171 217 unary_expr: OP_SUB operand . 219 | operand . ISNULL 220 | operand . IS NULL 221 | operand . IS NOT NULL 225 binary_expr: operand . binary_op operand 226 | operand . LIKE operand 227 | operand . NOT LIKE operand 243 comp_expr: operand . OP_EQUAL operand 244 | operand . OP_NOTEQUAL operand 245 | operand . OP_GREATERTHAN operand 246 | operand . OP_LESSTHAN operand 247 | operand . OP_LESSEQ operand 248 | operand . OP_GREATEREQ operand 256 array_index: operand . OP_LBRACKET int_literal OP_RBRACKET OP_MUL shift, and go to state 194 OP_MOD shift, and go to state 195 OP_LBRACKET shift, and go to state 200 OP_DIVIDE shift, and go to state 201 $default reduce using rule 217 (unary_expr) binary_op go to state 204 State 172 218 unary_expr: NOT operand . 219 | operand . ISNULL 220 | operand . IS NULL 221 | operand . IS NOT NULL 225 binary_expr: operand . binary_op operand 226 | operand . LIKE operand 227 | operand . NOT LIKE operand 243 comp_expr: operand . OP_EQUAL operand 244 | operand . OP_NOTEQUAL operand 245 | operand . OP_GREATERTHAN operand 246 | operand . OP_LESSTHAN operand 247 | operand . OP_LESSEQ operand 248 | operand . OP_GREATEREQ operand 256 array_index: operand . OP_LBRACKET int_literal OP_RBRACKET OP_NOTEQUAL shift, and go to state 187 OP_LESSTHAN shift, and go to state 189 OP_GREATEREQ shift, and go to state 190 OP_ADD shift, and go to state 191 OP_SUB shift, and go to state 192 OP_GREATERTHAN shift, and go to state 193 OP_MUL shift, and go to state 194 OP_MOD shift, and go to state 195 IS shift, and go to state 196 OP_LESSEQ shift, and go to state 198 LIKE shift, and go to state 199 OP_LBRACKET shift, and go to state 200 OP_DIVIDE shift, and go to state 201 ISNULL shift, and go to state 202 OP_EQUAL shift, and go to state 203 $default reduce using rule 218 (unary_expr) binary_op go to state 204 State 173 242 case_clause: WHEN . expr THEN expr OP_SUB shift, and go to state 112 FALSE shift, and go to state 113 OP_MUL shift, and go to state 114 TRUE shift, and go to state 115 NOT shift, and go to state 116 CASE shift, and go to state 117 EXTRACT shift, and go to state 118 OP_LP shift, and go to state 119 CAST shift, and go to state 120 NULL shift, and go to state 121 INTLITERAL shift, and go to state 122 STRINGLITERAL shift, and go to state 123 FLOATLITERAL shift, and go to state 124 IDENTIFIER shift, and go to state 27 $default reduce using rule 285 (opt_not) expr go to state 232 operand go to state 128 cast_expr go to state 129 scalar_expr go to state 130 unary_expr go to state 131 binary_expr go to state 132 logic_expr go to state 133 in_expr go to state 134 case_expr go to state 135 between_expr go to state 136 exists_expr go to state 137 comp_expr go to state 138 extract_expr go to state 139 array_index go to state 140 literal go to state 141 string_literal go to state 142 bool_literal go to state 143 num_literal go to state 144 int_literal go to state 145 float_literal go to state 146 identifier go to state 96 column_name go to state 147 opt_not go to state 148 State 174 228 logic_expr: expr . AND expr 229 | expr . OR expr 233 case_expr: CASE expr . case_list END 235 | CASE expr . case_list ELSE expr END OR shift, and go to state 184 AND shift, and go to state 185 WHEN shift, and go to state 173 case_list go to state 233 case_clause go to state 176 State 175 234 case_expr: CASE case_list . END 236 | CASE case_list . ELSE expr END END shift, and go to state 234 ELSE shift, and go to state 235 State 176 240 case_list: case_clause . 241 | case_clause . case_list WHEN shift, and go to state 173 $default reduce using rule 240 (case_list) case_list go to state 236 case_clause go to state 176 State 177 249 extract_expr: EXTRACT OP_LP . datetime_field FROM expr OP_RP MINUTE shift, and go to state 237 MONTH shift, and go to state 238 YEAR shift, and go to state 239 HOUR shift, and go to state 240 DAY shift, and go to state 241 SECOND shift, and go to state 242 datetime_field go to state 243 State 178 213 operand: OP_LP select_no_parens . OP_RP OP_RP shift, and go to state 244 State 179 206 operand: OP_LP expr_list . OP_RP OP_RP shift, and go to state 245 State 180 214 cast_expr: CAST OP_LP . expr AS type_name OP_RP OP_SUB shift, and go to state 112 FALSE shift, and go to state 113 OP_MUL shift, and go to state 114 TRUE shift, and go to state 115 NOT shift, and go to state 116 CASE shift, and go to state 117 EXTRACT shift, and go to state 118 OP_LP shift, and go to state 119 CAST shift, and go to state 120 NULL shift, and go to state 121 INTLITERAL shift, and go to state 122 STRINGLITERAL shift, and go to state 123 FLOATLITERAL shift, and go to state 124 IDENTIFIER shift, and go to state 27 $default reduce using rule 285 (opt_not) expr go to state 246 operand go to state 128 cast_expr go to state 129 scalar_expr go to state 130 unary_expr go to state 131 binary_expr go to state 132 logic_expr go to state 133 in_expr go to state 134 case_expr go to state 135 between_expr go to state 136 exists_expr go to state 137 comp_expr go to state 138 extract_expr go to state 139 array_index go to state 140 literal go to state 141 string_literal go to state 142 bool_literal go to state 143 num_literal go to state 144 int_literal go to state 145 float_literal go to state 146 identifier go to state 96 column_name go to state 147 opt_not go to state 148 State 181 70 from_clause: FROM . table_ref $default reduce using rule 81 (opt_table_prefix) table_ref go to state 247 opt_table_prefix go to state 248 State 182 25 select_clause: SELECT opt_all_or_distinct select_target opt_from_clause . opt_where_clause opt_group_clause opt_window_clause WHERE shift, and go to state 249 $default reduce using rule 68 (opt_where_clause) opt_where_clause go to state 250 where_clause go to state 251 State 183 29 opt_from_clause: from_clause . $default reduce using rule 29 (opt_from_clause) State 184 229 logic_expr: expr OR . expr OP_SUB shift, and go to state 112 FALSE shift, and go to state 113 OP_MUL shift, and go to state 114 TRUE shift, and go to state 115 NOT shift, and go to state 116 CASE shift, and go to state 117 EXTRACT shift, and go to state 118 OP_LP shift, and go to state 119 CAST shift, and go to state 120 NULL shift, and go to state 121 INTLITERAL shift, and go to state 122 STRINGLITERAL shift, and go to state 123 FLOATLITERAL shift, and go to state 124 IDENTIFIER shift, and go to state 27 $default reduce using rule 285 (opt_not) expr go to state 252 operand go to state 128 cast_expr go to state 129 scalar_expr go to state 130 unary_expr go to state 131 binary_expr go to state 132 logic_expr go to state 133 in_expr go to state 134 case_expr go to state 135 between_expr go to state 136 exists_expr go to state 137 comp_expr go to state 138 extract_expr go to state 139 array_index go to state 140 literal go to state 141 string_literal go to state 142 bool_literal go to state 143 num_literal go to state 144 int_literal go to state 145 float_literal go to state 146 identifier go to state 96 column_name go to state 147 opt_not go to state 148 State 185 228 logic_expr: expr AND . expr OP_SUB shift, and go to state 112 FALSE shift, and go to state 113 OP_MUL shift, and go to state 114 TRUE shift, and go to state 115 NOT shift, and go to state 116 CASE shift, and go to state 117 EXTRACT shift, and go to state 118 OP_LP shift, and go to state 119 CAST shift, and go to state 120 NULL shift, and go to state 121 INTLITERAL shift, and go to state 122 STRINGLITERAL shift, and go to state 123 FLOATLITERAL shift, and go to state 124 IDENTIFIER shift, and go to state 27 $default reduce using rule 285 (opt_not) expr go to state 253 operand go to state 128 cast_expr go to state 129 scalar_expr go to state 130 unary_expr go to state 131 binary_expr go to state 132 logic_expr go to state 133 in_expr go to state 134 case_expr go to state 135 between_expr go to state 136 exists_expr go to state 137 comp_expr go to state 138 extract_expr go to state 139 array_index go to state 140 literal go to state 141 string_literal go to state 142 bool_literal go to state 143 num_literal go to state 144 int_literal go to state 145 float_literal go to state 146 identifier go to state 96 column_name go to state 147 opt_not go to state 148 State 186 90 expr_list: expr OP_COMMA . expr_list OP_SUB shift, and go to state 112 FALSE shift, and go to state 113 OP_MUL shift, and go to state 114 TRUE shift, and go to state 115 NOT shift, and go to state 116 CASE shift, and go to state 117 EXTRACT shift, and go to state 118 OP_LP shift, and go to state 119 CAST shift, and go to state 120 NULL shift, and go to state 121 INTLITERAL shift, and go to state 122 STRINGLITERAL shift, and go to state 123 FLOATLITERAL shift, and go to state 124 IDENTIFIER shift, and go to state 27 $default reduce using rule 285 (opt_not) expr_list go to state 254 expr go to state 127 operand go to state 128 cast_expr go to state 129 scalar_expr go to state 130 unary_expr go to state 131 binary_expr go to state 132 logic_expr go to state 133 in_expr go to state 134 case_expr go to state 135 between_expr go to state 136 exists_expr go to state 137 comp_expr go to state 138 extract_expr go to state 139 array_index go to state 140 literal go to state 141 string_literal go to state 142 bool_literal go to state 143 num_literal go to state 144 int_literal go to state 145 float_literal go to state 146 identifier go to state 96 column_name go to state 147 opt_not go to state 148 State 187 244 comp_expr: operand OP_NOTEQUAL . operand OP_SUB shift, and go to state 112 FALSE shift, and go to state 113 OP_MUL shift, and go to state 114 TRUE shift, and go to state 115 NOT shift, and go to state 170 CASE shift, and go to state 117 EXTRACT shift, and go to state 118 OP_LP shift, and go to state 119 NULL shift, and go to state 121 INTLITERAL shift, and go to state 122 STRINGLITERAL shift, and go to state 123 FLOATLITERAL shift, and go to state 124 IDENTIFIER shift, and go to state 27 operand go to state 255 scalar_expr go to state 130 unary_expr go to state 131 binary_expr go to state 132 case_expr go to state 135 comp_expr go to state 138 extract_expr go to state 139 array_index go to state 140 literal go to state 141 string_literal go to state 142 bool_literal go to state 143 num_literal go to state 144 int_literal go to state 145 float_literal go to state 146 identifier go to state 96 column_name go to state 147 State 188 237 between_expr: operand BETWEEN . operand AND operand OP_SUB shift, and go to state 112 FALSE shift, and go to state 113 OP_MUL shift, and go to state 114 TRUE shift, and go to state 115 NOT shift, and go to state 170 CASE shift, and go to state 117 EXTRACT shift, and go to state 118 OP_LP shift, and go to state 119 NULL shift, and go to state 121 INTLITERAL shift, and go to state 122 STRINGLITERAL shift, and go to state 123 FLOATLITERAL shift, and go to state 124 IDENTIFIER shift, and go to state 27 operand go to state 256 scalar_expr go to state 130 unary_expr go to state 131 binary_expr go to state 132 case_expr go to state 135 comp_expr go to state 138 extract_expr go to state 139 array_index go to state 140 literal go to state 141 string_literal go to state 142 bool_literal go to state 143 num_literal go to state 144 int_literal go to state 145 float_literal go to state 146 identifier go to state 96 column_name go to state 147 State 189 246 comp_expr: operand OP_LESSTHAN . operand OP_SUB shift, and go to state 112 FALSE shift, and go to state 113 OP_MUL shift, and go to state 114 TRUE shift, and go to state 115 NOT shift, and go to state 170 CASE shift, and go to state 117 EXTRACT shift, and go to state 118 OP_LP shift, and go to state 119 NULL shift, and go to state 121 INTLITERAL shift, and go to state 122 STRINGLITERAL shift, and go to state 123 FLOATLITERAL shift, and go to state 124 IDENTIFIER shift, and go to state 27 operand go to state 257 scalar_expr go to state 130 unary_expr go to state 131 binary_expr go to state 132 case_expr go to state 135 comp_expr go to state 138 extract_expr go to state 139 array_index go to state 140 literal go to state 141 string_literal go to state 142 bool_literal go to state 143 num_literal go to state 144 int_literal go to state 145 float_literal go to state 146 identifier go to state 96 column_name go to state 147 State 190 248 comp_expr: operand OP_GREATEREQ . operand OP_SUB shift, and go to state 112 FALSE shift, and go to state 113 OP_MUL shift, and go to state 114 TRUE shift, and go to state 115 NOT shift, and go to state 170 CASE shift, and go to state 117 EXTRACT shift, and go to state 118 OP_LP shift, and go to state 119 NULL shift, and go to state 121 INTLITERAL shift, and go to state 122 STRINGLITERAL shift, and go to state 123 FLOATLITERAL shift, and go to state 124 IDENTIFIER shift, and go to state 27 operand go to state 258 scalar_expr go to state 130 unary_expr go to state 131 binary_expr go to state 132 case_expr go to state 135 comp_expr go to state 138 extract_expr go to state 139 array_index go to state 140 literal go to state 141 string_literal go to state 142 bool_literal go to state 143 num_literal go to state 144 int_literal go to state 145 float_literal go to state 146 identifier go to state 96 column_name go to state 147 State 191 279 binary_op: OP_ADD . $default reduce using rule 279 (binary_op) State 192 280 binary_op: OP_SUB . $default reduce using rule 280 (binary_op) State 193 245 comp_expr: operand OP_GREATERTHAN . operand OP_SUB shift, and go to state 112 FALSE shift, and go to state 113 OP_MUL shift, and go to state 114 TRUE shift, and go to state 115 NOT shift, and go to state 170 CASE shift, and go to state 117 EXTRACT shift, and go to state 118 OP_LP shift, and go to state 119 NULL shift, and go to state 121 INTLITERAL shift, and go to state 122 STRINGLITERAL shift, and go to state 123 FLOATLITERAL shift, and go to state 124 IDENTIFIER shift, and go to state 27 operand go to state 259 scalar_expr go to state 130 unary_expr go to state 131 binary_expr go to state 132 case_expr go to state 135 comp_expr go to state 138 extract_expr go to state 139 array_index go to state 140 literal go to state 141 string_literal go to state 142 bool_literal go to state 143 num_literal go to state 144 int_literal go to state 145 float_literal go to state 146 identifier go to state 96 column_name go to state 147 State 194 283 binary_op: OP_MUL . $default reduce using rule 283 (binary_op) State 195 282 binary_op: OP_MOD . $default reduce using rule 282 (binary_op) State 196 220 unary_expr: operand IS . NULL 221 | operand IS . NOT NULL NOT shift, and go to state 260 NULL shift, and go to state 261 State 197 227 binary_expr: operand NOT . LIKE operand 238 between_expr: operand NOT . BETWEEN operand AND operand 284 opt_not: NOT . BETWEEN shift, and go to state 262 LIKE shift, and go to state 263 $default reduce using rule 284 (opt_not) State 198 247 comp_expr: operand OP_LESSEQ . operand OP_SUB shift, and go to state 112 FALSE shift, and go to state 113 OP_MUL shift, and go to state 114 TRUE shift, and go to state 115 NOT shift, and go to state 170 CASE shift, and go to state 117 EXTRACT shift, and go to state 118 OP_LP shift, and go to state 119 NULL shift, and go to state 121 INTLITERAL shift, and go to state 122 STRINGLITERAL shift, and go to state 123 FLOATLITERAL shift, and go to state 124 IDENTIFIER shift, and go to state 27 operand go to state 264 scalar_expr go to state 130 unary_expr go to state 131 binary_expr go to state 132 case_expr go to state 135 comp_expr go to state 138 extract_expr go to state 139 array_index go to state 140 literal go to state 141 string_literal go to state 142 bool_literal go to state 143 num_literal go to state 144 int_literal go to state 145 float_literal go to state 146 identifier go to state 96 column_name go to state 147 State 199 226 binary_expr: operand LIKE . operand OP_SUB shift, and go to state 112 FALSE shift, and go to state 113 OP_MUL shift, and go to state 114 TRUE shift, and go to state 115 NOT shift, and go to state 170 CASE shift, and go to state 117 EXTRACT shift, and go to state 118 OP_LP shift, and go to state 119 NULL shift, and go to state 121 INTLITERAL shift, and go to state 122 STRINGLITERAL shift, and go to state 123 FLOATLITERAL shift, and go to state 124 IDENTIFIER shift, and go to state 27 operand go to state 265 scalar_expr go to state 130 unary_expr go to state 131 binary_expr go to state 132 case_expr go to state 135 comp_expr go to state 138 extract_expr go to state 139 array_index go to state 140 literal go to state 141 string_literal go to state 142 bool_literal go to state 143 num_literal go to state 144 int_literal go to state 145 float_literal go to state 146 identifier go to state 96 column_name go to state 147 State 200 256 array_index: operand OP_LBRACKET . int_literal OP_RBRACKET INTLITERAL shift, and go to state 122 int_literal go to state 266 State 201 281 binary_op: OP_DIVIDE . $default reduce using rule 281 (binary_op) State 202 219 unary_expr: operand ISNULL . $default reduce using rule 219 (unary_expr) State 203 243 comp_expr: operand OP_EQUAL . operand OP_SUB shift, and go to state 112 FALSE shift, and go to state 113 OP_MUL shift, and go to state 114 TRUE shift, and go to state 115 NOT shift, and go to state 170 CASE shift, and go to state 117 EXTRACT shift, and go to state 118 OP_LP shift, and go to state 119 NULL shift, and go to state 121 INTLITERAL shift, and go to state 122 STRINGLITERAL shift, and go to state 123 FLOATLITERAL shift, and go to state 124 IDENTIFIER shift, and go to state 27 operand go to state 267 scalar_expr go to state 130 unary_expr go to state 131 binary_expr go to state 132 case_expr go to state 135 comp_expr go to state 138 extract_expr go to state 139 array_index go to state 140 literal go to state 141 string_literal go to state 142 bool_literal go to state 143 num_literal go to state 144 int_literal go to state 145 float_literal go to state 146 identifier go to state 96 column_name go to state 147 State 204 225 binary_expr: operand binary_op . operand OP_SUB shift, and go to state 112 FALSE shift, and go to state 113 OP_MUL shift, and go to state 114 TRUE shift, and go to state 115 NOT shift, and go to state 170 CASE shift, and go to state 117 EXTRACT shift, and go to state 118 OP_LP shift, and go to state 119 NULL shift, and go to state 121 INTLITERAL shift, and go to state 122 STRINGLITERAL shift, and go to state 123 FLOATLITERAL shift, and go to state 124 IDENTIFIER shift, and go to state 27 operand go to state 268 scalar_expr go to state 130 unary_expr go to state 131 binary_expr go to state 132 case_expr go to state 135 comp_expr go to state 138 extract_expr go to state 139 array_index go to state 140 literal go to state 141 string_literal go to state 142 bool_literal go to state 143 num_literal go to state 144 int_literal go to state 145 float_literal go to state 146 identifier go to state 96 column_name go to state 147 State 205 230 in_expr: operand opt_not . IN OP_LP select_no_parens OP_RP 231 | operand opt_not . IN OP_LP expr_list OP_RP 232 | operand opt_not . IN table_name IN shift, and go to state 269 State 206 239 exists_expr: opt_not EXISTS . OP_LP select_no_parens OP_RP OP_LP shift, and go to state 270 State 207 199 set_clause: OP_LP . column_name_list OP_RP OP_EQUAL expr IDENTIFIER shift, and go to state 27 column_name_list go to state 271 identifier go to state 96 column_name go to state 97 State 208 143 update_stmt: opt_with_clause UPDATE table_name SET set_clause_list . opt_where_clause WHERE shift, and go to state 249 $default reduce using rule 68 (opt_where_clause) opt_where_clause go to state 272 where_clause go to state 251 State 209 196 set_clause_list: set_clause . 197 | set_clause . OP_COMMA set_clause_list OP_COMMA shift, and go to state 273 $default reduce using rule 196 (set_clause_list) State 210 198 set_clause: column_name . OP_EQUAL expr OP_EQUAL shift, and go to state 274 State 211 128 insert_stmt: opt_with_clause INSERT INTO table_name insert_rest . opt_on_conflict ON shift, and go to state 275 $default reduce using rule 137 (opt_on_conflict) opt_on_conflict go to state 276 State 212 129 insert_rest: opt_column_name_list_p . select_no_parens 130 | opt_column_name_list_p . DEFAULT VALUES 131 | opt_column_name_list_p . VALUES super_values_list WITH shift, and go to state 1 VALUES shift, and go to state 277 DEFAULT shift, and go to state 278 $default reduce using rule 110 (opt_with_clause) select_no_parens go to state 279 opt_with_clause go to state 40 State 213 97 opt_order_clause: ORDER BY order_item_list . $default reduce using rule 97 (opt_order_clause) State 214 102 order_item_list: order_item . 103 | order_item . OP_COMMA order_item_list OP_COMMA shift, and go to state 280 $default reduce using rule 102 (order_item_list) State 215 104 order_item: expr . opt_order_behavior opt_order_nulls 228 logic_expr: expr . AND expr 229 | expr . OR expr OR shift, and go to state 184 AND shift, and go to state 185 ASC shift, and go to state 281 DESC shift, and go to state 282 $default reduce using rule 107 (opt_order_behavior) opt_order_behavior go to state 283 State 216 94 limit_clause: LIMIT expr . 95 | LIMIT expr . OFFSET expr 96 | LIMIT expr . OP_COMMA expr 228 logic_expr: expr . AND expr 229 | expr . OR expr OR shift, and go to state 184 OFFSET shift, and go to state 284 AND shift, and go to state 185 OP_COMMA shift, and go to state 285 $default reduce using rule 94 (limit_clause) State 217 113 cte_table: cte_table_name AS OP_LP select_stmt OP_RP . $default reduce using rule 113 (cte_table) State 218 79 column_name_list: column_name OP_COMMA column_name_list . $default reduce using rule 79 (column_name_list) State 219 124 create_view_stmt: CREATE OR REPLACE opt_temp RECURSIVE VIEW . view_name opt_column_name_list_p AS select_stmt opt_check_option IDENTIFIER shift, and go to state 27 identifier go to state 100 view_name go to state 286 State 220 123 create_view_stmt: CREATE OR REPLACE opt_temp VIEW view_name . opt_column_name_list_p AS select_stmt opt_check_option OP_LP shift, and go to state 61 $default reduce using rule 195 (opt_column_name_list_p) opt_column_name_list_p go to state 287 State 221 122 create_view_stmt: CREATE opt_temp RECURSIVE VIEW view_name opt_column_name_list_p . AS select_stmt opt_check_option AS shift, and go to state 288 State 222 121 create_view_stmt: CREATE opt_temp VIEW view_name opt_column_name_list_p AS . select_stmt opt_check_option WITH shift, and go to state 1 OP_LP shift, and go to state 4 $default reduce using rule 110 (opt_with_clause) select_stmt go to state 289 select_with_parens go to state 14 select_no_parens go to state 15 opt_with_clause go to state 40 State 223 269 opt_if_not_exist: IF NOT EXISTS . $default reduce using rule 269 (opt_if_not_exist) State 224 119 create_table_stmt: CREATE opt_temp TABLE opt_if_not_exist table_name OP_LP . column_def_list opt_table_constraint_list OP_RP IDENTIFIER shift, and go to state 27 column_def_list go to state 290 column_def go to state 291 identifier go to state 228 State 225 118 create_table_stmt: CREATE opt_temp TABLE opt_if_not_exist table_name AS . select_stmt WITH shift, and go to state 1 OP_LP shift, and go to state 4 $default reduce using rule 110 (opt_with_clause) select_stmt go to state 292 select_with_parens go to state 14 select_no_parens go to state 15 opt_with_clause go to state 40 State 226 120 create_index_stmt: CREATE opt_unique INDEX opt_if_not_exist table_name ON . table_name OP_LP indexed_column_list OP_RP opt_where_clause IDENTIFIER shift, and go to state 27 identifier go to state 31 table_name go to state 293 State 227 148 alter_action: ADD opt_column column_def . $default reduce using rule 148 (alter_action) State 228 151 column_def: identifier . type_name opt_column_constraint_list TEXT shift, and go to state 294 BIGINT shift, and go to state 295 NUMERIC shift, and go to state 296 DOUBLE shift, and go to state 297 NATIONAL shift, and go to state 298 DEC shift, and go to state 299 NCHAR shift, and go to state 300 REAL shift, and go to state 301 CHAR shift, and go to state 302 DECIMAL shift, and go to state 303 INTEGER shift, and go to state 304 INT shift, and go to state 305 BOOLEAN shift, and go to state 306 FLOAT shift, and go to state 307 CHARACTER shift, and go to state 308 SMALLINT shift, and go to state 309 VARCHAR shift, and go to state 310 type_name go to state 311 character_type go to state 312 character_with_length go to state 313 character_without_length go to state 314 character_conflicta go to state 315 numeric_type go to state 316 State 229 146 alter_action: RENAME TO table_name . $default reduce using rule 146 (alter_action) State 230 147 alter_action: RENAME opt_column column_name . TO column_name TO shift, and go to state 317 State 231 227 binary_expr: operand NOT . LIKE operand LIKE shift, and go to state 263 State 232 228 logic_expr: expr . AND expr 229 | expr . OR expr 242 case_clause: WHEN expr . THEN expr OR shift, and go to state 184 AND shift, and go to state 185 THEN shift, and go to state 318 State 233 233 case_expr: CASE expr case_list . END 235 | CASE expr case_list . ELSE expr END END shift, and go to state 319 ELSE shift, and go to state 320 State 234 234 case_expr: CASE case_list END . $default reduce using rule 234 (case_expr) State 235 236 case_expr: CASE case_list ELSE . expr END OP_SUB shift, and go to state 112 FALSE shift, and go to state 113 OP_MUL shift, and go to state 114 TRUE shift, and go to state 115 NOT shift, and go to state 116 CASE shift, and go to state 117 EXTRACT shift, and go to state 118 OP_LP shift, and go to state 119 CAST shift, and go to state 120 NULL shift, and go to state 121 INTLITERAL shift, and go to state 122 STRINGLITERAL shift, and go to state 123 FLOATLITERAL shift, and go to state 124 IDENTIFIER shift, and go to state 27 $default reduce using rule 285 (opt_not) expr go to state 321 operand go to state 128 cast_expr go to state 129 scalar_expr go to state 130 unary_expr go to state 131 binary_expr go to state 132 logic_expr go to state 133 in_expr go to state 134 case_expr go to state 135 between_expr go to state 136 exists_expr go to state 137 comp_expr go to state 138 extract_expr go to state 139 array_index go to state 140 literal go to state 141 string_literal go to state 142 bool_literal go to state 143 num_literal go to state 144 int_literal go to state 145 float_literal go to state 146 identifier go to state 96 column_name go to state 147 opt_not go to state 148 State 236 241 case_list: case_clause case_list . $default reduce using rule 241 (case_list) State 237 251 datetime_field: MINUTE . $default reduce using rule 251 (datetime_field) State 238 254 datetime_field: MONTH . $default reduce using rule 254 (datetime_field) State 239 255 datetime_field: YEAR . $default reduce using rule 255 (datetime_field) State 240 252 datetime_field: HOUR . $default reduce using rule 252 (datetime_field) State 241 253 datetime_field: DAY . $default reduce using rule 253 (datetime_field) State 242 250 datetime_field: SECOND . $default reduce using rule 250 (datetime_field) State 243 249 extract_expr: EXTRACT OP_LP datetime_field . FROM expr OP_RP FROM shift, and go to state 322 State 244 213 operand: OP_LP select_no_parens OP_RP . $default reduce using rule 213 (operand) State 245 206 operand: OP_LP expr_list OP_RP . $default reduce using rule 206 (operand) State 246 214 cast_expr: CAST OP_LP expr . AS type_name OP_RP 228 logic_expr: expr . AND expr 229 | expr . OR expr OR shift, and go to state 184 AND shift, and go to state 185 AS shift, and go to state 323 State 247 70 from_clause: FROM table_ref . 80 opt_table_prefix: table_ref . join_op NATURAL shift, and go to state 324 OP_COMMA shift, and go to state 325 JOIN shift, and go to state 326 $default reduce using rule 70 (from_clause) join_op go to state 327 State 248 71 table_ref: opt_table_prefix . table_name opt_on_or_using 72 | opt_table_prefix . OP_LP select_no_parens OP_RP opt_on_or_using 73 | opt_table_prefix . OP_LP table_ref OP_RP opt_on_or_using OP_LP shift, and go to state 328 IDENTIFIER shift, and go to state 27 identifier go to state 31 table_name go to state 329 State 249 69 where_clause: WHERE . expr OP_SUB shift, and go to state 112 FALSE shift, and go to state 113 OP_MUL shift, and go to state 114 TRUE shift, and go to state 115 NOT shift, and go to state 116 CASE shift, and go to state 117 EXTRACT shift, and go to state 118 OP_LP shift, and go to state 119 CAST shift, and go to state 120 NULL shift, and go to state 121 INTLITERAL shift, and go to state 122 STRINGLITERAL shift, and go to state 123 FLOATLITERAL shift, and go to state 124 IDENTIFIER shift, and go to state 27 $default reduce using rule 285 (opt_not) expr go to state 330 operand go to state 128 cast_expr go to state 129 scalar_expr go to state 130 unary_expr go to state 131 binary_expr go to state 132 logic_expr go to state 133 in_expr go to state 134 case_expr go to state 135 between_expr go to state 136 exists_expr go to state 137 comp_expr go to state 138 extract_expr go to state 139 array_index go to state 140 literal go to state 141 string_literal go to state 142 bool_literal go to state 143 num_literal go to state 144 int_literal go to state 145 float_literal go to state 146 identifier go to state 96 column_name go to state 147 opt_not go to state 148 State 250 25 select_clause: SELECT opt_all_or_distinct select_target opt_from_clause opt_where_clause . opt_group_clause opt_window_clause GROUP shift, and go to state 331 $default reduce using rule 64 (opt_group_clause) opt_group_clause go to state 332 State 251 67 opt_where_clause: where_clause . $default reduce using rule 67 (opt_where_clause) State 252 228 logic_expr: expr . AND expr 229 | expr . OR expr 229 | expr OR expr . AND shift, and go to state 185 $default reduce using rule 229 (logic_expr) State 253 228 logic_expr: expr . AND expr 228 | expr AND expr . 229 | expr . OR expr $default reduce using rule 228 (logic_expr) State 254 90 expr_list: expr OP_COMMA expr_list . $default reduce using rule 90 (expr_list) State 255 219 unary_expr: operand . ISNULL 220 | operand . IS NULL 221 | operand . IS NOT NULL 225 binary_expr: operand . binary_op operand 226 | operand . LIKE operand 227 | operand . NOT LIKE operand 243 comp_expr: operand . OP_EQUAL operand 244 | operand . OP_NOTEQUAL operand 244 | operand OP_NOTEQUAL operand . 245 | operand . OP_GREATERTHAN operand 246 | operand . OP_LESSTHAN operand 247 | operand . OP_LESSEQ operand 248 | operand . OP_GREATEREQ operand 256 array_index: operand . OP_LBRACKET int_literal OP_RBRACKET OP_LESSTHAN shift, and go to state 189 OP_GREATEREQ shift, and go to state 190 OP_ADD shift, and go to state 191 OP_SUB shift, and go to state 192 OP_GREATERTHAN shift, and go to state 193 OP_MUL shift, and go to state 194 OP_MOD shift, and go to state 195 IS shift, and go to state 196 OP_LESSEQ shift, and go to state 198 OP_LBRACKET shift, and go to state 200 OP_DIVIDE shift, and go to state 201 ISNULL shift, and go to state 202 OP_NOTEQUAL error (nonassociative) LIKE error (nonassociative) OP_EQUAL error (nonassociative) $default reduce using rule 244 (comp_expr) binary_op go to state 204 State 256 219 unary_expr: operand . ISNULL 220 | operand . IS NULL 221 | operand . IS NOT NULL 225 binary_expr: operand . binary_op operand 226 | operand . LIKE operand 227 | operand . NOT LIKE operand 237 between_expr: operand BETWEEN operand . AND operand 243 comp_expr: operand . OP_EQUAL operand 244 | operand . OP_NOTEQUAL operand 245 | operand . OP_GREATERTHAN operand 246 | operand . OP_LESSTHAN operand 247 | operand . OP_LESSEQ operand 248 | operand . OP_GREATEREQ operand 256 array_index: operand . OP_LBRACKET int_literal OP_RBRACKET OP_NOTEQUAL shift, and go to state 187 OP_LESSTHAN shift, and go to state 189 OP_GREATEREQ shift, and go to state 190 OP_ADD shift, and go to state 191 OP_SUB shift, and go to state 192 OP_GREATERTHAN shift, and go to state 193 OP_MUL shift, and go to state 194 OP_MOD shift, and go to state 195 IS shift, and go to state 196 AND shift, and go to state 333 NOT shift, and go to state 231 OP_LESSEQ shift, and go to state 198 LIKE shift, and go to state 199 OP_LBRACKET shift, and go to state 200 OP_DIVIDE shift, and go to state 201 ISNULL shift, and go to state 202 OP_EQUAL shift, and go to state 203 binary_op go to state 204 State 257 219 unary_expr: operand . ISNULL 220 | operand . IS NULL 221 | operand . IS NOT NULL 225 binary_expr: operand . binary_op operand 226 | operand . LIKE operand 227 | operand . NOT LIKE operand 243 comp_expr: operand . OP_EQUAL operand 244 | operand . OP_NOTEQUAL operand 245 | operand . OP_GREATERTHAN operand 246 | operand . OP_LESSTHAN operand 246 | operand OP_LESSTHAN operand . 247 | operand . OP_LESSEQ operand 248 | operand . OP_GREATEREQ operand 256 array_index: operand . OP_LBRACKET int_literal OP_RBRACKET OP_ADD shift, and go to state 191 OP_SUB shift, and go to state 192 OP_MUL shift, and go to state 194 OP_MOD shift, and go to state 195 IS shift, and go to state 196 OP_LBRACKET shift, and go to state 200 OP_DIVIDE shift, and go to state 201 ISNULL shift, and go to state 202 OP_LESSTHAN error (nonassociative) OP_GREATEREQ error (nonassociative) OP_GREATERTHAN error (nonassociative) OP_LESSEQ error (nonassociative) $default reduce using rule 246 (comp_expr) binary_op go to state 204 State 258 219 unary_expr: operand . ISNULL 220 | operand . IS NULL 221 | operand . IS NOT NULL 225 binary_expr: operand . binary_op operand 226 | operand . LIKE operand 227 | operand . NOT LIKE operand 243 comp_expr: operand . OP_EQUAL operand 244 | operand . OP_NOTEQUAL operand 245 | operand . OP_GREATERTHAN operand 246 | operand . OP_LESSTHAN operand 247 | operand . OP_LESSEQ operand 248 | operand . OP_GREATEREQ operand 248 | operand OP_GREATEREQ operand . 256 array_index: operand . OP_LBRACKET int_literal OP_RBRACKET OP_ADD shift, and go to state 191 OP_SUB shift, and go to state 192 OP_MUL shift, and go to state 194 OP_MOD shift, and go to state 195 IS shift, and go to state 196 OP_LBRACKET shift, and go to state 200 OP_DIVIDE shift, and go to state 201 ISNULL shift, and go to state 202 OP_LESSTHAN error (nonassociative) OP_GREATEREQ error (nonassociative) OP_GREATERTHAN error (nonassociative) OP_LESSEQ error (nonassociative) $default reduce using rule 248 (comp_expr) binary_op go to state 204 State 259 219 unary_expr: operand . ISNULL 220 | operand . IS NULL 221 | operand . IS NOT NULL 225 binary_expr: operand . binary_op operand 226 | operand . LIKE operand 227 | operand . NOT LIKE operand 243 comp_expr: operand . OP_EQUAL operand 244 | operand . OP_NOTEQUAL operand 245 | operand . OP_GREATERTHAN operand 245 | operand OP_GREATERTHAN operand . 246 | operand . OP_LESSTHAN operand 247 | operand . OP_LESSEQ operand 248 | operand . OP_GREATEREQ operand 256 array_index: operand . OP_LBRACKET int_literal OP_RBRACKET OP_ADD shift, and go to state 191 OP_SUB shift, and go to state 192 OP_MUL shift, and go to state 194 OP_MOD shift, and go to state 195 IS shift, and go to state 196 OP_LBRACKET shift, and go to state 200 OP_DIVIDE shift, and go to state 201 ISNULL shift, and go to state 202 OP_LESSTHAN error (nonassociative) OP_GREATEREQ error (nonassociative) OP_GREATERTHAN error (nonassociative) OP_LESSEQ error (nonassociative) $default reduce using rule 245 (comp_expr) binary_op go to state 204 State 260 221 unary_expr: operand IS NOT . NULL NULL shift, and go to state 334 State 261 220 unary_expr: operand IS NULL . $default reduce using rule 220 (unary_expr) State 262 238 between_expr: operand NOT BETWEEN . operand AND operand OP_SUB shift, and go to state 112 FALSE shift, and go to state 113 OP_MUL shift, and go to state 114 TRUE shift, and go to state 115 NOT shift, and go to state 170 CASE shift, and go to state 117 EXTRACT shift, and go to state 118 OP_LP shift, and go to state 119 NULL shift, and go to state 121 INTLITERAL shift, and go to state 122 STRINGLITERAL shift, and go to state 123 FLOATLITERAL shift, and go to state 124 IDENTIFIER shift, and go to state 27 operand go to state 335 scalar_expr go to state 130 unary_expr go to state 131 binary_expr go to state 132 case_expr go to state 135 comp_expr go to state 138 extract_expr go to state 139 array_index go to state 140 literal go to state 141 string_literal go to state 142 bool_literal go to state 143 num_literal go to state 144 int_literal go to state 145 float_literal go to state 146 identifier go to state 96 column_name go to state 147 State 263 227 binary_expr: operand NOT LIKE . operand OP_SUB shift, and go to state 112 FALSE shift, and go to state 113 OP_MUL shift, and go to state 114 TRUE shift, and go to state 115 NOT shift, and go to state 170 CASE shift, and go to state 117 EXTRACT shift, and go to state 118 OP_LP shift, and go to state 119 NULL shift, and go to state 121 INTLITERAL shift, and go to state 122 STRINGLITERAL shift, and go to state 123 FLOATLITERAL shift, and go to state 124 IDENTIFIER shift, and go to state 27 operand go to state 336 scalar_expr go to state 130 unary_expr go to state 131 binary_expr go to state 132 case_expr go to state 135 comp_expr go to state 138 extract_expr go to state 139 array_index go to state 140 literal go to state 141 string_literal go to state 142 bool_literal go to state 143 num_literal go to state 144 int_literal go to state 145 float_literal go to state 146 identifier go to state 96 column_name go to state 147 State 264 219 unary_expr: operand . ISNULL 220 | operand . IS NULL 221 | operand . IS NOT NULL 225 binary_expr: operand . binary_op operand 226 | operand . LIKE operand 227 | operand . NOT LIKE operand 243 comp_expr: operand . OP_EQUAL operand 244 | operand . OP_NOTEQUAL operand 245 | operand . OP_GREATERTHAN operand 246 | operand . OP_LESSTHAN operand 247 | operand . OP_LESSEQ operand 247 | operand OP_LESSEQ operand . 248 | operand . OP_GREATEREQ operand 256 array_index: operand . OP_LBRACKET int_literal OP_RBRACKET OP_ADD shift, and go to state 191 OP_SUB shift, and go to state 192 OP_MUL shift, and go to state 194 OP_MOD shift, and go to state 195 IS shift, and go to state 196 OP_LBRACKET shift, and go to state 200 OP_DIVIDE shift, and go to state 201 ISNULL shift, and go to state 202 OP_LESSTHAN error (nonassociative) OP_GREATEREQ error (nonassociative) OP_GREATERTHAN error (nonassociative) OP_LESSEQ error (nonassociative) $default reduce using rule 247 (comp_expr) binary_op go to state 204 State 265 219 unary_expr: operand . ISNULL 220 | operand . IS NULL 221 | operand . IS NOT NULL 225 binary_expr: operand . binary_op operand 226 | operand . LIKE operand 226 | operand LIKE operand . 227 | operand . NOT LIKE operand 243 comp_expr: operand . OP_EQUAL operand 244 | operand . OP_NOTEQUAL operand 245 | operand . OP_GREATERTHAN operand 246 | operand . OP_LESSTHAN operand 247 | operand . OP_LESSEQ operand 248 | operand . OP_GREATEREQ operand 256 array_index: operand . OP_LBRACKET int_literal OP_RBRACKET OP_LESSTHAN shift, and go to state 189 OP_GREATEREQ shift, and go to state 190 OP_ADD shift, and go to state 191 OP_SUB shift, and go to state 192 OP_GREATERTHAN shift, and go to state 193 OP_MUL shift, and go to state 194 OP_MOD shift, and go to state 195 IS shift, and go to state 196 OP_LESSEQ shift, and go to state 198 OP_LBRACKET shift, and go to state 200 OP_DIVIDE shift, and go to state 201 ISNULL shift, and go to state 202 OP_NOTEQUAL error (nonassociative) LIKE error (nonassociative) OP_EQUAL error (nonassociative) $default reduce using rule 226 (binary_expr) binary_op go to state 204 State 266 256 array_index: operand OP_LBRACKET int_literal . OP_RBRACKET OP_RBRACKET shift, and go to state 337 State 267 219 unary_expr: operand . ISNULL 220 | operand . IS NULL 221 | operand . IS NOT NULL 225 binary_expr: operand . binary_op operand 226 | operand . LIKE operand 227 | operand . NOT LIKE operand 243 comp_expr: operand . OP_EQUAL operand 243 | operand OP_EQUAL operand . 244 | operand . OP_NOTEQUAL operand 245 | operand . OP_GREATERTHAN operand 246 | operand . OP_LESSTHAN operand 247 | operand . OP_LESSEQ operand 248 | operand . OP_GREATEREQ operand 256 array_index: operand . OP_LBRACKET int_literal OP_RBRACKET OP_LESSTHAN shift, and go to state 189 OP_GREATEREQ shift, and go to state 190 OP_ADD shift, and go to state 191 OP_SUB shift, and go to state 192 OP_GREATERTHAN shift, and go to state 193 OP_MUL shift, and go to state 194 OP_MOD shift, and go to state 195 IS shift, and go to state 196 OP_LESSEQ shift, and go to state 198 OP_LBRACKET shift, and go to state 200 OP_DIVIDE shift, and go to state 201 ISNULL shift, and go to state 202 OP_NOTEQUAL error (nonassociative) LIKE error (nonassociative) OP_EQUAL error (nonassociative) $default reduce using rule 243 (comp_expr) binary_op go to state 204 State 268 219 unary_expr: operand . ISNULL 220 | operand . IS NULL 221 | operand . IS NOT NULL 225 binary_expr: operand . binary_op operand 225 | operand binary_op operand . 226 | operand . LIKE operand 227 | operand . NOT LIKE operand 243 comp_expr: operand . OP_EQUAL operand 244 | operand . OP_NOTEQUAL operand 245 | operand . OP_GREATERTHAN operand 246 | operand . OP_LESSTHAN operand 247 | operand . OP_LESSEQ operand 248 | operand . OP_GREATEREQ operand 256 array_index: operand . OP_LBRACKET int_literal OP_RBRACKET OP_MUL shift, and go to state 194 OP_MOD shift, and go to state 195 OP_LBRACKET shift, and go to state 200 OP_DIVIDE shift, and go to state 201 $default reduce using rule 225 (binary_expr) binary_op go to state 204 State 269 230 in_expr: operand opt_not IN . OP_LP select_no_parens OP_RP 231 | operand opt_not IN . OP_LP expr_list OP_RP 232 | operand opt_not IN . table_name OP_LP shift, and go to state 338 IDENTIFIER shift, and go to state 27 identifier go to state 31 table_name go to state 339 State 270 239 exists_expr: opt_not EXISTS OP_LP . select_no_parens OP_RP WITH shift, and go to state 1 $default reduce using rule 110 (opt_with_clause) select_no_parens go to state 340 opt_with_clause go to state 40 State 271 199 set_clause: OP_LP column_name_list . OP_RP OP_EQUAL expr OP_RP shift, and go to state 341 State 272 143 update_stmt: opt_with_clause UPDATE table_name SET set_clause_list opt_where_clause . $default reduce using rule 143 (update_stmt) State 273 197 set_clause_list: set_clause OP_COMMA . set_clause_list OP_LP shift, and go to state 207 IDENTIFIER shift, and go to state 27 set_clause_list go to state 342 set_clause go to state 209 identifier go to state 96 column_name go to state 210 State 274 198 set_clause: column_name OP_EQUAL . expr OP_SUB shift, and go to state 112 FALSE shift, and go to state 113 OP_MUL shift, and go to state 114 TRUE shift, and go to state 115 NOT shift, and go to state 116 CASE shift, and go to state 117 EXTRACT shift, and go to state 118 OP_LP shift, and go to state 119 CAST shift, and go to state 120 NULL shift, and go to state 121 INTLITERAL shift, and go to state 122 STRINGLITERAL shift, and go to state 123 FLOATLITERAL shift, and go to state 124 IDENTIFIER shift, and go to state 27 $default reduce using rule 285 (opt_not) expr go to state 343 operand go to state 128 cast_expr go to state 129 scalar_expr go to state 130 unary_expr go to state 131 binary_expr go to state 132 logic_expr go to state 133 in_expr go to state 134 case_expr go to state 135 between_expr go to state 136 exists_expr go to state 137 comp_expr go to state 138 extract_expr go to state 139 array_index go to state 140 literal go to state 141 string_literal go to state 142 bool_literal go to state 143 num_literal go to state 144 int_literal go to state 145 float_literal go to state 146 identifier go to state 96 column_name go to state 147 opt_not go to state 148 State 275 135 opt_on_conflict: ON . CONFLICT opt_conflict_expr DO NOTHING 136 | ON . CONFLICT opt_conflict_expr DO UPDATE set_clause_list where_clause CONFLICT shift, and go to state 344 State 276 128 insert_stmt: opt_with_clause INSERT INTO table_name insert_rest opt_on_conflict . $default reduce using rule 128 (insert_stmt) State 277 131 insert_rest: opt_column_name_list_p VALUES . super_values_list OP_LP shift, and go to state 345 super_values_list go to state 346 values_list go to state 347 State 278 130 insert_rest: opt_column_name_list_p DEFAULT . VALUES VALUES shift, and go to state 348 State 279 129 insert_rest: opt_column_name_list_p select_no_parens . $default reduce using rule 129 (insert_rest) State 280 103 order_item_list: order_item OP_COMMA . order_item_list OP_SUB shift, and go to state 112 FALSE shift, and go to state 113 OP_MUL shift, and go to state 114 TRUE shift, and go to state 115 NOT shift, and go to state 116 CASE shift, and go to state 117 EXTRACT shift, and go to state 118 OP_LP shift, and go to state 119 CAST shift, and go to state 120 NULL shift, and go to state 121 INTLITERAL shift, and go to state 122 STRINGLITERAL shift, and go to state 123 FLOATLITERAL shift, and go to state 124 IDENTIFIER shift, and go to state 27 $default reduce using rule 285 (opt_not) order_item_list go to state 349 order_item go to state 214 expr go to state 215 operand go to state 128 cast_expr go to state 129 scalar_expr go to state 130 unary_expr go to state 131 binary_expr go to state 132 logic_expr go to state 133 in_expr go to state 134 case_expr go to state 135 between_expr go to state 136 exists_expr go to state 137 comp_expr go to state 138 extract_expr go to state 139 array_index go to state 140 literal go to state 141 string_literal go to state 142 bool_literal go to state 143 num_literal go to state 144 int_literal go to state 145 float_literal go to state 146 identifier go to state 96 column_name go to state 147 opt_not go to state 148 State 281 105 opt_order_behavior: ASC . $default reduce using rule 105 (opt_order_behavior) State 282 106 opt_order_behavior: DESC . $default reduce using rule 106 (opt_order_behavior) State 283 104 order_item: expr opt_order_behavior . opt_order_nulls NULLS shift, and go to state 350 $default reduce using rule 101 (opt_order_nulls) opt_order_nulls go to state 351 State 284 95 limit_clause: LIMIT expr OFFSET . expr OP_SUB shift, and go to state 112 FALSE shift, and go to state 113 OP_MUL shift, and go to state 114 TRUE shift, and go to state 115 NOT shift, and go to state 116 CASE shift, and go to state 117 EXTRACT shift, and go to state 118 OP_LP shift, and go to state 119 CAST shift, and go to state 120 NULL shift, and go to state 121 INTLITERAL shift, and go to state 122 STRINGLITERAL shift, and go to state 123 FLOATLITERAL shift, and go to state 124 IDENTIFIER shift, and go to state 27 $default reduce using rule 285 (opt_not) expr go to state 352 operand go to state 128 cast_expr go to state 129 scalar_expr go to state 130 unary_expr go to state 131 binary_expr go to state 132 logic_expr go to state 133 in_expr go to state 134 case_expr go to state 135 between_expr go to state 136 exists_expr go to state 137 comp_expr go to state 138 extract_expr go to state 139 array_index go to state 140 literal go to state 141 string_literal go to state 142 bool_literal go to state 143 num_literal go to state 144 int_literal go to state 145 float_literal go to state 146 identifier go to state 96 column_name go to state 147 opt_not go to state 148 State 285 96 limit_clause: LIMIT expr OP_COMMA . expr OP_SUB shift, and go to state 112 FALSE shift, and go to state 113 OP_MUL shift, and go to state 114 TRUE shift, and go to state 115 NOT shift, and go to state 116 CASE shift, and go to state 117 EXTRACT shift, and go to state 118 OP_LP shift, and go to state 119 CAST shift, and go to state 120 NULL shift, and go to state 121 INTLITERAL shift, and go to state 122 STRINGLITERAL shift, and go to state 123 FLOATLITERAL shift, and go to state 124 IDENTIFIER shift, and go to state 27 $default reduce using rule 285 (opt_not) expr go to state 353 operand go to state 128 cast_expr go to state 129 scalar_expr go to state 130 unary_expr go to state 131 binary_expr go to state 132 logic_expr go to state 133 in_expr go to state 134 case_expr go to state 135 between_expr go to state 136 exists_expr go to state 137 comp_expr go to state 138 extract_expr go to state 139 array_index go to state 140 literal go to state 141 string_literal go to state 142 bool_literal go to state 143 num_literal go to state 144 int_literal go to state 145 float_literal go to state 146 identifier go to state 96 column_name go to state 147 opt_not go to state 148 State 286 124 create_view_stmt: CREATE OR REPLACE opt_temp RECURSIVE VIEW view_name . opt_column_name_list_p AS select_stmt opt_check_option OP_LP shift, and go to state 61 $default reduce using rule 195 (opt_column_name_list_p) opt_column_name_list_p go to state 354 State 287 123 create_view_stmt: CREATE OR REPLACE opt_temp VIEW view_name opt_column_name_list_p . AS select_stmt opt_check_option AS shift, and go to state 355 State 288 122 create_view_stmt: CREATE opt_temp RECURSIVE VIEW view_name opt_column_name_list_p AS . select_stmt opt_check_option WITH shift, and go to state 1 OP_LP shift, and go to state 4 $default reduce using rule 110 (opt_with_clause) select_stmt go to state 356 select_with_parens go to state 14 select_no_parens go to state 15 opt_with_clause go to state 40 State 289 121 create_view_stmt: CREATE opt_temp VIEW view_name opt_column_name_list_p AS select_stmt . opt_check_option WITH shift, and go to state 357 $default reduce using rule 193 (opt_check_option) opt_check_option go to state 358 State 290 119 create_table_stmt: CREATE opt_temp TABLE opt_if_not_exist table_name OP_LP column_def_list . opt_table_constraint_list OP_RP CONSTRAINT shift, and go to state 359 $default reduce using rule 314 (opt_table_constraint_list) constraint_name go to state 360 opt_table_constraint_list go to state 361 table_constraint_list go to state 362 table_constraint go to state 363 State 291 149 column_def_list: column_def . 150 | column_def . OP_COMMA column_def_list OP_COMMA shift, and go to state 364 $default reduce using rule 149 (column_def_list) State 292 118 create_table_stmt: CREATE opt_temp TABLE opt_if_not_exist table_name AS select_stmt . $default reduce using rule 118 (create_table_stmt) State 293 120 create_index_stmt: CREATE opt_unique INDEX opt_if_not_exist table_name ON table_name . OP_LP indexed_column_list OP_RP opt_where_clause OP_LP shift, and go to state 365 State 294 296 character_conflicta: TEXT . $default reduce using rule 296 (character_conflicta) State 295 305 numeric_type: BIGINT . $default reduce using rule 305 (numeric_type) State 296 311 numeric_type: NUMERIC . $default reduce using rule 311 (numeric_type) State 297 308 numeric_type: DOUBLE . PRECISION PRECISION shift, and go to state 366 State 298 297 character_conflicta: NATIONAL . CHARACTER opt_varying 298 | NATIONAL . CHAR opt_varying CHAR shift, and go to state 367 CHARACTER shift, and go to state 368 State 299 310 numeric_type: DEC . $default reduce using rule 310 (numeric_type) State 300 299 character_conflicta: NCHAR . opt_varying VARYING shift, and go to state 369 $default reduce using rule 301 (opt_varying) opt_varying go to state 370 State 301 306 numeric_type: REAL . $default reduce using rule 306 (numeric_type) State 302 294 character_conflicta: CHAR . opt_varying VARYING shift, and go to state 369 $default reduce using rule 301 (opt_varying) opt_varying go to state 371 State 303 309 numeric_type: DECIMAL . $default reduce using rule 309 (numeric_type) State 304 303 numeric_type: INTEGER . $default reduce using rule 303 (numeric_type) State 305 302 numeric_type: INT . $default reduce using rule 302 (numeric_type) State 306 312 numeric_type: BOOLEAN . $default reduce using rule 312 (numeric_type) State 307 307 numeric_type: FLOAT . $default reduce using rule 307 (numeric_type) State 308 293 character_conflicta: CHARACTER . opt_varying VARYING shift, and go to state 369 $default reduce using rule 301 (opt_varying) opt_varying go to state 372 State 309 304 numeric_type: SMALLINT . $default reduce using rule 304 (numeric_type) State 310 295 character_conflicta: VARCHAR . $default reduce using rule 295 (character_conflicta) State 311 151 column_def: identifier type_name . opt_column_constraint_list CHECK shift, and go to state 373 UNIQUE shift, and go to state 374 PRIMARY shift, and go to state 375 NOT shift, and go to state 376 REFERENCES shift, and go to state 377 $default reduce using rule 153 (opt_column_constraint_list) opt_column_constraint_list go to state 378 column_constraint_list go to state 379 column_constraint go to state 380 constraint_type go to state 381 foreign_clause go to state 382 State 312 288 type_name: character_type . $default reduce using rule 288 (type_name) State 313 289 character_type: character_with_length . $default reduce using rule 289 (character_type) State 314 290 character_type: character_without_length . $default reduce using rule 290 (character_type) State 315 291 character_with_length: character_conflicta . OP_LP int_literal OP_RP 292 character_without_length: character_conflicta . OP_LP shift, and go to state 383 $default reduce using rule 292 (character_without_length) State 316 287 type_name: numeric_type . $default reduce using rule 287 (type_name) State 317 147 alter_action: RENAME opt_column column_name TO . column_name IDENTIFIER shift, and go to state 27 identifier go to state 96 column_name go to state 384 State 318 242 case_clause: WHEN expr THEN . expr OP_SUB shift, and go to state 112 FALSE shift, and go to state 113 OP_MUL shift, and go to state 114 TRUE shift, and go to state 115 NOT shift, and go to state 116 CASE shift, and go to state 117 EXTRACT shift, and go to state 118 OP_LP shift, and go to state 119 CAST shift, and go to state 120 NULL shift, and go to state 121 INTLITERAL shift, and go to state 122 STRINGLITERAL shift, and go to state 123 FLOATLITERAL shift, and go to state 124 IDENTIFIER shift, and go to state 27 $default reduce using rule 285 (opt_not) expr go to state 385 operand go to state 128 cast_expr go to state 129 scalar_expr go to state 130 unary_expr go to state 131 binary_expr go to state 132 logic_expr go to state 133 in_expr go to state 134 case_expr go to state 135 between_expr go to state 136 exists_expr go to state 137 comp_expr go to state 138 extract_expr go to state 139 array_index go to state 140 literal go to state 141 string_literal go to state 142 bool_literal go to state 143 num_literal go to state 144 int_literal go to state 145 float_literal go to state 146 identifier go to state 96 column_name go to state 147 opt_not go to state 148 State 319 233 case_expr: CASE expr case_list END . $default reduce using rule 233 (case_expr) State 320 235 case_expr: CASE expr case_list ELSE . expr END OP_SUB shift, and go to state 112 FALSE shift, and go to state 113 OP_MUL shift, and go to state 114 TRUE shift, and go to state 115 NOT shift, and go to state 116 CASE shift, and go to state 117 EXTRACT shift, and go to state 118 OP_LP shift, and go to state 119 CAST shift, and go to state 120 NULL shift, and go to state 121 INTLITERAL shift, and go to state 122 STRINGLITERAL shift, and go to state 123 FLOATLITERAL shift, and go to state 124 IDENTIFIER shift, and go to state 27 $default reduce using rule 285 (opt_not) expr go to state 386 operand go to state 128 cast_expr go to state 129 scalar_expr go to state 130 unary_expr go to state 131 binary_expr go to state 132 logic_expr go to state 133 in_expr go to state 134 case_expr go to state 135 between_expr go to state 136 exists_expr go to state 137 comp_expr go to state 138 extract_expr go to state 139 array_index go to state 140 literal go to state 141 string_literal go to state 142 bool_literal go to state 143 num_literal go to state 144 int_literal go to state 145 float_literal go to state 146 identifier go to state 96 column_name go to state 147 opt_not go to state 148 State 321 228 logic_expr: expr . AND expr 229 | expr . OR expr 236 case_expr: CASE case_list ELSE expr . END OR shift, and go to state 184 END shift, and go to state 387 AND shift, and go to state 185 State 322 249 extract_expr: EXTRACT OP_LP datetime_field FROM . expr OP_RP OP_SUB shift, and go to state 112 FALSE shift, and go to state 113 OP_MUL shift, and go to state 114 TRUE shift, and go to state 115 NOT shift, and go to state 116 CASE shift, and go to state 117 EXTRACT shift, and go to state 118 OP_LP shift, and go to state 119 CAST shift, and go to state 120 NULL shift, and go to state 121 INTLITERAL shift, and go to state 122 STRINGLITERAL shift, and go to state 123 FLOATLITERAL shift, and go to state 124 IDENTIFIER shift, and go to state 27 $default reduce using rule 285 (opt_not) expr go to state 388 operand go to state 128 cast_expr go to state 129 scalar_expr go to state 130 unary_expr go to state 131 binary_expr go to state 132 logic_expr go to state 133 in_expr go to state 134 case_expr go to state 135 between_expr go to state 136 exists_expr go to state 137 comp_expr go to state 138 extract_expr go to state 139 array_index go to state 140 literal go to state 141 string_literal go to state 142 bool_literal go to state 143 num_literal go to state 144 int_literal go to state 145 float_literal go to state 146 identifier go to state 96 column_name go to state 147 opt_not go to state 148 State 323 214 cast_expr: CAST OP_LP expr AS . type_name OP_RP TEXT shift, and go to state 294 BIGINT shift, and go to state 295 NUMERIC shift, and go to state 296 DOUBLE shift, and go to state 297 NATIONAL shift, and go to state 298 DEC shift, and go to state 299 NCHAR shift, and go to state 300 REAL shift, and go to state 301 CHAR shift, and go to state 302 DECIMAL shift, and go to state 303 INTEGER shift, and go to state 304 INT shift, and go to state 305 BOOLEAN shift, and go to state 306 FLOAT shift, and go to state 307 CHARACTER shift, and go to state 308 SMALLINT shift, and go to state 309 VARCHAR shift, and go to state 310 type_name go to state 389 character_type go to state 312 character_with_length go to state 313 character_without_length go to state 314 character_conflicta go to state 315 numeric_type go to state 316 State 324 84 join_op: NATURAL . opt_join_type JOIN CROSS shift, and go to state 390 LEFT shift, and go to state 391 INNER shift, and go to state 392 $default reduce using rule 89 (opt_join_type) opt_join_type go to state 393 State 325 82 join_op: OP_COMMA . $default reduce using rule 82 (join_op) State 326 83 join_op: JOIN . $default reduce using rule 83 (join_op) State 327 80 opt_table_prefix: table_ref join_op . $default reduce using rule 80 (opt_table_prefix) State 328 72 table_ref: opt_table_prefix OP_LP . select_no_parens OP_RP opt_on_or_using 73 | opt_table_prefix OP_LP . table_ref OP_RP opt_on_or_using WITH shift, and go to state 1 SELECT reduce using rule 110 (opt_with_clause) $default reduce using rule 81 (opt_table_prefix) select_no_parens go to state 394 table_ref go to state 395 opt_table_prefix go to state 248 opt_with_clause go to state 40 State 329 71 table_ref: opt_table_prefix table_name . opt_on_or_using ON shift, and go to state 396 USING shift, and go to state 397 $default reduce using rule 75 (opt_on_or_using) opt_on_or_using go to state 398 on_or_using go to state 399 State 330 69 where_clause: WHERE expr . 228 logic_expr: expr . AND expr 229 | expr . OR expr OR shift, and go to state 184 AND shift, and go to state 185 $default reduce using rule 69 (where_clause) State 331 63 opt_group_clause: GROUP . BY expr_list opt_having_clause BY shift, and go to state 400 State 332 25 select_clause: SELECT opt_all_or_distinct select_target opt_from_clause opt_where_clause opt_group_clause . opt_window_clause WINDOW shift, and go to state 401 $default reduce using rule 33 (opt_window_clause) opt_window_clause go to state 402 window_clause go to state 403 State 333 237 between_expr: operand BETWEEN operand AND . operand OP_SUB shift, and go to state 112 FALSE shift, and go to state 113 OP_MUL shift, and go to state 114 TRUE shift, and go to state 115 NOT shift, and go to state 170 CASE shift, and go to state 117 EXTRACT shift, and go to state 118 OP_LP shift, and go to state 119 NULL shift, and go to state 121 INTLITERAL shift, and go to state 122 STRINGLITERAL shift, and go to state 123 FLOATLITERAL shift, and go to state 124 IDENTIFIER shift, and go to state 27 operand go to state 404 scalar_expr go to state 130 unary_expr go to state 131 binary_expr go to state 132 case_expr go to state 135 comp_expr go to state 138 extract_expr go to state 139 array_index go to state 140 literal go to state 141 string_literal go to state 142 bool_literal go to state 143 num_literal go to state 144 int_literal go to state 145 float_literal go to state 146 identifier go to state 96 column_name go to state 147 State 334 221 unary_expr: operand IS NOT NULL . $default reduce using rule 221 (unary_expr) State 335 219 unary_expr: operand . ISNULL 220 | operand . IS NULL 221 | operand . IS NOT NULL 225 binary_expr: operand . binary_op operand 226 | operand . LIKE operand 227 | operand . NOT LIKE operand 238 between_expr: operand NOT BETWEEN operand . AND operand 243 comp_expr: operand . OP_EQUAL operand 244 | operand . OP_NOTEQUAL operand 245 | operand . OP_GREATERTHAN operand 246 | operand . OP_LESSTHAN operand 247 | operand . OP_LESSEQ operand 248 | operand . OP_GREATEREQ operand 256 array_index: operand . OP_LBRACKET int_literal OP_RBRACKET OP_NOTEQUAL shift, and go to state 187 OP_LESSTHAN shift, and go to state 189 OP_GREATEREQ shift, and go to state 190 OP_ADD shift, and go to state 191 OP_SUB shift, and go to state 192 OP_GREATERTHAN shift, and go to state 193 OP_MUL shift, and go to state 194 OP_MOD shift, and go to state 195 IS shift, and go to state 196 AND shift, and go to state 405 NOT shift, and go to state 231 OP_LESSEQ shift, and go to state 198 LIKE shift, and go to state 199 OP_LBRACKET shift, and go to state 200 OP_DIVIDE shift, and go to state 201 ISNULL shift, and go to state 202 OP_EQUAL shift, and go to state 203 binary_op go to state 204 State 336 219 unary_expr: operand . ISNULL 220 | operand . IS NULL 221 | operand . IS NOT NULL 225 binary_expr: operand . binary_op operand 226 | operand . LIKE operand 227 | operand . NOT LIKE operand 227 | operand NOT LIKE operand . 243 comp_expr: operand . OP_EQUAL operand 244 | operand . OP_NOTEQUAL operand 245 | operand . OP_GREATERTHAN operand 246 | operand . OP_LESSTHAN operand 247 | operand . OP_LESSEQ operand 248 | operand . OP_GREATEREQ operand 256 array_index: operand . OP_LBRACKET int_literal OP_RBRACKET OP_LESSTHAN shift, and go to state 189 OP_GREATEREQ shift, and go to state 190 OP_ADD shift, and go to state 191 OP_SUB shift, and go to state 192 OP_GREATERTHAN shift, and go to state 193 OP_MUL shift, and go to state 194 OP_MOD shift, and go to state 195 IS shift, and go to state 196 OP_LESSEQ shift, and go to state 198 OP_LBRACKET shift, and go to state 200 OP_DIVIDE shift, and go to state 201 ISNULL shift, and go to state 202 OP_NOTEQUAL error (nonassociative) LIKE error (nonassociative) OP_EQUAL error (nonassociative) $default reduce using rule 227 (binary_expr) binary_op go to state 204 State 337 256 array_index: operand OP_LBRACKET int_literal OP_RBRACKET . $default reduce using rule 256 (array_index) State 338 230 in_expr: operand opt_not IN OP_LP . select_no_parens OP_RP 231 | operand opt_not IN OP_LP . expr_list OP_RP WITH shift, and go to state 1 OP_SUB shift, and go to state 112 FALSE shift, and go to state 113 OP_MUL shift, and go to state 114 TRUE shift, and go to state 115 NOT shift, and go to state 116 CASE shift, and go to state 117 EXTRACT shift, and go to state 118 OP_LP shift, and go to state 119 CAST shift, and go to state 120 NULL shift, and go to state 121 INTLITERAL shift, and go to state 122 STRINGLITERAL shift, and go to state 123 FLOATLITERAL shift, and go to state 124 IDENTIFIER shift, and go to state 27 EXISTS reduce using rule 285 (opt_not) $default reduce using rule 110 (opt_with_clause) select_no_parens go to state 406 expr_list go to state 407 opt_with_clause go to state 40 expr go to state 127 operand go to state 128 cast_expr go to state 129 scalar_expr go to state 130 unary_expr go to state 131 binary_expr go to state 132 logic_expr go to state 133 in_expr go to state 134 case_expr go to state 135 between_expr go to state 136 exists_expr go to state 137 comp_expr go to state 138 extract_expr go to state 139 array_index go to state 140 literal go to state 141 string_literal go to state 142 bool_literal go to state 143 num_literal go to state 144 int_literal go to state 145 float_literal go to state 146 identifier go to state 96 column_name go to state 147 opt_not go to state 148 State 339 232 in_expr: operand opt_not IN table_name . $default reduce using rule 232 (in_expr) State 340 239 exists_expr: opt_not EXISTS OP_LP select_no_parens . OP_RP OP_RP shift, and go to state 408 State 341 199 set_clause: OP_LP column_name_list OP_RP . OP_EQUAL expr OP_EQUAL shift, and go to state 409 State 342 197 set_clause_list: set_clause OP_COMMA set_clause_list . $default reduce using rule 197 (set_clause_list) State 343 198 set_clause: column_name OP_EQUAL expr . 228 logic_expr: expr . AND expr 229 | expr . OR expr OR shift, and go to state 184 AND shift, and go to state 185 $default reduce using rule 198 (set_clause) State 344 135 opt_on_conflict: ON CONFLICT . opt_conflict_expr DO NOTHING 136 | ON CONFLICT . opt_conflict_expr DO UPDATE set_clause_list where_clause OP_LP shift, and go to state 410 $default reduce using rule 139 (opt_conflict_expr) opt_conflict_expr go to state 411 State 345 134 values_list: OP_LP . expr_list OP_RP OP_SUB shift, and go to state 112 FALSE shift, and go to state 113 OP_MUL shift, and go to state 114 TRUE shift, and go to state 115 NOT shift, and go to state 116 CASE shift, and go to state 117 EXTRACT shift, and go to state 118 OP_LP shift, and go to state 119 CAST shift, and go to state 120 NULL shift, and go to state 121 INTLITERAL shift, and go to state 122 STRINGLITERAL shift, and go to state 123 FLOATLITERAL shift, and go to state 124 IDENTIFIER shift, and go to state 27 $default reduce using rule 285 (opt_not) expr_list go to state 412 expr go to state 127 operand go to state 128 cast_expr go to state 129 scalar_expr go to state 130 unary_expr go to state 131 binary_expr go to state 132 logic_expr go to state 133 in_expr go to state 134 case_expr go to state 135 between_expr go to state 136 exists_expr go to state 137 comp_expr go to state 138 extract_expr go to state 139 array_index go to state 140 literal go to state 141 string_literal go to state 142 bool_literal go to state 143 num_literal go to state 144 int_literal go to state 145 float_literal go to state 146 identifier go to state 96 column_name go to state 147 opt_not go to state 148 State 346 131 insert_rest: opt_column_name_list_p VALUES super_values_list . $default reduce using rule 131 (insert_rest) State 347 132 super_values_list: values_list . 133 | values_list . OP_COMMA super_values_list OP_COMMA shift, and go to state 413 $default reduce using rule 132 (super_values_list) State 348 130 insert_rest: opt_column_name_list_p DEFAULT VALUES . $default reduce using rule 130 (insert_rest) State 349 103 order_item_list: order_item OP_COMMA order_item_list . $default reduce using rule 103 (order_item_list) State 350 99 opt_order_nulls: NULLS . FIRST 100 | NULLS . LAST LAST shift, and go to state 414 FIRST shift, and go to state 415 State 351 104 order_item: expr opt_order_behavior opt_order_nulls . $default reduce using rule 104 (order_item) State 352 95 limit_clause: LIMIT expr OFFSET expr . 228 logic_expr: expr . AND expr 229 | expr . OR expr OR shift, and go to state 184 AND shift, and go to state 185 $default reduce using rule 95 (limit_clause) State 353 96 limit_clause: LIMIT expr OP_COMMA expr . 228 logic_expr: expr . AND expr 229 | expr . OR expr OR shift, and go to state 184 AND shift, and go to state 185 $default reduce using rule 96 (limit_clause) State 354 124 create_view_stmt: CREATE OR REPLACE opt_temp RECURSIVE VIEW view_name opt_column_name_list_p . AS select_stmt opt_check_option AS shift, and go to state 416 State 355 123 create_view_stmt: CREATE OR REPLACE opt_temp VIEW view_name opt_column_name_list_p AS . select_stmt opt_check_option WITH shift, and go to state 1 OP_LP shift, and go to state 4 $default reduce using rule 110 (opt_with_clause) select_stmt go to state 417 select_with_parens go to state 14 select_no_parens go to state 15 opt_with_clause go to state 40 State 356 122 create_view_stmt: CREATE opt_temp RECURSIVE VIEW view_name opt_column_name_list_p AS select_stmt . opt_check_option WITH shift, and go to state 357 $default reduce using rule 193 (opt_check_option) opt_check_option go to state 418 State 357 190 opt_check_option: WITH . CHECK OPTION 191 | WITH . CASCADED CHECK OPTION 192 | WITH . LOCAL CHECK OPTION CHECK shift, and go to state 419 LOCAL shift, and go to state 420 CASCADED shift, and go to state 421 State 358 121 create_view_stmt: CREATE opt_temp VIEW view_name opt_column_name_list_p AS select_stmt opt_check_option . $default reduce using rule 121 (create_view_stmt) State 359 181 constraint_name: CONSTRAINT . name IDENTIFIER shift, and go to state 27 identifier go to state 422 name go to state 423 State 360 317 table_constraint: constraint_name . PRIMARY KEY OP_LP indexed_column_list OP_RP 318 | constraint_name . UNIQUE OP_LP indexed_column_list OP_RP 319 | constraint_name . CHECK OP_LP expr OP_RP 320 | constraint_name . FOREIGN KEY OP_LP column_name_list OP_RP foreign_clause CHECK shift, and go to state 424 UNIQUE shift, and go to state 425 PRIMARY shift, and go to state 426 FOREIGN shift, and go to state 427 State 361 119 create_table_stmt: CREATE opt_temp TABLE opt_if_not_exist table_name OP_LP column_def_list opt_table_constraint_list . OP_RP OP_RP shift, and go to state 428 State 362 313 opt_table_constraint_list: table_constraint_list . $default reduce using rule 313 (opt_table_constraint_list) State 363 315 table_constraint_list: table_constraint . 316 | table_constraint . OP_COMMA table_constraint_list OP_COMMA shift, and go to state 429 $default reduce using rule 315 (table_constraint_list) State 364 150 column_def_list: column_def OP_COMMA . column_def_list IDENTIFIER shift, and go to state 27 column_def_list go to state 430 column_def go to state 291 identifier go to state 228 State 365 120 create_index_stmt: CREATE opt_unique INDEX opt_if_not_exist table_name ON table_name OP_LP . indexed_column_list OP_RP opt_where_clause OP_SUB shift, and go to state 112 FALSE shift, and go to state 113 OP_MUL shift, and go to state 114 TRUE shift, and go to state 115 NOT shift, and go to state 116 CASE shift, and go to state 117 EXTRACT shift, and go to state 118 OP_LP shift, and go to state 119 CAST shift, and go to state 120 NULL shift, and go to state 121 INTLITERAL shift, and go to state 122 STRINGLITERAL shift, and go to state 123 FLOATLITERAL shift, and go to state 124 IDENTIFIER shift, and go to state 27 $default reduce using rule 285 (opt_not) indexed_column_list go to state 431 indexed_column go to state 432 expr go to state 433 operand go to state 128 cast_expr go to state 129 scalar_expr go to state 130 unary_expr go to state 131 binary_expr go to state 132 logic_expr go to state 133 in_expr go to state 134 case_expr go to state 135 between_expr go to state 136 exists_expr go to state 137 comp_expr go to state 138 extract_expr go to state 139 array_index go to state 140 literal go to state 141 string_literal go to state 142 bool_literal go to state 143 num_literal go to state 144 int_literal go to state 145 float_literal go to state 146 identifier go to state 96 column_name go to state 147 opt_not go to state 148 State 366 308 numeric_type: DOUBLE PRECISION . $default reduce using rule 308 (numeric_type) State 367 298 character_conflicta: NATIONAL CHAR . opt_varying VARYING shift, and go to state 369 $default reduce using rule 301 (opt_varying) opt_varying go to state 434 State 368 297 character_conflicta: NATIONAL CHARACTER . opt_varying VARYING shift, and go to state 369 $default reduce using rule 301 (opt_varying) opt_varying go to state 435 State 369 300 opt_varying: VARYING . $default reduce using rule 300 (opt_varying) State 370 299 character_conflicta: NCHAR opt_varying . $default reduce using rule 299 (character_conflicta) State 371 294 character_conflicta: CHAR opt_varying . $default reduce using rule 294 (character_conflicta) State 372 293 character_conflicta: CHARACTER opt_varying . $default reduce using rule 293 (character_conflicta) State 373 160 constraint_type: CHECK . OP_LP expr OP_RP OP_LP shift, and go to state 436 State 374 159 constraint_type: UNIQUE . $default reduce using rule 159 (constraint_type) State 375 157 constraint_type: PRIMARY . KEY KEY shift, and go to state 437 State 376 158 constraint_type: NOT . NULL NULL shift, and go to state 438 State 377 162 foreign_clause: REFERENCES . table_name opt_column_name_list_p opt_foreign_key_actions opt_constraint_attribute_spec IDENTIFIER shift, and go to state 27 identifier go to state 31 table_name go to state 439 State 378 151 column_def: identifier type_name opt_column_constraint_list . $default reduce using rule 151 (column_def) State 379 152 opt_column_constraint_list: column_constraint_list . $default reduce using rule 152 (opt_column_constraint_list) State 380 154 column_constraint_list: column_constraint . 155 | column_constraint . column_constraint_list CHECK shift, and go to state 373 UNIQUE shift, and go to state 374 PRIMARY shift, and go to state 375 NOT shift, and go to state 376 REFERENCES shift, and go to state 377 $default reduce using rule 154 (column_constraint_list) column_constraint_list go to state 440 column_constraint go to state 380 constraint_type go to state 381 foreign_clause go to state 382 State 381 156 column_constraint: constraint_type . $default reduce using rule 156 (column_constraint) State 382 161 constraint_type: foreign_clause . $default reduce using rule 161 (constraint_type) State 383 291 character_with_length: character_conflicta OP_LP . int_literal OP_RP INTLITERAL shift, and go to state 122 int_literal go to state 441 State 384 147 alter_action: RENAME opt_column column_name TO column_name . $default reduce using rule 147 (alter_action) State 385 228 logic_expr: expr . AND expr 229 | expr . OR expr 242 case_clause: WHEN expr THEN expr . OR shift, and go to state 184 AND shift, and go to state 185 $default reduce using rule 242 (case_clause) State 386 228 logic_expr: expr . AND expr 229 | expr . OR expr 235 case_expr: CASE expr case_list ELSE expr . END OR shift, and go to state 184 END shift, and go to state 442 AND shift, and go to state 185 State 387 236 case_expr: CASE case_list ELSE expr END . $default reduce using rule 236 (case_expr) State 388 228 logic_expr: expr . AND expr 229 | expr . OR expr 249 extract_expr: EXTRACT OP_LP datetime_field FROM expr . OP_RP OR shift, and go to state 184 AND shift, and go to state 185 OP_RP shift, and go to state 443 State 389 214 cast_expr: CAST OP_LP expr AS type_name . OP_RP OP_RP shift, and go to state 444 State 390 88 opt_join_type: CROSS . $default reduce using rule 88 (opt_join_type) State 391 85 opt_join_type: LEFT . 86 | LEFT . OUTER OUTER shift, and go to state 445 $default reduce using rule 85 (opt_join_type) State 392 87 opt_join_type: INNER . $default reduce using rule 87 (opt_join_type) State 393 84 join_op: NATURAL opt_join_type . JOIN JOIN shift, and go to state 446 State 394 72 table_ref: opt_table_prefix OP_LP select_no_parens . OP_RP opt_on_or_using OP_RP shift, and go to state 447 State 395 73 table_ref: opt_table_prefix OP_LP table_ref . OP_RP opt_on_or_using 80 opt_table_prefix: table_ref . join_op NATURAL shift, and go to state 324 OP_COMMA shift, and go to state 325 JOIN shift, and go to state 326 OP_RP shift, and go to state 448 join_op go to state 327 State 396 76 on_or_using: ON . expr OP_SUB shift, and go to state 112 FALSE shift, and go to state 113 OP_MUL shift, and go to state 114 TRUE shift, and go to state 115 NOT shift, and go to state 116 CASE shift, and go to state 117 EXTRACT shift, and go to state 118 OP_LP shift, and go to state 119 CAST shift, and go to state 120 NULL shift, and go to state 121 INTLITERAL shift, and go to state 122 STRINGLITERAL shift, and go to state 123 FLOATLITERAL shift, and go to state 124 IDENTIFIER shift, and go to state 27 $default reduce using rule 285 (opt_not) expr go to state 449 operand go to state 128 cast_expr go to state 129 scalar_expr go to state 130 unary_expr go to state 131 binary_expr go to state 132 logic_expr go to state 133 in_expr go to state 134 case_expr go to state 135 between_expr go to state 136 exists_expr go to state 137 comp_expr go to state 138 extract_expr go to state 139 array_index go to state 140 literal go to state 141 string_literal go to state 142 bool_literal go to state 143 num_literal go to state 144 int_literal go to state 145 float_literal go to state 146 identifier go to state 96 column_name go to state 147 opt_not go to state 148 State 397 77 on_or_using: USING . OP_LP column_name_list OP_RP OP_LP shift, and go to state 450 State 398 71 table_ref: opt_table_prefix table_name opt_on_or_using . $default reduce using rule 71 (table_ref) State 399 74 opt_on_or_using: on_or_using . $default reduce using rule 74 (opt_on_or_using) State 400 63 opt_group_clause: GROUP BY . expr_list opt_having_clause OP_SUB shift, and go to state 112 FALSE shift, and go to state 113 OP_MUL shift, and go to state 114 TRUE shift, and go to state 115 NOT shift, and go to state 116 CASE shift, and go to state 117 EXTRACT shift, and go to state 118 OP_LP shift, and go to state 119 CAST shift, and go to state 120 NULL shift, and go to state 121 INTLITERAL shift, and go to state 122 STRINGLITERAL shift, and go to state 123 FLOATLITERAL shift, and go to state 124 IDENTIFIER shift, and go to state 27 $default reduce using rule 285 (opt_not) expr_list go to state 451 expr go to state 127 operand go to state 128 cast_expr go to state 129 scalar_expr go to state 130 unary_expr go to state 131 binary_expr go to state 132 logic_expr go to state 133 in_expr go to state 134 case_expr go to state 135 between_expr go to state 136 exists_expr go to state 137 comp_expr go to state 138 extract_expr go to state 139 array_index go to state 140 literal go to state 141 string_literal go to state 142 bool_literal go to state 143 num_literal go to state 144 int_literal go to state 145 float_literal go to state 146 identifier go to state 96 column_name go to state 147 opt_not go to state 148 State 401 34 window_clause: WINDOW . window_def_list IDENTIFIER shift, and go to state 27 window_def_list go to state 452 window_def go to state 453 window_name go to state 454 identifier go to state 455 State 402 25 select_clause: SELECT opt_all_or_distinct select_target opt_from_clause opt_where_clause opt_group_clause opt_window_clause . $default reduce using rule 25 (select_clause) State 403 32 opt_window_clause: window_clause . $default reduce using rule 32 (opt_window_clause) State 404 219 unary_expr: operand . ISNULL 220 | operand . IS NULL 221 | operand . IS NOT NULL 225 binary_expr: operand . binary_op operand 226 | operand . LIKE operand 227 | operand . NOT LIKE operand 237 between_expr: operand BETWEEN operand AND operand . 243 comp_expr: operand . OP_EQUAL operand 244 | operand . OP_NOTEQUAL operand 245 | operand . OP_GREATERTHAN operand 246 | operand . OP_LESSTHAN operand 247 | operand . OP_LESSEQ operand 248 | operand . OP_GREATEREQ operand 256 array_index: operand . OP_LBRACKET int_literal OP_RBRACKET OP_NOTEQUAL shift, and go to state 187 OP_LESSTHAN shift, and go to state 189 OP_GREATEREQ shift, and go to state 190 OP_ADD shift, and go to state 191 OP_SUB shift, and go to state 192 OP_GREATERTHAN shift, and go to state 193 OP_MUL shift, and go to state 194 OP_MOD shift, and go to state 195 IS shift, and go to state 196 NOT shift, and go to state 231 OP_LESSEQ shift, and go to state 198 LIKE shift, and go to state 199 OP_LBRACKET shift, and go to state 200 OP_DIVIDE shift, and go to state 201 ISNULL shift, and go to state 202 OP_EQUAL shift, and go to state 203 $default reduce using rule 237 (between_expr) binary_op go to state 204 State 405 238 between_expr: operand NOT BETWEEN operand AND . operand OP_SUB shift, and go to state 112 FALSE shift, and go to state 113 OP_MUL shift, and go to state 114 TRUE shift, and go to state 115 NOT shift, and go to state 170 CASE shift, and go to state 117 EXTRACT shift, and go to state 118 OP_LP shift, and go to state 119 NULL shift, and go to state 121 INTLITERAL shift, and go to state 122 STRINGLITERAL shift, and go to state 123 FLOATLITERAL shift, and go to state 124 IDENTIFIER shift, and go to state 27 operand go to state 456 scalar_expr go to state 130 unary_expr go to state 131 binary_expr go to state 132 case_expr go to state 135 comp_expr go to state 138 extract_expr go to state 139 array_index go to state 140 literal go to state 141 string_literal go to state 142 bool_literal go to state 143 num_literal go to state 144 int_literal go to state 145 float_literal go to state 146 identifier go to state 96 column_name go to state 147 State 406 230 in_expr: operand opt_not IN OP_LP select_no_parens . OP_RP OP_RP shift, and go to state 457 State 407 231 in_expr: operand opt_not IN OP_LP expr_list . OP_RP OP_RP shift, and go to state 458 State 408 239 exists_expr: opt_not EXISTS OP_LP select_no_parens OP_RP . $default reduce using rule 239 (exists_expr) State 409 199 set_clause: OP_LP column_name_list OP_RP OP_EQUAL . expr OP_SUB shift, and go to state 112 FALSE shift, and go to state 113 OP_MUL shift, and go to state 114 TRUE shift, and go to state 115 NOT shift, and go to state 116 CASE shift, and go to state 117 EXTRACT shift, and go to state 118 OP_LP shift, and go to state 119 CAST shift, and go to state 120 NULL shift, and go to state 121 INTLITERAL shift, and go to state 122 STRINGLITERAL shift, and go to state 123 FLOATLITERAL shift, and go to state 124 IDENTIFIER shift, and go to state 27 $default reduce using rule 285 (opt_not) expr go to state 459 operand go to state 128 cast_expr go to state 129 scalar_expr go to state 130 unary_expr go to state 131 binary_expr go to state 132 logic_expr go to state 133 in_expr go to state 134 case_expr go to state 135 between_expr go to state 136 exists_expr go to state 137 comp_expr go to state 138 extract_expr go to state 139 array_index go to state 140 literal go to state 141 string_literal go to state 142 bool_literal go to state 143 num_literal go to state 144 int_literal go to state 145 float_literal go to state 146 identifier go to state 96 column_name go to state 147 opt_not go to state 148 State 410 138 opt_conflict_expr: OP_LP . indexed_column_list OP_RP where_clause OP_SUB shift, and go to state 112 FALSE shift, and go to state 113 OP_MUL shift, and go to state 114 TRUE shift, and go to state 115 NOT shift, and go to state 116 CASE shift, and go to state 117 EXTRACT shift, and go to state 118 OP_LP shift, and go to state 119 CAST shift, and go to state 120 NULL shift, and go to state 121 INTLITERAL shift, and go to state 122 STRINGLITERAL shift, and go to state 123 FLOATLITERAL shift, and go to state 124 IDENTIFIER shift, and go to state 27 $default reduce using rule 285 (opt_not) indexed_column_list go to state 460 indexed_column go to state 432 expr go to state 433 operand go to state 128 cast_expr go to state 129 scalar_expr go to state 130 unary_expr go to state 131 binary_expr go to state 132 logic_expr go to state 133 in_expr go to state 134 case_expr go to state 135 between_expr go to state 136 exists_expr go to state 137 comp_expr go to state 138 extract_expr go to state 139 array_index go to state 140 literal go to state 141 string_literal go to state 142 bool_literal go to state 143 num_literal go to state 144 int_literal go to state 145 float_literal go to state 146 identifier go to state 96 column_name go to state 147 opt_not go to state 148 State 411 135 opt_on_conflict: ON CONFLICT opt_conflict_expr . DO NOTHING 136 | ON CONFLICT opt_conflict_expr . DO UPDATE set_clause_list where_clause DO shift, and go to state 461 State 412 134 values_list: OP_LP expr_list . OP_RP OP_RP shift, and go to state 462 State 413 133 super_values_list: values_list OP_COMMA . super_values_list OP_LP shift, and go to state 345 super_values_list go to state 463 values_list go to state 347 State 414 100 opt_order_nulls: NULLS LAST . $default reduce using rule 100 (opt_order_nulls) State 415 99 opt_order_nulls: NULLS FIRST . $default reduce using rule 99 (opt_order_nulls) State 416 124 create_view_stmt: CREATE OR REPLACE opt_temp RECURSIVE VIEW view_name opt_column_name_list_p AS . select_stmt opt_check_option WITH shift, and go to state 1 OP_LP shift, and go to state 4 $default reduce using rule 110 (opt_with_clause) select_stmt go to state 464 select_with_parens go to state 14 select_no_parens go to state 15 opt_with_clause go to state 40 State 417 123 create_view_stmt: CREATE OR REPLACE opt_temp VIEW view_name opt_column_name_list_p AS select_stmt . opt_check_option WITH shift, and go to state 357 $default reduce using rule 193 (opt_check_option) opt_check_option go to state 465 State 418 122 create_view_stmt: CREATE opt_temp RECURSIVE VIEW view_name opt_column_name_list_p AS select_stmt opt_check_option . $default reduce using rule 122 (create_view_stmt) State 419 190 opt_check_option: WITH CHECK . OPTION OPTION shift, and go to state 466 State 420 192 opt_check_option: WITH LOCAL . CHECK OPTION CHECK shift, and go to state 467 State 421 191 opt_check_option: WITH CASCADED . CHECK OPTION CHECK shift, and go to state 468 State 422 286 name: identifier . $default reduce using rule 286 (name) State 423 181 constraint_name: CONSTRAINT name . $default reduce using rule 181 (constraint_name) State 424 319 table_constraint: constraint_name CHECK . OP_LP expr OP_RP OP_LP shift, and go to state 469 State 425 318 table_constraint: constraint_name UNIQUE . OP_LP indexed_column_list OP_RP OP_LP shift, and go to state 470 State 426 317 table_constraint: constraint_name PRIMARY . KEY OP_LP indexed_column_list OP_RP KEY shift, and go to state 471 State 427 320 table_constraint: constraint_name FOREIGN . KEY OP_LP column_name_list OP_RP foreign_clause KEY shift, and go to state 472 State 428 119 create_table_stmt: CREATE opt_temp TABLE opt_if_not_exist table_name OP_LP column_def_list opt_table_constraint_list OP_RP . $default reduce using rule 119 (create_table_stmt) State 429 316 table_constraint_list: table_constraint OP_COMMA . table_constraint_list CONSTRAINT shift, and go to state 359 constraint_name go to state 360 table_constraint_list go to state 473 table_constraint go to state 363 State 430 150 column_def_list: column_def OP_COMMA column_def_list . $default reduce using rule 150 (column_def_list) State 431 120 create_index_stmt: CREATE opt_unique INDEX opt_if_not_exist table_name ON table_name OP_LP indexed_column_list . OP_RP opt_where_clause OP_RP shift, and go to state 474 State 432 140 indexed_column_list: indexed_column . 141 | indexed_column . OP_COMMA indexed_column_list OP_COMMA shift, and go to state 475 $default reduce using rule 140 (indexed_column_list) State 433 142 indexed_column: expr . opt_order_behavior 228 logic_expr: expr . AND expr 229 | expr . OR expr OR shift, and go to state 184 AND shift, and go to state 185 ASC shift, and go to state 281 DESC shift, and go to state 282 $default reduce using rule 107 (opt_order_behavior) opt_order_behavior go to state 476 State 434 298 character_conflicta: NATIONAL CHAR opt_varying . $default reduce using rule 298 (character_conflicta) State 435 297 character_conflicta: NATIONAL CHARACTER opt_varying . $default reduce using rule 297 (character_conflicta) State 436 160 constraint_type: CHECK OP_LP . expr OP_RP OP_SUB shift, and go to state 112 FALSE shift, and go to state 113 OP_MUL shift, and go to state 114 TRUE shift, and go to state 115 NOT shift, and go to state 116 CASE shift, and go to state 117 EXTRACT shift, and go to state 118 OP_LP shift, and go to state 119 CAST shift, and go to state 120 NULL shift, and go to state 121 INTLITERAL shift, and go to state 122 STRINGLITERAL shift, and go to state 123 FLOATLITERAL shift, and go to state 124 IDENTIFIER shift, and go to state 27 $default reduce using rule 285 (opt_not) expr go to state 477 operand go to state 128 cast_expr go to state 129 scalar_expr go to state 130 unary_expr go to state 131 binary_expr go to state 132 logic_expr go to state 133 in_expr go to state 134 case_expr go to state 135 between_expr go to state 136 exists_expr go to state 137 comp_expr go to state 138 extract_expr go to state 139 array_index go to state 140 literal go to state 141 string_literal go to state 142 bool_literal go to state 143 num_literal go to state 144 int_literal go to state 145 float_literal go to state 146 identifier go to state 96 column_name go to state 147 opt_not go to state 148 State 437 157 constraint_type: PRIMARY KEY . $default reduce using rule 157 (constraint_type) State 438 158 constraint_type: NOT NULL . $default reduce using rule 158 (constraint_type) State 439 162 foreign_clause: REFERENCES table_name . opt_column_name_list_p opt_foreign_key_actions opt_constraint_attribute_spec OP_LP shift, and go to state 61 $default reduce using rule 195 (opt_column_name_list_p) opt_column_name_list_p go to state 478 State 440 155 column_constraint_list: column_constraint column_constraint_list . $default reduce using rule 155 (column_constraint_list) State 441 291 character_with_length: character_conflicta OP_LP int_literal . OP_RP OP_RP shift, and go to state 479 State 442 235 case_expr: CASE expr case_list ELSE expr END . $default reduce using rule 235 (case_expr) State 443 249 extract_expr: EXTRACT OP_LP datetime_field FROM expr OP_RP . $default reduce using rule 249 (extract_expr) State 444 214 cast_expr: CAST OP_LP expr AS type_name OP_RP . $default reduce using rule 214 (cast_expr) State 445 86 opt_join_type: LEFT OUTER . $default reduce using rule 86 (opt_join_type) State 446 84 join_op: NATURAL opt_join_type JOIN . $default reduce using rule 84 (join_op) State 447 72 table_ref: opt_table_prefix OP_LP select_no_parens OP_RP . opt_on_or_using ON shift, and go to state 396 USING shift, and go to state 397 $default reduce using rule 75 (opt_on_or_using) opt_on_or_using go to state 480 on_or_using go to state 399 State 448 73 table_ref: opt_table_prefix OP_LP table_ref OP_RP . opt_on_or_using ON shift, and go to state 396 USING shift, and go to state 397 $default reduce using rule 75 (opt_on_or_using) opt_on_or_using go to state 481 on_or_using go to state 399 State 449 76 on_or_using: ON expr . 228 logic_expr: expr . AND expr 229 | expr . OR expr OR shift, and go to state 184 AND shift, and go to state 185 $default reduce using rule 76 (on_or_using) State 450 77 on_or_using: USING OP_LP . column_name_list OP_RP IDENTIFIER shift, and go to state 27 column_name_list go to state 482 identifier go to state 96 column_name go to state 97 State 451 63 opt_group_clause: GROUP BY expr_list . opt_having_clause HAVING shift, and go to state 483 $default reduce using rule 66 (opt_having_clause) opt_having_clause go to state 484 State 452 34 window_clause: WINDOW window_def_list . $default reduce using rule 34 (window_clause) State 453 35 window_def_list: window_def . 36 | window_def . OP_COMMA window_def_list OP_COMMA shift, and go to state 485 $default reduce using rule 35 (window_def_list) State 454 37 window_def: window_name . AS OP_LP window OP_RP AS shift, and go to state 486 State 455 38 window_name: identifier . $default reduce using rule 38 (window_name) State 456 219 unary_expr: operand . ISNULL 220 | operand . IS NULL 221 | operand . IS NOT NULL 225 binary_expr: operand . binary_op operand 226 | operand . LIKE operand 227 | operand . NOT LIKE operand 238 between_expr: operand NOT BETWEEN operand AND operand . 243 comp_expr: operand . OP_EQUAL operand 244 | operand . OP_NOTEQUAL operand 245 | operand . OP_GREATERTHAN operand 246 | operand . OP_LESSTHAN operand 247 | operand . OP_LESSEQ operand 248 | operand . OP_GREATEREQ operand 256 array_index: operand . OP_LBRACKET int_literal OP_RBRACKET OP_NOTEQUAL shift, and go to state 187 OP_LESSTHAN shift, and go to state 189 OP_GREATEREQ shift, and go to state 190 OP_ADD shift, and go to state 191 OP_SUB shift, and go to state 192 OP_GREATERTHAN shift, and go to state 193 OP_MUL shift, and go to state 194 OP_MOD shift, and go to state 195 IS shift, and go to state 196 NOT shift, and go to state 231 OP_LESSEQ shift, and go to state 198 LIKE shift, and go to state 199 OP_LBRACKET shift, and go to state 200 OP_DIVIDE shift, and go to state 201 ISNULL shift, and go to state 202 OP_EQUAL shift, and go to state 203 $default reduce using rule 238 (between_expr) binary_op go to state 204 State 457 230 in_expr: operand opt_not IN OP_LP select_no_parens OP_RP . $default reduce using rule 230 (in_expr) State 458 231 in_expr: operand opt_not IN OP_LP expr_list OP_RP . $default reduce using rule 231 (in_expr) State 459 199 set_clause: OP_LP column_name_list OP_RP OP_EQUAL expr . 228 logic_expr: expr . AND expr 229 | expr . OR expr OR shift, and go to state 184 AND shift, and go to state 185 $default reduce using rule 199 (set_clause) State 460 138 opt_conflict_expr: OP_LP indexed_column_list . OP_RP where_clause OP_RP shift, and go to state 487 State 461 135 opt_on_conflict: ON CONFLICT opt_conflict_expr DO . NOTHING 136 | ON CONFLICT opt_conflict_expr DO . UPDATE set_clause_list where_clause UPDATE shift, and go to state 488 NOTHING shift, and go to state 489 State 462 134 values_list: OP_LP expr_list OP_RP . $default reduce using rule 134 (values_list) State 463 133 super_values_list: values_list OP_COMMA super_values_list . $default reduce using rule 133 (super_values_list) State 464 124 create_view_stmt: CREATE OR REPLACE opt_temp RECURSIVE VIEW view_name opt_column_name_list_p AS select_stmt . opt_check_option WITH shift, and go to state 357 $default reduce using rule 193 (opt_check_option) opt_check_option go to state 490 State 465 123 create_view_stmt: CREATE OR REPLACE opt_temp VIEW view_name opt_column_name_list_p AS select_stmt opt_check_option . $default reduce using rule 123 (create_view_stmt) State 466 190 opt_check_option: WITH CHECK OPTION . $default reduce using rule 190 (opt_check_option) State 467 192 opt_check_option: WITH LOCAL CHECK . OPTION OPTION shift, and go to state 491 State 468 191 opt_check_option: WITH CASCADED CHECK . OPTION OPTION shift, and go to state 492 State 469 319 table_constraint: constraint_name CHECK OP_LP . expr OP_RP OP_SUB shift, and go to state 112 FALSE shift, and go to state 113 OP_MUL shift, and go to state 114 TRUE shift, and go to state 115 NOT shift, and go to state 116 CASE shift, and go to state 117 EXTRACT shift, and go to state 118 OP_LP shift, and go to state 119 CAST shift, and go to state 120 NULL shift, and go to state 121 INTLITERAL shift, and go to state 122 STRINGLITERAL shift, and go to state 123 FLOATLITERAL shift, and go to state 124 IDENTIFIER shift, and go to state 27 $default reduce using rule 285 (opt_not) expr go to state 493 operand go to state 128 cast_expr go to state 129 scalar_expr go to state 130 unary_expr go to state 131 binary_expr go to state 132 logic_expr go to state 133 in_expr go to state 134 case_expr go to state 135 between_expr go to state 136 exists_expr go to state 137 comp_expr go to state 138 extract_expr go to state 139 array_index go to state 140 literal go to state 141 string_literal go to state 142 bool_literal go to state 143 num_literal go to state 144 int_literal go to state 145 float_literal go to state 146 identifier go to state 96 column_name go to state 147 opt_not go to state 148 State 470 318 table_constraint: constraint_name UNIQUE OP_LP . indexed_column_list OP_RP OP_SUB shift, and go to state 112 FALSE shift, and go to state 113 OP_MUL shift, and go to state 114 TRUE shift, and go to state 115 NOT shift, and go to state 116 CASE shift, and go to state 117 EXTRACT shift, and go to state 118 OP_LP shift, and go to state 119 CAST shift, and go to state 120 NULL shift, and go to state 121 INTLITERAL shift, and go to state 122 STRINGLITERAL shift, and go to state 123 FLOATLITERAL shift, and go to state 124 IDENTIFIER shift, and go to state 27 $default reduce using rule 285 (opt_not) indexed_column_list go to state 494 indexed_column go to state 432 expr go to state 433 operand go to state 128 cast_expr go to state 129 scalar_expr go to state 130 unary_expr go to state 131 binary_expr go to state 132 logic_expr go to state 133 in_expr go to state 134 case_expr go to state 135 between_expr go to state 136 exists_expr go to state 137 comp_expr go to state 138 extract_expr go to state 139 array_index go to state 140 literal go to state 141 string_literal go to state 142 bool_literal go to state 143 num_literal go to state 144 int_literal go to state 145 float_literal go to state 146 identifier go to state 96 column_name go to state 147 opt_not go to state 148 State 471 317 table_constraint: constraint_name PRIMARY KEY . OP_LP indexed_column_list OP_RP OP_LP shift, and go to state 495 State 472 320 table_constraint: constraint_name FOREIGN KEY . OP_LP column_name_list OP_RP foreign_clause OP_LP shift, and go to state 496 State 473 316 table_constraint_list: table_constraint OP_COMMA table_constraint_list . $default reduce using rule 316 (table_constraint_list) State 474 120 create_index_stmt: CREATE opt_unique INDEX opt_if_not_exist table_name ON table_name OP_LP indexed_column_list OP_RP . opt_where_clause WHERE shift, and go to state 249 $default reduce using rule 68 (opt_where_clause) opt_where_clause go to state 497 where_clause go to state 251 State 475 141 indexed_column_list: indexed_column OP_COMMA . indexed_column_list OP_SUB shift, and go to state 112 FALSE shift, and go to state 113 OP_MUL shift, and go to state 114 TRUE shift, and go to state 115 NOT shift, and go to state 116 CASE shift, and go to state 117 EXTRACT shift, and go to state 118 OP_LP shift, and go to state 119 CAST shift, and go to state 120 NULL shift, and go to state 121 INTLITERAL shift, and go to state 122 STRINGLITERAL shift, and go to state 123 FLOATLITERAL shift, and go to state 124 IDENTIFIER shift, and go to state 27 $default reduce using rule 285 (opt_not) indexed_column_list go to state 498 indexed_column go to state 432 expr go to state 433 operand go to state 128 cast_expr go to state 129 scalar_expr go to state 130 unary_expr go to state 131 binary_expr go to state 132 logic_expr go to state 133 in_expr go to state 134 case_expr go to state 135 between_expr go to state 136 exists_expr go to state 137 comp_expr go to state 138 extract_expr go to state 139 array_index go to state 140 literal go to state 141 string_literal go to state 142 bool_literal go to state 143 num_literal go to state 144 int_literal go to state 145 float_literal go to state 146 identifier go to state 96 column_name go to state 147 opt_not go to state 148 State 476 142 indexed_column: expr opt_order_behavior . $default reduce using rule 142 (indexed_column) State 477 160 constraint_type: CHECK OP_LP expr . OP_RP 228 logic_expr: expr . AND expr 229 | expr . OR expr OR shift, and go to state 184 AND shift, and go to state 185 OP_RP shift, and go to state 499 State 478 162 foreign_clause: REFERENCES table_name opt_column_name_list_p . opt_foreign_key_actions opt_constraint_attribute_spec ON shift, and go to state 500 MATCH shift, and go to state 501 $default reduce using rule 164 (opt_foreign_key_actions) opt_foreign_key_actions go to state 502 foreign_key_actions go to state 503 State 479 291 character_with_length: character_conflicta OP_LP int_literal OP_RP . $default reduce using rule 291 (character_with_length) State 480 72 table_ref: opt_table_prefix OP_LP select_no_parens OP_RP opt_on_or_using . $default reduce using rule 72 (table_ref) State 481 73 table_ref: opt_table_prefix OP_LP table_ref OP_RP opt_on_or_using . $default reduce using rule 73 (table_ref) State 482 77 on_or_using: USING OP_LP column_name_list . OP_RP OP_RP shift, and go to state 504 State 483 65 opt_having_clause: HAVING . expr OP_SUB shift, and go to state 112 FALSE shift, and go to state 113 OP_MUL shift, and go to state 114 TRUE shift, and go to state 115 NOT shift, and go to state 116 CASE shift, and go to state 117 EXTRACT shift, and go to state 118 OP_LP shift, and go to state 119 CAST shift, and go to state 120 NULL shift, and go to state 121 INTLITERAL shift, and go to state 122 STRINGLITERAL shift, and go to state 123 FLOATLITERAL shift, and go to state 124 IDENTIFIER shift, and go to state 27 $default reduce using rule 285 (opt_not) expr go to state 505 operand go to state 128 cast_expr go to state 129 scalar_expr go to state 130 unary_expr go to state 131 binary_expr go to state 132 logic_expr go to state 133 in_expr go to state 134 case_expr go to state 135 between_expr go to state 136 exists_expr go to state 137 comp_expr go to state 138 extract_expr go to state 139 array_index go to state 140 literal go to state 141 string_literal go to state 142 bool_literal go to state 143 num_literal go to state 144 int_literal go to state 145 float_literal go to state 146 identifier go to state 96 column_name go to state 147 opt_not go to state 148 State 484 63 opt_group_clause: GROUP BY expr_list opt_having_clause . $default reduce using rule 63 (opt_group_clause) State 485 36 window_def_list: window_def OP_COMMA . window_def_list IDENTIFIER shift, and go to state 27 window_def_list go to state 506 window_def go to state 453 window_name go to state 454 identifier go to state 455 State 486 37 window_def: window_name AS . OP_LP window OP_RP OP_LP shift, and go to state 507 State 487 138 opt_conflict_expr: OP_LP indexed_column_list OP_RP . where_clause WHERE shift, and go to state 249 where_clause go to state 508 State 488 136 opt_on_conflict: ON CONFLICT opt_conflict_expr DO UPDATE . set_clause_list where_clause OP_LP shift, and go to state 207 IDENTIFIER shift, and go to state 27 set_clause_list go to state 509 set_clause go to state 209 identifier go to state 96 column_name go to state 210 State 489 135 opt_on_conflict: ON CONFLICT opt_conflict_expr DO NOTHING . $default reduce using rule 135 (opt_on_conflict) State 490 124 create_view_stmt: CREATE OR REPLACE opt_temp RECURSIVE VIEW view_name opt_column_name_list_p AS select_stmt opt_check_option . $default reduce using rule 124 (create_view_stmt) State 491 192 opt_check_option: WITH LOCAL CHECK OPTION . $default reduce using rule 192 (opt_check_option) State 492 191 opt_check_option: WITH CASCADED CHECK OPTION . $default reduce using rule 191 (opt_check_option) State 493 228 logic_expr: expr . AND expr 229 | expr . OR expr 319 table_constraint: constraint_name CHECK OP_LP expr . OP_RP OR shift, and go to state 184 AND shift, and go to state 185 OP_RP shift, and go to state 510 State 494 318 table_constraint: constraint_name UNIQUE OP_LP indexed_column_list . OP_RP OP_RP shift, and go to state 511 State 495 317 table_constraint: constraint_name PRIMARY KEY OP_LP . indexed_column_list OP_RP OP_SUB shift, and go to state 112 FALSE shift, and go to state 113 OP_MUL shift, and go to state 114 TRUE shift, and go to state 115 NOT shift, and go to state 116 CASE shift, and go to state 117 EXTRACT shift, and go to state 118 OP_LP shift, and go to state 119 CAST shift, and go to state 120 NULL shift, and go to state 121 INTLITERAL shift, and go to state 122 STRINGLITERAL shift, and go to state 123 FLOATLITERAL shift, and go to state 124 IDENTIFIER shift, and go to state 27 $default reduce using rule 285 (opt_not) indexed_column_list go to state 512 indexed_column go to state 432 expr go to state 433 operand go to state 128 cast_expr go to state 129 scalar_expr go to state 130 unary_expr go to state 131 binary_expr go to state 132 logic_expr go to state 133 in_expr go to state 134 case_expr go to state 135 between_expr go to state 136 exists_expr go to state 137 comp_expr go to state 138 extract_expr go to state 139 array_index go to state 140 literal go to state 141 string_literal go to state 142 bool_literal go to state 143 num_literal go to state 144 int_literal go to state 145 float_literal go to state 146 identifier go to state 96 column_name go to state 147 opt_not go to state 148 State 496 320 table_constraint: constraint_name FOREIGN KEY OP_LP . column_name_list OP_RP foreign_clause IDENTIFIER shift, and go to state 27 column_name_list go to state 513 identifier go to state 96 column_name go to state 97 State 497 120 create_index_stmt: CREATE opt_unique INDEX opt_if_not_exist table_name ON table_name OP_LP indexed_column_list OP_RP opt_where_clause . $default reduce using rule 120 (create_index_stmt) State 498 141 indexed_column_list: indexed_column OP_COMMA indexed_column_list . $default reduce using rule 141 (indexed_column_list) State 499 160 constraint_type: CHECK OP_LP expr OP_RP . $default reduce using rule 160 (constraint_type) State 500 168 foreign_key_actions: ON . UPDATE key_actions 169 | ON . DELETE key_actions DELETE shift, and go to state 514 UPDATE shift, and go to state 515 State 501 165 foreign_key_actions: MATCH . FULL 166 | MATCH . PARTIAL 167 | MATCH . SIMPLE SIMPLE shift, and go to state 516 FULL shift, and go to state 517 PARTIAL shift, and go to state 518 State 502 162 foreign_clause: REFERENCES table_name opt_column_name_list_p opt_foreign_key_actions . opt_constraint_attribute_spec NOT shift, and go to state 519 DEFFERRABLE shift, and go to state 520 NOT [reduce using rule 177 (opt_constraint_attribute_spec)] $default reduce using rule 177 (opt_constraint_attribute_spec) opt_constraint_attribute_spec go to state 521 State 503 163 opt_foreign_key_actions: foreign_key_actions . $default reduce using rule 163 (opt_foreign_key_actions) State 504 77 on_or_using: USING OP_LP column_name_list OP_RP . $default reduce using rule 77 (on_or_using) State 505 65 opt_having_clause: HAVING expr . 228 logic_expr: expr . AND expr 229 | expr . OR expr OR shift, and go to state 184 AND shift, and go to state 185 $default reduce using rule 65 (opt_having_clause) State 506 36 window_def_list: window_def OP_COMMA window_def_list . $default reduce using rule 36 (window_def_list) State 507 37 window_def: window_name AS OP_LP . window OP_RP IDENTIFIER shift, and go to state 27 $default reduce using rule 62 (opt_exist_window_name) window go to state 522 opt_exist_window_name go to state 523 identifier go to state 524 State 508 138 opt_conflict_expr: OP_LP indexed_column_list OP_RP where_clause . $default reduce using rule 138 (opt_conflict_expr) State 509 136 opt_on_conflict: ON CONFLICT opt_conflict_expr DO UPDATE set_clause_list . where_clause WHERE shift, and go to state 249 where_clause go to state 525 State 510 319 table_constraint: constraint_name CHECK OP_LP expr OP_RP . $default reduce using rule 319 (table_constraint) State 511 318 table_constraint: constraint_name UNIQUE OP_LP indexed_column_list OP_RP . $default reduce using rule 318 (table_constraint) State 512 317 table_constraint: constraint_name PRIMARY KEY OP_LP indexed_column_list . OP_RP OP_RP shift, and go to state 526 State 513 320 table_constraint: constraint_name FOREIGN KEY OP_LP column_name_list . OP_RP foreign_clause OP_RP shift, and go to state 527 State 514 169 foreign_key_actions: ON DELETE . key_actions RESTRICT shift, and go to state 528 SET shift, and go to state 529 NO shift, and go to state 530 CASCADE shift, and go to state 531 key_actions go to state 532 State 515 168 foreign_key_actions: ON UPDATE . key_actions RESTRICT shift, and go to state 528 SET shift, and go to state 529 NO shift, and go to state 530 CASCADE shift, and go to state 531 key_actions go to state 533 State 516 167 foreign_key_actions: MATCH SIMPLE . $default reduce using rule 167 (foreign_key_actions) State 517 165 foreign_key_actions: MATCH FULL . $default reduce using rule 165 (foreign_key_actions) State 518 166 foreign_key_actions: MATCH PARTIAL . $default reduce using rule 166 (foreign_key_actions) State 519 176 opt_constraint_attribute_spec: NOT . DEFFERRABLE opt_initial_time DEFFERRABLE shift, and go to state 534 State 520 175 opt_constraint_attribute_spec: DEFFERRABLE . opt_initial_time INITIALLY shift, and go to state 535 $default reduce using rule 180 (opt_initial_time) opt_initial_time go to state 536 State 521 162 foreign_clause: REFERENCES table_name opt_column_name_list_p opt_foreign_key_actions opt_constraint_attribute_spec . $default reduce using rule 162 (foreign_clause) State 522 37 window_def: window_name AS OP_LP window . OP_RP OP_RP shift, and go to state 537 State 523 39 window: opt_exist_window_name . opt_partition opt_order_clause opt_frame_clause PARTITION shift, and go to state 538 $default reduce using rule 41 (opt_partition) opt_partition go to state 539 State 524 61 opt_exist_window_name: identifier . $default reduce using rule 61 (opt_exist_window_name) State 525 136 opt_on_conflict: ON CONFLICT opt_conflict_expr DO UPDATE set_clause_list where_clause . $default reduce using rule 136 (opt_on_conflict) State 526 317 table_constraint: constraint_name PRIMARY KEY OP_LP indexed_column_list OP_RP . $default reduce using rule 317 (table_constraint) State 527 320 table_constraint: constraint_name FOREIGN KEY OP_LP column_name_list OP_RP . foreign_clause REFERENCES shift, and go to state 377 foreign_clause go to state 540 State 528 173 key_actions: RESTRICT . $default reduce using rule 173 (key_actions) State 529 170 key_actions: SET . NULL 171 | SET . DEFAULT DEFAULT shift, and go to state 541 NULL shift, and go to state 542 State 530 174 key_actions: NO . ACTION ACTION shift, and go to state 543 State 531 172 key_actions: CASCADE . $default reduce using rule 172 (key_actions) State 532 169 foreign_key_actions: ON DELETE key_actions . $default reduce using rule 169 (foreign_key_actions) State 533 168 foreign_key_actions: ON UPDATE key_actions . $default reduce using rule 168 (foreign_key_actions) State 534 176 opt_constraint_attribute_spec: NOT DEFFERRABLE . opt_initial_time INITIALLY shift, and go to state 535 $default reduce using rule 180 (opt_initial_time) opt_initial_time go to state 544 State 535 178 opt_initial_time: INITIALLY . DEFERRED 179 | INITIALLY . IMMEDIATE DEFERRED shift, and go to state 545 IMMEDIATE shift, and go to state 546 State 536 175 opt_constraint_attribute_spec: DEFFERRABLE opt_initial_time . $default reduce using rule 175 (opt_constraint_attribute_spec) State 537 37 window_def: window_name AS OP_LP window OP_RP . $default reduce using rule 37 (window_def) State 538 40 opt_partition: PARTITION . BY expr_list BY shift, and go to state 547 State 539 39 window: opt_exist_window_name opt_partition . opt_order_clause opt_frame_clause ORDER shift, and go to state 87 $default reduce using rule 98 (opt_order_clause) opt_order_clause go to state 548 State 540 320 table_constraint: constraint_name FOREIGN KEY OP_LP column_name_list OP_RP foreign_clause . $default reduce using rule 320 (table_constraint) State 541 171 key_actions: SET DEFAULT . $default reduce using rule 171 (key_actions) State 542 170 key_actions: SET NULL . $default reduce using rule 170 (key_actions) State 543 174 key_actions: NO ACTION . $default reduce using rule 174 (key_actions) State 544 176 opt_constraint_attribute_spec: NOT DEFFERRABLE opt_initial_time . $default reduce using rule 176 (opt_constraint_attribute_spec) State 545 178 opt_initial_time: INITIALLY DEFERRED . $default reduce using rule 178 (opt_initial_time) State 546 179 opt_initial_time: INITIALLY IMMEDIATE . $default reduce using rule 179 (opt_initial_time) State 547 40 opt_partition: PARTITION BY . expr_list OP_SUB shift, and go to state 112 FALSE shift, and go to state 113 OP_MUL shift, and go to state 114 TRUE shift, and go to state 115 NOT shift, and go to state 116 CASE shift, and go to state 117 EXTRACT shift, and go to state 118 OP_LP shift, and go to state 119 CAST shift, and go to state 120 NULL shift, and go to state 121 INTLITERAL shift, and go to state 122 STRINGLITERAL shift, and go to state 123 FLOATLITERAL shift, and go to state 124 IDENTIFIER shift, and go to state 27 $default reduce using rule 285 (opt_not) expr_list go to state 549 expr go to state 127 operand go to state 128 cast_expr go to state 129 scalar_expr go to state 130 unary_expr go to state 131 binary_expr go to state 132 logic_expr go to state 133 in_expr go to state 134 case_expr go to state 135 between_expr go to state 136 exists_expr go to state 137 comp_expr go to state 138 extract_expr go to state 139 array_index go to state 140 literal go to state 141 string_literal go to state 142 bool_literal go to state 143 num_literal go to state 144 int_literal go to state 145 float_literal go to state 146 identifier go to state 96 column_name go to state 147 opt_not go to state 148 State 548 39 window: opt_exist_window_name opt_partition opt_order_clause . opt_frame_clause RANGE shift, and go to state 550 ROWS shift, and go to state 551 GROUPS shift, and go to state 552 $default reduce using rule 44 (opt_frame_clause) opt_frame_clause go to state 553 range_or_rows go to state 554 State 549 40 opt_partition: PARTITION BY expr_list . $default reduce using rule 40 (opt_partition) State 550 45 range_or_rows: RANGE . $default reduce using rule 45 (range_or_rows) State 551 46 range_or_rows: ROWS . $default reduce using rule 46 (range_or_rows) State 552 47 range_or_rows: GROUPS . $default reduce using rule 47 (range_or_rows) State 553 39 window: opt_exist_window_name opt_partition opt_order_clause opt_frame_clause . $default reduce using rule 39 (window) State 554 42 opt_frame_clause: range_or_rows . frame_bound_start opt_frame_exclude 43 | range_or_rows . BETWEEN frame_bound_start AND frame_bound_end opt_frame_exclude BETWEEN shift, and go to state 555 UNBOUNDED shift, and go to state 556 CURRENT shift, and go to state 557 OP_SUB shift, and go to state 112 FALSE shift, and go to state 113 OP_MUL shift, and go to state 114 TRUE shift, and go to state 115 NOT shift, and go to state 116 CASE shift, and go to state 117 EXTRACT shift, and go to state 118 OP_LP shift, and go to state 119 CAST shift, and go to state 120 NULL shift, and go to state 121 INTLITERAL shift, and go to state 122 STRINGLITERAL shift, and go to state 123 FLOATLITERAL shift, and go to state 124 IDENTIFIER shift, and go to state 27 $default reduce using rule 285 (opt_not) frame_bound_start go to state 558 frame_bound go to state 559 expr go to state 560 operand go to state 128 cast_expr go to state 129 scalar_expr go to state 130 unary_expr go to state 131 binary_expr go to state 132 logic_expr go to state 133 in_expr go to state 134 case_expr go to state 135 between_expr go to state 136 exists_expr go to state 137 comp_expr go to state 138 extract_expr go to state 139 array_index go to state 140 literal go to state 141 string_literal go to state 142 bool_literal go to state 143 num_literal go to state 144 int_literal go to state 145 float_literal go to state 146 identifier go to state 96 column_name go to state 147 opt_not go to state 148 State 555 43 opt_frame_clause: range_or_rows BETWEEN . frame_bound_start AND frame_bound_end opt_frame_exclude UNBOUNDED shift, and go to state 556 CURRENT shift, and go to state 557 OP_SUB shift, and go to state 112 FALSE shift, and go to state 113 OP_MUL shift, and go to state 114 TRUE shift, and go to state 115 NOT shift, and go to state 116 CASE shift, and go to state 117 EXTRACT shift, and go to state 118 OP_LP shift, and go to state 119 CAST shift, and go to state 120 NULL shift, and go to state 121 INTLITERAL shift, and go to state 122 STRINGLITERAL shift, and go to state 123 FLOATLITERAL shift, and go to state 124 IDENTIFIER shift, and go to state 27 $default reduce using rule 285 (opt_not) frame_bound_start go to state 561 frame_bound go to state 559 expr go to state 560 operand go to state 128 cast_expr go to state 129 scalar_expr go to state 130 unary_expr go to state 131 binary_expr go to state 132 logic_expr go to state 133 in_expr go to state 134 case_expr go to state 135 between_expr go to state 136 exists_expr go to state 137 comp_expr go to state 138 extract_expr go to state 139 array_index go to state 140 literal go to state 141 string_literal go to state 142 bool_literal go to state 143 num_literal go to state 144 int_literal go to state 145 float_literal go to state 146 identifier go to state 96 column_name go to state 147 opt_not go to state 148 State 556 49 frame_bound_start: UNBOUNDED . PRECEDING PRECEDING shift, and go to state 562 State 557 54 frame_bound: CURRENT . ROW ROW shift, and go to state 563 State 558 42 opt_frame_clause: range_or_rows frame_bound_start . opt_frame_exclude EXCLUDE shift, and go to state 564 $default reduce using rule 56 (opt_frame_exclude) opt_frame_exclude go to state 565 State 559 48 frame_bound_start: frame_bound . $default reduce using rule 48 (frame_bound_start) State 560 52 frame_bound: expr . PRECEDING 53 | expr . FOLLOWING 228 logic_expr: expr . AND expr 229 | expr . OR expr PRECEDING shift, and go to state 566 OR shift, and go to state 184 FOLLOWING shift, and go to state 567 AND shift, and go to state 185 State 561 43 opt_frame_clause: range_or_rows BETWEEN frame_bound_start . AND frame_bound_end opt_frame_exclude AND shift, and go to state 568 State 562 49 frame_bound_start: UNBOUNDED PRECEDING . $default reduce using rule 49 (frame_bound_start) State 563 54 frame_bound: CURRENT ROW . $default reduce using rule 54 (frame_bound) State 564 55 opt_frame_exclude: EXCLUDE . frame_exclude CURRENT shift, and go to state 569 TIES shift, and go to state 570 GROUP shift, and go to state 571 NO shift, and go to state 572 frame_exclude go to state 573 State 565 42 opt_frame_clause: range_or_rows frame_bound_start opt_frame_exclude . $default reduce using rule 42 (opt_frame_clause) State 566 52 frame_bound: expr PRECEDING . $default reduce using rule 52 (frame_bound) State 567 53 frame_bound: expr FOLLOWING . $default reduce using rule 53 (frame_bound) State 568 43 opt_frame_clause: range_or_rows BETWEEN frame_bound_start AND . frame_bound_end opt_frame_exclude UNBOUNDED shift, and go to state 574 CURRENT shift, and go to state 557 OP_SUB shift, and go to state 112 FALSE shift, and go to state 113 OP_MUL shift, and go to state 114 TRUE shift, and go to state 115 NOT shift, and go to state 116 CASE shift, and go to state 117 EXTRACT shift, and go to state 118 OP_LP shift, and go to state 119 CAST shift, and go to state 120 NULL shift, and go to state 121 INTLITERAL shift, and go to state 122 STRINGLITERAL shift, and go to state 123 FLOATLITERAL shift, and go to state 124 IDENTIFIER shift, and go to state 27 $default reduce using rule 285 (opt_not) frame_bound_end go to state 575 frame_bound go to state 576 expr go to state 560 operand go to state 128 cast_expr go to state 129 scalar_expr go to state 130 unary_expr go to state 131 binary_expr go to state 132 logic_expr go to state 133 in_expr go to state 134 case_expr go to state 135 between_expr go to state 136 exists_expr go to state 137 comp_expr go to state 138 extract_expr go to state 139 array_index go to state 140 literal go to state 141 string_literal go to state 142 bool_literal go to state 143 num_literal go to state 144 int_literal go to state 145 float_literal go to state 146 identifier go to state 96 column_name go to state 147 opt_not go to state 148 State 569 58 frame_exclude: CURRENT . ROW ROW shift, and go to state 577 State 570 60 frame_exclude: TIES . $default reduce using rule 60 (frame_exclude) State 571 59 frame_exclude: GROUP . $default reduce using rule 59 (frame_exclude) State 572 57 frame_exclude: NO . OTHERS OTHERS shift, and go to state 578 State 573 55 opt_frame_exclude: EXCLUDE frame_exclude . $default reduce using rule 55 (opt_frame_exclude) State 574 51 frame_bound_end: UNBOUNDED . FOLLOWING FOLLOWING shift, and go to state 579 State 575 43 opt_frame_clause: range_or_rows BETWEEN frame_bound_start AND frame_bound_end . opt_frame_exclude EXCLUDE shift, and go to state 564 $default reduce using rule 56 (opt_frame_exclude) opt_frame_exclude go to state 580 State 576 50 frame_bound_end: frame_bound . $default reduce using rule 50 (frame_bound_end) State 577 58 frame_exclude: CURRENT ROW . $default reduce using rule 58 (frame_exclude) State 578 57 frame_exclude: NO OTHERS . $default reduce using rule 57 (frame_exclude) State 579 51 frame_bound_end: UNBOUNDED FOLLOWING . $default reduce using rule 51 (frame_bound_end) State 580 43 opt_frame_clause: range_or_rows BETWEEN frame_bound_start AND frame_bound_end opt_frame_exclude . $default reduce using rule 43 (opt_frame_clause) ================================================ FILE: srcs/internal/postgresql/parser/flex.l ================================================ %{ #include "bison_parser.h" #include #include #include #include #define TOKEN(name) { return SQL_##name; } static thread_local std::stringstream strbuf; %} %option reentrant %option bison-bridge %option never-interactive %option batch %option noyywrap %option nounput %option warn %option case-insensitive %option bison-locations %option header-file="flex_lexer.h" %option outfile="flex_lexer.cpp" %option prefix="ff_" %s COMMENT %x singlequotedstring %% "!=" TOKEN(OP_NOTEQUAL) SIMPLE TOKEN(SIMPLE) TEXT TOKEN(TEXT) OVER TOKEN(OVER) BETWEEN TOKEN(BETWEEN) ";" TOKEN(OP_SEMI) BIGINT TOKEN(BIGINT) LIMIT TOKEN(LIMIT) WITH TOKEN(WITH) ORDER TOKEN(ORDER) LAST TOKEN(LAST) UNBOUNDED TOKEN(UNBOUNDED) PRECEDING TOKEN(PRECEDING) EXCEPT TOKEN(EXCEPT) NUMERIC TOKEN(NUMERIC) "<" TOKEN(OP_LESSTHAN) PROCEDURE TOKEN(PROCEDURE) ACTION TOKEN(ACTION) FIRST TOKEN(FIRST) ">=" TOKEN(OP_GREATEREQ) CHECK TOKEN(CHECK) FULL TOKEN(FULL) NATURAL TOKEN(NATURAL) DOUBLE TOKEN(DOUBLE) NATIONAL TOKEN(NATIONAL) "+" TOKEN(OP_ADD) CURRENT TOKEN(CURRENT) TRIGGER TOKEN(TRIGGER) "-" TOKEN(OP_SUB) FALSE TOKEN(FALSE) UNIQUE TOKEN(UNIQUE) WHERE TOKEN(WHERE) MINUTE TOKEN(MINUTE) BEFORE TOKEN(BEFORE) ON TOKEN(ON) PARTIAL TOKEN(PARTIAL) OF TOKEN(OF) AFTER TOKEN(AFTER) PRIMARY TOKEN(PRIMARY) MONTH TOKEN(MONTH) DEFERRED TOKEN(DEFERRED) "$$" TOKEN(OP_DOUBLE_DOLLAR) VARYING TOKEN(VARYING) ">" TOKEN(OP_GREATERTHAN) OR TOKEN(OR) PLPGSQL TOKEN(PLPGSQL) DELETE TOKEN(DELETE) INDEX TOKEN(INDEX) RETURN TOKEN(RETURN) "*" TOKEN(OP_MUL) FOREIGN TOKEN(FOREIGN) RESTRICT TOKEN(RESTRICT) FOLLOWING TOKEN(FOLLOWING) TIES TOKEN(TIES) DEC TOKEN(DEC) SELECT TOKEN(SELECT) BEGIN TOKEN(BEGIN) LANGUAGE TOKEN(LANGUAGE) DISTINCT TOKEN(DISTINCT) TRUE TOKEN(TRUE) BY TOKEN(BY) "%" TOKEN(OP_MOD) VALUES TOKEN(VALUES) IS TOKEN(IS) ROW TOKEN(ROW) FUNCTION TOKEN(FUNCTION) END TOKEN(END) RECURSIVE TOKEN(RECURSIVE) FOR TOKEN(FOR) UNION TOKEN(UNION) NULLS TOKEN(NULLS) UPDATE TOKEN(UPDATE) ELSE TOKEN(ELSE) RANGE TOKEN(RANGE) OFFSET TOKEN(OFFSET) INDEXED TOKEN(INDEXED) INSTEAD TOKEN(INSTEAD) NCHAR TOKEN(NCHAR) AND TOKEN(AND) REINDEX TOKEN(REINDEX) INITIALLY TOKEN(INITIALLY) YEAR TOKEN(YEAR) PRECISION TOKEN(PRECISION) FILTER TOKEN(FILTER) NOT TOKEN(NOT) VIEW TOKEN(VIEW) DEFFERRABLE TOKEN(DEFFERRABLE) REAL TOKEN(REAL) THEN TOKEN(THEN) OPTION TOKEN(OPTION) DEFAULT TOKEN(DEFAULT) GLOBAL TOKEN(GLOBAL) CROSS TOKEN(CROSS) CHAR TOKEN(CHAR) REFERENCES TOKEN(REFERENCES) "^" TOKEN(OP_XOR) GROUP TOKEN(GROUP) CASE TOKEN(CASE) SET TOKEN(SET) HOUR TOKEN(HOUR) NO TOKEN(NO) COLUMN TOKEN(COLUMN) LOCAL TOKEN(LOCAL) DROP TOKEN(DROP) REPLACE TOKEN(REPLACE) ASC TOKEN(ASC) "," TOKEN(OP_COMMA) TABLE TOKEN(TABLE) ARRAY TOKEN(ARRAY) IF TOKEN(IF) EXTRACT TOKEN(EXTRACT) LEFT TOKEN(LEFT) OUTER TOKEN(OUTER) DECIMAL TOKEN(DECIMAL) PARTITION TOKEN(PARTITION) CASCADE TOKEN(CASCADE) ADD TOKEN(ADD) OTHERS TOKEN(OTHERS) "<=" TOKEN(OP_LESSEQ) MATCH TOKEN(MATCH) ALL TOKEN(ALL) ROWS TOKEN(ROWS) JOIN TOKEN(JOIN) LIKE TOKEN(LIKE) INTEGER TOKEN(INTEGER) ")" TOKEN(OP_RP) INT TOKEN(INT) BOOLEAN TOKEN(BOOLEAN) KEY TOKEN(KEY) EACH TOKEN(EACH) USING TOKEN(USING) RENAME TOKEN(RENAME) DO TOKEN(DO) FLOAT TOKEN(FLOAT) "(" TOKEN(OP_LP) CHARACTER TOKEN(CHARACTER) UMINUS TOKEN(UMINUS) CAST TOKEN(CAST) GROUPS TOKEN(GROUPS) NULL TOKEN(NULL) SMALLINT TOKEN(SMALLINT) INSERT TOKEN(INSERT) TEMPORARY TOKEN(TEMPORARY) CONSTRAINT TOKEN(CONSTRAINT) CREATE TOKEN(CREATE) "[" TOKEN(OP_LBRACKET) WHEN TOKEN(WHEN) IMMEDIATE TOKEN(IMMEDIATE) TO TOKEN(TO) EXCLUDE TOKEN(EXCLUDE) DAY TOKEN(DAY) CONFLICT TOKEN(CONFLICT) "]" TOKEN(OP_RBRACKET) EXECUTE TOKEN(EXECUTE) EXISTS TOKEN(EXISTS) INTO TOKEN(INTO) "/" TOKEN(OP_DIVIDE) CASCADED TOKEN(CASCADED) ISNULL TOKEN(ISNULL) AS TOKEN(AS) INNER TOKEN(INNER) INTERSECT TOKEN(INTERSECT) IN TOKEN(IN) "=" TOKEN(OP_EQUAL) VARCHAR TOKEN(VARCHAR) ALTER TOKEN(ALTER) DESC TOKEN(DESC) FROM TOKEN(FROM) TEMP TOKEN(TEMP) UNLOGGED TOKEN(UNLOGGED) SECOND TOKEN(SECOND) WINDOW TOKEN(WINDOW) NOTHING TOKEN(NOTHING) HAVING TOKEN(HAVING) -?[0-9]+"."[0-9]* | "."[0-9]* { yylval->fval = atof(yytext); return SQL_FLOATLITERAL; } -?[0-9]+ { yylval->ival = atol(yytext); return SQL_INTLITERAL; } \"[^\"\n]+\" { std::string s(yytext); yylval->sval = strdup(s.substr(1, s.size()-1).c_str()); return SQL_STRINGLITERAL; } [A-Za-z][A-Za-z0-9_]* { yylval->sval = strdup(yytext); return SQL_IDENTIFIER; } \' { BEGIN singlequotedstring; strbuf = std::stringstream{}; strbuf << '\''; } \'\' { strbuf << '\''; } [^']* { strbuf << yytext; } \' { BEGIN 0; strbuf << '\''; yylval->sval = strdup(strbuf.str().c_str()); return SQL_STRINGLITERAL; } <> { return 0; } [ \t\n]+ { } . { return 0; } %% ================================================ FILE: srcs/internal/postgresql/parser/flex_lexer.cpp ================================================ #line 2 "flex_lexer.cpp" #line 4 "flex_lexer.cpp" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 6 #define YY_FLEX_SUBMINOR_VERSION 4 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif #ifdef yy_create_buffer #define ff__create_buffer_ALREADY_DEFINED #else #define yy_create_buffer ff__create_buffer #endif #ifdef yy_delete_buffer #define ff__delete_buffer_ALREADY_DEFINED #else #define yy_delete_buffer ff__delete_buffer #endif #ifdef yy_scan_buffer #define ff__scan_buffer_ALREADY_DEFINED #else #define yy_scan_buffer ff__scan_buffer #endif #ifdef yy_scan_string #define ff__scan_string_ALREADY_DEFINED #else #define yy_scan_string ff__scan_string #endif #ifdef yy_scan_bytes #define ff__scan_bytes_ALREADY_DEFINED #else #define yy_scan_bytes ff__scan_bytes #endif #ifdef yy_init_buffer #define ff__init_buffer_ALREADY_DEFINED #else #define yy_init_buffer ff__init_buffer #endif #ifdef yy_flush_buffer #define ff__flush_buffer_ALREADY_DEFINED #else #define yy_flush_buffer ff__flush_buffer #endif #ifdef yy_load_buffer_state #define ff__load_buffer_state_ALREADY_DEFINED #else #define yy_load_buffer_state ff__load_buffer_state #endif #ifdef yy_switch_to_buffer #define ff__switch_to_buffer_ALREADY_DEFINED #else #define yy_switch_to_buffer ff__switch_to_buffer #endif #ifdef yypush_buffer_state #define ff_push_buffer_state_ALREADY_DEFINED #else #define yypush_buffer_state ff_push_buffer_state #endif #ifdef yypop_buffer_state #define ff_pop_buffer_state_ALREADY_DEFINED #else #define yypop_buffer_state ff_pop_buffer_state #endif #ifdef yyensure_buffer_stack #define ff_ensure_buffer_stack_ALREADY_DEFINED #else #define yyensure_buffer_stack ff_ensure_buffer_stack #endif #ifdef yylex #define ff_lex_ALREADY_DEFINED #else #define yylex ff_lex #endif #ifdef yyrestart #define ff_restart_ALREADY_DEFINED #else #define yyrestart ff_restart #endif #ifdef yylex_init #define ff_lex_init_ALREADY_DEFINED #else #define yylex_init ff_lex_init #endif #ifdef yylex_init_extra #define ff_lex_init_extra_ALREADY_DEFINED #else #define yylex_init_extra ff_lex_init_extra #endif #ifdef yylex_destroy #define ff_lex_destroy_ALREADY_DEFINED #else #define yylex_destroy ff_lex_destroy #endif #ifdef yyget_debug #define ff_get_debug_ALREADY_DEFINED #else #define yyget_debug ff_get_debug #endif #ifdef yyset_debug #define ff_set_debug_ALREADY_DEFINED #else #define yyset_debug ff_set_debug #endif #ifdef yyget_extra #define ff_get_extra_ALREADY_DEFINED #else #define yyget_extra ff_get_extra #endif #ifdef yyset_extra #define ff_set_extra_ALREADY_DEFINED #else #define yyset_extra ff_set_extra #endif #ifdef yyget_in #define ff_get_in_ALREADY_DEFINED #else #define yyget_in ff_get_in #endif #ifdef yyset_in #define ff_set_in_ALREADY_DEFINED #else #define yyset_in ff_set_in #endif #ifdef yyget_out #define ff_get_out_ALREADY_DEFINED #else #define yyget_out ff_get_out #endif #ifdef yyset_out #define ff_set_out_ALREADY_DEFINED #else #define yyset_out ff_set_out #endif #ifdef yyget_leng #define ff_get_leng_ALREADY_DEFINED #else #define yyget_leng ff_get_leng #endif #ifdef yyget_text #define ff_get_text_ALREADY_DEFINED #else #define yyget_text ff_get_text #endif #ifdef yyget_lineno #define ff_get_lineno_ALREADY_DEFINED #else #define yyget_lineno ff_get_lineno #endif #ifdef yyset_lineno #define ff_set_lineno_ALREADY_DEFINED #else #define yyset_lineno ff_set_lineno #endif #ifdef yyget_column #define ff_get_column_ALREADY_DEFINED #else #define yyget_column ff_get_column #endif #ifdef yyset_column #define ff_set_column_ALREADY_DEFINED #else #define yyset_column ff_set_column #endif #ifdef yywrap #define ff_wrap_ALREADY_DEFINED #else #define yywrap ff_wrap #endif #ifdef yyget_lval #define ff_get_lval_ALREADY_DEFINED #else #define yyget_lval ff_get_lval #endif #ifdef yyset_lval #define ff_set_lval_ALREADY_DEFINED #else #define yyset_lval ff_set_lval #endif #ifdef yyget_lloc #define ff_get_lloc_ALREADY_DEFINED #else #define yyget_lloc ff_get_lloc #endif #ifdef yyset_lloc #define ff_set_lloc_ALREADY_DEFINED #else #define yyset_lloc ff_set_lloc #endif #ifdef yyalloc #define ff_alloc_ALREADY_DEFINED #else #define yyalloc ff_alloc #endif #ifdef yyrealloc #define ff_realloc_ALREADY_DEFINED #else #define yyrealloc ff_realloc #endif #ifdef yyfree #define ff_free_ALREADY_DEFINED #else #define yyfree ff_free #endif /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ #include #include #include #include /* end standard C headers. */ /* flex integer type definitions */ #ifndef FLEXINT_H #define FLEXINT_H /* C99 systems have . Non-C99 systems may or may not. */ #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. */ #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS 1 #endif #include typedef int8_t flex_int8_t; typedef uint8_t flex_uint8_t; typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; /* Limits of integral types. */ #ifndef INT8_MIN #define INT8_MIN (-128) #endif #ifndef INT16_MIN #define INT16_MIN (-32767 - 1) #endif #ifndef INT32_MIN #define INT32_MIN (-2147483647 - 1) #endif #ifndef INT8_MAX #define INT8_MAX (127) #endif #ifndef INT16_MAX #define INT16_MAX (32767) #endif #ifndef INT32_MAX #define INT32_MAX (2147483647) #endif #ifndef UINT8_MAX #define UINT8_MAX (255U) #endif #ifndef UINT16_MAX #define UINT16_MAX (65535U) #endif #ifndef UINT32_MAX #define UINT32_MAX (4294967295U) #endif #ifndef SIZE_MAX #define SIZE_MAX (~(size_t)0) #endif #endif /* ! C99 */ #endif /* ! FLEXINT_H */ /* begin standard C++ headers. */ /* TODO: this is always defined, so inline it */ #define yyconst const #if defined(__GNUC__) && __GNUC__ >= 3 #define yynoreturn __attribute__((__noreturn__)) #else #define yynoreturn #endif /* Returned upon end-of-file. */ #define YY_NULL 0 /* Promotes a possibly negative, possibly signed char to an * integer in range [0..255] for use as an array index. */ #define YY_SC_TO_UI(c) ((YY_CHAR)(c)) /* An opaque pointer. */ #ifndef YY_TYPEDEF_YY_SCANNER_T #define YY_TYPEDEF_YY_SCANNER_T typedef void *yyscan_t; #endif /* For convenience, these vars (plus the bison vars far below) are macros in the reentrant scanner. */ #define yyin yyg->yyin_r #define yyout yyg->yyout_r #define yyextra yyg->yyextra_r #define yyleng yyg->yyleng_r #define yytext yyg->yytext_r #define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno) #define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column) #define yy_flex_debug yyg->yy_flex_debug_r /* Enter a start condition. This macro really ought to take a parameter, * but we do it the disgusting crufty way forced on us by the ()-less * definition of BEGIN. */ #define BEGIN yyg->yy_start = 1 + 2 * /* Translate the current start state into a value that can be later handed * to BEGIN to return to the state. The YYSTATE alias is for lex * compatibility. */ #define YY_START ((yyg->yy_start - 1) / 2) #define YYSTATE YY_START /* Action number for EOF rule of a given start state. */ #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) /* Special action meaning "start processing a new file". */ #define YY_NEW_FILE yyrestart(yyin, yyscanner) #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ #ifndef YY_BUF_SIZE #ifdef __ia64__ /* On IA-64, the buffer size is 16k, not 8k. * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. * Ditto for the __ia64__ case accordingly. */ #define YY_BUF_SIZE 32768 #else #define YY_BUF_SIZE 16384 #endif /* __ia64__ */ #endif /* The state buf must be large enough to hold one state per character in the * main buffer. */ #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef size_t yy_size_t; #endif #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 #define YY_LESS_LINENO(n) #define YY_LINENO_REWIND_TO(ptr) /* Return all but the first "n" matched characters back to the input stream. */ #define yyless(n) \ do { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg); \ *yy_cp = yyg->yy_hold_char; \ YY_RESTORE_YY_MORE_OFFSET \ yyg->yy_c_buf_p = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ YY_DO_BEFORE_ACTION; /* set up yytext again */ \ } while (0) #define unput(c) yyunput(c, yyg->yytext_ptr, yyscanner) #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct yy_buffer_state { FILE *yy_input_file; char *yy_ch_buf; /* input buffer */ char *yy_buf_pos; /* current position in input buffer */ /* Size of input buffer in bytes, not including room for EOB * characters. */ int yy_buf_size; /* Number of characters read into yy_ch_buf, not including EOB * characters. */ int yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to * delete it. */ int yy_is_our_buffer; /* Whether this is an "interactive" input source; if so, and * if we're using stdio for input, then we want to use getc() * instead of fread(), to make sure we stop fetching input after * each newline. */ int yy_is_interactive; /* Whether we're considered to be at the beginning of a line. * If so, '^' rules will be active on the next match, otherwise * not. */ int yy_at_bol; int yy_bs_lineno; /**< The line count. */ int yy_bs_column; /**< The column count. */ /* Whether to try to fill the input buffer when we reach the * end of it. */ int yy_fill_buffer; int yy_buffer_status; #define YY_BUFFER_NEW 0 #define YY_BUFFER_NORMAL 1 /* When an EOF's been seen but there's still some text to process * then we mark the buffer as YY_EOF_PENDING, to indicate that we * shouldn't try reading from the input source any more. We might * still have a bunch of tokens to match, though, because of * possible backing-up. * * When we actually see the EOF, we change the status to "new" * (via yyrestart()), so that the user can continue scanning by * just pointing yyin at a new input file. */ #define YY_BUFFER_EOF_PENDING 2 }; #endif /* !YY_STRUCT_YY_BUFFER_STATE */ /* We provide macros for accessing buffer states in case in the * future we want to put the buffer states in a more general * "scanner state". * * Returns the top of the stack, or NULL. */ #define YY_CURRENT_BUFFER \ (yyg->yy_buffer_stack ? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] : NULL) /* Same as previous macro, but useful when we know that the buffer stack is not * NULL or when we need an lvalue. For internal use only. */ #define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] void yyrestart(FILE *input_file, yyscan_t yyscanner); void yy_switch_to_buffer(YY_BUFFER_STATE new_buffer, yyscan_t yyscanner); YY_BUFFER_STATE yy_create_buffer(FILE *file, int size, yyscan_t yyscanner); void yy_delete_buffer(YY_BUFFER_STATE b, yyscan_t yyscanner); void yy_flush_buffer(YY_BUFFER_STATE b, yyscan_t yyscanner); void yypush_buffer_state(YY_BUFFER_STATE new_buffer, yyscan_t yyscanner); void yypop_buffer_state(yyscan_t yyscanner); static void yyensure_buffer_stack(yyscan_t yyscanner); static void yy_load_buffer_state(yyscan_t yyscanner); static void yy_init_buffer(YY_BUFFER_STATE b, FILE *file, yyscan_t yyscanner); #define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER, yyscanner) YY_BUFFER_STATE yy_scan_buffer(char *base, yy_size_t size, yyscan_t yyscanner); YY_BUFFER_STATE yy_scan_string(const char *yy_str, yyscan_t yyscanner); YY_BUFFER_STATE yy_scan_bytes(const char *bytes, int len, yyscan_t yyscanner); void *yyalloc(yy_size_t, yyscan_t yyscanner); void *yyrealloc(void *, yy_size_t, yyscan_t yyscanner); void yyfree(void *, yyscan_t yyscanner); #define yy_new_buffer yy_create_buffer #define yy_set_interactive(is_interactive) \ { \ if (!YY_CURRENT_BUFFER) { \ yyensure_buffer_stack(yyscanner); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer(yyin, YY_BUF_SIZE, yyscanner); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ } #define yy_set_bol(at_bol) \ { \ if (!YY_CURRENT_BUFFER) { \ yyensure_buffer_stack(yyscanner); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer(yyin, YY_BUF_SIZE, yyscanner); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ } #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) /* Begin user sect3 */ #define ff_wrap(yyscanner) (/*CONSTCOND*/ 1) #define YY_SKIP_YYWRAP typedef flex_uint8_t YY_CHAR; typedef int yy_state_type; #define yytext_ptr yytext_r static yy_state_type yy_get_previous_state(yyscan_t yyscanner); static yy_state_type yy_try_NUL_trans(yy_state_type current_state, yyscan_t yyscanner); static int yy_get_next_buffer(yyscan_t yyscanner); static void yynoreturn yy_fatal_error(const char *msg, yyscan_t yyscanner); /* Done after the current pattern has been matched and before the * corresponding action - sets up yytext. */ #define YY_DO_BEFORE_ACTION \ yyg->yytext_ptr = yy_bp; \ yyleng = (int)(yy_cp - yy_bp); \ yyg->yy_hold_char = *yy_cp; \ *yy_cp = '\0'; \ yyg->yy_c_buf_p = yy_cp; #define YY_NUM_RULES 186 #define YY_END_OF_BUFFER 187 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info { flex_int32_t yy_verify; flex_int32_t yy_nxt; }; static const flex_int16_t yy_accept[664] = { 0, 0, 0, 0, 0, 182, 182, 187, 185, 184, 184, 185, 185, 185, 62, 180, 135, 126, 50, 26, 107, 29, 176, 157, 177, 6, 16, 164, 44, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 146, 153, 96, 182, 183, 184, 1, 0, 42, 177, 176, 175, 119, 20, 179, 179, 179, 179, 179, 179, 179, 160, 179, 179, 179, 61, 179, 179, 179, 179, 179, 179, 179, 179, 133, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 110, 179, 163, 64, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 101, 179, 37, 35, 179, 45, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 149, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 182, 181, 178, 175, 179, 117, 179, 121, 179, 79, 179, 106, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 151, 55, 179, 179, 179, 179, 179, 179, 179, 179, 67, 179, 179, 179, 179, 179, 179, 179, 179, 179, 69, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 127, 179, 179, 129, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 85, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 65, 179, 179, 99, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 98, 138, 94, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 167, 179, 179, 104, 130, 73, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 168, 22, 179, 179, 179, 179, 100, 179, 179, 179, 179, 179, 179, 179, 156, 179, 123, 179, 11, 112, 124, 179, 179, 179, 179, 179, 179, 179, 179, 179, 140, 179, 179, 179, 179, 179, 179, 4, 179, 179, 179, 179, 179, 179, 88, 179, 179, 179, 179, 179, 179, 179, 122, 179, 179, 179, 179, 179, 169, 3, 89, 54, 179, 60, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 86, 147, 179, 179, 9, 82, 179, 38, 166, 109, 179, 57, 179, 179, 179, 179, 179, 21, 179, 179, 179, 179, 93, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 30, 179, 19, 134, 179, 179, 179, 179, 97, 179, 179, 48, 179, 161, 179, 179, 179, 179, 179, 179, 8, 103, 120, 179, 40, 179, 179, 78, 179, 71, 179, 179, 179, 10, 179, 113, 179, 179, 179, 179, 179, 179, 74, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 108, 179, 179, 179, 179, 70, 179, 179, 179, 131, 179, 179, 179, 32, 179, 18, 34, 179, 7, 179, 179, 179, 102, 179, 179, 145, 179, 179, 179, 179, 179, 47, 179, 24, 14, 179, 179, 155, 179, 84, 179, 179, 179, 92, 139, 174, 179, 179, 179, 142, 179, 179, 179, 159, 179, 33, 179, 179, 179, 179, 75, 90, 118, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 132, 179, 179, 49, 171, 56, 2, 179, 179, 179, 137, 179, 31, 179, 72, 63, 179, 179, 172, 5, 128, 116, 179, 179, 179, 27, 114, 91, 179, 179, 179, 150, 154, 111, 179, 51, 179, 179, 76, 179, 77, 125, 179, 179, 179, 23, 173, 15, 36, 179, 46, 179, 179, 39, 179, 179, 179, 80, 105, 179, 179, 179, 28, 179, 179, 165, 43, 158, 179, 152, 179, 41, 179, 59, 179, 66, 179, 179, 179, 58, 25, 179, 179, 179, 179, 179, 179, 52, 141, 179, 179, 170, 136, 179, 179, 53, 148, 81, 162, 115, 13, 83, 17, 68, 179, 143, 12, 144, 179, 95, 87, 0}; static const YY_CHAR yy_ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 5, 1, 6, 7, 1, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 1, 18, 19, 20, 21, 1, 1, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 1, 49, 50, 51, 1, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 47, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}; static const YY_CHAR yy_meta[77] = { 0, 1, 1, 2, 1, 2, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}; static const flex_int16_t yy_base[668] = { 0, 0, 0, 0, 0, 219, 210, 215, 1318, 75, 77, 187, 0, 165, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 152, 149, 1318, 66, 1318, 145, 1318, 144, 60, 56, 67, 68, 105, 159, 72, 109, 120, 52, 65, 122, 157, 172, 218, 134, 0, 180, 207, 270, 214, 161, 170, 87, 1318, 1318, 1318, 0, 151, 160, 1318, 148, 1318, 93, 134, 132, 1318, 1318, 0, 101, 121, 163, 179, 180, 171, 215, 245, 219, 216, 0, 218, 242, 260, 271, 235, 234, 281, 261, 269, 276, 289, 275, 292, 322, 286, 295, 284, 320, 288, 322, 296, 304, 313, 318, 0, 327, 367, 330, 336, 322, 334, 344, 341, 355, 339, 346, 349, 347, 365, 359, 379, 379, 0, 374, 391, 388, 378, 394, 382, 386, 399, 391, 444, 384, 407, 399, 412, 416, 428, 426, 431, 0, 430, 437, 453, 450, 447, 455, 454, 463, 458, 469, 0, 1318, 1318, 84, 465, 0, 474, 0, 482, 0, 490, 0, 481, 490, 478, 496, 494, 507, 489, 508, 492, 509, 513, 497, 500, 0, 510, 519, 517, 520, 510, 530, 517, 526, 533, 0, 554, 536, 528, 533, 537, 541, 546, 566, 558, 566, 559, 561, 571, 573, 555, 569, 561, 575, 577, 563, 579, 587, 583, 564, 573, 0, 583, 573, 574, 594, 602, 615, 616, 600, 605, 617, 626, 622, 619, 627, 614, 625, 630, 631, 634, 622, 622, 636, 641, 632, 644, 641, 638, 631, 648, 640, 657, 647, 647, 650, 657, 664, 676, 0, 669, 674, 675, 674, 671, 678, 674, 687, 690, 682, 683, 685, 684, 702, 690, 684, 711, 684, 694, 706, 705, 700, 704, 709, 713, 714, 723, 731, 741, 733, 745, 750, 0, 0, 751, 742, 741, 743, 736, 738, 740, 755, 749, 742, 746, 760, 747, 0, 759, 758, 0, 0, 0, 756, 752, 753, 758, 778, 782, 786, 776, 779, 786, 796, 0, 0, 786, 806, 794, 797, 0, 808, 789, 805, 797, 798, 813, 812, 0, 808, 0, 801, 0, 0, 0, 803, 812, 817, 807, 820, 817, 815, 816, 829, 820, 829, 846, 841, 841, 843, 847, 0, 857, 848, 865, 870, 867, 868, 0, 857, 858, 874, 866, 879, 864, 865, 0, 870, 882, 875, 876, 885, 877, 0, 0, 0, 886, 0, 873, 877, 885, 886, 904, 896, 912, 916, 917, 917, 0, 0, 922, 915, 0, 0, 917, 0, 0, 0, 927, 0, 928, 914, 934, 932, 935, 0, 925, 931, 924, 938, 0, 930, 944, 935, 930, 932, 947, 939, 949, 938, 955, 947, 952, 973, 0, 961, 0, 0, 958, 978, 977, 975, 971, 984, 983, 988, 993, 0, 975, 995, 993, 980, 988, 1001, 0, 0, 0, 998, 0, 990, 1004, 0, 993, 0, 999, 990, 998, 0, 994, 0, 1026, 997, 1014, 1000, 1013, 1032, 0, 1020, 1036, 1040, 1042, 1047, 1042, 1038, 1049, 1034, 1050, 1047, 0, 1040, 1054, 1041, 1048, 0, 1058, 1057, 1060, 0, 1048, 1067, 1056, 0, 1049, 0, 0, 1059, 0, 1060, 1073, 1059, 0, 1084, 1090, 0, 1076, 1087, 1081, 1100, 1088, 0, 1104, 0, 0, 1105, 1106, 0, 1092, 0, 1104, 1100, 1100, 0, 0, 0, 1115, 1114, 1107, 0, 1116, 1104, 1118, 0, 1117, 0, 1124, 1115, 1121, 1127, 0, 0, 0, 1120, 1124, 1122, 1129, 1130, 1122, 1130, 1147, 1145, 1137, 0, 1160, 1163, 0, 0, 0, 0, 1153, 1169, 1153, 0, 1168, 0, 1168, 0, 0, 1156, 1168, 0, 0, 0, 1172, 1173, 1159, 1171, 0, 0, 0, 1178, 1182, 1164, 0, 0, 0, 1171, 0, 1173, 1168, 0, 1178, 0, 0, 1189, 1188, 1182, 0, 0, 0, 0, 1183, 0, 1185, 1192, 0, 1193, 1194, 1216, 0, 0, 1201, 1205, 1208, 0, 1222, 1226, 0, 0, 0, 1213, 0, 1218, 0, 1231, 0, 1227, 0, 1230, 1211, 1218, 0, 0, 1225, 1233, 1228, 1238, 1239, 1240, 0, 0, 1222, 1244, 0, 0, 1230, 1240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1234, 0, 0, 0, 1249, 0, 0, 1318, 1305, 1309, 93, 1313}; static const flex_int16_t yy_def[668] = { 0, 663, 1, 1, 1, 664, 664, 663, 663, 663, 663, 663, 665, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 663, 663, 663, 667, 663, 663, 663, 665, 663, 663, 663, 663, 663, 663, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 667, 663, 663, 663, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 0, 663, 663, 663, 663}; static const flex_int16_t yy_nxt[1395] = { 0, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 45, 52, 45, 53, 54, 55, 8, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 45, 52, 58, 58, 58, 58, 64, 75, 62, 68, 69, 76, 70, 107, 79, 84, 108, 77, 71, 85, 72, 80, 67, 86, 73, 74, 154, 78, 81, 87, 99, 82, 88, 64, 83, 62, 100, 75, 150, 68, 69, 76, 70, 107, 79, 84, 108, 77, 71, 85, 72, 80, 89, 86, 73, 74, 101, 78, 81, 87, 99, 82, 88, 90, 83, 91, 100, 155, 150, 109, 102, 156, 103, 110, 154, 92, 63, 111, 153, 104, 105, 127, 89, 112, 152, 106, 101, 58, 58, 66, 65, 63, 128, 90, 62, 91, 61, 155, 129, 109, 102, 156, 103, 110, 113, 92, 93, 111, 146, 104, 105, 127, 114, 112, 94, 106, 147, 95, 115, 116, 96, 117, 128, 97, 148, 149, 98, 130, 129, 157, 160, 131, 59, 118, 113, 161, 93, 158, 146, 119, 663, 132, 114, 57, 94, 159, 147, 95, 115, 116, 96, 117, 57, 97, 148, 149, 98, 130, 133, 157, 160, 131, 134, 118, 162, 161, 135, 158, 663, 119, 120, 132, 166, 142, 143, 159, 144, 167, 121, 145, 122, 663, 123, 168, 124, 125, 126, 663, 133, 169, 663, 663, 134, 170, 162, 663, 135, 163, 164, 175, 120, 663, 166, 142, 143, 176, 144, 167, 121, 145, 122, 165, 123, 168, 124, 125, 126, 136, 171, 169, 172, 137, 173, 170, 138, 139, 181, 163, 164, 175, 177, 140, 174, 178, 141, 176, 182, 183, 184, 179, 185, 165, 186, 663, 191, 194, 180, 136, 171, 197, 172, 137, 173, 192, 138, 139, 181, 200, 663, 193, 177, 140, 174, 178, 141, 201, 182, 183, 184, 179, 185, 187, 186, 188, 191, 194, 180, 189, 195, 197, 198, 202, 199, 192, 196, 203, 204, 200, 190, 193, 210, 211, 663, 212, 213, 201, 215, 663, 216, 214, 217, 187, 663, 188, 218, 219, 220, 189, 195, 221, 198, 202, 199, 222, 196, 203, 204, 205, 190, 223, 210, 211, 206, 212, 213, 224, 215, 207, 216, 214, 217, 227, 208, 209, 218, 219, 220, 225, 226, 221, 228, 229, 230, 222, 231, 232, 233, 205, 234, 223, 235, 238, 206, 247, 236, 224, 248, 207, 251, 252, 237, 227, 208, 209, 253, 249, 663, 225, 226, 663, 228, 229, 230, 250, 231, 232, 233, 256, 234, 663, 235, 238, 257, 247, 236, 258, 248, 254, 251, 252, 237, 239, 260, 240, 253, 249, 241, 259, 255, 242, 264, 261, 265, 250, 243, 268, 244, 256, 262, 245, 246, 263, 257, 266, 269, 258, 272, 254, 270, 267, 273, 239, 260, 240, 271, 274, 241, 259, 255, 242, 264, 261, 265, 275, 243, 268, 244, 276, 262, 245, 246, 263, 277, 266, 269, 278, 272, 279, 270, 267, 273, 280, 281, 285, 271, 274, 282, 286, 283, 287, 290, 288, 291, 275, 292, 293, 294, 276, 297, 298, 295, 296, 277, 284, 289, 278, 299, 279, 300, 301, 302, 280, 281, 285, 303, 306, 282, 286, 283, 287, 290, 288, 291, 307, 292, 293, 294, 308, 297, 298, 295, 296, 309, 284, 289, 304, 299, 310, 300, 301, 302, 311, 305, 312, 303, 306, 313, 314, 315, 316, 317, 318, 319, 307, 320, 321, 322, 308, 323, 324, 325, 330, 309, 331, 328, 304, 332, 310, 326, 333, 334, 311, 305, 312, 329, 335, 313, 314, 315, 316, 317, 318, 319, 327, 320, 321, 322, 336, 323, 324, 325, 330, 337, 331, 328, 338, 332, 339, 326, 333, 334, 340, 341, 343, 329, 335, 344, 345, 346, 347, 348, 349, 350, 327, 342, 351, 352, 336, 353, 354, 355, 356, 337, 357, 358, 338, 359, 339, 360, 361, 362, 340, 341, 343, 363, 364, 344, 345, 346, 347, 348, 349, 350, 365, 342, 351, 352, 366, 353, 354, 355, 356, 367, 357, 358, 368, 359, 369, 360, 361, 362, 370, 371, 372, 363, 364, 373, 374, 375, 376, 377, 378, 379, 365, 380, 383, 381, 366, 382, 384, 385, 386, 367, 389, 390, 368, 392, 369, 391, 393, 387, 370, 371, 372, 394, 395, 373, 374, 375, 376, 377, 378, 379, 396, 380, 383, 381, 397, 382, 384, 385, 386, 388, 389, 390, 398, 392, 399, 391, 393, 387, 400, 401, 402, 394, 395, 403, 404, 405, 406, 407, 408, 409, 396, 410, 411, 412, 397, 413, 414, 415, 416, 388, 417, 418, 398, 419, 399, 420, 421, 422, 400, 401, 402, 423, 424, 403, 404, 405, 406, 407, 408, 409, 425, 410, 411, 412, 426, 413, 414, 415, 416, 427, 417, 418, 428, 419, 429, 420, 421, 422, 430, 431, 432, 423, 424, 433, 434, 435, 436, 437, 438, 439, 425, 440, 441, 443, 426, 444, 445, 446, 447, 427, 448, 449, 428, 442, 429, 450, 451, 452, 430, 431, 432, 453, 454, 433, 434, 435, 436, 437, 438, 439, 455, 440, 441, 443, 456, 444, 445, 446, 447, 457, 448, 449, 458, 442, 459, 450, 451, 452, 460, 461, 462, 453, 454, 463, 465, 466, 467, 464, 468, 469, 455, 470, 471, 472, 456, 473, 474, 475, 476, 457, 477, 478, 458, 479, 459, 480, 481, 482, 460, 461, 462, 483, 484, 463, 465, 466, 467, 464, 468, 469, 485, 470, 471, 472, 486, 473, 474, 475, 476, 487, 477, 478, 488, 479, 489, 480, 481, 482, 490, 491, 492, 483, 484, 493, 494, 495, 496, 497, 498, 499, 485, 500, 501, 502, 486, 503, 504, 505, 506, 487, 507, 508, 488, 509, 489, 510, 511, 512, 490, 491, 492, 513, 514, 493, 494, 495, 496, 497, 498, 499, 515, 500, 501, 502, 516, 503, 504, 505, 506, 517, 507, 508, 518, 509, 519, 510, 511, 512, 520, 521, 522, 513, 514, 523, 524, 525, 526, 527, 528, 529, 515, 530, 531, 532, 516, 533, 534, 535, 536, 517, 537, 538, 518, 539, 519, 540, 541, 544, 520, 521, 522, 545, 546, 523, 524, 525, 526, 527, 528, 529, 542, 530, 531, 532, 547, 533, 534, 535, 536, 548, 537, 538, 549, 539, 550, 540, 541, 544, 551, 543, 552, 545, 546, 553, 554, 555, 556, 557, 558, 559, 542, 560, 561, 562, 547, 563, 564, 565, 566, 548, 567, 568, 549, 569, 550, 570, 571, 572, 551, 543, 552, 573, 574, 553, 554, 555, 556, 557, 558, 559, 575, 560, 561, 562, 576, 563, 564, 565, 566, 577, 567, 568, 578, 569, 579, 570, 571, 572, 580, 581, 582, 573, 574, 583, 584, 585, 586, 587, 588, 589, 575, 590, 591, 592, 576, 593, 594, 595, 596, 577, 597, 598, 578, 599, 579, 600, 601, 602, 580, 581, 582, 603, 604, 583, 584, 585, 586, 587, 588, 589, 605, 590, 591, 592, 606, 593, 594, 595, 596, 607, 597, 598, 608, 599, 609, 600, 601, 602, 610, 611, 612, 603, 604, 613, 614, 615, 616, 617, 618, 619, 605, 620, 621, 622, 606, 623, 624, 625, 626, 607, 627, 628, 608, 629, 609, 630, 631, 632, 610, 611, 612, 633, 634, 613, 614, 615, 616, 617, 618, 619, 635, 620, 621, 622, 636, 623, 624, 625, 626, 637, 627, 628, 638, 629, 639, 630, 631, 632, 640, 641, 642, 633, 634, 643, 644, 645, 646, 647, 648, 649, 635, 650, 651, 652, 636, 653, 654, 655, 656, 637, 657, 658, 638, 659, 639, 660, 661, 662, 640, 641, 642, 663, 663, 643, 644, 645, 646, 647, 648, 649, 663, 650, 651, 652, 663, 653, 654, 655, 656, 663, 657, 658, 663, 659, 663, 660, 661, 662, 56, 56, 56, 56, 60, 663, 60, 60, 151, 151, 663, 151, 7, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663 }; static const flex_int16_t yy_chk[1395] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 9, 10, 10, 24, 30, 24, 29, 29, 30, 29, 38, 31, 32, 39, 30, 29, 32, 29, 31, 666, 32, 29, 29, 154, 30, 31, 32, 35, 31, 32, 62, 31, 62, 35, 30, 52, 29, 29, 30, 29, 38, 31, 32, 39, 30, 29, 32, 29, 31, 33, 32, 29, 29, 36, 30, 31, 32, 35, 31, 32, 33, 31, 33, 35, 68, 52, 40, 36, 69, 37, 40, 64, 33, 63, 40, 60, 37, 37, 44, 33, 40, 57, 37, 36, 58, 58, 28, 26, 22, 44, 33, 21, 33, 13, 68, 44, 40, 36, 69, 37, 40, 41, 33, 34, 40, 50, 37, 37, 44, 41, 40, 34, 37, 50, 34, 41, 42, 34, 42, 44, 34, 51, 51, 34, 46, 44, 70, 72, 46, 11, 42, 41, 73, 34, 71, 50, 42, 7, 46, 41, 6, 34, 71, 50, 34, 41, 42, 34, 42, 5, 34, 51, 51, 34, 46, 47, 70, 72, 46, 47, 42, 74, 73, 47, 71, 0, 42, 43, 46, 76, 49, 49, 71, 49, 77, 43, 49, 43, 0, 43, 79, 43, 43, 43, 0, 47, 80, 0, 0, 47, 80, 74, 0, 47, 75, 75, 83, 43, 0, 76, 49, 49, 84, 49, 77, 43, 49, 43, 75, 43, 79, 43, 43, 43, 48, 81, 80, 81, 48, 82, 80, 48, 48, 86, 75, 75, 83, 85, 48, 82, 85, 48, 84, 87, 88, 89, 85, 90, 75, 91, 0, 93, 95, 85, 48, 81, 97, 81, 48, 82, 94, 48, 48, 86, 99, 0, 94, 85, 48, 82, 85, 48, 100, 87, 88, 89, 85, 90, 92, 91, 92, 93, 95, 85, 92, 96, 97, 98, 101, 98, 94, 96, 102, 104, 99, 92, 94, 106, 107, 0, 108, 109, 100, 110, 0, 111, 109, 111, 92, 0, 92, 112, 113, 114, 92, 96, 115, 98, 101, 98, 116, 96, 102, 104, 105, 92, 117, 106, 107, 105, 108, 109, 118, 110, 105, 111, 109, 111, 120, 105, 105, 112, 113, 114, 119, 119, 115, 122, 123, 124, 116, 125, 126, 127, 105, 128, 117, 129, 130, 105, 132, 129, 118, 133, 105, 134, 135, 129, 120, 105, 105, 136, 133, 0, 119, 119, 0, 122, 123, 124, 133, 125, 126, 127, 138, 128, 0, 129, 130, 139, 132, 129, 141, 133, 137, 134, 135, 129, 131, 142, 131, 136, 133, 131, 141, 137, 131, 144, 143, 145, 133, 131, 147, 131, 138, 143, 131, 131, 143, 139, 146, 148, 141, 150, 137, 149, 146, 155, 131, 142, 131, 149, 157, 131, 141, 137, 131, 144, 143, 145, 159, 131, 147, 131, 161, 143, 131, 131, 143, 163, 146, 148, 164, 150, 165, 149, 146, 155, 166, 167, 169, 149, 157, 168, 170, 168, 171, 173, 172, 174, 159, 175, 177, 178, 161, 179, 180, 178, 178, 163, 168, 172, 164, 181, 165, 182, 183, 184, 166, 167, 169, 185, 188, 168, 170, 168, 171, 173, 172, 174, 189, 175, 177, 178, 190, 179, 180, 178, 178, 191, 168, 172, 187, 181, 192, 182, 183, 184, 193, 187, 194, 185, 188, 195, 196, 197, 198, 199, 200, 201, 189, 202, 203, 204, 190, 205, 206, 207, 210, 191, 211, 209, 187, 213, 192, 208, 214, 215, 193, 187, 194, 209, 216, 195, 196, 197, 198, 199, 200, 201, 208, 202, 203, 204, 217, 205, 206, 207, 210, 218, 211, 209, 219, 213, 220, 208, 214, 215, 221, 222, 223, 209, 216, 224, 225, 226, 227, 228, 229, 230, 208, 222, 231, 232, 217, 233, 234, 235, 236, 218, 237, 238, 219, 239, 220, 240, 241, 242, 221, 222, 223, 243, 244, 224, 225, 226, 227, 228, 229, 230, 245, 222, 231, 232, 246, 233, 234, 235, 236, 247, 237, 238, 248, 239, 249, 240, 241, 242, 251, 252, 253, 243, 244, 254, 255, 256, 257, 258, 259, 260, 245, 261, 263, 262, 246, 262, 264, 265, 266, 247, 268, 269, 248, 270, 249, 269, 271, 267, 251, 252, 253, 272, 273, 254, 255, 256, 257, 258, 259, 260, 274, 261, 263, 262, 275, 262, 264, 265, 266, 267, 268, 269, 276, 270, 277, 269, 271, 267, 278, 279, 280, 272, 273, 281, 282, 285, 286, 287, 288, 289, 274, 290, 291, 292, 275, 293, 294, 295, 296, 267, 297, 299, 276, 300, 277, 304, 305, 306, 278, 279, 280, 307, 308, 281, 282, 285, 286, 287, 288, 289, 309, 290, 291, 292, 310, 293, 294, 295, 296, 311, 297, 299, 312, 300, 313, 304, 305, 306, 314, 317, 318, 307, 308, 319, 320, 322, 323, 324, 325, 326, 309, 327, 328, 330, 310, 332, 336, 337, 338, 311, 339, 340, 312, 328, 313, 341, 342, 343, 314, 317, 318, 344, 345, 319, 320, 322, 323, 324, 325, 326, 346, 327, 328, 330, 347, 332, 336, 337, 338, 348, 339, 340, 349, 328, 350, 341, 342, 343, 351, 353, 354, 344, 345, 355, 356, 357, 358, 355, 360, 361, 346, 362, 363, 364, 347, 365, 366, 368, 369, 348, 370, 371, 349, 372, 350, 373, 377, 379, 351, 353, 354, 380, 381, 355, 356, 357, 358, 355, 360, 361, 382, 362, 363, 364, 383, 365, 366, 368, 369, 384, 370, 371, 385, 372, 386, 373, 377, 379, 387, 388, 391, 380, 381, 392, 395, 399, 401, 402, 403, 404, 382, 405, 407, 408, 383, 409, 410, 412, 413, 384, 414, 415, 385, 416, 386, 417, 418, 419, 387, 388, 391, 420, 421, 392, 395, 399, 401, 402, 403, 404, 422, 405, 407, 408, 423, 409, 410, 412, 413, 424, 414, 415, 426, 416, 429, 417, 418, 419, 430, 431, 432, 420, 421, 433, 434, 435, 436, 437, 439, 440, 422, 441, 442, 443, 423, 444, 448, 450, 451, 424, 453, 455, 426, 456, 429, 457, 459, 462, 430, 431, 432, 463, 464, 433, 434, 435, 436, 437, 439, 440, 461, 441, 442, 443, 465, 444, 448, 450, 451, 466, 453, 455, 468, 456, 469, 457, 459, 462, 470, 461, 471, 463, 464, 472, 473, 474, 475, 476, 477, 478, 461, 480, 481, 482, 465, 483, 485, 486, 487, 466, 489, 490, 468, 491, 469, 493, 496, 498, 470, 461, 471, 499, 500, 472, 473, 474, 475, 476, 477, 478, 502, 480, 481, 482, 503, 483, 485, 486, 487, 505, 489, 490, 506, 491, 507, 493, 496, 498, 508, 509, 511, 499, 500, 514, 515, 517, 519, 520, 521, 525, 502, 526, 527, 529, 503, 530, 531, 533, 535, 505, 536, 537, 506, 538, 507, 542, 543, 544, 508, 509, 511, 545, 546, 514, 515, 517, 519, 520, 521, 525, 547, 526, 527, 529, 548, 530, 531, 533, 535, 549, 536, 537, 550, 538, 551, 542, 543, 544, 553, 554, 559, 545, 546, 560, 561, 563, 565, 568, 569, 573, 547, 574, 575, 576, 548, 580, 581, 582, 586, 549, 588, 589, 550, 591, 551, 594, 595, 596, 553, 554, 559, 601, 603, 560, 561, 563, 565, 568, 569, 573, 604, 574, 575, 576, 606, 580, 581, 582, 586, 607, 588, 589, 608, 591, 611, 594, 595, 596, 612, 613, 615, 601, 603, 616, 620, 622, 624, 626, 628, 629, 604, 630, 633, 634, 606, 635, 636, 637, 638, 607, 641, 642, 608, 645, 611, 646, 656, 660, 612, 613, 615, 0, 0, 616, 620, 622, 624, 626, 628, 629, 0, 630, 633, 634, 0, 635, 636, 637, 638, 0, 641, 642, 0, 645, 0, 646, 656, 660, 664, 664, 664, 664, 665, 0, 665, 665, 667, 667, 0, 667, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663 }; /* The intent behind this definition is that it'll catch * any uses of REJECT which flex missed. */ #define REJECT reject_used_but_not_detected #define yymore() yymore_used_but_not_detected #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET #line 1 "flex.l" #line 2 "flex.l" #include #include #include #include #include "bison_parser.h" #define TOKEN(name) \ { return SQL_##name; } static thread_local std::stringstream strbuf; #line 1193 "flex_lexer.cpp" #line 1195 "flex_lexer.cpp" #define INITIAL 0 #define COMMENT 1 #define singlequotedstring 2 #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way * down here because we want the user's section 1 to have been scanned first. * The user has a chance to override it with an option. */ #include #endif #ifndef YY_EXTRA_TYPE #define YY_EXTRA_TYPE void * #endif /* Holds the entire state of the reentrant scanner. */ struct yyguts_t { /* User-defined. Not touched by flex. */ YY_EXTRA_TYPE yyextra_r; /* The rest are the same as the globals declared in the non-reentrant scanner. */ FILE *yyin_r, *yyout_r; size_t yy_buffer_stack_top; /**< index of top of stack. */ size_t yy_buffer_stack_max; /**< capacity of stack. */ YY_BUFFER_STATE *yy_buffer_stack; /**< Stack as an array. */ char yy_hold_char; int yy_n_chars; int yyleng_r; char *yy_c_buf_p; int yy_init; int yy_start; int yy_did_buffer_switch_on_eof; int yy_start_stack_ptr; int yy_start_stack_depth; int *yy_start_stack; yy_state_type yy_last_accepting_state; char *yy_last_accepting_cpos; int yylineno_r; int yy_flex_debug_r; char *yytext_r; int yy_more_flag; int yy_more_len; YYSTYPE *yylval_r; YYLTYPE *yylloc_r; }; /* end struct yyguts_t */ static int yy_init_globals(yyscan_t yyscanner); /* This must go here because YYSTYPE and YYLTYPE are included * from bison output in section 1.*/ #define yylval yyg->yylval_r #define yylloc yyg->yylloc_r int yylex_init(yyscan_t *scanner); int yylex_init_extra(YY_EXTRA_TYPE user_defined, yyscan_t *scanner); /* Accessor methods to globals. These are made visible to non-reentrant scanners for convenience. */ int yylex_destroy(yyscan_t yyscanner); int yyget_debug(yyscan_t yyscanner); void yyset_debug(int debug_flag, yyscan_t yyscanner); YY_EXTRA_TYPE yyget_extra(yyscan_t yyscanner); void yyset_extra(YY_EXTRA_TYPE user_defined, yyscan_t yyscanner); FILE *yyget_in(yyscan_t yyscanner); void yyset_in(FILE *_in_str, yyscan_t yyscanner); FILE *yyget_out(yyscan_t yyscanner); void yyset_out(FILE *_out_str, yyscan_t yyscanner); int yyget_leng(yyscan_t yyscanner); char *yyget_text(yyscan_t yyscanner); int yyget_lineno(yyscan_t yyscanner); void yyset_lineno(int _line_number, yyscan_t yyscanner); int yyget_column(yyscan_t yyscanner); void yyset_column(int _column_no, yyscan_t yyscanner); YYSTYPE *yyget_lval(yyscan_t yyscanner); void yyset_lval(YYSTYPE *yylval_param, yyscan_t yyscanner); YYLTYPE *yyget_lloc(yyscan_t yyscanner); void yyset_lloc(YYLTYPE *yylloc_param, yyscan_t yyscanner); /* Macros after this point can all be overridden by user definitions in * section 1. */ #ifndef YY_SKIP_YYWRAP #ifdef __cplusplus extern "C" int yywrap(yyscan_t yyscanner); #else extern int yywrap(yyscan_t yyscanner); #endif #endif #ifndef YY_NO_UNPUT #endif #ifndef yytext_ptr static void yy_flex_strncpy(char *, const char *, int, yyscan_t yyscanner); #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen(const char *, yyscan_t yyscanner); #endif #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput(yyscan_t yyscanner); #else static int input(yyscan_t yyscanner); #endif #endif /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE #ifdef __ia64__ /* On IA-64, the buffer size is 16k, not 8k */ #define YY_READ_BUF_SIZE 16384 #else #define YY_READ_BUF_SIZE 8192 #endif /* __ia64__ */ #endif /* Copy whatever the last rule matched to the standard output. */ #ifndef ECHO /* This used to be an fputs(), but since the string might contain NUL's, * we now use fwrite(). */ #define ECHO \ do { \ if (fwrite(yytext, (size_t)yyleng, 1, yyout)) { \ } \ } while (0) #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, * is returned in "result". */ #ifndef YY_INPUT #define YY_INPUT(buf, result, max_size) \ if (YY_CURRENT_BUFFER_LVALUE->yy_is_interactive) { \ int c = '*'; \ int n; \ for (n = 0; n < max_size && (c = getc(yyin)) != EOF && c != '\n'; ++n) \ buf[n] = (char)c; \ if (c == '\n') buf[n++] = (char)c; \ if (c == EOF && ferror(yyin)) \ YY_FATAL_ERROR("input in flex scanner failed"); \ result = n; \ } else { \ errno = 0; \ while ((result = (int)fread(buf, 1, (yy_size_t)max_size, yyin)) == 0 && \ ferror(yyin)) { \ if (errno != EINTR) { \ YY_FATAL_ERROR("input in flex scanner failed"); \ break; \ } \ errno = 0; \ clearerr(yyin); \ } \ } #endif /* No semi-colon after return; correct usage is to write "yyterminate();" - * we don't want an extra ';' after the "return" because that will cause * some compilers to complain about unreachable statements. */ #ifndef yyterminate #define yyterminate() return YY_NULL #endif /* Number of entries by which start-condition stack grows. */ #ifndef YY_START_STACK_INCR #define YY_START_STACK_INCR 25 #endif /* Report a fatal error. */ #ifndef YY_FATAL_ERROR #define YY_FATAL_ERROR(msg) yy_fatal_error(msg, yyscanner) #endif /* end tables serialization structures and prototypes */ /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL_IS_OURS 1 extern int yylex(YYSTYPE *yylval_param, YYLTYPE *yylloc_param, yyscan_t yyscanner); #define YY_DECL \ int yylex(YYSTYPE *yylval_param, YYLTYPE *yylloc_param, yyscan_t yyscanner) #endif /* !YY_DECL */ /* Code executed at the beginning of each rule, after yytext and yyleng * have been set up. */ #ifndef YY_USER_ACTION #define YY_USER_ACTION #endif /* Code executed at the end of each rule. */ #ifndef YY_BREAK #define YY_BREAK /*LINTED*/ break; #endif #define YY_RULE_SETUP YY_USER_ACTION /** The main scanner function which does all the work. */ YY_DECL { yy_state_type yy_current_state; char *yy_cp, *yy_bp; int yy_act; struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; yylval = yylval_param; yylloc = yylloc_param; if (!yyg->yy_init) { yyg->yy_init = 1; #ifdef YY_USER_INIT YY_USER_INIT; #endif if (!yyg->yy_start) yyg->yy_start = 1; /* first start state */ if (!yyin) yyin = stdin; if (!yyout) yyout = stdout; if (!YY_CURRENT_BUFFER) { yyensure_buffer_stack(yyscanner); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer(yyin, YY_BUF_SIZE, yyscanner); } yy_load_buffer_state(yyscanner); } { #line 26 "flex.l" #line 1481 "flex_lexer.cpp" while (/*CONSTCOND*/ 1) /* loops until end-of-file is reached */ { yy_cp = yyg->yy_c_buf_p; /* Support of yytext. */ *yy_cp = yyg->yy_hold_char; /* yy_bp points to the position in yy_ch_buf of the start of * the current run. */ yy_bp = yy_cp; yy_current_state = yyg->yy_start; yy_match: do { YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; if (yy_accept[yy_current_state]) { yyg->yy_last_accepting_state = yy_current_state; yyg->yy_last_accepting_cpos = yy_cp; } while (yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state) { yy_current_state = (int)yy_def[yy_current_state]; if (yy_current_state >= 664) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; ++yy_cp; } while (yy_current_state != 663); yy_cp = yyg->yy_last_accepting_cpos; yy_current_state = yyg->yy_last_accepting_state; yy_find_action: yy_act = yy_accept[yy_current_state]; YY_DO_BEFORE_ACTION; do_action: /* This label is used only to access EOF actions. */ switch (yy_act) { /* beginning of action switch */ case 0: /* must back up */ /* undo the effects of YY_DO_BEFORE_ACTION */ *yy_cp = yyg->yy_hold_char; yy_cp = yyg->yy_last_accepting_cpos; yy_current_state = yyg->yy_last_accepting_state; goto yy_find_action; case 1: YY_RULE_SETUP #line 27 "flex.l" TOKEN(OP_NOTEQUAL) YY_BREAK case 2: YY_RULE_SETUP #line 28 "flex.l" TOKEN(SIMPLE) YY_BREAK case 3: YY_RULE_SETUP #line 29 "flex.l" TOKEN(TEXT) YY_BREAK case 4: YY_RULE_SETUP #line 30 "flex.l" TOKEN(OVER) YY_BREAK case 5: YY_RULE_SETUP #line 31 "flex.l" TOKEN(BETWEEN) YY_BREAK case 6: YY_RULE_SETUP #line 32 "flex.l" TOKEN(OP_SEMI) YY_BREAK case 7: YY_RULE_SETUP #line 33 "flex.l" TOKEN(BIGINT) YY_BREAK case 8: YY_RULE_SETUP #line 34 "flex.l" TOKEN(LIMIT) YY_BREAK case 9: YY_RULE_SETUP #line 35 "flex.l" TOKEN(WITH) YY_BREAK case 10: YY_RULE_SETUP #line 36 "flex.l" TOKEN(ORDER) YY_BREAK case 11: YY_RULE_SETUP #line 37 "flex.l" TOKEN(LAST) YY_BREAK case 12: YY_RULE_SETUP #line 38 "flex.l" TOKEN(UNBOUNDED) YY_BREAK case 13: YY_RULE_SETUP #line 39 "flex.l" TOKEN(PRECEDING) YY_BREAK case 14: YY_RULE_SETUP #line 40 "flex.l" TOKEN(EXCEPT) YY_BREAK case 15: YY_RULE_SETUP #line 41 "flex.l" TOKEN(NUMERIC) YY_BREAK case 16: YY_RULE_SETUP #line 42 "flex.l" TOKEN(OP_LESSTHAN) YY_BREAK case 17: YY_RULE_SETUP #line 43 "flex.l" TOKEN(PROCEDURE) YY_BREAK case 18: YY_RULE_SETUP #line 44 "flex.l" TOKEN(ACTION) YY_BREAK case 19: YY_RULE_SETUP #line 45 "flex.l" TOKEN(FIRST) YY_BREAK case 20: YY_RULE_SETUP #line 46 "flex.l" TOKEN(OP_GREATEREQ) YY_BREAK case 21: YY_RULE_SETUP #line 47 "flex.l" TOKEN(CHECK) YY_BREAK case 22: YY_RULE_SETUP #line 48 "flex.l" TOKEN(FULL) YY_BREAK case 23: YY_RULE_SETUP #line 49 "flex.l" TOKEN(NATURAL) YY_BREAK case 24: YY_RULE_SETUP #line 50 "flex.l" TOKEN(DOUBLE) YY_BREAK case 25: YY_RULE_SETUP #line 51 "flex.l" TOKEN(NATIONAL) YY_BREAK case 26: YY_RULE_SETUP #line 52 "flex.l" TOKEN(OP_ADD) YY_BREAK case 27: YY_RULE_SETUP #line 53 "flex.l" TOKEN(CURRENT) YY_BREAK case 28: YY_RULE_SETUP #line 54 "flex.l" TOKEN(TRIGGER) YY_BREAK case 29: YY_RULE_SETUP #line 55 "flex.l" TOKEN(OP_SUB) YY_BREAK case 30: YY_RULE_SETUP #line 56 "flex.l" TOKEN(FALSE) YY_BREAK case 31: YY_RULE_SETUP #line 57 "flex.l" TOKEN(UNIQUE) YY_BREAK case 32: YY_RULE_SETUP #line 58 "flex.l" TOKEN(WHERE) YY_BREAK case 33: YY_RULE_SETUP #line 59 "flex.l" TOKEN(MINUTE) YY_BREAK case 34: YY_RULE_SETUP #line 60 "flex.l" TOKEN(BEFORE) YY_BREAK case 35: YY_RULE_SETUP #line 61 "flex.l" TOKEN(ON) YY_BREAK case 36: YY_RULE_SETUP #line 62 "flex.l" TOKEN(PARTIAL) YY_BREAK case 37: YY_RULE_SETUP #line 63 "flex.l" TOKEN(OF) YY_BREAK case 38: YY_RULE_SETUP #line 64 "flex.l" TOKEN(AFTER) YY_BREAK case 39: YY_RULE_SETUP #line 65 "flex.l" TOKEN(PRIMARY) YY_BREAK case 40: YY_RULE_SETUP #line 66 "flex.l" TOKEN(MONTH) YY_BREAK case 41: YY_RULE_SETUP #line 67 "flex.l" TOKEN(DEFERRED) YY_BREAK case 42: YY_RULE_SETUP #line 68 "flex.l" TOKEN(OP_DOUBLE_DOLLAR) YY_BREAK case 43: YY_RULE_SETUP #line 69 "flex.l" TOKEN(VARYING) YY_BREAK case 44: YY_RULE_SETUP #line 70 "flex.l" TOKEN(OP_GREATERTHAN) YY_BREAK case 45: YY_RULE_SETUP #line 71 "flex.l" TOKEN(OR) YY_BREAK case 46: YY_RULE_SETUP #line 72 "flex.l" TOKEN(PLPGSQL) YY_BREAK case 47: YY_RULE_SETUP #line 73 "flex.l" TOKEN(DELETE) YY_BREAK case 48: YY_RULE_SETUP #line 74 "flex.l" TOKEN(INDEX) YY_BREAK case 49: YY_RULE_SETUP #line 75 "flex.l" TOKEN(RETURN) YY_BREAK case 50: YY_RULE_SETUP #line 76 "flex.l" TOKEN(OP_MUL) YY_BREAK case 51: YY_RULE_SETUP #line 77 "flex.l" TOKEN(FOREIGN) YY_BREAK case 52: YY_RULE_SETUP #line 78 "flex.l" TOKEN(RESTRICT) YY_BREAK case 53: YY_RULE_SETUP #line 79 "flex.l" TOKEN(FOLLOWING) YY_BREAK case 54: YY_RULE_SETUP #line 80 "flex.l" TOKEN(TIES) YY_BREAK case 55: YY_RULE_SETUP #line 81 "flex.l" TOKEN(DEC) YY_BREAK case 56: YY_RULE_SETUP #line 82 "flex.l" TOKEN(SELECT) YY_BREAK case 57: YY_RULE_SETUP #line 83 "flex.l" TOKEN(BEGIN) YY_BREAK case 58: YY_RULE_SETUP #line 84 "flex.l" TOKEN(LANGUAGE) YY_BREAK case 59: YY_RULE_SETUP #line 85 "flex.l" TOKEN(DISTINCT) YY_BREAK case 60: YY_RULE_SETUP #line 86 "flex.l" TOKEN(TRUE) YY_BREAK case 61: YY_RULE_SETUP #line 87 "flex.l" TOKEN(BY) YY_BREAK case 62: YY_RULE_SETUP #line 88 "flex.l" TOKEN(OP_MOD) YY_BREAK case 63: YY_RULE_SETUP #line 89 "flex.l" TOKEN(VALUES) YY_BREAK case 64: YY_RULE_SETUP #line 90 "flex.l" TOKEN(IS) YY_BREAK case 65: YY_RULE_SETUP #line 91 "flex.l" TOKEN(ROW) YY_BREAK case 66: YY_RULE_SETUP #line 92 "flex.l" TOKEN(FUNCTION) YY_BREAK case 67: YY_RULE_SETUP #line 93 "flex.l" TOKEN(END) YY_BREAK case 68: YY_RULE_SETUP #line 94 "flex.l" TOKEN(RECURSIVE) YY_BREAK case 69: YY_RULE_SETUP #line 95 "flex.l" TOKEN(FOR) YY_BREAK case 70: YY_RULE_SETUP #line 96 "flex.l" TOKEN(UNION) YY_BREAK case 71: YY_RULE_SETUP #line 97 "flex.l" TOKEN(NULLS) YY_BREAK case 72: YY_RULE_SETUP #line 98 "flex.l" TOKEN(UPDATE) YY_BREAK case 73: YY_RULE_SETUP #line 99 "flex.l" TOKEN(ELSE) YY_BREAK case 74: YY_RULE_SETUP #line 100 "flex.l" TOKEN(RANGE) YY_BREAK case 75: YY_RULE_SETUP #line 101 "flex.l" TOKEN(OFFSET) YY_BREAK case 76: YY_RULE_SETUP #line 102 "flex.l" TOKEN(INDEXED) YY_BREAK case 77: YY_RULE_SETUP #line 103 "flex.l" TOKEN(INSTEAD) YY_BREAK case 78: YY_RULE_SETUP #line 104 "flex.l" TOKEN(NCHAR) YY_BREAK case 79: YY_RULE_SETUP #line 105 "flex.l" TOKEN(AND) YY_BREAK case 80: YY_RULE_SETUP #line 106 "flex.l" TOKEN(REINDEX) YY_BREAK case 81: YY_RULE_SETUP #line 107 "flex.l" TOKEN(INITIALLY) YY_BREAK case 82: YY_RULE_SETUP #line 108 "flex.l" TOKEN(YEAR) YY_BREAK case 83: YY_RULE_SETUP #line 109 "flex.l" TOKEN(PRECISION) YY_BREAK case 84: YY_RULE_SETUP #line 110 "flex.l" TOKEN(FILTER) YY_BREAK case 85: YY_RULE_SETUP #line 111 "flex.l" TOKEN(NOT) YY_BREAK case 86: YY_RULE_SETUP #line 112 "flex.l" TOKEN(VIEW) YY_BREAK case 87: YY_RULE_SETUP #line 113 "flex.l" TOKEN(DEFFERRABLE) YY_BREAK case 88: YY_RULE_SETUP #line 114 "flex.l" TOKEN(REAL) YY_BREAK case 89: YY_RULE_SETUP #line 115 "flex.l" TOKEN(THEN) YY_BREAK case 90: YY_RULE_SETUP #line 116 "flex.l" TOKEN(OPTION) YY_BREAK case 91: YY_RULE_SETUP #line 117 "flex.l" TOKEN(DEFAULT) YY_BREAK case 92: YY_RULE_SETUP #line 118 "flex.l" TOKEN(GLOBAL) YY_BREAK case 93: YY_RULE_SETUP #line 119 "flex.l" TOKEN(CROSS) YY_BREAK case 94: YY_RULE_SETUP #line 120 "flex.l" TOKEN(CHAR) YY_BREAK case 95: YY_RULE_SETUP #line 121 "flex.l" TOKEN(REFERENCES) YY_BREAK case 96: YY_RULE_SETUP #line 122 "flex.l" TOKEN(OP_XOR) YY_BREAK case 97: YY_RULE_SETUP #line 123 "flex.l" TOKEN(GROUP) YY_BREAK case 98: YY_RULE_SETUP #line 124 "flex.l" TOKEN(CASE) YY_BREAK case 99: YY_RULE_SETUP #line 125 "flex.l" TOKEN(SET) YY_BREAK case 100: YY_RULE_SETUP #line 126 "flex.l" TOKEN(HOUR) YY_BREAK case 101: YY_RULE_SETUP #line 127 "flex.l" TOKEN(NO) YY_BREAK case 102: YY_RULE_SETUP #line 128 "flex.l" TOKEN(COLUMN) YY_BREAK case 103: YY_RULE_SETUP #line 129 "flex.l" TOKEN(LOCAL) YY_BREAK case 104: YY_RULE_SETUP #line 130 "flex.l" TOKEN(DROP) YY_BREAK case 105: YY_RULE_SETUP #line 131 "flex.l" TOKEN(REPLACE) YY_BREAK case 106: YY_RULE_SETUP #line 132 "flex.l" TOKEN(ASC) YY_BREAK case 107: YY_RULE_SETUP #line 133 "flex.l" TOKEN(OP_COMMA) YY_BREAK case 108: YY_RULE_SETUP #line 134 "flex.l" TOKEN(TABLE) YY_BREAK case 109: YY_RULE_SETUP #line 135 "flex.l" TOKEN(ARRAY) YY_BREAK case 110: YY_RULE_SETUP #line 136 "flex.l" TOKEN(IF) YY_BREAK case 111: YY_RULE_SETUP #line 137 "flex.l" TOKEN(EXTRACT) YY_BREAK case 112: YY_RULE_SETUP #line 138 "flex.l" TOKEN(LEFT) YY_BREAK case 113: YY_RULE_SETUP #line 139 "flex.l" TOKEN(OUTER) YY_BREAK case 114: YY_RULE_SETUP #line 140 "flex.l" TOKEN(DECIMAL) YY_BREAK case 115: YY_RULE_SETUP #line 141 "flex.l" TOKEN(PARTITION) YY_BREAK case 116: YY_RULE_SETUP #line 142 "flex.l" TOKEN(CASCADE) YY_BREAK case 117: YY_RULE_SETUP #line 143 "flex.l" TOKEN(ADD) YY_BREAK case 118: YY_RULE_SETUP #line 144 "flex.l" TOKEN(OTHERS) YY_BREAK case 119: YY_RULE_SETUP #line 145 "flex.l" TOKEN(OP_LESSEQ) YY_BREAK case 120: YY_RULE_SETUP #line 146 "flex.l" TOKEN(MATCH) YY_BREAK case 121: YY_RULE_SETUP #line 147 "flex.l" TOKEN(ALL) YY_BREAK case 122: YY_RULE_SETUP #line 148 "flex.l" TOKEN(ROWS) YY_BREAK case 123: YY_RULE_SETUP #line 149 "flex.l" TOKEN(JOIN) YY_BREAK case 124: YY_RULE_SETUP #line 150 "flex.l" TOKEN(LIKE) YY_BREAK case 125: YY_RULE_SETUP #line 151 "flex.l" TOKEN(INTEGER) YY_BREAK case 126: YY_RULE_SETUP #line 152 "flex.l" TOKEN(OP_RP) YY_BREAK case 127: YY_RULE_SETUP #line 153 "flex.l" TOKEN(INT) YY_BREAK case 128: YY_RULE_SETUP #line 154 "flex.l" TOKEN(BOOLEAN) YY_BREAK case 129: YY_RULE_SETUP #line 155 "flex.l" TOKEN(KEY) YY_BREAK case 130: YY_RULE_SETUP #line 156 "flex.l" TOKEN(EACH) YY_BREAK case 131: YY_RULE_SETUP #line 157 "flex.l" TOKEN(USING) YY_BREAK case 132: YY_RULE_SETUP #line 158 "flex.l" TOKEN(RENAME) YY_BREAK case 133: YY_RULE_SETUP #line 159 "flex.l" TOKEN(DO) YY_BREAK case 134: YY_RULE_SETUP #line 160 "flex.l" TOKEN(FLOAT) YY_BREAK case 135: YY_RULE_SETUP #line 161 "flex.l" TOKEN(OP_LP) YY_BREAK case 136: YY_RULE_SETUP #line 162 "flex.l" TOKEN(CHARACTER) YY_BREAK case 137: YY_RULE_SETUP #line 163 "flex.l" TOKEN(UMINUS) YY_BREAK case 138: YY_RULE_SETUP #line 164 "flex.l" TOKEN(CAST) YY_BREAK case 139: YY_RULE_SETUP #line 165 "flex.l" TOKEN(GROUPS) YY_BREAK case 140: YY_RULE_SETUP #line 166 "flex.l" TOKEN(NULL) YY_BREAK case 141: YY_RULE_SETUP #line 167 "flex.l" TOKEN(SMALLINT) YY_BREAK case 142: YY_RULE_SETUP #line 168 "flex.l" TOKEN(INSERT) YY_BREAK case 143: YY_RULE_SETUP #line 169 "flex.l" TOKEN(TEMPORARY) YY_BREAK case 144: YY_RULE_SETUP #line 170 "flex.l" TOKEN(CONSTRAINT) YY_BREAK case 145: YY_RULE_SETUP #line 171 "flex.l" TOKEN(CREATE) YY_BREAK case 146: YY_RULE_SETUP #line 172 "flex.l" TOKEN(OP_LBRACKET) YY_BREAK case 147: YY_RULE_SETUP #line 173 "flex.l" TOKEN(WHEN) YY_BREAK case 148: YY_RULE_SETUP #line 174 "flex.l" TOKEN(IMMEDIATE) YY_BREAK case 149: YY_RULE_SETUP #line 175 "flex.l" TOKEN(TO) YY_BREAK case 150: YY_RULE_SETUP #line 176 "flex.l" TOKEN(EXCLUDE) YY_BREAK case 151: YY_RULE_SETUP #line 177 "flex.l" TOKEN(DAY) YY_BREAK case 152: YY_RULE_SETUP #line 178 "flex.l" TOKEN(CONFLICT) YY_BREAK case 153: YY_RULE_SETUP #line 179 "flex.l" TOKEN(OP_RBRACKET) YY_BREAK case 154: YY_RULE_SETUP #line 180 "flex.l" TOKEN(EXECUTE) YY_BREAK case 155: YY_RULE_SETUP #line 181 "flex.l" TOKEN(EXISTS) YY_BREAK case 156: YY_RULE_SETUP #line 182 "flex.l" TOKEN(INTO) YY_BREAK case 157: YY_RULE_SETUP #line 183 "flex.l" TOKEN(OP_DIVIDE) YY_BREAK case 158: YY_RULE_SETUP #line 184 "flex.l" TOKEN(CASCADED) YY_BREAK case 159: YY_RULE_SETUP #line 185 "flex.l" TOKEN(ISNULL) YY_BREAK case 160: YY_RULE_SETUP #line 186 "flex.l" TOKEN(AS) YY_BREAK case 161: YY_RULE_SETUP #line 187 "flex.l" TOKEN(INNER) YY_BREAK case 162: YY_RULE_SETUP #line 188 "flex.l" TOKEN(INTERSECT) YY_BREAK case 163: YY_RULE_SETUP #line 189 "flex.l" TOKEN(IN) YY_BREAK case 164: YY_RULE_SETUP #line 190 "flex.l" TOKEN(OP_EQUAL) YY_BREAK case 165: YY_RULE_SETUP #line 191 "flex.l" TOKEN(VARCHAR) YY_BREAK case 166: YY_RULE_SETUP #line 192 "flex.l" TOKEN(ALTER) YY_BREAK case 167: YY_RULE_SETUP #line 193 "flex.l" TOKEN(DESC) YY_BREAK case 168: YY_RULE_SETUP #line 194 "flex.l" TOKEN(FROM) YY_BREAK case 169: YY_RULE_SETUP #line 195 "flex.l" TOKEN(TEMP) YY_BREAK case 170: YY_RULE_SETUP #line 196 "flex.l" TOKEN(UNLOGGED) YY_BREAK case 171: YY_RULE_SETUP #line 197 "flex.l" TOKEN(SECOND) YY_BREAK case 172: YY_RULE_SETUP #line 198 "flex.l" TOKEN(WINDOW) YY_BREAK case 173: YY_RULE_SETUP #line 199 "flex.l" TOKEN(NOTHING) YY_BREAK case 174: YY_RULE_SETUP #line 200 "flex.l" TOKEN(HAVING) YY_BREAK case 175: #line 202 "flex.l" case 176: YY_RULE_SETUP #line 202 "flex.l" { yylval->fval = atof(yytext); return SQL_FLOATLITERAL; } YY_BREAK case 177: YY_RULE_SETUP #line 207 "flex.l" { yylval->ival = atol(yytext); return SQL_INTLITERAL; } YY_BREAK case 178: YY_RULE_SETUP #line 212 "flex.l" { std::string s(yytext); yylval->sval = strdup(s.substr(1, s.size() - 1).c_str()); return SQL_STRINGLITERAL; } YY_BREAK case 179: YY_RULE_SETUP #line 218 "flex.l" { yylval->sval = strdup(yytext); return SQL_IDENTIFIER; } YY_BREAK case 180: YY_RULE_SETUP #line 223 "flex.l" { BEGIN singlequotedstring; strbuf = std::stringstream{}; strbuf << '\''; } YY_BREAK case 181: YY_RULE_SETUP #line 227 "flex.l" { strbuf << '\''; } YY_BREAK case 182: /* rule 182 can match eol */ YY_RULE_SETUP #line 231 "flex.l" { strbuf << yytext; } YY_BREAK case 183: YY_RULE_SETUP #line 235 "flex.l" { BEGIN 0; strbuf << '\''; yylval->sval = strdup(strbuf.str().c_str()); return SQL_STRINGLITERAL; } YY_BREAK case YY_STATE_EOF(singlequotedstring): #line 242 "flex.l" { return 0; } YY_BREAK case 184: /* rule 184 can match eol */ YY_RULE_SETUP #line 246 "flex.l" { } YY_BREAK case 185: YY_RULE_SETUP #line 249 "flex.l" { return 0; } YY_BREAK case 186: YY_RULE_SETUP #line 253 "flex.l" ECHO; YY_BREAK #line 2496 "flex_lexer.cpp" case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(COMMENT): yyterminate(); case YY_END_OF_BUFFER: { /* Amount of text matched not including the EOB char. */ int yy_amount_of_matched_text = (int)(yy_cp - yyg->yytext_ptr) - 1; /* Undo the effects of YY_DO_BEFORE_ACTION. */ *yy_cp = yyg->yy_hold_char; YY_RESTORE_YY_MORE_OFFSET if (YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW) { /* We're scanning a new file or input source. It's * possible that this happened because the user * just pointed yyin at a new source and called * yylex(). If so, then we have to assure * consistency between YY_CURRENT_BUFFER and our * globals. Here is the right place to do so, because * this is the first action (other than possibly a * back-up) that will match for the new input source. */ yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; } /* Note that here we test for yy_c_buf_p "<=" to the position * of the first EOB in the buffer, since yy_c_buf_p will * already have been incremented past the NUL character * (since all states make transitions on EOB to the * end-of-buffer state). Contrast this with the test * in input(). */ if (yyg->yy_c_buf_p <= &YY_CURRENT_BUFFER_LVALUE ->yy_ch_buf[yyg->yy_n_chars]) { /* This was really a NUL. */ yy_state_type yy_next_state; yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state(yyscanner); /* Okay, we're now positioned to make the NUL * transition. We couldn't have * yy_get_previous_state() go ahead and do it * for us because it doesn't know how to deal * with the possibility of jamming (and we don't * want to build jamming into it because then it * will run more slowly). */ yy_next_state = yy_try_NUL_trans(yy_current_state, yyscanner); yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; if (yy_next_state) { /* Consume the NUL. */ yy_cp = ++yyg->yy_c_buf_p; yy_current_state = yy_next_state; goto yy_match; } else { yy_cp = yyg->yy_last_accepting_cpos; yy_current_state = yyg->yy_last_accepting_state; goto yy_find_action; } } else switch (yy_get_next_buffer(yyscanner)) { case EOB_ACT_END_OF_FILE: { yyg->yy_did_buffer_switch_on_eof = 0; if (yywrap(yyscanner)) { /* Note: because we've taken care in * yy_get_next_buffer() to have set up * yytext, we can now set up * yy_c_buf_p so that if some total * hoser (like flex itself) wants to * call the scanner after we return the * YY_NULL, it'll still work - another * YY_NULL will get returned. */ yyg->yy_c_buf_p = yyg->yytext_ptr + YY_MORE_ADJ; yy_act = YY_STATE_EOF(YY_START); goto do_action; } else { if (!yyg->yy_did_buffer_switch_on_eof) YY_NEW_FILE; } break; } case EOB_ACT_CONTINUE_SCAN: yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state(yyscanner); yy_cp = yyg->yy_c_buf_p; yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; goto yy_match; case EOB_ACT_LAST_MATCH: yyg->yy_c_buf_p = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars]; yy_current_state = yy_get_previous_state(yyscanner); yy_cp = yyg->yy_c_buf_p; yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; goto yy_find_action; } break; } default: YY_FATAL_ERROR("fatal flex scanner internal error--no action found"); } /* end of action switch */ } /* end of scanning one token */ } /* end of user's declarations */ } /* end of yylex */ /* yy_get_next_buffer - try to read in a new buffer * * Returns a code representing an action: * EOB_ACT_LAST_MATCH - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position * EOB_ACT_END_OF_FILE - end of file */ static int yy_get_next_buffer(yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; char *source = yyg->yytext_ptr; int number_to_move, i; int ret_val; if (yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1]) YY_FATAL_ERROR("fatal flex scanner internal error--end of buffer missed"); if (YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0) { /* Don't try to fill the buffer, so this is an EOF. */ if (yyg->yy_c_buf_p - yyg->yytext_ptr - YY_MORE_ADJ == 1) { /* We matched a single character, the EOB, so * treat this as a final EOF. */ return EOB_ACT_END_OF_FILE; } else { /* We matched some text prior to the EOB, first * process it. */ return EOB_ACT_LAST_MATCH; } } /* Try to read more data. */ /* First move last chars to start of buffer. */ number_to_move = (int)(yyg->yy_c_buf_p - yyg->yytext_ptr - 1); for (i = 0; i < number_to_move; ++i) *(dest++) = *(source++); if (YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING) /* don't do the read, it's not guaranteed to return an EOF, * just force an EOF */ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0; else { int num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while (num_to_read <= 0) { /* Not enough room in the buffer - grow it. */ /* just a shorter name for the current buffer */ YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE; int yy_c_buf_p_offset = (int)(yyg->yy_c_buf_p - b->yy_ch_buf); if (b->yy_is_our_buffer) { int new_size = b->yy_buf_size * 2; if (new_size <= 0) b->yy_buf_size += b->yy_buf_size / 8; else b->yy_buf_size *= 2; b->yy_ch_buf = (char *) /* Include room in for 2 EOB chars. */ yyrealloc((void *)b->yy_ch_buf, (yy_size_t)(b->yy_buf_size + 2), yyscanner); } else /* Can't grow it, we don't own it. */ b->yy_ch_buf = NULL; if (!b->yy_ch_buf) YY_FATAL_ERROR("fatal error - scanner input buffer overflow"); yyg->yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset]; num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; } if (num_to_read > YY_READ_BUF_SIZE) num_to_read = YY_READ_BUF_SIZE; /* Read in more data. */ YY_INPUT((&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), yyg->yy_n_chars, num_to_read); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; } if (yyg->yy_n_chars == 0) { if (number_to_move == YY_MORE_ADJ) { ret_val = EOB_ACT_END_OF_FILE; yyrestart(yyin, yyscanner); } else { ret_val = EOB_ACT_LAST_MATCH; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_EOF_PENDING; } } else ret_val = EOB_ACT_CONTINUE_SCAN; if ((yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { /* Extend the array by 50%, plus the number we really need. */ int new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1); YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *)yyrealloc((void *)YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t)new_size, yyscanner); if (!YY_CURRENT_BUFFER_LVALUE->yy_ch_buf) YY_FATAL_ERROR("out of dynamic memory in yy_get_next_buffer()"); /* "- 2" to take care of EOB's */ YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int)(new_size - 2); } yyg->yy_n_chars += number_to_move; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR; yyg->yytext_ptr = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; return ret_val; } /* yy_get_previous_state - get the state just before the EOB char was reached */ static yy_state_type yy_get_previous_state(yyscan_t yyscanner) { yy_state_type yy_current_state; char *yy_cp; struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; yy_current_state = yyg->yy_start; for (yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp) { YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); if (yy_accept[yy_current_state]) { yyg->yy_last_accepting_state = yy_current_state; yyg->yy_last_accepting_cpos = yy_cp; } while (yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state) { yy_current_state = (int)yy_def[yy_current_state]; if (yy_current_state >= 664) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; } return yy_current_state; } /* yy_try_NUL_trans - try to make a transition on the NUL character * * synopsis * next_state = yy_try_NUL_trans( current_state ); */ static yy_state_type yy_try_NUL_trans(yy_state_type yy_current_state, yyscan_t yyscanner) { int yy_is_jam; struct yyguts_t *yyg = (struct yyguts_t *) yyscanner; /* This var may be unused depending upon options. */ char *yy_cp = yyg->yy_c_buf_p; YY_CHAR yy_c = 1; if (yy_accept[yy_current_state]) { yyg->yy_last_accepting_state = yy_current_state; yyg->yy_last_accepting_cpos = yy_cp; } while (yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state) { yy_current_state = (int)yy_def[yy_current_state]; if (yy_current_state >= 664) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; yy_is_jam = (yy_current_state == 663); (void)yyg; return yy_is_jam ? 0 : yy_current_state; } #ifndef YY_NO_UNPUT #endif #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput(yyscan_t yyscanner) #else static int input(yyscan_t yyscanner) #endif { int c; struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; *yyg->yy_c_buf_p = yyg->yy_hold_char; if (*yyg->yy_c_buf_p == YY_END_OF_BUFFER_CHAR) { /* yy_c_buf_p now points to the character we want to return. * If this occurs *before* the EOB characters, then it's a * valid NUL; if not, then we've hit the end of the buffer. */ if (yyg->yy_c_buf_p < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars]) /* This was really a NUL. */ *yyg->yy_c_buf_p = '\0'; else { /* need more input */ int offset = (int)(yyg->yy_c_buf_p - yyg->yytext_ptr); ++yyg->yy_c_buf_p; switch (yy_get_next_buffer(yyscanner)) { case EOB_ACT_LAST_MATCH: /* This happens because yy_g_n_b() * sees that we've accumulated a * token and flags that we need to * try matching the token before * proceeding. But for input(), * there's no matching to consider. * So convert the EOB_ACT_LAST_MATCH * to EOB_ACT_END_OF_FILE. */ /* Reset buffer status. */ yyrestart(yyin, yyscanner); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { if (yywrap(yyscanner)) return 0; if (!yyg->yy_did_buffer_switch_on_eof) YY_NEW_FILE; #ifdef __cplusplus return yyinput(yyscanner); #else return input(yyscanner); #endif } case EOB_ACT_CONTINUE_SCAN: yyg->yy_c_buf_p = yyg->yytext_ptr + offset; break; } } } c = *(unsigned char *)yyg->yy_c_buf_p; /* cast for 8-bit char's */ *yyg->yy_c_buf_p = '\0'; /* preserve yytext */ yyg->yy_hold_char = *++yyg->yy_c_buf_p; return c; } #endif /* ifndef YY_NO_INPUT */ /** Immediately switch to a different input stream. * @param input_file A readable stream. * @param yyscanner The scanner object. * @note This function does not reset the start condition to @c INITIAL . */ void yyrestart(FILE *input_file, yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; if (!YY_CURRENT_BUFFER) { yyensure_buffer_stack(yyscanner); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer(yyin, YY_BUF_SIZE, yyscanner); } yy_init_buffer(YY_CURRENT_BUFFER, input_file, yyscanner); yy_load_buffer_state(yyscanner); } /** Switch to a different input buffer. * @param new_buffer The new input buffer. * @param yyscanner The scanner object. */ void yy_switch_to_buffer(YY_BUFFER_STATE new_buffer, yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; /* TODO. We should be able to replace this entire function body * with * yypop_buffer_state(); * yypush_buffer_state(new_buffer); */ yyensure_buffer_stack(yyscanner); if (YY_CURRENT_BUFFER == new_buffer) return; if (YY_CURRENT_BUFFER) { /* Flush out information for old buffer. */ *yyg->yy_c_buf_p = yyg->yy_hold_char; YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; } YY_CURRENT_BUFFER_LVALUE = new_buffer; yy_load_buffer_state(yyscanner); /* We don't actually know whether we did this switch during * EOF (yywrap()) processing, but the only time this flag * is looked at is after yywrap() is called, so it's safe * to go ahead and always set it. */ yyg->yy_did_buffer_switch_on_eof = 1; } static void yy_load_buffer_state(yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; yyg->yytext_ptr = yyg->yy_c_buf_p = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; yyg->yy_hold_char = *yyg->yy_c_buf_p; } /** Allocate and initialize an input buffer state. * @param file A readable stream. * @param size The character buffer size in bytes. When in doubt, use @c * YY_BUF_SIZE. * @param yyscanner The scanner object. * @return the allocated buffer state. */ YY_BUFFER_STATE yy_create_buffer(FILE *file, int size, yyscan_t yyscanner) { YY_BUFFER_STATE b; b = (YY_BUFFER_STATE)yyalloc(sizeof(struct yy_buffer_state), yyscanner); if (!b) YY_FATAL_ERROR("out of dynamic memory in yy_create_buffer()"); b->yy_buf_size = size; /* yy_ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. */ b->yy_ch_buf = (char *)yyalloc((yy_size_t)(b->yy_buf_size + 2), yyscanner); if (!b->yy_ch_buf) YY_FATAL_ERROR("out of dynamic memory in yy_create_buffer()"); b->yy_is_our_buffer = 1; yy_init_buffer(b, file, yyscanner); return b; } /** Destroy the buffer. * @param b a buffer created with yy_create_buffer() * @param yyscanner The scanner object. */ void yy_delete_buffer(YY_BUFFER_STATE b, yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; if (!b) return; if (b == YY_CURRENT_BUFFER) /* Not sure if we should pop here. */ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE)0; if (b->yy_is_our_buffer) yyfree((void *)b->yy_ch_buf, yyscanner); yyfree((void *)b, yyscanner); } /* Initializes or reinitializes a buffer. * This function is sometimes called more than once on the same buffer, * such as during a yyrestart() or at EOF. */ static void yy_init_buffer(YY_BUFFER_STATE b, FILE *file, yyscan_t yyscanner) { int oerrno = errno; struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; yy_flush_buffer(b, yyscanner); b->yy_input_file = file; b->yy_fill_buffer = 1; /* If b is the current buffer, then yy_init_buffer was _probably_ * called from yyrestart() or through yy_get_next_buffer. * In that case, we don't want to reset the lineno or column. */ if (b != YY_CURRENT_BUFFER) { b->yy_bs_lineno = 1; b->yy_bs_column = 0; } b->yy_is_interactive = 0; errno = oerrno; } /** Discard all buffered characters. On the next scan, YY_INPUT will be called. * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. * @param yyscanner The scanner object. */ void yy_flush_buffer(YY_BUFFER_STATE b, yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; if (!b) return; b->yy_n_chars = 0; /* We always need two end-of-buffer characters. The first causes * a transition to the end-of-buffer state. The second causes * a jam in that state. */ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; b->yy_buf_pos = &b->yy_ch_buf[0]; b->yy_at_bol = 1; b->yy_buffer_status = YY_BUFFER_NEW; if (b == YY_CURRENT_BUFFER) yy_load_buffer_state(yyscanner); } /** Pushes the new state onto the stack. The new state becomes * the current state. This function will allocate the stack * if necessary. * @param new_buffer The new state. * @param yyscanner The scanner object. */ void yypush_buffer_state(YY_BUFFER_STATE new_buffer, yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; if (new_buffer == NULL) return; yyensure_buffer_stack(yyscanner); /* This block is copied from yy_switch_to_buffer. */ if (YY_CURRENT_BUFFER) { /* Flush out information for old buffer. */ *yyg->yy_c_buf_p = yyg->yy_hold_char; YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; } /* Only push if top exists. Otherwise, replace top. */ if (YY_CURRENT_BUFFER) yyg->yy_buffer_stack_top++; YY_CURRENT_BUFFER_LVALUE = new_buffer; /* copied from yy_switch_to_buffer. */ yy_load_buffer_state(yyscanner); yyg->yy_did_buffer_switch_on_eof = 1; } /** Removes and deletes the top of the stack, if present. * The next element becomes the new top. * @param yyscanner The scanner object. */ void yypop_buffer_state(yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; if (!YY_CURRENT_BUFFER) return; yy_delete_buffer(YY_CURRENT_BUFFER, yyscanner); YY_CURRENT_BUFFER_LVALUE = NULL; if (yyg->yy_buffer_stack_top > 0) --yyg->yy_buffer_stack_top; if (YY_CURRENT_BUFFER) { yy_load_buffer_state(yyscanner); yyg->yy_did_buffer_switch_on_eof = 1; } } /* Allocates the stack if it does not exist. * Guarantees space for at least one push. */ static void yyensure_buffer_stack(yyscan_t yyscanner) { yy_size_t num_to_alloc; struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; if (!yyg->yy_buffer_stack) { /* First allocation is just for 2 elements, since we don't know if this * scanner will even need a stack. We use 2 instead of 1 to avoid an * immediate realloc on the next call. */ num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */ yyg->yy_buffer_stack = (struct yy_buffer_state **)yyalloc( num_to_alloc * sizeof(struct yy_buffer_state *), yyscanner); if (!yyg->yy_buffer_stack) YY_FATAL_ERROR("out of dynamic memory in yyensure_buffer_stack()"); memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state *)); yyg->yy_buffer_stack_max = num_to_alloc; yyg->yy_buffer_stack_top = 0; return; } if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1) { /* Increase the buffer to prepare for a possible push. */ yy_size_t grow_size = 8 /* arbitrary grow size */; num_to_alloc = yyg->yy_buffer_stack_max + grow_size; yyg->yy_buffer_stack = (struct yy_buffer_state **)yyrealloc( yyg->yy_buffer_stack, num_to_alloc * sizeof(struct yy_buffer_state *), yyscanner); if (!yyg->yy_buffer_stack) YY_FATAL_ERROR("out of dynamic memory in yyensure_buffer_stack()"); /* zero only the new slots.*/ memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state *)); yyg->yy_buffer_stack_max = num_to_alloc; } } /** Setup the input buffer state to scan directly from a user-specified * character buffer. * @param base the character buffer * @param size the size in bytes of the character buffer * @param yyscanner The scanner object. * @return the newly allocated buffer state object. */ YY_BUFFER_STATE yy_scan_buffer(char *base, yy_size_t size, yyscan_t yyscanner) { YY_BUFFER_STATE b; if (size < 2 || base[size - 2] != YY_END_OF_BUFFER_CHAR || base[size - 1] != YY_END_OF_BUFFER_CHAR) /* They forgot to leave room for the EOB's. */ return NULL; b = (YY_BUFFER_STATE)yyalloc(sizeof(struct yy_buffer_state), yyscanner); if (!b) YY_FATAL_ERROR("out of dynamic memory in yy_scan_buffer()"); b->yy_buf_size = (int)(size - 2); /* "- 2" to take care of EOB's */ b->yy_buf_pos = b->yy_ch_buf = base; b->yy_is_our_buffer = 0; b->yy_input_file = NULL; b->yy_n_chars = b->yy_buf_size; b->yy_is_interactive = 0; b->yy_at_bol = 1; b->yy_fill_buffer = 0; b->yy_buffer_status = YY_BUFFER_NEW; yy_switch_to_buffer(b, yyscanner); return b; } /** Setup the input buffer state to scan a string. The next call to yylex() will * scan from a @e copy of @a str. * @param yystr a NUL-terminated string to scan * @param yyscanner The scanner object. * @return the newly allocated buffer state object. * @note If you want to scan bytes that may contain NUL values, then use * yy_scan_bytes() instead. */ YY_BUFFER_STATE yy_scan_string(const char *yystr, yyscan_t yyscanner) { return yy_scan_bytes(yystr, (int)strlen(yystr), yyscanner); } /** Setup the input buffer state to scan the given bytes. The next call to * yylex() will scan from a @e copy of @a bytes. * @param yybytes the byte buffer to scan * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. * @param yyscanner The scanner object. * @return the newly allocated buffer state object. */ YY_BUFFER_STATE yy_scan_bytes(const char *yybytes, int _yybytes_len, yyscan_t yyscanner) { YY_BUFFER_STATE b; char *buf; yy_size_t n; int i; /* Get memory for full buffer, including space for trailing EOB's. */ n = (yy_size_t)(_yybytes_len + 2); buf = (char *)yyalloc(n, yyscanner); if (!buf) YY_FATAL_ERROR("out of dynamic memory in yy_scan_bytes()"); for (i = 0; i < _yybytes_len; ++i) buf[i] = yybytes[i]; buf[_yybytes_len] = buf[_yybytes_len + 1] = YY_END_OF_BUFFER_CHAR; b = yy_scan_buffer(buf, n, yyscanner); if (!b) YY_FATAL_ERROR("bad buffer in yy_scan_bytes()"); /* It's okay to grow etc. this buffer, and we should throw it * away when we're done. */ b->yy_is_our_buffer = 1; return b; } #ifndef YY_EXIT_FAILURE #define YY_EXIT_FAILURE 2 #endif static void yynoreturn yy_fatal_error(const char *msg, yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; (void)yyg; fprintf(stderr, "%s\n", msg); exit(YY_EXIT_FAILURE); } /* Redefine yyless() so it works in section 3 code. */ #undef yyless #define yyless(n) \ do { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg); \ yytext[yyleng] = yyg->yy_hold_char; \ yyg->yy_c_buf_p = yytext + yyless_macro_arg; \ yyg->yy_hold_char = *yyg->yy_c_buf_p; \ *yyg->yy_c_buf_p = '\0'; \ yyleng = yyless_macro_arg; \ } while (0) /* Accessor methods (get/set functions) to struct members. */ /** Get the user-defined data for this scanner. * @param yyscanner The scanner object. */ YY_EXTRA_TYPE yyget_extra(yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; return yyextra; } /** Get the current line number. * @param yyscanner The scanner object. */ int yyget_lineno(yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; if (!YY_CURRENT_BUFFER) return 0; return yylineno; } /** Get the current column number. * @param yyscanner The scanner object. */ int yyget_column(yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; if (!YY_CURRENT_BUFFER) return 0; return yycolumn; } /** Get the input stream. * @param yyscanner The scanner object. */ FILE *yyget_in(yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; return yyin; } /** Get the output stream. * @param yyscanner The scanner object. */ FILE *yyget_out(yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; return yyout; } /** Get the length of the current token. * @param yyscanner The scanner object. */ int yyget_leng(yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; return yyleng; } /** Get the current token. * @param yyscanner The scanner object. */ char *yyget_text(yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; return yytext; } /** Set the user-defined data. This data is never touched by the scanner. * @param user_defined The data to be associated with this scanner. * @param yyscanner The scanner object. */ void yyset_extra(YY_EXTRA_TYPE user_defined, yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; yyextra = user_defined; } /** Set the current line number. * @param _line_number line number * @param yyscanner The scanner object. */ void yyset_lineno(int _line_number, yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; /* lineno is only valid if an input buffer exists. */ if (!YY_CURRENT_BUFFER) YY_FATAL_ERROR("yyset_lineno called with no buffer"); yylineno = _line_number; } /** Set the current column. * @param _column_no column number * @param yyscanner The scanner object. */ void yyset_column(int _column_no, yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; /* column is only valid if an input buffer exists. */ if (!YY_CURRENT_BUFFER) YY_FATAL_ERROR("yyset_column called with no buffer"); yycolumn = _column_no; } /** Set the input stream. This does not discard the current * input buffer. * @param _in_str A readable stream. * @param yyscanner The scanner object. * @see yy_switch_to_buffer */ void yyset_in(FILE *_in_str, yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; yyin = _in_str; } void yyset_out(FILE *_out_str, yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; yyout = _out_str; } int yyget_debug(yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; return yy_flex_debug; } void yyset_debug(int _bdebug, yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; yy_flex_debug = _bdebug; } /* Accessor methods for yylval and yylloc */ YYSTYPE *yyget_lval(yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; return yylval; } void yyset_lval(YYSTYPE *yylval_param, yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; yylval = yylval_param; } YYLTYPE *yyget_lloc(yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; return yylloc; } void yyset_lloc(YYLTYPE *yylloc_param, yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; yylloc = yylloc_param; } /* User-visible API */ /* yylex_init is special because it creates the scanner itself, so it is * the ONLY reentrant function that doesn't take the scanner as the last * argument. That's why we explicitly handle the declaration, instead of using * our macros. */ int yylex_init(yyscan_t *ptr_yy_globals) { if (ptr_yy_globals == NULL) { errno = EINVAL; return 1; } *ptr_yy_globals = (yyscan_t)yyalloc(sizeof(struct yyguts_t), NULL); if (*ptr_yy_globals == NULL) { errno = ENOMEM; return 1; } /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for * releases. */ memset(*ptr_yy_globals, 0x00, sizeof(struct yyguts_t)); return yy_init_globals(*ptr_yy_globals); } /* yylex_init_extra has the same functionality as yylex_init, but follows the * convention of taking the scanner as the last argument. Note however, that * this is a *pointer* to a scanner, as it will be allocated by this call (and * is the reason, too, why this function also must handle its own declaration). * The user defined value in the first argument will be available to yyalloc in * the yyextra field. */ int yylex_init_extra(YY_EXTRA_TYPE yy_user_defined, yyscan_t *ptr_yy_globals) { struct yyguts_t dummy_yyguts; yyset_extra(yy_user_defined, &dummy_yyguts); if (ptr_yy_globals == NULL) { errno = EINVAL; return 1; } *ptr_yy_globals = (yyscan_t)yyalloc(sizeof(struct yyguts_t), &dummy_yyguts); if (*ptr_yy_globals == NULL) { errno = ENOMEM; return 1; } /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */ memset(*ptr_yy_globals, 0x00, sizeof(struct yyguts_t)); yyset_extra(yy_user_defined, *ptr_yy_globals); return yy_init_globals(*ptr_yy_globals); } static int yy_init_globals(yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; /* Initialization is the same as for the non-reentrant scanner. * This function is called from yylex_destroy(), so don't allocate here. */ yyg->yy_buffer_stack = NULL; yyg->yy_buffer_stack_top = 0; yyg->yy_buffer_stack_max = 0; yyg->yy_c_buf_p = NULL; yyg->yy_init = 0; yyg->yy_start = 0; yyg->yy_start_stack_ptr = 0; yyg->yy_start_stack_depth = 0; yyg->yy_start_stack = NULL; /* Defined in main.c */ #ifdef YY_STDINIT yyin = stdin; yyout = stdout; #else yyin = NULL; yyout = NULL; #endif /* For future reference: Set errno on error, since we are called by * yylex_init() */ return 0; } /* yylex_destroy is for both reentrant and non-reentrant scanners. */ int yylex_destroy(yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; /* Pop the buffer stack, destroying each element. */ while (YY_CURRENT_BUFFER) { yy_delete_buffer(YY_CURRENT_BUFFER, yyscanner); YY_CURRENT_BUFFER_LVALUE = NULL; yypop_buffer_state(yyscanner); } /* Destroy the stack itself. */ yyfree(yyg->yy_buffer_stack, yyscanner); yyg->yy_buffer_stack = NULL; /* Destroy the start condition stack. */ yyfree(yyg->yy_start_stack, yyscanner); yyg->yy_start_stack = NULL; /* Reset the globals. This is important in a non-reentrant scanner so the next * time yylex() is called, initialization will occur. */ yy_init_globals(yyscanner); /* Destroy the main struct (reentrant only). */ yyfree(yyscanner, yyscanner); yyscanner = NULL; return 0; } /* * Internal utility routines. */ #ifndef yytext_ptr static void yy_flex_strncpy(char *s1, const char *s2, int n, yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; (void)yyg; int i; for (i = 0; i < n; ++i) s1[i] = s2[i]; } #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen(const char *s, yyscan_t yyscanner) { int n; for (n = 0; s[n]; ++n) ; return n; } #endif void *yyalloc(yy_size_t size, yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; (void)yyg; return malloc(size); } void *yyrealloc(void *ptr, yy_size_t size, yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; (void)yyg; /* The cast to (char *) in the following accommodates both * implementations that use char* generic pointers, and those * that use void* generic pointers. It works with the latter * because both ANSI C and C++ allow castless assignment from * any pointer type to void*, and deal with argument conversions * as though doing an assignment. */ return realloc(ptr, size); } void yyfree(void *ptr, yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; (void)yyg; free((char *)ptr); /* see yyrealloc() for (char *) cast */ } #define YYTABLES_NAME "yytables" #line 253 "flex.l" ================================================ FILE: srcs/internal/postgresql/parser/flex_lexer.h ================================================ #ifndef ff_HEADER_H #define ff_HEADER_H 1 #define ff_IN_HEADER 1 #line 6 "flex_lexer.h" #line 8 "flex_lexer.h" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 6 #define YY_FLEX_SUBMINOR_VERSION 4 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif #ifdef yy_create_buffer #define ff__create_buffer_ALREADY_DEFINED #else #define yy_create_buffer ff__create_buffer #endif #ifdef yy_delete_buffer #define ff__delete_buffer_ALREADY_DEFINED #else #define yy_delete_buffer ff__delete_buffer #endif #ifdef yy_scan_buffer #define ff__scan_buffer_ALREADY_DEFINED #else #define yy_scan_buffer ff__scan_buffer #endif #ifdef yy_scan_string #define ff__scan_string_ALREADY_DEFINED #else #define yy_scan_string ff__scan_string #endif #ifdef yy_scan_bytes #define ff__scan_bytes_ALREADY_DEFINED #else #define yy_scan_bytes ff__scan_bytes #endif #ifdef yy_init_buffer #define ff__init_buffer_ALREADY_DEFINED #else #define yy_init_buffer ff__init_buffer #endif #ifdef yy_flush_buffer #define ff__flush_buffer_ALREADY_DEFINED #else #define yy_flush_buffer ff__flush_buffer #endif #ifdef yy_load_buffer_state #define ff__load_buffer_state_ALREADY_DEFINED #else #define yy_load_buffer_state ff__load_buffer_state #endif #ifdef yy_switch_to_buffer #define ff__switch_to_buffer_ALREADY_DEFINED #else #define yy_switch_to_buffer ff__switch_to_buffer #endif #ifdef yypush_buffer_state #define ff_push_buffer_state_ALREADY_DEFINED #else #define yypush_buffer_state ff_push_buffer_state #endif #ifdef yypop_buffer_state #define ff_pop_buffer_state_ALREADY_DEFINED #else #define yypop_buffer_state ff_pop_buffer_state #endif #ifdef yyensure_buffer_stack #define ff_ensure_buffer_stack_ALREADY_DEFINED #else #define yyensure_buffer_stack ff_ensure_buffer_stack #endif #ifdef yylex #define ff_lex_ALREADY_DEFINED #else #define yylex ff_lex #endif #ifdef yyrestart #define ff_restart_ALREADY_DEFINED #else #define yyrestart ff_restart #endif #ifdef yylex_init #define ff_lex_init_ALREADY_DEFINED #else #define yylex_init ff_lex_init #endif #ifdef yylex_init_extra #define ff_lex_init_extra_ALREADY_DEFINED #else #define yylex_init_extra ff_lex_init_extra #endif #ifdef yylex_destroy #define ff_lex_destroy_ALREADY_DEFINED #else #define yylex_destroy ff_lex_destroy #endif #ifdef yyget_debug #define ff_get_debug_ALREADY_DEFINED #else #define yyget_debug ff_get_debug #endif #ifdef yyset_debug #define ff_set_debug_ALREADY_DEFINED #else #define yyset_debug ff_set_debug #endif #ifdef yyget_extra #define ff_get_extra_ALREADY_DEFINED #else #define yyget_extra ff_get_extra #endif #ifdef yyset_extra #define ff_set_extra_ALREADY_DEFINED #else #define yyset_extra ff_set_extra #endif #ifdef yyget_in #define ff_get_in_ALREADY_DEFINED #else #define yyget_in ff_get_in #endif #ifdef yyset_in #define ff_set_in_ALREADY_DEFINED #else #define yyset_in ff_set_in #endif #ifdef yyget_out #define ff_get_out_ALREADY_DEFINED #else #define yyget_out ff_get_out #endif #ifdef yyset_out #define ff_set_out_ALREADY_DEFINED #else #define yyset_out ff_set_out #endif #ifdef yyget_leng #define ff_get_leng_ALREADY_DEFINED #else #define yyget_leng ff_get_leng #endif #ifdef yyget_text #define ff_get_text_ALREADY_DEFINED #else #define yyget_text ff_get_text #endif #ifdef yyget_lineno #define ff_get_lineno_ALREADY_DEFINED #else #define yyget_lineno ff_get_lineno #endif #ifdef yyset_lineno #define ff_set_lineno_ALREADY_DEFINED #else #define yyset_lineno ff_set_lineno #endif #ifdef yyget_column #define ff_get_column_ALREADY_DEFINED #else #define yyget_column ff_get_column #endif #ifdef yyset_column #define ff_set_column_ALREADY_DEFINED #else #define yyset_column ff_set_column #endif #ifdef yywrap #define ff_wrap_ALREADY_DEFINED #else #define yywrap ff_wrap #endif #ifdef yyget_lval #define ff_get_lval_ALREADY_DEFINED #else #define yyget_lval ff_get_lval #endif #ifdef yyset_lval #define ff_set_lval_ALREADY_DEFINED #else #define yyset_lval ff_set_lval #endif #ifdef yyget_lloc #define ff_get_lloc_ALREADY_DEFINED #else #define yyget_lloc ff_get_lloc #endif #ifdef yyset_lloc #define ff_set_lloc_ALREADY_DEFINED #else #define yyset_lloc ff_set_lloc #endif #ifdef yyalloc #define ff_alloc_ALREADY_DEFINED #else #define yyalloc ff_alloc #endif #ifdef yyrealloc #define ff_realloc_ALREADY_DEFINED #else #define yyrealloc ff_realloc #endif #ifdef yyfree #define ff_free_ALREADY_DEFINED #else #define yyfree ff_free #endif /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ #include #include #include #include /* end standard C headers. */ /* flex integer type definitions */ #ifndef FLEXINT_H #define FLEXINT_H /* C99 systems have . Non-C99 systems may or may not. */ #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. */ #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS 1 #endif #include typedef int8_t flex_int8_t; typedef uint8_t flex_uint8_t; typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; /* Limits of integral types. */ #ifndef INT8_MIN #define INT8_MIN (-128) #endif #ifndef INT16_MIN #define INT16_MIN (-32767 - 1) #endif #ifndef INT32_MIN #define INT32_MIN (-2147483647 - 1) #endif #ifndef INT8_MAX #define INT8_MAX (127) #endif #ifndef INT16_MAX #define INT16_MAX (32767) #endif #ifndef INT32_MAX #define INT32_MAX (2147483647) #endif #ifndef UINT8_MAX #define UINT8_MAX (255U) #endif #ifndef UINT16_MAX #define UINT16_MAX (65535U) #endif #ifndef UINT32_MAX #define UINT32_MAX (4294967295U) #endif #ifndef SIZE_MAX #define SIZE_MAX (~(size_t)0) #endif #endif /* ! C99 */ #endif /* ! FLEXINT_H */ /* begin standard C++ headers. */ /* TODO: this is always defined, so inline it */ #define yyconst const #if defined(__GNUC__) && __GNUC__ >= 3 #define yynoreturn __attribute__((__noreturn__)) #else #define yynoreturn #endif /* An opaque pointer. */ #ifndef YY_TYPEDEF_YY_SCANNER_T #define YY_TYPEDEF_YY_SCANNER_T typedef void *yyscan_t; #endif /* For convenience, these vars (plus the bison vars far below) are macros in the reentrant scanner. */ #define yyin yyg->yyin_r #define yyout yyg->yyout_r #define yyextra yyg->yyextra_r #define yyleng yyg->yyleng_r #define yytext yyg->yytext_r #define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno) #define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column) #define yy_flex_debug yyg->yy_flex_debug_r /* Size of default input buffer. */ #ifndef YY_BUF_SIZE #ifdef __ia64__ /* On IA-64, the buffer size is 16k, not 8k. * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. * Ditto for the __ia64__ case accordingly. */ #define YY_BUF_SIZE 32768 #else #define YY_BUF_SIZE 16384 #endif /* __ia64__ */ #endif #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef size_t yy_size_t; #endif #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct yy_buffer_state { FILE *yy_input_file; char *yy_ch_buf; /* input buffer */ char *yy_buf_pos; /* current position in input buffer */ /* Size of input buffer in bytes, not including room for EOB * characters. */ int yy_buf_size; /* Number of characters read into yy_ch_buf, not including EOB * characters. */ int yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to * delete it. */ int yy_is_our_buffer; /* Whether this is an "interactive" input source; if so, and * if we're using stdio for input, then we want to use getc() * instead of fread(), to make sure we stop fetching input after * each newline. */ int yy_is_interactive; /* Whether we're considered to be at the beginning of a line. * If so, '^' rules will be active on the next match, otherwise * not. */ int yy_at_bol; int yy_bs_lineno; /**< The line count. */ int yy_bs_column; /**< The column count. */ /* Whether to try to fill the input buffer when we reach the * end of it. */ int yy_fill_buffer; int yy_buffer_status; }; #endif /* !YY_STRUCT_YY_BUFFER_STATE */ void yyrestart(FILE *input_file, yyscan_t yyscanner); void yy_switch_to_buffer(YY_BUFFER_STATE new_buffer, yyscan_t yyscanner); YY_BUFFER_STATE yy_create_buffer(FILE *file, int size, yyscan_t yyscanner); void yy_delete_buffer(YY_BUFFER_STATE b, yyscan_t yyscanner); void yy_flush_buffer(YY_BUFFER_STATE b, yyscan_t yyscanner); void yypush_buffer_state(YY_BUFFER_STATE new_buffer, yyscan_t yyscanner); void yypop_buffer_state(yyscan_t yyscanner); YY_BUFFER_STATE yy_scan_buffer(char *base, yy_size_t size, yyscan_t yyscanner); YY_BUFFER_STATE yy_scan_string(const char *yy_str, yyscan_t yyscanner); YY_BUFFER_STATE yy_scan_bytes(const char *bytes, int len, yyscan_t yyscanner); void *yyalloc(yy_size_t, yyscan_t yyscanner); void *yyrealloc(void *, yy_size_t, yyscan_t yyscanner); void yyfree(void *, yyscan_t yyscanner); /* Begin user sect3 */ #define ff_wrap(yyscanner) (/*CONSTCOND*/ 1) #define YY_SKIP_YYWRAP #define yytext_ptr yytext_r #ifdef YY_HEADER_EXPORT_START_CONDITIONS #define INITIAL 0 #define COMMENT 1 #define singlequotedstring 2 #endif #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way * down here because we want the user's section 1 to have been scanned first. * The user has a chance to override it with an option. */ #include #endif #ifndef YY_EXTRA_TYPE #define YY_EXTRA_TYPE void * #endif int yylex_init(yyscan_t *scanner); int yylex_init_extra(YY_EXTRA_TYPE user_defined, yyscan_t *scanner); /* Accessor methods to globals. These are made visible to non-reentrant scanners for convenience. */ int yylex_destroy(yyscan_t yyscanner); int yyget_debug(yyscan_t yyscanner); void yyset_debug(int debug_flag, yyscan_t yyscanner); YY_EXTRA_TYPE yyget_extra(yyscan_t yyscanner); void yyset_extra(YY_EXTRA_TYPE user_defined, yyscan_t yyscanner); FILE *yyget_in(yyscan_t yyscanner); void yyset_in(FILE *_in_str, yyscan_t yyscanner); FILE *yyget_out(yyscan_t yyscanner); void yyset_out(FILE *_out_str, yyscan_t yyscanner); int yyget_leng(yyscan_t yyscanner); char *yyget_text(yyscan_t yyscanner); int yyget_lineno(yyscan_t yyscanner); void yyset_lineno(int _line_number, yyscan_t yyscanner); int yyget_column(yyscan_t yyscanner); void yyset_column(int _column_no, yyscan_t yyscanner); YYSTYPE *yyget_lval(yyscan_t yyscanner); void yyset_lval(YYSTYPE *yylval_param, yyscan_t yyscanner); YYLTYPE *yyget_lloc(yyscan_t yyscanner); void yyset_lloc(YYLTYPE *yylloc_param, yyscan_t yyscanner); /* Macros after this point can all be overridden by user definitions in * section 1. */ #ifndef YY_SKIP_YYWRAP #ifdef __cplusplus extern "C" int yywrap(yyscan_t yyscanner); #else extern int yywrap(yyscan_t yyscanner); #endif #endif #ifndef yytext_ptr static void yy_flex_strncpy(char *, const char *, int, yyscan_t yyscanner); #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen(const char *, yyscan_t yyscanner); #endif #ifndef YY_NO_INPUT #endif /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE #ifdef __ia64__ /* On IA-64, the buffer size is 16k, not 8k */ #define YY_READ_BUF_SIZE 16384 #else #define YY_READ_BUF_SIZE 8192 #endif /* __ia64__ */ #endif /* Number of entries by which start-condition stack grows. */ #ifndef YY_START_STACK_INCR #define YY_START_STACK_INCR 25 #endif /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL_IS_OURS 1 extern int yylex(YYSTYPE *yylval_param, YYLTYPE *yylloc_param, yyscan_t yyscanner); #define YY_DECL \ int yylex(YYSTYPE *yylval_param, YYLTYPE *yylloc_param, yyscan_t yyscanner) #endif /* !YY_DECL */ /* yy_get_previous_state - get the state just before the EOB char was reached */ #undef YY_NEW_FILE #undef YY_FLUSH_BUFFER #undef yy_set_bol #undef yy_new_buffer #undef yy_set_interactive #undef YY_DO_BEFORE_ACTION #ifdef YY_DECL_IS_OURS #undef YY_DECL_IS_OURS #undef YY_DECL #endif #ifndef ff__create_buffer_ALREADY_DEFINED #undef yy_create_buffer #endif #ifndef ff__delete_buffer_ALREADY_DEFINED #undef yy_delete_buffer #endif #ifndef ff__scan_buffer_ALREADY_DEFINED #undef yy_scan_buffer #endif #ifndef ff__scan_string_ALREADY_DEFINED #undef yy_scan_string #endif #ifndef ff__scan_bytes_ALREADY_DEFINED #undef yy_scan_bytes #endif #ifndef ff__init_buffer_ALREADY_DEFINED #undef yy_init_buffer #endif #ifndef ff__flush_buffer_ALREADY_DEFINED #undef yy_flush_buffer #endif #ifndef ff__load_buffer_state_ALREADY_DEFINED #undef yy_load_buffer_state #endif #ifndef ff__switch_to_buffer_ALREADY_DEFINED #undef yy_switch_to_buffer #endif #ifndef ff_push_buffer_state_ALREADY_DEFINED #undef yypush_buffer_state #endif #ifndef ff_pop_buffer_state_ALREADY_DEFINED #undef yypop_buffer_state #endif #ifndef ff_ensure_buffer_stack_ALREADY_DEFINED #undef yyensure_buffer_stack #endif #ifndef ff_lex_ALREADY_DEFINED #undef yylex #endif #ifndef ff_restart_ALREADY_DEFINED #undef yyrestart #endif #ifndef ff_lex_init_ALREADY_DEFINED #undef yylex_init #endif #ifndef ff_lex_init_extra_ALREADY_DEFINED #undef yylex_init_extra #endif #ifndef ff_lex_destroy_ALREADY_DEFINED #undef yylex_destroy #endif #ifndef ff_get_debug_ALREADY_DEFINED #undef yyget_debug #endif #ifndef ff_set_debug_ALREADY_DEFINED #undef yyset_debug #endif #ifndef ff_get_extra_ALREADY_DEFINED #undef yyget_extra #endif #ifndef ff_set_extra_ALREADY_DEFINED #undef yyset_extra #endif #ifndef ff_get_in_ALREADY_DEFINED #undef yyget_in #endif #ifndef ff_set_in_ALREADY_DEFINED #undef yyset_in #endif #ifndef ff_get_out_ALREADY_DEFINED #undef yyget_out #endif #ifndef ff_set_out_ALREADY_DEFINED #undef yyset_out #endif #ifndef ff_get_leng_ALREADY_DEFINED #undef yyget_leng #endif #ifndef ff_get_text_ALREADY_DEFINED #undef yyget_text #endif #ifndef ff_get_lineno_ALREADY_DEFINED #undef yyget_lineno #endif #ifndef ff_set_lineno_ALREADY_DEFINED #undef yyset_lineno #endif #ifndef ff_get_column_ALREADY_DEFINED #undef yyget_column #endif #ifndef ff_set_column_ALREADY_DEFINED #undef yyset_column #endif #ifndef ff_wrap_ALREADY_DEFINED #undef yywrap #endif #ifndef ff_get_lval_ALREADY_DEFINED #undef yyget_lval #endif #ifndef ff_set_lval_ALREADY_DEFINED #undef yyset_lval #endif #ifndef ff_get_lloc_ALREADY_DEFINED #undef yyget_lloc #endif #ifndef ff_set_lloc_ALREADY_DEFINED #undef yyset_lloc #endif #ifndef ff_alloc_ALREADY_DEFINED #undef yyalloc #endif #ifndef ff_realloc_ALREADY_DEFINED #undef yyrealloc #endif #ifndef ff_free_ALREADY_DEFINED #undef yyfree #endif #ifndef ff_text_ALREADY_DEFINED #undef yytext #endif #ifndef ff_leng_ALREADY_DEFINED #undef yyleng #endif #ifndef ff_in_ALREADY_DEFINED #undef yyin #endif #ifndef ff_out_ALREADY_DEFINED #undef yyout #endif #ifndef ff__flex_debug_ALREADY_DEFINED #undef yy_flex_debug #endif #ifndef ff_lineno_ALREADY_DEFINED #undef yylineno #endif #ifndef ff_tables_fload_ALREADY_DEFINED #undef yytables_fload #endif #ifndef ff_tables_destroy_ALREADY_DEFINED #undef yytables_destroy #endif #ifndef ff_TABLES_NAME_ALREADY_DEFINED #undef yyTABLES_NAME #endif #line 253 "flex.l" #line 737 "flex_lexer.h" #undef ff_IN_HEADER #endif /* ff_HEADER_H */ ================================================ FILE: srcs/internal/postgresql/parser/parser_typedef.h ================================================ #ifndef __PARSER_TYPEDEF_H__ #define __PARSER_TYPEDEF_H__ #include #ifndef YYtypeDEF_YY_SCANNER_T #define YYtypeDEF_YY_SCANNER_T typedef void* yyscan_t; #endif #define YYSTYPE FF_STYPE #define YYLTYPE FF_LTYPE struct FF_CUST_LTYPE { int first_line; int first_column; int last_line; int last_column; int total_column; // Length of the string in the SQL query string int string_length; // Parameters. // int param_id; std::vector param_list; }; #define FF_LTYPE FF_CUST_LTYPE #define FF_LTYPE_IS_DECLARED 1 #define YY_USER_ACTION \ yylloc->first_line = yylloc->last_line; \ yylloc->first_column = yylloc->last_column; \ for (int i = 0; yytext[i] != '\0'; i++) { \ yylloc->total_column++; \ yylloc->string_length++; \ if (yytext[i] == '\n') { \ yylloc->last_line++; \ yylloc->last_column = 0; \ } else { \ yylloc->last_column++; \ } \ } #endif ================================================ FILE: srcs/internal/postgresql/postgresql.cc ================================================ #include "postgresql.h" #include #include #include #include "absl/strings/str_format.h" #include "ast.h" #include "define.h" #include "mutator.h" #include "utils.h" PostgreSQLDB *create_postgresql() { return new PostgreSQLDB; } PostgreSQLDB::PostgreSQLDB() { mutator_ = std::make_unique(); } bool PostgreSQLDB::initialize(YAML::Node config) { const std::string init_lib_path = config["init_lib"].as(); std::string data_lib = config["data_lib"].as(); std::vector file_list = get_all_files_in_dir(init_lib_path.c_str()); for (auto &f : file_list) { mutator_->init(absl::StrFormat("%s/%s", init_lib_path, f)); } mutator_->init_data_library(data_lib); return true; } bool PostgreSQLDB::save_interesting_query(const std::string &query) { if (Program *program = parser(query)) { std::vector ir_set; IR *ir = program->translate(ir_set); ir_set.clear(); mutator_->extract_struct(ir); string strip_sql = ir->to_string(); auto p_strip_sql = parser(strip_sql); if (p_strip_sql) { auto root_ir = p_strip_sql->translate(ir_set); p_strip_sql->deep_delete(); mutator_->add_ir_to_library(root_ir); deep_delete(root_ir); } return true; } return false; } size_t PostgreSQLDB::validate_all(std::vector &ir_set) { for (IR *&ir : ir_set) { bool result = mutator_->validate(ir); if (!result) { continue; } std::string validated_ir = ir->to_string(); validated_test_cases_.push(std::move(validated_ir)); } return validated_test_cases_.size(); } bool PostgreSQLDB::has_mutated_test_cases() { return !validated_test_cases_.empty(); } size_t PostgreSQLDB::mutate(const std::string &query) { std::vector ir_set, mutated_tree; Program *program_root = parser(query.c_str()); if (program_root == nullptr) { return 0; } // TODO: Remove this uncessary try. // Or we will have exception from the parser? try { program_root->translate(ir_set); } catch (...) { for (auto ir : ir_set) { delete ir; } program_root->deep_delete(); } program_root->deep_delete(); mutated_tree = mutator_->mutate_all(ir_set); deep_delete(ir_set[ir_set.size() - 1]); size_t validated_ir_size = validate_all(mutated_tree); for (auto ir : mutated_tree) { deep_delete(ir); } // std::cerr << "validated ir size: " << validated_ir_size << std::endl; return validated_ir_size; } std::string PostgreSQLDB::get_next_mutated_query() { assert(has_mutated_test_cases()); auto result = validated_test_cases_.top(); validated_test_cases_.pop(); return result; } ================================================ FILE: srcs/internal/postgresql/postgresql.h ================================================ #ifndef __POSTGRESQL_H__ #define __POSTGRESQL_H__ #include #include #include "db.h" class Mutator; class IR; class PostgreSQLDB : public DataBase { public: PostgreSQLDB(); // Set up the database. virtual bool initialize(YAML::Node config); virtual size_t mutate(const std::string &); virtual bool save_interesting_query(const std::string &); // Return an new query to test. The `buffer` should be unmanaged, virtual std::string get_next_mutated_query(); virtual bool has_mutated_test_cases(); // Clean up the enviroment, e.g., drop all the databases. virtual bool clean_up() { return true; } private: size_t validate_all(std::vector &ir_set); std::unique_ptr mutator_; std::stack validated_test_cases_; }; PostgreSQLDB *create_postgresql(); #endif ================================================ FILE: srcs/internal/postgresql/srcs/ast.cpp ================================================ #include "../include/ast.h" #include #include "../include/define.h" #include "../include/utils.h" static string s_table_name; Node *generate_ast_node_by_type(IRTYPE type) { #define DECLARE_CASE(classname) \ if (type == k##classname) return new classname(); ALLCLASS(DECLARE_CASE); #undef DECLARE_CASE return NULL; } NODETYPE get_nodetype_by_string(string s) { #define DECLARE_CASE(datatypename) \ if (s == #datatypename) return k##datatypename; ALLCLASS(DECLARE_CASE); #undef DECLARE_CASE return kUnknown; } string get_string_by_nodetype(NODETYPE tt) { #define DECLARE_CASE(datatypename) \ if (tt == k##datatypename) return string(#datatypename); ALLCLASS(DECLARE_CASE); #undef DECLARE_CASE return string(""); } string get_string_by_datatype(DATATYPE tt) { #define DECLARE_CASE(datatypename) \ if (tt == k##datatypename) return string(#datatypename); ALLDATATYPE(DECLARE_CASE); #undef DECLARE_CASE return string(""); } DATATYPE get_datatype_by_string(string s) { #define DECLARE_CASE(datatypename) \ if (s == #datatypename) return k##datatypename; ALLDATATYPE(DECLARE_CASE); #undef DECLARE_CASE return kDataWhatever; } void deep_delete(IR *root) { if (root->left_) deep_delete(root->left_); if (root->right_) deep_delete(root->right_); if (root->op_) delete root->op_; delete root; } IR *deep_copy(const IR *root) { IR *left = NULL, *right = NULL, *copy_res; if (root->left_) left = deep_copy(root->left_); if (root->right_) right = deep_copy(root->right_); copy_res = new IR(root, left, right); return copy_res; } string IR::to_string() { auto res = to_string_core(); trim_string(res); return res; } string IR::to_string_core() { switch (type_) { case kIntLiteral: return std::to_string(int_val_); case kFloatLiteral: return std::to_string(float_val_); case kIdentifier: return str_val_; case kStringLiteral: return str_val_; } string res; if (op_ != NULL) { res += op_->prefix_ + " "; } if (left_ != NULL) res += left_->to_string_core() + " "; if (op_ != NULL) res += op_->middle_ + " "; if (right_ != NULL) res += right_->to_string_core() + " "; if (op_ != NULL) res += op_->suffix_; return res; } IR *Node::translate(vector &v_ir_collector) { return NULL; } IR *Program::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(stmtlist_); res = new IR(kProgram, OP3("", "", ""), tmp1); TRANSLATEEND } void Program::deep_delete() { SAFEDELETE(stmtlist_); delete this; }; void Program::generate() { GENERATESTART(1) stmtlist_ = new Stmtlist(); stmtlist_->generate(); GENERATEEND } IR *Stmtlist::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(stmt_); auto tmp2 = SAFETRANSLATE(stmtlist_); res = new IR(kStmtlist, OP3("", ";", ""), tmp1, tmp2); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(stmt_); res = new IR(kStmtlist, OP3("", ";", ""), tmp1); CASEEND SWITCHEND TRANSLATEEND } void Stmtlist::deep_delete() { SAFEDELETE(stmt_); SAFEDELETE(stmtlist_); delete this; }; void Stmtlist::generate() { GENERATESTART(200) SWITCHSTART CASESTART(0) stmt_ = new Stmt(); stmt_->generate(); stmtlist_ = new Stmtlist(); stmtlist_->generate(); CASEEND CASESTART(1) stmt_ = new Stmt(); stmt_->generate(); CASEEND default: { int tmp_case_idx = rand() % 1; switch (tmp_case_idx) { CASESTART(0) stmt_ = new Stmt(); stmt_->generate(); case_idx_ = 1; CASEEND } } } GENERATEEND } IR *Stmt::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(create_stmt_); res = new IR(kStmt, OP3("", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(drop_stmt_); res = new IR(kStmt, OP3("", "", ""), tmp1); CASEEND CASESTART(2) auto tmp1 = SAFETRANSLATE(select_stmt_); res = new IR(kStmt, OP3("", "", ""), tmp1); CASEEND CASESTART(3) auto tmp1 = SAFETRANSLATE(update_stmt_); res = new IR(kStmt, OP3("", "", ""), tmp1); CASEEND CASESTART(4) auto tmp1 = SAFETRANSLATE(insert_stmt_); res = new IR(kStmt, OP3("", "", ""), tmp1); CASEEND CASESTART(5) auto tmp1 = SAFETRANSLATE(alter_stmt_); res = new IR(kStmt, OP3("", "", ""), tmp1); CASEEND CASESTART(6) auto tmp1 = SAFETRANSLATE(reindex_stmt_); res = new IR(kStmt, OP3("", "", ""), tmp1); CASEEND SWITCHEND TRANSLATEEND } void Stmt::deep_delete() { SAFEDELETE(insert_stmt_); SAFEDELETE(drop_stmt_); SAFEDELETE(create_stmt_); SAFEDELETE(select_stmt_); SAFEDELETE(alter_stmt_); SAFEDELETE(reindex_stmt_); SAFEDELETE(update_stmt_); delete this; }; void Stmt::generate() { GENERATESTART(7) SWITCHSTART CASESTART(0) create_stmt_ = new CreateStmt(); create_stmt_->generate(); CASEEND CASESTART(1) drop_stmt_ = new DropStmt(); drop_stmt_->generate(); CASEEND CASESTART(2) select_stmt_ = new SelectStmt(); select_stmt_->generate(); CASEEND CASESTART(3) update_stmt_ = new UpdateStmt(); update_stmt_->generate(); CASEEND CASESTART(4) insert_stmt_ = new InsertStmt(); insert_stmt_->generate(); CASEEND CASESTART(5) alter_stmt_ = new AlterStmt(); alter_stmt_->generate(); CASEEND CASESTART(6) reindex_stmt_ = new ReindexStmt(); reindex_stmt_->generate(); CASEEND SWITCHEND GENERATEEND } IR *CreateStmt::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(create_table_stmt_); res = new IR(kCreateStmt, OP3("", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(create_index_stmt_); res = new IR(kCreateStmt, OP3("", "", ""), tmp1); CASEEND CASESTART(2) auto tmp1 = SAFETRANSLATE(create_view_stmt_); res = new IR(kCreateStmt, OP3("", "", ""), tmp1); CASEEND SWITCHEND TRANSLATEEND } void CreateStmt::deep_delete() { SAFEDELETE(create_index_stmt_); SAFEDELETE(create_view_stmt_); SAFEDELETE(create_table_stmt_); delete this; }; void CreateStmt::generate() { GENERATESTART(3) SWITCHSTART CASESTART(0) create_table_stmt_ = new CreateTableStmt(); create_table_stmt_->generate(); CASEEND CASESTART(1) create_index_stmt_ = new CreateIndexStmt(); create_index_stmt_->generate(); CASEEND CASESTART(2) create_view_stmt_ = new CreateViewStmt(); create_view_stmt_->generate(); CASEEND SWITCHEND GENERATEEND } IR *DropStmt::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(drop_index_stmt_); res = new IR(kDropStmt, OP3("", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(drop_table_stmt_); res = new IR(kDropStmt, OP3("", "", ""), tmp1); CASEEND CASESTART(2) auto tmp1 = SAFETRANSLATE(drop_view_stmt_); res = new IR(kDropStmt, OP3("", "", ""), tmp1); CASEEND SWITCHEND TRANSLATEEND } void DropStmt::deep_delete() { SAFEDELETE(drop_table_stmt_); SAFEDELETE(drop_view_stmt_); SAFEDELETE(drop_index_stmt_); delete this; }; void DropStmt::generate() { GENERATESTART(3) SWITCHSTART CASESTART(0) drop_index_stmt_ = new DropIndexStmt(); drop_index_stmt_->generate(); CASEEND CASESTART(1) drop_table_stmt_ = new DropTableStmt(); drop_table_stmt_->generate(); CASEEND CASESTART(2) drop_view_stmt_ = new DropViewStmt(); drop_view_stmt_->generate(); CASEEND SWITCHEND GENERATEEND } IR *AlterStmt::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(table_name_); auto tmp2 = SAFETRANSLATE(alter_action_); res = new IR(kAlterStmt, OP3("ALTER TABLE", "", ""), tmp1, tmp2); TRANSLATEEND } void AlterStmt::deep_delete() { SAFEDELETE(alter_action_); SAFEDELETE(table_name_); delete this; }; void AlterStmt::generate() { GENERATESTART(1) table_name_ = new TableName(); table_name_->generate(); alter_action_ = new AlterAction(); alter_action_->generate(); GENERATEEND } IR *SelectStmt::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(select_no_parens_); res = new IR(kSelectStmt, OP3("", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(select_with_parens_); res = new IR(kSelectStmt, OP3("", "", ""), tmp1); CASEEND SWITCHEND TRANSLATEEND } void SelectStmt::deep_delete() { SAFEDELETE(select_no_parens_); SAFEDELETE(select_with_parens_); delete this; }; void SelectStmt::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) select_no_parens_ = new SelectNoParens(); select_no_parens_->generate(); CASEEND CASESTART(1) select_with_parens_ = new SelectWithParens(); select_with_parens_->generate(); CASEEND SWITCHEND GENERATEEND } IR *SelectWithParens::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(select_no_parens_); res = new IR(kSelectWithParens, OP3("(", ")", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(select_with_parens_); res = new IR(kSelectWithParens, OP3("(", ")", ""), tmp1); CASEEND SWITCHEND TRANSLATEEND } void SelectWithParens::deep_delete() { SAFEDELETE(select_no_parens_); SAFEDELETE(select_with_parens_); delete this; }; void SelectWithParens::generate() { GENERATESTART(200) SWITCHSTART CASESTART(0) select_no_parens_ = new SelectNoParens(); select_no_parens_->generate(); CASEEND CASESTART(1) select_with_parens_ = new SelectWithParens(); select_with_parens_->generate(); CASEEND default: { int tmp_case_idx = rand() % 1; switch (tmp_case_idx) { CASESTART(0) select_no_parens_ = new SelectNoParens(); select_no_parens_->generate(); case_idx_ = 0; CASEEND } } } GENERATEEND } IR *SelectNoParens::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(opt_with_clause_); auto tmp2 = SAFETRANSLATE(select_clause_list_); auto tmp3 = SAFETRANSLATE(opt_order_clause_); auto tmp4 = SAFETRANSLATE(opt_limit_clause_); auto tmp5 = new IR(kUnknown, OP3("", "", ""), tmp1, tmp2); PUSH(tmp5); auto tmp6 = new IR(kUnknown, OP3("", "", ""), tmp5, tmp3); PUSH(tmp6); res = new IR(kSelectNoParens, OP3("", "", ""), tmp6, tmp4); TRANSLATEEND } void SelectNoParens::deep_delete() { SAFEDELETE(select_clause_list_); SAFEDELETE(opt_with_clause_); SAFEDELETE(opt_order_clause_); SAFEDELETE(opt_limit_clause_); delete this; }; void SelectNoParens::generate() { GENERATESTART(1) opt_with_clause_ = new OptWithClause(); opt_with_clause_->generate(); select_clause_list_ = new SelectClauseList(); select_clause_list_->generate(); opt_order_clause_ = new OptOrderClause(); opt_order_clause_->generate(); opt_limit_clause_ = new OptLimitClause(); opt_limit_clause_->generate(); GENERATEEND } IR *SelectClauseList::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(select_clause_); res = new IR(kSelectClauseList, OP3("", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(select_clause_); auto tmp2 = SAFETRANSLATE(combine_clause_); auto tmp3 = SAFETRANSLATE(select_clause_list_); auto tmp4 = new IR(kUnknown, OP3("", "", ""), tmp1, tmp2); PUSH(tmp4); res = new IR(kSelectClauseList, OP3("", "", ""), tmp4, tmp3); CASEEND SWITCHEND TRANSLATEEND } void SelectClauseList::deep_delete() { SAFEDELETE(select_clause_list_); SAFEDELETE(combine_clause_); SAFEDELETE(select_clause_); delete this; }; void SelectClauseList::generate() { GENERATESTART(200) SWITCHSTART CASESTART(0) select_clause_ = new SelectClause(); select_clause_->generate(); CASEEND CASESTART(1) select_clause_ = new SelectClause(); select_clause_->generate(); combine_clause_ = new CombineClause(); combine_clause_->generate(); select_clause_list_ = new SelectClauseList(); select_clause_list_->generate(); CASEEND default: { int tmp_case_idx = rand() % 1; switch (tmp_case_idx) { CASESTART(0) select_clause_ = new SelectClause(); select_clause_->generate(); case_idx_ = 0; CASEEND } } } GENERATEEND } IR *SelectClause::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(opt_all_or_distinct_); auto tmp2 = SAFETRANSLATE(select_target_); auto tmp3 = SAFETRANSLATE(opt_from_clause_); auto tmp4 = SAFETRANSLATE(opt_where_clause_); auto tmp5 = SAFETRANSLATE(opt_group_clause_); auto tmp6 = SAFETRANSLATE(opt_window_clause_); auto tmp7 = new IR(kUnknown, OP3("SELECT", "", ""), tmp1, tmp2); PUSH(tmp7); auto tmp8 = new IR(kUnknown, OP3("", "", ""), tmp7, tmp3); PUSH(tmp8); auto tmp9 = new IR(kUnknown, OP3("", "", ""), tmp8, tmp4); PUSH(tmp9); auto tmp10 = new IR(kUnknown, OP3("", "", ""), tmp9, tmp5); PUSH(tmp10); res = new IR(kSelectClause, OP3("", "", ""), tmp10, tmp6); TRANSLATEEND } void SelectClause::deep_delete() { SAFEDELETE(opt_group_clause_); SAFEDELETE(opt_all_or_distinct_); SAFEDELETE(opt_from_clause_); SAFEDELETE(opt_window_clause_); SAFEDELETE(select_target_); SAFEDELETE(opt_where_clause_); delete this; }; void SelectClause::generate() { GENERATESTART(1) opt_all_or_distinct_ = new OptAllOrDistinct(); opt_all_or_distinct_->generate(); select_target_ = new SelectTarget(); select_target_->generate(); opt_from_clause_ = new OptFromClause(); opt_from_clause_->generate(); opt_where_clause_ = new OptWhereClause(); opt_where_clause_->generate(); opt_group_clause_ = new OptGroupClause(); opt_group_clause_->generate(); opt_window_clause_ = new OptWindowClause(); opt_window_clause_->generate(); GENERATEEND } IR *CombineClause::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kCombineClause, OP3("UNION", "", "")); CASEEND CASESTART(1) res = new IR(kCombineClause, OP3("INTERSECT", "", "")); CASEEND CASESTART(2) res = new IR(kCombineClause, OP3("EXCEPT", "", "")); CASEEND SWITCHEND TRANSLATEEND } void CombineClause::deep_delete() { delete this; }; void CombineClause::generate(){GENERATESTART(3) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND CASESTART(2) CASEEND SWITCHEND GENERATEEND} IR *OptFromClause::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(from_clause_); res = new IR(kOptFromClause, OP3("", "", ""), tmp1); CASEEND CASESTART(1) res = new IR(kOptFromClause, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptFromClause::deep_delete() { SAFEDELETE(from_clause_); delete this; }; void OptFromClause::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) from_clause_ = new FromClause(); from_clause_->generate(); CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND } IR *SelectTarget::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(expr_list_); res = new IR(kSelectTarget, OP3("", "", ""), tmp1); TRANSLATEEND } void SelectTarget::deep_delete() { SAFEDELETE(expr_list_); delete this; }; void SelectTarget::generate() { GENERATESTART(1) expr_list_ = new ExprList(); expr_list_->generate(); GENERATEEND } IR *OptWindowClause::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(window_clause_); res = new IR(kOptWindowClause, OP3("", "", ""), tmp1); CASEEND CASESTART(1) res = new IR(kOptWindowClause, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptWindowClause::deep_delete() { SAFEDELETE(window_clause_); delete this; }; void OptWindowClause::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) window_clause_ = new WindowClause(); window_clause_->generate(); CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND } IR *WindowClause::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(window_def_list_); res = new IR(kWindowClause, OP3("WINDOW", "", ""), tmp1); TRANSLATEEND } void WindowClause::deep_delete() { SAFEDELETE(window_def_list_); delete this; }; void WindowClause::generate() { GENERATESTART(1) window_def_list_ = new WindowDefList(); window_def_list_->generate(); GENERATEEND } IR *WindowDefList::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(window_def_); res = new IR(kWindowDefList, OP3("", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(window_def_); auto tmp2 = SAFETRANSLATE(window_def_list_); res = new IR(kWindowDefList, OP3("", ",", ""), tmp1, tmp2); CASEEND SWITCHEND TRANSLATEEND } void WindowDefList::deep_delete() { SAFEDELETE(window_def_); SAFEDELETE(window_def_list_); delete this; }; void WindowDefList::generate() { GENERATESTART(200) SWITCHSTART CASESTART(0) window_def_ = new WindowDef(); window_def_->generate(); CASEEND CASESTART(1) window_def_ = new WindowDef(); window_def_->generate(); window_def_list_ = new WindowDefList(); window_def_list_->generate(); CASEEND default: { int tmp_case_idx = rand() % 1; switch (tmp_case_idx) { CASESTART(0) window_def_ = new WindowDef(); window_def_->generate(); case_idx_ = 0; CASEEND } } } GENERATEEND } IR *WindowDef::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(window_name_); auto tmp2 = SAFETRANSLATE(window_); res = new IR(kWindowDef, OP3("", "AS (", ")"), tmp1, tmp2); TRANSLATEEND } void WindowDef::deep_delete() { SAFEDELETE(window_); SAFEDELETE(window_name_); delete this; }; void WindowDef::generate() { GENERATESTART(1) window_name_ = new WindowName(); window_name_->generate(); window_ = new Window(); window_->generate(); GENERATEEND } IR *WindowName::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(identifier_); res = new IR(kWindowName, OP3("", "", ""), tmp1); TRANSLATEEND } void WindowName::deep_delete() { SAFEDELETE(identifier_); delete this; }; void WindowName::generate() { GENERATESTART(1) identifier_ = new Identifier(); identifier_->generate(); GENERATEEND } IR *Window::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(opt_exist_window_name_); auto tmp2 = SAFETRANSLATE(opt_partition_); auto tmp3 = SAFETRANSLATE(opt_order_clause_); auto tmp4 = SAFETRANSLATE(opt_frame_clause_); auto tmp5 = new IR(kUnknown, OP3("", "", ""), tmp1, tmp2); PUSH(tmp5); auto tmp6 = new IR(kUnknown, OP3("", "", ""), tmp5, tmp3); PUSH(tmp6); res = new IR(kWindow, OP3("", "", ""), tmp6, tmp4); TRANSLATEEND } void Window::deep_delete() { SAFEDELETE(opt_exist_window_name_); SAFEDELETE(opt_frame_clause_); SAFEDELETE(opt_partition_); SAFEDELETE(opt_order_clause_); delete this; }; void Window::generate() { GENERATESTART(1) opt_exist_window_name_ = new OptExistWindowName(); opt_exist_window_name_->generate(); opt_partition_ = new OptPartition(); opt_partition_->generate(); opt_order_clause_ = new OptOrderClause(); opt_order_clause_->generate(); opt_frame_clause_ = new OptFrameClause(); opt_frame_clause_->generate(); GENERATEEND } IR *OptPartition::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(expr_list_); res = new IR(kOptPartition, OP3("PARTITION BY", "", ""), tmp1); CASEEND CASESTART(1) res = new IR(kOptPartition, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptPartition::deep_delete() { SAFEDELETE(expr_list_); delete this; }; void OptPartition::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) expr_list_ = new ExprList(); expr_list_->generate(); CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND } IR *OptFrameClause::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(range_or_rows_); auto tmp2 = SAFETRANSLATE(frame_bound_start_); auto tmp3 = SAFETRANSLATE(opt_frame_exclude_); auto tmp4 = new IR(kUnknown, OP3("", "", ""), tmp1, tmp2); PUSH(tmp4); res = new IR(kOptFrameClause, OP3("", "", ""), tmp4, tmp3); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(range_or_rows_); auto tmp2 = SAFETRANSLATE(frame_bound_start_); auto tmp3 = SAFETRANSLATE(frame_bound_end_); auto tmp4 = SAFETRANSLATE(opt_frame_exclude_); auto tmp5 = new IR(kUnknown, OP3("", "BETWEEN", "AND"), tmp1, tmp2); PUSH(tmp5); auto tmp6 = new IR(kUnknown, OP3("", "", ""), tmp5, tmp3); PUSH(tmp6); res = new IR(kOptFrameClause, OP3("", "", ""), tmp6, tmp4); CASEEND CASESTART(2) res = new IR(kOptFrameClause, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptFrameClause::deep_delete() { SAFEDELETE(frame_bound_start_); SAFEDELETE(opt_frame_exclude_); SAFEDELETE(range_or_rows_); SAFEDELETE(frame_bound_end_); delete this; }; void OptFrameClause::generate() { GENERATESTART(3) SWITCHSTART CASESTART(0) range_or_rows_ = new RangeOrRows(); range_or_rows_->generate(); frame_bound_start_ = new FrameBoundStart(); frame_bound_start_->generate(); opt_frame_exclude_ = new OptFrameExclude(); opt_frame_exclude_->generate(); CASEEND CASESTART(1) range_or_rows_ = new RangeOrRows(); range_or_rows_->generate(); frame_bound_start_ = new FrameBoundStart(); frame_bound_start_->generate(); frame_bound_end_ = new FrameBoundEnd(); frame_bound_end_->generate(); opt_frame_exclude_ = new OptFrameExclude(); opt_frame_exclude_->generate(); CASEEND CASESTART(2) CASEEND SWITCHEND GENERATEEND } IR *RangeOrRows::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kRangeOrRows, OP3("RANGE", "", "")); CASEEND CASESTART(1) res = new IR(kRangeOrRows, OP3("ROWS", "", "")); CASEEND CASESTART(2) res = new IR(kRangeOrRows, OP3("GROUPS", "", "")); CASEEND SWITCHEND TRANSLATEEND } void RangeOrRows::deep_delete() { delete this; }; void RangeOrRows::generate(){GENERATESTART(3) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND CASESTART(2) CASEEND SWITCHEND GENERATEEND} IR *FrameBoundStart::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(frame_bound_); res = new IR(kFrameBoundStart, OP3("", "", ""), tmp1); CASEEND CASESTART(1) res = new IR(kFrameBoundStart, OP3("UNBOUNDED PRECEDING", "", "")); CASEEND SWITCHEND TRANSLATEEND } void FrameBoundStart::deep_delete() { SAFEDELETE(frame_bound_); delete this; }; void FrameBoundStart::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) frame_bound_ = new FrameBound(); frame_bound_->generate(); CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND } IR *FrameBoundEnd::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(frame_bound_); res = new IR(kFrameBoundEnd, OP3("", "", ""), tmp1); CASEEND CASESTART(1) res = new IR(kFrameBoundEnd, OP3("UNBOUNDED FOLLOWING", "", "")); CASEEND SWITCHEND TRANSLATEEND } void FrameBoundEnd::deep_delete() { SAFEDELETE(frame_bound_); delete this; }; void FrameBoundEnd::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) frame_bound_ = new FrameBound(); frame_bound_->generate(); CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND } IR *FrameBound::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(expr_); res = new IR(kFrameBound, OP3("", "PRECEDING", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(expr_); res = new IR(kFrameBound, OP3("", "FOLLOWING", ""), tmp1); CASEEND CASESTART(2) res = new IR(kFrameBound, OP3("CURRENT ROW", "", "")); CASEEND SWITCHEND TRANSLATEEND } void FrameBound::deep_delete() { SAFEDELETE(expr_); delete this; }; void FrameBound::generate() { GENERATESTART(3) SWITCHSTART CASESTART(0) expr_ = new Expr(); expr_->generate(); CASEEND CASESTART(1) expr_ = new Expr(); expr_->generate(); CASEEND CASESTART(2) CASEEND SWITCHEND GENERATEEND } IR *OptFrameExclude::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(frame_exclude_); res = new IR(kOptFrameExclude, OP3("EXCLUDE", "", ""), tmp1); CASEEND CASESTART(1) res = new IR(kOptFrameExclude, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptFrameExclude::deep_delete() { SAFEDELETE(frame_exclude_); delete this; }; void OptFrameExclude::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) frame_exclude_ = new FrameExclude(); frame_exclude_->generate(); CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND } IR *FrameExclude::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kFrameExclude, OP3("NO OTHERS", "", "")); CASEEND CASESTART(1) res = new IR(kFrameExclude, OP3("CURRENT ROW", "", "")); CASEEND CASESTART(2) res = new IR(kFrameExclude, OP3("GROUP", "", "")); CASEEND CASESTART(3) res = new IR(kFrameExclude, OP3("TIES", "", "")); CASEEND SWITCHEND TRANSLATEEND } void FrameExclude::deep_delete() { delete this; }; void FrameExclude::generate(){GENERATESTART(4) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND CASESTART(2) CASEEND CASESTART(3) CASEEND SWITCHEND GENERATEEND} IR *OptExistWindowName::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(identifier_); res = new IR(kOptExistWindowName, OP3("", "", ""), tmp1); CASEEND CASESTART(1) res = new IR(kOptExistWindowName, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptExistWindowName::deep_delete() { SAFEDELETE(identifier_); delete this; }; void OptExistWindowName::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) identifier_ = new Identifier(); identifier_->generate(); CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND } IR *OptGroupClause::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(expr_list_); auto tmp2 = SAFETRANSLATE(opt_having_clause_); res = new IR(kOptGroupClause, OP3("GROUP BY", "", ""), tmp1, tmp2); CASEEND CASESTART(1) res = new IR(kOptGroupClause, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptGroupClause::deep_delete() { SAFEDELETE(expr_list_); SAFEDELETE(opt_having_clause_); delete this; }; void OptGroupClause::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) expr_list_ = new ExprList(); expr_list_->generate(); opt_having_clause_ = new OptHavingClause(); opt_having_clause_->generate(); CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND } IR *OptHavingClause::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(expr_); res = new IR(kOptHavingClause, OP3("HAVING", "", ""), tmp1); CASEEND CASESTART(1) res = new IR(kOptHavingClause, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptHavingClause::deep_delete() { SAFEDELETE(expr_); delete this; }; void OptHavingClause::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) expr_ = new Expr(); expr_->generate(); CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND } IR *OptWhereClause::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(where_clause_); res = new IR(kOptWhereClause, OP3("", "", ""), tmp1); CASEEND CASESTART(1) res = new IR(kOptWhereClause, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptWhereClause::deep_delete() { SAFEDELETE(where_clause_); delete this; }; void OptWhereClause::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) where_clause_ = new WhereClause(); where_clause_->generate(); CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND } IR *WhereClause::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(expr_); res = new IR(kWhereClause, OP3("WHERE", "", ""), tmp1); TRANSLATEEND } void WhereClause::deep_delete() { SAFEDELETE(expr_); delete this; }; void WhereClause::generate() { GENERATESTART(1) expr_ = new Expr(); expr_->generate(); GENERATEEND } IR *FromClause::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(table_ref_); res = new IR(kFromClause, OP3("FROM", "", ""), tmp1); TRANSLATEEND } void FromClause::deep_delete() { SAFEDELETE(table_ref_); delete this; }; void FromClause::generate() { GENERATESTART(1) table_ref_ = new TableRef(); table_ref_->generate(); GENERATEEND } IR *TableRef::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(opt_table_prefix_); auto tmp2 = SAFETRANSLATE(table_name_); auto tmp3 = SAFETRANSLATE(opt_on_or_using_); auto tmp4 = new IR(kUnknown, OP3("", "", ""), tmp1, tmp2); PUSH(tmp4); res = new IR(kTableRef, OP3("", "", ""), tmp4, tmp3); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(opt_table_prefix_); auto tmp2 = SAFETRANSLATE(select_no_parens_); auto tmp3 = SAFETRANSLATE(opt_on_or_using_); auto tmp4 = new IR(kUnknown, OP3("", "(", ")"), tmp1, tmp2); PUSH(tmp4); res = new IR(kTableRef, OP3("", "", ""), tmp4, tmp3); CASEEND CASESTART(2) auto tmp1 = SAFETRANSLATE(opt_table_prefix_); auto tmp2 = SAFETRANSLATE(table_ref_); auto tmp3 = SAFETRANSLATE(opt_on_or_using_); auto tmp4 = new IR(kUnknown, OP3("", "(", ")"), tmp1, tmp2); PUSH(tmp4); res = new IR(kTableRef, OP3("", "", ""), tmp4, tmp3); CASEEND SWITCHEND TRANSLATEEND } void TableRef::deep_delete() { SAFEDELETE(select_no_parens_); SAFEDELETE(table_ref_); SAFEDELETE(table_name_); SAFEDELETE(opt_table_prefix_); SAFEDELETE(opt_on_or_using_); delete this; }; void TableRef::generate() { GENERATESTART(300) SWITCHSTART CASESTART(0) opt_table_prefix_ = new OptTablePrefix(); opt_table_prefix_->generate(); table_name_ = new TableName(); table_name_->generate(); opt_on_or_using_ = new OptOnOrUsing(); opt_on_or_using_->generate(); CASEEND CASESTART(1) opt_table_prefix_ = new OptTablePrefix(); opt_table_prefix_->generate(); select_no_parens_ = new SelectNoParens(); select_no_parens_->generate(); opt_on_or_using_ = new OptOnOrUsing(); opt_on_or_using_->generate(); CASEEND CASESTART(2) opt_table_prefix_ = new OptTablePrefix(); opt_table_prefix_->generate(); table_ref_ = new TableRef(); table_ref_->generate(); opt_on_or_using_ = new OptOnOrUsing(); opt_on_or_using_->generate(); CASEEND default: { int tmp_case_idx = rand() % 2; switch (tmp_case_idx) { CASESTART(0) opt_table_prefix_ = new OptTablePrefix(); opt_table_prefix_->generate(); table_name_ = new TableName(); table_name_->generate(); opt_on_or_using_ = new OptOnOrUsing(); opt_on_or_using_->generate(); case_idx_ = 0; CASEEND CASESTART(1) opt_table_prefix_ = new OptTablePrefix(); opt_table_prefix_->generate(); select_no_parens_ = new SelectNoParens(); select_no_parens_->generate(); opt_on_or_using_ = new OptOnOrUsing(); opt_on_or_using_->generate(); case_idx_ = 1; CASEEND } } } GENERATEEND } IR *OptOnOrUsing::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(on_or_using_); res = new IR(kOptOnOrUsing, OP3("", "", ""), tmp1); CASEEND CASESTART(1) res = new IR(kOptOnOrUsing, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptOnOrUsing::deep_delete() { SAFEDELETE(on_or_using_); delete this; }; void OptOnOrUsing::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) on_or_using_ = new OnOrUsing(); on_or_using_->generate(); CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND } IR *OnOrUsing::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(expr_); res = new IR(kOnOrUsing, OP3("ON", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(column_name_list_); res = new IR(kOnOrUsing, OP3("USING (", ")", ""), tmp1); CASEEND SWITCHEND TRANSLATEEND } void OnOrUsing::deep_delete() { SAFEDELETE(expr_); SAFEDELETE(column_name_list_); delete this; }; void OnOrUsing::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) expr_ = new Expr(); expr_->generate(); CASEEND CASESTART(1) column_name_list_ = new ColumnNameList(); column_name_list_->generate(); CASEEND SWITCHEND GENERATEEND } IR *ColumnNameList::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(column_name_); res = new IR(kColumnNameList, OP3("", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(column_name_); auto tmp2 = SAFETRANSLATE(column_name_list_); res = new IR(kColumnNameList, OP3("", ",", ""), tmp1, tmp2); CASEEND SWITCHEND TRANSLATEEND } void ColumnNameList::deep_delete() { SAFEDELETE(column_name_list_); SAFEDELETE(column_name_); delete this; }; void ColumnNameList::generate() { GENERATESTART(200) SWITCHSTART CASESTART(0) column_name_ = new ColumnName(); column_name_->generate(); CASEEND CASESTART(1) column_name_ = new ColumnName(); column_name_->generate(); column_name_list_ = new ColumnNameList(); column_name_list_->generate(); CASEEND default: { int tmp_case_idx = rand() % 1; switch (tmp_case_idx) { CASESTART(0) column_name_ = new ColumnName(); column_name_->generate(); case_idx_ = 0; CASEEND } } } GENERATEEND } IR *OptTablePrefix::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(table_ref_); auto tmp2 = SAFETRANSLATE(join_op_); res = new IR(kOptTablePrefix, OP3("", "", ""), tmp1, tmp2); CASEEND CASESTART(1) res = new IR(kOptTablePrefix, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptTablePrefix::deep_delete() { SAFEDELETE(join_op_); SAFEDELETE(table_ref_); delete this; }; void OptTablePrefix::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) table_ref_ = new TableRef(); table_ref_->generate(); join_op_ = new JoinOp(); join_op_->generate(); CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND } IR *JoinOp::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kJoinOp, OP3(",", "", "")); CASEEND CASESTART(1) res = new IR(kJoinOp, OP3("JOIN", "", "")); CASEEND CASESTART(2) auto tmp1 = SAFETRANSLATE(opt_join_type_); res = new IR(kJoinOp, OP3("NATURAL", "JOIN", ""), tmp1); CASEEND SWITCHEND TRANSLATEEND } void JoinOp::deep_delete() { SAFEDELETE(opt_join_type_); delete this; }; void JoinOp::generate() { GENERATESTART(3) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND CASESTART(2) opt_join_type_ = new OptJoinType(); opt_join_type_->generate(); CASEEND SWITCHEND GENERATEEND } IR *OptJoinType::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kOptJoinType, OP3("LEFT", "", "")); CASEEND CASESTART(1) res = new IR(kOptJoinType, OP3("LEFT OUTER", "", "")); CASEEND CASESTART(2) res = new IR(kOptJoinType, OP3("INNER", "", "")); CASEEND CASESTART(3) res = new IR(kOptJoinType, OP3("CROSS", "", "")); CASEEND CASESTART(4) res = new IR(kOptJoinType, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptJoinType::deep_delete() { delete this; }; void OptJoinType::generate(){GENERATESTART(5) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND CASESTART(2) CASEEND CASESTART(3) CASEEND CASESTART(4) CASEEND SWITCHEND GENERATEEND} IR *ExprList::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(expr_); auto tmp2 = SAFETRANSLATE(expr_list_); res = new IR(kExprList, OP3("", ",", ""), tmp1, tmp2); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(expr_); res = new IR(kExprList, OP3("", "", ""), tmp1); CASEEND SWITCHEND TRANSLATEEND } void ExprList::deep_delete() { SAFEDELETE(expr_); SAFEDELETE(expr_list_); delete this; }; void ExprList::generate() { GENERATESTART(200) SWITCHSTART CASESTART(0) expr_ = new Expr(); expr_->generate(); expr_list_ = new ExprList(); expr_list_->generate(); CASEEND CASESTART(1) expr_ = new Expr(); expr_->generate(); CASEEND default: { int tmp_case_idx = rand() % 1; switch (tmp_case_idx) { CASESTART(0) expr_ = new Expr(); expr_->generate(); case_idx_ = 1; CASEEND } } } GENERATEEND } IR *OptLimitClause::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(limit_clause_); res = new IR(kOptLimitClause, OP3("", "", ""), tmp1); CASEEND CASESTART(1) res = new IR(kOptLimitClause, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptLimitClause::deep_delete() { SAFEDELETE(limit_clause_); delete this; }; void OptLimitClause::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) limit_clause_ = new LimitClause(); limit_clause_->generate(); CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND } IR *LimitClause::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(expr_1_); res = new IR(kLimitClause, OP3("LIMIT", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(expr_1_); auto tmp2 = SAFETRANSLATE(expr_2_); res = new IR(kLimitClause, OP3("LIMIT", "OFFSET", ""), tmp1, tmp2); CASEEND CASESTART(2) auto tmp1 = SAFETRANSLATE(expr_1_); auto tmp2 = SAFETRANSLATE(expr_2_); res = new IR(kLimitClause, OP3("LIMIT", ",", ""), tmp1, tmp2); CASEEND SWITCHEND TRANSLATEEND } void LimitClause::deep_delete() { SAFEDELETE(expr_1_); SAFEDELETE(expr_2_); delete this; }; void LimitClause::generate() { GENERATESTART(3) SWITCHSTART CASESTART(0) expr_1_ = new Expr(); expr_1_->generate(); CASEEND CASESTART(1) expr_1_ = new Expr(); expr_1_->generate(); expr_2_ = new Expr(); expr_2_->generate(); CASEEND CASESTART(2) expr_1_ = new Expr(); expr_1_->generate(); expr_2_ = new Expr(); expr_2_->generate(); CASEEND SWITCHEND GENERATEEND } IR *OptOrderClause::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(order_item_list_); res = new IR(kOptOrderClause, OP3("ORDER BY", "", ""), tmp1); CASEEND CASESTART(1) res = new IR(kOptOrderClause, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptOrderClause::deep_delete() { SAFEDELETE(order_item_list_); delete this; }; void OptOrderClause::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) order_item_list_ = new OrderItemList(); order_item_list_->generate(); CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND } IR *OptOrderNulls::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kOptOrderNulls, OP3("NULLS FIRST", "", "")); CASEEND CASESTART(1) res = new IR(kOptOrderNulls, OP3("NULLS LAST", "", "")); CASEEND CASESTART(2) res = new IR(kOptOrderNulls, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptOrderNulls::deep_delete() { delete this; }; void OptOrderNulls::generate(){GENERATESTART(3) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND CASESTART(2) CASEEND SWITCHEND GENERATEEND} IR *OrderItemList::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(order_item_); res = new IR(kOrderItemList, OP3("", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(order_item_); auto tmp2 = SAFETRANSLATE(order_item_list_); res = new IR(kOrderItemList, OP3("", ",", ""), tmp1, tmp2); CASEEND SWITCHEND TRANSLATEEND } void OrderItemList::deep_delete() { SAFEDELETE(order_item_); SAFEDELETE(order_item_list_); delete this; }; void OrderItemList::generate() { GENERATESTART(200) SWITCHSTART CASESTART(0) order_item_ = new OrderItem(); order_item_->generate(); CASEEND CASESTART(1) order_item_ = new OrderItem(); order_item_->generate(); order_item_list_ = new OrderItemList(); order_item_list_->generate(); CASEEND default: { int tmp_case_idx = rand() % 1; switch (tmp_case_idx) { CASESTART(0) order_item_ = new OrderItem(); order_item_->generate(); case_idx_ = 0; CASEEND } } } GENERATEEND } IR *OrderItem::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(expr_); auto tmp2 = SAFETRANSLATE(opt_order_behavior_); auto tmp3 = SAFETRANSLATE(opt_order_nulls_); auto tmp4 = new IR(kUnknown, OP3("", "", ""), tmp1, tmp2); PUSH(tmp4); res = new IR(kOrderItem, OP3("", "", ""), tmp4, tmp3); TRANSLATEEND } void OrderItem::deep_delete() { SAFEDELETE(expr_); SAFEDELETE(opt_order_nulls_); SAFEDELETE(opt_order_behavior_); delete this; }; void OrderItem::generate() { GENERATESTART(1) expr_ = new Expr(); expr_->generate(); opt_order_behavior_ = new OptOrderBehavior(); opt_order_behavior_->generate(); opt_order_nulls_ = new OptOrderNulls(); opt_order_nulls_->generate(); GENERATEEND } IR *OptOrderBehavior::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kOptOrderBehavior, OP3("ASC", "", "")); CASEEND CASESTART(1) res = new IR(kOptOrderBehavior, OP3("DESC", "", "")); CASEEND CASESTART(2) res = new IR(kOptOrderBehavior, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptOrderBehavior::deep_delete() { delete this; }; void OptOrderBehavior::generate(){ GENERATESTART(3) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND CASESTART(2) CASEEND SWITCHEND GENERATEEND} IR *OptWithClause::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(cte_table_list_); res = new IR(kOptWithClause, OP3("WITH", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(cte_table_list_); res = new IR(kOptWithClause, OP3("WITH RECURSIVE", "", ""), tmp1); CASEEND CASESTART(2) res = new IR(kOptWithClause, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptWithClause::deep_delete() { SAFEDELETE(cte_table_list_); delete this; }; void OptWithClause::generate() { GENERATESTART(3) SWITCHSTART CASESTART(0) cte_table_list_ = new CteTableList(); cte_table_list_->generate(); CASEEND CASESTART(1) cte_table_list_ = new CteTableList(); cte_table_list_->generate(); CASEEND CASESTART(2) CASEEND SWITCHEND GENERATEEND } IR *CteTableList::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(cte_table_); res = new IR(kCteTableList, OP3("", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(cte_table_); auto tmp2 = SAFETRANSLATE(cte_table_list_); res = new IR(kCteTableList, OP3("", ",", ""), tmp1, tmp2); CASEEND SWITCHEND TRANSLATEEND } void CteTableList::deep_delete() { SAFEDELETE(cte_table_list_); SAFEDELETE(cte_table_); delete this; }; void CteTableList::generate() { GENERATESTART(200) SWITCHSTART CASESTART(0) cte_table_ = new CteTable(); cte_table_->generate(); CASEEND CASESTART(1) cte_table_ = new CteTable(); cte_table_->generate(); cte_table_list_ = new CteTableList(); cte_table_list_->generate(); CASEEND default: { int tmp_case_idx = rand() % 1; switch (tmp_case_idx) { CASESTART(0) cte_table_ = new CteTable(); cte_table_->generate(); case_idx_ = 0; CASEEND } } } GENERATEEND } IR *CteTable::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(cte_table_name_); auto tmp2 = SAFETRANSLATE(select_stmt_); res = new IR(kCteTable, OP3("", "AS (", ")"), tmp1, tmp2); TRANSLATEEND } void CteTable::deep_delete() { SAFEDELETE(cte_table_name_); SAFEDELETE(select_stmt_); delete this; }; void CteTable::generate() { GENERATESTART(1) cte_table_name_ = new CteTableName(); cte_table_name_->generate(); select_stmt_ = new SelectStmt(); select_stmt_->generate(); GENERATEEND } IR *CteTableName::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(table_name_); auto tmp2 = SAFETRANSLATE(opt_column_name_list_p_); res = new IR(kCteTableName, OP3("", "", ""), tmp1, tmp2); TRANSLATEEND } void CteTableName::deep_delete() { SAFEDELETE(opt_column_name_list_p_); SAFEDELETE(table_name_); delete this; }; void CteTableName::generate() { GENERATESTART(1) table_name_ = new TableName(); table_name_->generate(); opt_column_name_list_p_ = new OptColumnNameListP(); opt_column_name_list_p_->generate(); GENERATEEND } IR *OptAllOrDistinct::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kOptAllOrDistinct, OP3("ALL", "", "")); CASEEND CASESTART(1) res = new IR(kOptAllOrDistinct, OP3("DISTINCT", "", "")); CASEEND CASESTART(2) res = new IR(kOptAllOrDistinct, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptAllOrDistinct::deep_delete() { delete this; }; void OptAllOrDistinct::generate(){ GENERATESTART(3) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND CASESTART(2) CASEEND SWITCHEND GENERATEEND} IR *CreateTableStmt::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(opt_temp_); auto tmp2 = SAFETRANSLATE(opt_if_not_exist_); auto tmp3 = SAFETRANSLATE(table_name_); auto tmp4 = SAFETRANSLATE(select_stmt_); auto tmp5 = new IR(kUnknown, OP3("CREATE", "TABLE", ""), tmp1, tmp2); PUSH(tmp5); auto tmp6 = new IR(kUnknown, OP3("", "", "AS"), tmp5, tmp3); PUSH(tmp6); res = new IR(kCreateTableStmt, OP3("", "", ""), tmp6, tmp4); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(opt_temp_); auto tmp2 = SAFETRANSLATE(opt_if_not_exist_); auto tmp3 = SAFETRANSLATE(table_name_); auto tmp4 = SAFETRANSLATE(column_def_list_); auto tmp5 = SAFETRANSLATE(opt_table_constraint_list_); auto tmp6 = new IR(kUnknown, OP3("CREATE", "TABLE", ""), tmp1, tmp2); PUSH(tmp6); auto tmp7 = new IR(kUnknown, OP3("", "", "("), tmp6, tmp3); PUSH(tmp7); auto tmp8 = new IR(kUnknown, OP3("", "", ""), tmp7, tmp4); PUSH(tmp8); res = new IR(kCreateTableStmt, OP3("", "", ")"), tmp8, tmp5); CASEEND SWITCHEND TRANSLATEEND } void CreateTableStmt::deep_delete() { SAFEDELETE(opt_table_constraint_list_); SAFEDELETE(opt_temp_); SAFEDELETE(select_stmt_); SAFEDELETE(table_name_); SAFEDELETE(column_def_list_); SAFEDELETE(opt_if_not_exist_); delete this; }; void CreateTableStmt::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) opt_temp_ = new OptTemp(); opt_temp_->generate(); opt_if_not_exist_ = new OptIfNotExist(); opt_if_not_exist_->generate(); table_name_ = new TableName(); table_name_->generate(); select_stmt_ = new SelectStmt(); select_stmt_->generate(); CASEEND CASESTART(1) opt_temp_ = new OptTemp(); opt_temp_->generate(); opt_if_not_exist_ = new OptIfNotExist(); opt_if_not_exist_->generate(); table_name_ = new TableName(); table_name_->generate(); column_def_list_ = new ColumnDefList(); column_def_list_->generate(); opt_table_constraint_list_ = new OptTableConstraintList(); opt_table_constraint_list_->generate(); CASEEND SWITCHEND GENERATEEND } IR *CreateIndexStmt::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(opt_unique_); auto tmp2 = SAFETRANSLATE(opt_if_not_exist_); auto tmp3 = SAFETRANSLATE(table_name_1_); auto tmp4 = SAFETRANSLATE(table_name_2_); auto tmp5 = SAFETRANSLATE(indexed_column_list_); auto tmp6 = SAFETRANSLATE(opt_where_clause_); auto tmp7 = new IR(kUnknown, OP3("CREATE", "INDEX", ""), tmp1, tmp2); PUSH(tmp7); auto tmp8 = new IR(kUnknown, OP3("", "", "ON"), tmp7, tmp3); PUSH(tmp8); auto tmp9 = new IR(kUnknown, OP3("", "", "("), tmp8, tmp4); PUSH(tmp9); auto tmp10 = new IR(kUnknown, OP3("", "", ")"), tmp9, tmp5); PUSH(tmp10); res = new IR(kCreateIndexStmt, OP3("", "", ""), tmp10, tmp6); TRANSLATEEND } void CreateIndexStmt::deep_delete() { SAFEDELETE(table_name_1_); SAFEDELETE(table_name_2_); SAFEDELETE(opt_if_not_exist_); SAFEDELETE(indexed_column_list_); SAFEDELETE(opt_where_clause_); SAFEDELETE(opt_unique_); delete this; }; void CreateIndexStmt::generate() { GENERATESTART(1) opt_unique_ = new OptUnique(); opt_unique_->generate(); opt_if_not_exist_ = new OptIfNotExist(); opt_if_not_exist_->generate(); table_name_1_ = new TableName(); table_name_1_->generate(); table_name_2_ = new TableName(); table_name_2_->generate(); indexed_column_list_ = new IndexedColumnList(); indexed_column_list_->generate(); opt_where_clause_ = new OptWhereClause(); opt_where_clause_->generate(); GENERATEEND } IR *CreateViewStmt::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(opt_temp_); auto tmp2 = SAFETRANSLATE(view_name_); auto tmp3 = SAFETRANSLATE(opt_column_name_list_p_); auto tmp4 = SAFETRANSLATE(select_stmt_); auto tmp5 = SAFETRANSLATE(opt_check_option_); auto tmp6 = new IR(kUnknown, OP3("CREATE", "VIEW", ""), tmp1, tmp2); PUSH(tmp6); auto tmp7 = new IR(kUnknown, OP3("", "", "AS"), tmp6, tmp3); PUSH(tmp7); auto tmp8 = new IR(kUnknown, OP3("", "", ""), tmp7, tmp4); PUSH(tmp8); res = new IR(kCreateViewStmt, OP3("", "", ""), tmp8, tmp5); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(opt_temp_); auto tmp2 = SAFETRANSLATE(view_name_); auto tmp3 = SAFETRANSLATE(opt_column_name_list_p_); auto tmp4 = SAFETRANSLATE(select_stmt_); auto tmp5 = SAFETRANSLATE(opt_check_option_); auto tmp6 = new IR(kUnknown, OP3("CREATE", "RECURSIVE VIEW", ""), tmp1, tmp2); PUSH(tmp6); auto tmp7 = new IR(kUnknown, OP3("", "", "AS"), tmp6, tmp3); PUSH(tmp7); auto tmp8 = new IR(kUnknown, OP3("", "", ""), tmp7, tmp4); PUSH(tmp8); res = new IR(kCreateViewStmt, OP3("", "", ""), tmp8, tmp5); CASEEND CASESTART(2) auto tmp1 = SAFETRANSLATE(opt_temp_); auto tmp2 = SAFETRANSLATE(view_name_); auto tmp3 = SAFETRANSLATE(opt_column_name_list_p_); auto tmp4 = SAFETRANSLATE(select_stmt_); auto tmp5 = SAFETRANSLATE(opt_check_option_); auto tmp6 = new IR(kUnknown, OP3("CREATE OR REPLACE", "VIEW", ""), tmp1, tmp2); PUSH(tmp6); auto tmp7 = new IR(kUnknown, OP3("", "", "AS"), tmp6, tmp3); PUSH(tmp7); auto tmp8 = new IR(kUnknown, OP3("", "", ""), tmp7, tmp4); PUSH(tmp8); res = new IR(kCreateViewStmt, OP3("", "", ""), tmp8, tmp5); CASEEND CASESTART(3) auto tmp1 = SAFETRANSLATE(opt_temp_); auto tmp2 = SAFETRANSLATE(view_name_); auto tmp3 = SAFETRANSLATE(opt_column_name_list_p_); auto tmp4 = SAFETRANSLATE(select_stmt_); auto tmp5 = SAFETRANSLATE(opt_check_option_); auto tmp6 = new IR(kUnknown, OP3("CREATE OR REPLACE", "RECURSIVE VIEW", ""), tmp1, tmp2); PUSH(tmp6); auto tmp7 = new IR(kUnknown, OP3("", "", "AS"), tmp6, tmp3); PUSH(tmp7); auto tmp8 = new IR(kUnknown, OP3("", "", ""), tmp7, tmp4); PUSH(tmp8); res = new IR(kCreateViewStmt, OP3("", "", ""), tmp8, tmp5); CASEEND SWITCHEND TRANSLATEEND } void CreateViewStmt::deep_delete() { SAFEDELETE(opt_temp_); SAFEDELETE(view_name_); SAFEDELETE(opt_column_name_list_p_); SAFEDELETE(select_stmt_); SAFEDELETE(opt_check_option_); delete this; }; void CreateViewStmt::generate() { GENERATESTART(4) SWITCHSTART CASESTART(0) opt_temp_ = new OptTemp(); opt_temp_->generate(); view_name_ = new ViewName(); view_name_->generate(); opt_column_name_list_p_ = new OptColumnNameListP(); opt_column_name_list_p_->generate(); select_stmt_ = new SelectStmt(); select_stmt_->generate(); opt_check_option_ = new OptCheckOption(); opt_check_option_->generate(); CASEEND CASESTART(1) opt_temp_ = new OptTemp(); opt_temp_->generate(); view_name_ = new ViewName(); view_name_->generate(); opt_column_name_list_p_ = new OptColumnNameListP(); opt_column_name_list_p_->generate(); select_stmt_ = new SelectStmt(); select_stmt_->generate(); opt_check_option_ = new OptCheckOption(); opt_check_option_->generate(); CASEEND CASESTART(2) opt_temp_ = new OptTemp(); opt_temp_->generate(); view_name_ = new ViewName(); view_name_->generate(); opt_column_name_list_p_ = new OptColumnNameListP(); opt_column_name_list_p_->generate(); select_stmt_ = new SelectStmt(); select_stmt_->generate(); opt_check_option_ = new OptCheckOption(); opt_check_option_->generate(); CASEEND CASESTART(3) opt_temp_ = new OptTemp(); opt_temp_->generate(); view_name_ = new ViewName(); view_name_->generate(); opt_column_name_list_p_ = new OptColumnNameListP(); opt_column_name_list_p_->generate(); select_stmt_ = new SelectStmt(); select_stmt_->generate(); opt_check_option_ = new OptCheckOption(); opt_check_option_->generate(); CASEEND SWITCHEND GENERATEEND } IR *DropIndexStmt::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(opt_if_exist_); auto tmp2 = SAFETRANSLATE(table_name_); res = new IR(kDropIndexStmt, OP3("DROP INDEX", "", ""), tmp1, tmp2); TRANSLATEEND } void DropIndexStmt::deep_delete() { SAFEDELETE(table_name_); SAFEDELETE(opt_if_exist_); delete this; }; void DropIndexStmt::generate() { GENERATESTART(1) opt_if_exist_ = new OptIfExist(); opt_if_exist_->generate(); table_name_ = new TableName(); table_name_->generate(); GENERATEEND } IR *DropTableStmt::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(opt_if_exist_); auto tmp2 = SAFETRANSLATE(table_name_); res = new IR(kDropTableStmt, OP3("DROP TABLE", "", ""), tmp1, tmp2); TRANSLATEEND } void DropTableStmt::deep_delete() { SAFEDELETE(table_name_); SAFEDELETE(opt_if_exist_); delete this; }; void DropTableStmt::generate() { GENERATESTART(1) opt_if_exist_ = new OptIfExist(); opt_if_exist_->generate(); table_name_ = new TableName(); table_name_->generate(); GENERATEEND } IR *DropViewStmt::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(opt_if_exist_); auto tmp2 = SAFETRANSLATE(view_name_); res = new IR(kDropViewStmt, OP3("DROP VIEW", "", ""), tmp1, tmp2); TRANSLATEEND } void DropViewStmt::deep_delete() { SAFEDELETE(view_name_); SAFEDELETE(opt_if_exist_); delete this; }; void DropViewStmt::generate() { GENERATESTART(1) opt_if_exist_ = new OptIfExist(); opt_if_exist_->generate(); view_name_ = new ViewName(); view_name_->generate(); GENERATEEND } IR *InsertStmt::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(opt_with_clause_); auto tmp2 = SAFETRANSLATE(table_name_); auto tmp3 = SAFETRANSLATE(insert_rest_); auto tmp4 = SAFETRANSLATE(opt_on_conflict_); auto tmp5 = new IR(kUnknown, OP3("", "INSERT INTO", ""), tmp1, tmp2); PUSH(tmp5); auto tmp6 = new IR(kUnknown, OP3("", "", ""), tmp5, tmp3); PUSH(tmp6); res = new IR(kInsertStmt, OP3("", "", ""), tmp6, tmp4); TRANSLATEEND } void InsertStmt::deep_delete() { SAFEDELETE(insert_rest_); SAFEDELETE(table_name_); SAFEDELETE(opt_on_conflict_); SAFEDELETE(opt_with_clause_); delete this; }; void InsertStmt::generate() { GENERATESTART(1) opt_with_clause_ = new OptWithClause(); opt_with_clause_->generate(); table_name_ = new TableName(); table_name_->generate(); insert_rest_ = new InsertRest(); insert_rest_->generate(); opt_on_conflict_ = new OptOnConflict(); opt_on_conflict_->generate(); GENERATEEND } IR *InsertRest::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(opt_column_name_list_p_); auto tmp2 = SAFETRANSLATE(select_no_parens_); res = new IR(kInsertRest, OP3("", "", ""), tmp1, tmp2); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(opt_column_name_list_p_); res = new IR(kInsertRest, OP3("", "DEFAULT VALUES", ""), tmp1); CASEEND CASESTART(2) auto tmp1 = SAFETRANSLATE(opt_column_name_list_p_); auto tmp2 = SAFETRANSLATE(super_values_list_); res = new IR(kInsertRest, OP3("", "VALUES", ""), tmp1, tmp2); CASEEND SWITCHEND TRANSLATEEND } void InsertRest::deep_delete() { SAFEDELETE(opt_column_name_list_p_); SAFEDELETE(super_values_list_); SAFEDELETE(select_no_parens_); delete this; }; void InsertRest::generate() { GENERATESTART(3) SWITCHSTART CASESTART(0) opt_column_name_list_p_ = new OptColumnNameListP(); opt_column_name_list_p_->generate(); select_no_parens_ = new SelectNoParens(); select_no_parens_->generate(); CASEEND CASESTART(1) opt_column_name_list_p_ = new OptColumnNameListP(); opt_column_name_list_p_->generate(); CASEEND CASESTART(2) opt_column_name_list_p_ = new OptColumnNameListP(); opt_column_name_list_p_->generate(); super_values_list_ = new SuperValuesList(); super_values_list_->generate(); CASEEND SWITCHEND GENERATEEND } IR *SuperValuesList::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(values_list_); res = new IR(kSuperValuesList, OP3("", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(values_list_); auto tmp2 = SAFETRANSLATE(super_values_list_); res = new IR(kSuperValuesList, OP3("", ",", ""), tmp1, tmp2); CASEEND SWITCHEND TRANSLATEEND } void SuperValuesList::deep_delete() { SAFEDELETE(values_list_); SAFEDELETE(super_values_list_); delete this; }; void SuperValuesList::generate() { GENERATESTART(200) SWITCHSTART CASESTART(0) values_list_ = new ValuesList(); values_list_->generate(); CASEEND CASESTART(1) values_list_ = new ValuesList(); values_list_->generate(); super_values_list_ = new SuperValuesList(); super_values_list_->generate(); CASEEND default: { int tmp_case_idx = rand() % 1; switch (tmp_case_idx) { CASESTART(0) values_list_ = new ValuesList(); values_list_->generate(); case_idx_ = 0; CASEEND } } } GENERATEEND } IR *ValuesList::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(expr_list_); res = new IR(kValuesList, OP3("(", ")", ""), tmp1); TRANSLATEEND } void ValuesList::deep_delete() { SAFEDELETE(expr_list_); delete this; }; void ValuesList::generate() { GENERATESTART(1) expr_list_ = new ExprList(); expr_list_->generate(); GENERATEEND } IR *OptOnConflict::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(opt_conflict_expr_); res = new IR(kOptOnConflict, OP3("ON CONFLICT", "DO NOTHING", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(opt_conflict_expr_); auto tmp2 = SAFETRANSLATE(set_clause_list_); auto tmp3 = SAFETRANSLATE(where_clause_); auto tmp4 = new IR(kUnknown, OP3("ON CONFLICT", "DO UPDATE", ""), tmp1, tmp2); PUSH(tmp4); res = new IR(kOptOnConflict, OP3("", "", ""), tmp4, tmp3); CASEEND CASESTART(2) res = new IR(kOptOnConflict, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptOnConflict::deep_delete() { SAFEDELETE(opt_conflict_expr_); SAFEDELETE(set_clause_list_); SAFEDELETE(where_clause_); delete this; }; void OptOnConflict::generate() { GENERATESTART(3) SWITCHSTART CASESTART(0) opt_conflict_expr_ = new OptConflictExpr(); opt_conflict_expr_->generate(); CASEEND CASESTART(1) opt_conflict_expr_ = new OptConflictExpr(); opt_conflict_expr_->generate(); set_clause_list_ = new SetClauseList(); set_clause_list_->generate(); where_clause_ = new WhereClause(); where_clause_->generate(); CASEEND CASESTART(2) CASEEND SWITCHEND GENERATEEND } IR *OptConflictExpr::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(indexed_column_list_); auto tmp2 = SAFETRANSLATE(where_clause_); res = new IR(kOptConflictExpr, OP3("(", ")", ""), tmp1, tmp2); CASEEND CASESTART(1) res = new IR(kOptConflictExpr, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptConflictExpr::deep_delete() { SAFEDELETE(indexed_column_list_); SAFEDELETE(where_clause_); delete this; }; void OptConflictExpr::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) indexed_column_list_ = new IndexedColumnList(); indexed_column_list_->generate(); where_clause_ = new WhereClause(); where_clause_->generate(); CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND } IR *IndexedColumnList::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(indexed_column_); res = new IR(kIndexedColumnList, OP3("", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(indexed_column_); auto tmp2 = SAFETRANSLATE(indexed_column_list_); res = new IR(kIndexedColumnList, OP3("", ",", ""), tmp1, tmp2); CASEEND SWITCHEND TRANSLATEEND } void IndexedColumnList::deep_delete() { SAFEDELETE(indexed_column_); SAFEDELETE(indexed_column_list_); delete this; }; void IndexedColumnList::generate() { GENERATESTART(200) SWITCHSTART CASESTART(0) indexed_column_ = new IndexedColumn(); indexed_column_->generate(); CASEEND CASESTART(1) indexed_column_ = new IndexedColumn(); indexed_column_->generate(); indexed_column_list_ = new IndexedColumnList(); indexed_column_list_->generate(); CASEEND default: { int tmp_case_idx = rand() % 1; switch (tmp_case_idx) { CASESTART(0) indexed_column_ = new IndexedColumn(); indexed_column_->generate(); case_idx_ = 0; CASEEND } } } GENERATEEND } IR *IndexedColumn::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(expr_); auto tmp2 = SAFETRANSLATE(opt_order_behavior_); res = new IR(kIndexedColumn, OP3("", "", ""), tmp1, tmp2); TRANSLATEEND } void IndexedColumn::deep_delete() { SAFEDELETE(expr_); SAFEDELETE(opt_order_behavior_); delete this; }; void IndexedColumn::generate() { GENERATESTART(1) expr_ = new Expr(); expr_->generate(); opt_order_behavior_ = new OptOrderBehavior(); opt_order_behavior_->generate(); GENERATEEND } IR *UpdateStmt::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(opt_with_clause_); auto tmp2 = SAFETRANSLATE(table_name_); auto tmp3 = SAFETRANSLATE(set_clause_list_); auto tmp4 = SAFETRANSLATE(opt_where_clause_); auto tmp5 = new IR(kUnknown, OP3("", "UPDATE", "SET"), tmp1, tmp2); PUSH(tmp5); auto tmp6 = new IR(kUnknown, OP3("", "", ""), tmp5, tmp3); PUSH(tmp6); res = new IR(kUpdateStmt, OP3("", "", ""), tmp6, tmp4); TRANSLATEEND } void UpdateStmt::deep_delete() { SAFEDELETE(table_name_); SAFEDELETE(set_clause_list_); SAFEDELETE(opt_with_clause_); SAFEDELETE(opt_where_clause_); delete this; }; void UpdateStmt::generate() { GENERATESTART(1) opt_with_clause_ = new OptWithClause(); opt_with_clause_->generate(); table_name_ = new TableName(); table_name_->generate(); set_clause_list_ = new SetClauseList(); set_clause_list_->generate(); opt_where_clause_ = new OptWhereClause(); opt_where_clause_->generate(); GENERATEEND } IR *ReindexStmt::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(table_name_); res = new IR(kReindexStmt, OP3("REINDEX TABLE", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(table_name_); res = new IR(kReindexStmt, OP3("REINDEX INDEX", "", ""), tmp1); CASEEND SWITCHEND TRANSLATEEND } void ReindexStmt::deep_delete() { SAFEDELETE(table_name_); delete this; }; void ReindexStmt::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) table_name_ = new TableName(); table_name_->generate(); CASEEND CASESTART(1) table_name_ = new TableName(); table_name_->generate(); CASEEND SWITCHEND GENERATEEND } IR *AlterAction::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(table_name_); res = new IR(kAlterAction, OP3("RENAME TO", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(opt_column_); auto tmp2 = SAFETRANSLATE(column_name_1_); auto tmp3 = SAFETRANSLATE(column_name_2_); auto tmp4 = new IR(kUnknown, OP3("RENAME", "", "TO"), tmp1, tmp2); PUSH(tmp4); res = new IR(kAlterAction, OP3("", "", ""), tmp4, tmp3); CASEEND CASESTART(2) auto tmp1 = SAFETRANSLATE(opt_column_); auto tmp2 = SAFETRANSLATE(column_def_); res = new IR(kAlterAction, OP3("ADD", "", ""), tmp1, tmp2); CASEEND SWITCHEND TRANSLATEEND } void AlterAction::deep_delete() { SAFEDELETE(column_def_); SAFEDELETE(opt_column_); SAFEDELETE(table_name_); SAFEDELETE(column_name_1_); SAFEDELETE(column_name_2_); delete this; }; void AlterAction::generate() { GENERATESTART(3) SWITCHSTART CASESTART(0) table_name_ = new TableName(); table_name_->generate(); CASEEND CASESTART(1) opt_column_ = new OptColumn(); opt_column_->generate(); column_name_1_ = new ColumnName(); column_name_1_->generate(); column_name_2_ = new ColumnName(); column_name_2_->generate(); CASEEND CASESTART(2) opt_column_ = new OptColumn(); opt_column_->generate(); column_def_ = new ColumnDef(); column_def_->generate(); CASEEND SWITCHEND GENERATEEND } IR *ColumnDefList::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(column_def_); res = new IR(kColumnDefList, OP3("", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(column_def_); auto tmp2 = SAFETRANSLATE(column_def_list_); res = new IR(kColumnDefList, OP3("", ",", ""), tmp1, tmp2); CASEEND SWITCHEND TRANSLATEEND } void ColumnDefList::deep_delete() { SAFEDELETE(column_def_); SAFEDELETE(column_def_list_); delete this; }; void ColumnDefList::generate() { GENERATESTART(200) SWITCHSTART CASESTART(0) column_def_ = new ColumnDef(); column_def_->generate(); CASEEND CASESTART(1) column_def_ = new ColumnDef(); column_def_->generate(); column_def_list_ = new ColumnDefList(); column_def_list_->generate(); CASEEND default: { int tmp_case_idx = rand() % 1; switch (tmp_case_idx) { CASESTART(0) column_def_ = new ColumnDef(); column_def_->generate(); case_idx_ = 0; CASEEND } } } GENERATEEND } IR *ColumnDef::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(identifier_); auto tmp2 = SAFETRANSLATE(type_name_); auto tmp3 = SAFETRANSLATE(opt_column_constraint_list_); auto tmp4 = new IR(kUnknown, OP3("", "", ""), tmp1, tmp2); PUSH(tmp4); res = new IR(kColumnDef, OP3("", "", ""), tmp4, tmp3); TRANSLATEEND } void ColumnDef::deep_delete() { SAFEDELETE(type_name_); SAFEDELETE(identifier_); SAFEDELETE(opt_column_constraint_list_); delete this; }; void ColumnDef::generate() { GENERATESTART(1) identifier_ = new Identifier(); identifier_->generate(); type_name_ = new TypeName(); type_name_->generate(); opt_column_constraint_list_ = new OptColumnConstraintList(); opt_column_constraint_list_->generate(); GENERATEEND } IR *OptColumnConstraintList::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(column_constraint_list_); res = new IR(kOptColumnConstraintList, OP3("", "", ""), tmp1); CASEEND CASESTART(1) res = new IR(kOptColumnConstraintList, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptColumnConstraintList::deep_delete() { SAFEDELETE(column_constraint_list_); delete this; }; void OptColumnConstraintList::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) column_constraint_list_ = new ColumnConstraintList(); column_constraint_list_->generate(); CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND } IR *ColumnConstraintList::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(column_constraint_); res = new IR(kColumnConstraintList, OP3("", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(column_constraint_); auto tmp2 = SAFETRANSLATE(column_constraint_list_); res = new IR(kColumnConstraintList, OP3("", "", ""), tmp1, tmp2); CASEEND SWITCHEND TRANSLATEEND } void ColumnConstraintList::deep_delete() { SAFEDELETE(column_constraint_list_); SAFEDELETE(column_constraint_); delete this; }; void ColumnConstraintList::generate() { GENERATESTART(200) SWITCHSTART CASESTART(0) column_constraint_ = new ColumnConstraint(); column_constraint_->generate(); CASEEND CASESTART(1) column_constraint_ = new ColumnConstraint(); column_constraint_->generate(); column_constraint_list_ = new ColumnConstraintList(); column_constraint_list_->generate(); CASEEND default: { int tmp_case_idx = rand() % 1; switch (tmp_case_idx) { CASESTART(0) column_constraint_ = new ColumnConstraint(); column_constraint_->generate(); case_idx_ = 0; CASEEND } } } GENERATEEND } IR *ColumnConstraint::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(constraint_type_); res = new IR(kColumnConstraint, OP3("", "", ""), tmp1); TRANSLATEEND } void ColumnConstraint::deep_delete() { SAFEDELETE(constraint_type_); delete this; }; void ColumnConstraint::generate() { GENERATESTART(1) constraint_type_ = new ConstraintType(); constraint_type_->generate(); GENERATEEND } IR *ConstraintType::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kConstraintType, OP3("PRIMARY KEY", "", "")); CASEEND CASESTART(1) res = new IR(kConstraintType, OP3("NOT NULL", "", "")); CASEEND CASESTART(2) res = new IR(kConstraintType, OP3("UNIQUE", "", "")); CASEEND CASESTART(3) auto tmp1 = SAFETRANSLATE(expr_); res = new IR(kConstraintType, OP3("CHECK (", ")", ""), tmp1); CASEEND CASESTART(4) auto tmp1 = SAFETRANSLATE(foreign_clause_); res = new IR(kConstraintType, OP3("", "", ""), tmp1); CASEEND SWITCHEND TRANSLATEEND } void ConstraintType::deep_delete() { SAFEDELETE(expr_); SAFEDELETE(foreign_clause_); delete this; }; void ConstraintType::generate() { GENERATESTART(5) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND CASESTART(2) CASEEND CASESTART(3) expr_ = new Expr(); expr_->generate(); CASEEND CASESTART(4) foreign_clause_ = new ForeignClause(); foreign_clause_->generate(); CASEEND SWITCHEND GENERATEEND } IR *ForeignClause::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(table_name_); auto tmp2 = SAFETRANSLATE(opt_column_name_list_p_); auto tmp3 = SAFETRANSLATE(opt_foreign_key_actions_); auto tmp4 = SAFETRANSLATE(opt_constraint_attribute_spec_); auto tmp5 = new IR(kUnknown, OP3("REFERENCES", "", ""), tmp1, tmp2); PUSH(tmp5); auto tmp6 = new IR(kUnknown, OP3("", "", ""), tmp5, tmp3); PUSH(tmp6); res = new IR(kForeignClause, OP3("", "", ""), tmp6, tmp4); TRANSLATEEND } void ForeignClause::deep_delete() { SAFEDELETE(opt_constraint_attribute_spec_); SAFEDELETE(opt_column_name_list_p_); SAFEDELETE(table_name_); SAFEDELETE(opt_foreign_key_actions_); delete this; }; void ForeignClause::generate() { GENERATESTART(1) table_name_ = new TableName(); table_name_->generate(); opt_column_name_list_p_ = new OptColumnNameListP(); opt_column_name_list_p_->generate(); opt_foreign_key_actions_ = new OptForeignKeyActions(); opt_foreign_key_actions_->generate(); opt_constraint_attribute_spec_ = new OptConstraintAttributeSpec(); opt_constraint_attribute_spec_->generate(); GENERATEEND } IR *OptForeignKeyActions::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(foreign_key_actions_); res = new IR(kOptForeignKeyActions, OP3("", "", ""), tmp1); CASEEND CASESTART(1) res = new IR(kOptForeignKeyActions, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptForeignKeyActions::deep_delete() { SAFEDELETE(foreign_key_actions_); delete this; }; void OptForeignKeyActions::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) foreign_key_actions_ = new ForeignKeyActions(); foreign_key_actions_->generate(); CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND } IR *ForeignKeyActions::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kForeignKeyActions, OP3("MATCH FULL", "", "")); CASEEND CASESTART(1) res = new IR(kForeignKeyActions, OP3("MATCH PARTIAL", "", "")); CASEEND CASESTART(2) res = new IR(kForeignKeyActions, OP3("MATCH SIMPLE", "", "")); CASEEND CASESTART(3) auto tmp1 = SAFETRANSLATE(key_actions_); res = new IR(kForeignKeyActions, OP3("ON UPDATE", "", ""), tmp1); CASEEND CASESTART(4) auto tmp1 = SAFETRANSLATE(key_actions_); res = new IR(kForeignKeyActions, OP3("ON DELETE", "", ""), tmp1); CASEEND SWITCHEND TRANSLATEEND } void ForeignKeyActions::deep_delete() { SAFEDELETE(key_actions_); delete this; }; void ForeignKeyActions::generate() { GENERATESTART(5) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND CASESTART(2) CASEEND CASESTART(3) key_actions_ = new KeyActions(); key_actions_->generate(); CASEEND CASESTART(4) key_actions_ = new KeyActions(); key_actions_->generate(); CASEEND SWITCHEND GENERATEEND } IR *KeyActions::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kKeyActions, OP3("SET NULL", "", "")); CASEEND CASESTART(1) res = new IR(kKeyActions, OP3("SET DEFAULT", "", "")); CASEEND CASESTART(2) res = new IR(kKeyActions, OP3("CASCADE", "", "")); CASEEND CASESTART(3) res = new IR(kKeyActions, OP3("RESTRICT", "", "")); CASEEND CASESTART(4) res = new IR(kKeyActions, OP3("NO ACTION", "", "")); CASEEND SWITCHEND TRANSLATEEND } void KeyActions::deep_delete() { delete this; }; void KeyActions::generate(){GENERATESTART(5) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND CASESTART(2) CASEEND CASESTART(3) CASEEND CASESTART(4) CASEEND SWITCHEND GENERATEEND} IR *OptConstraintAttributeSpec::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(opt_initial_time_); res = new IR(kOptConstraintAttributeSpec, OP3("DEFFERRABLE", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(opt_initial_time_); res = new IR(kOptConstraintAttributeSpec, OP3("NOT DEFFERRABLE", "", ""), tmp1); CASEEND CASESTART(2) res = new IR(kOptConstraintAttributeSpec, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptConstraintAttributeSpec::deep_delete() { SAFEDELETE(opt_initial_time_); delete this; }; void OptConstraintAttributeSpec::generate() { GENERATESTART(3) SWITCHSTART CASESTART(0) opt_initial_time_ = new OptInitialTime(); opt_initial_time_->generate(); CASEEND CASESTART(1) opt_initial_time_ = new OptInitialTime(); opt_initial_time_->generate(); CASEEND CASESTART(2) CASEEND SWITCHEND GENERATEEND } IR *OptInitialTime::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kOptInitialTime, OP3("INITIALLY DEFERRED", "", "")); CASEEND CASESTART(1) res = new IR(kOptInitialTime, OP3("INITIALLY IMMEDIATE", "", "")); CASEEND CASESTART(2) res = new IR(kOptInitialTime, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptInitialTime::deep_delete() { delete this; }; void OptInitialTime::generate(){ GENERATESTART(3) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND CASESTART(2) CASEEND SWITCHEND GENERATEEND} IR *ConstraintName::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(name_); res = new IR(kConstraintName, OP3("CONSTRAINT", "", ""), tmp1); TRANSLATEEND } void ConstraintName::deep_delete() { SAFEDELETE(name_); delete this; }; void ConstraintName::generate() { GENERATESTART(1) name_ = new Name(); name_->generate(); GENERATEEND } IR *OptTemp::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kOptTemp, OP3("TEMPORARY", "", "")); CASEEND CASESTART(1) res = new IR(kOptTemp, OP3("TEMP", "", "")); CASEEND CASESTART(2) res = new IR(kOptTemp, OP3("LOCAL TEMPORARY", "", "")); CASEEND CASESTART(3) res = new IR(kOptTemp, OP3("LOCAL TEMP", "", "")); CASEEND CASESTART(4) res = new IR(kOptTemp, OP3("GLOBAL TEMPORARY", "", "")); CASEEND CASESTART(5) res = new IR(kOptTemp, OP3("GLOBAL TEMP", "", "")); CASEEND CASESTART(6) res = new IR(kOptTemp, OP3("UNLOGGED", "", "")); CASEEND CASESTART(7) res = new IR(kOptTemp, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptTemp::deep_delete() { delete this; }; void OptTemp::generate(){ GENERATESTART(8) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND CASESTART(2) CASEEND CASESTART(3) CASEEND CASESTART(4) CASEEND CASESTART(5) CASEEND CASESTART(6) CASEEND CASESTART(7) CASEEND SWITCHEND GENERATEEND} IR *OptCheckOption::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kOptCheckOption, OP3("WITH CHECK OPTION", "", "")); CASEEND CASESTART(1) res = new IR(kOptCheckOption, OP3("WITH CASCADED CHECK OPTION", "", "")); CASEEND CASESTART(2) res = new IR(kOptCheckOption, OP3("WITH LOCAL CHECK OPTION", "", "")); CASEEND CASESTART(3) res = new IR(kOptCheckOption, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptCheckOption::deep_delete() { delete this; }; void OptCheckOption::generate(){ GENERATESTART(4) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND CASESTART(2) CASEEND CASESTART(3) CASEEND SWITCHEND GENERATEEND} IR *OptColumnNameListP::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(column_name_list_); res = new IR(kOptColumnNameListP, OP3("(", ")", ""), tmp1); CASEEND CASESTART(1) res = new IR(kOptColumnNameListP, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptColumnNameListP::deep_delete() { SAFEDELETE(column_name_list_); delete this; }; void OptColumnNameListP::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) column_name_list_ = new ColumnNameList(); column_name_list_->generate(); CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND } IR *SetClauseList::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(set_clause_); res = new IR(kSetClauseList, OP3("", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(set_clause_); auto tmp2 = SAFETRANSLATE(set_clause_list_); res = new IR(kSetClauseList, OP3("", ",", ""), tmp1, tmp2); CASEEND SWITCHEND TRANSLATEEND } void SetClauseList::deep_delete() { SAFEDELETE(set_clause_); SAFEDELETE(set_clause_list_); delete this; }; void SetClauseList::generate() { GENERATESTART(200) SWITCHSTART CASESTART(0) set_clause_ = new SetClause(); set_clause_->generate(); CASEEND CASESTART(1) set_clause_ = new SetClause(); set_clause_->generate(); set_clause_list_ = new SetClauseList(); set_clause_list_->generate(); CASEEND default: { int tmp_case_idx = rand() % 1; switch (tmp_case_idx) { CASESTART(0) set_clause_ = new SetClause(); set_clause_->generate(); case_idx_ = 0; CASEEND } } } GENERATEEND } IR *SetClause::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(column_name_); auto tmp2 = SAFETRANSLATE(expr_); res = new IR(kSetClause, OP3("", "=", ""), tmp1, tmp2); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(column_name_list_); auto tmp2 = SAFETRANSLATE(expr_); res = new IR(kSetClause, OP3("(", ") =", ""), tmp1, tmp2); CASEEND SWITCHEND TRANSLATEEND } void SetClause::deep_delete() { SAFEDELETE(expr_); SAFEDELETE(column_name_list_); SAFEDELETE(column_name_); delete this; }; void SetClause::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) column_name_ = new ColumnName(); column_name_->generate(); expr_ = new Expr(); expr_->generate(); CASEEND CASESTART(1) column_name_list_ = new ColumnNameList(); column_name_list_->generate(); expr_ = new Expr(); expr_->generate(); CASEEND SWITCHEND GENERATEEND } IR *Expr::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(operand_); res = new IR(kExpr, OP3("", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(between_expr_); res = new IR(kExpr, OP3("", "", ""), tmp1); CASEEND CASESTART(2) auto tmp1 = SAFETRANSLATE(exists_expr_); res = new IR(kExpr, OP3("", "", ""), tmp1); CASEEND CASESTART(3) auto tmp1 = SAFETRANSLATE(in_expr_); res = new IR(kExpr, OP3("", "", ""), tmp1); CASEEND CASESTART(4) auto tmp1 = SAFETRANSLATE(cast_expr_); res = new IR(kExpr, OP3("", "", ""), tmp1); CASEEND CASESTART(5) auto tmp1 = SAFETRANSLATE(logic_expr_); res = new IR(kExpr, OP3("", "", ""), tmp1); CASEEND SWITCHEND TRANSLATEEND } void Expr::deep_delete() { SAFEDELETE(cast_expr_); SAFEDELETE(in_expr_); SAFEDELETE(between_expr_); SAFEDELETE(operand_); SAFEDELETE(exists_expr_); SAFEDELETE(logic_expr_); delete this; }; void Expr::generate() { GENERATESTART(6) SWITCHSTART CASESTART(0) operand_ = new Operand(); operand_->generate(); CASEEND CASESTART(1) between_expr_ = new BetweenExpr(); between_expr_->generate(); CASEEND CASESTART(2) exists_expr_ = new ExistsExpr(); exists_expr_->generate(); CASEEND CASESTART(3) in_expr_ = new InExpr(); in_expr_->generate(); CASEEND CASESTART(4) cast_expr_ = new CastExpr(); cast_expr_->generate(); CASEEND CASESTART(5) logic_expr_ = new LogicExpr(); logic_expr_->generate(); CASEEND SWITCHEND GENERATEEND } IR *Operand::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(expr_list_); res = new IR(kOperand, OP3("(", ")", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(array_index_); res = new IR(kOperand, OP3("", "", ""), tmp1); CASEEND CASESTART(2) auto tmp1 = SAFETRANSLATE(scalar_expr_); res = new IR(kOperand, OP3("", "", ""), tmp1); CASEEND CASESTART(3) auto tmp1 = SAFETRANSLATE(unary_expr_); res = new IR(kOperand, OP3("", "", ""), tmp1); CASEEND CASESTART(4) auto tmp1 = SAFETRANSLATE(binary_expr_); res = new IR(kOperand, OP3("", "", ""), tmp1); CASEEND CASESTART(5) auto tmp1 = SAFETRANSLATE(case_expr_); res = new IR(kOperand, OP3("", "", ""), tmp1); CASEEND CASESTART(6) auto tmp1 = SAFETRANSLATE(extract_expr_); res = new IR(kOperand, OP3("", "", ""), tmp1); CASEEND CASESTART(7) auto tmp1 = SAFETRANSLATE(select_no_parens_); res = new IR(kOperand, OP3("(", ")", ""), tmp1); CASEEND SWITCHEND TRANSLATEEND } void Operand::deep_delete() { SAFEDELETE(unary_expr_); SAFEDELETE(expr_list_); SAFEDELETE(case_expr_); SAFEDELETE(select_no_parens_); SAFEDELETE(extract_expr_); SAFEDELETE(array_index_); SAFEDELETE(binary_expr_); SAFEDELETE(scalar_expr_); delete this; }; void Operand::generate() { GENERATESTART(8) SWITCHSTART CASESTART(0) expr_list_ = new ExprList(); expr_list_->generate(); CASEEND CASESTART(1) array_index_ = new ArrayIndex(); array_index_->generate(); CASEEND CASESTART(2) scalar_expr_ = new ScalarExpr(); scalar_expr_->generate(); CASEEND CASESTART(3) unary_expr_ = new UnaryExpr(); unary_expr_->generate(); CASEEND CASESTART(4) binary_expr_ = new BinaryExpr(); binary_expr_->generate(); CASEEND CASESTART(5) case_expr_ = new CaseExpr(); case_expr_->generate(); CASEEND CASESTART(6) extract_expr_ = new ExtractExpr(); extract_expr_->generate(); CASEEND CASESTART(7) select_no_parens_ = new SelectNoParens(); select_no_parens_->generate(); CASEEND SWITCHEND GENERATEEND } IR *CastExpr::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(expr_); auto tmp2 = SAFETRANSLATE(type_name_); res = new IR(kCastExpr, OP3("CAST (", "AS", ")"), tmp1, tmp2); TRANSLATEEND } void CastExpr::deep_delete() { SAFEDELETE(expr_); SAFEDELETE(type_name_); delete this; }; void CastExpr::generate() { GENERATESTART(1) expr_ = new Expr(); expr_->generate(); type_name_ = new TypeName(); type_name_->generate(); GENERATEEND } IR *ScalarExpr::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(column_name_); res = new IR(kScalarExpr, OP3("", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(literal_); res = new IR(kScalarExpr, OP3("", "", ""), tmp1); CASEEND SWITCHEND TRANSLATEEND } void ScalarExpr::deep_delete() { SAFEDELETE(literal_); SAFEDELETE(column_name_); delete this; }; void ScalarExpr::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) column_name_ = new ColumnName(); column_name_->generate(); CASEEND CASESTART(1) literal_ = new Literal(); literal_->generate(); CASEEND SWITCHEND GENERATEEND } IR *UnaryExpr::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(operand_); res = new IR(kUnaryExpr, OP3("-", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(operand_); res = new IR(kUnaryExpr, OP3("NOT", "", ""), tmp1); CASEEND CASESTART(2) auto tmp1 = SAFETRANSLATE(operand_); res = new IR(kUnaryExpr, OP3("", "ISNULL", ""), tmp1); CASEEND CASESTART(3) auto tmp1 = SAFETRANSLATE(operand_); res = new IR(kUnaryExpr, OP3("", "IS NULL", ""), tmp1); CASEEND CASESTART(4) auto tmp1 = SAFETRANSLATE(operand_); res = new IR(kUnaryExpr, OP3("", "IS NOT NULL", ""), tmp1); CASEEND CASESTART(5) res = new IR(kUnaryExpr, OP3("NULL", "", "")); CASEEND CASESTART(6) res = new IR(kUnaryExpr, OP3("*", "", "")); CASEEND SWITCHEND TRANSLATEEND } void UnaryExpr::deep_delete() { SAFEDELETE(operand_); delete this; }; void UnaryExpr::generate() { GENERATESTART(7) SWITCHSTART CASESTART(0) operand_ = new Operand(); operand_->generate(); CASEEND CASESTART(1) operand_ = new Operand(); operand_->generate(); CASEEND CASESTART(2) operand_ = new Operand(); operand_->generate(); CASEEND CASESTART(3) operand_ = new Operand(); operand_->generate(); CASEEND CASESTART(4) operand_ = new Operand(); operand_->generate(); CASEEND CASESTART(5) CASEEND CASESTART(6) CASEEND SWITCHEND GENERATEEND } IR *BinaryExpr::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(comp_expr_); res = new IR(kBinaryExpr, OP3("", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(operand_1_); auto tmp2 = SAFETRANSLATE(binary_op_); auto tmp3 = SAFETRANSLATE(operand_2_); auto tmp4 = new IR(kUnknown, OP3("", "", ""), tmp1, tmp2); PUSH(tmp4); res = new IR(kBinaryExpr, OP3("", "", ""), tmp4, tmp3); CASEEND CASESTART(2) auto tmp1 = SAFETRANSLATE(operand_1_); auto tmp2 = SAFETRANSLATE(operand_2_); res = new IR(kBinaryExpr, OP3("", "LIKE", ""), tmp1, tmp2); CASEEND CASESTART(3) auto tmp1 = SAFETRANSLATE(operand_1_); auto tmp2 = SAFETRANSLATE(operand_2_); res = new IR(kBinaryExpr, OP3("", "NOT LIKE", ""), tmp1, tmp2); CASEEND SWITCHEND TRANSLATEEND } void BinaryExpr::deep_delete() { SAFEDELETE(operand_1_); SAFEDELETE(operand_2_); SAFEDELETE(binary_op_); SAFEDELETE(comp_expr_); delete this; }; void BinaryExpr::generate() { GENERATESTART(4) SWITCHSTART CASESTART(0) comp_expr_ = new CompExpr(); comp_expr_->generate(); CASEEND CASESTART(1) operand_1_ = new Operand(); operand_1_->generate(); binary_op_ = new BinaryOp(); binary_op_->generate(); operand_2_ = new Operand(); operand_2_->generate(); CASEEND CASESTART(2) operand_1_ = new Operand(); operand_1_->generate(); operand_2_ = new Operand(); operand_2_->generate(); CASEEND CASESTART(3) operand_1_ = new Operand(); operand_1_->generate(); operand_2_ = new Operand(); operand_2_->generate(); CASEEND SWITCHEND GENERATEEND } IR *LogicExpr::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(expr_1_); auto tmp2 = SAFETRANSLATE(expr_2_); res = new IR(kLogicExpr, OP3("", "AND", ""), tmp1, tmp2); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(expr_1_); auto tmp2 = SAFETRANSLATE(expr_2_); res = new IR(kLogicExpr, OP3("", "OR", ""), tmp1, tmp2); CASEEND SWITCHEND TRANSLATEEND } void LogicExpr::deep_delete() { SAFEDELETE(expr_1_); SAFEDELETE(expr_2_); delete this; }; void LogicExpr::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) expr_1_ = new Expr(); expr_1_->generate(); expr_2_ = new Expr(); expr_2_->generate(); CASEEND CASESTART(1) expr_1_ = new Expr(); expr_1_->generate(); expr_2_ = new Expr(); expr_2_->generate(); CASEEND SWITCHEND GENERATEEND } IR *InExpr::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(operand_); auto tmp2 = SAFETRANSLATE(opt_not_); auto tmp3 = SAFETRANSLATE(select_no_parens_); auto tmp4 = new IR(kUnknown, OP3("", "", "IN"), tmp1, tmp2); PUSH(tmp4); res = new IR(kInExpr, OP3("", "(", ")"), tmp4, tmp3); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(operand_); auto tmp2 = SAFETRANSLATE(opt_not_); auto tmp3 = SAFETRANSLATE(expr_list_); auto tmp4 = new IR(kUnknown, OP3("", "", "IN"), tmp1, tmp2); PUSH(tmp4); res = new IR(kInExpr, OP3("", "(", ")"), tmp4, tmp3); CASEEND CASESTART(2) auto tmp1 = SAFETRANSLATE(operand_); auto tmp2 = SAFETRANSLATE(opt_not_); auto tmp3 = SAFETRANSLATE(table_name_); auto tmp4 = new IR(kUnknown, OP3("", "", "IN"), tmp1, tmp2); PUSH(tmp4); res = new IR(kInExpr, OP3("", "", ""), tmp4, tmp3); CASEEND SWITCHEND TRANSLATEEND } void InExpr::deep_delete() { SAFEDELETE(operand_); SAFEDELETE(expr_list_); SAFEDELETE(opt_not_); SAFEDELETE(table_name_); SAFEDELETE(select_no_parens_); delete this; }; void InExpr::generate() { GENERATESTART(3) SWITCHSTART CASESTART(0) operand_ = new Operand(); operand_->generate(); opt_not_ = new OptNot(); opt_not_->generate(); select_no_parens_ = new SelectNoParens(); select_no_parens_->generate(); CASEEND CASESTART(1) operand_ = new Operand(); operand_->generate(); opt_not_ = new OptNot(); opt_not_->generate(); expr_list_ = new ExprList(); expr_list_->generate(); CASEEND CASESTART(2) operand_ = new Operand(); operand_->generate(); opt_not_ = new OptNot(); opt_not_->generate(); table_name_ = new TableName(); table_name_->generate(); CASEEND SWITCHEND GENERATEEND } IR *CaseExpr::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(expr_1_); auto tmp2 = SAFETRANSLATE(case_list_); res = new IR(kCaseExpr, OP3("CASE", "", "END"), tmp1, tmp2); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(case_list_); res = new IR(kCaseExpr, OP3("CASE", "END", ""), tmp1); CASEEND CASESTART(2) auto tmp1 = SAFETRANSLATE(expr_1_); auto tmp2 = SAFETRANSLATE(case_list_); auto tmp3 = SAFETRANSLATE(expr_2_); auto tmp4 = new IR(kUnknown, OP3("CASE", "", "ELSE"), tmp1, tmp2); PUSH(tmp4); res = new IR(kCaseExpr, OP3("", "", "END"), tmp4, tmp3); CASEEND CASESTART(3) auto tmp1 = SAFETRANSLATE(case_list_); auto tmp2 = SAFETRANSLATE(expr_1_); res = new IR(kCaseExpr, OP3("CASE", "ELSE", "END"), tmp1, tmp2); CASEEND SWITCHEND TRANSLATEEND } void CaseExpr::deep_delete() { SAFEDELETE(expr_1_); SAFEDELETE(expr_2_); SAFEDELETE(case_list_); delete this; }; void CaseExpr::generate() { GENERATESTART(4) SWITCHSTART CASESTART(0) expr_1_ = new Expr(); expr_1_->generate(); case_list_ = new CaseList(); case_list_->generate(); CASEEND CASESTART(1) case_list_ = new CaseList(); case_list_->generate(); CASEEND CASESTART(2) expr_1_ = new Expr(); expr_1_->generate(); case_list_ = new CaseList(); case_list_->generate(); expr_2_ = new Expr(); expr_2_->generate(); CASEEND CASESTART(3) case_list_ = new CaseList(); case_list_->generate(); expr_1_ = new Expr(); expr_1_->generate(); CASEEND SWITCHEND GENERATEEND } IR *BetweenExpr::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(operand_1_); auto tmp2 = SAFETRANSLATE(operand_2_); auto tmp3 = SAFETRANSLATE(operand_3_); auto tmp4 = new IR(kUnknown, OP3("", "BETWEEN", "AND"), tmp1, tmp2); PUSH(tmp4); res = new IR(kBetweenExpr, OP3("", "", ""), tmp4, tmp3); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(operand_1_); auto tmp2 = SAFETRANSLATE(operand_2_); auto tmp3 = SAFETRANSLATE(operand_3_); auto tmp4 = new IR(kUnknown, OP3("", "NOT BETWEEN", "AND"), tmp1, tmp2); PUSH(tmp4); res = new IR(kBetweenExpr, OP3("", "", ""), tmp4, tmp3); CASEEND SWITCHEND TRANSLATEEND } void BetweenExpr::deep_delete() { SAFEDELETE(operand_1_); SAFEDELETE(operand_2_); SAFEDELETE(operand_3_); delete this; }; void BetweenExpr::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) operand_1_ = new Operand(); operand_1_->generate(); operand_2_ = new Operand(); operand_2_->generate(); operand_3_ = new Operand(); operand_3_->generate(); CASEEND CASESTART(1) operand_1_ = new Operand(); operand_1_->generate(); operand_2_ = new Operand(); operand_2_->generate(); operand_3_ = new Operand(); operand_3_->generate(); CASEEND SWITCHEND GENERATEEND } IR *ExistsExpr::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(opt_not_); auto tmp2 = SAFETRANSLATE(select_no_parens_); res = new IR(kExistsExpr, OP3("", "EXISTS (", ")"), tmp1, tmp2); TRANSLATEEND } void ExistsExpr::deep_delete() { SAFEDELETE(opt_not_); SAFEDELETE(select_no_parens_); delete this; }; void ExistsExpr::generate() { GENERATESTART(1) opt_not_ = new OptNot(); opt_not_->generate(); select_no_parens_ = new SelectNoParens(); select_no_parens_->generate(); GENERATEEND } IR *CaseList::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(case_clause_); res = new IR(kCaseList, OP3("", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(case_clause_); auto tmp2 = SAFETRANSLATE(case_list_); res = new IR(kCaseList, OP3("", "", ""), tmp1, tmp2); CASEEND SWITCHEND TRANSLATEEND } void CaseList::deep_delete() { SAFEDELETE(case_list_); SAFEDELETE(case_clause_); delete this; }; void CaseList::generate() { GENERATESTART(200) SWITCHSTART CASESTART(0) case_clause_ = new CaseClause(); case_clause_->generate(); CASEEND CASESTART(1) case_clause_ = new CaseClause(); case_clause_->generate(); case_list_ = new CaseList(); case_list_->generate(); CASEEND default: { int tmp_case_idx = rand() % 1; switch (tmp_case_idx) { CASESTART(0) case_clause_ = new CaseClause(); case_clause_->generate(); case_idx_ = 0; CASEEND } } } GENERATEEND } IR *CaseClause::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(expr_1_); auto tmp2 = SAFETRANSLATE(expr_2_); res = new IR(kCaseClause, OP3("WHEN", "THEN", ""), tmp1, tmp2); TRANSLATEEND } void CaseClause::deep_delete() { SAFEDELETE(expr_1_); SAFEDELETE(expr_2_); delete this; }; void CaseClause::generate() { GENERATESTART(1) expr_1_ = new Expr(); expr_1_->generate(); expr_2_ = new Expr(); expr_2_->generate(); GENERATEEND } IR *CompExpr::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(operand_1_); auto tmp2 = SAFETRANSLATE(operand_2_); res = new IR(kCompExpr, OP3("", "=", ""), tmp1, tmp2); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(operand_1_); auto tmp2 = SAFETRANSLATE(operand_2_); res = new IR(kCompExpr, OP3("", "!=", ""), tmp1, tmp2); CASEEND CASESTART(2) auto tmp1 = SAFETRANSLATE(operand_1_); auto tmp2 = SAFETRANSLATE(operand_2_); res = new IR(kCompExpr, OP3("", ">", ""), tmp1, tmp2); CASEEND CASESTART(3) auto tmp1 = SAFETRANSLATE(operand_1_); auto tmp2 = SAFETRANSLATE(operand_2_); res = new IR(kCompExpr, OP3("", "<", ""), tmp1, tmp2); CASEEND CASESTART(4) auto tmp1 = SAFETRANSLATE(operand_1_); auto tmp2 = SAFETRANSLATE(operand_2_); res = new IR(kCompExpr, OP3("", "<=", ""), tmp1, tmp2); CASEEND CASESTART(5) auto tmp1 = SAFETRANSLATE(operand_1_); auto tmp2 = SAFETRANSLATE(operand_2_); res = new IR(kCompExpr, OP3("", ">=", ""), tmp1, tmp2); CASEEND SWITCHEND TRANSLATEEND } void CompExpr::deep_delete() { SAFEDELETE(operand_1_); SAFEDELETE(operand_2_); delete this; }; void CompExpr::generate() { GENERATESTART(6) SWITCHSTART CASESTART(0) operand_1_ = new Operand(); operand_1_->generate(); operand_2_ = new Operand(); operand_2_->generate(); CASEEND CASESTART(1) operand_1_ = new Operand(); operand_1_->generate(); operand_2_ = new Operand(); operand_2_->generate(); CASEEND CASESTART(2) operand_1_ = new Operand(); operand_1_->generate(); operand_2_ = new Operand(); operand_2_->generate(); CASEEND CASESTART(3) operand_1_ = new Operand(); operand_1_->generate(); operand_2_ = new Operand(); operand_2_->generate(); CASEEND CASESTART(4) operand_1_ = new Operand(); operand_1_->generate(); operand_2_ = new Operand(); operand_2_->generate(); CASEEND CASESTART(5) operand_1_ = new Operand(); operand_1_->generate(); operand_2_ = new Operand(); operand_2_->generate(); CASEEND SWITCHEND GENERATEEND } IR *ExtractExpr::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(datetime_field_); auto tmp2 = SAFETRANSLATE(expr_); res = new IR(kExtractExpr, OP3("EXTRACT (", "FROM", ")"), tmp1, tmp2); TRANSLATEEND } void ExtractExpr::deep_delete() { SAFEDELETE(datetime_field_); SAFEDELETE(expr_); delete this; }; void ExtractExpr::generate() { GENERATESTART(1) datetime_field_ = new DatetimeField(); datetime_field_->generate(); expr_ = new Expr(); expr_->generate(); GENERATEEND } IR *DatetimeField::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kDatetimeField, OP3("SECOND", "", "")); CASEEND CASESTART(1) res = new IR(kDatetimeField, OP3("MINUTE", "", "")); CASEEND CASESTART(2) res = new IR(kDatetimeField, OP3("HOUR", "", "")); CASEEND CASESTART(3) res = new IR(kDatetimeField, OP3("DAY", "", "")); CASEEND CASESTART(4) res = new IR(kDatetimeField, OP3("MONTH", "", "")); CASEEND CASESTART(5) res = new IR(kDatetimeField, OP3("YEAR", "", "")); CASEEND SWITCHEND TRANSLATEEND } void DatetimeField::deep_delete() { delete this; }; void DatetimeField::generate(){ GENERATESTART(6) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND CASESTART(2) CASEEND CASESTART(3) CASEEND CASESTART(4) CASEEND CASESTART(5) CASEEND SWITCHEND GENERATEEND} IR *ArrayIndex::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(operand_); auto tmp2 = SAFETRANSLATE(int_literal_); res = new IR(kArrayIndex, OP3("", "[", "]"), tmp1, tmp2); TRANSLATEEND } void ArrayIndex::deep_delete() { SAFEDELETE(operand_); SAFEDELETE(int_literal_); delete this; }; void ArrayIndex::generate() { GENERATESTART(1) operand_ = new Operand(); operand_->generate(); int_literal_ = new IntLiteral(); int_literal_->generate(); GENERATEEND } IR *Literal::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(string_literal_); res = new IR(kLiteral, OP3("", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(bool_literal_); res = new IR(kLiteral, OP3("", "", ""), tmp1); CASEEND CASESTART(2) auto tmp1 = SAFETRANSLATE(num_literal_); res = new IR(kLiteral, OP3("", "", ""), tmp1); CASEEND SWITCHEND TRANSLATEEND } void Literal::deep_delete() { SAFEDELETE(bool_literal_); SAFEDELETE(string_literal_); SAFEDELETE(num_literal_); delete this; }; void Literal::generate() { GENERATESTART(3) SWITCHSTART CASESTART(0) string_literal_ = new StringLiteral(); string_literal_->generate(); CASEEND CASESTART(1) bool_literal_ = new BoolLiteral(); bool_literal_->generate(); CASEEND CASESTART(2) num_literal_ = new NumLiteral(); num_literal_->generate(); CASEEND SWITCHEND GENERATEEND } IR *StringLiteral::translate(vector &v_ir_collector) { TRANSLATESTART res = new IR(kStringLiteral, string_val_, data_type_, scope_, data_flag_); TRANSLATEEND } void StringLiteral::deep_delete() { delete this; }; void StringLiteral::generate() { GENERATESTART(1) string_val_ = gen_string(); GENERATEEND } IR *BoolLiteral::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kBoolLiteral, OP3("TRUE", "", "")); CASEEND CASESTART(1) res = new IR(kBoolLiteral, OP3("FALSE", "", "")); CASEEND SWITCHEND TRANSLATEEND } void BoolLiteral::deep_delete() { delete this; }; void BoolLiteral::generate(){GENERATESTART(2) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND} IR *NumLiteral::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(int_literal_); res = new IR(kNumLiteral, OP3("", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(float_literal_); res = new IR(kNumLiteral, OP3("", "", ""), tmp1); CASEEND SWITCHEND TRANSLATEEND } void NumLiteral::deep_delete() { SAFEDELETE(int_literal_); SAFEDELETE(float_literal_); delete this; }; void NumLiteral::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) int_literal_ = new IntLiteral(); int_literal_->generate(); CASEEND CASESTART(1) float_literal_ = new FloatLiteral(); float_literal_->generate(); CASEEND SWITCHEND GENERATEEND } IR *IntLiteral::translate(vector &v_ir_collector) { TRANSLATESTART res = new IR(kIntLiteral, int_val_, data_type_, scope_, data_flag_); TRANSLATEEND } void IntLiteral::deep_delete() { delete this; }; void IntLiteral::generate() { GENERATESTART(1) int_val_ = gen_int(); GENERATEEND } IR *FloatLiteral::translate(vector &v_ir_collector) { TRANSLATESTART res = new IR(kFloatLiteral, float_val_, data_type_, scope_, data_flag_); TRANSLATEEND } void FloatLiteral::deep_delete() { delete this; }; void FloatLiteral::generate() { GENERATESTART(1) float_val_ = gen_float(); GENERATEEND } IR *OptColumn::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kOptColumn, OP3("COLUMN", "", "")); CASEEND CASESTART(1) res = new IR(kOptColumn, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptColumn::deep_delete() { delete this; }; void OptColumn::generate(){GENERATESTART(2) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND} IR *OptIfNotExist::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kOptIfNotExist, OP3("IF NOT EXISTS", "", "")); CASEEND CASESTART(1) res = new IR(kOptIfNotExist, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptIfNotExist::deep_delete() { delete this; }; void OptIfNotExist::generate(){GENERATESTART(2) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND} IR *OptIfExist::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kOptIfExist, OP3("IF EXISTS", "", "")); CASEEND CASESTART(1) res = new IR(kOptIfExist, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptIfExist::deep_delete() { delete this; }; void OptIfExist::generate(){GENERATESTART(2) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND} IR *Identifier::translate(vector &v_ir_collector) { TRANSLATESTART res = new IR(kIdentifier, string_val_, data_type_, scope_, data_flag_); TRANSLATEEND } void Identifier::deep_delete() { delete this; }; void Identifier::generate() { GENERATESTART(1) string_val_ = gen_string(); GENERATEEND } IR *TableName::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(identifier_); res = new IR(kTableName, OP3("", "", ""), tmp1); TRANSLATEEND } void TableName::deep_delete() { SAFEDELETE(identifier_); delete this; }; void TableName::generate() { GENERATESTART(1) identifier_ = new Identifier(); identifier_->generate(); GENERATEEND } IR *ColumnName::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(identifier_); res = new IR(kColumnName, OP3("", "", ""), tmp1); TRANSLATEEND } void ColumnName::deep_delete() { SAFEDELETE(identifier_); delete this; }; void ColumnName::generate() { GENERATESTART(1) identifier_ = new Identifier(); identifier_->generate(); GENERATEEND } IR *OptUnique::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kOptUnique, OP3("UNIQUE", "", "")); CASEEND CASESTART(1) res = new IR(kOptUnique, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptUnique::deep_delete() { delete this; }; void OptUnique::generate(){GENERATESTART(2) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND} IR *ViewName::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(identifier_); res = new IR(kViewName, OP3("", "", ""), tmp1); TRANSLATEEND } void ViewName::deep_delete() { SAFEDELETE(identifier_); delete this; }; void ViewName::generate() { GENERATESTART(1) identifier_ = new Identifier(); identifier_->generate(); GENERATEEND } IR *BinaryOp::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kBinaryOp, OP3("+", "", "")); CASEEND CASESTART(1) res = new IR(kBinaryOp, OP3("-", "", "")); CASEEND CASESTART(2) res = new IR(kBinaryOp, OP3("/", "", "")); CASEEND CASESTART(3) res = new IR(kBinaryOp, OP3("%", "", "")); CASEEND CASESTART(4) res = new IR(kBinaryOp, OP3("*", "", "")); CASEEND SWITCHEND TRANSLATEEND } void BinaryOp::deep_delete() { delete this; }; void BinaryOp::generate(){GENERATESTART(5) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND CASESTART(2) CASEEND CASESTART(3) CASEEND CASESTART(4) CASEEND SWITCHEND GENERATEEND} IR *OptNot::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kOptNot, OP3("NOT", "", "")); CASEEND CASESTART(1) res = new IR(kOptNot, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptNot::deep_delete() { delete this; }; void OptNot::generate(){GENERATESTART(2) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND} IR *Name::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(identifier_); res = new IR(kName, OP3("", "", ""), tmp1); TRANSLATEEND } void Name::deep_delete() { SAFEDELETE(identifier_); delete this; }; void Name::generate() { GENERATESTART(1) identifier_ = new Identifier(); identifier_->generate(); GENERATEEND } IR *TypeName::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(numeric_type_); res = new IR(kTypeName, OP3("", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(character_type_); res = new IR(kTypeName, OP3("", "", ""), tmp1); CASEEND SWITCHEND TRANSLATEEND } void TypeName::deep_delete() { SAFEDELETE(numeric_type_); SAFEDELETE(character_type_); delete this; }; void TypeName::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) numeric_type_ = new NumericType(); numeric_type_->generate(); CASEEND CASESTART(1) character_type_ = new CharacterType(); character_type_->generate(); CASEEND SWITCHEND GENERATEEND } IR *CharacterType::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(character_with_length_); res = new IR(kCharacterType, OP3("", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(character_without_length_); res = new IR(kCharacterType, OP3("", "", ""), tmp1); CASEEND SWITCHEND TRANSLATEEND } void CharacterType::deep_delete() { SAFEDELETE(character_with_length_); SAFEDELETE(character_without_length_); delete this; }; void CharacterType::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) character_with_length_ = new CharacterWithLength(); character_with_length_->generate(); CASEEND CASESTART(1) character_without_length_ = new CharacterWithoutLength(); character_without_length_->generate(); CASEEND SWITCHEND GENERATEEND } IR *CharacterWithLength::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(character_conflicta_); auto tmp2 = SAFETRANSLATE(int_literal_); res = new IR(kCharacterWithLength, OP3("", "(", ")"), tmp1, tmp2); TRANSLATEEND } void CharacterWithLength::deep_delete() { SAFEDELETE(character_conflicta_); SAFEDELETE(int_literal_); delete this; }; void CharacterWithLength::generate() { GENERATESTART(1) character_conflicta_ = new CharacterConflicta(); character_conflicta_->generate(); int_literal_ = new IntLiteral(); int_literal_->generate(); GENERATEEND } IR *CharacterWithoutLength::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(character_conflicta_); res = new IR(kCharacterWithoutLength, OP3("", "", ""), tmp1); TRANSLATEEND } void CharacterWithoutLength::deep_delete() { SAFEDELETE(character_conflicta_); delete this; }; void CharacterWithoutLength::generate() { GENERATESTART(1) character_conflicta_ = new CharacterConflicta(); character_conflicta_->generate(); GENERATEEND } IR *CharacterConflicta::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(opt_varying_); res = new IR(kCharacterConflicta, OP3("CHARACTER", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(opt_varying_); res = new IR(kCharacterConflicta, OP3("CHAR", "", ""), tmp1); CASEEND CASESTART(2) res = new IR(kCharacterConflicta, OP3("VARCHAR", "", "")); CASEEND CASESTART(3) res = new IR(kCharacterConflicta, OP3("TEXT", "", "")); CASEEND CASESTART(4) auto tmp1 = SAFETRANSLATE(opt_varying_); res = new IR(kCharacterConflicta, OP3("NATIONAL CHARACTER", "", ""), tmp1); CASEEND CASESTART(5) auto tmp1 = SAFETRANSLATE(opt_varying_); res = new IR(kCharacterConflicta, OP3("NATIONAL CHAR", "", ""), tmp1); CASEEND CASESTART(6) auto tmp1 = SAFETRANSLATE(opt_varying_); res = new IR(kCharacterConflicta, OP3("NCHAR", "", ""), tmp1); CASEEND SWITCHEND TRANSLATEEND } void CharacterConflicta::deep_delete() { SAFEDELETE(opt_varying_); delete this; }; void CharacterConflicta::generate() { GENERATESTART(7) SWITCHSTART CASESTART(0) opt_varying_ = new OptVarying(); opt_varying_->generate(); CASEEND CASESTART(1) opt_varying_ = new OptVarying(); opt_varying_->generate(); CASEEND CASESTART(2) CASEEND CASESTART(3) CASEEND CASESTART(4) opt_varying_ = new OptVarying(); opt_varying_->generate(); CASEEND CASESTART(5) opt_varying_ = new OptVarying(); opt_varying_->generate(); CASEEND CASESTART(6) opt_varying_ = new OptVarying(); opt_varying_->generate(); CASEEND SWITCHEND GENERATEEND } IR *OptVarying::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kOptVarying, OP3("VARYING", "", "")); CASEEND CASESTART(1) res = new IR(kOptVarying, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptVarying::deep_delete() { delete this; }; void OptVarying::generate(){GENERATESTART(2) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND} IR *NumericType::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kNumericType, OP3("INT", "", "")); CASEEND CASESTART(1) res = new IR(kNumericType, OP3("INTEGER", "", "")); CASEEND CASESTART(2) res = new IR(kNumericType, OP3("SMALLINT", "", "")); CASEEND CASESTART(3) res = new IR(kNumericType, OP3("BIGINT", "", "")); CASEEND CASESTART(4) res = new IR(kNumericType, OP3("REAL", "", "")); CASEEND CASESTART(5) res = new IR(kNumericType, OP3("FLOAT", "", "")); CASEEND CASESTART(6) res = new IR(kNumericType, OP3("DOUBLE PRECISION", "", "")); CASEEND CASESTART(7) res = new IR(kNumericType, OP3("DECIMAL", "", "")); CASEEND CASESTART(8) res = new IR(kNumericType, OP3("DEC", "", "")); CASEEND CASESTART(9) res = new IR(kNumericType, OP3("NUMERIC", "", "")); CASEEND CASESTART(10) res = new IR(kNumericType, OP3("BOOLEAN", "", "")); CASEEND SWITCHEND TRANSLATEEND } void NumericType::deep_delete() { delete this; }; void NumericType::generate(){ GENERATESTART(11) SWITCHSTART CASESTART(0) CASEEND CASESTART(1) CASEEND CASESTART(2) CASEEND CASESTART(3) CASEEND CASESTART(4) CASEEND CASESTART(5) CASEEND CASESTART(6) CASEEND CASESTART(7) CASEEND CASESTART(8) CASEEND CASESTART(9) CASEEND CASESTART(10) CASEEND SWITCHEND GENERATEEND} IR *OptTableConstraintList::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(table_constraint_list_); res = new IR(kOptTableConstraintList, OP3("", "", ""), tmp1); CASEEND CASESTART(1) res = new IR(kOptTableConstraintList, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptTableConstraintList::deep_delete() { SAFEDELETE(table_constraint_list_); delete this; }; void OptTableConstraintList::generate() { GENERATESTART(2) SWITCHSTART CASESTART(0) table_constraint_list_ = new TableConstraintList(); table_constraint_list_->generate(); CASEEND CASESTART(1) CASEEND SWITCHEND GENERATEEND } IR *TableConstraintList::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(table_constraint_); res = new IR(kTableConstraintList, OP3("", "", ""), tmp1); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(table_constraint_); auto tmp2 = SAFETRANSLATE(table_constraint_list_); res = new IR(kTableConstraintList, OP3("", ",", ""), tmp1, tmp2); CASEEND SWITCHEND TRANSLATEEND } void TableConstraintList::deep_delete() { SAFEDELETE(table_constraint_); SAFEDELETE(table_constraint_list_); delete this; }; void TableConstraintList::generate() { GENERATESTART(200) SWITCHSTART CASESTART(0) table_constraint_ = new TableConstraint(); table_constraint_->generate(); CASEEND CASESTART(1) table_constraint_ = new TableConstraint(); table_constraint_->generate(); table_constraint_list_ = new TableConstraintList(); table_constraint_list_->generate(); CASEEND default: { int tmp_case_idx = rand() % 1; switch (tmp_case_idx) { CASESTART(0) table_constraint_ = new TableConstraint(); table_constraint_->generate(); case_idx_ = 0; CASEEND } } } GENERATEEND } IR *TableConstraint::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(constraint_name_); auto tmp2 = SAFETRANSLATE(indexed_column_list_); res = new IR(kTableConstraint, OP3("", "PRIMARY KEY (", ")"), tmp1, tmp2); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(constraint_name_); auto tmp2 = SAFETRANSLATE(indexed_column_list_); res = new IR(kTableConstraint, OP3("", "UNIQUE (", ")"), tmp1, tmp2); CASEEND CASESTART(2) auto tmp1 = SAFETRANSLATE(constraint_name_); auto tmp2 = SAFETRANSLATE(expr_); res = new IR(kTableConstraint, OP3("", "CHECK (", ")"), tmp1, tmp2); CASEEND CASESTART(3) auto tmp1 = SAFETRANSLATE(constraint_name_); auto tmp2 = SAFETRANSLATE(column_name_list_); auto tmp3 = SAFETRANSLATE(foreign_clause_); auto tmp4 = new IR(kUnknown, OP3("", "FOREIGN KEY (", ")"), tmp1, tmp2); PUSH(tmp4); res = new IR(kTableConstraint, OP3("", "", ""), tmp4, tmp3); CASEEND SWITCHEND TRANSLATEEND } void TableConstraint::deep_delete() { SAFEDELETE(expr_); SAFEDELETE(indexed_column_list_); SAFEDELETE(foreign_clause_); SAFEDELETE(constraint_name_); SAFEDELETE(column_name_list_); delete this; }; void TableConstraint::generate() { GENERATESTART(4) SWITCHSTART CASESTART(0) constraint_name_ = new ConstraintName(); constraint_name_->generate(); indexed_column_list_ = new IndexedColumnList(); indexed_column_list_->generate(); CASEEND CASESTART(1) constraint_name_ = new ConstraintName(); constraint_name_->generate(); indexed_column_list_ = new IndexedColumnList(); indexed_column_list_->generate(); CASEEND CASESTART(2) constraint_name_ = new ConstraintName(); constraint_name_->generate(); expr_ = new Expr(); expr_->generate(); CASEEND CASESTART(3) constraint_name_ = new ConstraintName(); constraint_name_->generate(); column_name_list_ = new ColumnNameList(); column_name_list_->generate(); foreign_clause_ = new ForeignClause(); foreign_clause_->generate(); CASEEND SWITCHEND GENERATEEND } ================================================ FILE: srcs/internal/postgresql/srcs/mutator.cpp ================================================ #include "../include/mutator.h" #include #include #include #include #include #include #include #include "../include/ast.h" #include "../include/define.h" #include "../include/utils.h" #define _NON_REPLACE_ using namespace std; //#define GRAPHLOG IR *Mutator::deep_copy_with_record(const IR *root, const IR *record) { IR *left = NULL, *right = NULL, *copy_res; if (root->left_) left = deep_copy_with_record(root->left_, record); if (root->right_) right = deep_copy_with_record(root->right_, record); if (root->op_ != NULL) copy_res = new IR(root->type_, OP3(root->op_->prefix_, root->op_->middle_, root->op_->suffix_), left, right, root->float_val_, root->str_val_, root->name_, root->mutated_times_, root->scope_, root->data_flag_); else copy_res = new IR(root->type_, NULL, left, right, root->float_val_, root->str_val_, root->name_, root->mutated_times_, root->scope_, root->data_flag_); copy_res->data_type_ = root->data_type_; if (root == record && record != NULL) { this->record_ = copy_res; } return copy_res; } vector Mutator::mutate_all(vector &v_ir_collector) { vector res; IR *root = v_ir_collector[v_ir_collector.size() - 1]; mutated_root_ = root; for (auto ir : v_ir_collector) { if (not_mutatable_types_.find(ir->type_) != not_mutatable_types_.end()) continue; vector v_mutated_ir = mutate(ir); for (auto i : v_mutated_ir) { IR *new_ir_tree = deep_copy_with_record(root, ir); replace(new_ir_tree, this->record_, i); extract_struct(new_ir_tree); string tmp = new_ir_tree->to_string(); unsigned tmp_hash = hash(tmp); if (global_hash_.find(tmp_hash) != global_hash_.end()) { deep_delete(new_ir_tree); continue; } global_hash_.insert(tmp_hash); res.push_back(new_ir_tree); } } return res; } void Mutator::add_ir_to_library(IR *cur) { extract_struct(cur); cur = deep_copy(cur); add_ir_to_library_no_deepcopy(cur); return; } void Mutator::add_ir_to_library_no_deepcopy(IR *cur) { if (cur->left_) add_ir_to_library_no_deepcopy(cur->left_); if (cur->right_) add_ir_to_library_no_deepcopy(cur->right_); auto type = cur->type_; auto h = hash(cur); if (find(ir_library_hash_[type].begin(), ir_library_hash_[type].end(), h) != ir_library_hash_[type].end()) return; ir_library_hash_[type].insert(h); ir_library_[type].push_back(cur); return; } void Mutator::init_common_string(string filename) { common_string_library_.push_back("DO_NOT_BE_EMPTY"); if (filename != "") { ifstream input_string(filename); string s; while (getline(input_string, s)) { common_string_library_.push_back(s); } } } void Mutator::init_data_library_2d(string filename) { ifstream input_file(filename); string s; cout << "[*] init data_library_2d: " << filename << endl; while (getline(input_file, s)) { vector v_strbuf; auto prev_pos = -1; for (int i = 0; i < 3; i++) { auto pos = s.find(" ", prev_pos + 1); v_strbuf.push_back(s.substr(prev_pos + 1, pos - prev_pos - 1)); prev_pos = pos; } v_strbuf.push_back(s.substr(prev_pos + 1, s.size() - prev_pos - 1)); auto data_type1 = get_datatype_by_string(v_strbuf[0]); auto data_type2 = get_datatype_by_string(v_strbuf[2]); g_data_library_2d_[data_type1][v_strbuf[1]][data_type2].push_back( v_strbuf[3]); } return; } void Mutator::init_data_library(string filename) { ifstream input_file(filename); string s; cout << "[*] init data_library: " << filename << endl; while (getline(input_file, s)) { auto pos = s.find(" "); if (pos == string::npos) continue; auto data_type = get_datatype_by_string(s.substr(0, pos)); auto v = s.substr(pos + 1, s.size() - pos - 1); g_data_library_[data_type].push_back(v); } return; } void Mutator::init_value_library() { vector value_lib_init = {0, (unsigned long)LONG_MAX, (unsigned long)ULONG_MAX, (unsigned long)CHAR_BIT, (unsigned long)SCHAR_MIN, (unsigned long)SCHAR_MAX, (unsigned long)UCHAR_MAX, (unsigned long)CHAR_MIN, (unsigned long)CHAR_MAX, (unsigned long)MB_LEN_MAX, (unsigned long)SHRT_MIN, (unsigned long)INT_MIN, (unsigned long)INT_MAX, (unsigned long)SCHAR_MIN, (unsigned long)SCHAR_MIN, (unsigned long)UINT_MAX, (unsigned long)FLT_MAX, (unsigned long)DBL_MAX, (unsigned long)LDBL_MAX, (unsigned long)FLT_MIN, (unsigned long)DBL_MIN, (unsigned long)LDBL_MIN}; value_library_.insert(value_library_.begin(), value_lib_init.begin(), value_lib_init.end()); return; } void Mutator::init_ir_library(string filename) { ifstream input_file(filename); string line; cout << "[*] init ir_library: " << filename << endl; while (getline(input_file, line)) { if (line.empty()) continue; auto p = parser(line); if (p == NULL) continue; vector v_ir; auto res = p->translate(v_ir); p->deep_delete(); p = NULL; add_ir_to_library(res); deep_delete(res); } return; } void Mutator::init_safe_generate_type(string filename) { ifstream input_file(filename); string line; cout << "[*] init safe generate type: " << filename << endl; while (getline(input_file, line)) { if (line.empty()) continue; auto node_type = get_nodetype_by_string("k" + line); safe_generate_type_.insert(node_type); } } void Mutator::init(string f_testcase, string f_common_string, string file2d, string file1d, string f_gen_type) { if (!f_testcase.empty()) init_ir_library(f_testcase); // init value_library_ init_value_library(); // init common_string_library if (!f_common_string.empty()) init_common_string(f_common_string); // init data_library_2d if (!file2d.empty()) init_data_library_2d(file2d); if (!file1d.empty()) init_data_library(file1d); if (!f_gen_type.empty()) init_safe_generate_type(f_gen_type); float_types_.insert({kFloatLiteral}); int_types_.insert(kIntLiteral); string_types_.insert(kStringLiteral); relationmap_[kDataColumnName][kDataTableName] = kRelationSubtype; relationmap_[kDataPragmaValue][kDataPragmaKey] = kRelationSubtype; relationmap_[kDataTableName][kDataTableName] = kRelationElement; relationmap_[kDataColumnName][kDataColumnName] = kRelationElement; split_stmt_types_.insert(kStmt); split_substmt_types_.insert({kStmt, kSelectClause, kSelectStmt}); //#define MYSQLFUZZ #ifdef MYSQLFUZZ not_mutatable_types_.insert( {kProgram, kStmtlist, kStmt, kCreateStmt, kDropStmt, kCreateTableStmt, kCreateIndexStmt, kCreateTriggerStmt, kCreateViewStmt, kDropIndexStmt, kDropTableStmt, kDropTriggerStmt, kDropViewStmt, kSelectStmt, kUpdateStmt, kInsertStmt, kAlterStmt}); #else not_mutatable_types_.insert({kProgram, kStmtlist, kStmt, kCreateStmt, kDropStmt, kCreateTableStmt, kCreateIndexStmt, kCreateViewStmt, kDropIndexStmt, kDropTableStmt, kDropViewStmt, kSelectStmt, kUpdateStmt, kInsertStmt, kAlterStmt, kReindexStmt}); #endif return; } vector Mutator::mutate(IR *input) { vector res; if (!lucky_enough_to_be_mutated(input->mutated_times_)) { return res; } auto tmp = strategy_delete(input); if (tmp != NULL) { res.push_back(tmp); } tmp = strategy_insert(input); if (tmp != NULL) { res.push_back(tmp); } tmp = strategy_replace(input); if (tmp != NULL) { res.push_back(tmp); } input->mutated_times_ += res.size(); for (auto i : res) { if (i == NULL) continue; i->mutated_times_ = input->mutated_times_; } return res; } bool Mutator::replace(IR *root, IR *old_ir, IR *new_ir) { auto parent_ir = locate_parent(root, old_ir); if (parent_ir == NULL) return false; if (parent_ir->left_ == old_ir) { deep_delete(old_ir); parent_ir->left_ = new_ir; return true; } else if (parent_ir->right_ == old_ir) { deep_delete(old_ir); parent_ir->right_ = new_ir; return true; } return false; } IR *Mutator::locate_parent(IR *root, IR *old_ir) { if (root->left_ == old_ir || root->right_ == old_ir) return root; if (root->left_ != NULL) if (auto res = locate_parent(root->left_, old_ir)) return res; if (root->right_ != NULL) if (auto res = locate_parent(root->right_, old_ir)) return res; return NULL; } IR *Mutator::strategy_delete(IR *cur) { assert(cur); MUTATESTART DOLEFT res = deep_copy(cur); if (res->left_ != NULL) deep_delete(res->left_); res->left_ = NULL; DORIGHT res = deep_copy(cur); if (res->right_ != NULL) deep_delete(res->right_); res->right_ = NULL; DOBOTH res = deep_copy(cur); if (res->left_ != NULL) deep_delete(res->left_); if (res->right_ != NULL) deep_delete(res->right_); res->left_ = res->right_ = NULL; MUTATEEND } IR *Mutator::strategy_insert(IR *cur) { assert(cur); auto res = deep_copy(cur); auto parent_type = cur->type_; if (res->right_ == NULL && res->left_ != NULL) { auto left_type = res->left_->type_; for (int k = 0; k < 4; k++) { auto fetch_ir = get_ir_from_library(parent_type); if (fetch_ir->left_ != NULL && fetch_ir->left_->type_ == left_type && fetch_ir->right_ != NULL) { res->right_ = deep_copy(fetch_ir->right_); return res; } } } else if (res->right_ != NULL && res->left_ == NULL) { auto right_type = res->left_->type_; for (int k = 0; k < 4; k++) { auto fetch_ir = get_ir_from_library(parent_type); if (fetch_ir->right_ != NULL && fetch_ir->right_->type_ == right_type && fetch_ir->left_ != NULL) { res->left_ = deep_copy(fetch_ir->left_); return res; } } } else if (res->left_ == NULL && res->right_ == NULL) { for (int k = 0; k < 4; k++) { auto fetch_ir = get_ir_from_library(parent_type); if (fetch_ir->right_ != NULL && fetch_ir->left_ != NULL) { res->left_ = deep_copy(fetch_ir->left_); res->right_ = deep_copy(fetch_ir->right_); return res; } } } return res; } IR *Mutator::strategy_replace(IR *cur) { assert(cur); MUTATESTART DOLEFT if (cur->left_ != NULL) { res = deep_copy(cur); auto new_node = get_ir_from_library(res->left_->type_); new_node->data_type_ = res->left_->data_type_; deep_delete(res->left_); res->left_ = deep_copy(new_node); } DORIGHT if (cur->right_ != NULL) { res = deep_copy(cur); auto new_node = get_ir_from_library(res->right_->type_); new_node->data_type_ = res->right_->data_type_; deep_delete(res->right_); res->right_ = deep_copy(new_node); } DOBOTH if (cur->left_ != NULL && cur->right_ != NULL) { res = deep_copy(cur); auto new_left = get_ir_from_library(res->left_->type_); auto new_right = get_ir_from_library(res->right_->type_); new_left->data_type_ = res->left_->data_type_; new_right->data_type_ = res->right_->data_type_; deep_delete(res->right_); res->right_ = deep_copy(new_right); deep_delete(res->left_); res->left_ = deep_copy(new_left); } MUTATEEND return res; } bool Mutator::lucky_enough_to_be_mutated(unsigned int mutated_times) { if (get_rand_int(mutated_times + 1) < LUCKY_NUMBER) { return true; } return false; } pair Mutator::get_data_2d_by_type(DATATYPE type1, DATATYPE type2) { pair res("", ""); auto size = data_library_2d_[type1].size(); if (size == 0) return res; auto rint = get_rand_int(size); int counter = 0; for (auto &i : data_library_2d_[type1]) { if (counter++ == rint) { return std::make_pair(i.first, vector_rand_ele(i.second[type2])); } } return res; } IR *Mutator::generate_ir_by_type(IRTYPE type) { auto ast_node = generate_ast_node_by_type(type); ast_node->generate(); vector tmp_vector; ast_node->translate(tmp_vector); assert(tmp_vector.size()); return tmp_vector[tmp_vector.size() - 1]; } IR *Mutator::get_ir_from_library(IRTYPE type) { const int generate_prop = 1; const int threshold = 0; static IR *empty_ir = new IR(kStringLiteral, ""); #ifdef USEGENERATE if (ir_library_[type].empty() == true || (get_rand_int(400) == 0 && type != kUnknown)) { auto ir = generate_ir_by_type(type); add_ir_to_library_no_deepcopy(ir); return ir; } #endif if (ir_library_[type].empty()) return empty_ir; return vector_rand_ele(ir_library_[type]); } string Mutator::get_a_string() { unsigned com_size = common_string_library_.size(); unsigned lib_size = string_library_.size(); unsigned double_lib_size = lib_size * 2; unsigned rand_int = get_rand_int(double_lib_size + com_size); if (rand_int < double_lib_size) { return string_library_[rand_int >> 1]; } else { rand_int -= double_lib_size; return common_string_library_[rand_int]; } } unsigned long Mutator::get_a_val() { assert(value_library_.size()); return vector_rand_ele(value_library_); } unsigned long Mutator::hash(string &sql) { return ducking_hash(sql.c_str(), sql.size()); } unsigned long Mutator::hash(IR *root) { auto tmp_str = move(root->to_string()); return this->hash(tmp_str); } void Mutator::debug(IR *root) { for (auto &i : data_library_[kDataFunctionName]) { cout << i << endl; } } Mutator::~Mutator() {} void Mutator::extract_struct(IR *root) { static int counter = 0; auto type = root->type_; if (root->left_) { extract_struct(root->left_); } if (root->right_) { extract_struct(root->right_); } if (root->left_ || root->right_) return; if (root->data_type_ != kDataWhatever) { root->str_val_ = "x"; return; } if (string_types_.find(type) != string_types_.end()) { root->str_val_ = "'x'"; } else if (int_types_.find(type) != int_types_.end()) { root->int_val_ = 1; } else if (float_types_.find(type) != float_types_.end()) { root->float_val_ = 1.0; } } void Mutator::extract_struct2(IR *root) { static int counter = 0; auto type = root->type_; if (root->left_) { extract_struct2(root->left_); } if (root->right_) { extract_struct2(root->right_); } if (root->left_ || root->right_) return; if (root->data_type_ != kDataWhatever) { root->str_val_ = "x" + to_string(counter++); return; } if (string_types_.find(type) != string_types_.end()) { root->str_val_ = "'x'"; } else if (int_types_.find(type) != int_types_.end()) { root->int_val_ = 1; } else if (float_types_.find(type) != float_types_.end()) { root->float_val_ = 1.0; } } void Mutator::reset_data_library() { data_library_.clear(); data_library_2d_.clear(); } string Mutator::parse_data(string &input) { string res; if (!input.compare("_int_")) { res = to_string(get_a_val()); } else if (!input.compare("_empty_")) { res = ""; } else if (!input.compare("_boolean_")) { if (get_rand_int(2) == 0) res = "false"; else res = "true"; } else if (!input.compare("_string_")) { res = get_a_string(); } else { res = input; } return res; } bool Mutator::validate(IR *&root) { reset_data_library(); string sql = root->to_string(); auto ast = parser(sql); if (ast == NULL) return false; deep_delete(root); root = NULL; vector ir_vector; ast->translate(ir_vector); ast->deep_delete(); root = ir_vector[ir_vector.size() - 1]; reset_id_counter(); if (fix(root) == false) { return false; } return true; } unsigned int Mutator::calc_node(IR *root) { unsigned int res = 0; if (root->left_) res += calc_node(root->left_); if (root->right_) res += calc_node(root->right_); return res + 1; } bool Mutator::fix(IR *root) { map m_save; bool res = true; auto stmts = split_to_stmt(root, m_save, split_stmt_types_); if (stmts.size() > 8) { connect_back(m_save); return false; } clear_scope_library(true); for (auto &stmt : stmts) { map m_substmt_save; auto substmts = split_to_stmt(stmt, m_substmt_save, split_substmt_types_); int stmt_num = substmts.size(); if (stmt_num > 4) { connect_back(m_save); connect_back(m_substmt_save); return false; } for (auto &substmt : substmts) { clear_scope_library(false); int tmp_node_num = calc_node(substmt); if ((stmt_num == 1 && tmp_node_num > 150) || tmp_node_num > 120) { connect_back(m_save); connect_back(m_substmt_save); return false; } res = fix_one(substmt, scope_library_) && res; if (res == false) { connect_back(m_save); connect_back(m_substmt_save); return false; } } res = connect_back(m_substmt_save) && res; } res = connect_back(m_save) && res; return res; } vector Mutator::split_to_stmt(IR *root, map &m_save, set &split_set) { vector res; deque bfs = {root}; while (!bfs.empty()) { auto node = bfs.front(); bfs.pop_front(); if (node && node->left_) bfs.push_back(node->left_); if (node && node->right_) bfs.push_back(node->right_); if (node->left_ && find(split_set.begin(), split_set.end(), node->left_->type_) != split_set.end()) { res.push_back(node->left_); m_save[&node->left_] = node->left_; node->left_ = NULL; } if (node->right_ && find(split_set.begin(), split_set.end(), node->right_->type_) != split_set.end()) { res.push_back(node->right_); m_save[&node->right_] = node->right_; node->right_ = NULL; } } if (find(split_set.begin(), split_set.end(), root->type_) != split_set.end()) res.push_back(root); return res; } bool Mutator::connect_back(map &m_save) { for (auto &iter : m_save) { *(iter.first) = iter.second; } return true; } static set visited; bool Mutator::fix_one(IR *stmt_root, map>> &scope_library) { visited.clear(); analyze_scope(stmt_root); auto graph = build_graph(stmt_root, scope_library); #ifdef GRAPHLOG for (auto &iter : graph) { cout << "Node: " << iter.first->to_string() << " connected with:" << endl; for (auto &k : iter.second) { cout << k->to_string() << endl; } cout << "--------" << endl; } cout << "OUTPUT END" << endl; #endif return fill_stmt_graph(graph); } void Mutator::analyze_scope(IR *stmt_root) { if (stmt_root->left_) { analyze_scope(stmt_root->left_); } if (stmt_root->right_) { analyze_scope(stmt_root->right_); } auto data_type = stmt_root->data_type_; if (data_type == kDataWhatever) return; scope_library_[stmt_root->scope_][data_type].push_back(stmt_root); } map> Mutator::build_graph( IR *stmt_root, map>> &scope_library) { map> res; deque bfs = {stmt_root}; while (!bfs.empty()) { auto node = bfs.front(); bfs.pop_front(); auto cur_scope = node->scope_; auto cur_data_flag = node->data_flag_; auto cur_data_type = node->data_type_; if (find(int_types_.begin(), int_types_.end(), node->type_) != int_types_.end()) { if (get_rand_int(100) > 50) node->int_val_ = vector_rand_ele(value_library_); else node->int_val_ = get_rand_int(100); } else if (find(float_types_.begin(), float_types_.end(), node->type_) != float_types_.end()) { node->float_val_ = (double)(get_rand_int(100000000)); } if (node->left_) bfs.push_back(node->left_); if (node->right_) bfs.push_back(node->right_); if (cur_data_type == kDataWhatever) continue; res[node]; cur_scope--; if (relationmap_.find(cur_data_type) != relationmap_.end()) { auto &target_data_type_map = relationmap_[cur_data_type]; for (auto &target : target_data_type_map) { IR *pick_node = NULL; if (isMapToClosestOne(cur_data_flag)) { pick_node = find_closest_node(stmt_root, node, target.first); if (pick_node && pick_node->scope_ != cur_scope) { pick_node = NULL; } } else { if (!node->str_val_.empty()) { } if (!isDefine(cur_data_flag) || relationmap_[cur_data_type][target.first] != kRelationElement) { if (!scope_library[cur_scope][target.first].empty()) pick_node = vector_rand_ele(scope_library[cur_scope][target.first]); } } if (pick_node != NULL) res[pick_node].push_back(node); } } } return res; } bool Mutator::fill_stmt_graph(map> &graph) { bool res = true; map zero_indegrees; for (auto &iter : graph) { if (zero_indegrees.find(iter.first) == zero_indegrees.end()) { zero_indegrees[iter.first] = true; } for (auto ir : iter.second) { zero_indegrees[ir] = false; } } for (auto &iter : graph) { auto type1 = iter.first->data_type_; auto beg = iter.first; if (zero_indegrees[beg] == false || visited.find(beg) != visited.end()) { continue; } res &= fill_one(iter.first); res &= fill_stmt_graph_one(graph, iter.first); } return res; } bool Mutator::fill_stmt_graph_one(map> &graph, IR *ir) { if (graph.find(ir) == graph.end()) return true; bool res = true; auto type = ir->data_type_; auto &vec = graph[ir]; if (!vec.empty()) { for (auto d : vec) { res = res & fill_one_pair(ir, d); res = res & fill_stmt_graph_one(graph, d); } } return res; } static bool replace_in_vector(string &old_str, string &new_str, vector &victim) { for (int i = 0; i < victim.size(); i++) { if (victim[i] == old_str) { victim[i] = new_str; return true; } } return false; } static bool remove_in_vector(string &str_to_remove, vector &victim) { for (auto iter = victim.begin(); iter != victim.end(); iter++) { if (*iter == str_to_remove) { victim.erase(iter); return true; } } return false; } bool Mutator::remove_one_from_datalibrary(DATATYPE datatype, string &key) { return remove_in_vector(key, data_library_[datatype]); } bool Mutator::replace_one_from_datalibrary(DATATYPE datatype, string &old_str, string &new_str) { return replace_in_vector(old_str, new_str, data_library_[datatype]); } bool Mutator::remove_one_pair_from_datalibrary_2d(DATATYPE p_datatype, DATATYPE c_data_type, string &p_key) { for (auto &value : data_library_2d_[p_datatype][p_key][c_data_type]) { remove_one_from_datalibrary(c_data_type, value); } data_library_2d_[p_datatype][p_key].erase(c_data_type); if (data_library_2d_[p_datatype][p_key].empty()) { remove_one_from_datalibrary(p_datatype, p_key); data_library_2d_[p_datatype].erase(p_key); } return true; } #define has_element(a, b) (find(a.begin(), a.end(), b) != (a).end()) #define has_key(a, b) ((a).find(b) != (a).end()) bool Mutator::replace_one_value_from_datalibray_2d(DATATYPE p_datatype, DATATYPE c_data_type, string &p_key, string &old_c_value, string &new_c_value) { replace_one_from_datalibrary(c_data_type, old_c_value, new_c_value); replace_in_vector(old_c_value, new_c_value, data_library_2d_[p_datatype][p_key][c_data_type]); return true; } bool Mutator::fill_one(IR *ir) { auto type = ir->data_type_; visited.insert(ir); if (isDefine(ir->data_flag_)) { string new_name = gen_id_name(); data_library_[type].push_back(new_name); ir->str_val_ = new_name; for (auto iter : relationmap_) { for (auto iter2 : iter.second) { if (iter2.first == type && iter2.second == kRelationSubtype) { data_library_2d_[type][new_name]; } } } return true; } else if (isAlias(ir->data_flag_)) { string alias_target; if (data_library_[type].size() != 0) alias_target = vector_rand_ele(data_library_[type]); else { alias_target = get_rand_int(2) ? "v0" : "v1"; } string new_name = gen_id_name(); data_library_[type].push_back(new_name); ir->str_val_ = new_name; if (has_key(data_library_2d_, type)) { if (has_key(data_library_2d_[type], alias_target)) { data_library_2d_[type][new_name] = data_library_2d_[type][alias_target]; } } return true; } else if (data_library_.find(type) != data_library_.end()) { if (data_library_[type].empty()) { ir->str_val_ = "v0"; return false; } ir->str_val_ = vector_rand_ele(data_library_[type]); if (isUndefine(ir->data_flag_)) { remove_one_from_datalibrary(ir->data_type_, ir->str_val_); if (has_key(data_library_2d_, type) && has_key(data_library_2d_[type], ir->str_val_)) { for (auto itr = data_library_2d_[type][ir->str_val_].begin(); has_key(data_library_2d_[type], ir->str_val_) && itr != data_library_2d_[type][ir->str_val_].end(); itr++) { auto c_data_type = *itr; remove_one_pair_from_datalibrary_2d(type, c_data_type.first, ir->str_val_); if (!has_key(data_library_2d_[type], ir->str_val_)) break; itr--; } } } return true; } else if (g_data_library_.find(type) != g_data_library_.end()) { if (g_data_library_[type].empty()) { return false; } ir->str_val_ = vector_rand_ele(g_data_library_[type]); return true; } else if (g_data_library_2d_.find(type) != g_data_library_2d_.end()) { int choice = get_rand_int(g_data_library_2d_[type].size()); auto iter = g_data_library_2d_[type].begin(); while (choice > 0) { iter++; choice--; } ir->str_val_ = iter->first; return true; } else { return false; } return true; } bool Mutator::fill_one_pair(IR *parent, IR *child) { visited.insert(child); bool is_define = isDefine(child->data_flag_); bool is_replace = isReplace(child->data_flag_); bool is_undefine = isUndefine(child->data_flag_); bool is_alias = isAlias(child->data_flag_); string new_name = ""; if (is_define || is_replace || is_alias) { new_name = gen_id_name(); } auto p_type = parent->data_type_; auto c_type = child->data_type_; auto p_str = parent->str_val_; auto r_type = relationmap_[c_type][p_type]; switch (r_type) { case kRelationElement: if (is_replace) { child->str_val_ = new_name; replace_one_from_datalibrary(c_type, p_str, new_name); if (has_key(data_library_2d_, p_type)) { if (has_key(data_library_2d_[p_type], p_str)) { auto tmp = data_library_2d_[p_type].extract(p_str); tmp.key() = new_name; data_library_2d_[p_type].insert(move(tmp)); } } else { for (auto &i1 : data_library_2d_) { for (auto &i2 : i1.second) { for (auto &i3 : i2.second) { if (i3.first == c_type) { if (has_element(i3.second, p_str)) { replace_in_vector(p_str, new_name, i3.second); goto END; } } } } } } } else if (is_alias) { child->str_val_ = new_name; if (has_key(data_library_2d_, p_type)) { if (has_key(data_library_2d_[p_type], p_str)) { data_library_2d_[p_type][new_name] = data_library_2d_[p_type][p_str]; data_library_[p_type].push_back(new_name); } } } else { child->str_val_ = p_str; } END: break; case kRelationSubtype: if (data_library_2d_.find(p_type) != data_library_2d_.end()) { if (data_library_2d_[p_type].find(p_str) != data_library_2d_[p_type].end()) { if (is_define) { data_library_2d_[p_type][p_str][c_type].push_back(new_name); child->str_val_ = new_name; data_library_[c_type].push_back(new_name); break; } else if (is_undefine) { if ((data_library_2d_[p_type][p_str][c_type]).empty()) { child->str_val_ = "v1"; break; } child->str_val_ = vector_rand_ele(data_library_2d_[p_type][p_str][c_type]); remove_in_vector(child->str_val_, data_library_2d_[p_type][p_str][c_type]); remove_in_vector(child->str_val_, data_library_[c_type]); break; } else if (data_library_2d_[p_type][p_str].find(c_type) != data_library_2d_[p_type][p_str].end()) { if (data_library_2d_[p_type][p_str][c_type].empty() == false) { child->str_val_ = vector_rand_ele(data_library_2d_[p_type][p_str][c_type]); } } else { if (data_library_[c_type].empty()) { if (get_rand_int(2) == 1) { child->str_val_ = "v0"; } else { child->str_val_ = "v1"; } } else child->str_val_ = vector_rand_ele(data_library_[c_type]); } } else { } } else if (g_data_library_2d_.find(p_type) != g_data_library_2d_.end()) { if (g_data_library_2d_[p_type].find(p_str) != g_data_library_2d_[p_type].end()) { if (g_data_library_2d_[p_type][p_str].find(c_type) != g_data_library_2d_[p_type][p_str].end()) { if (g_data_library_2d_[p_type][p_str][c_type].empty() == false) { child->str_val_ = vector_rand_ele(g_data_library_2d_[p_type][p_str][c_type]); } } } } else { return false; } break; default: assert(0); break; } return true; } void Mutator::clear_scope_library(bool clear_define) { int level = clear_define ? 0 : 1; int sz = scope_library_.size(); scope_library_.clear(); return; } static IR *search_mapped_ir(IR *ir, DATATYPE type) { vector to_search; vector backup; to_search.push_back(ir); while (!to_search.empty()) { for (auto i : to_search) { if (i->data_type_ == type) { return i; } if (i->left_) { backup.push_back(i->left_); } if (i->right_) { backup.push_back(i->right_); } } to_search = move(backup); backup.clear(); } return NULL; } IR *Mutator::find_closest_node(IR *stmt_root, IR *node, DATATYPE type) { auto cur = node; while (true) { auto parent = locate_parent(stmt_root, cur); if (!parent) break; bool flag = false; while (parent->left_ == NULL || parent->right_ == NULL) { cur = parent; parent = locate_parent(stmt_root, cur); if (!parent) { flag = true; break; } } if (flag) return NULL; auto search_root = parent->left_ == cur ? parent->right_ : parent->left_; auto res = search_mapped_ir(search_root, type); if (res) return res; cur = parent; } return NULL; } int Mutator::try_fix(char *buf, int len, char *&new_buf, int &new_len) { string sql(buf); auto ast = parser(sql); new_buf = buf; new_len = len; if (ast == NULL) return 0; vector v_ir; auto ir_root = ast->translate(v_ir); ast->deep_delete(); if (ir_root == NULL) return 0; bool fixed_result = validate(ir_root); string fixed; if (fixed_result != false) { fixed = ir_root->to_string(); } deep_delete(ir_root); if (fixed.empty()) return 0; char *sfixed = (char *)malloc(fixed.size() + 1); memcpy(sfixed, fixed.c_str(), fixed.size()); sfixed[fixed.size()] = 0; new_buf = sfixed; new_len = fixed.size(); return 1; } ================================================ FILE: srcs/internal/postgresql/srcs/utils.cpp ================================================ #include "../include/utils.h" #include #include #include #include void trim_string(string &res) { int count = 0; int idx = 0; bool expect_space = false; for (int i = 0; i < res.size(); i++) { if (res[i] == ';' && i != res.size() - 1) { res[i + 1] = '\n'; } if (res[i] == ' ') { if (expect_space == false) { continue; } else { expect_space = false; res[idx++] = res[i]; count++; } } else { expect_space = true; res[idx++] = res[i]; count++; } } res.resize(count); } string gen_string() { return string("x"); } double gen_float() { return 1.2; } long gen_long() { return 1; } int gen_int() { return 1; } typedef unsigned long uint64_t; Program *parser(string sql) { yyscan_t scanner; YY_BUFFER_STATE state; Program *p = new Program(); if (ff_lex_init(&scanner)) { return NULL; } state = ff__scan_string(sql.c_str(), scanner); int ret = ff_parse(p, scanner); ff__delete_buffer(state, scanner); ff_lex_destroy(scanner); if (ret != 0) { p->deep_delete(); return NULL; } return p; } uint64_t ducking_hash(const void *key, int len) { const uint64_t m = 0xc6a4a7935bd1e995; const int r = 47; uint64_t h = 0xdeadbeefdeadbeef ^ (len * m); const uint64_t *data = (const uint64_t *)key; const uint64_t *end = data + (len / 8); while (data != end) { uint64_t k = *data++; k *= m; k ^= k >> r; k *= m; h ^= k; h *= m; } const unsigned char *data2 = (const unsigned char *)data; switch (len & 7) { case 7: h ^= uint64_t(data2[6]) << 48; case 6: h ^= uint64_t(data2[5]) << 40; case 5: h ^= uint64_t(data2[4]) << 32; case 4: h ^= uint64_t(data2[3]) << 24; case 3: h ^= uint64_t(data2[2]) << 16; case 2: h ^= uint64_t(data2[1]) << 8; case 1: h ^= uint64_t(data2[0]); h *= m; }; h ^= h >> r; h *= m; h ^= h >> r; return h; } vector get_all_files_in_dir(const char *dir_name) { vector file_list; if (NULL == dir_name) { cout << " dir_name is null ! " << endl; return file_list; } struct stat s; lstat(dir_name, &s); if (!S_ISDIR(s.st_mode)) { cout << "dir_name is not a valid directory !" << endl; return file_list; } struct dirent *filename; // return value for readdir() DIR *dir; // return value for opendir() dir = opendir(dir_name); if (NULL == dir) { cout << "Can not open dir " << dir_name << endl; return file_list; } cout << "Successfully opened the dir !" << endl; while ((filename = readdir(dir)) != NULL) { if (strcmp(filename->d_name, ".") == 0 || strcmp(filename->d_name, "..") == 0) continue; cout << filename->d_name << endl; file_list.push_back(string(filename->d_name)); } return file_list; } ================================================ FILE: srcs/internal/sqlite/include/ast.h ================================================ #ifndef __AST_H__ #define __AST_H__ #include #include #include #include #include #include "define.h" using namespace std; #define DECLARE_CLASS(v) class v; ALLCLASS(DECLARE_CLASS); #undef DECLARE_CLASS #define GEN_NAME() name_ = gen_id_name(); #define reset_counter() g_id_counter = 0; static unsigned long g_id_counter; static inline void clear_id() { g_id_counter = 0; } static string gen_id_name() { return "v" + to_string(g_id_counter++); } enum CASEIDX { CASE0, CASE1, CASE2, CASE3, CASE4, CASE5, CASE6, CASE7, CASE8 }; enum NODETYPE { kconst_str, kconst_int, kconst_float, #define DECLARE_TYPE(v) v, ALLTYPE(DECLARE_TYPE) #undef DECLARE_TYPE }; enum IDTYPE { id_whatever, id_top_table_name, id_column_name, id_table_name, id_create_table_name, id_create_column_name, id_schema_name, id_pragma_name, id_pragma_value, id_index_name, id_trigger_name, id_module_name, id_window_def_name, id_window_name, id_window_base_name, id_savepoint_name, id_collation_name, id_database_name, }; typedef NODETYPE IRTYPE; class IROperator { public: IROperator(string prefix = "", string middle = "", string suffix = "") : prefix_(prefix), middle_(middle), suffix_(suffix) {} string prefix_; string middle_; string suffix_; }; class IR { public: IR(IRTYPE type, IROperator* op, IR* left = NULL, IR* right = NULL) : type_(type), op_(op), left_(left), right_(right), operand_num_((!!right) + (!!left)), id_type_(id_whatever) { GEN_NAME(); } IR(IRTYPE type, string str_val, IDTYPE id_type = id_whatever) : type_(type), str_val_(str_val), op_(NULL), left_(NULL), right_(NULL), operand_num_(0), id_type_(id_type) { GEN_NAME(); } IR(IRTYPE type, bool b_val) : type_(type), b_val_(b_val), left_(NULL), op_(NULL), right_(NULL), operand_num_(0), id_type_(id_whatever) { GEN_NAME(); } IR(IRTYPE type, unsigned long int_val) : type_(type), int_val_(int_val), left_(NULL), op_(NULL), right_(NULL), operand_num_(0), id_type_(id_whatever) { GEN_NAME(); } IR(IRTYPE type, double f_val) : type_(type), f_val_(f_val), left_(NULL), op_(NULL), right_(NULL), operand_num_(0), id_type_(id_whatever) { GEN_NAME(); } IR(IRTYPE type, IROperator* op, IR* left, IR* right, double f_val, string str_val, string name, unsigned int mutated_times) : type_(type), op_(op), left_(left), right_(right), operand_num_((!!right) + (!!left)), name_(name), str_val_(str_val), f_val_(f_val), mutated_times_(mutated_times), id_type_(id_whatever) {} union { unsigned long int_val_; double f_val_; bool b_val_; }; IDTYPE id_type_; IRTYPE type_; string name_; string str_val_; IROperator* op_; IR* left_; IR* right_; int operand_num_; unsigned int mutated_times_ = 0; string to_string(); }; class IRCollector { public: vector parse(Program* entry); }; class Node { public: void set_sub_type(unsigned int i) { sub_type_ = i; } NODETYPE type_; unsigned int sub_type_; virtual IR* translate(vector& v_ir_collector); }; class Opt : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); bool is_existed_; }; class OptString : public Opt { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); string str_; }; class Program : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); StatementList* statement_list_; OptSemicolon* opt_semicolon_; }; class StatementList : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); vector v_statement_list_; }; class Statement : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); OptionalHints* optional_hints_; PreparableStatement* preparable_statement_; PrepareStatement* prepare_statement_; ShowStatement* show_statement_; Cmd* cmd_; }; class Cmd : public Statement { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); }; class CmdAttach : public Cmd { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); Expr* expr_; SchemaName* schema_name_; }; class CmdDetach : public Cmd { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); SchemaName* schema_name_; }; class CmdReindex : public Cmd { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); TableName* table_name_; }; class CmdAnalyze : public Cmd { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); TableName* table_name_; }; class SuperList : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); vector v_super_list_; }; class OptionalHints : public Opt { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); HintList* hint_list_; }; class CmdPragma : public Cmd { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); PragmaKey* pragma_key_; PragmaValue* pragma_value_; TableName* table_name_; }; class PragmaKey : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); PragmaName* pragma_name_; SchemaName* schema_name_; }; class PragmaValue : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); NumLiteral* num_literal_; StringLiteral* string_literal_; Identifier* id_; }; class PragmaName : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); Identifier* id_; }; class SchemaName : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); Identifier* id_; }; class PrepareStatement : public Statement { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); Identifier* id_; PrepareTargetQuery* prep_target_que_; }; class PreparableStatement : public Statement { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); }; class ShowStatement : public Statement { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); TableName* table_name_; }; class Hint : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); LiteralList* literal_list_; Identifier* id_; }; class HintList : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); vector v_hint_list_; }; class PrepareTargetQuery : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); string prep_target_que_; }; class SelectStatement : public PreparableStatement { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); OptWithClause* opt_with_clause_; SelectWithParen* select_with_paren_; SelectNoParen* select_no_paren_; SetOperator* set_operator_; SelectParenOrClause* select_paren_or_clause_; OptOrder* opt_order_; OptLimit* opt_limit_; }; class ImportStatement : public PreparableStatement { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); ImportFileType* import_file_type_; FilePath* file_path_; TableName* table_name_; }; class CreateStatement : public PreparableStatement { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); OptNotExists* opt_not_exists_; TableName* table_name_; FilePath* file_path_; ColumnDefCommaList* column_def_comma_list_; SelectStatement* select_statement_; OptColumnList* opt_column_list_; OptUnique* opt_unique_; IndexName* index_name_; IdentCommaList* ident_commalist_; OptWhere* opt_where_; ModuleName* module_name_; TriggerDeclare* trigger_declare_; TriggerCmdList* trigger_cmd_list_; }; class InsertStatement : public PreparableStatement { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); InsertType* insert_type_; TableName* table_name_; OptColumnList* opt_column_list_; SuperList* super_list_; SelectNoParen* select_no_paren_; OptUpsertClause* opt_upsert_clause_; }; class DeleteStatement : public PreparableStatement { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); TableName* table_name_; OptWhere* opt_where_; }; class UpdateStatement : public PreparableStatement { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); TableRefNameNoAlias* table_ref_name_no_alias_; UpdateClauseCommalist* update_clause_comma_list_; OptWhere* opt_where_; }; class DropStatement : public PreparableStatement { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); OptExists* opt_exists_; TableName* table_name_; Identifier* id_; SchemaName* schema_name_; TriggerName* trigger_name_; }; class ExecuteStatement : public PreparableStatement { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); Identifier* id_; OptLiteralList* opt_literal_list_; }; class ImportFileType : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); string str_val_; }; class FilePath : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); string str_val_; }; class OptNotExists : public Opt { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); string str_val_; }; class ColumnDefCommaList : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); vector v_column_def_comma_list_; }; class ColumnDef : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); Identifier* id_; ColumnType* column_type_; OptColumnArglist* opt_column_arglist_; }; class ColumnType : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); string str_val_; }; class OptColumnNullable : public Opt { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); string str_val_; }; class OptExists : public Opt { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); string str_val_; }; class OptColumnList : public Opt { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); IdentCommaList* ident_comma_list_; }; class UpdateClauseCommalist : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); vector v_update_clause_list_; }; class UpdateClause : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); Identifier* id_; Expr* expr_; }; class SelectWithParen : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); SelectNoParen* select_no_paren_; SelectWithParen* select_with_paren_; }; class SelectParenOrClause : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); SelectWithParen* select_with_paren_; SelectClause* select_clause_; }; class SelectNoParen : public SelectWithParen { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); SelectClause* select_clause_; OptOrder* opt_order_; OptLimit* opt_limit_; SetOperator* set_operator_; SelectParenOrClause* select_paren_or_clause_; }; class SetOperator : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); SetType* set_type_; OptAll* opt_all_; }; class SetType : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); string str_val_; }; class OptAll : public Opt { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); string str_val_; }; class SelectClause : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); OptTop* opt_top_; OptDistinct* opt_distinct_; SelectList* select_list_; OptFromClause* opt_from_clause_; OptWhere* opt_where_; OptGroup* opt_group_; WindowClause* window_clause_; }; class OptDistinct : public Opt { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); string str_val_; }; class SelectList : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); ExprList* expr_list_; }; class FromClause : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); TableRef* table_ref_; }; class OptFromClause : public Opt { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); FromClause* from_clause_; }; class OptWhere : public Opt { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); Expr* expr_; }; class OptGroup : public Opt { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); ExprList* expr_list_; OptHaving* opt_having_; }; class OptHaving : public Opt { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); Expr* expr_; }; class OptOrder : public Opt { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); OrderList* order_list_; }; class OrderList : public Opt { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); vector v_order_desc_; }; class OrderDesc : public Opt { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); Expr* expr_; OptOrderType* opt_order_type_; OptNull* opt_null_; }; class OptOrderType : public Opt { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); string str_val_; }; class OptTop : public Opt { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); IntLiteral* int_literal_; }; class OptLimit : public Opt { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); Expr* expr1_; Expr* expr2_; }; class ExprList : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); vector v_expr_list_; }; class LiteralList : public Opt { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); vector v_literal_list_; }; class OptLiteralList : public Opt { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); LiteralList* literal_list_; }; class Alias : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); bool has_as_; Identifier* id_; }; class Expr : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); }; class ExprAlias : public Expr { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); Expr* expr_; OptAlias* opt_alias_; }; class Operand : public Expr { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); Expr* expr_; SelectNoParen* select_no_paren_; }; class BetweenExpr : public Expr { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); Operand* operand1_; Operand* operand2_; Operand* operand3_; }; class LogicExpr : public Expr { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); Expr* expr1_; Expr* expr2_; string operator_; }; class ExistsExpr : public Expr { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); SelectNoParen* select_no_paren_; }; class InExpr : public Expr { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); Operand* operand_; ExprList* expr_list_; SelectNoParen* select_no_paren_; }; class ArrayIndex : public Operand { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); IntLiteral* int_literal_; Operand* operand_; }; class ScalarExpr : public Operand { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); ColumnName* column_name_; Literal* literal_; }; class UnaryExpr : public Operand { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); Operand* operand_; string operator_; }; class BinaryExpr : public Operand { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); Operand* operand1_; Operand* operand2_; string operator_; CompExpr* comp_expr_; }; class CompExpr : public BinaryExpr { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); }; class CaseExpr : public Operand { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); Expr* case_expr_; Expr* else_expr_; CaseList* case_list_; }; class FunctionExpr : public Operand { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); Identifier* id_; OptDistinct* opt_distinct_; ExprList* expr_list_; OptFilterClause* opt_filter_clause_; OptOverClause* opt_over_clause_; }; class ExtractExpr : public Operand { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); DatetimeField* datetime_field_; Expr* expr_; }; class ArrayExpr : public Operand { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); ExprList* expr_list_; }; class CaseClause : public Node { public: CaseClause(Expr* exp1, Expr* exp2) : when_expr_(exp1), then_expr_(exp2) {} virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); Expr* when_expr_; Expr* then_expr_; }; class CaseList : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); vector v_case_list_; }; class DatetimeField : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); string str_val_; }; class ColumnName : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); Identifier* identifier1_; Identifier* identifier2_; }; class Literal : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); }; class StringLiteral : public Literal { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); string str_val_; }; class BoolLiteral : public Literal { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); bool b_val_; }; class NumLiteral : public Literal { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); double f_val_; IntLiteral* int_literal_; }; class IntLiteral : public Literal { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); unsigned long int_val_; }; class FloatLiteral : public NumLiteral { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); }; class NullLiteral : public Literal { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); }; class ParamExpr : public Literal { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); }; class Identifier : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); Identifier(string s, IDTYPE id_type = id_whatever) : id_(s), id_type_(id_type) {} string id_; IDTYPE id_type_; }; class TableRefCommaList : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); vector v_table_ref_comma_list_; }; class TableRefAtomic : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); NonjoinTableRefAtomic* nonjoin_table_ref_atomic_; JoinClause* join_clause_; }; class NonjoinTableRefAtomic : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); TableRefName* table_ref_name_; SelectStatement* select_statement_; OptTableAlias* opt_table_alias_; }; class TableRefName : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); TableName* table_name_; OptTableAlias* opt_table_alias_; }; class TableRefNameNoAlias : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); TableName* table_name_; }; class TableName : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); Identifier* database_name_; Identifier* table_name_; }; class TableAlias : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); Alias* alias_; IdentCommaList* ident_comma_list_; Identifier* id_; }; class OptTableAlias : public Opt { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); TableAlias* table_alias_; }; class OptAlias : public Opt { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); Alias* alias_; }; class WithClause : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); WithDescriptionList* with_description_list_; }; class OptWithClause : public Opt { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); WithClause* with_clause_; }; class WithDescriptionList : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); vector v_with_description_list_; }; class WithDescription : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); SelectWithParen* select_with_paren_; Identifier* id_; }; class JoinClause : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); TableRefAtomic* table_ref_atomic1_; NonjoinTableRefAtomic* nonjoin_table_ref_atomic_; OptJoinType* opt_join_type_; TableRefAtomic* table_ref_atomic2_; ColumnName* column_name_; JoinCondition* join_condition_; }; class OptJoinType : public OptString { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); string str_val_; }; class JoinCondition : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); Expr* expr_; }; class OptSemicolon : public OptString { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); string str_val_; }; class IdentCommaList : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); vector v_iden_comma_list_; }; class OptColumnArglist : public Opt { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); ColumnArglist* column_arglist_; }; class ColumnArglist : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); vector v_column_arg_; }; class ColumnArg : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); OptOnConflict* opt_on_conflict_; OptOrderType* opt_order_type_; OptAutoinc* opt_autoinc_; Expr* expr_; }; class OptOnConflict : public Opt { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); ResolveType* resolve_type_; }; class ResolveType : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); string str_val_; }; class OptAutoinc : public Opt { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); string str_val_; }; class OptUnique : public Opt { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); string str_val_; }; class IndexName : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); Identifier* id_; }; class TriggerDeclare : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); OptTmp* opt_tmp_; OptNotExists* opt_not_exists_; TriggerName* trigger_name_; OptTriggerTime* opt_trigger_time_; TriggerEvent* trigger_event_; TableName* table_name_; OptForEach* opt_for_each_; OptWhen* opt_when_; }; class OptTmp : public Opt { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); string str_val_; }; class TriggerName : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); Identifier* id_; }; class OptTriggerTime : public Opt { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); string str_val_; }; class TriggerEvent : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); OptOfColumnList* opt_of_column_list_; }; class OptOfColumnList : public Opt { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); IdentCommaList* ident_commalist_; }; class OptForEach : public Opt { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); string str_val_; }; class OptWhen : public Opt { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); Expr* expr_; }; class TriggerCmdList : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); vector v_trigger_cmd_list_; }; class TriggerCmd : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); PreparableStatement* stmt_; }; class ModuleName : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); Identifier* id_; }; class OptOverClause : public Opt { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); Window* window_; Identifier* id_; }; class OptFilterClause : public Opt { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); Expr* expr_; }; class WindowClause : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); WindowDefnList* windowdefn_list_; }; class WindowDefnList : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); vector v_windowdefn_list_; }; class WindowDefn : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); Identifier* id_; Window* window_; }; class Window : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); OptBaseWindowName* opt_base_window_name_; ExprList* expr_list_; OptOrder* opt_order_; OptFrame* opt_frame_; }; class OptBaseWindowName : public Opt { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); Identifier* id_; }; class OptFrame : public Opt { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); RangeOrRows* range_or_rows_; FrameBoundS* frame_bound_s_; OptFrameExclude* opt_frame_exclude_; FrameBoundE* frame_bound_e_; }; class RangeOrRows : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); string str_val_; }; class FrameBoundS : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); FrameBound* frame_bound_; }; class FrameBoundE : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); FrameBound* frame_bound_; }; class FrameBound : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); Expr* expr_; string str_val_; }; class OptFrameExclude : public Opt { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); FrameExclude* frame_exclude_; }; class FrameExclude : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); string str_val_; }; class InsertType : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); string str_val_; ResolveType* resolve_type_; }; class TableRef : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); OptAlias* opt_alias_; OptIndex* opt_index_; ExprList* expr_list_; TablePrefix* table_prefix_; OptOn* opt_on_; SelectNoParen* select_no_paren_; OptUsing* opt_using_; TableName* table_name_; TableRef* table_ref_; }; class TablePrefix : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); JoinOp* join_op_; TableRef* table_ref_; }; class JoinOp : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); JoinKw* join_kw_; Identifier* id1_; Identifier* id2_; }; class JoinKw : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); string str_val_; }; class OptIndex : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); ColumnName* column_name_; }; class OptOn : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); Expr* expr_; }; class OptUsing : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); IdentCommaList* ident_commalist_; }; class CastExpr : public Expr { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); ColumnType* column_type_; Expr* expr_; }; class AlterStatement : public PreparableStatement { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); ColumnDef* column_def_; TableName* table_name1_; TableName* table_name2_; ColumnName* column_name1_; ColumnName* column_name2_; OptColumn* opt_column_; }; class OptColumn : public Opt { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); string str_val_; }; class CmdRelease : public Cmd { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); SavepointName* savepoint_name_; }; class SavepointName : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); Identifier* id_; }; class VacuumStatement : public Cmd { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); OptSchemaName* opt_schema_name_; FilePath* file_path_; }; class OptSchemaName : public Opt { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); SchemaName* schema_name_; }; class RollbackStatement : public Cmd { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); OptTransaction* opt_transaction_; OptToSavepoint* opt_to_savepoint_; }; class OptTransaction : public Opt { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); string str_val_; }; class OptToSavepoint : public Opt { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); SavepointName* savepoint_name_; }; class BeginStatement : public Cmd { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); OptTransaction* opt_transaction_; }; class CommitStatement : public Cmd { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); OptTransaction* opt_transaction_; }; class OptUpsertClause : public Opt { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); UpsertClause* upsert_clause_; }; class UpsertClause : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); IndexedColumnList* indexed_column_list_; AssignList* assign_list_; OptWhere* opt_where1_; OptWhere* opt_where2_; }; class IndexedColumnList : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); vector v_indexed_column_list_; }; class IndexedColumn : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); OptOrderType* opt_order_type_; Expr* expr_; OptCollate* opt_collate_; }; class OptCollate : public Opt { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); CollationName* collation_name_; string str_val_; }; class AssignList : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); vector v_assign_list_; }; class OptNull : public Opt { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); string str_val_; }; class AssignClause : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); ColumnNameList* column_name_list_; Expr* expr_; }; class ColumnNameList : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); vector v_column_name_list_; }; class CollationName : public Node { public: virtual void deep_delete(); virtual IR* translate(vector& v_ir_collector); Identifier* id_; }; #endif ================================================ FILE: srcs/internal/sqlite/include/define.h ================================================ #pragma once #ifndef __DEFINE_H__ #define __DEFINE_H__ #define ALLTYPE(V) \ V(kIR) \ V(kIROperator) \ V(kNode) \ V(kOpt) \ V(kOptString) \ V(kProgram) \ V(kStatement) \ V(kOptionalHints) \ V(kPrepareStatement) \ V(kPreparableStatement) \ V(kShowStatement) \ V(kHint) \ V(kHintList) \ V(kPrepareTargetQuery) \ V(kSelectStatement) \ V(kImportStatement) \ V(kCreateStatement) \ V(kInsertStatement) \ V(kDeleteStatement) \ V(kUpdateStatement) \ V(kDropStatement) \ V(kExecuteStatement) \ V(kImportFileType) \ V(kFilePath) \ V(kOptNotExists) \ V(kColumnDefCommaList) \ V(kColumnDef) \ V(kColumnType) \ V(kOptColumnNullable) \ V(kOptExists) \ V(kOptColumnList) \ V(kUpdateClauseCommalist) \ V(kUpdateClause) \ V(kSelectWithParen) \ V(kSelectParenOrClause) \ V(kSelectNoParen) \ V(kSetOperator) \ V(kSetType) \ V(kOptAll) \ V(kSelectClause) \ V(kOptDistinct) \ V(kSelectList) \ V(kFromClause) \ V(kOptFromClause) \ V(kOptWhere) \ V(kOptGroup) \ V(kOptHaving) \ V(kOptOrder) \ V(kOrderList) \ V(kOrderDesc) \ V(kOptOrderType) \ V(kOptTop) \ V(kOptLimit) \ V(kExprList) \ V(kLiteralList) \ V(kOptLiteralList) \ V(kExprAlias) \ V(kExpr) \ V(kOperand) \ V(kBetweenExpr) \ V(kLogicExpr) \ V(kExistsExpr) \ V(kInExpr) \ V(kArrayIndex) \ V(kScalarExpr) \ V(kUnaryExpr) \ V(kBinaryExpr) \ V(kCaseExpr) \ V(kFunctionExpr) \ V(kExtractExpr) \ V(kArrayExpr) \ V(kCaseClause) \ V(kCaseList) \ V(kDatetimeField) \ V(kColumnName) \ V(kLiteral) \ V(kStringLiteral) \ V(kBoolLiteral) \ V(kNumLiteral) \ V(kIntLiteral) \ V(kNullLiteral) \ V(kParamExpr) \ V(kIdentifier) \ V(kTableRef) \ V(kTableRefCommaList) \ V(kTableRefAtomic) \ V(kNonjoinTableRefAtomic) \ V(kTableRefName) \ V(kTableRefNameNoAlias) \ V(kTableName) \ V(kTableAlias) \ V(kOptTableAlias) \ V(kAlias) \ V(kOptAlias) \ V(kWithClause) \ V(kOptWithClause) \ V(kWithDescriptionList) \ V(kWithDescription) \ V(kJoinClause) \ V(kOptJoinType) \ V(kJoinCondition) \ V(kOptSemicolon) \ V(kIdentCommaList) \ V(kFloatLiteral) \ V(kInit) \ V(kStatementList) \ V(kCompExpr) \ V(kUnknown) \ V(kEmpty) \ V(kCmdPragma) \ V(kPragmaKey) \ V(kPragmaName) \ V(kPragmaValue) \ V(kSchemaName) \ V(kOptColumnArglist) \ V(kColumnArglist) \ V(kColumnArg) \ V(kOptOnConflict) \ V(kResolveType) \ V(kOptAutoinc) \ V(kOptUnique) \ V(kIndexName) \ V(kTriggerDeclare) \ V(kOptTmp) \ V(kTriggerName) \ V(kOptTriggerTime) \ V(kTriggerEvent) \ V(kOptOfColumnList) \ V(kOptForEach) \ V(kOptWhen) \ V(kTriggerCmdList) \ V(kTriggerCmd) \ V(kModuleName) \ V(kOptOverClause) \ V(kOptFilterClause) \ V(kWindowClause) \ V(kWindowDefnList) \ V(kWindowDefn) \ V(kWindow) \ V(kOptBaseWindowName) \ V(kOptFrame) \ V(kRangeOrRows) \ V(kFrameBoundS) \ V(kFrameBoundE) \ V(kFrameBound) \ V(kOptFrameExclude) \ V(kFrameExclude) \ V(kInsertType) \ V(kCmd) \ V(kCmdAttach) \ V(kCmdDetach) \ V(kCmdReindex) \ V(kCmdAnalyze) \ V(kSuperList) \ V(kTablePrefix) \ V(kOptOn) \ V(kOptUsing) \ V(kOptIndex) \ V(kJoinOp) \ V(kJoinKw) \ V(kCastExpr) \ V(kAlterStatement) \ V(kOptColumn) \ V(kCmdRelease) \ V(kSavepointName) \ V(kVacuumStatement) \ V(kOptSchemaName) \ V(kRollbackStatement) \ V(kOptTransaction) \ V(kOptToSavepoint) \ V(kBeginStatement) \ V(kCommitStatement) \ V(kUpsertClause) \ V(kIndexedColumnList) \ V(kIndexedColumn) \ V(kOptCollate) \ V(kAssignList) \ V(kOptNull) \ V(kAssignClause) \ V(kColumnNameList) \ V(kCollationName) \ V(kOptUpsertClause) #define ALLCLASS(V) \ V(IR) \ V(IROperator) \ V(Node) \ V(Opt) \ V(OptString) \ V(Program) \ V(Statement) \ V(OptionalHints) \ V(PrepareStatement) \ V(PreparableStatement) \ V(ShowStatement) \ V(Hint) \ V(HintList) \ V(PrepareTargetQuery) \ V(SelectStatement) \ V(ImportStatement) \ V(CreateStatement) \ V(InsertStatement) \ V(DeleteStatement) \ V(UpdateStatement) \ V(DropStatement) \ V(ExecuteStatement) \ V(ImportFileType) \ V(FilePath) \ V(OptNotExists) \ V(ColumnDefCommaList) \ V(ColumnDef) \ V(ColumnType) \ V(OptColumnNullable) \ V(OptExists) \ V(OptColumnList) \ V(UpdateClauseCommalist) \ V(UpdateClause) \ V(SelectWithParen) \ V(SelectParenOrClause) \ V(SelectNoParen) \ V(SetOperator) \ V(SetType) \ V(OptAll) \ V(SelectClause) \ V(OptDistinct) \ V(SelectList) \ V(FromClause) \ V(OptFromClause) \ V(OptWhere) \ V(OptGroup) \ V(OptHaving) \ V(OptOrder) \ V(OrderList) \ V(OrderDesc) \ V(OptOrderType) \ V(OptTop) \ V(OptLimit) \ V(ExprList) \ V(LiteralList) \ V(OptLiteralList) \ V(ExprAlias) \ V(Expr) \ V(Operand) \ V(BetweenExpr) \ V(LogicExpr) \ V(ExistsExpr) \ V(InExpr) \ V(ArrayIndex) \ V(ScalarExpr) \ V(UnaryExpr) \ V(BinaryExpr) \ V(CaseExpr) \ V(FunctionExpr) \ V(ExtractExpr) \ V(ArrayExpr) \ V(CaseClause) \ V(CaseList) \ V(DatetimeField) \ V(ColumnName) \ V(Literal) \ V(StringLiteral) \ V(BoolLiteral) \ V(NumLiteral) \ V(IntLiteral) \ V(NullLiteral) \ V(ParamExpr) \ V(Identifier) \ V(TableRefCommaList) \ V(TableRefAtomic) \ V(NonjoinTableRefAtomic) \ V(TableRefName) \ V(TableRefNameNoAlias) \ V(TableName) \ V(TableAlias) \ V(OptTableAlias) \ V(Alias) \ V(OptAlias) \ V(WithClause) \ V(OptWithClause) \ V(WithDescriptionList) \ V(WithDescription) \ V(JoinClause) \ V(OptJoinType) \ V(JoinCondition) \ V(OptSemicolon) \ V(IdentCommaList) \ V(FloatLiteral) \ V(Init) \ V(StatementList) \ V(CompExpr) \ V(Unknown) \ V(Empty) \ V(CmdPragma) \ V(PragmaKey) \ V(PragmaName) \ V(PragmaValue) \ V(SchemaName) \ V(OptColumnArglist) \ V(ColumnArglist) \ V(ColumnArg) \ V(OptOnConflict) \ V(ResolveType) \ V(OptAutoinc) \ V(OptUnique) \ V(IndexName) \ V(TriggerDeclare) \ V(OptTmp) \ V(TriggerName) \ V(OptTriggerTime) \ V(TriggerEvent) \ V(OptOfColumnList) \ V(OptForEach) \ V(OptWhen) \ V(TriggerCmdList) \ V(TriggerCmd) \ V(ModuleName) \ V(OptOverClause) \ V(OptFilterClause) \ V(WindowClause) \ V(WindowDefnList) \ V(WindowDefn) \ V(Window) \ V(OptBaseWindowName) \ V(OptFrame) \ V(RangeOrRows) \ V(FrameBoundS) \ V(FrameBoundE) \ V(FrameBound) \ V(OptFrameExclude) \ V(FrameExclude) \ V(InsertType) \ V(Cmd) \ V(CmdAttach) \ V(CmdDetach) \ V(CmdReindex) \ V(CmdAnalyze) \ V(SuperList) \ V(TablePrefix) \ V(OptOn) \ V(OptUsing) \ V(OptIndex) \ V(CastExpr) \ V(AlterStatement) \ V(OptColumn) \ V(CmdRelease) \ V(SavepointName) \ V(VacuumStatement) \ V(OptSchemaName) \ V(RollbackStatement) \ V(OptTransaction) \ V(OptToSavepoint) \ V(BeginStatement) \ V(CommitStatement) \ V(JoinOp) \ V(JoinKw) \ V(TableRef) \ V(UpsertClause) \ V(IndexedColumnList) \ V(IndexedColumn) \ V(OptCollate) \ V(AssignList) \ V(OptNull) \ V(AssignClause) \ V(ColumnNameList) \ V(CollationName) \ V(OptUpsertClause) #define SWITCHSTART switch (sub_type_) { #define SWITCHEND \ default: \ \ assert(0); \ } #define CASESTART(idx) case CASE##idx: { #define CASEEND \ break; \ } #define TRANSLATESTART IR *res = NULL; #define TRANSLATEEND \ v_ir_collector.push_back(res); \ \ return res; #define TRANSLATEENDNOPUSH return res; #define SAFETRANSLATE(a) (assert(a != NULL), a->translate(v_ir_collector)) #define SAFEDELETE(a) \ if (a != NULL) a->deep_delete() #define SAFEDELETELIST(a) \ for (auto _i : a) SAFEDELETE(_i) #define OP1(a) new IROperator(a) #define OP2(a, b) new IROperator(a, b) #define OP3(a, b, c) new IROperator(a, b, c) #define OPSTART(a) new IROperator(a) #define OPMID(a) new IROperator("", a, "") #define OPEND(a) new IROperator("", "", a) #define OP0() new IROperator() #define TRANSLATELIST(t, a, b) \ res = SAFETRANSLATE(a[0]); \ res = new IR(t, OP0(), res); \ v_ir_collector.push_back(res); \ for (int i = 1; i < a.size(); i++) { \ IR *tmp = SAFETRANSLATE(a[i]); \ res = new IR(t, OPMID(b), res, tmp); \ v_ir_collector.push_back(res); \ } #define PUSH(a) v_ir_collector.push_back(a) #define MUTATESTART \ IR *res; \ auto randint = get_rand_int(3); \ switch (randint) { #define DOLEFT case 0: { #define DORIGHT \ break; \ } \ \ case 1: { #define DOBOTH \ break; \ } \ case 2: { #define MUTATEEND \ } \ } \ \ return res; #endif ================================================ FILE: srcs/internal/sqlite/include/mutator.h ================================================ #ifndef __MUTATOR_H__ #define __MUTATOR_H__ #include "ast.h" #include "define.h" #include "utils.h" #define LUCKY_NUMBER 500 using namespace std; class Mutator { public: Mutator() { srand(time(nullptr)); } IR *deep_copy_with_record(const IR *root, const IR *record); unsigned long hash(IR *); unsigned long hash(string); IR *ir_random_generator(vector v_ir_collector); vector mutate_all(vector &v_ir_collector); vector mutate(IR *input); IR *strategy_delete(IR *cur); IR *strategy_insert(IR *cur); IR *strategy_replace(IR *cur); bool replace(IR *root, IR *old_ir, IR *new_ir); IR *locate_parent(IR *root, IR *old_ir); string validate(IR *root); void minimize(vector &); bool lucky_enough_to_be_mutated(unsigned int mutated_times); void add_to_library(IR *); void add_to_library_core(IR *); IR *get_from_libary_3D(IR *); IR *get_from_libary_2D(IR *); void init(string f_testcase, string f_common_string = "", string pragma = ""); string fix(IR *root); string extract_struct(IR *root); string extract_struct2(IR *root); void add_new_table(IR *root, string &table_name); void reset_database(); bool check_node_num(IR *root, unsigned int limit); vector extract_statement(IR *root); unsigned int calc_node(IR *root); map> build_dependency_graph(IR *root, map &relationmap, map &crssmap, vector &ordered_ir); vector cut_subquery(IR *program, map &m_save); bool fix_back(map &m_save); void fix_one(map> &graph, IR *fixed_key, set &visited); void fix_graph(map> &graph, IR *root, vector &ordered_ir); string get_a_string(); unsigned long get_a_val(); static vector common_string_libary; static vector value_libary; static map> m_tables; static vector v_table_names; ~Mutator(); void debug(IR *root); unsigned long get_library_size(); int try_fix(char *buf, int len, char *&new_buf, int &new_len); private: IR *record_ = NULL; map>> ir_libary_3D_; map>> ir_libary_3D_hash_; map> ir_libary_2D_hash_; map> ir_libary_2D_; map> left_lib; map> right_lib; vector string_libary; map relationmap; map cross_map; set string_libary_hash_; vector cmds_; map> m_cmd_value_lib_; string s_table_name; map type_counter_; }; #endif ================================================ FILE: srcs/internal/sqlite/include/utils.h ================================================ #ifndef __UTILS_H__ #define __UTILS_H__ #include #include "../parser/bison_parser.h" #include "../parser/flex_lexer.h" #include "ast.h" #include "define.h" //#include "/usr/local/mysql/include/mysql.h" #include #include #include #include #include #include #include using std::string; #define get_rand_int(range) rand() % (range) //#define vector_rand_ele(a) (a[get_rand_int(a.size())]) #define vector_rand_ele(a) \ (a.size() != 0 ? a[get_rand_int(a.size())] : gen_id_name()) IR *deep_copy(const IR *root); void deep_delete(IR *root); Program *parser(string sql); string get_string_by_type(IRTYPE); void print_ir(IR *ir); void print_v_ir(vector &v_ir_collector); uint64_t ducking_hash(const void *key, int len); void trim_string(string &); vector get_all_files_in_dir(const char *dir_name, bool absolute = false); string magic_string_generator(string &s); #endif ================================================ FILE: srcs/internal/sqlite/parser/Makefile ================================================ #bison's version is too old on OSX, allow user to pass in custom path BISON ? = bison FLEX ? = flex #BISON_VERSION = \ $(shell $(BISON)-- version | head - n 1 | grep - o '[0-9]\.[0-9]\+') #BISON_VERSION_SUPPORTED = $(shell echo $(BISON_VERSION) \>= 3.0 | bc) #ifneq($(BISON_VERSION_SUPPORTED), 1) #$(error Bison version $(BISON_VERSION) not supported.If you are using OS X, `bison` uses the \ system default instead \ of the brew version \ .Run \ BISON = \ / \ usr / \ local / \ opt / \ bison / \ bin / \ bison \ make) #endif #FLEX_VERSION = \ $(shell $(FLEX)-- version | head - n 1 | grep - o '[0-9]\.[0-9]\+') #FLEX_VERSION_SUPPORTED = $(shell echo $(FLEX_VERSION) \>= 2.6 | bc) #ifneq($(FLEX_VERSION_SUPPORTED), 1) #$(error Flex version $(FLEX_VERSION) not supported.If you are using OS X, `flex` uses the \ system default instead \ of the brew version \ .Run \ FLEX = \ / \ usr / \ local / \ opt / \ flex / \ bin / \ flex \ make) #endif all : bison_parser.cpp flex_lexer .cpp bison_parser.cpp : bison_parser.y $(BISON) bison_parser.y-- output = bison_parser.cpp-- defines = bison_parser.h-- verbose - Wconflicts - rr flex_lexer.cpp : flex_lexer.l $(FLEX) flex_lexer.l clean : rm - f bison_parser.cpp flex_lexer.cpp bison_parser.h flex_lexer.h * .output #Tests if the parser builds correctly and doesn't contain conflicts. test : !$(BISON) bison_parser.y - v-- output = conflict_test.cpp 2 > &1 | grep "conflict" > / tmp / 2 ================================================ FILE: srcs/internal/sqlite/parser/bison_parser.cpp ================================================ /* A Bison parser, made by GNU Bison 3.3.2. */ /* Bison implementation for Yacc-like parsers in C Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2019 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* C LALR(1) parser skeleton written by Richard Stallman, by simplifying the original so-called "semantic" parser. */ /* All symbols defined below should begin with yy or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. There are some unavoidable exceptions within include files to define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ /* Undocumented macros, especially those whose name start with YY_, are private implementation details. Do not rely on them. */ /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ #define YYBISON_VERSION "3.3.2" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ #define YYPURE 2 /* Push parsers. */ #define YYPUSH 0 /* Pull parsers. */ #define YYPULL 1 /* Substitute the type names. */ #define YYSTYPE HSQL_STYPE #define YYLTYPE HSQL_LTYPE /* Substitute the variable and function names. */ #define yyparse hsql_parse #define yylex hsql_lex #define yyerror hsql_error #define yydebug hsql_debug #define yynerrs hsql_nerrs /* First part of user prologue. */ #line 1 "bison_parser.y" /* yacc.c:337 */ /** * bison_parser.y * defines bison_parser.h * outputs bison_parser.c * * Grammar File Spec: http://dinosaur.compilertools.net/bison/bison_6.html * */ /********************************* ** Section 1: C Declarations *********************************/ #include "bison_parser.h" #include #include #include "flex_lexer.h" int yyerror(YYLTYPE* llocp, Program* result, yyscan_t scanner, const char* msg) { return 0; } #line 104 "bison_parser.cpp" /* yacc.c:337 */ #ifndef YY_NULLPTR #if defined __cplusplus #if 201103L <= __cplusplus #define YY_NULLPTR nullptr #else #define YY_NULLPTR 0 #endif #else #define YY_NULLPTR ((void*)0) #endif #endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE #undef YYERROR_VERBOSE #define YYERROR_VERBOSE 1 #else #define YYERROR_VERBOSE 1 #endif /* In a future release of Bison, this section will be replaced by #include "bison_parser.h". */ #ifndef YY_HSQL_BISON_PARSER_H_INCLUDED #define YY_HSQL_BISON_PARSER_H_INCLUDED /* Debug traces. */ #ifndef HSQL_DEBUG #if defined YYDEBUG #if YYDEBUG #define HSQL_DEBUG 1 #else #define HSQL_DEBUG 0 #endif #else /* ! defined YYDEBUG */ #define HSQL_DEBUG 0 #endif /* ! defined YYDEBUG */ #endif /* ! defined HSQL_DEBUG */ #if HSQL_DEBUG extern int hsql_debug; #endif /* "%code requires" blocks. */ #line 32 "bison_parser.y" /* yacc.c:352 */ // %code requires block #include "../include/ast.h" #include "../include/define.h" //#include "../include/utils.h" #include "parser_typedef.h" // Auto update column and line number #define YY_USER_ACTION \ yylloc->first_line = yylloc->last_line; \ yylloc->first_column = yylloc->last_column; \ for (int i = 0; yytext[i] != '\0'; i++) { \ yylloc->total_column++; \ yylloc->string_length++; \ if (yytext[i] == '\n') { \ yylloc->last_line++; \ yylloc->last_column = 0; \ } else { \ yylloc->last_column++; \ } \ } #line 172 "bison_parser.cpp" /* yacc.c:352 */ /* Token type. */ #ifndef HSQL_TOKENTYPE #define HSQL_TOKENTYPE enum hsql_tokentype { SQL_STRING = 258, SQL_IDENTIFIER = 259, SQL_FLOATVAL = 260, SQL_INTVAL = 261, SQL_DEALLOCATE = 262, SQL_PARAMETERS = 263, SQL_INTERSECT = 264, SQL_TEMPORARY = 265, SQL_TIMESTAMP = 266, SQL_DISTINCT = 267, SQL_NVARCHAR = 268, SQL_RESTRICT = 269, SQL_TRUNCATE = 270, SQL_ANALYZE = 271, SQL_BETWEEN = 272, SQL_CASCADE = 273, SQL_COLUMNS = 274, SQL_CONTROL = 275, SQL_DEFAULT = 276, SQL_EXECUTE = 277, SQL_EXPLAIN = 278, SQL_INTEGER = 279, SQL_NATURAL = 280, SQL_PREPARE = 281, SQL_PRIMARY = 282, SQL_SCHEMAS = 283, SQL_SPATIAL = 284, SQL_VARCHAR = 285, SQL_VIRTUAL = 286, SQL_DESCRIBE = 287, SQL_BEFORE = 288, SQL_COLUMN = 289, SQL_CREATE = 290, SQL_DELETE = 291, SQL_DIRECT = 292, SQL_DOUBLE = 293, SQL_ESCAPE = 294, SQL_EXCEPT = 295, SQL_EXISTS = 296, SQL_EXTRACT = 297, SQL_GLOBAL = 298, SQL_HAVING = 299, SQL_IMPORT = 300, SQL_INSERT = 301, SQL_ISNULL = 302, SQL_OFFSET = 303, SQL_RENAME = 304, SQL_SCHEMA = 305, SQL_SELECT = 306, SQL_SORTED = 307, SQL_TABLES = 308, SQL_UNIQUE = 309, SQL_UNLOAD = 310, SQL_UPDATE = 311, SQL_VALUES = 312, SQL_AFTER = 313, SQL_ALTER = 314, SQL_CROSS = 315, SQL_DELTA = 316, SQL_FLOAT = 317, SQL_GROUP = 318, SQL_INDEX = 319, SQL_INNER = 320, SQL_LIMIT = 321, SQL_LOCAL = 322, SQL_MERGE = 323, SQL_MINUS = 324, SQL_ORDER = 325, SQL_OUTER = 326, SQL_RIGHT = 327, SQL_TABLE = 328, SQL_UNION = 329, SQL_USING = 330, SQL_WHERE = 331, SQL_CALL = 332, SQL_CASE = 333, SQL_CHAR = 334, SQL_DATE = 335, SQL_DESC = 336, SQL_DROP = 337, SQL_ELSE = 338, SQL_FILE = 339, SQL_FROM = 340, SQL_FULL = 341, SQL_HASH = 342, SQL_HINT = 343, SQL_INTO = 344, SQL_JOIN = 345, SQL_LEFT = 346, SQL_LIKE = 347, SQL_LOAD = 348, SQL_LONG = 349, SQL_NULL = 350, SQL_PLAN = 351, SQL_SHOW = 352, SQL_TEXT = 353, SQL_THEN = 354, SQL_TIME = 355, SQL_VIEW = 356, SQL_WHEN = 357, SQL_WITH = 358, SQL_ADD = 359, SQL_ALL = 360, SQL_AND = 361, SQL_ASC = 362, SQL_CSV = 363, SQL_END = 364, SQL_FOR = 365, SQL_INT = 366, SQL_KEY = 367, SQL_NOT = 368, SQL_OFF = 369, SQL_SET = 370, SQL_TBL = 371, SQL_TOP = 372, SQL_AS = 373, SQL_BY = 374, SQL_IF = 375, SQL_IN = 376, SQL_IS = 377, SQL_OF = 378, SQL_ON = 379, SQL_OR = 380, SQL_TO = 381, SQL_ARRAY = 382, SQL_CONCAT = 383, SQL_ILIKE = 384, SQL_SECOND = 385, SQL_MINUTE = 386, SQL_HOUR = 387, SQL_DAY = 388, SQL_MONTH = 389, SQL_YEAR = 390, SQL_TRUE = 391, SQL_FALSE = 392, SQL_PRAGMA = 393, SQL_REINDEX = 394, SQL_GENERATED = 395, SQL_ALWAYS = 396, SQL_CHECK = 397, SQL_CONFLICT = 398, SQL_IGNORE = 399, SQL_REPLACE = 400, SQL_ROLLBACK = 401, SQL_ABORT = 402, SQL_FAIL = 403, SQL_AUTOINCR = 404, SQL_BEGIN = 405, SQL_TRIGGER = 406, SQL_TEMP = 407, SQL_INSTEAD = 408, SQL_EACH = 409, SQL_ROW = 410, SQL_OVER = 411, SQL_FILTER = 412, SQL_PARTITION = 413, SQL_CURRENT = 414, SQL_EXCLUDE = 415, SQL_FOLLOWING = 416, SQL_GROUPS = 417, SQL_NO = 418, SQL_OTHERS = 419, SQL_PRECEDING = 420, SQL_RANGE = 421, SQL_ROWS = 422, SQL_TIES = 423, SQL_UNBOUNDED = 424, SQL_WINDOW = 425, SQL_ATTACH = 426, SQL_DETACH = 427, SQL_DATABASE = 428, SQL_INDEXED = 429, SQL_CAST = 430, SQL_SAVEPOINT = 431, SQL_RELEASE = 432, SQL_VACUUM = 433, SQL_TRANSACTION = 434, SQL_DEFFERED = 435, SQL_EXCLUSIVE = 436, SQL_IMEDIATE = 437, SQL_COMMIT = 438, SQL_GLOB = 439, SQL_MATCH = 440, SQL_REGEX = 441, SQL_NOTHING = 442, SQL_NULLS = 443, SQL_LAST = 444, SQL_FIRST = 445, SQL_DO = 446, SQL_COLLATE = 447, SQL_EQUALS = 448, SQL_NOTEQUALS = 449, SQL_LESS = 450, SQL_GREATER = 451, SQL_LESSEQ = 452, SQL_GREATEREQ = 453, SQL_NOTNULL = 454, SQL_UMINUS = 455 }; #endif /* Value type. */ #if !defined HSQL_STYPE && !defined HSQL_STYPE_IS_DECLARED #line 95 "bison_parser.y" /* yacc.c:352 */ union HSQL_STYPE { #line 95 "bison_parser.y" /* yacc.c:352 */ double fval; int64_t ival; char* sval; uintmax_t uval; bool bval; Program* program_t; StatementList* statement_list_t; Statement* statement_t; PreparableStatement* preparable_statement_t; OptionalHints* optional_hints_t; HintList* hint_list_t; Hint* hint_t; PrepareStatement* prepare_statement_t; PrepareTargetQuery* prepare_target_query_t; ExecuteStatement* execute_statement_t; ImportStatement* import_statement_t; ImportFileType* import_file_type_t; FilePath* file_path_t; TableRefCommaList* table_ref_commalist_t; ShowStatement* show_statement_t; CreateStatement* create_statement_t; OptNotExists* opt_not_exists_t; ColumnDefCommaList* column_def_comma_list_t; ColumnDef* column_def_t; ColumnType* column_type_t; // OptColumnNullable* opt_column_nullable_t; DropStatement* drop_statement_t; OptExists* opt_exists_t; DeleteStatement* delete_statement_t; InsertStatement* insert_statement_t; OptColumnList* opt_column_list_t; UpdateStatement* update_statement_t; UpdateClauseCommalist* update_clause_commalist_t; UpdateClause* update_clause_t; SelectStatement* select_statement_t; SelectWithParen* select_with_paren_t; SelectParenOrClause* select_paren_or_clause_t; SelectNoParen* select_no_paren_t; SetOperator* set_operator_t; SetType* set_type_t; OptAll* opt_all_t; IdentCommaList* ident_commalist_t; SelectClause* select_clause_t; OptDistinct* opt_distinct_t; SelectList* select_list_t; OptFromClause* opt_from_clause_t; FromClause* from_clause_t; OptWhere* opt_where_t; OptGroup* opt_group_t; OptHaving* opt_having_t; OptOrder* opt_order_t; OrderList* order_list_t; OrderDesc* order_desc_t; OptOrderType* opt_order_type_t; OptTop* opt_top_t; OptLimit* opt_limit_t; ExprList* expr_list_t; OptLiteralList* opt_literal_list_t; LiteralList* literal_list_t; ExprAlias* expr_alias_t; Expr* expr_t; Operand* operand_t; ScalarExpr* scalar_expr_t; UnaryExpr* unary_expr_t; BinaryExpr* binary_expr_t; LogicExpr* logic_expr_t; InExpr* in_expr_t; CompExpr* comp_expr_t; CaseExpr* case_expr_t; CaseClause* case_clause_t; CaseList* case_list_t; ExistsExpr* exists_expr_t; FunctionExpr* function_expr_t; ExtractExpr* extract_expr_t; DatetimeField* datetime_field_t; ArrayExpr* array_expr_t; ArrayIndex* array_index_t; BetweenExpr* between_expr_t; ColumnName* column_name_t; Literal* literal_t; StringLiteral* string_literal_t; BoolLiteral* bool_literal_t; NumLiteral* num_literal_t; IntLiteral* int_literal_t; NullLiteral* null_literal_t; ParamExpr* param_expr_t; TableRef* table_ref_t; TableRefAtomic* table_ref_atomic_t; NonjoinTableRefAtomic* nonjoin_table_ref_atomic_t; TableRefName* table_ref_name_t; TableRefNameNoAlias* table_ref_name_no_alias_t; TableName* table_name_t; TableAlias* table_alias_t; OptTableAlias* opt_table_alias_t; Alias* alias_t; OptAlias* opt_alias_t; OptWithClause* opt_with_clause_t; WithClause* with_clause_t; WithDescriptionList* with_description_list_t; WithDescription* with_description_t; JoinClause* join_clause_t; OptJoinType* opt_join_type_t; JoinCondition* join_condition_t; OptSemicolon* opt_semicolon_t; Identifier* identifier_t; Cmd* cmd_t; CmdAttach* cmd_attach_t; CmdDetach* cmd_detach_t; CmdReindex* cmd_reindex_t; CmdAnalyze* cmd_analyze_t; CmdPragma* cmd_pragma_t; PragmaKey* pragma_key_t; PragmaValue* pragma_value_t; PragmaName* pragma_name_t; SchemaName* schema_name_t; OptColumnArglist* opt_column_arglist_t; ColumnArglist* column_arglist_t; ColumnArg* column_arg_t; OptOnConflict* opt_on_conflict_t; ResolveType* resolve_type_t; OptAutoinc* opt_autoinc_t; OptUnique* opt_unique_t; IndexName* index_name_t; TriggerDeclare* trigger_declare_t; OptTmp* opt_tmp_t; TriggerName* trigger_name_t; OptTriggerTime* opt_trigger_time_t; TriggerEvent* trigger_event_t; OptOfColumnList* opt_of_column_list_t; OptForEach* opt_for_each_t; OptWhen* opt_when_t; TriggerCmdList* trigger_cmd_list_t; TriggerCmd* trigger_cmd_t; ModuleName* module_name_t; OptOverClause* opt_over_clause_t; OptFilterClause* opt_filter_clause_t; WindowClause* window_clause_t; WindowDefnList* window_defn_list_t; WindowDefn* window_defn_t; Window* window_t; OptBaseWindowName* opt_base_window_name_t; OptFrame* opt_frame_t; RangeOrRows* range_or_rows_t; FrameBoundS* frame_bound_s_t; FrameBoundE* frame_bound_e_t; FrameBound* frame_bound_t; OptFrameExclude* opt_frame_exclude_t; FrameExclude* frame_exclude_t; InsertType* insert_type_t; SuperList* super_list_t; JoinKw* join_kw_t; TablePrefix* table_prefix_t; JoinOp* join_op_t; OptIndex* opt_index_t; OptOn* opt_on_t; OptUsing* opt_using_t; CastExpr* cast_expr_t; AlterStatement* alter_statement_t; OptColumn* opt_column_t; CmdRelease* cmd_release_t; SavepointName* savepoint_name_t; VacuumStatement* vacuum_statement_t; OptSchemaName* opt_schema_name_t; RollbackStatement* rollback_statement_t; OptTransaction* opt_transaction_t; OptToSavepoint* opt_to_savepoint_t; BeginStatement* begin_statement_t; CommitStatement* commit_statement_t; UpsertClause* upsert_clause_t; IndexedColumnList* indexed_column_list_t; IndexedColumn* indexed_column_t; OptCollate* opt_collate_t; AssignList* assign_list_t; OptNull* opt_null_t; AssignClause* assign_clause_t; ColumnNameList* column_name_list_t; CollationName* collation_name_t; OptUpsertClause* opt_upsert_clause_t; std::vector* str_vec; std::vector* table_vec; std::vector* column_vec; std::vector* update_vec; std::vector* expr_vec; std::vector* order_vec; std::vector* with_description_vec; #line 577 "bison_parser.cpp" /* yacc.c:352 */ }; #line 95 "bison_parser.y" /* yacc.c:352 */ typedef union HSQL_STYPE HSQL_STYPE; #define HSQL_STYPE_IS_TRIVIAL 1 #define HSQL_STYPE_IS_DECLARED 1 #endif /* Location type. */ #if !defined HSQL_LTYPE && !defined HSQL_LTYPE_IS_DECLARED typedef struct HSQL_LTYPE HSQL_LTYPE; struct HSQL_LTYPE { int first_line; int first_column; int last_line; int last_column; }; #define HSQL_LTYPE_IS_DECLARED 1 #define HSQL_LTYPE_IS_TRIVIAL 1 #endif int hsql_parse(Program* result, yyscan_t scanner); #endif /* !YY_HSQL_BISON_PARSER_H_INCLUDED */ #ifdef short #undef short #endif #ifdef YYTYPE_UINT8 typedef YYTYPE_UINT8 yytype_uint8; #else typedef unsigned char yytype_uint8; #endif #ifdef YYTYPE_INT8 typedef YYTYPE_INT8 yytype_int8; #else typedef signed char yytype_int8; #endif #ifdef YYTYPE_UINT16 typedef YYTYPE_UINT16 yytype_uint16; #else typedef unsigned short yytype_uint16; #endif #ifdef YYTYPE_INT16 typedef YYTYPE_INT16 yytype_int16; #else typedef short yytype_int16; #endif #ifndef YYSIZE_T #ifdef __SIZE_TYPE__ #define YYSIZE_T __SIZE_TYPE__ #elif defined size_t #define YYSIZE_T size_t #elif !defined YYSIZE_T #include /* INFRINGES ON USER NAME SPACE */ #define YYSIZE_T size_t #else #define YYSIZE_T unsigned #endif #endif #define YYSIZE_MAXIMUM ((YYSIZE_T)-1) #ifndef YY_ #if defined YYENABLE_NLS && YYENABLE_NLS #if ENABLE_NLS #include /* INFRINGES ON USER NAME SPACE */ #define YY_(Msgid) dgettext("bison-runtime", Msgid) #endif #endif #ifndef YY_ #define YY_(Msgid) Msgid #endif #endif #ifndef YY_ATTRIBUTE #if (defined __GNUC__ && \ (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) || \ defined __SUNPRO_C && 0x5110 <= __SUNPRO_C #define YY_ATTRIBUTE(Spec) __attribute__(Spec) #else #define YY_ATTRIBUTE(Spec) /* empty */ #endif #endif #ifndef YY_ATTRIBUTE_PURE #define YY_ATTRIBUTE_PURE YY_ATTRIBUTE((__pure__)) #endif #ifndef YY_ATTRIBUTE_UNUSED #define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE((__unused__)) #endif /* Suppress unused-variable warnings by "using" E. */ #if !defined lint || defined __GNUC__ #define YYUSE(E) ((void)(E)) #else #define YYUSE(E) /* empty */ #endif #if defined __GNUC__ && !defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ /* Suppress an incorrect diagnostic about yylval being uninitialized. */ #define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ _Pragma("GCC diagnostic push") \ _Pragma("GCC diagnostic ignored \"-Wuninitialized\"") \ _Pragma("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") #define YY_IGNORE_MAYBE_UNINITIALIZED_END _Pragma("GCC diagnostic pop") #else #define YY_INITIAL_VALUE(Value) Value #endif #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN #define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN #define YY_IGNORE_MAYBE_UNINITIALIZED_END #endif #ifndef YY_INITIAL_VALUE #define YY_INITIAL_VALUE(Value) /* Nothing. */ #endif #if !defined yyoverflow || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ #ifdef YYSTACK_USE_ALLOCA #if YYSTACK_USE_ALLOCA #ifdef __GNUC__ #define YYSTACK_ALLOC __builtin_alloca #elif defined __BUILTIN_VA_ARG_INCR #include /* INFRINGES ON USER NAME SPACE */ #elif defined _AIX #define YYSTACK_ALLOC __alloca #elif defined _MSC_VER #include /* INFRINGES ON USER NAME SPACE */ #define alloca _alloca #else #define YYSTACK_ALLOC alloca #if !defined _ALLOCA_H && !defined EXIT_SUCCESS #include /* INFRINGES ON USER NAME SPACE */ /* Use EXIT_SUCCESS as a witness for stdlib.h. */ #ifndef EXIT_SUCCESS #define EXIT_SUCCESS 0 #endif #endif #endif #endif #endif #ifdef YYSTACK_ALLOC /* Pacify GCC's 'empty if-body' warning. */ #define YYSTACK_FREE(Ptr) \ do { /* empty */ \ ; \ } while (0) #ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely invoke alloca (N) if N exceeds 4096. Use a slightly smaller number to allow for a few compiler-allocated temporary stack slots. */ #define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ #endif #else #define YYSTACK_ALLOC YYMALLOC #define YYSTACK_FREE YYFREE #ifndef YYSTACK_ALLOC_MAXIMUM #define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM #endif #if (defined __cplusplus && !defined EXIT_SUCCESS && \ !((defined YYMALLOC || defined malloc) && \ (defined YYFREE || defined free))) #include /* INFRINGES ON USER NAME SPACE */ #ifndef EXIT_SUCCESS #define EXIT_SUCCESS 0 #endif #endif #ifndef YYMALLOC #define YYMALLOC malloc #if !defined malloc && !defined EXIT_SUCCESS void* malloc(YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ #endif #endif #ifndef YYFREE #define YYFREE free #if !defined free && !defined EXIT_SUCCESS void free(void*); /* INFRINGES ON USER NAME SPACE */ #endif #endif #endif #endif /* ! defined yyoverflow || YYERROR_VERBOSE */ #if (!defined yyoverflow && \ (!defined __cplusplus || \ (defined HSQL_LTYPE_IS_TRIVIAL && HSQL_LTYPE_IS_TRIVIAL && \ defined HSQL_STYPE_IS_TRIVIAL && HSQL_STYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc { yytype_int16 yyss_alloc; YYSTYPE yyvs_alloc; YYLTYPE yyls_alloc; }; /* The size of the maximum gap between one aligned stack and the next. */ #define YYSTACK_GAP_MAXIMUM (sizeof(union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ #define YYSTACK_BYTES(N) \ ((N) * (sizeof(yytype_int16) + sizeof(YYSTYPE) + sizeof(YYLTYPE)) + \ 2 * YYSTACK_GAP_MAXIMUM) #define YYCOPY_NEEDED 1 /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ #define YYSTACK_RELOCATE(Stack_alloc, Stack) \ do { \ YYSIZE_T yynewbytes; \ YYCOPY(&yyptr->Stack_alloc, Stack, yysize); \ Stack = &yyptr->Stack_alloc; \ yynewbytes = yystacksize * sizeof(*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof(*yyptr); \ } while (0) #endif #if defined YYCOPY_NEEDED && YYCOPY_NEEDED /* Copy COUNT objects from SRC to DST. The source and destination do not overlap. */ #ifndef YYCOPY #if defined __GNUC__ && 1 < __GNUC__ #define YYCOPY(Dst, Src, Count) \ __builtin_memcpy(Dst, Src, (Count) * sizeof(*(Src))) #else #define YYCOPY(Dst, Src, Count) \ do { \ YYSIZE_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) (Dst)[yyi] = (Src)[yyi]; \ } while (0) #endif #endif #endif /* !YYCOPY_NEEDED */ /* YYFINAL -- State number of the termination state. */ #define YYFINAL 149 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 1218 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 218 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 163 /* YYNRULES -- Number of rules. */ #define YYNRULES 416 /* YYNSTATES -- Number of states. */ #define YYNSTATES 776 #define YYUNDEFTOK 2 #define YYMAXUTOK 455 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM as returned by yylex, with out-of-bounds checking. */ #define YYTRANSLATE(YYX) \ ((unsigned)(YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM as returned by yylex. */ static const yytype_uint8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 207, 2, 2, 212, 213, 205, 203, 216, 204, 214, 206, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 215, 196, 193, 197, 217, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 210, 2, 211, 208, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 194, 195, 198, 199, 200, 201, 202, 209}; #if HSQL_DEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { 0, 573, 573, 582, 586, 593, 599, 605, 611, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 633, 638, 646, 654, 659, 665, 674, 675, 679, 680, 684, 690, 699, 704, 712, 713, 717, 718, 719, 720, 721, 722, 726, 732, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 751, 759, 764, 772, 777, 782, 790, 796, 804, 809, 816, 821, 826, 831, 839, 844, 853, 854, 857, 861, 867, 873, 885, 889, 896, 905, 910, 919, 924, 932, 936, 940, 947, 955, 959, 966, 978, 983, 988, 992, 996, 1002, 1016, 1024, 1033, 1039, 1053, 1062, 1066, 1080, 1084, 1090, 1105, 1111, 1119, 1129, 1134, 1148, 1156, 1164, 1172, 1187, 1201, 1209, 1218, 1227, 1228, 1232, 1236, 1250, 1251, 1255, 1259, 1260, 1261, 1262, 1266, 1267, 1268, 1272, 1273, 1277, 1278, 1282, 1283, 1287, 1288, 1292, 1293, 1294, 1295, 1299, 1304, 1305, 1309, 1313, 1320, 1331, 1332, 1336, 1340, 1347, 1348, 1349, 1356, 1357, 1358, 1359, 1364, 1365, 1369, 1370, 1371, 1372, 1373, 1377, 1378, 1383, 1384, 1385, 1386, 1387, 1388, 1392, 1395, 1396, 1406, 1414, 1422, 1428, 1436, 1445, 1446, 1455, 1465, 1480, 1495, 1513, 1516, 1523, 1524, 1525, 1529, 1530, 1540, 1549, 1553, 1559, 1573, 1579, 1585, 1599, 1600, 1604, 1605, 1609, 1616, 1628, 1636, 1637, 1638, 1642, 1643, 1647, 1658, 1672, 1676, 1677, 1681, 1685, 1693, 1703, 1704, 1708, 1715, 1723, 1727, 1728, 1729, 1733, 1734, 1738, 1739, 1743, 1744, 1745, 1749, 1750, 1754, 1755, 1756, 1757, 1762, 1763, 1767, 1774, 1775, 1779, 1784, 1785, 1789, 1795, 1799, 1800, 1803, 1804, 1808, 1809, 1813, 1817, 1818, 1819, 1824, 1829, 1836, 1837, 1838, 1839, 1840, 1841, 1848, 1852, 1858, 1863, 1869, 1873, 1880, 1888, 1889, 1890, 1891, 1892, 1893, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1910, 1918, 1919, 1923, 1929, 1935, 1941, 1947, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1973, 1974, 1978, 1979, 1980, 1981, 1987, 1988, 1989, 1990, 1994, 1995, 1999, 2000, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2014, 2022, 2035, 2036, 2042, 2046, 2047, 2052, 2061, 2062, 2063, 2064, 2065, 2066, 2070, 2074, 2078, 2082, 2083, 2084, 2085, 2089, 2090, 2091, 2092, 2093, 2097, 2101, 2102, 2106, 2107, 2111, 2115, 2119, 2131, 2142, 2153, 2162, 2174, 2180, 2186, 2187, 2188, 2189, 2195, 2207, 2208, 2209, 2213, 2214, 2218, 2219, 2224, 2231, 2232, 2243, 2248, 2249, 2257, 2258, 2262, 2266, 2270, 2277, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2315, 2316, 2321, 2322}; #endif #if HSQL_DEBUG || YYERROR_VERBOSE || 1 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char* const yytname[] = {"$end", "error", "$undefined", "STRING", "IDENTIFIER", "FLOATVAL", "INTVAL", "DEALLOCATE", "PARAMETERS", "INTERSECT", "TEMPORARY", "TIMESTAMP", "DISTINCT", "NVARCHAR", "RESTRICT", "TRUNCATE", "ANALYZE", "BETWEEN", "CASCADE", "COLUMNS", "CONTROL", "DEFAULT", "EXECUTE", "EXPLAIN", "INTEGER", "NATURAL", "PREPARE", "PRIMARY", "SCHEMAS", "SPATIAL", "VARCHAR", "VIRTUAL", "DESCRIBE", "BEFORE", "COLUMN", "CREATE", "DELETE", "DIRECT", "DOUBLE", "ESCAPE", "EXCEPT", "EXISTS", "EXTRACT", "GLOBAL", "HAVING", "IMPORT", "INSERT", "ISNULL", "OFFSET", "RENAME", "SCHEMA", "SELECT", "SORTED", "TABLES", "UNIQUE", "UNLOAD", "UPDATE", "VALUES", "AFTER", "ALTER", "CROSS", "DELTA", "FLOAT", "GROUP", "INDEX", "INNER", "LIMIT", "LOCAL", "MERGE", "MINUS", "ORDER", "OUTER", "RIGHT", "TABLE", "UNION", "USING", "WHERE", "CALL", "CASE", "CHAR", "DATE", "DESC", "DROP", "ELSE", "FILE", "FROM", "FULL", "HASH", "HINT", "INTO", "JOIN", "LEFT", "LIKE", "LOAD", "LONG", "NULL", "PLAN", "SHOW", "TEXT", "THEN", "TIME", "VIEW", "WHEN", "WITH", "ADD", "ALL", "AND", "ASC", "CSV", "END", "FOR", "INT", "KEY", "NOT", "OFF", "SET", "TBL", "TOP", "AS", "BY", "IF", "IN", "IS", "OF", "ON", "OR", "TO", "ARRAY", "CONCAT", "ILIKE", "SECOND", "MINUTE", "HOUR", "DAY", "MONTH", "YEAR", "TRUE", "FALSE", "PRAGMA", "REINDEX", "GENERATED", "ALWAYS", "CHECK", "CONFLICT", "IGNORE", "REPLACE", "ROLLBACK", "ABORT", "FAIL", "AUTOINCR", "BEGIN", "TRIGGER", "TEMP", "INSTEAD", "EACH", "ROW", "OVER", "FILTER", "PARTITION", "CURRENT", "EXCLUDE", "FOLLOWING", "GROUPS", "NO", "OTHERS", "PRECEDING", "RANGE", "ROWS", "TIES", "UNBOUNDED", "WINDOW", "ATTACH", "DETACH", "DATABASE", "INDEXED", "CAST", "SAVEPOINT", "RELEASE", "VACUUM", "TRANSACTION", "DEFFERED", "EXCLUSIVE", "IMEDIATE", "COMMIT", "GLOB", "MATCH", "REGEX", "NOTHING", "NULLS", "LAST", "FIRST", "DO", "COLLATE", "'='", "EQUALS", "NOTEQUALS", "'<'", "'>'", "LESS", "GREATER", "LESSEQ", "GREATEREQ", "NOTNULL", "'+'", "'-'", "'*'", "'/'", "'%'", "'^'", "UMINUS", "'['", "']'", "'('", "')'", "'.'", "';'", "','", "'?'", "$accept", "input", "statement_list", "statement", "cmd", "cmd_release", "savepoint_name", "cmd_pragma", "cmd_reindex", "cmd_analyze", "cmd_attach", "cmd_detach", "pragma_key", "pragma_value", "schema_name", "pragma_name", "preparable_statement", "rollback_statement", "opt_transaction", "opt_to_savepoint", "vacuum_statement", "opt_schema_name", "begin_statement", "commit_statement", "opt_upsert_clause", "upsert_clause", "indexed_column_list", "indexed_column", "opt_collate", "assign_list", "opt_null", "assign_clause", "column_name_list", "collation_name", "opt_hints", "hint_list", "hint", "prepare_statement", "prepare_target_query", "execute_statement", "import_statement", "import_file_type", "file_path", "show_statement", "alter_statement", "opt_column", "create_statement", "opt_unique", "index_name", "trigger_declare", "opt_tmp", "trigger_name", "opt_trigger_time", "trigger_event", "opt_of_column_list", "opt_for_each", "opt_when", "trigger_cmd_list", "trigger_cmd", "module_name", "opt_not_exists", "column_def_commalist", "column_def", "opt_column_arglist", "column_arglist", "column_arg", "opt_on_conflict", "resolve_type", "opt_autoinc", "column_type", "drop_statement", "opt_exists", "delete_statement", "truncate_statement", "insert_statement", "super_list", "insert_type", "opt_column_list", "update_statement", "update_clause_commalist", "update_clause", "select_statement", "select_with_paren", "select_paren_or_clause", "select_no_paren", "set_operator", "set_type", "opt_all", "select_clause", "window_clause", "windowdefn_list", "windowdefn", "window", "opt_base_window_name", "opt_frame", "range_or_rows", "frame_bound_s", "frame_bound_e", "frame_bound", "opt_frame_exclude", "frame_exclude", "opt_distinct", "select_list", "opt_from_clause", "from_clause", "opt_where", "opt_group", "opt_having", "opt_order", "order_list", "order_desc", "opt_order_type", "opt_top", "opt_limit", "expr_list", "opt_literal_list", "literal_list", "expr_alias", "expr", "operand", "cast_expr", "scalar_expr", "unary_expr", "binary_expr", "logic_expr", "in_expr", "case_expr", "case_list", "exists_expr", "comp_expr", "function_expr", "opt_over_clause", "opt_filter_clause", "extract_expr", "datetime_field", "array_expr", "array_index", "between_expr", "column_name", "literal", "string_literal", "bool_literal", "num_literal", "int_literal", "null_literal", "param_expr", "table_ref", "table_prefix", "join_op", "opt_index", "opt_on", "opt_using", "table_ref_name_no_alias", "table_name", "alias", "opt_alias", "opt_with_clause", "with_clause", "with_description_list", "with_description", "join_kw", "opt_semicolon", "ident_commalist", YY_NULLPTR}; #endif #ifdef YYPRINT /* YYTOKNUM[NUM] -- (External) token number corresponding to the (internal) symbol number NUM (which must be that of a token). */ static const yytype_uint16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 61, 448, 449, 60, 62, 450, 451, 452, 453, 454, 43, 45, 42, 47, 37, 94, 455, 91, 93, 40, 41, 46, 59, 44, 63}; #endif #define YYPACT_NINF -542 #define yypact_value_is_default(Yystate) (!!((Yystate) == (-542))) #define YYTABLE_NINF -414 #define yytable_value_is_error(Yytable_value) (!!((Yytable_value) == (-414))) /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ static const yytype_int16 yypact[] = { 907, 36, 83, 83, 95, 118, 83, 230, -13, 79, 128, 83, 208, 190, 67, 294, 111, 305, 83, -542, 111, 369, 522, 45, 37, 349, 111, 355, 158, -542, -542, -542, -542, -542, -542, -542, -542, 283, -542, -542, -542, -542, 283, -542, -542, -542, -542, -542, -542, -542, -542, -542, 321, -542, -542, 9, -542, 397, 182, -542, -542, 205, 339, -542, 373, -542, 334, 334, -542, 395, 324, 313, 83, 370, 392, 367, -542, 83, 372, 372, 372, 83, -542, 381, 319, -542, -542, -542, 289, -64, 327, -542, -542, 362, 111, 111, 111, -542, -542, 226, -542, -542, 331, 343, 541, -542, 22, 350, -542, -542, 669, 357, 374, -542, 567, -542, 342, 703, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, 349, -542, -542, 549, -542, -542, 478, -542, -542, 823, -542, 488, -542, -542, 83, 463, 9, 68, -542, 219, -542, 581, 15, 584, 334, 476, 83, 83, 334, 204, 334, 519, -542, 513, -542, -542, -542, -542, -542, -542, 597, 42, 572, 83, 83, 610, -542, 403, 294, 265, 265, 612, 39, -542, -542, -542, -542, 17, 26, 569, 399, 669, 312, 225, 409, 374, 938, 669, 388, 669, 154, 410, -68, 669, 349, 669, 374, -542, 374, -7, 412, 20, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 616, -542, -542, 622, -542, 414, 419, 616, 620, 424, 426, -542, -542, -542, 9, 535, 525, 9, 274, -542, 434, 432, -542, -542, -542, 83, 609, -38, 419, 647, 202, 437, -542, -542, -542, -542, 649, 669, -542, 622, 462, -45, -542, 55, 623, -542, -542, -542, 289, 442, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, 448, -542, -542, 549, -542, -542, 506, 669, -542, -542, 456, -542, -542, -542, -542, -542, -542, 585, -9, 286, 669, 669, -542, 569, 579, 155, -542, 391, 349, 396, -542, -542, -542, -542, 570, 911, 971, 374, 467, 567, -542, 586, 472, 971, 971, 971, 971, 971, 971, 971, 1008, 1008, 1008, 1008, 154, 154, 27, 27, 27, -67, 473, -542, -542, 679, 681, 237, -542, 669, -542, -542, -542, 617, -542, -542, -542, 669, 617, 669, 624, -542, -542, 15, 611, -542, 573, 588, 688, 575, -542, 574, -542, 481, -542, -542, 23, 141, 618, 669, 597, -542, -542, 83, 28, 688, 649, -542, -542, 487, 544, 270, -542, 669, 669, 669, -542, 314, 320, 492, -542, 669, 697, -542, -542, -542, 406, 374, 971, 567, 493, 292, -542, -542, 496, 302, -542, -542, 306, 500, 589, 629, 499, 274, 501, -542, 287, 274, 141, 670, 278, -542, 717, 638, -542, 406, 307, -542, 588, 83, -542, -542, -542, 600, 417, 83, 141, -542, -542, 511, 602, -542, -542, 654, 11, -542, 506, -52, 141, 366, -542, 669, -542, -542, -542, -542, 520, -542, -542, 521, -542, -542, -542, 518, 938, 523, 341, -542, -542, 15, -542, 679, -542, 731, 15, -30, 595, -542, -542, -542, 519, -542, -542, 669, -542, -542, 552, -542, 669, 669, -542, 529, 622, 309, -542, 688, -542, 531, -542, -542, -542, 621, 625, -542, 28, 669, -542, 744, 544, -542, -542, 141, 746, 748, -542, -542, -542, 345, -542, -542, 346, 543, -542, 94, 41, 13, 693, -542, 156, -542, 141, 141, 688, -542, 645, 635, 635, 667, 551, 626, 553, -542, 309, -542, -542, 681, 681, -542, 83, -542, -51, -542, 555, 114, -542, 556, 557, -542, -542, 15, -20, 669, -542, -542, -542, -542, 695, 702, -542, 704, -542, -542, 44, 569, -73, 655, 606, -542, -542, 361, 14, 634, -542, -542, 635, 669, 660, 669, -542, 368, 564, 671, -542, -542, 664, 163, -542, -542, 377, 672, -542, 383, -542, 1, -542, -542, -542, 47, -542, 576, 33, 669, -44, 669, 781, -542, -542, 635, 392, -542, -23, 578, 32, 519, 632, 686, 669, -542, -542, -542, -542, 238, -542, 28, 519, 669, 787, 14, 707, -542, 674, 674, 389, 619, 675, 676, 0, 680, 587, -542, 652, -542, -542, 669, -542, -542, 653, 669, -542, -47, 272, 656, 637, 644, -542, 296, -41, -542, 103, -542, 627, -542, -542, -542, -542, -542, 676, 676, 674, -542, 28, 669, 732, 669, -542, 598, 781, -542, -542, 38, -542, 141, 163, 706, -542, -542, 124, -542, -542, -542, 28, -542, 669, 28, -14, 732, 732, 676, -542, 141, 601, -542, 141, 744, -542, -542, -542, 429, -542, 659, 651, -542, -542, -542, 141, -542, 694, -542, -542, -542, 732, 681, 604, 658, 644, -542, -542, -542, 28, -542, 390, -542, -542, -542, -41, -542, -542}; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. Performed when YYTABLE does not specify something else to do. Zero means the default is an error. */ static const yytype_uint16 yydefact[] = { 398, 0, 0, 27, 0, 0, 0, 119, 0, 0, 192, 0, 0, 0, 0, 0, 55, 0, 25, 193, 55, 55, 0, 0, 0, 62, 55, 0, 414, 3, 8, 14, 9, 10, 11, 12, 13, 90, 15, 16, 17, 18, 90, 51, 44, 7, 52, 45, 50, 47, 48, 46, 0, 49, 43, 0, 397, 0, 392, 187, 28, 97, 0, 104, 0, 118, 146, 146, 122, 0, 0, 0, 0, 0, 0, 0, 391, 0, 185, 185, 185, 0, 102, 0, 399, 400, 54, 68, 42, 22, 0, 33, 26, 58, 55, 55, 55, 63, 365, 356, 368, 370, 0, 0, 0, 371, 0, 0, 366, 367, 0, 0, 0, 358, 0, 372, 0, 280, 285, 288, 289, 290, 282, 284, 291, 283, 304, 292, 293, 294, 287, 281, 297, 298, 360, 361, 362, 369, 363, 364, 41, 0, 31, 21, 0, 20, 61, 60, 67, 1, 398, 2, 0, 6, 5, 0, 266, 0, 201, 202, 258, 181, 0, 276, 0, 146, 0, 0, 0, 146, 398, 146, 252, 100, 0, 163, 164, 165, 166, 167, 194, 0, 0, 0, 0, 0, 0, 103, 0, 0, 0, 0, 0, 0, 53, 64, 66, 65, 246, 0, 0, 0, 0, 0, 0, 0, 0, 300, 0, 0, 0, 299, 0, 0, 0, 0, 0, 0, 301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 19, 0, 4, 0, 196, 0, 246, 0, 0, 212, 213, 211, 0, 215, 0, 0, 272, 393, 0, 275, 277, 96, 95, 0, 0, 0, 196, 0, 398, 0, 143, 142, 141, 140, 0, 0, 186, 0, 0, 252, 198, 109, 109, 184, 179, 180, 124, 0, 183, 402, 401, 37, 40, 39, 38, 23, 36, 35, 0, 42, 34, 0, 56, 245, 345, 0, 357, 359, 0, 347, 348, 349, 350, 351, 352, 0, 0, 0, 0, 0, 326, 0, 0, 0, 273, 396, 0, 0, 295, 286, 318, 29, 319, 0, 311, 0, 0, 0, 302, 0, 314, 313, 315, 316, 317, 332, 333, 334, 335, 336, 337, 338, 306, 305, 308, 307, 309, 310, 0, 59, 101, 0, 0, 0, 265, 0, 205, 204, 206, 258, 207, 214, 210, 0, 258, 0, 0, 208, 98, 0, 0, 145, 0, 398, 0, 0, 120, 0, 117, 0, 138, 124, 128, 251, 0, 0, 0, 197, 108, 0, 0, 0, 0, 24, 57, 0, 343, 0, 330, 0, 0, 0, 324, 0, 0, 0, 353, 0, 0, 395, 279, 30, 178, 0, 312, 0, 0, 0, 303, 354, 93, 0, 91, 415, 0, 0, 70, 249, 247, 272, 257, 259, 264, 272, 268, 270, 267, 278, 0, 0, 112, 178, 0, 147, 398, 0, 139, 125, 126, 0, 0, 0, 200, 199, 105, 356, 0, 107, 182, 0, 0, 339, 345, 0, 328, 0, 327, 0, 331, 274, 394, 171, 0, 174, 173, 0, 172, 177, 170, 0, 355, 0, 0, 322, 320, 0, 89, 0, 195, 0, 0, 70, 0, 189, 69, 378, 252, 248, 203, 0, 263, 262, 84, 209, 0, 0, 144, 115, 0, 151, 111, 0, 113, 0, 127, 129, 130, 133, 0, 99, 0, 0, 342, 225, 343, 346, 325, 329, 0, 0, 296, 323, 321, 0, 92, 416, 0, 0, 188, 0, 250, 0, 254, 260, 0, 261, 271, 269, 0, 110, 0, 162, 162, 0, 0, 0, 0, 149, 150, 153, 148, 0, 0, 131, 0, 106, 0, 224, 0, 258, 340, 0, 0, 94, 190, 0, 0, 0, 412, 411, 403, 409, 407, 410, 380, 405, 379, 377, 0, 378, 396, 0, 216, 83, 82, 0, 264, 0, 157, 154, 162, 0, 0, 0, 152, 0, 132, 135, 344, 341, 0, 228, 175, 176, 0, 0, 71, 0, 75, 79, 406, 408, 404, 0, 381, 0, 0, 0, 386, 0, 0, 217, 116, 162, 0, 155, 0, 0, 0, 252, 0, 137, 0, 231, 229, 230, 223, 0, 191, 0, 252, 0, 0, 264, 0, 382, 396, 396, 0, 0, 0, 388, 256, 0, 218, 219, 169, 161, 159, 0, 160, 114, 0, 0, 121, 258, 0, 0, 0, 240, 232, 0, 252, 80, 0, 86, 0, 76, 88, 78, 77, 383, 388, 388, 396, 385, 0, 0, 390, 0, 253, 0, 0, 168, 156, 0, 134, 136, 228, 0, 238, 233, 0, 226, 237, 236, 0, 72, 0, 0, 0, 390, 390, 388, 384, 387, 0, 373, 255, 225, 220, 158, 222, 0, 243, 0, 0, 244, 239, 81, 85, 87, 0, 73, 375, 376, 390, 0, 0, 0, 240, 234, 242, 241, 0, 374, 0, 221, 235, 227, 252, 389, 74}; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { -542, -542, -542, 677, -542, -542, -125, -542, -542, -542, -542, -542, -542, 630, -1, 628, -542, -542, 385, -542, -542, -542, -542, -542, 318, -542, -542, 162, -542, 66, -542, 105, -542, -542, 793, -542, 337, -542, -542, -542, -542, -542, -269, -542, -542, 558, -542, -542, -542, -542, -542, -237, -542, -542, -542, -542, -542, -542, 571, -542, -15, 279, -354, -542, -542, 275, -298, 200, -542, 394, -542, 386, -124, -542, -111, -542, -542, 582, -94, -542, 451, -162, -16, 594, -104, 696, -542, -542, 352, -542, -542, 138, 112, -542, 136, -542, 171, -542, 115, 99, -542, 614, -542, -542, -542, -280, -542, -542, -365, -542, 353, -538, -542, -17, -303, -542, -201, 444, -22, -28, -542, -542, -542, -542, -542, -542, -542, 663, -542, -542, -542, 330, 400, -542, -542, -542, -542, -542, -397, -160, -177, -542, 421, -130, -542, -542, 268, -542, -542, -542, -432, -417, -542, -2, -542, -349, -542, -542, -542, 682, -542, -542, -541}; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { -1, 27, 28, 29, 30, 31, 145, 32, 33, 34, 35, 36, 89, 298, 90, 91, 37, 38, 87, 194, 39, 147, 40, 41, 506, 507, 630, 631, 666, 695, 558, 696, 697, 702, 153, 434, 435, 42, 265, 43, 44, 174, 362, 45, 46, 403, 47, 69, 390, 70, 71, 291, 463, 531, 576, 654, 687, 271, 272, 520, 167, 455, 456, 570, 571, 572, 611, 180, 717, 492, 48, 184, 49, 50, 51, 504, 52, 366, 53, 282, 283, 54, 371, 372, 159, 255, 256, 375, 160, 644, 677, 678, 581, 582, 659, 660, 692, 763, 693, 726, 751, 308, 440, 509, 510, 279, 605, 713, 259, 443, 444, 515, 249, 380, 326, 261, 262, 327, 328, 117, 118, 119, 120, 121, 122, 123, 124, 204, 125, 126, 127, 474, 409, 128, 318, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 553, 554, 600, 674, 711, 740, 75, 59, 422, 423, 55, 56, 84, 85, 601, 151, 437}; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule whose number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { 116, 60, 400, 263, 63, 410, 469, 442, 276, 76, 212, 397, 446, 299, 299, 535, 92, 58, 98, 243, 100, 101, 142, 257, 146, 98, 99, 100, 101, 306, 309, 278, 468, 618, 619, 278, 628, 430, 214, 158, 395, 143, 755, 143, 712, 421, 273, 385, 636, 140, 470, 667, 168, 251, 214, 214, 460, 216, 591, 274, 156, 223, 57, 205, 103, 441, 591, 363, 305, 672, 172, 646, 72, 216, 216, 182, 275, 252, 207, 187, 386, 461, 203, 214, 211, 338, 81, 58, 209, 401, 413, 284, 213, 592, 505, 513, 311, 214, 593, 61, 104, 592, 216, 363, 594, 595, 593, 214, 253, 276, 105, 361, 594, 595, 339, 341, 216, 105, 367, 596, 82, 514, 62, 597, 598, 495, 216, 596, 703, 190, 673, 597, 598, 342, 637, 206, 578, 668, 214, 640, 242, 250, 254, 241, 214, 332, 285, 273, 191, 107, 266, 108, 109, 247, 270, 223, 277, 216, 108, 109, 274, 538, 621, 216, 73, 268, 269, 629, 471, 420, 573, 399, 292, 756, 387, 729, 462, 275, 207, 407, 319, 402, 287, 288, 257, 290, 550, 747, 330, 336, 681, 337, 333, 665, 335, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 144, 334, 304, 420, 624, 141, 769, 418, 157, 450, 536, 453, 602, 112, 113, 252, 555, 307, 310, 115, 113, 114, 240, 429, 241, 8, 115, 8, 98, 99, 100, 101, 683, 670, 214, 10, 599, 10, 744, 562, 74, 641, 689, 396, 599, 11, 253, 11, 64, 439, 78, 383, 698, 216, 612, 98, 294, 100, 101, 623, 734, 735, 98, 99, 100, 101, 102, 103, 77, 223, 748, 65, 589, 295, 749, 156, 257, 86, 79, 750, 254, 438, 525, 731, 546, 83, 416, 417, 296, 549, 66, 759, 15, 590, 15, 321, 88, 427, 391, 737, 102, 103, 648, 104, 757, 758, 732, 705, 706, 378, 721, 494, 656, 518, 322, 424, 657, 658, 67, 698, 105, 323, 754, 563, 671, 263, 675, 379, 80, 768, 263, 363, 606, 607, 19, 679, 19, 104, 106, 688, 140, 445, 149, 447, 449, 736, 237, 238, 239, 240, 564, 241, 107, 419, 105, 513, 414, 698, 420, 684, 150, 108, 109, 465, 98, 99, 100, 101, -123, 68, 699, 214, 106, 152, 627, 322, 297, 476, 477, 478, 214, 514, 415, 162, 690, 493, 107, 467, 161, 214, 216, 565, 93, 97, 691, 108, 109, 155, 148, 216, 111, 202, 730, 103, 163, 214, 480, 214, 216, 566, 479, 164, 511, 214, 567, 263, 516, 484, 690, 98, 99, 100, 101, 485, 216, 198, 216, 199, 691, 112, 113, 486, 216, 165, 111, 214, 568, 114, 569, 104, 528, 166, 115, 526, 727, 540, 169, 215, 728, 532, 529, 171, 185, 186, 216, 487, 105, 102, 103, 214, 530, 170, 539, 112, 113, 173, 195, 196, 197, 181, 475, 114, 488, 420, 206, 193, 115, 445, 216, 183, 775, 214, 559, 560, 214, 638, 188, 489, 107, 214, -41, 490, 497, 329, 104, 420, 421, 108, 109, 579, 216, 425, 499, 216, 491, 500, 501, 523, 216, 502, 524, 105, 98, 99, 100, 101, 312, 313, 314, 315, 316, 317, 189, 175, 176, 177, 178, 179, 192, 106, 200, 98, 99, 100, 101, 86, 94, 95, 96, 603, 143, 545, 201, 107, 420, 586, 587, 208, 382, 382, 102, 103, 108, 109, 244, 632, 210, 98, 99, 100, 101, 645, 620, 246, 524, 112, 113, 248, 652, 102, 103, 502, 260, 114, 264, 690, 267, 661, 115, 649, 382, 651, 278, 663, 280, 762, 664, 104, 281, 707, 774, 111, 420, 502, 373, 102, 103, 373, 300, 300, 286, 289, 157, 302, 105, 156, 104, 156, 324, 101, 331, 340, 98, 364, 98, 99, 100, 101, 365, 306, 112, 113, 106, 105, 369, 694, 370, 374, 114, 632, 202, 376, 104, 115, 381, 382, 107, 384, 389, 393, 394, 106, 398, 405, 401, 108, 109, 718, 406, 105, 408, 720, 102, 103, 694, 107, 411, 412, 338, 98, 99, 100, 101, 214, 108, 109, 428, 106, 431, 241, 433, 432, 436, 451, 257, 738, 452, 741, 15, 454, 457, 107, 110, 459, 111, 458, 472, 473, 483, 104, 108, 109, 481, 496, 464, 498, 753, 102, 103, 503, 505, 508, 420, 111, 512, 517, 105, 217, 519, 521, 527, 694, 199, 112, 113, 533, 448, 534, 543, 541, 542, 114, 548, 544, 106, 552, 115, 557, 561, 111, 574, 575, 112, 113, 104, 580, 577, 218, 107, 584, 114, 585, 588, 604, 609, 115, 610, 108, 109, 613, 614, 105, 616, 633, 615, 622, 625, 626, 112, 113, 634, 642, 635, 643, 647, 650, 114, 502, 653, 106, 655, 115, 676, 685, 662, 686, 669, 682, 701, 421, 708, 709, 219, 107, 704, 714, 111, 710, 716, 724, 715, 725, 108, 109, 739, 719, 767, 742, 723, 746, 760, 765, 766, 220, 770, 733, 771, 303, 301, 551, -413, 221, 222, 700, 245, 112, 113, 1, 223, 224, 773, 752, 154, 114, 547, 2, 3, 608, 115, 392, 404, 111, 4, 617, 680, 522, 5, 466, 388, 377, 743, 761, 6, 258, 745, 7, 8, 722, 764, 772, 368, 482, 556, 320, 583, 9, 10, 639, 293, 0, 112, 113, 537, 0, 0, 0, 11, 0, 114, 12, 0, 0, 0, 115, 225, 226, 227, 0, 0, 0, 0, 0, 0, 228, 229, 230, 231, 232, 0, 0, 233, 234, 13, 235, 236, 237, 238, 239, 240, 0, 241, 1, 0, 0, 0, 0, 0, 14, 0, 2, 3, 0, 0, 15, 0, 0, 4, 0, 0, 16, 5, 0, 0, 0, 0, 0, 6, 0, 0, 7, 8, 0, 0, 0, 0, 0, 0, 0, 0, 9, 10, 0, 0, 0, 0, 218, 0, 0, 17, 18, 11, 0, 0, 12, 0, 19, 20, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 0, 0, 0, 13, 0, 0, 0, 0, 22, 23, 0, 0, 0, 0, 24, 25, 0, 219, 14, 0, 26, 0, 0, 0, 15, 0, 0, 0, 0, 0, 16, 426, 218, 0, 0, 0, 0, 0, 325, 0, 0, 0, 0, 0, 219, 0, 0, 222, 0, 0, 0, 0, 0, 223, 224, 0, 0, 0, 0, 17, 18, 0, 0, 0, 0, 325, 19, 20, 0, 218, 0, 21, 0, 0, 222, 0, 0, -414, 0, 0, 223, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 23, 0, 0, 0, 0, 24, 25, 0, 0, 0, 0, 26, 0, 0, 222, 0, 225, 226, 227, 0, 223, -414, 0, 0, 0, 228, 229, 230, 231, 232, 0, 0, 233, 234, 0, 235, 236, 237, 238, 239, 240, 0, 241, 225, 226, 227, 0, 0, 0, 0, 0, 222, 228, 229, 230, 231, 232, 223, 0, 233, 234, 0, 235, 236, 237, 238, 239, 240, 0, 241, 0, 0, 0, 0, 0, 0, -414, -414, -414, 0, 0, 0, 0, 0, 0, -414, -414, -414, 231, 232, 0, 0, 233, 234, 0, 235, 236, 237, 238, 239, 240, 0, 241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -414, -414, 0, 0, -414, -414, 0, 235, 236, 237, 238, 239, 240, 0, 241}; static const yytype_int16 yycheck[] = { 22, 3, 282, 163, 6, 308, 403, 372, 170, 11, 114, 280, 377, 190, 191, 4, 18, 4, 3, 144, 5, 6, 23, 70, 25, 3, 4, 5, 6, 12, 4, 76, 4, 574, 575, 76, 56, 340, 106, 55, 277, 4, 56, 4, 44, 118, 170, 85, 4, 4, 404, 4, 67, 157, 106, 106, 33, 125, 25, 170, 51, 128, 26, 41, 42, 368, 25, 244, 193, 113, 72, 609, 85, 125, 125, 77, 170, 9, 106, 81, 118, 58, 104, 106, 112, 92, 19, 4, 110, 34, 99, 49, 114, 60, 124, 81, 200, 106, 65, 4, 78, 60, 125, 280, 71, 72, 65, 106, 40, 271, 95, 241, 71, 72, 121, 95, 125, 95, 248, 86, 53, 107, 4, 90, 91, 428, 125, 86, 666, 193, 174, 90, 91, 113, 90, 113, 533, 90, 106, 212, 141, 157, 74, 210, 106, 213, 104, 271, 212, 127, 165, 136, 137, 155, 169, 128, 171, 125, 136, 137, 271, 213, 213, 125, 85, 167, 168, 187, 405, 216, 524, 216, 188, 187, 212, 216, 153, 271, 206, 304, 202, 126, 184, 185, 70, 186, 216, 63, 210, 217, 213, 219, 214, 192, 216, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 176, 215, 176, 216, 582, 173, 760, 324, 212, 382, 212, 386, 212, 204, 205, 9, 509, 213, 205, 217, 205, 212, 208, 340, 210, 36, 217, 36, 3, 4, 5, 6, 213, 213, 106, 46, 216, 46, 213, 521, 125, 603, 17, 278, 216, 56, 40, 56, 31, 366, 73, 266, 662, 125, 565, 3, 4, 5, 6, 158, 705, 706, 3, 4, 5, 6, 41, 42, 73, 128, 159, 54, 191, 21, 163, 51, 70, 179, 101, 168, 74, 57, 457, 193, 498, 4, 321, 322, 36, 503, 73, 736, 103, 212, 103, 83, 4, 338, 109, 709, 41, 42, 613, 78, 734, 735, 216, 669, 670, 48, 688, 428, 162, 48, 102, 329, 166, 167, 101, 729, 95, 109, 732, 27, 640, 498, 642, 66, 151, 759, 503, 521, 189, 190, 145, 646, 145, 78, 113, 655, 4, 376, 0, 378, 379, 707, 205, 206, 207, 208, 54, 210, 127, 211, 95, 81, 83, 767, 216, 652, 215, 136, 137, 398, 3, 4, 5, 6, 151, 152, 663, 106, 113, 103, 588, 102, 124, 412, 413, 414, 106, 107, 109, 214, 159, 426, 127, 402, 4, 106, 125, 95, 20, 21, 169, 136, 137, 89, 26, 125, 175, 102, 695, 42, 212, 106, 99, 106, 125, 113, 109, 85, 442, 106, 118, 588, 446, 24, 159, 3, 4, 5, 6, 30, 125, 212, 125, 214, 169, 204, 205, 38, 125, 73, 175, 106, 140, 212, 142, 78, 36, 120, 217, 458, 161, 480, 64, 118, 165, 464, 46, 151, 79, 80, 125, 62, 95, 41, 42, 106, 56, 150, 109, 204, 205, 108, 94, 95, 96, 115, 213, 212, 79, 216, 113, 126, 217, 512, 125, 120, 773, 106, 517, 518, 106, 602, 118, 94, 127, 106, 214, 98, 213, 118, 78, 216, 118, 136, 137, 534, 125, 118, 213, 125, 111, 216, 213, 213, 125, 216, 216, 95, 3, 4, 5, 6, 130, 131, 132, 133, 134, 135, 216, 144, 145, 146, 147, 148, 214, 113, 212, 3, 4, 5, 6, 179, 180, 181, 182, 554, 4, 213, 212, 127, 216, 213, 213, 210, 216, 216, 41, 42, 136, 137, 89, 590, 212, 3, 4, 5, 6, 213, 577, 88, 216, 204, 205, 117, 213, 41, 42, 216, 4, 212, 3, 159, 113, 213, 217, 614, 216, 616, 76, 213, 84, 169, 216, 78, 4, 213, 213, 175, 216, 216, 255, 41, 42, 258, 190, 191, 41, 4, 212, 4, 95, 51, 78, 51, 212, 6, 213, 212, 3, 212, 3, 4, 5, 6, 212, 12, 204, 205, 113, 95, 213, 660, 213, 105, 212, 664, 102, 119, 78, 217, 213, 216, 127, 41, 4, 215, 4, 113, 193, 214, 34, 136, 137, 682, 213, 95, 157, 686, 41, 42, 689, 127, 213, 85, 92, 3, 4, 5, 6, 106, 136, 137, 212, 113, 95, 210, 4, 211, 4, 75, 70, 710, 116, 712, 103, 4, 118, 127, 173, 215, 175, 124, 212, 156, 4, 78, 136, 137, 213, 213, 89, 212, 731, 41, 42, 212, 124, 85, 216, 175, 216, 48, 95, 17, 4, 84, 123, 746, 214, 204, 205, 126, 105, 76, 213, 212, 212, 212, 4, 213, 113, 143, 217, 188, 212, 175, 212, 123, 204, 205, 78, 4, 124, 47, 127, 6, 212, 6, 212, 63, 112, 217, 124, 136, 137, 95, 212, 95, 212, 71, 141, 213, 213, 213, 204, 205, 71, 119, 71, 170, 143, 118, 212, 216, 110, 113, 119, 217, 4, 154, 115, 102, 213, 212, 4, 118, 174, 119, 92, 127, 90, 118, 175, 124, 149, 165, 216, 160, 136, 137, 75, 155, 115, 212, 155, 106, 212, 155, 164, 113, 213, 191, 161, 192, 191, 504, 0, 121, 122, 664, 150, 204, 205, 7, 128, 129, 767, 729, 42, 212, 500, 15, 16, 561, 217, 271, 285, 175, 22, 571, 647, 454, 26, 399, 269, 258, 715, 742, 32, 160, 721, 35, 36, 689, 746, 763, 249, 420, 512, 203, 537, 45, 46, 602, 189, -1, 204, 205, 475, -1, -1, -1, 56, -1, 212, 59, -1, -1, -1, 217, 184, 185, 186, -1, -1, -1, -1, -1, -1, 193, 194, 195, 196, 197, -1, -1, 200, 201, 82, 203, 204, 205, 206, 207, 208, -1, 210, 7, -1, -1, -1, -1, -1, 97, -1, 15, 16, -1, -1, 103, -1, -1, 22, -1, -1, 109, 26, -1, -1, -1, -1, -1, 32, -1, -1, 35, 36, -1, -1, -1, -1, -1, -1, -1, -1, 45, 46, -1, -1, -1, -1, 47, -1, -1, 138, 139, 56, -1, -1, 59, -1, 145, 146, -1, -1, -1, 150, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 47, -1, -1, -1, 82, -1, -1, -1, -1, 171, 172, -1, -1, -1, -1, 177, 178, -1, 92, 97, -1, 183, -1, -1, -1, 103, -1, -1, -1, -1, -1, 109, 106, 47, -1, -1, -1, -1, -1, 113, -1, -1, -1, -1, -1, 92, -1, -1, 122, -1, -1, -1, -1, -1, 128, 129, -1, -1, -1, -1, 138, 139, -1, -1, -1, -1, 113, 145, 146, -1, 47, -1, 150, -1, -1, 122, -1, -1, 92, -1, -1, 128, 129, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 171, 172, -1, -1, -1, -1, 177, 178, -1, -1, -1, -1, 183, -1, -1, 122, -1, 184, 185, 186, -1, 128, 129, -1, -1, -1, 193, 194, 195, 196, 197, -1, -1, 200, 201, -1, 203, 204, 205, 206, 207, 208, -1, 210, 184, 185, 186, -1, -1, -1, -1, -1, 122, 193, 194, 195, 196, 197, 128, -1, 200, 201, -1, 203, 204, 205, 206, 207, 208, -1, 210, -1, -1, -1, -1, -1, -1, 184, 185, 186, -1, -1, -1, -1, -1, -1, 193, 194, 195, 196, 197, -1, -1, 200, 201, -1, 203, 204, 205, 206, 207, 208, -1, 210, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 196, 197, -1, -1, 200, 201, -1, 203, 204, 205, 206, 207, 208, -1, 210}; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint16 yystos[] = { 0, 7, 15, 16, 22, 26, 32, 35, 36, 45, 46, 56, 59, 82, 97, 103, 109, 138, 139, 145, 146, 150, 171, 172, 177, 178, 183, 219, 220, 221, 222, 223, 225, 226, 227, 228, 229, 234, 235, 238, 240, 241, 255, 257, 258, 261, 262, 264, 288, 290, 291, 292, 294, 296, 299, 374, 375, 26, 4, 371, 371, 4, 4, 371, 31, 54, 73, 101, 152, 265, 267, 268, 85, 85, 125, 370, 371, 73, 73, 101, 151, 19, 53, 4, 376, 377, 179, 236, 4, 230, 232, 233, 371, 236, 180, 181, 182, 236, 3, 4, 5, 6, 41, 42, 78, 95, 113, 127, 136, 137, 173, 175, 204, 205, 212, 217, 336, 337, 338, 339, 340, 341, 342, 343, 344, 346, 347, 348, 351, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 4, 173, 232, 4, 176, 224, 232, 239, 236, 0, 215, 379, 103, 252, 252, 89, 51, 212, 300, 302, 306, 4, 214, 212, 85, 73, 120, 278, 278, 64, 150, 151, 371, 108, 259, 144, 145, 146, 147, 148, 285, 115, 371, 120, 289, 289, 289, 371, 118, 216, 193, 212, 214, 126, 237, 236, 236, 236, 212, 214, 212, 212, 102, 336, 345, 41, 113, 337, 210, 336, 212, 337, 302, 336, 106, 118, 125, 17, 47, 92, 113, 121, 122, 128, 129, 184, 185, 186, 193, 194, 195, 196, 197, 200, 201, 203, 204, 205, 206, 207, 208, 210, 232, 224, 89, 221, 88, 371, 117, 330, 300, 302, 9, 40, 74, 303, 304, 70, 303, 326, 4, 333, 334, 357, 3, 256, 278, 113, 371, 371, 278, 275, 276, 290, 292, 296, 299, 278, 76, 323, 84, 4, 297, 298, 49, 104, 41, 371, 371, 4, 232, 269, 300, 377, 4, 21, 36, 124, 231, 358, 360, 231, 4, 233, 176, 224, 12, 213, 319, 4, 205, 302, 130, 131, 132, 133, 134, 135, 352, 336, 345, 83, 102, 109, 212, 113, 332, 335, 336, 118, 336, 213, 213, 336, 232, 336, 337, 337, 92, 121, 212, 95, 113, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 361, 260, 358, 212, 212, 295, 361, 319, 213, 213, 300, 301, 306, 105, 305, 119, 301, 48, 66, 331, 213, 216, 371, 41, 85, 118, 212, 295, 4, 266, 109, 276, 215, 4, 269, 336, 260, 193, 216, 323, 34, 126, 263, 263, 214, 213, 224, 157, 350, 332, 213, 85, 99, 83, 109, 336, 336, 302, 211, 216, 118, 372, 373, 232, 118, 106, 337, 212, 302, 332, 95, 211, 4, 253, 254, 4, 380, 57, 302, 320, 332, 326, 327, 328, 336, 326, 336, 105, 336, 357, 75, 116, 299, 4, 279, 280, 118, 124, 215, 33, 58, 153, 270, 89, 336, 298, 371, 4, 356, 280, 269, 212, 156, 349, 213, 336, 336, 336, 109, 99, 213, 335, 4, 24, 30, 38, 62, 79, 94, 98, 111, 287, 337, 302, 332, 213, 213, 212, 213, 216, 213, 216, 212, 293, 124, 242, 243, 85, 321, 322, 331, 216, 81, 107, 329, 331, 48, 48, 4, 277, 84, 287, 213, 216, 299, 371, 123, 36, 46, 56, 271, 371, 126, 76, 4, 212, 350, 213, 109, 336, 212, 212, 213, 213, 213, 334, 254, 4, 334, 216, 242, 143, 364, 365, 323, 328, 188, 248, 336, 336, 212, 260, 27, 54, 95, 113, 118, 140, 142, 281, 282, 283, 280, 212, 123, 272, 124, 356, 336, 4, 310, 311, 349, 6, 6, 213, 213, 212, 191, 212, 25, 60, 65, 71, 72, 86, 90, 91, 216, 366, 378, 212, 371, 63, 324, 189, 190, 279, 112, 124, 284, 284, 95, 212, 141, 212, 283, 380, 380, 371, 213, 213, 158, 326, 213, 213, 334, 56, 187, 244, 245, 336, 71, 71, 71, 4, 90, 302, 364, 212, 373, 119, 170, 307, 213, 329, 143, 284, 336, 118, 336, 213, 110, 273, 119, 162, 166, 167, 312, 313, 213, 115, 213, 216, 192, 246, 4, 90, 213, 213, 332, 113, 174, 367, 332, 4, 308, 309, 284, 285, 213, 212, 213, 323, 154, 102, 274, 332, 17, 159, 169, 314, 316, 336, 247, 249, 250, 356, 323, 245, 4, 251, 329, 90, 373, 373, 213, 174, 119, 124, 368, 44, 325, 118, 216, 149, 286, 336, 155, 336, 326, 314, 155, 165, 160, 317, 161, 165, 216, 323, 193, 216, 191, 368, 368, 373, 356, 336, 75, 369, 336, 212, 309, 213, 312, 106, 63, 159, 163, 168, 318, 249, 336, 356, 56, 187, 369, 369, 368, 212, 310, 169, 315, 316, 155, 164, 115, 369, 380, 213, 161, 317, 247, 213, 323}; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint16 yyr1[] = { 0, 218, 219, 220, 220, 221, 221, 221, 221, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 223, 223, 224, 225, 225, 225, 226, 226, 227, 227, 228, 228, 229, 229, 230, 230, 231, 231, 231, 231, 231, 231, 232, 233, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 235, 236, 236, 237, 237, 237, 238, 238, 239, 239, 240, 240, 240, 240, 241, 241, 242, 242, 243, 243, 243, 243, 244, 244, 245, 246, 246, 247, 247, 248, 248, 248, 249, 250, 250, 251, 252, 252, 253, 253, 254, 254, 255, 256, 257, 257, 258, 259, 260, 261, 261, 261, 262, 262, 262, 263, 263, 264, 264, 264, 264, 264, 264, 264, 264, 265, 265, 266, 267, 268, 268, 269, 270, 270, 270, 270, 271, 271, 271, 272, 272, 273, 273, 274, 274, 275, 275, 276, 276, 276, 276, 277, 278, 278, 279, 279, 280, 281, 281, 282, 282, 283, 283, 283, 283, 283, 283, 283, 284, 284, 285, 285, 285, 285, 285, 286, 286, 287, 287, 287, 287, 287, 287, 287, 287, 287, 288, 288, 288, 288, 288, 289, 289, 290, 291, 292, 292, 293, 293, 294, 294, 294, 295, 295, 296, 297, 297, 298, 299, 299, 299, 300, 300, 301, 301, 302, 302, 303, 304, 304, 304, 305, 305, 306, 306, 307, 308, 308, 309, 310, 310, 311, 311, 312, 312, 312, 313, 313, 313, 314, 314, 315, 315, 316, 316, 316, 317, 317, 318, 318, 318, 318, 319, 319, 320, 321, 321, 322, 323, 323, 324, 324, 325, 325, 326, 326, 327, 327, 328, 329, 329, 329, 330, 330, 331, 331, 331, 331, 331, 331, 332, 332, 333, 333, 334, 334, 335, 336, 336, 336, 336, 336, 336, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 338, 339, 339, 340, 340, 340, 340, 340, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 342, 342, 343, 343, 343, 343, 344, 344, 344, 344, 345, 345, 346, 346, 347, 347, 347, 347, 347, 347, 347, 348, 348, 349, 349, 349, 350, 350, 351, 352, 352, 352, 352, 352, 352, 353, 354, 355, 356, 356, 356, 356, 357, 357, 357, 357, 357, 358, 359, 359, 360, 360, 361, 362, 363, 364, 364, 364, 364, 365, 365, 366, 366, 366, 366, 366, 367, 367, 367, 368, 368, 369, 369, 370, 371, 371, 372, 373, 373, 374, 374, 375, 376, 376, 377, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 379, 379, 380, 380}; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { 0, 2, 2, 1, 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 2, 1, 2, 4, 5, 1, 2, 1, 2, 4, 5, 2, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 0, 2, 3, 0, 4, 2, 1, 0, 2, 3, 3, 3, 2, 2, 1, 0, 4, 7, 8, 11, 1, 3, 3, 2, 0, 1, 3, 2, 2, 0, 3, 1, 3, 1, 5, 0, 1, 3, 1, 4, 4, 1, 2, 5, 7, 1, 1, 2, 3, 2, 6, 8, 6, 1, 0, 8, 7, 6, 7, 11, 7, 10, 5, 1, 0, 1, 10, 1, 0, 1, 1, 1, 2, 0, 1, 1, 2, 2, 0, 3, 0, 2, 0, 2, 3, 1, 1, 1, 1, 1, 3, 0, 1, 3, 3, 1, 0, 2, 1, 2, 3, 5, 2, 6, 4, 4, 3, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 4, 4, 1, 0, 4, 4, 3, 6, 4, 2, 0, 4, 2, 7, 6, 3, 5, 1, 1, 3, 3, 0, 5, 1, 3, 3, 2, 2, 6, 3, 3, 1, 1, 3, 5, 2, 1, 1, 1, 1, 0, 7, 8, 2, 1, 3, 5, 6, 3, 1, 0, 3, 6, 0, 1, 1, 1, 1, 2, 1, 2, 2, 2, 2, 2, 0, 2, 2, 1, 1, 1, 0, 1, 1, 0, 2, 2, 0, 4, 0, 2, 0, 3, 0, 1, 3, 3, 1, 1, 0, 2, 0, 2, 2, 4, 2, 4, 0, 1, 3, 1, 0, 1, 3, 2, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 3, 6, 1, 1, 2, 2, 2, 3, 4, 1, 3, 3, 3, 3, 3, 3, 3, 4, 3, 3, 3, 3, 3, 3, 3, 5, 6, 5, 6, 4, 6, 3, 5, 4, 5, 4, 5, 3, 3, 3, 3, 3, 3, 3, 5, 7, 4, 2, 0, 5, 0, 6, 1, 1, 1, 1, 1, 1, 4, 4, 5, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 8, 7, 7, 2, 0, 1, 1, 2, 3, 4, 3, 2, 0, 2, 0, 4, 0, 1, 1, 3, 2, 1, 0, 1, 0, 2, 1, 3, 3, 1, 2, 1, 2, 1, 2, 1, 1, 1, 1, 1, 0, 1, 3}; #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) #define YYEMPTY (-2) #define YYEOF 0 #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrorlab #define YYRECOVERING() (!!yyerrstatus) #define YYBACKUP(Token, Value) \ do \ if (yychar == YYEMPTY) { \ yychar = (Token); \ yylval = (Value); \ YYPOPSTACK(yylen); \ yystate = *yyssp; \ goto yybackup; \ } else { \ yyerror(&yylloc, result, scanner, YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (0) /* Error token number */ #define YYTERROR 1 #define YYERRCODE 256 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. If N is 0, then set CURRENT to the empty location which ends the previous symbol: RHS[0] (always defined). */ #ifndef YYLLOC_DEFAULT #define YYLLOC_DEFAULT(Current, Rhs, N) \ do \ if (N) { \ (Current).first_line = YYRHSLOC(Rhs, 1).first_line; \ (Current).first_column = YYRHSLOC(Rhs, 1).first_column; \ (Current).last_line = YYRHSLOC(Rhs, N).last_line; \ (Current).last_column = YYRHSLOC(Rhs, N).last_column; \ } else { \ (Current).first_line = (Current).last_line = YYRHSLOC(Rhs, 0).last_line; \ (Current).first_column = (Current).last_column = \ YYRHSLOC(Rhs, 0).last_column; \ } \ while (0) #endif #define YYRHSLOC(Rhs, K) ((Rhs)[K]) /* Enable debugging if requested. */ #if HSQL_DEBUG #ifndef YYFPRINTF #include /* INFRINGES ON USER NAME SPACE */ #define YYFPRINTF fprintf #endif #define YYDPRINTF(Args) \ do { \ if (yydebug) YYFPRINTF Args; \ } while (0) /* YY_LOCATION_PRINT -- Print the location on the stream. This macro was not mandated originally: define only if we know we won't break user code: when these are the locations we know. */ #ifndef YY_LOCATION_PRINT #if defined HSQL_LTYPE_IS_TRIVIAL && HSQL_LTYPE_IS_TRIVIAL /* Print *YYLOCP on YYO. Private, do not rely on its existence. */ YY_ATTRIBUTE_UNUSED static int yy_location_print_(FILE* yyo, YYLTYPE const* const yylocp) { int res = 0; int end_col = 0 != yylocp->last_column ? yylocp->last_column - 1 : 0; if (0 <= yylocp->first_line) { res += YYFPRINTF(yyo, "%d", yylocp->first_line); if (0 <= yylocp->first_column) res += YYFPRINTF(yyo, ".%d", yylocp->first_column); } if (0 <= yylocp->last_line) { if (yylocp->first_line < yylocp->last_line) { res += YYFPRINTF(yyo, "-%d", yylocp->last_line); if (0 <= end_col) res += YYFPRINTF(yyo, ".%d", end_col); } else if (0 <= end_col && yylocp->first_column < end_col) res += YYFPRINTF(yyo, "-%d", end_col); } return res; } #define YY_LOCATION_PRINT(File, Loc) yy_location_print_(File, &(Loc)) #else #define YY_LOCATION_PRINT(File, Loc) ((void)0) #endif #endif #define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ do { \ if (yydebug) { \ YYFPRINTF(stderr, "%s ", Title); \ yy_symbol_print(stderr, Type, Value, Location, result, scanner); \ YYFPRINTF(stderr, "\n"); \ } \ } while (0) /*-----------------------------------. | Print this symbol's value on YYO. | `-----------------------------------*/ static void yy_symbol_value_print(FILE* yyo, int yytype, YYSTYPE const* const yyvaluep, YYLTYPE const* const yylocationp, Program* result, yyscan_t scanner) { FILE* yyoutput = yyo; YYUSE(yyoutput); YYUSE(yylocationp); YYUSE(result); YYUSE(scanner); if (!yyvaluep) return; #ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT(yyo, yytoknum[yytype], *yyvaluep); #endif YYUSE(yytype); } /*---------------------------. | Print this symbol on YYO. | `---------------------------*/ static void yy_symbol_print(FILE* yyo, int yytype, YYSTYPE const* const yyvaluep, YYLTYPE const* const yylocationp, Program* result, yyscan_t scanner) { YYFPRINTF(yyo, "%s %s (", yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]); YY_LOCATION_PRINT(yyo, *yylocationp); YYFPRINTF(yyo, ": "); yy_symbol_value_print(yyo, yytype, yyvaluep, yylocationp, result, scanner); YYFPRINTF(yyo, ")"); } /*------------------------------------------------------------------. | yy_stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ static void yy_stack_print(yytype_int16* yybottom, yytype_int16* yytop) { YYFPRINTF(stderr, "Stack now"); for (; yybottom <= yytop; yybottom++) { int yybot = *yybottom; YYFPRINTF(stderr, " %d", yybot); } YYFPRINTF(stderr, "\n"); } #define YY_STACK_PRINT(Bottom, Top) \ do { \ if (yydebug) yy_stack_print((Bottom), (Top)); \ } while (0) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ static void yy_reduce_print(yytype_int16* yyssp, YYSTYPE* yyvsp, YYLTYPE* yylsp, int yyrule, Program* result, yyscan_t scanner) { unsigned long yylno = yyrline[yyrule]; int yynrhs = yyr2[yyrule]; int yyi; YYFPRINTF(stderr, "Reducing stack by rule %d (line %lu):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { YYFPRINTF(stderr, " $%d = ", yyi + 1); yy_symbol_print(stderr, yystos[yyssp[yyi + 1 - yynrhs]], &yyvsp[(yyi + 1) - (yynrhs)], &(yylsp[(yyi + 1) - (yynrhs)]), result, scanner); YYFPRINTF(stderr, "\n"); } } #define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) yy_reduce_print(yyssp, yyvsp, yylsp, Rule, result, scanner); \ } while (0) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; #else /* !HSQL_DEBUG */ #define YYDPRINTF(Args) #define YY_SYMBOL_PRINT(Title, Type, Value, Location) #define YY_STACK_PRINT(Bottom, Top) #define YY_REDUCE_PRINT(Rule) #endif /* !HSQL_DEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH #define YYINITDEPTH 200 #endif /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only if the built-in stack extension method is used). Do not make this value too large; the results are undefined if YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ #ifndef YYMAXDEPTH #define YYMAXDEPTH 10000 #endif #if YYERROR_VERBOSE #ifndef yystrlen #if defined __GLIBC__ && defined _STRING_H #define yystrlen strlen #else /* Return the length of YYSTR. */ static YYSIZE_T yystrlen(const char* yystr) { YYSIZE_T yylen; for (yylen = 0; yystr[yylen]; yylen++) continue; return yylen; } #endif #endif #ifndef yystpcpy #if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE #define yystpcpy stpcpy #else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ static char* yystpcpy(char* yydest, const char* yysrc) { char* yyd = yydest; const char* yys = yysrc; while ((*yyd++ = *yys++) != '\0') continue; return yyd - 1; } #endif #endif #ifndef yytnamerr /* Copy to YYRES the contents of YYSTR after stripping away unnecessary quotes and backslashes, so that it's suitable for yyerror. The heuristic is that double-quoting is unnecessary unless the string contains an apostrophe, a comma, or backslash (other than backslash-backslash). YYSTR is taken from yytname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ static YYSIZE_T yytnamerr(char* yyres, const char* yystr) { if (*yystr == '"') { YYSIZE_T yyn = 0; char const* yyp = yystr; for (;;) switch (*++yyp) { case '\'': case ',': goto do_not_strip_quotes; case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; else goto append; append: default: if (yyres) yyres[yyn] = *yyp; yyn++; break; case '"': if (yyres) yyres[yyn] = '\0'; return yyn; } do_not_strip_quotes:; } if (!yyres) return yystrlen(yystr); return (YYSIZE_T)(yystpcpy(yyres, yystr) - yyres); } #endif /* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message about the unexpected token YYTOKEN for the state stack whose top is YYSSP. Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is not large enough to hold the message. In that case, also set *YYMSG_ALLOC to the required number of bytes. Return 2 if the required number of bytes is too large to store. */ static int yysyntax_error(YYSIZE_T* yymsg_alloc, char** yymsg, yytype_int16* yyssp, int yytoken) { YYSIZE_T yysize0 = yytnamerr(YY_NULLPTR, yytname[yytoken]); YYSIZE_T yysize = yysize0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; /* Internationalized format string. */ const char* yyformat = YY_NULLPTR; /* Arguments of yyformat. */ char const* yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; /* Number of reported tokens (one for the "unexpected", one per "expected"). */ int yycount = 0; /* There are many possibilities here to consider: - If this state is a consistent state with a default action, then the only way this function was invoked is if the default action is an error action. In that case, don't check for expected tokens because there are none. - The only way there can be no lookahead present (in yychar) is if this state is a consistent state with a default action. Thus, detecting the absence of a lookahead is sufficient to determine that there is no unexpected or expected token to report. In that case, just report a simple "syntax error". - Don't assume there isn't a lookahead just because this state is a consistent state with a default action. There might have been a previous inconsistent state, consistent state with a non-default action, or user semantic action that manipulated yychar. - Of course, the expected token list depends on states to have correct lookahead information, and it depends on the parser not to perform extra reductions after fetching a lookahead from the scanner and before detecting a syntax error. Thus, state merging (from LALR or IELR) and default reductions corrupt the expected token list. However, the list is correct for canonical LR with one exception: it will still contain any token that will not be accepted due to an error action in a later state. */ if (yytoken != YYEMPTY) { int yyn = yypact[*yyssp]; yyarg[yycount++] = yytname[yytoken]; if (!yypact_value_is_default(yyn)) { /* Start YYX at -YYN if negative to avoid negative indexes in YYCHECK. In other words, skip the first -YYN actions for this state because they are default actions. */ int yyxbegin = yyn < 0 ? -yyn : 0; /* Stay within bounds of both yycheck and yytname. */ int yychecklim = YYLAST - yyn + 1; int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; int yyx; for (yyx = yyxbegin; yyx < yyxend; ++yyx) if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR && !yytable_value_is_error(yytable[yyx + yyn])) { if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) { yycount = 1; yysize = yysize0; break; } yyarg[yycount++] = yytname[yyx]; { YYSIZE_T yysize1 = yysize + yytnamerr(YY_NULLPTR, yytname[yyx]); if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) yysize = yysize1; else return 2; } } } } switch (yycount) { #define YYCASE_(N, S) \ case N: \ yyformat = S; \ break default: /* Avoid compiler warnings. */ YYCASE_(0, YY_("syntax error")); YYCASE_(1, YY_("syntax error, unexpected %s")); YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); YYCASE_( 5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); #undef YYCASE_ } { YYSIZE_T yysize1 = yysize + yystrlen(yyformat); if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) yysize = yysize1; else return 2; } if (*yymsg_alloc < yysize) { *yymsg_alloc = 2 * yysize; if (!(yysize <= *yymsg_alloc && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM; return 1; } /* Avoid sprintf, as that infringes on the user's name space. Don't have undefined behavior even if the translation produced a string with the wrong number of "%s"s. */ { char* yyp = *yymsg; int yyi = 0; while ((*yyp = *yyformat) != '\0') if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount) { yyp += yytnamerr(yyp, yyarg[yyi++]); yyformat += 2; } else { yyp++; yyformat++; } } return 0; } #endif /* YYERROR_VERBOSE */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ static void yydestruct(const char* yymsg, int yytype, YYSTYPE* yyvaluep, YYLTYPE* yylocationp, Program* result, yyscan_t scanner) { YYUSE(yyvaluep); YYUSE(yylocationp); YYUSE(result); YYUSE(scanner); if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT(yymsg, yytype, yyvaluep, yylocationp); YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN switch (yytype) { case 3: /* STRING */ #line 497 "bison_parser.y" /* yacc.c:1257 */ { free((((*yyvaluep).sval))); } #line 2224 "bison_parser.cpp" /* yacc.c:1257 */ break; case 4: /* IDENTIFIER */ #line 497 "bison_parser.y" /* yacc.c:1257 */ { free((((*yyvaluep).sval))); } #line 2230 "bison_parser.cpp" /* yacc.c:1257 */ break; case 5: /* FLOATVAL */ #line 496 "bison_parser.y" /* yacc.c:1257 */ { } #line 2236 "bison_parser.cpp" /* yacc.c:1257 */ break; case 6: /* INTVAL */ #line 496 "bison_parser.y" /* yacc.c:1257 */ { } #line 2242 "bison_parser.cpp" /* yacc.c:1257 */ break; case 219: /* input */ #line 496 "bison_parser.y" /* yacc.c:1257 */ { } #line 2248 "bison_parser.cpp" /* yacc.c:1257 */ break; case 220: /* statement_list */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).statement_list_t) != NULL) ((*yyvaluep).statement_list_t)->deep_delete(); } #line 2254 "bison_parser.cpp" /* yacc.c:1257 */ break; case 221: /* statement */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).statement_t) != NULL) ((*yyvaluep).statement_t)->deep_delete(); } #line 2260 "bison_parser.cpp" /* yacc.c:1257 */ break; case 222: /* cmd */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).cmd_t) != NULL) ((*yyvaluep).cmd_t)->deep_delete(); } #line 2266 "bison_parser.cpp" /* yacc.c:1257 */ break; case 223: /* cmd_release */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).cmd_release_t) != NULL) ((*yyvaluep).cmd_release_t)->deep_delete(); } #line 2272 "bison_parser.cpp" /* yacc.c:1257 */ break; case 224: /* savepoint_name */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).savepoint_name_t) != NULL) ((*yyvaluep).savepoint_name_t)->deep_delete(); } #line 2278 "bison_parser.cpp" /* yacc.c:1257 */ break; case 225: /* cmd_pragma */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).cmd_pragma_t) != NULL) ((*yyvaluep).cmd_pragma_t)->deep_delete(); } #line 2284 "bison_parser.cpp" /* yacc.c:1257 */ break; case 226: /* cmd_reindex */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).cmd_reindex_t) != NULL) ((*yyvaluep).cmd_reindex_t)->deep_delete(); } #line 2290 "bison_parser.cpp" /* yacc.c:1257 */ break; case 227: /* cmd_analyze */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).cmd_analyze_t) != NULL) ((*yyvaluep).cmd_analyze_t)->deep_delete(); } #line 2296 "bison_parser.cpp" /* yacc.c:1257 */ break; case 228: /* cmd_attach */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).cmd_attach_t) != NULL) ((*yyvaluep).cmd_attach_t)->deep_delete(); } #line 2302 "bison_parser.cpp" /* yacc.c:1257 */ break; case 229: /* cmd_detach */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).cmd_detach_t) != NULL) ((*yyvaluep).cmd_detach_t)->deep_delete(); } #line 2308 "bison_parser.cpp" /* yacc.c:1257 */ break; case 230: /* pragma_key */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).pragma_key_t) != NULL) ((*yyvaluep).pragma_key_t)->deep_delete(); } #line 2314 "bison_parser.cpp" /* yacc.c:1257 */ break; case 231: /* pragma_value */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).pragma_value_t) != NULL) ((*yyvaluep).pragma_value_t)->deep_delete(); } #line 2320 "bison_parser.cpp" /* yacc.c:1257 */ break; case 232: /* schema_name */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).schema_name_t) != NULL) ((*yyvaluep).schema_name_t)->deep_delete(); } #line 2326 "bison_parser.cpp" /* yacc.c:1257 */ break; case 233: /* pragma_name */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).pragma_name_t) != NULL) ((*yyvaluep).pragma_name_t)->deep_delete(); } #line 2332 "bison_parser.cpp" /* yacc.c:1257 */ break; case 234: /* preparable_statement */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).preparable_statement_t) != NULL) ((*yyvaluep).preparable_statement_t)->deep_delete(); } #line 2338 "bison_parser.cpp" /* yacc.c:1257 */ break; case 235: /* rollback_statement */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).rollback_statement_t) != NULL) ((*yyvaluep).rollback_statement_t)->deep_delete(); } #line 2344 "bison_parser.cpp" /* yacc.c:1257 */ break; case 236: /* opt_transaction */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_transaction_t) != NULL) ((*yyvaluep).opt_transaction_t)->deep_delete(); } #line 2350 "bison_parser.cpp" /* yacc.c:1257 */ break; case 237: /* opt_to_savepoint */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_to_savepoint_t) != NULL) ((*yyvaluep).opt_to_savepoint_t)->deep_delete(); } #line 2356 "bison_parser.cpp" /* yacc.c:1257 */ break; case 238: /* vacuum_statement */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).vacuum_statement_t) != NULL) ((*yyvaluep).vacuum_statement_t)->deep_delete(); } #line 2362 "bison_parser.cpp" /* yacc.c:1257 */ break; case 239: /* opt_schema_name */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_schema_name_t) != NULL) ((*yyvaluep).opt_schema_name_t)->deep_delete(); } #line 2368 "bison_parser.cpp" /* yacc.c:1257 */ break; case 240: /* begin_statement */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).begin_statement_t) != NULL) ((*yyvaluep).begin_statement_t)->deep_delete(); } #line 2374 "bison_parser.cpp" /* yacc.c:1257 */ break; case 241: /* commit_statement */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).commit_statement_t) != NULL) ((*yyvaluep).commit_statement_t)->deep_delete(); } #line 2380 "bison_parser.cpp" /* yacc.c:1257 */ break; case 242: /* opt_upsert_clause */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_upsert_clause_t) != NULL) ((*yyvaluep).opt_upsert_clause_t)->deep_delete(); } #line 2386 "bison_parser.cpp" /* yacc.c:1257 */ break; case 243: /* upsert_clause */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).upsert_clause_t) != NULL) ((*yyvaluep).upsert_clause_t)->deep_delete(); } #line 2392 "bison_parser.cpp" /* yacc.c:1257 */ break; case 244: /* indexed_column_list */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).indexed_column_list_t) != NULL) ((*yyvaluep).indexed_column_list_t)->deep_delete(); } #line 2398 "bison_parser.cpp" /* yacc.c:1257 */ break; case 245: /* indexed_column */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).indexed_column_t) != NULL) ((*yyvaluep).indexed_column_t)->deep_delete(); } #line 2404 "bison_parser.cpp" /* yacc.c:1257 */ break; case 246: /* opt_collate */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_collate_t) != NULL) ((*yyvaluep).opt_collate_t)->deep_delete(); } #line 2410 "bison_parser.cpp" /* yacc.c:1257 */ break; case 247: /* assign_list */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).assign_list_t) != NULL) ((*yyvaluep).assign_list_t)->deep_delete(); } #line 2416 "bison_parser.cpp" /* yacc.c:1257 */ break; case 248: /* opt_null */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_null_t) != NULL) ((*yyvaluep).opt_null_t)->deep_delete(); } #line 2422 "bison_parser.cpp" /* yacc.c:1257 */ break; case 249: /* assign_clause */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).assign_clause_t) != NULL) ((*yyvaluep).assign_clause_t)->deep_delete(); } #line 2428 "bison_parser.cpp" /* yacc.c:1257 */ break; case 250: /* column_name_list */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).column_name_list_t) != NULL) ((*yyvaluep).column_name_list_t)->deep_delete(); } #line 2434 "bison_parser.cpp" /* yacc.c:1257 */ break; case 251: /* collation_name */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).collation_name_t) != NULL) ((*yyvaluep).collation_name_t)->deep_delete(); } #line 2440 "bison_parser.cpp" /* yacc.c:1257 */ break; case 252: /* opt_hints */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).optional_hints_t) != NULL) ((*yyvaluep).optional_hints_t)->deep_delete(); } #line 2446 "bison_parser.cpp" /* yacc.c:1257 */ break; case 253: /* hint_list */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).hint_list_t) != NULL) ((*yyvaluep).hint_list_t)->deep_delete(); } #line 2452 "bison_parser.cpp" /* yacc.c:1257 */ break; case 254: /* hint */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).hint_t) != NULL) ((*yyvaluep).hint_t)->deep_delete(); } #line 2458 "bison_parser.cpp" /* yacc.c:1257 */ break; case 255: /* prepare_statement */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).prepare_statement_t) != NULL) ((*yyvaluep).prepare_statement_t)->deep_delete(); } #line 2464 "bison_parser.cpp" /* yacc.c:1257 */ break; case 256: /* prepare_target_query */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).prepare_target_query_t) != NULL) ((*yyvaluep).prepare_target_query_t)->deep_delete(); } #line 2470 "bison_parser.cpp" /* yacc.c:1257 */ break; case 257: /* execute_statement */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).execute_statement_t) != NULL) ((*yyvaluep).execute_statement_t)->deep_delete(); } #line 2476 "bison_parser.cpp" /* yacc.c:1257 */ break; case 258: /* import_statement */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).import_statement_t) != NULL) ((*yyvaluep).import_statement_t)->deep_delete(); } #line 2482 "bison_parser.cpp" /* yacc.c:1257 */ break; case 259: /* import_file_type */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).import_file_type_t) != NULL) ((*yyvaluep).import_file_type_t)->deep_delete(); } #line 2488 "bison_parser.cpp" /* yacc.c:1257 */ break; case 260: /* file_path */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).file_path_t) != NULL) ((*yyvaluep).file_path_t)->deep_delete(); } #line 2494 "bison_parser.cpp" /* yacc.c:1257 */ break; case 261: /* show_statement */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).show_statement_t) != NULL) ((*yyvaluep).show_statement_t)->deep_delete(); } #line 2500 "bison_parser.cpp" /* yacc.c:1257 */ break; case 262: /* alter_statement */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).alter_statement_t) != NULL) ((*yyvaluep).alter_statement_t)->deep_delete(); } #line 2506 "bison_parser.cpp" /* yacc.c:1257 */ break; case 263: /* opt_column */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_column_t) != NULL) ((*yyvaluep).opt_column_t)->deep_delete(); } #line 2512 "bison_parser.cpp" /* yacc.c:1257 */ break; case 264: /* create_statement */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).create_statement_t) != NULL) ((*yyvaluep).create_statement_t)->deep_delete(); } #line 2518 "bison_parser.cpp" /* yacc.c:1257 */ break; case 265: /* opt_unique */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_unique_t) != NULL) ((*yyvaluep).opt_unique_t)->deep_delete(); } #line 2524 "bison_parser.cpp" /* yacc.c:1257 */ break; case 266: /* index_name */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).index_name_t) != NULL) ((*yyvaluep).index_name_t)->deep_delete(); } #line 2530 "bison_parser.cpp" /* yacc.c:1257 */ break; case 267: /* trigger_declare */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).trigger_declare_t) != NULL) ((*yyvaluep).trigger_declare_t)->deep_delete(); } #line 2536 "bison_parser.cpp" /* yacc.c:1257 */ break; case 268: /* opt_tmp */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_tmp_t) != NULL) ((*yyvaluep).opt_tmp_t)->deep_delete(); } #line 2542 "bison_parser.cpp" /* yacc.c:1257 */ break; case 269: /* trigger_name */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).trigger_name_t) != NULL) ((*yyvaluep).trigger_name_t)->deep_delete(); } #line 2548 "bison_parser.cpp" /* yacc.c:1257 */ break; case 270: /* opt_trigger_time */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_trigger_time_t) != NULL) ((*yyvaluep).opt_trigger_time_t)->deep_delete(); } #line 2554 "bison_parser.cpp" /* yacc.c:1257 */ break; case 271: /* trigger_event */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).trigger_event_t) != NULL) ((*yyvaluep).trigger_event_t)->deep_delete(); } #line 2560 "bison_parser.cpp" /* yacc.c:1257 */ break; case 272: /* opt_of_column_list */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_of_column_list_t) != NULL) ((*yyvaluep).opt_of_column_list_t)->deep_delete(); } #line 2566 "bison_parser.cpp" /* yacc.c:1257 */ break; case 273: /* opt_for_each */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_for_each_t) != NULL) ((*yyvaluep).opt_for_each_t)->deep_delete(); } #line 2572 "bison_parser.cpp" /* yacc.c:1257 */ break; case 274: /* opt_when */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_when_t) != NULL) ((*yyvaluep).opt_when_t)->deep_delete(); } #line 2578 "bison_parser.cpp" /* yacc.c:1257 */ break; case 275: /* trigger_cmd_list */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).trigger_cmd_list_t) != NULL) ((*yyvaluep).trigger_cmd_list_t)->deep_delete(); } #line 2584 "bison_parser.cpp" /* yacc.c:1257 */ break; case 276: /* trigger_cmd */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).trigger_cmd_t) != NULL) ((*yyvaluep).trigger_cmd_t)->deep_delete(); } #line 2590 "bison_parser.cpp" /* yacc.c:1257 */ break; case 277: /* module_name */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).module_name_t) != NULL) ((*yyvaluep).module_name_t)->deep_delete(); } #line 2596 "bison_parser.cpp" /* yacc.c:1257 */ break; case 278: /* opt_not_exists */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_not_exists_t) != NULL) ((*yyvaluep).opt_not_exists_t)->deep_delete(); } #line 2602 "bison_parser.cpp" /* yacc.c:1257 */ break; case 279: /* column_def_commalist */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).column_def_comma_list_t) != NULL) ((*yyvaluep).column_def_comma_list_t)->deep_delete(); } #line 2608 "bison_parser.cpp" /* yacc.c:1257 */ break; case 280: /* column_def */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).column_def_t) != NULL) ((*yyvaluep).column_def_t)->deep_delete(); } #line 2614 "bison_parser.cpp" /* yacc.c:1257 */ break; case 281: /* opt_column_arglist */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_column_arglist_t) != NULL) ((*yyvaluep).opt_column_arglist_t)->deep_delete(); } #line 2620 "bison_parser.cpp" /* yacc.c:1257 */ break; case 282: /* column_arglist */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).column_arglist_t) != NULL) ((*yyvaluep).column_arglist_t)->deep_delete(); } #line 2626 "bison_parser.cpp" /* yacc.c:1257 */ break; case 283: /* column_arg */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).column_arg_t) != NULL) ((*yyvaluep).column_arg_t)->deep_delete(); } #line 2632 "bison_parser.cpp" /* yacc.c:1257 */ break; case 284: /* opt_on_conflict */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_on_conflict_t) != NULL) ((*yyvaluep).opt_on_conflict_t)->deep_delete(); } #line 2638 "bison_parser.cpp" /* yacc.c:1257 */ break; case 285: /* resolve_type */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).resolve_type_t) != NULL) ((*yyvaluep).resolve_type_t)->deep_delete(); } #line 2644 "bison_parser.cpp" /* yacc.c:1257 */ break; case 286: /* opt_autoinc */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_autoinc_t) != NULL) ((*yyvaluep).opt_autoinc_t)->deep_delete(); } #line 2650 "bison_parser.cpp" /* yacc.c:1257 */ break; case 287: /* column_type */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).column_type_t) != NULL) ((*yyvaluep).column_type_t)->deep_delete(); } #line 2656 "bison_parser.cpp" /* yacc.c:1257 */ break; case 288: /* drop_statement */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).drop_statement_t) != NULL) ((*yyvaluep).drop_statement_t)->deep_delete(); } #line 2662 "bison_parser.cpp" /* yacc.c:1257 */ break; case 289: /* opt_exists */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_exists_t) != NULL) ((*yyvaluep).opt_exists_t)->deep_delete(); } #line 2668 "bison_parser.cpp" /* yacc.c:1257 */ break; case 290: /* delete_statement */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).delete_statement_t) != NULL) ((*yyvaluep).delete_statement_t)->deep_delete(); } #line 2674 "bison_parser.cpp" /* yacc.c:1257 */ break; case 291: /* truncate_statement */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).delete_statement_t) != NULL) ((*yyvaluep).delete_statement_t)->deep_delete(); } #line 2680 "bison_parser.cpp" /* yacc.c:1257 */ break; case 292: /* insert_statement */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).insert_statement_t) != NULL) ((*yyvaluep).insert_statement_t)->deep_delete(); } #line 2686 "bison_parser.cpp" /* yacc.c:1257 */ break; case 293: /* super_list */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).super_list_t) != NULL) ((*yyvaluep).super_list_t)->deep_delete(); } #line 2692 "bison_parser.cpp" /* yacc.c:1257 */ break; case 294: /* insert_type */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).insert_type_t) != NULL) ((*yyvaluep).insert_type_t)->deep_delete(); } #line 2698 "bison_parser.cpp" /* yacc.c:1257 */ break; case 295: /* opt_column_list */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_column_list_t) != NULL) ((*yyvaluep).opt_column_list_t)->deep_delete(); } #line 2704 "bison_parser.cpp" /* yacc.c:1257 */ break; case 296: /* update_statement */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).update_statement_t) != NULL) ((*yyvaluep).update_statement_t)->deep_delete(); } #line 2710 "bison_parser.cpp" /* yacc.c:1257 */ break; case 297: /* update_clause_commalist */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).update_clause_commalist_t) != NULL) ((*yyvaluep).update_clause_commalist_t)->deep_delete(); } #line 2716 "bison_parser.cpp" /* yacc.c:1257 */ break; case 298: /* update_clause */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).update_clause_t) != NULL) ((*yyvaluep).update_clause_t)->deep_delete(); } #line 2722 "bison_parser.cpp" /* yacc.c:1257 */ break; case 299: /* select_statement */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).select_statement_t) != NULL) ((*yyvaluep).select_statement_t)->deep_delete(); } #line 2728 "bison_parser.cpp" /* yacc.c:1257 */ break; case 300: /* select_with_paren */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).select_with_paren_t) != NULL) ((*yyvaluep).select_with_paren_t)->deep_delete(); } #line 2734 "bison_parser.cpp" /* yacc.c:1257 */ break; case 301: /* select_paren_or_clause */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).select_paren_or_clause_t) != NULL) ((*yyvaluep).select_paren_or_clause_t)->deep_delete(); } #line 2740 "bison_parser.cpp" /* yacc.c:1257 */ break; case 302: /* select_no_paren */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).select_no_paren_t) != NULL) ((*yyvaluep).select_no_paren_t)->deep_delete(); } #line 2746 "bison_parser.cpp" /* yacc.c:1257 */ break; case 303: /* set_operator */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).set_operator_t) != NULL) ((*yyvaluep).set_operator_t)->deep_delete(); } #line 2752 "bison_parser.cpp" /* yacc.c:1257 */ break; case 304: /* set_type */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).set_type_t) != NULL) ((*yyvaluep).set_type_t)->deep_delete(); } #line 2758 "bison_parser.cpp" /* yacc.c:1257 */ break; case 305: /* opt_all */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_all_t) != NULL) ((*yyvaluep).opt_all_t)->deep_delete(); } #line 2764 "bison_parser.cpp" /* yacc.c:1257 */ break; case 306: /* select_clause */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).select_clause_t) != NULL) ((*yyvaluep).select_clause_t)->deep_delete(); } #line 2770 "bison_parser.cpp" /* yacc.c:1257 */ break; case 307: /* window_clause */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).window_clause_t) != NULL) ((*yyvaluep).window_clause_t)->deep_delete(); } #line 2776 "bison_parser.cpp" /* yacc.c:1257 */ break; case 308: /* windowdefn_list */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).window_defn_list_t) != NULL) ((*yyvaluep).window_defn_list_t)->deep_delete(); } #line 2782 "bison_parser.cpp" /* yacc.c:1257 */ break; case 309: /* windowdefn */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).window_defn_t) != NULL) ((*yyvaluep).window_defn_t)->deep_delete(); } #line 2788 "bison_parser.cpp" /* yacc.c:1257 */ break; case 310: /* window */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).window_t) != NULL) ((*yyvaluep).window_t)->deep_delete(); } #line 2794 "bison_parser.cpp" /* yacc.c:1257 */ break; case 311: /* opt_base_window_name */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_base_window_name_t) != NULL) ((*yyvaluep).opt_base_window_name_t)->deep_delete(); } #line 2800 "bison_parser.cpp" /* yacc.c:1257 */ break; case 312: /* opt_frame */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_frame_t) != NULL) ((*yyvaluep).opt_frame_t)->deep_delete(); } #line 2806 "bison_parser.cpp" /* yacc.c:1257 */ break; case 313: /* range_or_rows */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).range_or_rows_t) != NULL) ((*yyvaluep).range_or_rows_t)->deep_delete(); } #line 2812 "bison_parser.cpp" /* yacc.c:1257 */ break; case 314: /* frame_bound_s */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).frame_bound_s_t) != NULL) ((*yyvaluep).frame_bound_s_t)->deep_delete(); } #line 2818 "bison_parser.cpp" /* yacc.c:1257 */ break; case 315: /* frame_bound_e */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).frame_bound_e_t) != NULL) ((*yyvaluep).frame_bound_e_t)->deep_delete(); } #line 2824 "bison_parser.cpp" /* yacc.c:1257 */ break; case 316: /* frame_bound */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).frame_bound_t) != NULL) ((*yyvaluep).frame_bound_t)->deep_delete(); } #line 2830 "bison_parser.cpp" /* yacc.c:1257 */ break; case 317: /* opt_frame_exclude */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_frame_exclude_t) != NULL) ((*yyvaluep).opt_frame_exclude_t)->deep_delete(); } #line 2836 "bison_parser.cpp" /* yacc.c:1257 */ break; case 318: /* frame_exclude */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).frame_exclude_t) != NULL) ((*yyvaluep).frame_exclude_t)->deep_delete(); } #line 2842 "bison_parser.cpp" /* yacc.c:1257 */ break; case 319: /* opt_distinct */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_distinct_t) != NULL) ((*yyvaluep).opt_distinct_t)->deep_delete(); } #line 2848 "bison_parser.cpp" /* yacc.c:1257 */ break; case 320: /* select_list */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).select_list_t) != NULL) ((*yyvaluep).select_list_t)->deep_delete(); } #line 2854 "bison_parser.cpp" /* yacc.c:1257 */ break; case 321: /* opt_from_clause */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_from_clause_t) != NULL) ((*yyvaluep).opt_from_clause_t)->deep_delete(); } #line 2860 "bison_parser.cpp" /* yacc.c:1257 */ break; case 322: /* from_clause */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).from_clause_t) != NULL) ((*yyvaluep).from_clause_t)->deep_delete(); } #line 2866 "bison_parser.cpp" /* yacc.c:1257 */ break; case 323: /* opt_where */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_where_t) != NULL) ((*yyvaluep).opt_where_t)->deep_delete(); } #line 2872 "bison_parser.cpp" /* yacc.c:1257 */ break; case 324: /* opt_group */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_group_t) != NULL) ((*yyvaluep).opt_group_t)->deep_delete(); } #line 2878 "bison_parser.cpp" /* yacc.c:1257 */ break; case 325: /* opt_having */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_having_t) != NULL) ((*yyvaluep).opt_having_t)->deep_delete(); } #line 2884 "bison_parser.cpp" /* yacc.c:1257 */ break; case 326: /* opt_order */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_order_t) != NULL) ((*yyvaluep).opt_order_t)->deep_delete(); } #line 2890 "bison_parser.cpp" /* yacc.c:1257 */ break; case 327: /* order_list */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).order_list_t) != NULL) ((*yyvaluep).order_list_t)->deep_delete(); } #line 2896 "bison_parser.cpp" /* yacc.c:1257 */ break; case 328: /* order_desc */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).order_desc_t) != NULL) ((*yyvaluep).order_desc_t)->deep_delete(); } #line 2902 "bison_parser.cpp" /* yacc.c:1257 */ break; case 329: /* opt_order_type */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_order_type_t) != NULL) ((*yyvaluep).opt_order_type_t)->deep_delete(); } #line 2908 "bison_parser.cpp" /* yacc.c:1257 */ break; case 330: /* opt_top */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_top_t) != NULL) ((*yyvaluep).opt_top_t)->deep_delete(); } #line 2914 "bison_parser.cpp" /* yacc.c:1257 */ break; case 331: /* opt_limit */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_limit_t) != NULL) ((*yyvaluep).opt_limit_t)->deep_delete(); } #line 2920 "bison_parser.cpp" /* yacc.c:1257 */ break; case 332: /* expr_list */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).expr_list_t) != NULL) ((*yyvaluep).expr_list_t)->deep_delete(); } #line 2926 "bison_parser.cpp" /* yacc.c:1257 */ break; case 333: /* opt_literal_list */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_literal_list_t) != NULL) ((*yyvaluep).opt_literal_list_t)->deep_delete(); } #line 2932 "bison_parser.cpp" /* yacc.c:1257 */ break; case 334: /* literal_list */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).literal_list_t) != NULL) ((*yyvaluep).literal_list_t)->deep_delete(); } #line 2938 "bison_parser.cpp" /* yacc.c:1257 */ break; case 335: /* expr_alias */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).expr_alias_t) != NULL) ((*yyvaluep).expr_alias_t)->deep_delete(); } #line 2944 "bison_parser.cpp" /* yacc.c:1257 */ break; case 336: /* expr */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).expr_t) != NULL) ((*yyvaluep).expr_t)->deep_delete(); } #line 2950 "bison_parser.cpp" /* yacc.c:1257 */ break; case 337: /* operand */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).operand_t) != NULL) ((*yyvaluep).operand_t)->deep_delete(); } #line 2956 "bison_parser.cpp" /* yacc.c:1257 */ break; case 338: /* cast_expr */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).cast_expr_t) != NULL) ((*yyvaluep).cast_expr_t)->deep_delete(); } #line 2962 "bison_parser.cpp" /* yacc.c:1257 */ break; case 339: /* scalar_expr */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).scalar_expr_t) != NULL) ((*yyvaluep).scalar_expr_t)->deep_delete(); } #line 2968 "bison_parser.cpp" /* yacc.c:1257 */ break; case 340: /* unary_expr */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).unary_expr_t) != NULL) ((*yyvaluep).unary_expr_t)->deep_delete(); } #line 2974 "bison_parser.cpp" /* yacc.c:1257 */ break; case 341: /* binary_expr */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).binary_expr_t) != NULL) ((*yyvaluep).binary_expr_t)->deep_delete(); } #line 2980 "bison_parser.cpp" /* yacc.c:1257 */ break; case 342: /* logic_expr */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).logic_expr_t) != NULL) ((*yyvaluep).logic_expr_t)->deep_delete(); } #line 2986 "bison_parser.cpp" /* yacc.c:1257 */ break; case 343: /* in_expr */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).in_expr_t) != NULL) ((*yyvaluep).in_expr_t)->deep_delete(); } #line 2992 "bison_parser.cpp" /* yacc.c:1257 */ break; case 344: /* case_expr */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).case_expr_t) != NULL) ((*yyvaluep).case_expr_t)->deep_delete(); } #line 2998 "bison_parser.cpp" /* yacc.c:1257 */ break; case 345: /* case_list */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).case_list_t) != NULL) ((*yyvaluep).case_list_t)->deep_delete(); } #line 3004 "bison_parser.cpp" /* yacc.c:1257 */ break; case 346: /* exists_expr */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).exists_expr_t) != NULL) ((*yyvaluep).exists_expr_t)->deep_delete(); } #line 3010 "bison_parser.cpp" /* yacc.c:1257 */ break; case 347: /* comp_expr */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).comp_expr_t) != NULL) ((*yyvaluep).comp_expr_t)->deep_delete(); } #line 3016 "bison_parser.cpp" /* yacc.c:1257 */ break; case 348: /* function_expr */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).function_expr_t) != NULL) ((*yyvaluep).function_expr_t)->deep_delete(); } #line 3022 "bison_parser.cpp" /* yacc.c:1257 */ break; case 349: /* opt_over_clause */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_over_clause_t) != NULL) ((*yyvaluep).opt_over_clause_t)->deep_delete(); } #line 3028 "bison_parser.cpp" /* yacc.c:1257 */ break; case 350: /* opt_filter_clause */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_filter_clause_t) != NULL) ((*yyvaluep).opt_filter_clause_t)->deep_delete(); } #line 3034 "bison_parser.cpp" /* yacc.c:1257 */ break; case 351: /* extract_expr */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).extract_expr_t) != NULL) ((*yyvaluep).extract_expr_t)->deep_delete(); } #line 3040 "bison_parser.cpp" /* yacc.c:1257 */ break; case 352: /* datetime_field */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).datetime_field_t) != NULL) ((*yyvaluep).datetime_field_t)->deep_delete(); } #line 3046 "bison_parser.cpp" /* yacc.c:1257 */ break; case 353: /* array_expr */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).array_expr_t) != NULL) ((*yyvaluep).array_expr_t)->deep_delete(); } #line 3052 "bison_parser.cpp" /* yacc.c:1257 */ break; case 354: /* array_index */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).array_index_t) != NULL) ((*yyvaluep).array_index_t)->deep_delete(); } #line 3058 "bison_parser.cpp" /* yacc.c:1257 */ break; case 355: /* between_expr */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).between_expr_t) != NULL) ((*yyvaluep).between_expr_t)->deep_delete(); } #line 3064 "bison_parser.cpp" /* yacc.c:1257 */ break; case 356: /* column_name */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).column_name_t) != NULL) ((*yyvaluep).column_name_t)->deep_delete(); } #line 3070 "bison_parser.cpp" /* yacc.c:1257 */ break; case 357: /* literal */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).literal_t) != NULL) ((*yyvaluep).literal_t)->deep_delete(); } #line 3076 "bison_parser.cpp" /* yacc.c:1257 */ break; case 358: /* string_literal */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).string_literal_t) != NULL) ((*yyvaluep).string_literal_t)->deep_delete(); } #line 3082 "bison_parser.cpp" /* yacc.c:1257 */ break; case 359: /* bool_literal */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).bool_literal_t) != NULL) ((*yyvaluep).bool_literal_t)->deep_delete(); } #line 3088 "bison_parser.cpp" /* yacc.c:1257 */ break; case 360: /* num_literal */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).num_literal_t) != NULL) ((*yyvaluep).num_literal_t)->deep_delete(); } #line 3094 "bison_parser.cpp" /* yacc.c:1257 */ break; case 361: /* int_literal */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).int_literal_t) != NULL) ((*yyvaluep).int_literal_t)->deep_delete(); } #line 3100 "bison_parser.cpp" /* yacc.c:1257 */ break; case 362: /* null_literal */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).null_literal_t) != NULL) ((*yyvaluep).null_literal_t)->deep_delete(); } #line 3106 "bison_parser.cpp" /* yacc.c:1257 */ break; case 363: /* param_expr */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).param_expr_t) != NULL) ((*yyvaluep).param_expr_t)->deep_delete(); } #line 3112 "bison_parser.cpp" /* yacc.c:1257 */ break; case 364: /* table_ref */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).table_ref_t) != NULL) ((*yyvaluep).table_ref_t)->deep_delete(); } #line 3118 "bison_parser.cpp" /* yacc.c:1257 */ break; case 365: /* table_prefix */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).table_prefix_t) != NULL) ((*yyvaluep).table_prefix_t)->deep_delete(); } #line 3124 "bison_parser.cpp" /* yacc.c:1257 */ break; case 366: /* join_op */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).join_op_t) != NULL) ((*yyvaluep).join_op_t)->deep_delete(); } #line 3130 "bison_parser.cpp" /* yacc.c:1257 */ break; case 367: /* opt_index */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_index_t) != NULL) ((*yyvaluep).opt_index_t)->deep_delete(); } #line 3136 "bison_parser.cpp" /* yacc.c:1257 */ break; case 368: /* opt_on */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_on_t) != NULL) ((*yyvaluep).opt_on_t)->deep_delete(); } #line 3142 "bison_parser.cpp" /* yacc.c:1257 */ break; case 369: /* opt_using */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_using_t) != NULL) ((*yyvaluep).opt_using_t)->deep_delete(); } #line 3148 "bison_parser.cpp" /* yacc.c:1257 */ break; case 370: /* table_ref_name_no_alias */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).table_ref_name_no_alias_t) != NULL) ((*yyvaluep).table_ref_name_no_alias_t)->deep_delete(); } #line 3154 "bison_parser.cpp" /* yacc.c:1257 */ break; case 371: /* table_name */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).table_name_t) != NULL) ((*yyvaluep).table_name_t)->deep_delete(); } #line 3160 "bison_parser.cpp" /* yacc.c:1257 */ break; case 372: /* alias */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).alias_t) != NULL) ((*yyvaluep).alias_t)->deep_delete(); } #line 3166 "bison_parser.cpp" /* yacc.c:1257 */ break; case 373: /* opt_alias */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_alias_t) != NULL) ((*yyvaluep).opt_alias_t)->deep_delete(); } #line 3172 "bison_parser.cpp" /* yacc.c:1257 */ break; case 374: /* opt_with_clause */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_with_clause_t) != NULL) ((*yyvaluep).opt_with_clause_t)->deep_delete(); } #line 3178 "bison_parser.cpp" /* yacc.c:1257 */ break; case 375: /* with_clause */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).with_clause_t) != NULL) ((*yyvaluep).with_clause_t)->deep_delete(); } #line 3184 "bison_parser.cpp" /* yacc.c:1257 */ break; case 376: /* with_description_list */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).with_description_list_t) != NULL) ((*yyvaluep).with_description_list_t)->deep_delete(); } #line 3190 "bison_parser.cpp" /* yacc.c:1257 */ break; case 377: /* with_description */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).with_description_t) != NULL) ((*yyvaluep).with_description_t)->deep_delete(); } #line 3196 "bison_parser.cpp" /* yacc.c:1257 */ break; case 378: /* join_kw */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).join_kw_t) != NULL) ((*yyvaluep).join_kw_t)->deep_delete(); } #line 3202 "bison_parser.cpp" /* yacc.c:1257 */ break; case 379: /* opt_semicolon */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).opt_semicolon_t) != NULL) ((*yyvaluep).opt_semicolon_t)->deep_delete(); } #line 3208 "bison_parser.cpp" /* yacc.c:1257 */ break; case 380: /* ident_commalist */ #line 536 "bison_parser.y" /* yacc.c:1257 */ { if (((*yyvaluep).ident_commalist_t) != NULL) ((*yyvaluep).ident_commalist_t)->deep_delete(); } #line 3214 "bison_parser.cpp" /* yacc.c:1257 */ break; default: break; } YY_IGNORE_MAYBE_UNINITIALIZED_END } /*----------. | yyparse. | `----------*/ int yyparse(Program* result, yyscan_t scanner) { /* The lookahead symbol. */ int yychar; /* The semantic value of the lookahead symbol. */ /* Default value used for initialization, for pacifying older GCCs or non-GCC compilers. */ YY_INITIAL_VALUE(static YYSTYPE yyval_default;) YYSTYPE yylval YY_INITIAL_VALUE(= yyval_default); /* Location data for the lookahead symbol. */ static YYLTYPE yyloc_default #if defined HSQL_LTYPE_IS_TRIVIAL && HSQL_LTYPE_IS_TRIVIAL = {1, 1, 1, 1} #endif ; YYLTYPE yylloc = yyloc_default; /* Number of syntax errors so far. */ int yynerrs; int yystate; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; /* The stacks and their tools: 'yyss': related to states. 'yyvs': related to semantic values. 'yyls': related to locations. Refer to the stacks through separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* The state stack. */ yytype_int16 yyssa[YYINITDEPTH]; yytype_int16* yyss; yytype_int16* yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE* yyvs; YYSTYPE* yyvsp; /* The location stack. */ YYLTYPE yylsa[YYINITDEPTH]; YYLTYPE* yyls; YYLTYPE* yylsp; /* The locations where the error started and ended. */ YYLTYPE yyerror_range[3]; YYSIZE_T yystacksize; int yyn; int yyresult; /* Lookahead token as an internal (translated) token number. */ int yytoken = 0; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; YYLTYPE yyloc; #if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; char* yymsg = yymsgbuf; YYSIZE_T yymsg_alloc = sizeof yymsgbuf; #endif #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N), yylsp -= (N)) /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; yyssp = yyss = yyssa; yyvsp = yyvs = yyvsa; yylsp = yyls = yylsa; yystacksize = YYINITDEPTH; YYDPRINTF((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ /* User initialization code. */ #line 73 "bison_parser.y" /* yacc.c:1431 */ { // Initialize yylloc.first_column = 0; yylloc.last_column = 0; yylloc.first_line = 0; yylloc.last_line = 0; yylloc.total_column = 0; yylloc.string_length = 0; } #line 3332 "bison_parser.cpp" /* yacc.c:1431 */ yylsp[0] = yylloc; goto yysetstate; /*------------------------------------------------------------. | yynewstate -- push a new state, which is found in yystate. | `------------------------------------------------------------*/ yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; /*--------------------------------------------------------------------. | yynewstate -- set current state (the top of the stack) to yystate. | `--------------------------------------------------------------------*/ yysetstate: *yyssp = (yytype_int16)yystate; if (yyss + yystacksize - 1 <= yyssp) #if !defined yyoverflow && !defined YYSTACK_RELOCATE goto yyexhaustedlab; #else { /* Get the current used size of the three stacks, in elements. */ YYSIZE_T yysize = (YYSIZE_T)(yyssp - yyss + 1); #if defined yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ YYSTYPE* yyvs1 = yyvs; yytype_int16* yyss1 = yyss; YYLTYPE* yyls1 = yyls; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow(YY_("memory exhausted"), &yyss1, yysize * sizeof(*yyssp), &yyvs1, yysize * sizeof(*yyvsp), &yyls1, yysize * sizeof(*yylsp), &yystacksize); yyss = yyss1; yyvs = yyvs1; yyls = yyls1; } #else /* defined YYSTACK_RELOCATE */ /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; { yytype_int16* yyss1 = yyss; union yyalloc* yyptr = (union yyalloc*)YYSTACK_ALLOC(YYSTACK_BYTES(yystacksize)); if (!yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE(yyss_alloc, yyss); YYSTACK_RELOCATE(yyvs_alloc, yyvs); YYSTACK_RELOCATE(yyls_alloc, yyls); #undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE(yyss1); } #endif yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; yylsp = yyls + yysize - 1; YYDPRINTF( (stderr, "Stack size increased to %lu\n", (unsigned long)yystacksize)); if (yyss + yystacksize - 1 <= yyssp) YYABORT; } #endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */ YYDPRINTF((stderr, "Entering state %d\n", yystate)); if (yystate == YYFINAL) YYACCEPT; goto yybackup; /*-----------. | yybackup. | `-----------*/ yybackup: /* Do appropriate processing given the current state. Read a lookahead token if we need one and don't already have one. */ /* First try to decide what to do without reference to lookahead token. */ yyn = yypact[yystate]; if (yypact_value_is_default(yyn)) goto yydefault; /* Not known => get a lookahead token if don't already have one. */ /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF((stderr, "Reading a token: ")); yychar = yylex(&yylval, &yylloc, scanner); } if (yychar <= YYEOF) { yychar = yytoken = YYEOF; YYDPRINTF((stderr, "Now at end of input.\n")); } else { yytoken = YYTRANSLATE(yychar); YY_SYMBOL_PRINT("Next token is", yytoken, &yylval, &yylloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ yyn += yytoken; if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) goto yydefault; yyn = yytable[yyn]; if (yyn <= 0) { if (yytable_value_is_error(yyn)) goto yyerrlab; yyn = -yyn; goto yyreduce; } /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; /* Shift the lookahead token. */ YY_SYMBOL_PRINT("Shifting", yytoken, &yylval, &yylloc); /* Discard the shifted token. */ yychar = YYEMPTY; yystate = yyn; YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END *++yylsp = yylloc; goto yynewstate; /*-----------------------------------------------------------. | yydefault -- do the default action for the current state. | `-----------------------------------------------------------*/ yydefault: yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; goto yyreduce; /*-----------------------------. | yyreduce -- do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ yylen = yyr2[yyn]; /* If YYLEN is nonzero, implement the default value of the action: '$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison users should not rely upon it. Assigning to YYVAL unconditionally makes the parser a bit smaller, and it avoids a GCC warning that YYVAL may be used uninitialized. */ yyval = yyvsp[1 - yylen]; /* Default location. */ YYLLOC_DEFAULT(yyloc, (yylsp - yylen), yylen); yyerror_range[1] = yyloc; YY_REDUCE_PRINT(yyn); switch (yyn) { case 2: #line 573 "bison_parser.y" /* yacc.c:1652 */ { (yyval.program_t) = NULL; result->statement_list_ = (yyvsp[-1].statement_list_t); result->opt_semicolon_ = (yyvsp[0].opt_semicolon_t); } #line 3530 "bison_parser.cpp" /* yacc.c:1652 */ break; case 3: #line 582 "bison_parser.y" /* yacc.c:1652 */ { (yyval.statement_list_t) = new StatementList(); (yyval.statement_list_t) ->v_statement_list_.push_back((yyvsp[0].statement_t)); } #line 3539 "bison_parser.cpp" /* yacc.c:1652 */ break; case 4: #line 586 "bison_parser.y" /* yacc.c:1652 */ { (yyvsp[-2].statement_list_t) ->v_statement_list_.push_back((yyvsp[0].statement_t)); (yyval.statement_list_t) = (yyvsp[-2].statement_list_t); } #line 3548 "bison_parser.cpp" /* yacc.c:1652 */ break; case 5: #line 593 "bison_parser.y" /* yacc.c:1652 */ { (yyval.statement_t) = new Statement(); (yyval.statement_t)->sub_type_ = CASE1; (yyval.statement_t)->prepare_statement_ = (yyvsp[-1].prepare_statement_t); (yyval.statement_t)->optional_hints_ = (yyvsp[0].optional_hints_t); } #line 3559 "bison_parser.cpp" /* yacc.c:1652 */ break; case 6: #line 599 "bison_parser.y" /* yacc.c:1652 */ { (yyval.statement_t) = new Statement(); (yyval.statement_t)->sub_type_ = CASE0; (yyval.statement_t)->preparable_statement_ = (yyvsp[-1].preparable_statement_t); (yyval.statement_t)->optional_hints_ = (yyvsp[0].optional_hints_t); } #line 3570 "bison_parser.cpp" /* yacc.c:1652 */ break; case 7: #line 605 "bison_parser.y" /* yacc.c:1652 */ { (yyval.statement_t) = new Statement(); (yyval.statement_t)->sub_type_ = CASE2; (yyval.statement_t)->show_statement_ = (yyvsp[0].show_statement_t); } #line 3580 "bison_parser.cpp" /* yacc.c:1652 */ break; case 8: #line 611 "bison_parser.y" /* yacc.c:1652 */ { (yyval.statement_t) = new Statement(); (yyval.statement_t)->sub_type_ = CASE3; (yyval.statement_t)->cmd_ = (yyvsp[0].cmd_t); } #line 3590 "bison_parser.cpp" /* yacc.c:1652 */ break; case 9: #line 620 "bison_parser.y" /* yacc.c:1652 */ { (yyval.cmd_t) = (yyvsp[0].cmd_pragma_t); } #line 3596 "bison_parser.cpp" /* yacc.c:1652 */ break; case 10: #line 621 "bison_parser.y" /* yacc.c:1652 */ { (yyval.cmd_t) = (yyvsp[0].cmd_reindex_t); } #line 3602 "bison_parser.cpp" /* yacc.c:1652 */ break; case 11: #line 622 "bison_parser.y" /* yacc.c:1652 */ { (yyval.cmd_t) = (yyvsp[0].cmd_analyze_t); } #line 3608 "bison_parser.cpp" /* yacc.c:1652 */ break; case 12: #line 623 "bison_parser.y" /* yacc.c:1652 */ { (yyval.cmd_t) = (yyvsp[0].cmd_attach_t); } #line 3614 "bison_parser.cpp" /* yacc.c:1652 */ break; case 13: #line 624 "bison_parser.y" /* yacc.c:1652 */ { (yyval.cmd_t) = (yyvsp[0].cmd_detach_t); } #line 3620 "bison_parser.cpp" /* yacc.c:1652 */ break; case 14: #line 625 "bison_parser.y" /* yacc.c:1652 */ { (yyval.cmd_t) = (yyvsp[0].cmd_release_t); } #line 3626 "bison_parser.cpp" /* yacc.c:1652 */ break; case 15: #line 626 "bison_parser.y" /* yacc.c:1652 */ { (yyval.cmd_t) = (yyvsp[0].rollback_statement_t); } #line 3632 "bison_parser.cpp" /* yacc.c:1652 */ break; case 16: #line 627 "bison_parser.y" /* yacc.c:1652 */ { (yyval.cmd_t) = (yyvsp[0].vacuum_statement_t); } #line 3638 "bison_parser.cpp" /* yacc.c:1652 */ break; case 17: #line 628 "bison_parser.y" /* yacc.c:1652 */ { (yyval.cmd_t) = (yyvsp[0].begin_statement_t); } #line 3644 "bison_parser.cpp" /* yacc.c:1652 */ break; case 18: #line 629 "bison_parser.y" /* yacc.c:1652 */ { (yyval.cmd_t) = (yyvsp[0].commit_statement_t); } #line 3650 "bison_parser.cpp" /* yacc.c:1652 */ break; case 19: #line 633 "bison_parser.y" /* yacc.c:1652 */ { (yyval.cmd_release_t) = new CmdRelease(); (yyval.cmd_release_t)->sub_type_ = CASE0; (yyval.cmd_release_t)->savepoint_name_ = (yyvsp[0].savepoint_name_t); } #line 3660 "bison_parser.cpp" /* yacc.c:1652 */ break; case 20: #line 638 "bison_parser.y" /* yacc.c:1652 */ { (yyval.cmd_release_t) = new CmdRelease(); (yyval.cmd_release_t)->sub_type_ = CASE1; (yyval.cmd_release_t)->savepoint_name_ = (yyvsp[0].savepoint_name_t); } #line 3670 "bison_parser.cpp" /* yacc.c:1652 */ break; case 21: #line 646 "bison_parser.y" /* yacc.c:1652 */ { (yyval.savepoint_name_t) = new SavepointName(); (yyval.savepoint_name_t)->id_ = new Identifier((yyvsp[0].sval), id_savepoint_name); free((yyvsp[0].sval)); } #line 3680 "bison_parser.cpp" /* yacc.c:1652 */ break; case 22: #line 654 "bison_parser.y" /* yacc.c:1652 */ { (yyval.cmd_pragma_t) = new CmdPragma(); (yyval.cmd_pragma_t)->sub_type_ = CASE0; (yyval.cmd_pragma_t)->pragma_key_ = (yyvsp[0].pragma_key_t); } #line 3690 "bison_parser.cpp" /* yacc.c:1652 */ break; case 23: #line 659 "bison_parser.y" /* yacc.c:1652 */ { (yyval.cmd_pragma_t) = new CmdPragma(); (yyval.cmd_pragma_t)->sub_type_ = CASE1; (yyval.cmd_pragma_t)->pragma_key_ = (yyvsp[-2].pragma_key_t); (yyval.cmd_pragma_t)->pragma_value_ = (yyvsp[0].pragma_value_t); } #line 3701 "bison_parser.cpp" /* yacc.c:1652 */ break; case 24: #line 665 "bison_parser.y" /* yacc.c:1652 */ { (yyval.cmd_pragma_t) = new CmdPragma(); (yyval.cmd_pragma_t)->sub_type_ = CASE2; (yyval.cmd_pragma_t)->pragma_key_ = (yyvsp[-3].pragma_key_t); (yyval.cmd_pragma_t)->pragma_value_ = (yyvsp[-1].pragma_value_t); } #line 3712 "bison_parser.cpp" /* yacc.c:1652 */ break; case 25: #line 674 "bison_parser.y" /* yacc.c:1652 */ { (yyval.cmd_reindex_t) = new CmdReindex(); (yyval.cmd_reindex_t)->sub_type_ = CASE0; } #line 3718 "bison_parser.cpp" /* yacc.c:1652 */ break; case 26: #line 675 "bison_parser.y" /* yacc.c:1652 */ { (yyval.cmd_reindex_t) = new CmdReindex(); (yyval.cmd_reindex_t)->sub_type_ = CASE1; (yyval.cmd_reindex_t)->table_name_ = (yyvsp[0].table_name_t); (yyval.cmd_reindex_t)->table_name_->table_name_->id_type_ = id_top_table_name; } #line 3724 "bison_parser.cpp" /* yacc.c:1652 */ break; case 27: #line 679 "bison_parser.y" /* yacc.c:1652 */ { (yyval.cmd_analyze_t) = new CmdAnalyze(); (yyval.cmd_analyze_t)->sub_type_ = CASE0; } #line 3730 "bison_parser.cpp" /* yacc.c:1652 */ break; case 28: #line 680 "bison_parser.y" /* yacc.c:1652 */ { (yyval.cmd_analyze_t) = new CmdAnalyze(); (yyval.cmd_analyze_t)->sub_type_ = CASE1; (yyval.cmd_analyze_t)->table_name_ = (yyvsp[0].table_name_t); (yyval.cmd_analyze_t)->table_name_->table_name_->id_type_ = id_top_table_name; } #line 3736 "bison_parser.cpp" /* yacc.c:1652 */ break; case 29: #line 684 "bison_parser.y" /* yacc.c:1652 */ { (yyval.cmd_attach_t) = new CmdAttach(); (yyval.cmd_attach_t)->sub_type_ = CASE0; (yyval.cmd_attach_t)->expr_ = (yyvsp[-2].expr_t); (yyval.cmd_attach_t)->schema_name_ = (yyvsp[0].schema_name_t); } #line 3747 "bison_parser.cpp" /* yacc.c:1652 */ break; case 30: #line 690 "bison_parser.y" /* yacc.c:1652 */ { (yyval.cmd_attach_t) = new CmdAttach(); (yyval.cmd_attach_t)->sub_type_ = CASE1; (yyval.cmd_attach_t)->expr_ = (yyvsp[-2].expr_t); (yyval.cmd_attach_t)->schema_name_ = (yyvsp[0].schema_name_t); } #line 3758 "bison_parser.cpp" /* yacc.c:1652 */ break; case 31: #line 699 "bison_parser.y" /* yacc.c:1652 */ { (yyval.cmd_detach_t) = new CmdDetach(); (yyval.cmd_detach_t)->sub_type_ = CASE0; (yyval.cmd_detach_t)->schema_name_ = (yyvsp[0].schema_name_t); } #line 3768 "bison_parser.cpp" /* yacc.c:1652 */ break; case 32: #line 704 "bison_parser.y" /* yacc.c:1652 */ { (yyval.cmd_detach_t) = new CmdDetach(); (yyval.cmd_detach_t)->sub_type_ = CASE1; (yyval.cmd_detach_t)->schema_name_ = (yyvsp[0].schema_name_t); } #line 3778 "bison_parser.cpp" /* yacc.c:1652 */ break; case 33: #line 712 "bison_parser.y" /* yacc.c:1652 */ { (yyval.pragma_key_t) = new PragmaKey(); (yyval.pragma_key_t)->sub_type_ = CASE0; (yyval.pragma_key_t)->pragma_name_ = (yyvsp[0].pragma_name_t); } #line 3784 "bison_parser.cpp" /* yacc.c:1652 */ break; case 34: #line 713 "bison_parser.y" /* yacc.c:1652 */ { (yyval.pragma_key_t) = new PragmaKey(); (yyval.pragma_key_t)->sub_type_ = CASE1; (yyval.pragma_key_t)->schema_name_ = (yyvsp[-2].schema_name_t); (yyval.pragma_key_t)->pragma_name_ = (yyvsp[0].pragma_name_t); } #line 3790 "bison_parser.cpp" /* yacc.c:1652 */ break; case 35: #line 717 "bison_parser.y" /* yacc.c:1652 */ { (yyval.pragma_value_t) = new PragmaValue(); (yyval.pragma_value_t)->sub_type_ = CASE0; (yyval.pragma_value_t)->num_literal_ = (yyvsp[0].num_literal_t); } #line 3796 "bison_parser.cpp" /* yacc.c:1652 */ break; case 36: #line 718 "bison_parser.y" /* yacc.c:1652 */ { (yyval.pragma_value_t) = new PragmaValue(); (yyval.pragma_value_t)->sub_type_ = CASE1; (yyval.pragma_value_t)->string_literal_ = (yyvsp[0].string_literal_t); } #line 3802 "bison_parser.cpp" /* yacc.c:1652 */ break; case 37: #line 719 "bison_parser.y" /* yacc.c:1652 */ { (yyval.pragma_value_t) = new PragmaValue(); (yyval.pragma_value_t)->sub_type_ = CASE2; (yyval.pragma_value_t)->id_ = new Identifier((yyvsp[0].sval), id_pragma_value); free((yyvsp[0].sval)); } #line 3808 "bison_parser.cpp" /* yacc.c:1652 */ break; case 38: #line 720 "bison_parser.y" /* yacc.c:1652 */ { (yyval.pragma_value_t) = new PragmaValue(); (yyval.pragma_value_t)->sub_type_ = CASE2; (yyval.pragma_value_t)->id_ = new Identifier("ON", id_pragma_value); } #line 3814 "bison_parser.cpp" /* yacc.c:1652 */ break; case 39: #line 721 "bison_parser.y" /* yacc.c:1652 */ { (yyval.pragma_value_t) = new PragmaValue(); (yyval.pragma_value_t)->sub_type_ = CASE2; (yyval.pragma_value_t)->id_ = new Identifier("DELETE", id_pragma_value); } #line 3820 "bison_parser.cpp" /* yacc.c:1652 */ break; case 40: #line 722 "bison_parser.y" /* yacc.c:1652 */ { (yyval.pragma_value_t) = new PragmaValue(); (yyval.pragma_value_t)->sub_type_ = CASE2; (yyval.pragma_value_t)->id_ = new Identifier("DEFAULT", id_pragma_value); } #line 3826 "bison_parser.cpp" /* yacc.c:1652 */ break; case 41: #line 726 "bison_parser.y" /* yacc.c:1652 */ { (yyval.schema_name_t) = new SchemaName(); (yyval.schema_name_t)->id_ = new Identifier((yyvsp[0].sval), id_schema_name); free((yyvsp[0].sval)); } #line 3834 "bison_parser.cpp" /* yacc.c:1652 */ break; case 42: #line 732 "bison_parser.y" /* yacc.c:1652 */ { (yyval.pragma_name_t) = new PragmaName(); (yyval.pragma_name_t)->id_ = new Identifier((yyvsp[0].sval), id_pragma_name); free((yyvsp[0].sval)); } #line 3840 "bison_parser.cpp" /* yacc.c:1652 */ break; case 43: #line 738 "bison_parser.y" /* yacc.c:1652 */ { (yyval.preparable_statement_t) = (yyvsp[0].select_statement_t); } #line 3846 "bison_parser.cpp" /* yacc.c:1652 */ break; case 44: #line 739 "bison_parser.y" /* yacc.c:1652 */ { (yyval.preparable_statement_t) = (yyvsp[0].import_statement_t); } #line 3852 "bison_parser.cpp" /* yacc.c:1652 */ break; case 45: #line 740 "bison_parser.y" /* yacc.c:1652 */ { (yyval.preparable_statement_t) = (yyvsp[0].create_statement_t); } #line 3858 "bison_parser.cpp" /* yacc.c:1652 */ break; case 46: #line 741 "bison_parser.y" /* yacc.c:1652 */ { (yyval.preparable_statement_t) = (yyvsp[0].insert_statement_t); } #line 3864 "bison_parser.cpp" /* yacc.c:1652 */ break; case 47: #line 742 "bison_parser.y" /* yacc.c:1652 */ { (yyval.preparable_statement_t) = (yyvsp[0].delete_statement_t); } #line 3870 "bison_parser.cpp" /* yacc.c:1652 */ break; case 48: #line 743 "bison_parser.y" /* yacc.c:1652 */ { (yyval.preparable_statement_t) = (yyvsp[0].delete_statement_t); } #line 3876 "bison_parser.cpp" /* yacc.c:1652 */ break; case 49: #line 744 "bison_parser.y" /* yacc.c:1652 */ { (yyval.preparable_statement_t) = (yyvsp[0].update_statement_t); } #line 3882 "bison_parser.cpp" /* yacc.c:1652 */ break; case 50: #line 745 "bison_parser.y" /* yacc.c:1652 */ { (yyval.preparable_statement_t) = (yyvsp[0].drop_statement_t); } #line 3888 "bison_parser.cpp" /* yacc.c:1652 */ break; case 51: #line 746 "bison_parser.y" /* yacc.c:1652 */ { (yyval.preparable_statement_t) = (yyvsp[0].execute_statement_t); } #line 3894 "bison_parser.cpp" /* yacc.c:1652 */ break; case 52: #line 747 "bison_parser.y" /* yacc.c:1652 */ { (yyval.preparable_statement_t) = (yyvsp[0].alter_statement_t); } #line 3900 "bison_parser.cpp" /* yacc.c:1652 */ break; case 53: #line 751 "bison_parser.y" /* yacc.c:1652 */ { (yyval.rollback_statement_t) = new RollbackStatement(); (yyval.rollback_statement_t)->opt_transaction_ = (yyvsp[-1].opt_transaction_t); (yyval.rollback_statement_t)->opt_to_savepoint_ = (yyvsp[0].opt_to_savepoint_t); } #line 3910 "bison_parser.cpp" /* yacc.c:1652 */ break; case 54: #line 759 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_transaction_t) = new OptTransaction(); (yyval.opt_transaction_t)->sub_type_ = CASE0; (yyval.opt_transaction_t)->str_val_ = string("TRANSACTION"); } #line 3920 "bison_parser.cpp" /* yacc.c:1652 */ break; case 55: #line 764 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_transaction_t) = new OptTransaction(); (yyval.opt_transaction_t)->sub_type_ = CASE1; (yyval.opt_transaction_t)->str_val_ = string(""); } #line 3930 "bison_parser.cpp" /* yacc.c:1652 */ break; case 56: #line 772 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_to_savepoint_t) = new OptToSavepoint(); (yyval.opt_to_savepoint_t)->sub_type_ = CASE0; (yyval.opt_to_savepoint_t)->savepoint_name_ = (yyvsp[0].savepoint_name_t); } #line 3940 "bison_parser.cpp" /* yacc.c:1652 */ break; case 57: #line 777 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_to_savepoint_t) = new OptToSavepoint(); (yyval.opt_to_savepoint_t)->sub_type_ = CASE1; (yyval.opt_to_savepoint_t)->savepoint_name_ = (yyvsp[0].savepoint_name_t); } #line 3950 "bison_parser.cpp" /* yacc.c:1652 */ break; case 58: #line 782 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_to_savepoint_t) = new OptToSavepoint(); (yyval.opt_to_savepoint_t)->sub_type_ = CASE2; } #line 3959 "bison_parser.cpp" /* yacc.c:1652 */ break; case 59: #line 790 "bison_parser.y" /* yacc.c:1652 */ { (yyval.vacuum_statement_t) = new VacuumStatement(); (yyval.vacuum_statement_t)->sub_type_ = CASE0; (yyval.vacuum_statement_t)->opt_schema_name_ = (yyvsp[-2].opt_schema_name_t); (yyval.vacuum_statement_t)->file_path_ = (yyvsp[0].file_path_t); } #line 3970 "bison_parser.cpp" /* yacc.c:1652 */ break; case 60: #line 796 "bison_parser.y" /* yacc.c:1652 */ { (yyval.vacuum_statement_t) = new VacuumStatement(); (yyval.vacuum_statement_t)->sub_type_ = CASE1; (yyval.vacuum_statement_t)->opt_schema_name_ = (yyvsp[0].opt_schema_name_t); } #line 3980 "bison_parser.cpp" /* yacc.c:1652 */ break; case 61: #line 804 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_schema_name_t) = new OptSchemaName(); (yyval.opt_schema_name_t)->sub_type_ = CASE0; (yyval.opt_schema_name_t)->schema_name_ = (yyvsp[0].schema_name_t); } #line 3990 "bison_parser.cpp" /* yacc.c:1652 */ break; case 62: #line 809 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_schema_name_t) = new OptSchemaName(); (yyval.opt_schema_name_t)->sub_type_ = CASE1; } #line 3999 "bison_parser.cpp" /* yacc.c:1652 */ break; case 63: #line 816 "bison_parser.y" /* yacc.c:1652 */ { (yyval.begin_statement_t) = new BeginStatement(); (yyval.begin_statement_t)->sub_type_ = CASE0; (yyval.begin_statement_t)->opt_transaction_ = (yyvsp[0].opt_transaction_t); } #line 4009 "bison_parser.cpp" /* yacc.c:1652 */ break; case 64: #line 821 "bison_parser.y" /* yacc.c:1652 */ { (yyval.begin_statement_t) = new BeginStatement(); (yyval.begin_statement_t)->sub_type_ = CASE1; (yyval.begin_statement_t)->opt_transaction_ = (yyvsp[0].opt_transaction_t); } #line 4019 "bison_parser.cpp" /* yacc.c:1652 */ break; case 65: #line 826 "bison_parser.y" /* yacc.c:1652 */ { (yyval.begin_statement_t) = new BeginStatement(); (yyval.begin_statement_t)->sub_type_ = CASE2; (yyval.begin_statement_t)->opt_transaction_ = (yyvsp[0].opt_transaction_t); } #line 4029 "bison_parser.cpp" /* yacc.c:1652 */ break; case 66: #line 831 "bison_parser.y" /* yacc.c:1652 */ { (yyval.begin_statement_t) = new BeginStatement(); (yyval.begin_statement_t)->sub_type_ = CASE3; (yyval.begin_statement_t)->opt_transaction_ = (yyvsp[0].opt_transaction_t); } #line 4039 "bison_parser.cpp" /* yacc.c:1652 */ break; case 67: #line 839 "bison_parser.y" /* yacc.c:1652 */ { (yyval.commit_statement_t) = new CommitStatement(); (yyval.commit_statement_t)->sub_type_ = CASE0; (yyval.commit_statement_t)->opt_transaction_ = (yyvsp[0].opt_transaction_t); } #line 4049 "bison_parser.cpp" /* yacc.c:1652 */ break; case 68: #line 844 "bison_parser.y" /* yacc.c:1652 */ { (yyval.commit_statement_t) = new CommitStatement(); (yyval.commit_statement_t)->sub_type_ = CASE1; (yyval.commit_statement_t)->opt_transaction_ = (yyvsp[0].opt_transaction_t); } #line 4059 "bison_parser.cpp" /* yacc.c:1652 */ break; case 69: #line 853 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_upsert_clause_t) = new OptUpsertClause(); (yyval.opt_upsert_clause_t)->sub_type_ = CASE0; (yyval.opt_upsert_clause_t)->upsert_clause_ = (yyvsp[0].upsert_clause_t); } #line 4065 "bison_parser.cpp" /* yacc.c:1652 */ break; case 70: #line 854 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_upsert_clause_t) = new OptUpsertClause(); (yyval.opt_upsert_clause_t)->sub_type_ = CASE1; } #line 4071 "bison_parser.cpp" /* yacc.c:1652 */ break; case 71: #line 857 "bison_parser.y" /* yacc.c:1652 */ { (yyval.upsert_clause_t) = new UpsertClause(); (yyval.upsert_clause_t)->sub_type_ = CASE0; } #line 4080 "bison_parser.cpp" /* yacc.c:1652 */ break; case 72: #line 861 "bison_parser.y" /* yacc.c:1652 */ { (yyval.upsert_clause_t) = new UpsertClause(); (yyval.upsert_clause_t)->sub_type_ = CASE1; (yyval.upsert_clause_t)->assign_list_ = (yyvsp[-1].assign_list_t); (yyval.upsert_clause_t)->opt_where1_ = (yyvsp[0].opt_where_t); } #line 4091 "bison_parser.cpp" /* yacc.c:1652 */ break; case 73: #line 867 "bison_parser.y" /* yacc.c:1652 */ { (yyval.upsert_clause_t) = new UpsertClause(); (yyval.upsert_clause_t)->sub_type_ = CASE2; (yyval.upsert_clause_t)->indexed_column_list_ = (yyvsp[-4].indexed_column_list_t); (yyval.upsert_clause_t)->opt_where1_ = (yyvsp[-2].opt_where_t); } #line 4102 "bison_parser.cpp" /* yacc.c:1652 */ break; case 74: #line 873 "bison_parser.y" /* yacc.c:1652 */ { (yyval.upsert_clause_t) = new UpsertClause(); (yyval.upsert_clause_t)->sub_type_ = CASE3; (yyval.upsert_clause_t)->indexed_column_list_ = (yyvsp[-7].indexed_column_list_t); (yyval.upsert_clause_t)->opt_where1_ = (yyvsp[-5].opt_where_t); (yyval.upsert_clause_t)->assign_list_ = (yyvsp[-1].assign_list_t); (yyval.upsert_clause_t)->opt_where2_ = (yyvsp[0].opt_where_t); } #line 4115 "bison_parser.cpp" /* yacc.c:1652 */ break; case 75: #line 885 "bison_parser.y" /* yacc.c:1652 */ { (yyval.indexed_column_list_t) = new IndexedColumnList(); (yyval.indexed_column_list_t) ->v_indexed_column_list_.push_back((yyvsp[0].indexed_column_t)); } #line 4124 "bison_parser.cpp" /* yacc.c:1652 */ break; case 76: #line 889 "bison_parser.y" /* yacc.c:1652 */ { (yyvsp[-2].indexed_column_list_t) ->v_indexed_column_list_.push_back((yyvsp[0].indexed_column_t)); (yyval.indexed_column_list_t) = (yyvsp[-2].indexed_column_list_t); } #line 4133 "bison_parser.cpp" /* yacc.c:1652 */ break; case 77: #line 896 "bison_parser.y" /* yacc.c:1652 */ { (yyval.indexed_column_t) = new IndexedColumn(); (yyval.indexed_column_t)->expr_ = (yyvsp[-2].expr_t); (yyval.indexed_column_t)->opt_collate_ = (yyvsp[-1].opt_collate_t); (yyval.indexed_column_t)->opt_order_type_ = (yyvsp[0].opt_order_type_t); } #line 4144 "bison_parser.cpp" /* yacc.c:1652 */ break; case 78: #line 905 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_collate_t) = new OptCollate(); (yyval.opt_collate_t)->sub_type_ = CASE0; (yyval.opt_collate_t)->collation_name_ = (yyvsp[0].collation_name_t); } #line 4154 "bison_parser.cpp" /* yacc.c:1652 */ break; case 79: #line 910 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_collate_t) = new OptCollate(); (yyval.opt_collate_t)->sub_type_ = CASE1; (yyval.opt_collate_t)->str_val_ = string(""); } #line 4164 "bison_parser.cpp" /* yacc.c:1652 */ break; case 80: #line 919 "bison_parser.y" /* yacc.c:1652 */ { (yyval.assign_list_t) = new AssignList(); (yyval.assign_list_t) ->v_assign_list_.push_back((yyvsp[0].assign_clause_t)); } #line 4174 "bison_parser.cpp" /* yacc.c:1652 */ break; case 81: #line 924 "bison_parser.y" /* yacc.c:1652 */ { (yyvsp[-2].assign_list_t) ->v_assign_list_.push_back((yyvsp[0].assign_clause_t)); (yyval.assign_list_t) = (yyvsp[-2].assign_list_t); } #line 4183 "bison_parser.cpp" /* yacc.c:1652 */ break; case 82: #line 932 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_null_t) = new OptNull(); (yyval.opt_null_t)->str_val_ = string("NULLS FIRST"); } #line 4192 "bison_parser.cpp" /* yacc.c:1652 */ break; case 83: #line 936 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_null_t) = new OptNull(); (yyval.opt_null_t)->str_val_ = string("NULLS LAST"); } #line 4201 "bison_parser.cpp" /* yacc.c:1652 */ break; case 84: #line 940 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_null_t) = new OptNull(); (yyval.opt_null_t)->str_val_ = string(""); } #line 4210 "bison_parser.cpp" /* yacc.c:1652 */ break; case 85: #line 947 "bison_parser.y" /* yacc.c:1652 */ { (yyval.assign_clause_t) = new AssignClause(); (yyval.assign_clause_t)->column_name_list_ = (yyvsp[-2].column_name_list_t); (yyval.assign_clause_t)->expr_ = (yyvsp[0].expr_t); } #line 4220 "bison_parser.cpp" /* yacc.c:1652 */ break; case 86: #line 955 "bison_parser.y" /* yacc.c:1652 */ { (yyval.column_name_list_t) = new ColumnNameList(); (yyval.column_name_list_t) ->v_column_name_list_.push_back((yyvsp[0].column_name_t)); } #line 4229 "bison_parser.cpp" /* yacc.c:1652 */ break; case 87: #line 959 "bison_parser.y" /* yacc.c:1652 */ { (yyvsp[-2].column_name_list_t) ->v_column_name_list_.push_back((yyvsp[0].column_name_t)); (yyval.column_name_list_t) = (yyvsp[-2].column_name_list_t); } #line 4238 "bison_parser.cpp" /* yacc.c:1652 */ break; case 88: #line 966 "bison_parser.y" /* yacc.c:1652 */ { (yyval.collation_name_t) = new CollationName(); (yyval.collation_name_t)->id_ = new Identifier((yyvsp[0].sval), id_collation_name); free((yyvsp[0].sval)); } #line 4248 "bison_parser.cpp" /* yacc.c:1652 */ break; case 89: #line 978 "bison_parser.y" /* yacc.c:1652 */ { (yyval.optional_hints_t) = new OptionalHints(); (yyval.optional_hints_t)->sub_type_ = CASE0; (yyval.optional_hints_t)->hint_list_ = (yyvsp[-1].hint_list_t); } #line 4258 "bison_parser.cpp" /* yacc.c:1652 */ break; case 90: #line 983 "bison_parser.y" /* yacc.c:1652 */ { (yyval.optional_hints_t) = new OptionalHints(); (yyval.optional_hints_t)->sub_type_ = CASE1; } #line 4264 "bison_parser.cpp" /* yacc.c:1652 */ break; case 91: #line 988 "bison_parser.y" /* yacc.c:1652 */ { (yyval.hint_list_t) = new HintList(); (yyval.hint_list_t)->v_hint_list_.push_back((yyvsp[0].hint_t)); } #line 4273 "bison_parser.cpp" /* yacc.c:1652 */ break; case 92: #line 992 "bison_parser.y" /* yacc.c:1652 */ { (yyvsp[-2].hint_list_t)->v_hint_list_.push_back((yyvsp[0].hint_t)); (yyval.hint_list_t) = (yyvsp[-2].hint_list_t); } #line 4279 "bison_parser.cpp" /* yacc.c:1652 */ break; case 93: #line 996 "bison_parser.y" /* yacc.c:1652 */ { (yyval.hint_t) = new Hint(); (yyval.hint_t)->sub_type_ = CASE1; (yyval.hint_t)->id_ = new Identifier((yyvsp[0].sval)); free((yyvsp[0].sval)); } #line 4290 "bison_parser.cpp" /* yacc.c:1652 */ break; case 94: #line 1002 "bison_parser.y" /* yacc.c:1652 */ { (yyval.hint_t) = new Hint(); (yyval.hint_t)->sub_type_ = CASE0; (yyval.hint_t)->id_ = new Identifier((yyvsp[-3].sval)); (yyval.hint_t)->literal_list_ = (yyvsp[-1].literal_list_t); free((yyvsp[-3].sval)); } #line 4302 "bison_parser.cpp" /* yacc.c:1652 */ break; case 95: #line 1016 "bison_parser.y" /* yacc.c:1652 */ { (yyval.prepare_statement_t) = new PrepareStatement(); (yyval.prepare_statement_t)->id_ = new Identifier((yyvsp[-2].sval)); (yyval.prepare_statement_t)->prep_target_que_ = (yyvsp[0].prepare_target_query_t); free((yyvsp[-2].sval)); } #line 4313 "bison_parser.cpp" /* yacc.c:1652 */ break; case 96: #line 1025 "bison_parser.y" /* yacc.c:1652 */ { (yyval.prepare_target_query_t) = new PrepareTargetQuery(); (yyval.prepare_target_query_t)->prep_target_que_ = "'" + string((yyvsp[0].sval)) + "'"; free((yyvsp[0].sval)); } #line 4323 "bison_parser.cpp" /* yacc.c:1652 */ break; case 97: #line 1033 "bison_parser.y" /* yacc.c:1652 */ { (yyval.execute_statement_t) = new ExecuteStatement(); (yyval.execute_statement_t)->sub_type_ = CASE0; (yyval.execute_statement_t)->id_ = new Identifier((yyvsp[0].sval)); free((yyvsp[0].sval)); } #line 4334 "bison_parser.cpp" /* yacc.c:1652 */ break; case 98: #line 1039 "bison_parser.y" /* yacc.c:1652 */ { (yyval.execute_statement_t) = new ExecuteStatement(); (yyval.execute_statement_t)->sub_type_ = CASE1; (yyval.execute_statement_t)->id_ = new Identifier((yyvsp[-3].sval)); (yyval.execute_statement_t)->opt_literal_list_ = (yyvsp[-1].opt_literal_list_t); free((yyvsp[-3].sval)); } #line 4346 "bison_parser.cpp" /* yacc.c:1652 */ break; case 99: #line 1053 "bison_parser.y" /* yacc.c:1652 */ { (yyval.import_statement_t) = new ImportStatement(); (yyval.import_statement_t)->import_file_type_ = (yyvsp[-4].import_file_type_t); (yyval.import_statement_t)->file_path_ = (yyvsp[-2].file_path_t); (yyval.import_statement_t)->table_name_ = (yyvsp[0].table_name_t); } #line 4357 "bison_parser.cpp" /* yacc.c:1652 */ break; case 100: #line 1062 "bison_parser.y" /* yacc.c:1652 */ { (yyval.import_file_type_t) = new ImportFileType(); (yyval.import_file_type_t)->str_val_ = "CSV"; } #line 4363 "bison_parser.cpp" /* yacc.c:1652 */ break; case 101: #line 1066 "bison_parser.y" /* yacc.c:1652 */ { (yyval.file_path_t) = new FilePath(); (yyval.file_path_t)->str_val_ = (yyvsp[0].string_literal_t)->str_val_; delete ((yyvsp[0].string_literal_t)); } #line 4373 "bison_parser.cpp" /* yacc.c:1652 */ break; case 102: #line 1080 "bison_parser.y" /* yacc.c:1652 */ { (yyval.show_statement_t) = new ShowStatement(); (yyval.show_statement_t)->sub_type_ = CASE0; } #line 4382 "bison_parser.cpp" /* yacc.c:1652 */ break; case 103: #line 1084 "bison_parser.y" /* yacc.c:1652 */ { (yyval.show_statement_t) = new ShowStatement(); (yyval.show_statement_t)->sub_type_ = CASE1; (yyval.show_statement_t)->table_name_ = (yyvsp[0].table_name_t); (yyval.show_statement_t)->table_name_->table_name_->id_type_ = id_top_table_name; } #line 4393 "bison_parser.cpp" /* yacc.c:1652 */ break; case 104: #line 1090 "bison_parser.y" /* yacc.c:1652 */ { (yyval.show_statement_t) = new ShowStatement(); (yyval.show_statement_t)->sub_type_ = CASE2; (yyval.show_statement_t)->table_name_ = (yyvsp[0].table_name_t); (yyval.show_statement_t)->table_name_->table_name_->id_type_ = id_top_table_name; } #line 4404 "bison_parser.cpp" /* yacc.c:1652 */ break; case 105: #line 1105 "bison_parser.y" /* yacc.c:1652 */ { (yyval.alter_statement_t) = new AlterStatement(); (yyval.alter_statement_t)->sub_type_ = CASE0; (yyval.alter_statement_t)->table_name1_ = (yyvsp[-3].table_name_t); (yyval.alter_statement_t)->table_name2_ = (yyvsp[0].table_name_t); } #line 4415 "bison_parser.cpp" /* yacc.c:1652 */ break; case 106: #line 1111 "bison_parser.y" /* yacc.c:1652 */ { (yyval.alter_statement_t) = new AlterStatement(); (yyval.alter_statement_t)->sub_type_ = CASE1; (yyval.alter_statement_t)->table_name1_ = (yyvsp[-5].table_name_t); (yyval.alter_statement_t)->opt_column_ = (yyvsp[-3].opt_column_t); (yyval.alter_statement_t)->column_name1_ = (yyvsp[-2].column_name_t); (yyval.alter_statement_t)->column_name2_ = (yyvsp[0].column_name_t); } #line 4428 "bison_parser.cpp" /* yacc.c:1652 */ break; case 107: #line 1119 "bison_parser.y" /* yacc.c:1652 */ { (yyval.alter_statement_t) = new AlterStatement(); (yyval.alter_statement_t)->sub_type_ = CASE2; (yyval.alter_statement_t)->table_name1_ = (yyvsp[-3].table_name_t); (yyval.alter_statement_t)->opt_column_ = (yyvsp[-1].opt_column_t); (yyval.alter_statement_t)->column_def_ = (yyvsp[0].column_def_t); } #line 4440 "bison_parser.cpp" /* yacc.c:1652 */ break; case 108: #line 1129 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_column_t) = new OptColumn(); (yyval.opt_column_t)->sub_type_ = CASE0; (yyval.opt_column_t)->str_val_ = string("COLUMN"); } #line 4450 "bison_parser.cpp" /* yacc.c:1652 */ break; case 109: #line 1134 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_column_t) = new OptColumn(); (yyval.opt_column_t)->sub_type_ = CASE1; (yyval.opt_column_t)->str_val_ = string(""); } #line 4460 "bison_parser.cpp" /* yacc.c:1652 */ break; case 110: #line 1148 "bison_parser.y" /* yacc.c:1652 */ { (yyval.create_statement_t) = new CreateStatement(); (yyval.create_statement_t)->sub_type_ = CASE0; (yyval.create_statement_t)->opt_not_exists_ = (yyvsp[-5].opt_not_exists_t); (yyval.create_statement_t)->table_name_ = (yyvsp[-4].table_name_t); (yyval.create_statement_t)->file_path_ = (yyvsp[0].file_path_t); (yyval.create_statement_t)->table_name_->table_name_->id_type_ = id_create_table_name; } #line 4473 "bison_parser.cpp" /* yacc.c:1652 */ break; case 111: #line 1156 "bison_parser.y" /* yacc.c:1652 */ { (yyval.create_statement_t) = new CreateStatement(); (yyval.create_statement_t)->sub_type_ = CASE1; (yyval.create_statement_t)->opt_not_exists_ = (yyvsp[-4].opt_not_exists_t); (yyval.create_statement_t)->table_name_ = (yyvsp[-3].table_name_t); (yyval.create_statement_t)->column_def_comma_list_ = (yyvsp[-1].column_def_comma_list_t); (yyval.create_statement_t)->table_name_->table_name_->id_type_ = id_create_table_name; } #line 4486 "bison_parser.cpp" /* yacc.c:1652 */ break; case 112: #line 1164 "bison_parser.y" /* yacc.c:1652 */ { (yyval.create_statement_t) = new CreateStatement(); (yyval.create_statement_t)->sub_type_ = CASE2; (yyval.create_statement_t)->opt_not_exists_ = (yyvsp[-3].opt_not_exists_t); (yyval.create_statement_t)->table_name_ = (yyvsp[-2].table_name_t); (yyval.create_statement_t)->select_statement_ = (yyvsp[0].select_statement_t); (yyval.create_statement_t)->table_name_->table_name_->id_type_ = id_create_table_name; } #line 4499 "bison_parser.cpp" /* yacc.c:1652 */ break; case 113: #line 1172 "bison_parser.y" /* yacc.c:1652 */ { (yyval.create_statement_t) = new CreateStatement(); (yyval.create_statement_t)->sub_type_ = CASE3; (yyval.create_statement_t)->opt_not_exists_ = (yyvsp[-4].opt_not_exists_t); (yyval.create_statement_t)->table_name_ = (yyvsp[-3].table_name_t); (yyval.create_statement_t)->table_name_->table_name_->id_type_ = id_create_table_name; (yyval.create_statement_t)->opt_column_list_ = (yyvsp[-2].opt_column_list_t); if ((yyval.create_statement_t)->opt_column_list_->sub_type_ == CASE0) for (auto& i : (yyval.create_statement_t) ->opt_column_list_->ident_comma_list_->v_iden_comma_list_) { i->id_type_ = id_create_column_name; } (yyval.create_statement_t)->select_statement_ = (yyvsp[0].select_statement_t); (yyval.create_statement_t)->table_name_->table_name_->id_type_ = id_create_table_name; } #line 4518 "bison_parser.cpp" /* yacc.c:1652 */ break; case 114: #line 1187 "bison_parser.y" /* yacc.c:1652 */ { (yyval.create_statement_t) = new CreateStatement(); (yyval.create_statement_t)->sub_type_ = CASE4; (yyval.create_statement_t)->opt_unique_ = (yyvsp[-9].opt_unique_t); (yyval.create_statement_t)->opt_not_exists_ = (yyvsp[-7].opt_not_exists_t); (yyval.create_statement_t)->index_name_ = (yyvsp[-6].index_name_t); (yyval.create_statement_t)->table_name_ = (yyvsp[-4].table_name_t); (yyval.create_statement_t)->table_name_->table_name_->id_type_ = id_top_table_name; (yyval.create_statement_t)->ident_commalist_ = (yyvsp[-2].ident_commalist_t); for (auto& i : (yyval.create_statement_t)->ident_commalist_->v_iden_comma_list_) { i->id_type_ = id_column_name; } (yyval.create_statement_t)->opt_where_ = (yyvsp[0].opt_where_t); } #line 4537 "bison_parser.cpp" /* yacc.c:1652 */ break; case 115: #line 1201 "bison_parser.y" /* yacc.c:1652 */ { (yyval.create_statement_t) = new CreateStatement(); (yyval.create_statement_t)->sub_type_ = CASE5; (yyval.create_statement_t)->opt_not_exists_ = (yyvsp[-3].opt_not_exists_t); (yyval.create_statement_t)->table_name_ = (yyvsp[-2].table_name_t); (yyval.create_statement_t)->module_name_ = (yyvsp[0].module_name_t); (yyval.create_statement_t)->table_name_->table_name_->id_type_ = id_create_table_name; } #line 4550 "bison_parser.cpp" /* yacc.c:1652 */ break; case 116: #line 1209 "bison_parser.y" /* yacc.c:1652 */ { (yyval.create_statement_t) = new CreateStatement(); (yyval.create_statement_t)->sub_type_ = CASE6; (yyval.create_statement_t)->opt_not_exists_ = (yyvsp[-6].opt_not_exists_t); (yyval.create_statement_t)->table_name_ = (yyvsp[-5].table_name_t); (yyval.create_statement_t)->module_name_ = (yyvsp[-3].module_name_t); (yyval.create_statement_t)->table_name_->table_name_->id_type_ = id_create_table_name; (yyval.create_statement_t)->column_def_comma_list_ = (yyvsp[-1].column_def_comma_list_t); } #line 4564 "bison_parser.cpp" /* yacc.c:1652 */ break; case 117: #line 1218 "bison_parser.y" /* yacc.c:1652 */ { (yyval.create_statement_t) = new CreateStatement(); (yyval.create_statement_t)->sub_type_ = CASE7; (yyval.create_statement_t)->trigger_declare_ = (yyvsp[-3].trigger_declare_t); (yyval.create_statement_t)->trigger_cmd_list_ = (yyvsp[-1].trigger_cmd_list_t); } #line 4575 "bison_parser.cpp" /* yacc.c:1652 */ break; case 118: #line 1227 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_unique_t) = new OptUnique(); (yyval.opt_unique_t)->str_val_ = string("UNIQUE"); } #line 4581 "bison_parser.cpp" /* yacc.c:1652 */ break; case 119: #line 1228 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_unique_t) = new OptUnique(); (yyval.opt_unique_t)->str_val_ = string(""); } #line 4587 "bison_parser.cpp" /* yacc.c:1652 */ break; case 120: #line 1232 "bison_parser.y" /* yacc.c:1652 */ { (yyval.index_name_t) = new IndexName(); (yyval.index_name_t)->id_ = new Identifier((yyvsp[0].sval), id_index_name); free((yyvsp[0].sval)); } #line 4593 "bison_parser.cpp" /* yacc.c:1652 */ break; case 121: #line 1236 "bison_parser.y" /* yacc.c:1652 */ { (yyval.trigger_declare_t) = new TriggerDeclare(); (yyval.trigger_declare_t)->opt_tmp_ = (yyvsp[-9].opt_tmp_t); (yyval.trigger_declare_t)->opt_not_exists_ = (yyvsp[-7].opt_not_exists_t); (yyval.trigger_declare_t)->trigger_name_ = (yyvsp[-6].trigger_name_t); (yyval.trigger_declare_t)->opt_trigger_time_ = (yyvsp[-5].opt_trigger_time_t); (yyval.trigger_declare_t)->trigger_event_ = (yyvsp[-4].trigger_event_t); (yyval.trigger_declare_t)->table_name_ = (yyvsp[-2].table_name_t); (yyval.trigger_declare_t)->opt_for_each_ = (yyvsp[-1].opt_for_each_t); (yyval.trigger_declare_t)->opt_when_ = (yyvsp[0].opt_when_t); } #line 4609 "bison_parser.cpp" /* yacc.c:1652 */ break; case 122: #line 1250 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_tmp_t) = new OptTmp(); (yyval.opt_tmp_t)->str_val_ = string("TEMP"); } #line 4615 "bison_parser.cpp" /* yacc.c:1652 */ break; case 123: #line 1251 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_tmp_t) = new OptTmp(); (yyval.opt_tmp_t)->str_val_ = string(""); } #line 4621 "bison_parser.cpp" /* yacc.c:1652 */ break; case 124: #line 1255 "bison_parser.y" /* yacc.c:1652 */ { (yyval.trigger_name_t) = new TriggerName(); (yyval.trigger_name_t)->id_ = new Identifier((yyvsp[0].sval), id_trigger_name); free((yyvsp[0].sval)); } #line 4627 "bison_parser.cpp" /* yacc.c:1652 */ break; case 125: #line 1259 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_trigger_time_t) = new OptTriggerTime(); (yyval.opt_trigger_time_t)->str_val_ = string("BEFORE"); } #line 4633 "bison_parser.cpp" /* yacc.c:1652 */ break; case 126: #line 1260 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_trigger_time_t) = new OptTriggerTime(); (yyval.opt_trigger_time_t)->str_val_ = string("AFTER"); } #line 4639 "bison_parser.cpp" /* yacc.c:1652 */ break; case 127: #line 1261 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_trigger_time_t) = new OptTriggerTime(); (yyval.opt_trigger_time_t)->str_val_ = string("INSTEAD OF"); } #line 4645 "bison_parser.cpp" /* yacc.c:1652 */ break; case 128: #line 1262 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_trigger_time_t) = new OptTriggerTime(); (yyval.opt_trigger_time_t)->str_val_ = string(""); } #line 4651 "bison_parser.cpp" /* yacc.c:1652 */ break; case 129: #line 1266 "bison_parser.y" /* yacc.c:1652 */ { (yyval.trigger_event_t) = new TriggerEvent(); (yyval.trigger_event_t)->sub_type_ = CASE0; } #line 4657 "bison_parser.cpp" /* yacc.c:1652 */ break; case 130: #line 1267 "bison_parser.y" /* yacc.c:1652 */ { (yyval.trigger_event_t) = new TriggerEvent(); (yyval.trigger_event_t)->sub_type_ = CASE1; } #line 4663 "bison_parser.cpp" /* yacc.c:1652 */ break; case 131: #line 1268 "bison_parser.y" /* yacc.c:1652 */ { (yyval.trigger_event_t) = new TriggerEvent(); (yyval.trigger_event_t)->sub_type_ = CASE2; (yyval.trigger_event_t)->opt_of_column_list_ = (yyvsp[0].opt_of_column_list_t); } #line 4669 "bison_parser.cpp" /* yacc.c:1652 */ break; case 132: #line 1272 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_of_column_list_t) = new OptOfColumnList(); (yyval.opt_of_column_list_t)->sub_type_ = CASE0; (yyval.opt_of_column_list_t)->ident_commalist_ = (yyvsp[0].ident_commalist_t); } #line 4675 "bison_parser.cpp" /* yacc.c:1652 */ break; case 133: #line 1273 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_of_column_list_t) = new OptOfColumnList(); (yyval.opt_of_column_list_t)->sub_type_ = CASE1; } #line 4681 "bison_parser.cpp" /* yacc.c:1652 */ break; case 134: #line 1277 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_for_each_t) = new OptForEach(); (yyval.opt_for_each_t)->str_val_ = string("FOR EACH ROW"); } #line 4687 "bison_parser.cpp" /* yacc.c:1652 */ break; case 135: #line 1278 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_for_each_t) = new OptForEach(); (yyval.opt_for_each_t)->str_val_ = string(""); } #line 4693 "bison_parser.cpp" /* yacc.c:1652 */ break; case 136: #line 1282 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_when_t) = new OptWhen(); (yyval.opt_when_t)->sub_type_ = CASE0; (yyval.opt_when_t)->expr_ = (yyvsp[0].expr_t); } #line 4699 "bison_parser.cpp" /* yacc.c:1652 */ break; case 137: #line 1283 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_when_t) = new OptWhen(); (yyval.opt_when_t)->sub_type_ = CASE1; } #line 4705 "bison_parser.cpp" /* yacc.c:1652 */ break; case 138: #line 1287 "bison_parser.y" /* yacc.c:1652 */ { (yyval.trigger_cmd_list_t) = new TriggerCmdList(); (yyval.trigger_cmd_list_t) ->v_trigger_cmd_list_.push_back((yyvsp[-1].trigger_cmd_t)); } #line 4711 "bison_parser.cpp" /* yacc.c:1652 */ break; case 139: #line 1288 "bison_parser.y" /* yacc.c:1652 */ { (yyvsp[-2].trigger_cmd_list_t) ->v_trigger_cmd_list_.push_back((yyvsp[-1].trigger_cmd_t)); (yyval.trigger_cmd_list_t) = (yyvsp[-2].trigger_cmd_list_t); } #line 4717 "bison_parser.cpp" /* yacc.c:1652 */ break; case 140: #line 1292 "bison_parser.y" /* yacc.c:1652 */ { (yyval.trigger_cmd_t) = new TriggerCmd(); (yyval.trigger_cmd_t)->stmt_ = (yyvsp[0].select_statement_t); } #line 4723 "bison_parser.cpp" /* yacc.c:1652 */ break; case 141: #line 1293 "bison_parser.y" /* yacc.c:1652 */ { (yyval.trigger_cmd_t) = new TriggerCmd(); (yyval.trigger_cmd_t)->stmt_ = (yyvsp[0].update_statement_t); } #line 4729 "bison_parser.cpp" /* yacc.c:1652 */ break; case 142: #line 1294 "bison_parser.y" /* yacc.c:1652 */ { (yyval.trigger_cmd_t) = new TriggerCmd(); (yyval.trigger_cmd_t)->stmt_ = (yyvsp[0].insert_statement_t); } #line 4735 "bison_parser.cpp" /* yacc.c:1652 */ break; case 143: #line 1295 "bison_parser.y" /* yacc.c:1652 */ { (yyval.trigger_cmd_t) = new TriggerCmd(); (yyval.trigger_cmd_t)->stmt_ = (yyvsp[0].delete_statement_t); } #line 4741 "bison_parser.cpp" /* yacc.c:1652 */ break; case 144: #line 1299 "bison_parser.y" /* yacc.c:1652 */ { (yyval.module_name_t) = new ModuleName(); (yyval.module_name_t)->id_ = new Identifier((yyvsp[0].sval)); free((yyvsp[0].sval)); } #line 4747 "bison_parser.cpp" /* yacc.c:1652 */ break; case 145: #line 1304 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_not_exists_t) = new OptNotExists(); (yyval.opt_not_exists_t)->sub_type_ = CASE0; } #line 4753 "bison_parser.cpp" /* yacc.c:1652 */ break; case 146: #line 1305 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_not_exists_t) = new OptNotExists(); (yyval.opt_not_exists_t)->sub_type_ = CASE1; } #line 4759 "bison_parser.cpp" /* yacc.c:1652 */ break; case 147: #line 1309 "bison_parser.y" /* yacc.c:1652 */ { (yyval.column_def_comma_list_t) = new ColumnDefCommaList(); (yyval.column_def_comma_list_t) ->v_column_def_comma_list_.push_back((yyvsp[0].column_def_t)); } #line 4768 "bison_parser.cpp" /* yacc.c:1652 */ break; case 148: #line 1313 "bison_parser.y" /* yacc.c:1652 */ { (yyvsp[-2].column_def_comma_list_t) ->v_column_def_comma_list_.push_back((yyvsp[0].column_def_t)); (yyval.column_def_comma_list_t) = (yyvsp[-2].column_def_comma_list_t); } #line 4777 "bison_parser.cpp" /* yacc.c:1652 */ break; case 149: #line 1320 "bison_parser.y" /* yacc.c:1652 */ { (yyval.column_def_t) = new ColumnDef(); (yyval.column_def_t)->id_ = new Identifier((yyvsp[-2].sval), id_create_column_name); (yyval.column_def_t)->column_type_ = (yyvsp[-1].column_type_t); (yyval.column_def_t)->opt_column_arglist_ = (yyvsp[0].opt_column_arglist_t); free((yyvsp[-2].sval)); } #line 4789 "bison_parser.cpp" /* yacc.c:1652 */ break; case 150: #line 1331 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_column_arglist_t) = new OptColumnArglist(); (yyval.opt_column_arglist_t)->sub_type_ = CASE0; (yyval.opt_column_arglist_t)->column_arglist_ = (yyvsp[0].column_arglist_t); } #line 4795 "bison_parser.cpp" /* yacc.c:1652 */ break; case 151: #line 1332 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_column_arglist_t) = new OptColumnArglist(); (yyval.opt_column_arglist_t)->sub_type_ = CASE1; } #line 4801 "bison_parser.cpp" /* yacc.c:1652 */ break; case 152: #line 1336 "bison_parser.y" /* yacc.c:1652 */ { (yyvsp[-1].column_arglist_t) ->v_column_arg_.push_back((yyvsp[0].column_arg_t)); (yyval.column_arglist_t) = (yyvsp[-1].column_arglist_t); } #line 4810 "bison_parser.cpp" /* yacc.c:1652 */ break; case 153: #line 1340 "bison_parser.y" /* yacc.c:1652 */ { (yyval.column_arglist_t) = new ColumnArglist(); (yyval.column_arglist_t) ->v_column_arg_.push_back((yyvsp[0].column_arg_t)); } #line 4819 "bison_parser.cpp" /* yacc.c:1652 */ break; case 154: #line 1347 "bison_parser.y" /* yacc.c:1652 */ { (yyval.column_arg_t) = new ColumnArg(); (yyval.column_arg_t)->sub_type_ = CASE0; (yyval.column_arg_t)->opt_on_conflict_ = (yyvsp[0].opt_on_conflict_t); } #line 4825 "bison_parser.cpp" /* yacc.c:1652 */ break; case 155: #line 1348 "bison_parser.y" /* yacc.c:1652 */ { (yyval.column_arg_t) = new ColumnArg(); (yyval.column_arg_t)->sub_type_ = CASE1; (yyval.column_arg_t)->opt_on_conflict_ = (yyvsp[0].opt_on_conflict_t); } #line 4831 "bison_parser.cpp" /* yacc.c:1652 */ break; case 156: #line 1349 "bison_parser.y" /* yacc.c:1652 */ { (yyval.column_arg_t) = new ColumnArg(); (yyval.column_arg_t)->sub_type_ = CASE2; (yyval.column_arg_t)->opt_order_type_ = (yyvsp[-2].opt_order_type_t); (yyval.column_arg_t)->opt_on_conflict_ = (yyvsp[-1].opt_on_conflict_t); (yyval.column_arg_t)->opt_autoinc_ = (yyvsp[0].opt_autoinc_t); } #line 4843 "bison_parser.cpp" /* yacc.c:1652 */ break; case 157: #line 1356 "bison_parser.y" /* yacc.c:1652 */ { (yyval.column_arg_t) = new ColumnArg(); (yyval.column_arg_t)->sub_type_ = CASE3; (yyval.column_arg_t)->opt_on_conflict_ = (yyvsp[0].opt_on_conflict_t); } #line 4849 "bison_parser.cpp" /* yacc.c:1652 */ break; case 158: #line 1357 "bison_parser.y" /* yacc.c:1652 */ { (yyval.column_arg_t) = new ColumnArg(); (yyval.column_arg_t)->sub_type_ = CASE4; (yyval.column_arg_t)->expr_ = (yyvsp[-1].expr_t); } #line 4855 "bison_parser.cpp" /* yacc.c:1652 */ break; case 159: #line 1358 "bison_parser.y" /* yacc.c:1652 */ { (yyval.column_arg_t) = new ColumnArg(); (yyval.column_arg_t)->sub_type_ = CASE5; (yyval.column_arg_t)->expr_ = (yyvsp[-1].expr_t); } #line 4861 "bison_parser.cpp" /* yacc.c:1652 */ break; case 160: #line 1359 "bison_parser.y" /* yacc.c:1652 */ { (yyval.column_arg_t) = new ColumnArg(); (yyval.column_arg_t)->sub_type_ = CASE6; (yyval.column_arg_t)->expr_ = (yyvsp[-1].expr_t); } #line 4867 "bison_parser.cpp" /* yacc.c:1652 */ break; case 161: #line 1364 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_on_conflict_t) = new OptOnConflict(); (yyval.opt_on_conflict_t)->sub_type_ = CASE0; (yyval.opt_on_conflict_t)->resolve_type_ = (yyvsp[0].resolve_type_t); } #line 4873 "bison_parser.cpp" /* yacc.c:1652 */ break; case 162: #line 1365 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_on_conflict_t) = new OptOnConflict(); (yyval.opt_on_conflict_t)->sub_type_ = CASE1; } #line 4879 "bison_parser.cpp" /* yacc.c:1652 */ break; case 163: #line 1369 "bison_parser.y" /* yacc.c:1652 */ { (yyval.resolve_type_t) = new ResolveType(); (yyval.resolve_type_t)->str_val_ = string("IGNORE"); } #line 4885 "bison_parser.cpp" /* yacc.c:1652 */ break; case 164: #line 1370 "bison_parser.y" /* yacc.c:1652 */ { (yyval.resolve_type_t) = new ResolveType(); (yyval.resolve_type_t)->str_val_ = string("REPLACE"); } #line 4891 "bison_parser.cpp" /* yacc.c:1652 */ break; case 165: #line 1371 "bison_parser.y" /* yacc.c:1652 */ { (yyval.resolve_type_t) = new ResolveType(); (yyval.resolve_type_t)->str_val_ = string("ROLLBACK"); } #line 4897 "bison_parser.cpp" /* yacc.c:1652 */ break; case 166: #line 1372 "bison_parser.y" /* yacc.c:1652 */ { (yyval.resolve_type_t) = new ResolveType(); (yyval.resolve_type_t)->str_val_ = string("ABORT"); } #line 4903 "bison_parser.cpp" /* yacc.c:1652 */ break; case 167: #line 1373 "bison_parser.y" /* yacc.c:1652 */ { (yyval.resolve_type_t) = new ResolveType(); (yyval.resolve_type_t)->str_val_ = string("FAIL"); } #line 4909 "bison_parser.cpp" /* yacc.c:1652 */ break; case 168: #line 1377 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_autoinc_t) = new OptAutoinc(); (yyval.opt_autoinc_t)->str_val_ = string("AUTOINCR"); } #line 4915 "bison_parser.cpp" /* yacc.c:1652 */ break; case 169: #line 1378 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_autoinc_t) = new OptAutoinc(); (yyval.opt_autoinc_t)->str_val_ = string(""); } #line 4921 "bison_parser.cpp" /* yacc.c:1652 */ break; case 170: #line 1383 "bison_parser.y" /* yacc.c:1652 */ { (yyval.column_type_t) = new ColumnType(); (yyval.column_type_t)->str_val_ = string("INT"); } #line 4927 "bison_parser.cpp" /* yacc.c:1652 */ break; case 171: #line 1384 "bison_parser.y" /* yacc.c:1652 */ { (yyval.column_type_t) = new ColumnType(); (yyval.column_type_t)->str_val_ = string("INTEGER"); } #line 4933 "bison_parser.cpp" /* yacc.c:1652 */ break; case 172: #line 1385 "bison_parser.y" /* yacc.c:1652 */ { (yyval.column_type_t) = new ColumnType(); (yyval.column_type_t)->str_val_ = string("LONG"); } #line 4939 "bison_parser.cpp" /* yacc.c:1652 */ break; case 173: #line 1386 "bison_parser.y" /* yacc.c:1652 */ { (yyval.column_type_t) = new ColumnType(); (yyval.column_type_t)->str_val_ = string("FLOAT"); } #line 4945 "bison_parser.cpp" /* yacc.c:1652 */ break; case 174: #line 1387 "bison_parser.y" /* yacc.c:1652 */ { (yyval.column_type_t) = new ColumnType(); (yyval.column_type_t)->str_val_ = string("DOUBLE"); } #line 4951 "bison_parser.cpp" /* yacc.c:1652 */ break; case 175: #line 1388 "bison_parser.y" /* yacc.c:1652 */ { (yyval.column_type_t) = new ColumnType(); (yyval.column_type_t)->str_val_ = string("VARCHAR(") + to_string((yyvsp[-1].ival)) + ")"; } #line 4960 "bison_parser.cpp" /* yacc.c:1652 */ break; case 176: #line 1392 "bison_parser.y" /* yacc.c:1652 */ { (yyval.column_type_t) = new ColumnType(); (yyval.column_type_t)->str_val_ = string("CHAR(") + to_string((yyvsp[-1].ival)) + ")"; } #line 4968 "bison_parser.cpp" /* yacc.c:1652 */ break; case 177: #line 1395 "bison_parser.y" /* yacc.c:1652 */ { (yyval.column_type_t) = new ColumnType(); (yyval.column_type_t)->str_val_ = string("TEXT"); } #line 4974 "bison_parser.cpp" /* yacc.c:1652 */ break; case 178: #line 1396 "bison_parser.y" /* yacc.c:1652 */ { (yyval.column_type_t) = new ColumnType(); (yyval.column_type_t)->str_val_ = string(""); } #line 4980 "bison_parser.cpp" /* yacc.c:1652 */ break; case 179: #line 1406 "bison_parser.y" /* yacc.c:1652 */ { (yyval.drop_statement_t) = new DropStatement(); (yyval.drop_statement_t)->sub_type_ = CASE0; (yyval.drop_statement_t)->opt_exists_ = (yyvsp[-1].opt_exists_t); (yyval.drop_statement_t)->table_name_ = (yyvsp[0].table_name_t); (yyval.drop_statement_t)->table_name_->table_name_->id_type_ = id_top_table_name; (yyval.drop_statement_t)->id_ = NULL; } #line 4993 "bison_parser.cpp" /* yacc.c:1652 */ break; case 180: #line 1414 "bison_parser.y" /* yacc.c:1652 */ { (yyval.drop_statement_t) = new DropStatement(); (yyval.drop_statement_t)->sub_type_ = CASE1; (yyval.drop_statement_t)->opt_exists_ = (yyvsp[-1].opt_exists_t); (yyval.drop_statement_t)->table_name_ = (yyvsp[0].table_name_t); (yyval.drop_statement_t)->table_name_->table_name_->id_type_ = id_top_table_name; (yyval.drop_statement_t)->id_ = NULL; } #line 5006 "bison_parser.cpp" /* yacc.c:1652 */ break; case 181: #line 1422 "bison_parser.y" /* yacc.c:1652 */ { (yyval.drop_statement_t) = new DropStatement(); (yyval.drop_statement_t)->sub_type_ = CASE2; (yyval.drop_statement_t)->id_ = new Identifier((yyvsp[0].sval)); free((yyvsp[0].sval)); } #line 5017 "bison_parser.cpp" /* yacc.c:1652 */ break; case 182: #line 1428 "bison_parser.y" /* yacc.c:1652 */ { (yyval.drop_statement_t) = new DropStatement(); (yyval.drop_statement_t)->sub_type_ = CASE3; (yyval.drop_statement_t)->opt_exists_ = (yyvsp[-3].opt_exists_t); (yyval.drop_statement_t)->schema_name_ = (yyvsp[-2].schema_name_t); (yyval.drop_statement_t)->trigger_name_ = (yyvsp[0].trigger_name_t); } #line 5029 "bison_parser.cpp" /* yacc.c:1652 */ break; case 183: #line 1436 "bison_parser.y" /* yacc.c:1652 */ { (yyval.drop_statement_t) = new DropStatement(); (yyval.drop_statement_t)->sub_type_ = CASE4; (yyval.drop_statement_t)->opt_exists_ = (yyvsp[-1].opt_exists_t); (yyval.drop_statement_t)->trigger_name_ = (yyvsp[0].trigger_name_t); } #line 5040 "bison_parser.cpp" /* yacc.c:1652 */ break; case 184: #line 1445 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_exists_t) = new OptExists(); (yyval.opt_exists_t)->str_val_ = string("IF EXISTS"); } #line 5046 "bison_parser.cpp" /* yacc.c:1652 */ break; case 185: #line 1446 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_exists_t) = new OptExists(); (yyval.opt_exists_t)->str_val_ = string(""); } #line 5052 "bison_parser.cpp" /* yacc.c:1652 */ break; case 186: #line 1455 "bison_parser.y" /* yacc.c:1652 */ { (yyval.delete_statement_t) = new DeleteStatement(); (yyval.delete_statement_t)->sub_type_ = CASE0; (yyval.delete_statement_t)->table_name_ = (yyvsp[-1].table_name_t); (yyval.delete_statement_t)->table_name_->table_name_->id_type_ = id_top_table_name; (yyval.delete_statement_t)->opt_where_ = (yyvsp[0].opt_where_t); } #line 5064 "bison_parser.cpp" /* yacc.c:1652 */ break; case 187: #line 1465 "bison_parser.y" /* yacc.c:1652 */ { (yyval.delete_statement_t) = new DeleteStatement(); (yyval.delete_statement_t)->sub_type_ = CASE1; (yyval.delete_statement_t)->table_name_ = (yyvsp[0].table_name_t); (yyval.delete_statement_t)->table_name_->table_name_->id_type_ = id_top_table_name; } #line 5076 "bison_parser.cpp" /* yacc.c:1652 */ break; case 188: #line 1480 "bison_parser.y" /* yacc.c:1652 */ { (yyval.insert_statement_t) = new InsertStatement(); (yyval.insert_statement_t)->sub_type_ = CASE0; (yyval.insert_statement_t)->insert_type_ = (yyvsp[-6].insert_type_t); (yyval.insert_statement_t)->table_name_ = (yyvsp[-4].table_name_t); (yyval.insert_statement_t)->table_name_->table_name_->id_type_ = id_top_table_name; (yyval.insert_statement_t)->opt_column_list_ = (yyvsp[-3].opt_column_list_t); (yyval.insert_statement_t)->super_list_ = (yyvsp[-1].super_list_t); (yyval.insert_statement_t)->opt_upsert_clause_ = (yyvsp[0].opt_upsert_clause_t); if ((yyval.insert_statement_t)->opt_column_list_->sub_type_ == CASE0) { for (auto& cname : (yyval.insert_statement_t) ->opt_column_list_->ident_comma_list_->v_iden_comma_list_) { cname->id_type_ = id_column_name; } } } #line 5096 "bison_parser.cpp" /* yacc.c:1652 */ break; case 189: #line 1495 "bison_parser.y" /* yacc.c:1652 */ { (yyval.insert_statement_t) = new InsertStatement(); (yyval.insert_statement_t)->sub_type_ = CASE1; (yyval.insert_statement_t)->insert_type_ = (yyvsp[-5].insert_type_t); (yyval.insert_statement_t)->table_name_ = (yyvsp[-3].table_name_t); (yyval.insert_statement_t)->table_name_->table_name_->id_type_ = id_top_table_name; (yyval.insert_statement_t)->opt_column_list_ = (yyvsp[-2].opt_column_list_t); (yyval.insert_statement_t)->select_no_paren_ = (yyvsp[-1].select_no_paren_t); (yyval.insert_statement_t)->opt_upsert_clause_ = (yyvsp[0].opt_upsert_clause_t); if ((yyval.insert_statement_t)->opt_column_list_->sub_type_ == CASE0) { for (auto& cname : (yyval.insert_statement_t) ->opt_column_list_->ident_comma_list_->v_iden_comma_list_) { cname->id_type_ = id_column_name; } } } #line 5116 "bison_parser.cpp" /* yacc.c:1652 */ break; case 190: #line 1513 "bison_parser.y" /* yacc.c:1652 */ { (yyval.super_list_t) = new SuperList(); (yyval.super_list_t)->v_super_list_.push_back((yyvsp[-1].literal_list_t)); } #line 5124 "bison_parser.cpp" /* yacc.c:1652 */ break; case 191: #line 1516 "bison_parser.y" /* yacc.c:1652 */ { (yyvsp[-4].super_list_t) ->v_super_list_.push_back((yyvsp[-1].literal_list_t)); (yyval.super_list_t) = (yyvsp[-4].super_list_t); } #line 5133 "bison_parser.cpp" /* yacc.c:1652 */ break; case 192: #line 1523 "bison_parser.y" /* yacc.c:1652 */ { (yyval.insert_type_t) = new InsertType(); (yyval.insert_type_t)->sub_type_ = CASE0; (yyval.insert_type_t)->str_val_ = string("INSERT"); } #line 5139 "bison_parser.cpp" /* yacc.c:1652 */ break; case 193: #line 1524 "bison_parser.y" /* yacc.c:1652 */ { (yyval.insert_type_t) = new InsertType(); (yyval.insert_type_t)->sub_type_ = CASE1; (yyval.insert_type_t)->str_val_ = string("REPLACE"); } #line 5145 "bison_parser.cpp" /* yacc.c:1652 */ break; case 194: #line 1525 "bison_parser.y" /* yacc.c:1652 */ { (yyval.insert_type_t) = new InsertType(); (yyval.insert_type_t)->sub_type_ = CASE2; (yyval.insert_type_t)->resolve_type_ = (yyvsp[0].resolve_type_t); } #line 5151 "bison_parser.cpp" /* yacc.c:1652 */ break; case 195: #line 1529 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_column_list_t) = new OptColumnList(); (yyval.opt_column_list_t)->sub_type_ = CASE0; (yyval.opt_column_list_t)->ident_comma_list_ = (yyvsp[-1].ident_commalist_t); } #line 5157 "bison_parser.cpp" /* yacc.c:1652 */ break; case 196: #line 1530 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_column_list_t) = new OptColumnList(); (yyval.opt_column_list_t)->sub_type_ = CASE1; } #line 5163 "bison_parser.cpp" /* yacc.c:1652 */ break; case 197: #line 1540 "bison_parser.y" /* yacc.c:1652 */ { (yyval.update_statement_t) = new UpdateStatement(); (yyval.update_statement_t)->table_ref_name_no_alias_ = (yyvsp[-3].table_ref_name_no_alias_t); // had set id_top_table_name // in table_ref_name_no_alias (yyval.update_statement_t)->update_clause_comma_list_ = (yyvsp[-1].update_clause_commalist_t); (yyval.update_statement_t)->opt_where_ = (yyvsp[0].opt_where_t); } #line 5174 "bison_parser.cpp" /* yacc.c:1652 */ break; case 198: #line 1549 "bison_parser.y" /* yacc.c:1652 */ { (yyval.update_clause_commalist_t) = new UpdateClauseCommalist(); (yyval.update_clause_commalist_t) ->v_update_clause_list_.push_back((yyvsp[0].update_clause_t)); } #line 5183 "bison_parser.cpp" /* yacc.c:1652 */ break; case 199: #line 1553 "bison_parser.y" /* yacc.c:1652 */ { (yyvsp[-2].update_clause_commalist_t) ->v_update_clause_list_.push_back((yyvsp[0].update_clause_t)); (yyval.update_clause_commalist_t) = (yyvsp[-2].update_clause_commalist_t); } #line 5191 "bison_parser.cpp" /* yacc.c:1652 */ break; case 200: #line 1559 "bison_parser.y" /* yacc.c:1652 */ { (yyval.update_clause_t) = new UpdateClause(); (yyval.update_clause_t)->id_ = new Identifier((yyvsp[-2].sval), id_column_name); (yyval.update_clause_t)->expr_ = (yyvsp[0].expr_t); free((yyvsp[-2].sval)); } #line 5202 "bison_parser.cpp" /* yacc.c:1652 */ break; case 201: #line 1573 "bison_parser.y" /* yacc.c:1652 */ { (yyval.select_statement_t) = new SelectStatement(); (yyval.select_statement_t)->sub_type_ = CASE0; (yyval.select_statement_t)->opt_with_clause_ = (yyvsp[-1].opt_with_clause_t); (yyval.select_statement_t)->select_with_paren_ = (yyvsp[0].select_with_paren_t); } #line 5213 "bison_parser.cpp" /* yacc.c:1652 */ break; case 202: #line 1579 "bison_parser.y" /* yacc.c:1652 */ { (yyval.select_statement_t) = new SelectStatement(); (yyval.select_statement_t)->sub_type_ = CASE1; (yyval.select_statement_t)->opt_with_clause_ = (yyvsp[-1].opt_with_clause_t); (yyval.select_statement_t)->select_no_paren_ = (yyvsp[0].select_no_paren_t); } #line 5224 "bison_parser.cpp" /* yacc.c:1652 */ break; case 203: #line 1585 "bison_parser.y" /* yacc.c:1652 */ { (yyval.select_statement_t) = new SelectStatement(); (yyval.select_statement_t)->sub_type_ = CASE2; (yyval.select_statement_t)->opt_with_clause_ = (yyvsp[-5].opt_with_clause_t); (yyval.select_statement_t)->select_with_paren_ = (yyvsp[-4].select_with_paren_t); (yyval.select_statement_t)->set_operator_ = (yyvsp[-3].set_operator_t); (yyval.select_statement_t)->select_paren_or_clause_ = (yyvsp[-2].select_paren_or_clause_t); (yyval.select_statement_t)->opt_order_ = (yyvsp[-1].opt_order_t); (yyval.select_statement_t)->opt_limit_ = (yyvsp[0].opt_limit_t); } #line 5240 "bison_parser.cpp" /* yacc.c:1652 */ break; case 204: #line 1599 "bison_parser.y" /* yacc.c:1652 */ { (yyval.select_with_paren_t) = new SelectWithParen(); (yyval.select_with_paren_t)->sub_type_ = CASE0; (yyval.select_with_paren_t)->select_no_paren_ = (yyvsp[-1].select_no_paren_t); } #line 5246 "bison_parser.cpp" /* yacc.c:1652 */ break; case 205: #line 1600 "bison_parser.y" /* yacc.c:1652 */ { (yyval.select_with_paren_t) = new SelectWithParen(); (yyval.select_with_paren_t)->sub_type_ = CASE1; (yyval.select_with_paren_t)->select_with_paren_ = (yyvsp[-1].select_with_paren_t); } #line 5252 "bison_parser.cpp" /* yacc.c:1652 */ break; case 206: #line 1604 "bison_parser.y" /* yacc.c:1652 */ { (yyval.select_paren_or_clause_t) = new SelectParenOrClause(); (yyval.select_paren_or_clause_t)->sub_type_ = CASE0; (yyval.select_paren_or_clause_t)->select_with_paren_ = (yyvsp[0].select_with_paren_t); } #line 5258 "bison_parser.cpp" /* yacc.c:1652 */ break; case 207: #line 1605 "bison_parser.y" /* yacc.c:1652 */ { (yyval.select_paren_or_clause_t) = new SelectParenOrClause(); (yyval.select_paren_or_clause_t)->sub_type_ = CASE1; (yyval.select_paren_or_clause_t)->select_clause_ = (yyvsp[0].select_clause_t); } #line 5264 "bison_parser.cpp" /* yacc.c:1652 */ break; case 208: #line 1609 "bison_parser.y" /* yacc.c:1652 */ { (yyval.select_no_paren_t) = new SelectNoParen(); (yyval.select_no_paren_t)->sub_type_ = CASE0; (yyval.select_no_paren_t)->select_clause_ = (yyvsp[-2].select_clause_t); (yyval.select_no_paren_t)->opt_order_ = (yyvsp[-1].opt_order_t); (yyval.select_no_paren_t)->opt_limit_ = (yyvsp[0].opt_limit_t); } #line 5276 "bison_parser.cpp" /* yacc.c:1652 */ break; case 209: #line 1616 "bison_parser.y" /* yacc.c:1652 */ { (yyval.select_no_paren_t) = new SelectNoParen(); (yyval.select_no_paren_t)->sub_type_ = CASE1; (yyval.select_no_paren_t)->select_clause_ = (yyvsp[-4].select_clause_t); (yyval.select_no_paren_t)->set_operator_ = (yyvsp[-3].set_operator_t); (yyval.select_no_paren_t)->select_paren_or_clause_ = (yyvsp[-2].select_paren_or_clause_t); (yyval.select_no_paren_t)->opt_order_ = (yyvsp[-1].opt_order_t); (yyval.select_no_paren_t)->opt_limit_ = (yyvsp[0].opt_limit_t); } #line 5290 "bison_parser.cpp" /* yacc.c:1652 */ break; case 210: #line 1628 "bison_parser.y" /* yacc.c:1652 */ { (yyval.set_operator_t) = new SetOperator(); (yyval.set_operator_t)->set_type_ = (yyvsp[-1].set_type_t); (yyval.set_operator_t)->opt_all_ = (yyvsp[0].opt_all_t); } #line 5300 "bison_parser.cpp" /* yacc.c:1652 */ break; case 211: #line 1636 "bison_parser.y" /* yacc.c:1652 */ { (yyval.set_type_t) = new SetType(); (yyval.set_type_t)->str_val_ = string("UNION"); } #line 5306 "bison_parser.cpp" /* yacc.c:1652 */ break; case 212: #line 1637 "bison_parser.y" /* yacc.c:1652 */ { (yyval.set_type_t) = new SetType(); (yyval.set_type_t)->str_val_ = string("INTERSECT"); } #line 5312 "bison_parser.cpp" /* yacc.c:1652 */ break; case 213: #line 1638 "bison_parser.y" /* yacc.c:1652 */ { (yyval.set_type_t) = new SetType(); (yyval.set_type_t)->str_val_ = string("EXCEPT"); } #line 5318 "bison_parser.cpp" /* yacc.c:1652 */ break; case 214: #line 1642 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_all_t) = new OptAll(); (yyval.opt_all_t)->str_val_ = string("ALL"); } #line 5324 "bison_parser.cpp" /* yacc.c:1652 */ break; case 215: #line 1643 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_all_t) = new OptAll(); (yyval.opt_all_t)->str_val_ = string(""); } #line 5330 "bison_parser.cpp" /* yacc.c:1652 */ break; case 216: #line 1647 "bison_parser.y" /* yacc.c:1652 */ { (yyval.select_clause_t) = new SelectClause(); (yyval.select_clause_t)->sub_type_ = CASE0; (yyval.select_clause_t)->opt_top_ = (yyvsp[-5].opt_top_t); (yyval.select_clause_t)->opt_distinct_ = (yyvsp[-4].opt_distinct_t); (yyval.select_clause_t)->select_list_ = (yyvsp[-3].select_list_t); (yyval.select_clause_t)->opt_from_clause_ = (yyvsp[-2].opt_from_clause_t); (yyval.select_clause_t)->opt_where_ = (yyvsp[-1].opt_where_t); (yyval.select_clause_t)->opt_group_ = (yyvsp[0].opt_group_t); } #line 5345 "bison_parser.cpp" /* yacc.c:1652 */ break; case 217: #line 1658 "bison_parser.y" /* yacc.c:1652 */ { (yyval.select_clause_t) = new SelectClause(); (yyval.select_clause_t)->sub_type_ = CASE1; (yyval.select_clause_t)->opt_top_ = (yyvsp[-6].opt_top_t); (yyval.select_clause_t)->opt_distinct_ = (yyvsp[-5].opt_distinct_t); (yyval.select_clause_t)->select_list_ = (yyvsp[-4].select_list_t); (yyval.select_clause_t)->opt_from_clause_ = (yyvsp[-3].opt_from_clause_t); (yyval.select_clause_t)->opt_where_ = (yyvsp[-2].opt_where_t); (yyval.select_clause_t)->opt_group_ = (yyvsp[-1].opt_group_t); (yyval.select_clause_t)->window_clause_ = (yyvsp[0].window_clause_t); } #line 5361 "bison_parser.cpp" /* yacc.c:1652 */ break; case 218: #line 1672 "bison_parser.y" /* yacc.c:1652 */ { (yyval.window_clause_t) = new WindowClause(); (yyval.window_clause_t)->windowdefn_list_ = (yyvsp[0].window_defn_list_t); } #line 5367 "bison_parser.cpp" /* yacc.c:1652 */ break; case 219: #line 1676 "bison_parser.y" /* yacc.c:1652 */ { (yyval.window_defn_list_t) = new WindowDefnList(); (yyval.window_defn_list_t) ->v_windowdefn_list_.push_back((yyvsp[0].window_defn_t)); } #line 5373 "bison_parser.cpp" /* yacc.c:1652 */ break; case 220: #line 1677 "bison_parser.y" /* yacc.c:1652 */ { (yyvsp[-2].window_defn_list_t) ->v_windowdefn_list_.push_back((yyvsp[0].window_defn_t)); (yyval.window_defn_list_t) = (yyvsp[-2].window_defn_list_t); } #line 5379 "bison_parser.cpp" /* yacc.c:1652 */ break; case 221: #line 1681 "bison_parser.y" /* yacc.c:1652 */ { (yyval.window_defn_t) = new WindowDefn(); (yyval.window_defn_t)->id_ = new Identifier((yyvsp[-4].sval)); (yyval.window_defn_t)->window_ = (yyvsp[-1].window_t); free((yyvsp[-4].sval)); } #line 5385 "bison_parser.cpp" /* yacc.c:1652 */ break; case 222: #line 1685 "bison_parser.y" /* yacc.c:1652 */ { (yyval.window_t) = new Window(); (yyval.window_t)->sub_type_ = CASE0; (yyval.window_t)->opt_base_window_name_ = (yyvsp[-5].opt_base_window_name_t); (yyval.window_t)->expr_list_ = (yyvsp[-2].expr_list_t); (yyval.window_t)->opt_order_ = (yyvsp[-1].opt_order_t); (yyval.window_t)->opt_frame_ = (yyvsp[0].opt_frame_t); } #line 5398 "bison_parser.cpp" /* yacc.c:1652 */ break; case 223: #line 1693 "bison_parser.y" /* yacc.c:1652 */ { (yyval.window_t) = new Window(); (yyval.window_t)->sub_type_ = CASE1; (yyval.window_t)->opt_base_window_name_ = (yyvsp[-2].opt_base_window_name_t); (yyval.window_t)->opt_order_ = (yyvsp[-1].opt_order_t); (yyval.window_t)->opt_frame_ = (yyvsp[0].opt_frame_t); } #line 5410 "bison_parser.cpp" /* yacc.c:1652 */ break; case 224: #line 1703 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_base_window_name_t) = new OptBaseWindowName(); (yyval.opt_base_window_name_t)->sub_type_ = CASE0; (yyval.opt_base_window_name_t)->id_ = new Identifier((yyvsp[0].sval)); free((yyvsp[0].sval)); } #line 5416 "bison_parser.cpp" /* yacc.c:1652 */ break; case 225: #line 1704 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_base_window_name_t) = new OptBaseWindowName(); (yyval.opt_base_window_name_t)->sub_type_ = CASE1; } #line 5422 "bison_parser.cpp" /* yacc.c:1652 */ break; case 226: #line 1708 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_frame_t) = new OptFrame(); (yyval.opt_frame_t)->sub_type_ = CASE0; (yyval.opt_frame_t)->range_or_rows_ = (yyvsp[-2].range_or_rows_t); (yyval.opt_frame_t)->frame_bound_s_ = (yyvsp[-1].frame_bound_s_t); (yyval.opt_frame_t)->opt_frame_exclude_ = (yyvsp[0].opt_frame_exclude_t); } #line 5434 "bison_parser.cpp" /* yacc.c:1652 */ break; case 227: #line 1715 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_frame_t) = new OptFrame(); (yyval.opt_frame_t)->sub_type_ = CASE1; (yyval.opt_frame_t)->range_or_rows_ = (yyvsp[-5].range_or_rows_t); (yyval.opt_frame_t)->frame_bound_s_ = (yyvsp[-3].frame_bound_s_t); (yyval.opt_frame_t)->frame_bound_e_ = (yyvsp[-1].frame_bound_e_t); (yyval.opt_frame_t)->opt_frame_exclude_ = (yyvsp[0].opt_frame_exclude_t); } #line 5447 "bison_parser.cpp" /* yacc.c:1652 */ break; case 228: #line 1723 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_frame_t) = new OptFrame(); (yyval.opt_frame_t)->sub_type_ = CASE2; } #line 5453 "bison_parser.cpp" /* yacc.c:1652 */ break; case 229: #line 1727 "bison_parser.y" /* yacc.c:1652 */ { (yyval.range_or_rows_t) = new RangeOrRows(); (yyval.range_or_rows_t)->str_val_ = string("RANGE"); } #line 5459 "bison_parser.cpp" /* yacc.c:1652 */ break; case 230: #line 1728 "bison_parser.y" /* yacc.c:1652 */ { (yyval.range_or_rows_t) = new RangeOrRows(); (yyval.range_or_rows_t)->str_val_ = string("ROWS"); } #line 5465 "bison_parser.cpp" /* yacc.c:1652 */ break; case 231: #line 1729 "bison_parser.y" /* yacc.c:1652 */ { (yyval.range_or_rows_t) = new RangeOrRows(); (yyval.range_or_rows_t)->str_val_ = string("GROUPS"); } #line 5471 "bison_parser.cpp" /* yacc.c:1652 */ break; case 232: #line 1733 "bison_parser.y" /* yacc.c:1652 */ { (yyval.frame_bound_s_t) = new FrameBoundS(); (yyval.frame_bound_s_t)->sub_type_ = CASE0; (yyval.frame_bound_s_t)->frame_bound_ = (yyvsp[0].frame_bound_t); } #line 5477 "bison_parser.cpp" /* yacc.c:1652 */ break; case 233: #line 1734 "bison_parser.y" /* yacc.c:1652 */ { (yyval.frame_bound_s_t) = new FrameBoundS(); (yyval.frame_bound_s_t)->sub_type_ = CASE1; } #line 5483 "bison_parser.cpp" /* yacc.c:1652 */ break; case 234: #line 1738 "bison_parser.y" /* yacc.c:1652 */ { (yyval.frame_bound_e_t) = new FrameBoundE(); (yyval.frame_bound_e_t)->sub_type_ = CASE0; (yyval.frame_bound_e_t)->frame_bound_ = (yyvsp[0].frame_bound_t); } #line 5489 "bison_parser.cpp" /* yacc.c:1652 */ break; case 235: #line 1739 "bison_parser.y" /* yacc.c:1652 */ { (yyval.frame_bound_e_t) = new FrameBoundE(); (yyval.frame_bound_e_t)->sub_type_ = CASE1; } #line 5495 "bison_parser.cpp" /* yacc.c:1652 */ break; case 236: #line 1743 "bison_parser.y" /* yacc.c:1652 */ { (yyval.frame_bound_t) = new FrameBound(); (yyval.frame_bound_t)->sub_type_ = CASE0; (yyval.frame_bound_t)->expr_ = (yyvsp[-1].expr_t); } #line 5501 "bison_parser.cpp" /* yacc.c:1652 */ break; case 237: #line 1744 "bison_parser.y" /* yacc.c:1652 */ { (yyval.frame_bound_t) = new FrameBound(); (yyval.frame_bound_t)->sub_type_ = CASE1; (yyval.frame_bound_t)->expr_ = (yyvsp[-1].expr_t); } #line 5507 "bison_parser.cpp" /* yacc.c:1652 */ break; case 238: #line 1745 "bison_parser.y" /* yacc.c:1652 */ { (yyval.frame_bound_t) = new FrameBound(); (yyval.frame_bound_t)->sub_type_ = CASE2; } #line 5513 "bison_parser.cpp" /* yacc.c:1652 */ break; case 239: #line 1749 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_frame_exclude_t) = new OptFrameExclude(); (yyval.opt_frame_exclude_t)->sub_type_ = CASE0; (yyval.opt_frame_exclude_t)->frame_exclude_ = (yyvsp[0].frame_exclude_t); } #line 5519 "bison_parser.cpp" /* yacc.c:1652 */ break; case 240: #line 1750 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_frame_exclude_t) = new OptFrameExclude(); (yyval.opt_frame_exclude_t)->sub_type_ = CASE1; } #line 5525 "bison_parser.cpp" /* yacc.c:1652 */ break; case 241: #line 1754 "bison_parser.y" /* yacc.c:1652 */ { (yyval.frame_exclude_t) = new FrameExclude(); (yyval.frame_exclude_t)->str_val_ = string("NO OTHERS"); } #line 5531 "bison_parser.cpp" /* yacc.c:1652 */ break; case 242: #line 1755 "bison_parser.y" /* yacc.c:1652 */ { (yyval.frame_exclude_t) = new FrameExclude(); (yyval.frame_exclude_t)->str_val_ = string("CURRENT ROW"); } #line 5537 "bison_parser.cpp" /* yacc.c:1652 */ break; case 243: #line 1756 "bison_parser.y" /* yacc.c:1652 */ { (yyval.frame_exclude_t) = new FrameExclude(); (yyval.frame_exclude_t)->str_val_ = string("GROUP"); } #line 5543 "bison_parser.cpp" /* yacc.c:1652 */ break; case 244: #line 1757 "bison_parser.y" /* yacc.c:1652 */ { (yyval.frame_exclude_t) = new FrameExclude(); (yyval.frame_exclude_t)->str_val_ = string("TIES"); } #line 5549 "bison_parser.cpp" /* yacc.c:1652 */ break; case 245: #line 1762 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_distinct_t) = new OptDistinct(); (yyval.opt_distinct_t)->str_val_ = string("DISTINCT"); } #line 5555 "bison_parser.cpp" /* yacc.c:1652 */ break; case 246: #line 1763 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_distinct_t) = new OptDistinct(); (yyval.opt_distinct_t)->str_val_ = string(""); } #line 5561 "bison_parser.cpp" /* yacc.c:1652 */ break; case 247: #line 1767 "bison_parser.y" /* yacc.c:1652 */ { (yyval.select_list_t) = new SelectList(); (yyval.select_list_t)->expr_list_ = (yyvsp[0].expr_list_t); } #line 5570 "bison_parser.cpp" /* yacc.c:1652 */ break; case 248: #line 1774 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_from_clause_t) = new OptFromClause(); (yyval.opt_from_clause_t)->sub_type_ = CASE0; (yyval.opt_from_clause_t)->from_clause_ = (yyvsp[0].from_clause_t); } #line 5576 "bison_parser.cpp" /* yacc.c:1652 */ break; case 249: #line 1775 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_from_clause_t) = new OptFromClause(); (yyval.opt_from_clause_t)->sub_type_ = CASE1; } #line 5582 "bison_parser.cpp" /* yacc.c:1652 */ break; case 250: #line 1779 "bison_parser.y" /* yacc.c:1652 */ { (yyval.from_clause_t) = new FromClause(); (yyval.from_clause_t)->table_ref_ = (yyvsp[0].table_ref_t); } #line 5588 "bison_parser.cpp" /* yacc.c:1652 */ break; case 251: #line 1784 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_where_t) = new OptWhere(); (yyval.opt_where_t)->sub_type_ = CASE0; (yyval.opt_where_t)->expr_ = (yyvsp[0].expr_t); } #line 5594 "bison_parser.cpp" /* yacc.c:1652 */ break; case 252: #line 1785 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_where_t) = new OptWhere(); (yyval.opt_where_t)->sub_type_ = CASE1; } #line 5600 "bison_parser.cpp" /* yacc.c:1652 */ break; case 253: #line 1789 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_group_t) = new OptGroup(); (yyval.opt_group_t)->sub_type_ = CASE0; (yyval.opt_group_t)->expr_list_ = (yyvsp[-1].expr_list_t); (yyval.opt_group_t)->opt_having_ = (yyvsp[0].opt_having_t); } #line 5611 "bison_parser.cpp" /* yacc.c:1652 */ break; case 254: #line 1795 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_group_t) = new OptGroup(); (yyval.opt_group_t)->sub_type_ = CASE1; } #line 5617 "bison_parser.cpp" /* yacc.c:1652 */ break; case 255: #line 1799 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_having_t) = new OptHaving(); (yyval.opt_having_t)->sub_type_ = CASE0; (yyval.opt_having_t)->expr_ = (yyvsp[0].expr_t); } #line 5623 "bison_parser.cpp" /* yacc.c:1652 */ break; case 256: #line 1800 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_having_t) = new OptHaving(); (yyval.opt_having_t)->sub_type_ = CASE1; } #line 5629 "bison_parser.cpp" /* yacc.c:1652 */ break; case 257: #line 1803 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_order_t) = new OptOrder(); (yyval.opt_order_t)->sub_type_ = CASE0; (yyval.opt_order_t)->order_list_ = (yyvsp[0].order_list_t); } #line 5635 "bison_parser.cpp" /* yacc.c:1652 */ break; case 258: #line 1804 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_order_t) = new OptOrder(); (yyval.opt_order_t)->sub_type_ = CASE1; } #line 5641 "bison_parser.cpp" /* yacc.c:1652 */ break; case 259: #line 1808 "bison_parser.y" /* yacc.c:1652 */ { (yyval.order_list_t) = new OrderList(); (yyval.order_list_t)->v_order_desc_.push_back((yyvsp[0].order_desc_t)); } #line 5647 "bison_parser.cpp" /* yacc.c:1652 */ break; case 260: #line 1809 "bison_parser.y" /* yacc.c:1652 */ { (yyvsp[-2].order_list_t) ->v_order_desc_.push_back((yyvsp[0].order_desc_t)); (yyval.order_list_t) = (yyvsp[-2].order_list_t); } #line 5653 "bison_parser.cpp" /* yacc.c:1652 */ break; case 261: #line 1813 "bison_parser.y" /* yacc.c:1652 */ { (yyval.order_desc_t) = new OrderDesc(); (yyval.order_desc_t)->expr_ = (yyvsp[-2].expr_t); (yyval.order_desc_t)->opt_order_type_ = (yyvsp[-1].opt_order_type_t); (yyval.order_desc_t)->opt_null_ = (yyvsp[0].opt_null_t); } #line 5659 "bison_parser.cpp" /* yacc.c:1652 */ break; case 262: #line 1817 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_order_type_t) = new OptOrderType(); (yyval.opt_order_type_t)->str_val_ = string("ASC"); } #line 5665 "bison_parser.cpp" /* yacc.c:1652 */ break; case 263: #line 1818 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_order_type_t) = new OptOrderType(); (yyval.opt_order_type_t)->str_val_ = string("DESC"); } #line 5671 "bison_parser.cpp" /* yacc.c:1652 */ break; case 264: #line 1819 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_order_type_t) = new OptOrderType(); (yyval.opt_order_type_t)->str_val_ = string(""); } #line 5677 "bison_parser.cpp" /* yacc.c:1652 */ break; case 265: #line 1824 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_top_t) = new OptTop(); (yyval.opt_top_t)->sub_type_ = CASE0; (yyval.opt_top_t)->int_literal_ = (yyvsp[0].int_literal_t); } #line 5687 "bison_parser.cpp" /* yacc.c:1652 */ break; case 266: #line 1829 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_top_t) = new OptTop(); (yyval.opt_top_t)->sub_type_ = CASE1; } #line 5696 "bison_parser.cpp" /* yacc.c:1652 */ break; case 267: #line 1836 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_limit_t) = new OptLimit(); (yyval.opt_limit_t)->sub_type_ = CASE0; (yyval.opt_limit_t)->expr1_ = (yyvsp[0].expr_t); } #line 5702 "bison_parser.cpp" /* yacc.c:1652 */ break; case 268: #line 1837 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_limit_t) = new OptLimit(); (yyval.opt_limit_t)->sub_type_ = CASE1; (yyval.opt_limit_t)->expr1_ = (yyvsp[0].expr_t); } #line 5708 "bison_parser.cpp" /* yacc.c:1652 */ break; case 269: #line 1838 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_limit_t) = new OptLimit(); (yyval.opt_limit_t)->sub_type_ = CASE2; (yyval.opt_limit_t)->expr1_ = (yyvsp[-2].expr_t); (yyval.opt_limit_t)->expr2_ = (yyvsp[0].expr_t); } #line 5714 "bison_parser.cpp" /* yacc.c:1652 */ break; case 270: #line 1839 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_limit_t) = new OptLimit(); (yyval.opt_limit_t)->sub_type_ = CASE3; } #line 5720 "bison_parser.cpp" /* yacc.c:1652 */ break; case 271: #line 1840 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_limit_t) = new OptLimit(); (yyval.opt_limit_t)->sub_type_ = CASE4; (yyval.opt_limit_t)->expr1_ = (yyvsp[0].expr_t); } #line 5726 "bison_parser.cpp" /* yacc.c:1652 */ break; case 272: #line 1841 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_limit_t) = nullptr; } #line 5732 "bison_parser.cpp" /* yacc.c:1652 */ break; case 273: #line 1848 "bison_parser.y" /* yacc.c:1652 */ { (yyval.expr_list_t) = new ExprList(); (yyval.expr_list_t)->v_expr_list_.push_back((yyvsp[0].expr_alias_t)); } #line 5741 "bison_parser.cpp" /* yacc.c:1652 */ break; case 274: #line 1852 "bison_parser.y" /* yacc.c:1652 */ { (yyvsp[-2].expr_list_t)->v_expr_list_.push_back((yyvsp[0].expr_alias_t)); (yyval.expr_list_t) = (yyvsp[-2].expr_list_t); } #line 5749 "bison_parser.cpp" /* yacc.c:1652 */ break; case 275: #line 1858 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_literal_list_t) = new OptLiteralList(); (yyval.opt_literal_list_t)->sub_type_ = CASE0; (yyval.opt_literal_list_t)->literal_list_ = (yyvsp[0].literal_list_t); } #line 5759 "bison_parser.cpp" /* yacc.c:1652 */ break; case 276: #line 1863 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_literal_list_t) = new OptLiteralList(); (yyval.opt_literal_list_t)->sub_type_ = CASE1; } #line 5767 "bison_parser.cpp" /* yacc.c:1652 */ break; case 277: #line 1869 "bison_parser.y" /* yacc.c:1652 */ { (yyval.literal_list_t) = new LiteralList(); (yyval.literal_list_t)->v_literal_list_.push_back((yyvsp[0].literal_t)); } #line 5776 "bison_parser.cpp" /* yacc.c:1652 */ break; case 278: #line 1873 "bison_parser.y" /* yacc.c:1652 */ { (yyvsp[-2].literal_list_t) ->v_literal_list_.push_back((yyvsp[0].literal_t)); (yyval.literal_list_t) = (yyvsp[-2].literal_list_t); } #line 5785 "bison_parser.cpp" /* yacc.c:1652 */ break; case 279: #line 1880 "bison_parser.y" /* yacc.c:1652 */ { (yyval.expr_alias_t) = new ExprAlias(); (yyval.expr_alias_t)->expr_ = (yyvsp[-1].expr_t); (yyval.expr_alias_t)->opt_alias_ = (yyvsp[0].opt_alias_t); } #line 5795 "bison_parser.cpp" /* yacc.c:1652 */ break; case 280: #line 1888 "bison_parser.y" /* yacc.c:1652 */ { (yyval.expr_t) = (yyvsp[0].operand_t); } #line 5801 "bison_parser.cpp" /* yacc.c:1652 */ break; case 281: #line 1889 "bison_parser.y" /* yacc.c:1652 */ { (yyval.expr_t) = (yyvsp[0].between_expr_t); } #line 5807 "bison_parser.cpp" /* yacc.c:1652 */ break; case 282: #line 1890 "bison_parser.y" /* yacc.c:1652 */ { (yyval.expr_t) = (yyvsp[0].logic_expr_t); } #line 5813 "bison_parser.cpp" /* yacc.c:1652 */ break; case 283: #line 1891 "bison_parser.y" /* yacc.c:1652 */ { (yyval.expr_t) = (yyvsp[0].exists_expr_t); } #line 5819 "bison_parser.cpp" /* yacc.c:1652 */ break; case 284: #line 1892 "bison_parser.y" /* yacc.c:1652 */ { (yyval.expr_t) = (yyvsp[0].in_expr_t); } #line 5825 "bison_parser.cpp" /* yacc.c:1652 */ break; case 285: #line 1893 "bison_parser.y" /* yacc.c:1652 */ { (yyval.expr_t) = (yyvsp[0].cast_expr_t); } #line 5831 "bison_parser.cpp" /* yacc.c:1652 */ break; case 286: #line 1897 "bison_parser.y" /* yacc.c:1652 */ { (yyval.operand_t) = new Operand(); (yyval.operand_t)->sub_type_ = CASE0; (yyval.operand_t)->expr_ = (yyvsp[-1].expr_t); } #line 5837 "bison_parser.cpp" /* yacc.c:1652 */ break; case 287: #line 1898 "bison_parser.y" /* yacc.c:1652 */ { (yyval.operand_t) = new Operand(); (yyval.operand_t)->sub_type_ = CASE1; (yyval.operand_t)->expr_ = (yyvsp[0].array_index_t); } #line 5843 "bison_parser.cpp" /* yacc.c:1652 */ break; case 288: #line 1899 "bison_parser.y" /* yacc.c:1652 */ { (yyval.operand_t) = new Operand(); (yyval.operand_t)->sub_type_ = CASE1; (yyval.operand_t)->expr_ = (yyvsp[0].scalar_expr_t); } #line 5849 "bison_parser.cpp" /* yacc.c:1652 */ break; case 289: #line 1900 "bison_parser.y" /* yacc.c:1652 */ { (yyval.operand_t) = new Operand(); (yyval.operand_t)->sub_type_ = CASE1; (yyval.operand_t)->expr_ = (yyvsp[0].unary_expr_t); } #line 5855 "bison_parser.cpp" /* yacc.c:1652 */ break; case 290: #line 1901 "bison_parser.y" /* yacc.c:1652 */ { (yyval.operand_t) = new Operand(); (yyval.operand_t)->sub_type_ = CASE1; (yyval.operand_t)->expr_ = (yyvsp[0].binary_expr_t); } #line 5861 "bison_parser.cpp" /* yacc.c:1652 */ break; case 291: #line 1902 "bison_parser.y" /* yacc.c:1652 */ { (yyval.operand_t) = new Operand(); (yyval.operand_t)->sub_type_ = CASE1; (yyval.operand_t)->expr_ = (yyvsp[0].case_expr_t); } #line 5867 "bison_parser.cpp" /* yacc.c:1652 */ break; case 292: #line 1903 "bison_parser.y" /* yacc.c:1652 */ { (yyval.operand_t) = new Operand(); (yyval.operand_t)->sub_type_ = CASE1; (yyval.operand_t)->expr_ = (yyvsp[0].function_expr_t); } #line 5873 "bison_parser.cpp" /* yacc.c:1652 */ break; case 293: #line 1904 "bison_parser.y" /* yacc.c:1652 */ { (yyval.operand_t) = new Operand(); (yyval.operand_t)->sub_type_ = CASE1; (yyval.operand_t)->expr_ = (yyvsp[0].extract_expr_t); } #line 5879 "bison_parser.cpp" /* yacc.c:1652 */ break; case 294: #line 1905 "bison_parser.y" /* yacc.c:1652 */ { (yyval.operand_t) = new Operand(); (yyval.operand_t)->sub_type_ = CASE1; (yyval.operand_t)->expr_ = (yyvsp[0].array_expr_t); } #line 5885 "bison_parser.cpp" /* yacc.c:1652 */ break; case 295: #line 1906 "bison_parser.y" /* yacc.c:1652 */ { (yyval.operand_t) = new Operand(); (yyval.operand_t)->sub_type_ = CASE2; (yyval.operand_t)->select_no_paren_ = (yyvsp[-1].select_no_paren_t); } #line 5891 "bison_parser.cpp" /* yacc.c:1652 */ break; case 296: #line 1910 "bison_parser.y" /* yacc.c:1652 */ { (yyval.cast_expr_t) = new CastExpr(); (yyval.cast_expr_t)->expr_ = (yyvsp[-3].expr_t); (yyval.cast_expr_t)->column_type_ = (yyvsp[-1].column_type_t); } #line 5901 "bison_parser.cpp" /* yacc.c:1652 */ break; case 297: #line 1918 "bison_parser.y" /* yacc.c:1652 */ { (yyval.scalar_expr_t) = new ScalarExpr(); (yyval.scalar_expr_t)->sub_type_ = CASE0; (yyval.scalar_expr_t)->column_name_ = (yyvsp[0].column_name_t); } #line 5907 "bison_parser.cpp" /* yacc.c:1652 */ break; case 298: #line 1919 "bison_parser.y" /* yacc.c:1652 */ { (yyval.scalar_expr_t) = new ScalarExpr(); (yyval.scalar_expr_t)->sub_type_ = CASE1; (yyval.scalar_expr_t)->literal_ = (yyvsp[0].literal_t); } #line 5913 "bison_parser.cpp" /* yacc.c:1652 */ break; case 299: #line 1923 "bison_parser.y" /* yacc.c:1652 */ { (yyval.unary_expr_t) = new UnaryExpr(); (yyval.unary_expr_t)->sub_type_ = CASE0; (yyval.unary_expr_t)->operand_ = (yyvsp[0].operand_t); (yyval.unary_expr_t)->operator_ = string("-"); } #line 5924 "bison_parser.cpp" /* yacc.c:1652 */ break; case 300: #line 1929 "bison_parser.y" /* yacc.c:1652 */ { (yyval.unary_expr_t) = new UnaryExpr(); (yyval.unary_expr_t)->sub_type_ = CASE1; (yyval.unary_expr_t)->operand_ = (yyvsp[0].operand_t); (yyval.unary_expr_t)->operator_ = string("NOT"); } #line 5935 "bison_parser.cpp" /* yacc.c:1652 */ break; case 301: #line 1935 "bison_parser.y" /* yacc.c:1652 */ { (yyval.unary_expr_t) = new UnaryExpr(); (yyval.unary_expr_t)->sub_type_ = CASE2; (yyval.unary_expr_t)->operand_ = (yyvsp[-1].operand_t); (yyval.unary_expr_t)->operator_ = string("ISNULL"); } #line 5946 "bison_parser.cpp" /* yacc.c:1652 */ break; case 302: #line 1941 "bison_parser.y" /* yacc.c:1652 */ { (yyval.unary_expr_t) = new UnaryExpr(); (yyval.unary_expr_t)->sub_type_ = CASE3; (yyval.unary_expr_t)->operand_ = (yyvsp[-2].operand_t); (yyval.unary_expr_t)->operator_ = string("IS NULL"); } #line 5957 "bison_parser.cpp" /* yacc.c:1652 */ break; case 303: #line 1947 "bison_parser.y" /* yacc.c:1652 */ { (yyval.unary_expr_t) = new UnaryExpr(); (yyval.unary_expr_t)->sub_type_ = CASE4; (yyval.unary_expr_t)->operand_ = (yyvsp[-3].operand_t); (yyval.unary_expr_t)->operator_ = string("IS NOT NULL"); } #line 5968 "bison_parser.cpp" /* yacc.c:1652 */ break; case 304: #line 1956 "bison_parser.y" /* yacc.c:1652 */ { (yyval.binary_expr_t) = new BinaryExpr(); (yyval.binary_expr_t)->sub_type_ = CASE0; (yyval.binary_expr_t)->comp_expr_ = (yyvsp[0].comp_expr_t); } #line 5974 "bison_parser.cpp" /* yacc.c:1652 */ break; case 305: #line 1957 "bison_parser.y" /* yacc.c:1652 */ { (yyval.binary_expr_t) = new BinaryExpr(); (yyval.binary_expr_t)->sub_type_ = CASE1; (yyval.binary_expr_t)->operand1_ = (yyvsp[-2].operand_t); (yyval.binary_expr_t)->operand2_ = (yyvsp[0].operand_t); (yyval.binary_expr_t)->operator_ = string("-"); } #line 5980 "bison_parser.cpp" /* yacc.c:1652 */ break; case 306: #line 1958 "bison_parser.y" /* yacc.c:1652 */ { (yyval.binary_expr_t) = new BinaryExpr(); (yyval.binary_expr_t)->sub_type_ = CASE1; (yyval.binary_expr_t)->operand1_ = (yyvsp[-2].operand_t); (yyval.binary_expr_t)->operand2_ = (yyvsp[0].operand_t); (yyval.binary_expr_t)->operator_ = string("+"); } #line 5986 "bison_parser.cpp" /* yacc.c:1652 */ break; case 307: #line 1959 "bison_parser.y" /* yacc.c:1652 */ { (yyval.binary_expr_t) = new BinaryExpr(); (yyval.binary_expr_t)->sub_type_ = CASE1; (yyval.binary_expr_t)->operand1_ = (yyvsp[-2].operand_t); (yyval.binary_expr_t)->operand2_ = (yyvsp[0].operand_t); (yyval.binary_expr_t)->operator_ = string("/"); } #line 5992 "bison_parser.cpp" /* yacc.c:1652 */ break; case 308: #line 1960 "bison_parser.y" /* yacc.c:1652 */ { (yyval.binary_expr_t) = new BinaryExpr(); (yyval.binary_expr_t)->sub_type_ = CASE1; (yyval.binary_expr_t)->operand1_ = (yyvsp[-2].operand_t); (yyval.binary_expr_t)->operand2_ = (yyvsp[0].operand_t); (yyval.binary_expr_t)->operator_ = string("*"); } #line 5998 "bison_parser.cpp" /* yacc.c:1652 */ break; case 309: #line 1961 "bison_parser.y" /* yacc.c:1652 */ { (yyval.binary_expr_t) = new BinaryExpr(); (yyval.binary_expr_t)->sub_type_ = CASE1; (yyval.binary_expr_t)->operand1_ = (yyvsp[-2].operand_t); (yyval.binary_expr_t)->operand2_ = (yyvsp[0].operand_t); (yyval.binary_expr_t)->operator_ = string("%"); } #line 6004 "bison_parser.cpp" /* yacc.c:1652 */ break; case 310: #line 1962 "bison_parser.y" /* yacc.c:1652 */ { (yyval.binary_expr_t) = new BinaryExpr(); (yyval.binary_expr_t)->sub_type_ = CASE1; (yyval.binary_expr_t)->operand1_ = (yyvsp[-2].operand_t); (yyval.binary_expr_t)->operand2_ = (yyvsp[0].operand_t); (yyval.binary_expr_t)->operator_ = string("^"); } #line 6010 "bison_parser.cpp" /* yacc.c:1652 */ break; case 311: #line 1963 "bison_parser.y" /* yacc.c:1652 */ { (yyval.binary_expr_t) = new BinaryExpr(); (yyval.binary_expr_t)->sub_type_ = CASE1; (yyval.binary_expr_t)->operand1_ = (yyvsp[-2].operand_t); (yyval.binary_expr_t)->operand2_ = (yyvsp[0].operand_t); (yyval.binary_expr_t)->operator_ = string("LIKE"); } #line 6016 "bison_parser.cpp" /* yacc.c:1652 */ break; case 312: #line 1964 "bison_parser.y" /* yacc.c:1652 */ { (yyval.binary_expr_t) = new BinaryExpr(); (yyval.binary_expr_t)->sub_type_ = CASE1; (yyval.binary_expr_t)->operand1_ = (yyvsp[-3].operand_t); (yyval.binary_expr_t)->operand2_ = (yyvsp[0].operand_t); (yyval.binary_expr_t)->operator_ = string("NOT LIKE"); } #line 6022 "bison_parser.cpp" /* yacc.c:1652 */ break; case 313: #line 1965 "bison_parser.y" /* yacc.c:1652 */ { (yyval.binary_expr_t) = new BinaryExpr(); (yyval.binary_expr_t)->sub_type_ = CASE1; (yyval.binary_expr_t)->operand1_ = (yyvsp[-2].operand_t); (yyval.binary_expr_t)->operand2_ = (yyvsp[0].operand_t); (yyval.binary_expr_t)->operator_ = string("ILIKE"); } #line 6028 "bison_parser.cpp" /* yacc.c:1652 */ break; case 314: #line 1966 "bison_parser.y" /* yacc.c:1652 */ { (yyval.binary_expr_t) = new BinaryExpr(); (yyval.binary_expr_t)->sub_type_ = CASE1; (yyval.binary_expr_t)->operand1_ = (yyvsp[-2].operand_t); (yyval.binary_expr_t)->operand2_ = (yyvsp[0].operand_t); (yyval.binary_expr_t)->operator_ = string("CONCAT"); } #line 6034 "bison_parser.cpp" /* yacc.c:1652 */ break; case 315: #line 1967 "bison_parser.y" /* yacc.c:1652 */ { (yyval.binary_expr_t) = new BinaryExpr(); (yyval.binary_expr_t)->sub_type_ = CASE1; (yyval.binary_expr_t)->operand1_ = (yyvsp[-2].operand_t); (yyval.binary_expr_t)->operand2_ = (yyvsp[0].operand_t); (yyval.binary_expr_t)->operator_ = string("GLOB"); } #line 6040 "bison_parser.cpp" /* yacc.c:1652 */ break; case 316: #line 1968 "bison_parser.y" /* yacc.c:1652 */ { (yyval.binary_expr_t) = new BinaryExpr(); (yyval.binary_expr_t)->sub_type_ = CASE1; (yyval.binary_expr_t)->operand1_ = (yyvsp[-2].operand_t); (yyval.binary_expr_t)->operand2_ = (yyvsp[0].operand_t); (yyval.binary_expr_t)->operator_ = string("MATCH"); } #line 6046 "bison_parser.cpp" /* yacc.c:1652 */ break; case 317: #line 1969 "bison_parser.y" /* yacc.c:1652 */ { (yyval.binary_expr_t) = new BinaryExpr(); (yyval.binary_expr_t)->sub_type_ = CASE1; (yyval.binary_expr_t)->operand1_ = (yyvsp[-2].operand_t); (yyval.binary_expr_t)->operand2_ = (yyvsp[0].operand_t); (yyval.binary_expr_t)->operator_ = string("REGEX"); } #line 6052 "bison_parser.cpp" /* yacc.c:1652 */ break; case 318: #line 1973 "bison_parser.y" /* yacc.c:1652 */ { (yyval.logic_expr_t) = new LogicExpr(); (yyval.logic_expr_t)->expr1_ = (yyvsp[-2].expr_t); (yyval.logic_expr_t)->expr2_ = (yyvsp[0].expr_t); (yyval.logic_expr_t)->operator_ = string("AND"); } #line 6058 "bison_parser.cpp" /* yacc.c:1652 */ break; case 319: #line 1974 "bison_parser.y" /* yacc.c:1652 */ { (yyval.logic_expr_t) = new LogicExpr(); (yyval.logic_expr_t)->expr1_ = (yyvsp[-2].expr_t); (yyval.logic_expr_t)->expr2_ = (yyvsp[0].expr_t); (yyval.logic_expr_t)->operator_ = string("OR"); } #line 6064 "bison_parser.cpp" /* yacc.c:1652 */ break; case 320: #line 1978 "bison_parser.y" /* yacc.c:1652 */ { (yyval.in_expr_t) = new InExpr(); (yyval.in_expr_t)->sub_type_ = CASE0; (yyval.in_expr_t)->operand_ = (yyvsp[-4].operand_t); (yyval.in_expr_t)->expr_list_ = (yyvsp[-1].expr_list_t); } #line 6070 "bison_parser.cpp" /* yacc.c:1652 */ break; case 321: #line 1979 "bison_parser.y" /* yacc.c:1652 */ { (yyval.in_expr_t) = new InExpr(); (yyval.in_expr_t)->sub_type_ = CASE1; (yyval.in_expr_t)->operand_ = (yyvsp[-5].operand_t); (yyval.in_expr_t)->expr_list_ = (yyvsp[-1].expr_list_t); } #line 6076 "bison_parser.cpp" /* yacc.c:1652 */ break; case 322: #line 1980 "bison_parser.y" /* yacc.c:1652 */ { (yyval.in_expr_t) = new InExpr(); (yyval.in_expr_t)->sub_type_ = CASE2; (yyval.in_expr_t)->operand_ = (yyvsp[-4].operand_t); (yyval.in_expr_t)->select_no_paren_ = (yyvsp[-1].select_no_paren_t); } #line 6082 "bison_parser.cpp" /* yacc.c:1652 */ break; case 323: #line 1981 "bison_parser.y" /* yacc.c:1652 */ { (yyval.in_expr_t) = new InExpr(); (yyval.in_expr_t)->sub_type_ = CASE3; (yyval.in_expr_t)->operand_ = (yyvsp[-5].operand_t); (yyval.in_expr_t)->select_no_paren_ = (yyvsp[-1].select_no_paren_t); } #line 6088 "bison_parser.cpp" /* yacc.c:1652 */ break; case 324: #line 1987 "bison_parser.y" /* yacc.c:1652 */ { (yyval.case_expr_t) = new CaseExpr(); (yyval.case_expr_t)->sub_type_ = CASE0; (yyval.case_expr_t)->case_expr_ = (yyvsp[-2].expr_t); (yyval.case_expr_t)->case_list_ = (yyvsp[-1].case_list_t); } #line 6094 "bison_parser.cpp" /* yacc.c:1652 */ break; case 325: #line 1988 "bison_parser.y" /* yacc.c:1652 */ { (yyval.case_expr_t) = new CaseExpr(); (yyval.case_expr_t)->sub_type_ = CASE1; (yyval.case_expr_t)->case_expr_ = (yyvsp[-4].expr_t); (yyval.case_expr_t)->case_list_ = (yyvsp[-3].case_list_t); (yyval.case_expr_t)->else_expr_ = (yyvsp[-1].expr_t); } #line 6100 "bison_parser.cpp" /* yacc.c:1652 */ break; case 326: #line 1989 "bison_parser.y" /* yacc.c:1652 */ { (yyval.case_expr_t) = new CaseExpr(); (yyval.case_expr_t)->sub_type_ = CASE2; (yyval.case_expr_t)->case_list_ = (yyvsp[-1].case_list_t); } #line 6106 "bison_parser.cpp" /* yacc.c:1652 */ break; case 327: #line 1990 "bison_parser.y" /* yacc.c:1652 */ { (yyval.case_expr_t) = new CaseExpr(); (yyval.case_expr_t)->sub_type_ = CASE3; (yyval.case_expr_t)->else_expr_ = (yyvsp[-1].expr_t); (yyval.case_expr_t)->case_list_ = (yyvsp[-3].case_list_t); } #line 6112 "bison_parser.cpp" /* yacc.c:1652 */ break; case 328: #line 1994 "bison_parser.y" /* yacc.c:1652 */ { (yyval.case_list_t) = new CaseList(); (yyval.case_list_t) ->v_case_list_.push_back( new CaseClause((yyvsp[-2].expr_t), (yyvsp[0].expr_t))); } #line 6118 "bison_parser.cpp" /* yacc.c:1652 */ break; case 329: #line 1995 "bison_parser.y" /* yacc.c:1652 */ { (yyval.case_list_t) ->v_case_list_.push_back( new CaseClause((yyvsp[-2].expr_t), (yyvsp[0].expr_t))); (yyval.case_list_t) = (yyvsp[-4].case_list_t); } #line 6124 "bison_parser.cpp" /* yacc.c:1652 */ break; case 330: #line 1999 "bison_parser.y" /* yacc.c:1652 */ { (yyval.exists_expr_t) = new ExistsExpr(); (yyval.exists_expr_t)->sub_type_ = CASE0; (yyval.exists_expr_t)->select_no_paren_ = (yyvsp[-1].select_no_paren_t); } #line 6130 "bison_parser.cpp" /* yacc.c:1652 */ break; case 331: #line 2000 "bison_parser.y" /* yacc.c:1652 */ { (yyval.exists_expr_t) = new ExistsExpr(); (yyval.exists_expr_t)->sub_type_ = CASE1; (yyval.exists_expr_t)->select_no_paren_ = (yyvsp[-1].select_no_paren_t); } #line 6136 "bison_parser.cpp" /* yacc.c:1652 */ break; case 332: #line 2004 "bison_parser.y" /* yacc.c:1652 */ { (yyval.comp_expr_t) = new CompExpr(); (yyval.comp_expr_t)->operand1_ = (yyvsp[-2].operand_t); (yyval.comp_expr_t)->operand2_ = (yyvsp[0].operand_t); (yyval.comp_expr_t)->operator_ = string("="); } #line 6142 "bison_parser.cpp" /* yacc.c:1652 */ break; case 333: #line 2005 "bison_parser.y" /* yacc.c:1652 */ { (yyval.comp_expr_t) = new CompExpr(); (yyval.comp_expr_t)->operand1_ = (yyvsp[-2].operand_t); (yyval.comp_expr_t)->operand2_ = (yyvsp[0].operand_t); (yyval.comp_expr_t)->operator_ = string("=="); } #line 6148 "bison_parser.cpp" /* yacc.c:1652 */ break; case 334: #line 2006 "bison_parser.y" /* yacc.c:1652 */ { (yyval.comp_expr_t) = new CompExpr(); (yyval.comp_expr_t)->operand1_ = (yyvsp[-2].operand_t); (yyval.comp_expr_t)->operand2_ = (yyvsp[0].operand_t); (yyval.comp_expr_t)->operator_ = string("!="); } #line 6154 "bison_parser.cpp" /* yacc.c:1652 */ break; case 335: #line 2007 "bison_parser.y" /* yacc.c:1652 */ { (yyval.comp_expr_t) = new CompExpr(); (yyval.comp_expr_t)->operand1_ = (yyvsp[-2].operand_t); (yyval.comp_expr_t)->operand2_ = (yyvsp[0].operand_t); (yyval.comp_expr_t)->operator_ = string("<"); } #line 6160 "bison_parser.cpp" /* yacc.c:1652 */ break; case 336: #line 2008 "bison_parser.y" /* yacc.c:1652 */ { (yyval.comp_expr_t) = new CompExpr(); (yyval.comp_expr_t)->operand1_ = (yyvsp[-2].operand_t); (yyval.comp_expr_t)->operand2_ = (yyvsp[0].operand_t); (yyval.comp_expr_t)->operator_ = string(">"); } #line 6166 "bison_parser.cpp" /* yacc.c:1652 */ break; case 337: #line 2009 "bison_parser.y" /* yacc.c:1652 */ { (yyval.comp_expr_t) = new CompExpr(); (yyval.comp_expr_t)->operand1_ = (yyvsp[-2].operand_t); (yyval.comp_expr_t)->operand2_ = (yyvsp[0].operand_t); (yyval.comp_expr_t)->operator_ = string("<="); } #line 6172 "bison_parser.cpp" /* yacc.c:1652 */ break; case 338: #line 2010 "bison_parser.y" /* yacc.c:1652 */ { (yyval.comp_expr_t) = new CompExpr(); (yyval.comp_expr_t)->operand1_ = (yyvsp[-2].operand_t); (yyval.comp_expr_t)->operand2_ = (yyvsp[0].operand_t); (yyval.comp_expr_t)->operator_ = string(">="); } #line 6178 "bison_parser.cpp" /* yacc.c:1652 */ break; case 339: #line 2014 "bison_parser.y" /* yacc.c:1652 */ { (yyval.function_expr_t) = new FunctionExpr(); (yyval.function_expr_t)->sub_type_ = CASE0; (yyval.function_expr_t)->id_ = new Identifier((yyvsp[-4].sval)); (yyval.function_expr_t)->opt_filter_clause_ = (yyvsp[-1].opt_filter_clause_t); (yyval.function_expr_t)->opt_over_clause_ = (yyvsp[0].opt_over_clause_t); free((yyvsp[-4].sval)); } #line 6191 "bison_parser.cpp" /* yacc.c:1652 */ break; case 340: #line 2022 "bison_parser.y" /* yacc.c:1652 */ { (yyval.function_expr_t) = new FunctionExpr(); (yyval.function_expr_t)->sub_type_ = CASE1; (yyval.function_expr_t)->id_ = new Identifier((yyvsp[-6].sval)); (yyval.function_expr_t)->opt_distinct_ = (yyvsp[-4].opt_distinct_t); (yyval.function_expr_t)->expr_list_ = (yyvsp[-3].expr_list_t); (yyval.function_expr_t)->opt_filter_clause_ = (yyvsp[-1].opt_filter_clause_t); (yyval.function_expr_t)->opt_over_clause_ = (yyvsp[0].opt_over_clause_t); free((yyvsp[-6].sval)); } #line 6206 "bison_parser.cpp" /* yacc.c:1652 */ break; case 341: #line 2035 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_over_clause_t) = new OptOverClause(); (yyval.opt_over_clause_t)->sub_type_ = CASE0; (yyval.opt_over_clause_t)->window_ = (yyvsp[-1].window_t); } #line 6212 "bison_parser.cpp" /* yacc.c:1652 */ break; case 342: #line 2036 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_over_clause_t) = new OptOverClause(); (yyval.opt_over_clause_t)->sub_type_ = CASE1; (yyval.opt_over_clause_t)->id_ = new Identifier((yyvsp[0].sval), id_window_name); free((yyvsp[0].sval)); } #line 6223 "bison_parser.cpp" /* yacc.c:1652 */ break; case 343: #line 2042 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_over_clause_t) = new OptOverClause(); (yyval.opt_over_clause_t)->sub_type_ = CASE2; } #line 6229 "bison_parser.cpp" /* yacc.c:1652 */ break; case 344: #line 2046 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_filter_clause_t) = new OptFilterClause(); (yyval.opt_filter_clause_t)->sub_type_ = CASE0; (yyval.opt_filter_clause_t)->expr_ = (yyvsp[-1].expr_t); } #line 6235 "bison_parser.cpp" /* yacc.c:1652 */ break; case 345: #line 2047 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_filter_clause_t) = new OptFilterClause(); (yyval.opt_filter_clause_t)->sub_type_ = CASE1; } #line 6241 "bison_parser.cpp" /* yacc.c:1652 */ break; case 346: #line 2052 "bison_parser.y" /* yacc.c:1652 */ { (yyval.extract_expr_t) = new ExtractExpr(); (yyval.extract_expr_t)->datetime_field_ = (yyvsp[-3].datetime_field_t); (yyval.extract_expr_t)->expr_ = (yyvsp[-1].expr_t); (yyval.extract_expr_t)->sub_type_ = CASE0; } #line 6252 "bison_parser.cpp" /* yacc.c:1652 */ break; case 347: #line 2061 "bison_parser.y" /* yacc.c:1652 */ { (yyval.datetime_field_t) = new DatetimeField(); (yyval.datetime_field_t)->str_val_ = string("SECOND"); } #line 6258 "bison_parser.cpp" /* yacc.c:1652 */ break; case 348: #line 2062 "bison_parser.y" /* yacc.c:1652 */ { (yyval.datetime_field_t) = new DatetimeField(); (yyval.datetime_field_t)->str_val_ = string("MINUTE"); } #line 6264 "bison_parser.cpp" /* yacc.c:1652 */ break; case 349: #line 2063 "bison_parser.y" /* yacc.c:1652 */ { (yyval.datetime_field_t) = new DatetimeField(); (yyval.datetime_field_t)->str_val_ = string("HOUR"); } #line 6270 "bison_parser.cpp" /* yacc.c:1652 */ break; case 350: #line 2064 "bison_parser.y" /* yacc.c:1652 */ { (yyval.datetime_field_t) = new DatetimeField(); (yyval.datetime_field_t)->str_val_ = string("DAY"); } #line 6276 "bison_parser.cpp" /* yacc.c:1652 */ break; case 351: #line 2065 "bison_parser.y" /* yacc.c:1652 */ { (yyval.datetime_field_t) = new DatetimeField(); (yyval.datetime_field_t)->str_val_ = string("MONTH"); } #line 6282 "bison_parser.cpp" /* yacc.c:1652 */ break; case 352: #line 2066 "bison_parser.y" /* yacc.c:1652 */ { (yyval.datetime_field_t) = new DatetimeField(); (yyval.datetime_field_t)->str_val_ = string("YEAR"); } #line 6288 "bison_parser.cpp" /* yacc.c:1652 */ break; case 353: #line 2070 "bison_parser.y" /* yacc.c:1652 */ { (yyval.array_expr_t) = new ArrayExpr(); (yyval.array_expr_t)->expr_list_ = (yyvsp[-1].expr_list_t); } #line 6294 "bison_parser.cpp" /* yacc.c:1652 */ break; case 354: #line 2074 "bison_parser.y" /* yacc.c:1652 */ { (yyval.array_index_t) = new ArrayIndex(); (yyval.array_index_t)->operand_ = (yyvsp[-3].operand_t); (yyval.array_index_t)->int_literal_ = (yyvsp[-1].int_literal_t); } #line 6300 "bison_parser.cpp" /* yacc.c:1652 */ break; case 355: #line 2078 "bison_parser.y" /* yacc.c:1652 */ { (yyval.between_expr_t) = new BetweenExpr(); (yyval.between_expr_t)->operand1_ = (yyvsp[-4].operand_t); (yyval.between_expr_t)->operand2_ = (yyvsp[-2].operand_t); (yyval.between_expr_t)->operand3_ = (yyvsp[0].operand_t); } #line 6306 "bison_parser.cpp" /* yacc.c:1652 */ break; case 356: #line 2082 "bison_parser.y" /* yacc.c:1652 */ { (yyval.column_name_t) = new ColumnName(); (yyval.column_name_t)->sub_type_ = CASE0; (yyval.column_name_t)->identifier1_ = new Identifier((yyvsp[0].sval), id_column_name); free((yyvsp[0].sval)); } #line 6312 "bison_parser.cpp" /* yacc.c:1652 */ break; case 357: #line 2083 "bison_parser.y" /* yacc.c:1652 */ { (yyval.column_name_t) = new ColumnName(); (yyval.column_name_t)->sub_type_ = CASE1; (yyval.column_name_t)->identifier1_ = new Identifier((yyvsp[-2].sval), id_table_name); (yyval.column_name_t)->identifier2_ = new Identifier((yyvsp[0].sval), id_column_name); free((yyvsp[-2].sval)); free((yyvsp[0].sval)); } #line 6318 "bison_parser.cpp" /* yacc.c:1652 */ break; case 358: #line 2084 "bison_parser.y" /* yacc.c:1652 */ { (yyval.column_name_t) = new ColumnName(); (yyval.column_name_t)->sub_type_ = CASE2; } #line 6324 "bison_parser.cpp" /* yacc.c:1652 */ break; case 359: #line 2085 "bison_parser.y" /* yacc.c:1652 */ { (yyval.column_name_t) = new ColumnName(); (yyval.column_name_t)->sub_type_ = CASE3; (yyval.column_name_t)->identifier1_ = new Identifier((yyvsp[-2].sval), id_table_name); free((yyvsp[-2].sval)); } #line 6330 "bison_parser.cpp" /* yacc.c:1652 */ break; case 360: #line 2089 "bison_parser.y" /* yacc.c:1652 */ { (yyval.literal_t) = (yyvsp[0].string_literal_t); } #line 6336 "bison_parser.cpp" /* yacc.c:1652 */ break; case 361: #line 2090 "bison_parser.y" /* yacc.c:1652 */ { (yyval.literal_t) = (yyvsp[0].bool_literal_t); } #line 6342 "bison_parser.cpp" /* yacc.c:1652 */ break; case 362: #line 2091 "bison_parser.y" /* yacc.c:1652 */ { (yyval.literal_t) = (yyvsp[0].num_literal_t); } #line 6348 "bison_parser.cpp" /* yacc.c:1652 */ break; case 363: #line 2092 "bison_parser.y" /* yacc.c:1652 */ { (yyval.literal_t) = (yyvsp[0].null_literal_t); } #line 6354 "bison_parser.cpp" /* yacc.c:1652 */ break; case 364: #line 2093 "bison_parser.y" /* yacc.c:1652 */ { (yyval.literal_t) = (yyvsp[0].param_expr_t); } #line 6360 "bison_parser.cpp" /* yacc.c:1652 */ break; case 365: #line 2097 "bison_parser.y" /* yacc.c:1652 */ { (yyval.string_literal_t) = new StringLiteral(); (yyval.string_literal_t)->str_val_ = (yyvsp[0].sval); free((yyvsp[0].sval)); } #line 6366 "bison_parser.cpp" /* yacc.c:1652 */ break; case 366: #line 2101 "bison_parser.y" /* yacc.c:1652 */ { (yyval.bool_literal_t) = new BoolLiteral(); (yyval.bool_literal_t)->b_val_ = true; } #line 6372 "bison_parser.cpp" /* yacc.c:1652 */ break; case 367: #line 2102 "bison_parser.y" /* yacc.c:1652 */ { (yyval.bool_literal_t) = new BoolLiteral(); (yyval.bool_literal_t)->b_val_ = false; } #line 6378 "bison_parser.cpp" /* yacc.c:1652 */ break; case 368: #line 2106 "bison_parser.y" /* yacc.c:1652 */ { (yyval.num_literal_t) = new NumLiteral(); (yyval.num_literal_t)->sub_type_ = CASE0; (yyval.num_literal_t)->f_val_ = (yyvsp[0].fval); } #line 6384 "bison_parser.cpp" /* yacc.c:1652 */ break; case 369: #line 2107 "bison_parser.y" /* yacc.c:1652 */ { (yyval.num_literal_t) = new NumLiteral(); (yyval.num_literal_t)->sub_type_ = CASE1; (yyval.num_literal_t)->int_literal_ = (yyvsp[0].int_literal_t); } #line 6390 "bison_parser.cpp" /* yacc.c:1652 */ break; case 370: #line 2111 "bison_parser.y" /* yacc.c:1652 */ { (yyval.int_literal_t) = new IntLiteral(); (yyval.int_literal_t)->int_val_ = (yyvsp[0].ival); } #line 6396 "bison_parser.cpp" /* yacc.c:1652 */ break; case 371: #line 2115 "bison_parser.y" /* yacc.c:1652 */ { (yyval.null_literal_t) = new NullLiteral(); } #line 6402 "bison_parser.cpp" /* yacc.c:1652 */ break; case 372: #line 2119 "bison_parser.y" /* yacc.c:1652 */ { (yyval.param_expr_t) = new ParamExpr(); } #line 6410 "bison_parser.cpp" /* yacc.c:1652 */ break; case 373: #line 2131 "bison_parser.y" /* yacc.c:1652 */ { (yyval.table_ref_t) = new TableRef(); (yyval.table_ref_t)->sub_type_ = CASE0; (yyval.table_ref_t)->table_prefix_ = (yyvsp[-5].table_prefix_t); (yyval.table_ref_t)->table_name_ = (yyvsp[-4].table_name_t); (yyval.table_ref_t)->opt_alias_ = (yyvsp[-3].opt_alias_t); (yyval.table_ref_t)->opt_index_ = (yyvsp[-2].opt_index_t); (yyval.table_ref_t)->opt_on_ = (yyvsp[-1].opt_on_t); (yyval.table_ref_t)->opt_using_ = (yyvsp[0].opt_using_t); (yyval.table_ref_t)->table_name_->table_name_->id_type_ = id_top_table_name; } #line 6426 "bison_parser.cpp" /* yacc.c:1652 */ break; case 374: #line 2142 "bison_parser.y" /* yacc.c:1652 */ { (yyval.table_ref_t) = new TableRef(); (yyval.table_ref_t)->sub_type_ = CASE1; (yyval.table_ref_t)->table_prefix_ = (yyvsp[-7].table_prefix_t); (yyval.table_ref_t)->table_name_ = (yyvsp[-6].table_name_t); (yyval.table_ref_t)->expr_list_ = (yyvsp[-4].expr_list_t); (yyval.table_ref_t)->opt_alias_ = (yyvsp[-2].opt_alias_t); (yyval.table_ref_t)->opt_on_ = (yyvsp[-1].opt_on_t); (yyval.table_ref_t)->opt_using_ = (yyvsp[0].opt_using_t); (yyval.table_ref_t)->table_name_->table_name_->id_type_ = id_top_table_name; } #line 6442 "bison_parser.cpp" /* yacc.c:1652 */ break; case 375: #line 2153 "bison_parser.y" /* yacc.c:1652 */ { (yyval.table_ref_t) = new TableRef(); (yyval.table_ref_t)->sub_type_ = CASE2; (yyval.table_ref_t)->table_prefix_ = (yyvsp[-6].table_prefix_t); (yyval.table_ref_t)->select_no_paren_ = (yyvsp[-4].select_no_paren_t); (yyval.table_ref_t)->opt_alias_ = (yyvsp[-2].opt_alias_t); (yyval.table_ref_t)->opt_on_ = (yyvsp[-1].opt_on_t); (yyval.table_ref_t)->opt_using_ = (yyvsp[0].opt_using_t); } #line 6456 "bison_parser.cpp" /* yacc.c:1652 */ break; case 376: #line 2162 "bison_parser.y" /* yacc.c:1652 */ { (yyval.table_ref_t) = new TableRef(); (yyval.table_ref_t)->sub_type_ = CASE3; (yyval.table_ref_t)->table_prefix_ = (yyvsp[-6].table_prefix_t); (yyval.table_ref_t)->table_ref_ = (yyvsp[-4].table_ref_t); (yyval.table_ref_t)->opt_alias_ = (yyvsp[-2].opt_alias_t); (yyval.table_ref_t)->opt_on_ = (yyvsp[-1].opt_on_t); (yyval.table_ref_t)->opt_using_ = (yyvsp[0].opt_using_t); } #line 6470 "bison_parser.cpp" /* yacc.c:1652 */ break; case 377: #line 2174 "bison_parser.y" /* yacc.c:1652 */ { (yyval.table_prefix_t) = new TablePrefix(); (yyval.table_prefix_t)->sub_type_ = CASE0; (yyval.table_prefix_t)->table_ref_ = (yyvsp[-1].table_ref_t); (yyval.table_prefix_t)->join_op_ = (yyvsp[0].join_op_t); } #line 6481 "bison_parser.cpp" /* yacc.c:1652 */ break; case 378: #line 2180 "bison_parser.y" /* yacc.c:1652 */ { (yyval.table_prefix_t) = new TablePrefix(); (yyval.table_prefix_t)->sub_type_ = CASE1; } #line 6490 "bison_parser.cpp" /* yacc.c:1652 */ break; case 379: #line 2186 "bison_parser.y" /* yacc.c:1652 */ { (yyval.join_op_t) = new JoinOp(); (yyval.join_op_t)->sub_type_ = CASE0; } #line 6496 "bison_parser.cpp" /* yacc.c:1652 */ break; case 380: #line 2187 "bison_parser.y" /* yacc.c:1652 */ { (yyval.join_op_t) = new JoinOp(); (yyval.join_op_t)->sub_type_ = CASE1; } #line 6502 "bison_parser.cpp" /* yacc.c:1652 */ break; case 381: #line 2188 "bison_parser.y" /* yacc.c:1652 */ { (yyval.join_op_t) = new JoinOp(); (yyval.join_op_t)->sub_type_ = CASE2; (yyval.join_op_t)->join_kw_ = (yyvsp[-1].join_kw_t); } #line 6508 "bison_parser.cpp" /* yacc.c:1652 */ break; case 382: #line 2189 "bison_parser.y" /* yacc.c:1652 */ { (yyval.join_op_t) = new JoinOp(); (yyval.join_op_t)->sub_type_ = CASE3; (yyval.join_op_t)->id1_ = new Identifier((yyvsp[-1].sval), id_top_table_name); (yyval.join_op_t)->join_kw_ = (yyvsp[-2].join_kw_t); free((yyvsp[-1].sval)); } #line 6519 "bison_parser.cpp" /* yacc.c:1652 */ break; case 383: #line 2195 "bison_parser.y" /* yacc.c:1652 */ { (yyval.join_op_t) = new JoinOp(); (yyval.join_op_t)->sub_type_ = CASE4; (yyval.join_op_t)->id1_ = new Identifier((yyvsp[-2].sval)); (yyval.join_op_t)->id2_ = new Identifier((yyvsp[-1].sval)); (yyval.join_op_t)->join_kw_ = (yyvsp[-3].join_kw_t); free((yyvsp[-2].sval)); free((yyvsp[-1].sval)); } #line 6533 "bison_parser.cpp" /* yacc.c:1652 */ break; case 384: #line 2207 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_index_t) = new OptIndex(); (yyval.opt_index_t)->sub_type_ = CASE0; (yyval.opt_index_t)->column_name_ = (yyvsp[0].column_name_t); } #line 6539 "bison_parser.cpp" /* yacc.c:1652 */ break; case 385: #line 2208 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_index_t) = new OptIndex(); (yyval.opt_index_t)->sub_type_ = CASE1; } #line 6545 "bison_parser.cpp" /* yacc.c:1652 */ break; case 386: #line 2209 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_index_t) = new OptIndex(); (yyval.opt_index_t)->sub_type_ = CASE2; } #line 6551 "bison_parser.cpp" /* yacc.c:1652 */ break; case 387: #line 2213 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_on_t) = new OptOn(); (yyval.opt_on_t)->sub_type_ = CASE0; (yyval.opt_on_t)->expr_ = (yyvsp[0].expr_t); } #line 6557 "bison_parser.cpp" /* yacc.c:1652 */ break; case 388: #line 2214 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_on_t) = new OptOn(); (yyval.opt_on_t)->sub_type_ = CASE1; } #line 6563 "bison_parser.cpp" /* yacc.c:1652 */ break; case 389: #line 2218 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_using_t) = new OptUsing(); (yyval.opt_using_t)->sub_type_ = CASE0; (yyval.opt_using_t)->ident_commalist_ = (yyvsp[-1].ident_commalist_t); } #line 6569 "bison_parser.cpp" /* yacc.c:1652 */ break; case 390: #line 2219 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_using_t) = new OptUsing(); (yyval.opt_using_t)->sub_type_ = CASE1; } #line 6575 "bison_parser.cpp" /* yacc.c:1652 */ break; case 391: #line 2224 "bison_parser.y" /* yacc.c:1652 */ { (yyval.table_ref_name_no_alias_t) = new TableRefNameNoAlias(); (yyval.table_ref_name_no_alias_t)->table_name_ = (yyvsp[0].table_name_t); (yyval.table_ref_name_no_alias_t)->table_name_->table_name_->id_type_ = id_top_table_name; } #line 6585 "bison_parser.cpp" /* yacc.c:1652 */ break; case 392: #line 2231 "bison_parser.y" /* yacc.c:1652 */ { (yyval.table_name_t) = new TableName(); (yyval.table_name_t)->sub_type_ = CASE0; (yyval.table_name_t)->table_name_ = new Identifier((yyvsp[0].sval), id_table_name); (yyval.table_name_t)->database_name_ = NULL; free((yyvsp[0].sval)); } #line 6591 "bison_parser.cpp" /* yacc.c:1652 */ break; case 393: #line 2232 "bison_parser.y" /* yacc.c:1652 */ { (yyval.table_name_t) = new TableName(); (yyval.table_name_t)->sub_type_ = CASE1; (yyval.table_name_t)->database_name_ = new Identifier((yyvsp[-2].sval), id_database_name); (yyval.table_name_t)->table_name_ = new Identifier((yyvsp[0].sval), id_table_name); free((yyvsp[-2].sval)); free((yyvsp[0].sval)); } #line 6604 "bison_parser.cpp" /* yacc.c:1652 */ break; case 394: #line 2243 "bison_parser.y" /* yacc.c:1652 */ { (yyval.alias_t) = new Alias(); (yyval.alias_t)->sub_type_ = CASE0; (yyval.alias_t)->id_ = new Identifier((yyvsp[0].sval)); free((yyvsp[0].sval)); } #line 6610 "bison_parser.cpp" /* yacc.c:1652 */ break; case 395: #line 2248 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_alias_t) = new OptAlias(); (yyval.opt_alias_t)->sub_type_ = CASE0; (yyval.opt_alias_t)->alias_ = (yyvsp[0].alias_t); } #line 6616 "bison_parser.cpp" /* yacc.c:1652 */ break; case 396: #line 2249 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_alias_t) = new OptAlias(); (yyval.opt_alias_t)->sub_type_ = CASE1; } #line 6622 "bison_parser.cpp" /* yacc.c:1652 */ break; case 397: #line 2257 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_with_clause_t) = new OptWithClause(); (yyval.opt_with_clause_t)->sub_type_ = CASE0; (yyval.opt_with_clause_t)->with_clause_ = (yyvsp[0].with_clause_t); } #line 6628 "bison_parser.cpp" /* yacc.c:1652 */ break; case 398: #line 2258 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_with_clause_t) = new OptWithClause(); (yyval.opt_with_clause_t)->sub_type_ = CASE1; } #line 6634 "bison_parser.cpp" /* yacc.c:1652 */ break; case 399: #line 2262 "bison_parser.y" /* yacc.c:1652 */ { (yyval.with_clause_t) = new WithClause(); (yyval.with_clause_t)->with_description_list_ = (yyvsp[0].with_description_list_t); } #line 6640 "bison_parser.cpp" /* yacc.c:1652 */ break; case 400: #line 2266 "bison_parser.y" /* yacc.c:1652 */ { (yyval.with_description_list_t) = new WithDescriptionList(); (yyval.with_description_list_t) ->v_with_description_list_.push_back((yyvsp[0].with_description_t)); } #line 6649 "bison_parser.cpp" /* yacc.c:1652 */ break; case 401: #line 2270 "bison_parser.y" /* yacc.c:1652 */ { (yyvsp[-2].with_description_list_t) ->v_with_description_list_.push_back((yyvsp[0].with_description_t)); (yyval.with_description_list_t) = (yyvsp[-2].with_description_list_t); } #line 6658 "bison_parser.cpp" /* yacc.c:1652 */ break; case 402: #line 2277 "bison_parser.y" /* yacc.c:1652 */ { (yyval.with_description_t) = new WithDescription(); (yyval.with_description_t)->id_ = new Identifier((yyvsp[-2].sval)); (yyval.with_description_t)->select_with_paren_ = (yyvsp[0].select_with_paren_t); free((yyvsp[-2].sval)); } #line 6669 "bison_parser.cpp" /* yacc.c:1652 */ break; case 403: #line 2291 "bison_parser.y" /* yacc.c:1652 */ { (yyval.join_kw_t) = new JoinKw(); (yyval.join_kw_t)->str_val_ = string("INNER"); } #line 6675 "bison_parser.cpp" /* yacc.c:1652 */ break; case 404: #line 2292 "bison_parser.y" /* yacc.c:1652 */ { (yyval.join_kw_t) = new JoinKw(); (yyval.join_kw_t)->str_val_ = string("LEFT OUTER"); } #line 6681 "bison_parser.cpp" /* yacc.c:1652 */ break; case 405: #line 2293 "bison_parser.y" /* yacc.c:1652 */ { (yyval.join_kw_t) = new JoinKw(); (yyval.join_kw_t)->str_val_ = string("LEFT"); } #line 6687 "bison_parser.cpp" /* yacc.c:1652 */ break; case 406: #line 2294 "bison_parser.y" /* yacc.c:1652 */ { (yyval.join_kw_t) = new JoinKw(); (yyval.join_kw_t)->str_val_ = string("RIGHT OUTER"); } #line 6693 "bison_parser.cpp" /* yacc.c:1652 */ break; case 407: #line 2295 "bison_parser.y" /* yacc.c:1652 */ { (yyval.join_kw_t) = new JoinKw(); (yyval.join_kw_t)->str_val_ = string("RIGHT"); } #line 6699 "bison_parser.cpp" /* yacc.c:1652 */ break; case 408: #line 2296 "bison_parser.y" /* yacc.c:1652 */ { (yyval.join_kw_t) = new JoinKw(); (yyval.join_kw_t)->str_val_ = string("FULL OUTER"); } #line 6705 "bison_parser.cpp" /* yacc.c:1652 */ break; case 409: #line 2297 "bison_parser.y" /* yacc.c:1652 */ { (yyval.join_kw_t) = new JoinKw(); (yyval.join_kw_t)->str_val_ = string("OUTER"); } #line 6711 "bison_parser.cpp" /* yacc.c:1652 */ break; case 410: #line 2298 "bison_parser.y" /* yacc.c:1652 */ { (yyval.join_kw_t) = new JoinKw(); (yyval.join_kw_t)->str_val_ = string("FULL"); } #line 6717 "bison_parser.cpp" /* yacc.c:1652 */ break; case 411: #line 2299 "bison_parser.y" /* yacc.c:1652 */ { (yyval.join_kw_t) = new JoinKw(); (yyval.join_kw_t)->str_val_ = string("CROSS"); } #line 6723 "bison_parser.cpp" /* yacc.c:1652 */ break; case 412: #line 2300 "bison_parser.y" /* yacc.c:1652 */ { (yyval.join_kw_t) = new JoinKw(); (yyval.join_kw_t)->str_val_ = string("NATURAL"); } #line 6729 "bison_parser.cpp" /* yacc.c:1652 */ break; case 413: #line 2315 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_semicolon_t) = new OptSemicolon(); (yyval.opt_semicolon_t)->str_val_ = string(";"); } #line 6735 "bison_parser.cpp" /* yacc.c:1652 */ break; case 414: #line 2316 "bison_parser.y" /* yacc.c:1652 */ { (yyval.opt_semicolon_t) = new OptSemicolon(); (yyval.opt_semicolon_t)->str_val_ = string(""); } #line 6741 "bison_parser.cpp" /* yacc.c:1652 */ break; case 415: #line 2321 "bison_parser.y" /* yacc.c:1652 */ { (yyval.ident_commalist_t) = new IdentCommaList(); (yyval.ident_commalist_t) ->v_iden_comma_list_.push_back(new Identifier((yyvsp[0].sval))); free((yyvsp[0].sval)); } #line 6747 "bison_parser.cpp" /* yacc.c:1652 */ break; case 416: #line 2322 "bison_parser.y" /* yacc.c:1652 */ { (yyvsp[-2].ident_commalist_t) ->v_iden_comma_list_.push_back(new Identifier((yyvsp[0].sval))); (yyval.ident_commalist_t) = (yyvsp[-2].ident_commalist_t); free((yyvsp[0].sval)); } #line 6753 "bison_parser.cpp" /* yacc.c:1652 */ break; #line 6757 "bison_parser.cpp" /* yacc.c:1652 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires that yytoken be updated with the new translation. We take the approach of translating immediately before every use of yytoken. One alternative is translating here after every semantic action, but that translation would be missed if the semantic action invokes YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an incorrect destructor might then be invoked immediately. In the case of YYERROR or YYBACKUP, subsequent parser actions might lead to an incorrect destructor call or verbose syntax error message before the lookahead is translated. */ YY_SYMBOL_PRINT("-> $$ =", yyr1[yyn], &yyval, &yyloc); YYPOPSTACK(yylen); yylen = 0; YY_STACK_PRINT(yyss, yyssp); *++yyvsp = yyval; *++yylsp = yyloc; /* Now 'shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ { const int yylhs = yyr1[yyn] - YYNTOKENS; const int yyi = yypgoto[yylhs] + *yyssp; yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp ? yytable[yyi] : yydefgoto[yylhs]); } goto yynewstate; /*--------------------------------------. | yyerrlab -- here on detecting error. | `--------------------------------------*/ yyerrlab: /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE(yychar); /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { ++yynerrs; #if !YYERROR_VERBOSE yyerror(&yylloc, result, scanner, YY_("syntax error")); #else #define YYSYNTAX_ERROR yysyntax_error(&yymsg_alloc, &yymsg, yyssp, yytoken) { char const* yymsgp = YY_("syntax error"); int yysyntax_error_status; yysyntax_error_status = YYSYNTAX_ERROR; if (yysyntax_error_status == 0) yymsgp = yymsg; else if (yysyntax_error_status == 1) { if (yymsg != yymsgbuf) YYSTACK_FREE(yymsg); yymsg = (char*)YYSTACK_ALLOC(yymsg_alloc); if (!yymsg) { yymsg = yymsgbuf; yymsg_alloc = sizeof yymsgbuf; yysyntax_error_status = 2; } else { yysyntax_error_status = YYSYNTAX_ERROR; yymsgp = yymsg; } } yyerror(&yylloc, result, scanner, yymsgp); if (yysyntax_error_status == 2) goto yyexhaustedlab; } #undef YYSYNTAX_ERROR #endif } yyerror_range[1] = yylloc; if (yyerrstatus == 3) { /* If just tried and failed to reuse lookahead token after an error, discard it. */ if (yychar <= YYEOF) { /* Return failure if at end of input. */ if (yychar == YYEOF) YYABORT; } else { yydestruct("Error: discarding", yytoken, &yylval, &yylloc, result, scanner); yychar = YYEMPTY; } } /* Else will try to reuse lookahead token after shifting the error token. */ goto yyerrlab1; /*---------------------------------------------------. | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: /* Pacify compilers when the user code never invokes YYERROR and the label yyerrorlab therefore never appears in user code. */ if (0) YYERROR; /* Do not reclaim the symbols of the rule whose action triggered this YYERROR. */ YYPOPSTACK(yylen); yylen = 0; YY_STACK_PRINT(yyss, yyssp); yystate = *yyssp; goto yyerrlab1; /*-------------------------------------------------------------. | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) { yyn = yypact[yystate]; if (!yypact_value_is_default(yyn)) { yyn += YYTERROR; if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) { yyn = yytable[yyn]; if (0 < yyn) break; } } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) YYABORT; yyerror_range[1] = *yylsp; yydestruct("Error: popping", yystos[yystate], yyvsp, yylsp, result, scanner); YYPOPSTACK(1); yystate = *yyssp; YY_STACK_PRINT(yyss, yyssp); } YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END yyerror_range[2] = yylloc; /* Using YYLLOC is tempting, but would change the location of the lookahead. YYLOC is available though. */ YYLLOC_DEFAULT(yyloc, yyerror_range, 2); *++yylsp = yyloc; /* Shift the error token. */ YY_SYMBOL_PRINT("Shifting", yystos[yyn], yyvsp, yylsp); yystate = yyn; goto yynewstate; /*-------------------------------------. | yyacceptlab -- YYACCEPT comes here. | `-------------------------------------*/ yyacceptlab: yyresult = 0; goto yyreturn; /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: yyresult = 1; goto yyreturn; #if !defined yyoverflow || YYERROR_VERBOSE /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ yyexhaustedlab: yyerror(&yylloc, result, scanner, YY_("memory exhausted")); yyresult = 2; /* Fall through. */ #endif /*-----------------------------------------------------. | yyreturn -- parsing is finished, return the result. | `-----------------------------------------------------*/ yyreturn: if (yychar != YYEMPTY) { /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ yytoken = YYTRANSLATE(yychar); yydestruct("Cleanup: discarding lookahead", yytoken, &yylval, &yylloc, result, scanner); } /* Do not reclaim the symbols of the rule whose action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK(yylen); YY_STACK_PRINT(yyss, yyssp); while (yyssp != yyss) { yydestruct("Cleanup: popping", yystos[*yyssp], yyvsp, yylsp, result, scanner); YYPOPSTACK(1); } #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE(yyss); #endif #if YYERROR_VERBOSE if (yymsg != yymsgbuf) YYSTACK_FREE(yymsg); #endif return yyresult; } #line 2325 "bison_parser.y" /* yacc.c:1918 */ /********************************* ** Section 4: Additional C code *********************************/ /* empty */ ================================================ FILE: srcs/internal/sqlite/parser/bison_parser.h ================================================ /* A Bison parser, made by GNU Bison 3.3.2. */ /* Bison interface for Yacc-like parsers in C Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2019 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* Undocumented macros, especially those whose name start with YY_, are private implementation details. Do not rely on them. */ #ifndef YY_HSQL_BISON_PARSER_H_INCLUDED #define YY_HSQL_BISON_PARSER_H_INCLUDED /* Debug traces. */ #ifndef HSQL_DEBUG #if defined YYDEBUG #if YYDEBUG #define HSQL_DEBUG 1 #else #define HSQL_DEBUG 0 #endif #else /* ! defined YYDEBUG */ #define HSQL_DEBUG 0 #endif /* ! defined YYDEBUG */ #endif /* ! defined HSQL_DEBUG */ #if HSQL_DEBUG extern int hsql_debug; #endif /* "%code requires" blocks. */ #line 32 "bison_parser.y" /* yacc.c:1921 */ // %code requires block #include "../include/ast.h" #include "../include/define.h" //#include "../include/utils.h" #include "parser_typedef.h" // Auto update column and line number #define YY_USER_ACTION \ yylloc->first_line = yylloc->last_line; \ yylloc->first_column = yylloc->last_column; \ for (int i = 0; yytext[i] != '\0'; i++) { \ yylloc->total_column++; \ yylloc->string_length++; \ if (yytext[i] == '\n') { \ yylloc->last_line++; \ yylloc->last_column = 0; \ } else { \ yylloc->last_column++; \ } \ } #line 83 "bison_parser.h" /* yacc.c:1921 */ /* Token type. */ #ifndef HSQL_TOKENTYPE #define HSQL_TOKENTYPE enum hsql_tokentype { SQL_STRING = 258, SQL_IDENTIFIER = 259, SQL_FLOATVAL = 260, SQL_INTVAL = 261, SQL_DEALLOCATE = 262, SQL_PARAMETERS = 263, SQL_INTERSECT = 264, SQL_TEMPORARY = 265, SQL_TIMESTAMP = 266, SQL_DISTINCT = 267, SQL_NVARCHAR = 268, SQL_RESTRICT = 269, SQL_TRUNCATE = 270, SQL_ANALYZE = 271, SQL_BETWEEN = 272, SQL_CASCADE = 273, SQL_COLUMNS = 274, SQL_CONTROL = 275, SQL_DEFAULT = 276, SQL_EXECUTE = 277, SQL_EXPLAIN = 278, SQL_INTEGER = 279, SQL_NATURAL = 280, SQL_PREPARE = 281, SQL_PRIMARY = 282, SQL_SCHEMAS = 283, SQL_SPATIAL = 284, SQL_VARCHAR = 285, SQL_VIRTUAL = 286, SQL_DESCRIBE = 287, SQL_BEFORE = 288, SQL_COLUMN = 289, SQL_CREATE = 290, SQL_DELETE = 291, SQL_DIRECT = 292, SQL_DOUBLE = 293, SQL_ESCAPE = 294, SQL_EXCEPT = 295, SQL_EXISTS = 296, SQL_EXTRACT = 297, SQL_GLOBAL = 298, SQL_HAVING = 299, SQL_IMPORT = 300, SQL_INSERT = 301, SQL_ISNULL = 302, SQL_OFFSET = 303, SQL_RENAME = 304, SQL_SCHEMA = 305, SQL_SELECT = 306, SQL_SORTED = 307, SQL_TABLES = 308, SQL_UNIQUE = 309, SQL_UNLOAD = 310, SQL_UPDATE = 311, SQL_VALUES = 312, SQL_AFTER = 313, SQL_ALTER = 314, SQL_CROSS = 315, SQL_DELTA = 316, SQL_FLOAT = 317, SQL_GROUP = 318, SQL_INDEX = 319, SQL_INNER = 320, SQL_LIMIT = 321, SQL_LOCAL = 322, SQL_MERGE = 323, SQL_MINUS = 324, SQL_ORDER = 325, SQL_OUTER = 326, SQL_RIGHT = 327, SQL_TABLE = 328, SQL_UNION = 329, SQL_USING = 330, SQL_WHERE = 331, SQL_CALL = 332, SQL_CASE = 333, SQL_CHAR = 334, SQL_DATE = 335, SQL_DESC = 336, SQL_DROP = 337, SQL_ELSE = 338, SQL_FILE = 339, SQL_FROM = 340, SQL_FULL = 341, SQL_HASH = 342, SQL_HINT = 343, SQL_INTO = 344, SQL_JOIN = 345, SQL_LEFT = 346, SQL_LIKE = 347, SQL_LOAD = 348, SQL_LONG = 349, SQL_NULL = 350, SQL_PLAN = 351, SQL_SHOW = 352, SQL_TEXT = 353, SQL_THEN = 354, SQL_TIME = 355, SQL_VIEW = 356, SQL_WHEN = 357, SQL_WITH = 358, SQL_ADD = 359, SQL_ALL = 360, SQL_AND = 361, SQL_ASC = 362, SQL_CSV = 363, SQL_END = 364, SQL_FOR = 365, SQL_INT = 366, SQL_KEY = 367, SQL_NOT = 368, SQL_OFF = 369, SQL_SET = 370, SQL_TBL = 371, SQL_TOP = 372, SQL_AS = 373, SQL_BY = 374, SQL_IF = 375, SQL_IN = 376, SQL_IS = 377, SQL_OF = 378, SQL_ON = 379, SQL_OR = 380, SQL_TO = 381, SQL_ARRAY = 382, SQL_CONCAT = 383, SQL_ILIKE = 384, SQL_SECOND = 385, SQL_MINUTE = 386, SQL_HOUR = 387, SQL_DAY = 388, SQL_MONTH = 389, SQL_YEAR = 390, SQL_TRUE = 391, SQL_FALSE = 392, SQL_PRAGMA = 393, SQL_REINDEX = 394, SQL_GENERATED = 395, SQL_ALWAYS = 396, SQL_CHECK = 397, SQL_CONFLICT = 398, SQL_IGNORE = 399, SQL_REPLACE = 400, SQL_ROLLBACK = 401, SQL_ABORT = 402, SQL_FAIL = 403, SQL_AUTOINCR = 404, SQL_BEGIN = 405, SQL_TRIGGER = 406, SQL_TEMP = 407, SQL_INSTEAD = 408, SQL_EACH = 409, SQL_ROW = 410, SQL_OVER = 411, SQL_FILTER = 412, SQL_PARTITION = 413, SQL_CURRENT = 414, SQL_EXCLUDE = 415, SQL_FOLLOWING = 416, SQL_GROUPS = 417, SQL_NO = 418, SQL_OTHERS = 419, SQL_PRECEDING = 420, SQL_RANGE = 421, SQL_ROWS = 422, SQL_TIES = 423, SQL_UNBOUNDED = 424, SQL_WINDOW = 425, SQL_ATTACH = 426, SQL_DETACH = 427, SQL_DATABASE = 428, SQL_INDEXED = 429, SQL_CAST = 430, SQL_SAVEPOINT = 431, SQL_RELEASE = 432, SQL_VACUUM = 433, SQL_TRANSACTION = 434, SQL_DEFFERED = 435, SQL_EXCLUSIVE = 436, SQL_IMEDIATE = 437, SQL_COMMIT = 438, SQL_GLOB = 439, SQL_MATCH = 440, SQL_REGEX = 441, SQL_NOTHING = 442, SQL_NULLS = 443, SQL_LAST = 444, SQL_FIRST = 445, SQL_DO = 446, SQL_COLLATE = 447, SQL_EQUALS = 448, SQL_NOTEQUALS = 449, SQL_LESS = 450, SQL_GREATER = 451, SQL_LESSEQ = 452, SQL_GREATEREQ = 453, SQL_NOTNULL = 454, SQL_UMINUS = 455 }; #endif /* Value type. */ #if !defined HSQL_STYPE && !defined HSQL_STYPE_IS_DECLARED #line 95 "bison_parser.y" /* yacc.c:1921 */ union HSQL_STYPE { #line 95 "bison_parser.y" /* yacc.c:1921 */ double fval; int64_t ival; char* sval; uintmax_t uval; bool bval; Program* program_t; StatementList* statement_list_t; Statement* statement_t; PreparableStatement* preparable_statement_t; OptionalHints* optional_hints_t; HintList* hint_list_t; Hint* hint_t; PrepareStatement* prepare_statement_t; PrepareTargetQuery* prepare_target_query_t; ExecuteStatement* execute_statement_t; ImportStatement* import_statement_t; ImportFileType* import_file_type_t; FilePath* file_path_t; TableRefCommaList* table_ref_commalist_t; ShowStatement* show_statement_t; CreateStatement* create_statement_t; OptNotExists* opt_not_exists_t; ColumnDefCommaList* column_def_comma_list_t; ColumnDef* column_def_t; ColumnType* column_type_t; // OptColumnNullable* opt_column_nullable_t; DropStatement* drop_statement_t; OptExists* opt_exists_t; DeleteStatement* delete_statement_t; InsertStatement* insert_statement_t; OptColumnList* opt_column_list_t; UpdateStatement* update_statement_t; UpdateClauseCommalist* update_clause_commalist_t; UpdateClause* update_clause_t; SelectStatement* select_statement_t; SelectWithParen* select_with_paren_t; SelectParenOrClause* select_paren_or_clause_t; SelectNoParen* select_no_paren_t; SetOperator* set_operator_t; SetType* set_type_t; OptAll* opt_all_t; IdentCommaList* ident_commalist_t; SelectClause* select_clause_t; OptDistinct* opt_distinct_t; SelectList* select_list_t; OptFromClause* opt_from_clause_t; FromClause* from_clause_t; OptWhere* opt_where_t; OptGroup* opt_group_t; OptHaving* opt_having_t; OptOrder* opt_order_t; OrderList* order_list_t; OrderDesc* order_desc_t; OptOrderType* opt_order_type_t; OptTop* opt_top_t; OptLimit* opt_limit_t; ExprList* expr_list_t; OptLiteralList* opt_literal_list_t; LiteralList* literal_list_t; ExprAlias* expr_alias_t; Expr* expr_t; Operand* operand_t; ScalarExpr* scalar_expr_t; UnaryExpr* unary_expr_t; BinaryExpr* binary_expr_t; LogicExpr* logic_expr_t; InExpr* in_expr_t; CompExpr* comp_expr_t; CaseExpr* case_expr_t; CaseClause* case_clause_t; CaseList* case_list_t; ExistsExpr* exists_expr_t; FunctionExpr* function_expr_t; ExtractExpr* extract_expr_t; DatetimeField* datetime_field_t; ArrayExpr* array_expr_t; ArrayIndex* array_index_t; BetweenExpr* between_expr_t; ColumnName* column_name_t; Literal* literal_t; StringLiteral* string_literal_t; BoolLiteral* bool_literal_t; NumLiteral* num_literal_t; IntLiteral* int_literal_t; NullLiteral* null_literal_t; ParamExpr* param_expr_t; TableRef* table_ref_t; TableRefAtomic* table_ref_atomic_t; NonjoinTableRefAtomic* nonjoin_table_ref_atomic_t; TableRefName* table_ref_name_t; TableRefNameNoAlias* table_ref_name_no_alias_t; TableName* table_name_t; TableAlias* table_alias_t; OptTableAlias* opt_table_alias_t; Alias* alias_t; OptAlias* opt_alias_t; OptWithClause* opt_with_clause_t; WithClause* with_clause_t; WithDescriptionList* with_description_list_t; WithDescription* with_description_t; JoinClause* join_clause_t; OptJoinType* opt_join_type_t; JoinCondition* join_condition_t; OptSemicolon* opt_semicolon_t; Identifier* identifier_t; Cmd* cmd_t; CmdAttach* cmd_attach_t; CmdDetach* cmd_detach_t; CmdReindex* cmd_reindex_t; CmdAnalyze* cmd_analyze_t; CmdPragma* cmd_pragma_t; PragmaKey* pragma_key_t; PragmaValue* pragma_value_t; PragmaName* pragma_name_t; SchemaName* schema_name_t; OptColumnArglist* opt_column_arglist_t; ColumnArglist* column_arglist_t; ColumnArg* column_arg_t; OptOnConflict* opt_on_conflict_t; ResolveType* resolve_type_t; OptAutoinc* opt_autoinc_t; OptUnique* opt_unique_t; IndexName* index_name_t; TriggerDeclare* trigger_declare_t; OptTmp* opt_tmp_t; TriggerName* trigger_name_t; OptTriggerTime* opt_trigger_time_t; TriggerEvent* trigger_event_t; OptOfColumnList* opt_of_column_list_t; OptForEach* opt_for_each_t; OptWhen* opt_when_t; TriggerCmdList* trigger_cmd_list_t; TriggerCmd* trigger_cmd_t; ModuleName* module_name_t; OptOverClause* opt_over_clause_t; OptFilterClause* opt_filter_clause_t; WindowClause* window_clause_t; WindowDefnList* window_defn_list_t; WindowDefn* window_defn_t; Window* window_t; OptBaseWindowName* opt_base_window_name_t; OptFrame* opt_frame_t; RangeOrRows* range_or_rows_t; FrameBoundS* frame_bound_s_t; FrameBoundE* frame_bound_e_t; FrameBound* frame_bound_t; OptFrameExclude* opt_frame_exclude_t; FrameExclude* frame_exclude_t; InsertType* insert_type_t; SuperList* super_list_t; JoinKw* join_kw_t; TablePrefix* table_prefix_t; JoinOp* join_op_t; OptIndex* opt_index_t; OptOn* opt_on_t; OptUsing* opt_using_t; CastExpr* cast_expr_t; AlterStatement* alter_statement_t; OptColumn* opt_column_t; CmdRelease* cmd_release_t; SavepointName* savepoint_name_t; VacuumStatement* vacuum_statement_t; OptSchemaName* opt_schema_name_t; RollbackStatement* rollback_statement_t; OptTransaction* opt_transaction_t; OptToSavepoint* opt_to_savepoint_t; BeginStatement* begin_statement_t; CommitStatement* commit_statement_t; UpsertClause* upsert_clause_t; IndexedColumnList* indexed_column_list_t; IndexedColumn* indexed_column_t; OptCollate* opt_collate_t; AssignList* assign_list_t; OptNull* opt_null_t; AssignClause* assign_clause_t; ColumnNameList* column_name_list_t; CollationName* collation_name_t; OptUpsertClause* opt_upsert_clause_t; std::vector* str_vec; std::vector* table_vec; std::vector* column_vec; std::vector* update_vec; std::vector* expr_vec; std::vector* order_vec; std::vector* with_description_vec; #line 488 "bison_parser.h" /* yacc.c:1921 */ }; #line 95 "bison_parser.y" /* yacc.c:1921 */ typedef union HSQL_STYPE HSQL_STYPE; #define HSQL_STYPE_IS_TRIVIAL 1 #define HSQL_STYPE_IS_DECLARED 1 #endif /* Location type. */ #if !defined HSQL_LTYPE && !defined HSQL_LTYPE_IS_DECLARED typedef struct HSQL_LTYPE HSQL_LTYPE; struct HSQL_LTYPE { int first_line; int first_column; int last_line; int last_column; }; #define HSQL_LTYPE_IS_DECLARED 1 #define HSQL_LTYPE_IS_TRIVIAL 1 #endif int hsql_parse(Program* result, yyscan_t scanner); #endif /* !YY_HSQL_BISON_PARSER_H_INCLUDED */ ================================================ FILE: srcs/internal/sqlite/parser/bison_parser.output ================================================ Terminals unused in grammar PARAMETERS TEMPORARY TIMESTAMP NVARCHAR RESTRICT CASCADE CONTROL EXPLAIN SCHEMAS SPATIAL DIRECT ESCAPE GLOBAL SCHEMA SORTED UNLOAD DELTA LOCAL MERGE MINUS CALL DATE HASH LOAD PLAN TIME OFF LESS GREATER NOTNULL UMINUS State 674 conflicts : 1 shift / reduce State 705 conflicts : 1 shift / reduce State 706 conflicts : 1 shift / reduce State 736 conflicts : 1 shift / reduce Grammar 0 $accept : input $end 1 input : statement_list opt_semicolon 2 statement_list : statement 3 | statement_list ';' statement 4 statement : prepare_statement opt_hints 5 | preparable_statement opt_hints 6 | show_statement 7 | cmd 8 cmd : cmd_pragma 9 | cmd_reindex 10 | cmd_analyze 11 | cmd_attach 12 | cmd_detach 13 | cmd_release 14 | rollback_statement 15 | vacuum_statement 16 | begin_statement 17 | commit_statement 18 cmd_release : RELEASE SAVEPOINT savepoint_name 19 | RELEASE savepoint_name 20 savepoint_name : IDENTIFIER 21 cmd_pragma : PRAGMA pragma_key 22 | PRAGMA pragma_key '=' pragma_value 23 | PRAGMA pragma_key '(' pragma_value ')' 24 cmd_reindex : REINDEX 25 | REINDEX table_name 26 cmd_analyze : ANALYZE 27 | ANALYZE table_name 28 cmd_attach : ATTACH expr AS schema_name 29 | ATTACH DATABASE expr AS schema_name 30 cmd_detach : DETACH schema_name 31 | DETACH DATABASE schema_name 32 pragma_key : pragma_name 33 | schema_name '.' pragma_name 34 pragma_value : num_literal 35 | string_literal 36 | IDENTIFIER 37 | ON 38 | DELETE 39 | DEFAULT 40 schema_name : IDENTIFIER 41 pragma_name : IDENTIFIER 42 preparable_statement : select_statement 43 | import_statement 44 | create_statement 45 | insert_statement 46 | delete_statement 47 | truncate_statement 48 | update_statement 49 | drop_statement 50 | execute_statement 51 | alter_statement 52 rollback_statement : ROLLBACK opt_transaction opt_to_savepoint 53 opt_transaction : TRANSACTION 54 | % empty 55 opt_to_savepoint : TO savepoint_name 56 | TO SAVEPOINT savepoint_name 57 | % empty 58 vacuum_statement : VACUUM opt_schema_name INTO file_path 59 | VACUUM opt_schema_name 60 opt_schema_name : schema_name 61 | % empty 62 begin_statement : BEGIN opt_transaction 63 | BEGIN DEFFERED opt_transaction 64 | BEGIN IMEDIATE opt_transaction 65 | BEGIN EXCLUSIVE opt_transaction 66 commit_statement : COMMIT opt_transaction 67 | END opt_transaction 68 opt_upsert_clause : upsert_clause 69 | % empty 70 upsert_clause : ON CONFLICT DO NOTHING 71 | ON CONFLICT DO UPDATE SET assign_list opt_where 72 | ON CONFLICT '(' indexed_column_list ')' opt_where DO NOTHING 73 | ON CONFLICT '(' indexed_column_list ')' opt_where DO UPDATE SET assign_list opt_where 74 indexed_column_list : indexed_column 75 | indexed_column_list ',' indexed_column 76 indexed_column : expr opt_collate opt_order_type 77 opt_collate : COLLATE collation_name 78 | % empty 79 assign_list : assign_clause 80 | assign_list ',' assign_clause 81 opt_null : NULLS FIRST 82 | NULLS LAST 83 | % empty 84 assign_clause : column_name_list '=' expr 85 column_name_list : column_name 86 | column_name_list ',' column_name 87 collation_name : IDENTIFIER 88 opt_hints : WITH HINT '(' hint_list ')' 89 | % empty 90 hint_list : hint 91 | hint_list ',' hint 92 hint : IDENTIFIER 93 | IDENTIFIER '(' literal_list ')' 94 prepare_statement : PREPARE IDENTIFIER FROM prepare_target_query 95 prepare_target_query : STRING 96 execute_statement : EXECUTE IDENTIFIER 97 | EXECUTE IDENTIFIER '(' opt_literal_list ')' 98 import_statement : IMPORT FROM import_file_type FILE file_path INTO table_name 99 import_file_type : CSV 100 file_path : string_literal 101 show_statement : SHOW TABLES 102 | SHOW COLUMNS table_name 103 | DESCRIBE table_name 104 alter_statement : ALTER TABLE table_name RENAME TO table_name 105 | ALTER TABLE table_name RENAME opt_column column_name TO column_name 106 | ALTER TABLE table_name ADD opt_column column_def 107 opt_column : COLUMN 108 | % empty 109 create_statement : CREATE TABLE opt_not_exists table_name FROM TBL FILE file_path 110 | CREATE TABLE opt_not_exists table_name '(' column_def_commalist ')' 111 | CREATE TABLE opt_not_exists table_name AS select_statement 112 | CREATE VIEW opt_not_exists table_name opt_column_list AS select_statement 113 | CREATE opt_unique INDEX opt_not_exists index_name ON table_name '(' ident_commalist ')' opt_where 114 | CREATE VIRTUAL TABLE opt_not_exists table_name USING module_name 115 | CREATE VIRTUAL TABLE opt_not_exists table_name USING module_name '(' column_def_commalist ')' 116 | CREATE trigger_declare BEGIN trigger_cmd_list END 117 opt_unique : UNIQUE 118 | % empty 119 index_name : IDENTIFIER 120 trigger_declare : opt_tmp TRIGGER opt_not_exists trigger_name opt_trigger_time trigger_event ON table_name opt_for_each opt_when 121 opt_tmp : TEMP 122 | % empty 123 trigger_name : IDENTIFIER 124 opt_trigger_time : BEFORE 125 | AFTER 126 | INSTEAD OF 127 | % empty 128 trigger_event : DELETE 129 | INSERT 130 | UPDATE opt_of_column_list 131 opt_of_column_list : OF ident_commalist 132 | % empty 133 opt_for_each : FOR EACH ROW 134 | % empty 135 opt_when : WHEN expr 136 | % empty 137 trigger_cmd_list : trigger_cmd ';' 138 | trigger_cmd_list trigger_cmd ';' 139 trigger_cmd : select_statement 140 | update_statement 141 | insert_statement 142 | delete_statement 143 module_name : IDENTIFIER 144 opt_not_exists : IF NOT EXISTS 145 | % empty 146 column_def_commalist : column_def 147 | column_def_commalist ',' column_def 148 column_def : IDENTIFIER column_type opt_column_arglist 149 opt_column_arglist : column_arglist 150 | % empty 151 column_arglist : column_arglist column_arg 152 | column_arg 153 column_arg : NULL opt_on_conflict 154 | NOT NULL opt_on_conflict 155 | PRIMARY KEY opt_order_type opt_on_conflict opt_autoinc 156 | UNIQUE opt_on_conflict 157 | GENERATED ALWAYS AS '(' expr ')' 158 | AS '(' expr ')' 159 | CHECK '(' expr ')' 160 opt_on_conflict : ON CONFLICT resolve_type 161 | % empty 162 resolve_type : IGNORE 163 | REPLACE 164 | ROLLBACK 165 | ABORT 166 | FAIL 167 opt_autoinc : AUTOINCR 168 | % empty 169 column_type : INT 170 | INTEGER 171 | LONG 172 | FLOAT 173 | DOUBLE 174 | VARCHAR '(' INTVAL ')' 175 | CHAR '(' INTVAL ')' 176 | TEXT 177 | % empty 178 drop_statement : DROP TABLE opt_exists table_name 179 | DROP VIEW opt_exists table_name 180 | DEALLOCATE PREPARE IDENTIFIER 181 | DROP TRIGGER opt_exists schema_name '.' trigger_name 182 | DROP TRIGGER opt_exists trigger_name 183 opt_exists : IF EXISTS 184 | % empty 185 delete_statement : DELETE FROM table_name opt_where 186 truncate_statement : TRUNCATE table_name 187 insert_statement : insert_type INTO table_name opt_column_list VALUES super_list opt_upsert_clause 188 | insert_type INTO table_name opt_column_list select_no_paren opt_upsert_clause 189 super_list : '(' literal_list ')' 190 | super_list ',' '(' literal_list ')' 191 insert_type : INSERT 192 | REPLACE 193 | INSERT OR resolve_type 194 opt_column_list : '(' ident_commalist ')' 195 | % empty 196 update_statement : UPDATE table_ref_name_no_alias SET update_clause_commalist opt_where 197 update_clause_commalist : update_clause 198 | update_clause_commalist ',' update_clause 199 update_clause : IDENTIFIER '=' expr 200 select_statement : opt_with_clause select_with_paren 201 | opt_with_clause select_no_paren 202 | opt_with_clause select_with_paren set_operator select_paren_or_clause opt_order opt_limit 203 select_with_paren : '(' select_no_paren ')' 204 | '(' select_with_paren ')' 205 select_paren_or_clause : select_with_paren 206 | select_clause 207 select_no_paren : select_clause opt_order opt_limit 208 | select_clause set_operator select_paren_or_clause opt_order opt_limit 209 set_operator : set_type opt_all 210 set_type : UNION 211 | INTERSECT 212 | EXCEPT 213 opt_all : ALL 214 | % empty 215 select_clause : SELECT opt_top opt_distinct select_list opt_from_clause opt_where opt_group 216 | SELECT opt_top opt_distinct select_list opt_from_clause opt_where opt_group window_clause 217 window_clause : WINDOW windowdefn_list 218 windowdefn_list : windowdefn 219 | windowdefn_list ',' windowdefn 220 windowdefn : IDENTIFIER AS '(' window ')' 221 window : opt_base_window_name PARTITION BY expr_list opt_order opt_frame 222 | opt_base_window_name opt_order opt_frame 223 opt_base_window_name : IDENTIFIER 224 | % empty 225 opt_frame : range_or_rows frame_bound_s opt_frame_exclude 226 | range_or_rows BETWEEN frame_bound_s AND frame_bound_e opt_frame_exclude 227 | % empty 228 range_or_rows : RANGE 229 | ROWS 230 | GROUPS 231 frame_bound_s : frame_bound 232 | UNBOUNDED PRECEDING 233 frame_bound_e : frame_bound 234 | UNBOUNDED FOLLOWING 235 frame_bound : expr PRECEDING 236 | expr FOLLOWING 237 | CURRENT ROW 238 opt_frame_exclude : EXCLUDE frame_exclude 239 | % empty 240 frame_exclude : NO OTHERS 241 | CURRENT ROW 242 | GROUP 243 | TIES 244 opt_distinct : DISTINCT 245 | % empty 246 select_list : expr_list 247 opt_from_clause : from_clause 248 | % empty 249 from_clause : FROM table_ref 250 opt_where : WHERE expr 251 | % empty 252 opt_group : GROUP BY expr_list opt_having 253 | % empty 254 opt_having : HAVING expr 255 | % empty 256 opt_order : ORDER BY order_list 257 | % empty 258 order_list : order_desc 259 | order_list ',' order_desc 260 order_desc : expr opt_order_type opt_null 261 opt_order_type : ASC 262 | DESC 263 | % empty 264 opt_top : TOP int_literal 265 | % empty 266 opt_limit : LIMIT expr 267 | OFFSET expr 268 | LIMIT expr OFFSET expr 269 | LIMIT ALL 270 | LIMIT ALL OFFSET expr 271 | % empty 272 expr_list : expr_alias 273 | expr_list ',' expr_alias 274 opt_literal_list : literal_list 275 | % empty 276 literal_list : literal 277 | literal_list ',' literal 278 expr_alias : expr opt_alias 279 expr : operand 280 | between_expr 281 | logic_expr 282 | exists_expr 283 | in_expr 284 | cast_expr 285 operand : '(' expr ')' 286 | array_index 287 | scalar_expr 288 | unary_expr 289 | binary_expr 290 | case_expr 291 | function_expr 292 | extract_expr 293 | array_expr 294 | '(' select_no_paren ')' 295 cast_expr : CAST '(' expr AS column_type ')' 296 scalar_expr : column_name 297 | literal 298 unary_expr : '-' operand 299 | NOT operand 300 | operand ISNULL 301 | operand IS NULL 302 | operand IS NOT NULL 303 binary_expr : comp_expr 304 | operand '-' operand 305 | operand '+' operand 306 | operand '/' operand 307 | operand '*' operand 308 | operand '%' operand 309 | operand '^' operand 310 | operand LIKE operand 311 | operand NOT LIKE operand 312 | operand ILIKE operand 313 | operand CONCAT operand 314 | operand GLOB operand 315 | operand MATCH operand 316 | operand REGEX operand 317 logic_expr : expr AND expr 318 | expr OR expr 319 in_expr : operand IN '(' expr_list ')' 320 | operand NOT IN '(' expr_list ')' 321 | operand IN '(' select_no_paren ')' 322 | operand NOT IN '(' select_no_paren ')' 323 case_expr : CASE expr case_list END 324 | CASE expr case_list ELSE expr END 325 | CASE case_list END 326 | CASE case_list ELSE expr END 327 case_list : WHEN expr THEN expr 328 | case_list WHEN expr THEN expr 329 exists_expr : EXISTS '(' select_no_paren ')' 330 | NOT EXISTS '(' select_no_paren ')' 331 comp_expr : operand '=' operand 332 | operand EQUALS operand 333 | operand NOTEQUALS operand 334 | operand '<' operand 335 | operand '>' operand 336 | operand LESSEQ operand 337 | operand GREATEREQ operand 338 function_expr : IDENTIFIER '(' ')' opt_filter_clause opt_over_clause 339 | IDENTIFIER '(' opt_distinct expr_list ')' opt_filter_clause opt_over_clause 340 opt_over_clause : OVER '(' window ')' 341 | OVER IDENTIFIER 342 | % empty 343 opt_filter_clause : FILTER '(' WHERE expr ')' 344 | % empty 345 extract_expr : EXTRACT '(' datetime_field FROM expr ')' 346 datetime_field : SECOND 347 | MINUTE 348 | HOUR 349 | DAY 350 | MONTH 351 | YEAR 352 array_expr : ARRAY '[' expr_list ']' 353 array_index : operand '[' int_literal ']' 354 between_expr : operand BETWEEN operand AND operand 355 column_name : IDENTIFIER 356 | IDENTIFIER '.' IDENTIFIER 357 | '*' 358 | IDENTIFIER '.' '*' 359 literal : string_literal 360 | bool_literal 361 | num_literal 362 | null_literal 363 | param_expr 364 string_literal : STRING 365 bool_literal : TRUE 366 | FALSE 367 num_literal : FLOATVAL 368 | int_literal 369 int_literal : INTVAL 370 null_literal : NULL 371 param_expr : '?' 372 table_ref : table_prefix table_name opt_alias opt_index opt_on opt_using 373 | table_prefix table_name '(' expr_list ')' opt_alias opt_on opt_using 374 | table_prefix '(' select_no_paren ')' opt_alias opt_on opt_using 375 | table_prefix '(' table_ref ')' opt_alias opt_on opt_using 376 table_prefix : table_ref join_op 377 | % empty 378 join_op : ',' 379 | JOIN 380 | join_kw JOIN 381 | join_kw IDENTIFIER JOIN 382 | join_kw IDENTIFIER IDENTIFIER JOIN 383 opt_index : INDEXED BY column_name 384 | NOT INDEXED 385 | % empty 386 opt_on : ON expr 387 | % empty 388 opt_using : USING '(' ident_commalist ')' 389 | % empty 390 table_ref_name_no_alias : table_name 391 table_name : IDENTIFIER 392 | IDENTIFIER '.' IDENTIFIER 393 alias : AS IDENTIFIER 394 opt_alias : alias 395 | % empty 396 opt_with_clause : with_clause 397 | % empty 398 with_clause : WITH with_description_list 399 with_description_list : with_description 400 | with_description_list ',' with_description 401 with_description : IDENTIFIER AS select_with_paren 402 join_kw : INNER 403 | LEFT OUTER 404 | LEFT 405 | RIGHT OUTER 406 | RIGHT 407 | FULL OUTER 408 | OUTER 409 | FULL 410 | CROSS 411 | NATURAL 412 opt_semicolon : ';' 413 | % empty 414 ident_commalist : IDENTIFIER 415 | ident_commalist ',' IDENTIFIER Terminals, with rules where they appear $end(0) 0 '%'(37)308 '('(40)23 72 73 88 93 97 110 113 115 157 158 159 174 175 189 190 194 203 204 220 285 294 295 319 320 321 322 329 330 338 339 340 343 345 373 374 375 388 ')'(41)23 72 73 88 93 97 110 113 115 157 158 159 174 175 189 190 194 203 204 220 285 294 295 319 320 321 322 329 330 338 339 340 343 345 373 374 375 388 '*'(42)307 357 358 '+'(43)305 ','(44)75 80 86 91 147 190 198 219 259 273 277 378 400 415 '-'(45)298 304 '.'(46)33 181 356 358 392 '/'(47)306 ';'( 59)3 137 138 412 '<'(60)334 '='(61)22 84 199 331 '>'(62)335 '?'(63)371 '['(91)352 353 ']'(93)352 353 '^'(94)309 error(256) STRING(258) 95 364 IDENTIFIER(259) 20 36 40 41 87 92 93 94 96 97 119 123 143 148 180 199 220 223 338 339 341 355 356 358 381 382 391 392 393 401 414 415 FLOATVAL< fval>( 260) 367 INTVAL(261) 174 175 369 DEALLOCATE(262) 180 PARAMETERS(263) INTERSECT(264) 211 TEMPORARY(265) TIMESTAMP(266) DISTINCT(267) 244 NVARCHAR(268) RESTRICT(269) TRUNCATE(270) 186 ANALYZE(271) 26 27 BETWEEN( 272) 226 354 CASCADE(273) COLUMNS(274) 102 CONTROL(275) DEFAULT( 276) 39 EXECUTE(277) 96 97 EXPLAIN(278) INTEGER(279) 170 NATURAL(280) 411 PREPARE( 281) 94 180 PRIMARY(282) 155 SCHEMAS(283) SPATIAL(284) VARCHAR(285) 174 VIRTUAL(286) 114 115 DESCRIBE(287) 103 BEFORE(288) 124 COLUMN(289) 107 CREATE(290) 109 110 111 112 113 114 115 116 DELETE( 291) 38 128 185 DIRECT(292) DOUBLE(293) 173 ESCAPE(294) EXCEPT(295) 212 EXISTS(296) 144 183 329 330 EXTRACT( 297) 345 GLOBAL(298) HAVING(299) 254 IMPORT(300) 98 INSERT( 301) 129 191 193 ISNULL(302) 300 OFFSET(303) 267 268 270 RENAME(304) 104 105 SCHEMA(305) SELECT(306) 215 216 SORTED(307) TABLES(308) 101 UNIQUE(309) 117 156 UNLOAD(310) UPDATE(311) 71 73 130 196 VALUES(312) 187 AFTER(313) 125 ALTER(314) 104 105 106 CROSS(315) 410 DELTA( 316) FLOAT(317) 172 GROUP(318) 242 252 INDEX(319) 113 INNER(320) 402 LIMIT(321) 266 268 269 270 LOCAL(322) MERGE(323) MINUS(324) ORDER(325) 256 OUTER(326) 403 405 407 408 RIGHT(327) 405 406 TABLE(328) 104 105 106 109 110 111 114 115 178 UNION(329) 210 USING(330) 114 115 388 WHERE(331) 250 343 CALL(332) CASE(333) 323 324 325 326 CHAR(334) 175 DATE( 335) DESC(336) 262 DROP(337) 178 179 181 182 ELSE(338) 324 326 FILE(339) 98 109 FROM(340) 94 98 109 185 249 345 FULL(341) 407 409 HASH(342) HINT(343) 88 INTO(344) 58 98 187 188 JOIN(345) 379 380 381 382 LEFT( 346) 403 404 LIKE(347) 310 311 LOAD(348) LONG(349) 171 NULL( 350) 153 154 301 302 370 PLAN(351) SHOW(352) 101 102 TEXT(353) 176 THEN(354) 327 328 TIME(355) VIEW(356) 112 179 WHEN(357) 135 327 328 WITH(358) 88 398 ADD(359) 106 ALL(360) 213 269 270 AND( 361) 226 317 354 ASC(362) 261 CSV(363) 99 END(364) 67 116 323 324 325 326 FOR(365) 133 INT(366) 169 KEY(367) 155 NOT(368) 144 154 299 302 311 320 322 330 384 OFF(369) SET(370) 71 73 196 TBL(371) 109 TOP(372) 264 AS(373) 28 29 111 112 157 158 220 295 393 401 BY(374) 221 252 256 383 IF(375) 144 183 IN(376) 319 320 321 322 IS(377) 301 302 OF(378) 126 131 ON(379) 37 70 71 72 73 113 120 160 386 OR(380) 193 318 TO(381) 55 56 104 105 ARRAY(382) 352 CONCAT(383) 313 ILIKE(384) 312 SECOND(385) 346 MINUTE(386) 347 HOUR(387) 348 DAY(388) 349 MONTH(389) 350 YEAR(390) 351 TRUE(391) 365 FALSE(392) 366 PRAGMA(393) 21 22 23 REINDEX(394) 24 25 GENERATED(395) 157 ALWAYS(396) 157 CHECK(397) 159 CONFLICT(398) 70 71 72 73 160 IGNORE(399) 162 REPLACE(400) 163 192 ROLLBACK(401) 52 164 ABORT(402) 165 FAIL(403) 166 AUTOINCR(404) 167 BEGIN(405) 62 63 64 65 116 TRIGGER( 406) 120 181 182 TEMP(407) 121 INSTEAD(408) 126 EACH(409) 133 ROW(410) 133 237 241 OVER(411) 340 341 FILTER(412) 343 PARTITION(413) 221 CURRENT(414) 237 241 EXCLUDE(415) 238 FOLLOWING(416) 234 236 GROUPS(417) 230 NO(418) 240 OTHERS(419) 240 PRECEDING(420) 232 235 RANGE(421) 228 ROWS(422) 229 TIES(423) 243 UNBOUNDED(424) 232 234 WINDOW(425) 217 ATTACH(426) 28 29 DETACH(427) 30 31 DATABASE(428) 29 31 INDEXED(429) 383 384 CAST(430) 295 SAVEPOINT(431) 18 56 RELEASE(432) 18 19 VACUUM(433) 58 59 TRANSACTION(434) 53 DEFFERED(435) 63 EXCLUSIVE(436) 65 IMEDIATE(437) 64 COMMIT(438) 66 GLOB(439) 314 MATCH(440) 315 REGEX(441) 316 NOTHING(442) 70 72 NULLS(443) 81 82 LAST(444) 82 FIRST(445) 81 DO(446) 70 71 72 73 COLLATE(447) 77 EQUALS(448) 332 NOTEQUALS(449) 333 LESS(450) GREATER( 451) LESSEQ(452) 336 GREATEREQ( 453) 337 NOTNULL(454) UMINUS( 455) Nonterminals , with rules where they appear $accept(218) on left : 0 input(219) on left : 1, on right : 0 statement_list(220) on left : 2 3, on right : 1 3 statement(221) on left : 4 5 6 7, on right : 2 3 cmd(222) on left : 8 9 10 11 12 13 14 15 16 17, on right : 7 cmd_release(223) on left : 18 19, on right : 13 savepoint_name(224) on left : 20, on right : 18 19 55 56 cmd_pragma(225) on left : 21 22 23, on right : 8 cmd_reindex(226) on left : 24 25, on right : 9 cmd_analyze(227) on left : 26 27, on right : 10 cmd_attach(228) on left : 28 29, on right : 11 cmd_detach(229) on left : 30 31, on right : 12 pragma_key(230) on left : 32 33, on right : 21 22 23 pragma_value( 231) on left : 34 35 36 37 38 39, on right : 22 23 schema_name(232) on left : 40, on right : 28 29 30 31 33 60 181 pragma_name( 233) on left : 41, on right : 32 33 preparable_statement( 234) on left : 42 43 44 45 46 47 48 49 50 51, on right : 5 rollback_statement(235) on left : 52, on right : 14 opt_transaction(236) on left : 53 54, on right : 52 62 63 64 65 66 67 opt_to_savepoint( 237) on left : 55 56 57, on right : 52 vacuum_statement(238) on left : 58 59, on right : 15 opt_schema_name(239) on left : 60 61, on right : 58 59 begin_statement( 240) on left : 62 63 64 65, on right : 16 commit_statement(241) on left : 66 67, on right : 17 opt_upsert_clause(242) on left : 68 69, on right : 187 188 upsert_clause( 243) on left : 70 71 72 73, on right : 68 indexed_column_list( 244) on left : 74 75, on right : 72 73 75 indexed_column(245) on left : 76, on right : 74 75 opt_collate(246) on left : 77 78, on right : 76 assign_list(247) on left : 79 80, on right : 71 73 80 opt_null(248) on left : 81 82 83, on right : 260 assign_clause(249) on left : 84, on right : 79 80 column_name_list(250) on left : 85 86, on right : 84 86 collation_name(251) on left : 87, on right : 77 opt_hints(252) on left : 88 89, on right : 4 5 hint_list(253) on left : 90 91, on right : 88 91 hint(254) on left : 92 93, on right : 90 91 prepare_statement(255) on left : 94, on right : 4 prepare_target_query(256) on left : 95, on right : 94 execute_statement(257) on left : 96 97, on right : 50 import_statement(258) on left : 98, on right : 43 import_file_type(259) on left : 99, on right : 98 file_path(260) on left : 100, on right : 58 98 109 show_statement( 261) on left : 101 102 103, on right : 6 alter_statement(262) on left : 104 105 106, on right : 51 opt_column(263) on left : 107 108, on right : 105 106 create_statement( 264) on left : 109 110 111 112 113 114 115 116, on right : 44 opt_unique(265) on left : 117 118, on right : 113 index_name(266) on left : 119, on right : 113 trigger_declare(267) on left : 120, on right : 116 opt_tmp(268) on left : 121 122, on right : 120 trigger_name(269) on left : 123, on right : 120 181 182 opt_trigger_time( 270) on left : 124 125 126 127, on right : 120 trigger_event(271) on left : 128 129 130, on right : 120 opt_of_column_list( 272) on left : 131 132, on right : 130 opt_for_each(273) on left : 133 134, on right : 120 opt_when(274) on left : 135 136, on right : 120 trigger_cmd_list(275) on left : 137 138, on right : 116 138 trigger_cmd( 276) on left : 139 140 141 142, on right : 137 138 module_name(277) on left : 143, on right : 114 115 opt_not_exists(278) on left : 144 145, on right : 109 110 111 112 113 114 115 120 column_def_commalist< column_def_comma_list_t>(279) on left : 146 147, on right : 110 115 147 column_def(280) on left : 148, on right : 106 146 147 opt_column_arglist( 281) on left : 149 150, on right : 148 column_arglist(282) on left : 151 152, on right : 149 151 column_arg( 283) on left : 153 154 155 156 157 158 159, on right : 151 152 opt_on_conflict( 284) on left : 160 161, on right : 153 154 155 156 resolve_type( 285) on left : 162 163 164 165 166, on right : 160 193 opt_autoinc(286) on left : 167 168, on right : 155 column_type( 287) on left : 169 170 171 172 173 174 175 176 177, on right : 148 295 drop_statement( 288) on left : 178 179 180 181 182, on right : 49 opt_exists(289) on left : 183 184, on right : 178 179 181 182 delete_statement( 290) on left : 185, on right : 46 142 truncate_statement(291) on left : 186, on right : 47 insert_statement(292) on left : 187 188, on right : 45 141 super_list(293) on left : 189 190, on right : 187 190 insert_type(294) on left : 191 192 193, on right : 187 188 opt_column_list( 295) on left : 194 195, on right : 112 187 188 update_statement( 296) on left : 196, on right : 48 140 update_clause_commalist( 297) on left : 197 198, on right : 196 198 update_clause(298) on left : 199, on right : 197 198 select_statement( 299) on left : 200 201 202, on right : 42 111 112 139 select_with_paren( 300) on left : 203 204, on right : 200 202 204 205 401 select_paren_or_clause< select_paren_or_clause_t>(301) on left : 205 206, on right : 202 208 select_no_paren( 302) on left : 207 208, on right : 188 201 203 294 321 322 329 330 374 set_operator( 303) on left : 209, on right : 202 208 set_type(304) on left : 210 211 212, on right : 209 opt_all(305) on left : 213 214, on right : 209 select_clause(306) on left : 215 216, on right : 206 207 208 window_clause(307) on left : 217, on right : 216 windowdefn_list(308) on left : 218 219, on right : 217 219 windowdefn(309) on left : 220, on right : 218 219 window(310) on left : 221 222, on right : 220 340 opt_base_window_name( 311) on left : 223 224, on right : 221 222 opt_frame(312) on left : 225 226 227, on right : 221 222 range_or_rows( 313) on left : 228 229 230, on right : 225 226 frame_bound_s(314) on left : 231 232, on right : 225 226 frame_bound_e(315) on left : 233 234, on right : 226 frame_bound(316) on left : 235 236 237, on right : 231 233 opt_frame_exclude( 317) on left : 238 239, on right : 225 226 frame_exclude( 318) on left : 240 241 242 243, on right : 238 opt_distinct(319) on left : 244 245, on right : 215 216 339 select_list(320) on left : 246, on right : 215 216 opt_from_clause( 321) on left : 247 248, on right : 215 216 from_clause(322) on left : 249, on right : 247 opt_where(323) on left : 250 251, on right : 71 72 73 113 185 196 215 216 opt_group( 324) on left : 252 253, on right : 215 216 opt_having(325) on left : 254 255, on right : 252 opt_order(326) on left : 256 257, on right : 202 207 208 221 222 order_list( 327) on left : 258 259, on right : 256 259 order_desc(328) on left : 260, on right : 258 259 opt_order_type( 329) on left : 261 262 263, on right : 76 155 260 opt_top(330) on left : 264 265, on right : 215 216 opt_limit( 331) on left : 266 267 268 269 270 271, on right : 202 207 208 expr_list(332) on left : 272 273, on right : 221 246 252 273 319 320 339 352 373 opt_literal_list< opt_literal_list_t>(333) on left : 274 275, on right : 97 literal_list(334) on left : 276 277, on right : 93 189 190 274 277 expr_alias(335) on left : 278, on right : 272 273 expr(336) on left : 279 280 281 282 283 284, on right : 28 29 76 84 135 157 158 159 199 235 236 250 254 260 266 267 268 270 278 285 295 317 318 323 324 326 327 328 343 345 386 operand< operand_t>(337) on left : 285 286 287 288 289 290 291 292 293 294, on right : 279 298 299 300 301 302 304 305 306 307 308 309 310 311 312 313 314 315 316 319 320 321 322 331 332 333 334 335 336 337 353 354 cast_expr< cast_expr_t>(338) on left : 295, on right : 284 scalar_expr(339) on left : 296 297, on right : 287 unary_expr(340) on left : 298 299 300 301 302, on right : 288 binary_expr( 341) on left : 303 304 305 306 307 308 309 310 311 312 313 314 315 316, on right : 289 logic_expr(342) on left : 317 318, on right : 281 in_expr(343) on left : 319 320 321 322, on right : 283 case_expr(344) on left : 323 324 325 326, on right : 290 case_list(345) on left : 327 328, on right : 323 324 325 326 328 exists_expr( 346) on left : 329 330, on right : 282 comp_expr( 347) on left : 331 332 333 334 335 336 337, on right : 303 function_expr(348) on left : 338 339, on right : 291 opt_over_clause( 349) on left : 340 341 342, on right : 338 339 opt_filter_clause( 350) on left : 343 344, on right : 338 339 extract_expr(351) on left : 345, on right : 292 datetime_field( 352) on left : 346 347 348 349 350 351, on right : 345 array_expr(353) on left : 352, on right : 293 array_index(354) on left : 353, on right : 286 between_expr(355) on left : 354, on right : 280 column_name(356) on left : 355 356 357 358, on right : 85 86 105 296 383 literal( 357) on left : 359 360 361 362 363, on right : 276 277 297 string_literal(358) on left : 364, on right : 35 100 359 bool_literal(359) on left : 365 366, on right : 360 num_literal(360) on left : 367 368, on right : 34 361 int_literal(361) on left : 369, on right : 264 353 368 null_literal(362) on left : 370, on right : 362 param_expr(363) on left : 371, on right : 363 table_ref(364) on left : 372 373 374 375, on right : 249 375 376 table_prefix(365) on left : 376 377, on right : 372 373 374 375 join_op( 366) on left : 378 379 380 381 382, on right : 376 opt_index(367) on left : 383 384 385, on right : 372 opt_on(368) on left : 386 387, on right : 372 373 374 375 opt_using(369) on left : 388 389, on right : 372 373 374 375 table_ref_name_no_alias( 370) on left : 390, on right : 196 table_name(371) on left : 391 392, on right : 25 27 98 102 103 104 105 106 109 110 111 112 113 114 115 120 178 179 185 186 187 188 372 373 390 alias< alias_t>(372) on left : 393, on right : 394 opt_alias(373) on left : 394 395, on right : 278 372 373 374 375 opt_with_clause( 374) on left : 396 397, on right : 200 201 202 with_clause(375) on left : 398, on right : 396 with_description_list( 376) on left : 399 400, on right : 398 400 with_description(377) on left : 401, on right : 399 400 join_kw( 378) on left : 402 403 404 405 406 407 408 409 410 411, on right : 380 381 382 opt_semicolon( 379) on left : 412 413, on right : 1 ident_commalist(380) on left : 414 415, on right : 113 131 194 388 415 State 0 0 $accept :.input $end DEALLOCATE shift, and go to state 1 TRUNCATE shift, and go to state 2 ANALYZE shift, and go to state 3 EXECUTE shift, and go to state 4 PREPARE shift, and go to state 5 DESCRIBE shift, and go to state 6 CREATE shift, and go to state 7 DELETE shift, and go to state 8 IMPORT shift, and go to state 9 INSERT shift, and go to state 10 UPDATE shift, and go to state 11 ALTER shift, and go to state 12 DROP shift, and go to state 13 SHOW shift, and go to state 14 WITH shift, and go to state 15 END shift, and go to state 16 PRAGMA shift, and go to state 17 REINDEX shift, and go to state 18 REPLACE shift, and go to state 19 ROLLBACK shift, and go to state 20 BEGIN shift, and go to state 21 ATTACH shift, and go to state 22 DETACH shift, and go to state 23 RELEASE shift, and go to state 24 VACUUM shift, and go to state 25 COMMIT shift, and go to state 26 $default reduce using rule 397(opt_with_clause) input go to state 27 statement_list go to state 28 statement go to state 29 cmd go to state 30 cmd_release go to state 31 cmd_pragma go to state 32 cmd_reindex go to state 33 cmd_analyze go to state 34 cmd_attach go to state 35 cmd_detach go to state 36 preparable_statement go to state 37 rollback_statement go to state 38 vacuum_statement go to state 39 begin_statement go to state 40 commit_statement go to state 41 prepare_statement go to state 42 execute_statement go to state 43 import_statement go to state 44 show_statement go to state 45 alter_statement go to state 46 create_statement go to state 47 drop_statement go to state 48 delete_statement go to state 49 truncate_statement go to state 50 insert_statement go to state 51 insert_type go to state 52 update_statement go to state 53 select_statement go to state 54 opt_with_clause go to state 55 with_clause go to state 56 State 1 180 drop_statement : DEALLOCATE.PREPARE IDENTIFIER PREPARE shift, and go to state 57 State 2 186 truncate_statement : TRUNCATE.table_name IDENTIFIER shift, and go to state 58 table_name go to state 59 State 3 26 cmd_analyze : ANALYZE .27 | ANALYZE.table_name IDENTIFIER shift, and go to state 58 $default reduce using rule 26(cmd_analyze) table_name go to state 60 State 4 96 execute_statement : EXECUTE.IDENTIFIER 97 | EXECUTE.IDENTIFIER '(' opt_literal_list ')' IDENTIFIER shift, and go to state 61 State 5 94 prepare_statement : PREPARE.IDENTIFIER FROM prepare_target_query IDENTIFIER shift, and go to state 62 State 6 103 show_statement : DESCRIBE.table_name IDENTIFIER shift, and go to state 58 table_name go to state 63 State 7 109 create_statement : CREATE.TABLE opt_not_exists table_name FROM TBL FILE file_path 110 | CREATE.TABLE opt_not_exists table_name '(' column_def_commalist ')' 111 | CREATE.TABLE opt_not_exists table_name AS select_statement 112 | CREATE.VIEW opt_not_exists table_name opt_column_list AS select_statement 113 | CREATE.opt_unique INDEX opt_not_exists index_name ON table_name '(' ident_commalist ')' opt_where 114 | CREATE.VIRTUAL TABLE opt_not_exists table_name USING module_name 115 | CREATE.VIRTUAL TABLE opt_not_exists table_name USING module_name '(' column_def_commalist ')' 116 | CREATE.trigger_declare BEGIN trigger_cmd_list END VIRTUAL shift, and go to state 64 UNIQUE shift, and go to state 65 TABLE shift, and go to state 66 VIEW shift, and go to state 67 TEMP shift, and go to state 68 TRIGGER reduce using rule 122(opt_tmp)$default reduce using rule 118(opt_unique) opt_unique go to state 69 trigger_declare go to state 70 opt_tmp go to state 71 State 8 185 delete_statement : DELETE.FROM table_name opt_where FROM shift, and go to state 72 State 9 98 import_statement : IMPORT.FROM import_file_type FILE file_path INTO table_name FROM shift, and go to state 73 State 10 191 insert_type : INSERT .193 | INSERT.OR resolve_type OR shift, and go to state 74 $default reduce using rule 191(insert_type) State 11 196 update_statement : UPDATE.table_ref_name_no_alias SET update_clause_commalist opt_where IDENTIFIER shift, and go to state 58 table_ref_name_no_alias go to state 75 table_name go to state 76 State 12 104 alter_statement : ALTER.TABLE table_name RENAME TO table_name 105 | ALTER.TABLE table_name RENAME opt_column column_name TO column_name 106 | ALTER.TABLE table_name ADD opt_column column_def TABLE shift, and go to state 77 State 13 178 drop_statement : DROP.TABLE opt_exists table_name 179 | DROP.VIEW opt_exists table_name 181 | DROP.TRIGGER opt_exists schema_name '.' trigger_name 182 | DROP.TRIGGER opt_exists trigger_name TABLE shift, and go to state 78 VIEW shift, and go to state 79 TRIGGER shift, and go to state 80 State 14 101 show_statement : SHOW.TABLES 102 | SHOW.COLUMNS table_name COLUMNS shift, and go to state 81 TABLES shift, and go to state 82 State 15 398 with_clause : WITH.with_description_list IDENTIFIER shift, and go to state 83 with_description_list go to state 84 with_description go to state 85 State 16 67 commit_statement : END.opt_transaction TRANSACTION shift, and go to state 86 $default reduce using rule 54(opt_transaction) opt_transaction go to state 87 State 17 21 cmd_pragma : PRAGMA.pragma_key 22 | PRAGMA.pragma_key '=' pragma_value 23 | PRAGMA.pragma_key '(' pragma_value ')' IDENTIFIER shift, and go to state 88 pragma_key go to state 89 schema_name go to state 90 pragma_name go to state 91 State 18 24 cmd_reindex : REINDEX .25 | REINDEX.table_name IDENTIFIER shift, and go to state 58 $default reduce using rule 24(cmd_reindex) table_name go to state 92 State 19 192 insert_type : REPLACE . $default reduce using rule 192(insert_type) State 20 52 rollback_statement : ROLLBACK.opt_transaction opt_to_savepoint TRANSACTION shift, and go to state 86 $default reduce using rule 54(opt_transaction) opt_transaction go to state 93 State 21 62 begin_statement : BEGIN.opt_transaction 63 | BEGIN.DEFFERED opt_transaction 64 | BEGIN.IMEDIATE opt_transaction 65 | BEGIN.EXCLUSIVE opt_transaction TRANSACTION shift, and go to state 86 DEFFERED shift, and go to state 94 EXCLUSIVE shift, and go to state 95 IMEDIATE shift, and go to state 96 $default reduce using rule 54(opt_transaction) opt_transaction go to state 97 State 22 28 cmd_attach : ATTACH.expr AS schema_name 29 | ATTACH.DATABASE expr AS schema_name STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXISTS shift, and go to state 102 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 106 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 DATABASE shift, and go to state 110 CAST shift, and go to state 111 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 expr go to state 116 operand go to state 117 cast_expr go to state 118 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 logic_expr go to state 122 in_expr go to state 123 case_expr go to state 124 exists_expr go to state 125 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 between_expr go to state 131 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 23 30 cmd_detach : DETACH.schema_name 31 | DETACH.DATABASE schema_name IDENTIFIER shift, and go to state 140 DATABASE shift, and go to state 141 schema_name go to state 142 State 24 18 cmd_release : RELEASE.SAVEPOINT savepoint_name 19 | RELEASE.savepoint_name IDENTIFIER shift, and go to state 143 SAVEPOINT shift, and go to state 144 savepoint_name go to state 145 State 25 58 vacuum_statement : VACUUM.opt_schema_name INTO file_path 59 | VACUUM.opt_schema_name IDENTIFIER shift, and go to state 140 $default reduce using rule 61(opt_schema_name) schema_name go to state 146 opt_schema_name go to state 147 State 26 66 commit_statement : COMMIT.opt_transaction TRANSACTION shift, and go to state 86 $default reduce using rule 54(opt_transaction) opt_transaction go to state 148 State 27 0 $accept : input.$end $end shift, and go to state 149 State 28 1 input : statement_list.opt_semicolon 3 statement_list : statement_list.';' statement ';' shift, and go to state 150 $default reduce using rule 413(opt_semicolon) opt_semicolon go to state 151 State 29 2 statement_list : statement . $default reduce using rule 2(statement_list) State 30 7 statement : cmd. $default reduce using rule 7(statement) State 31 13 cmd : cmd_release. $default reduce using rule 13(cmd) State 32 8 cmd : cmd_pragma. $default reduce using rule 8(cmd) State 33 9 cmd : cmd_reindex. $default reduce using rule 9(cmd) State 34 10 cmd : cmd_analyze. $default reduce using rule 10(cmd) State 35 11 cmd : cmd_attach. $default reduce using rule 11(cmd) State 36 12 cmd : cmd_detach. $default reduce using rule 12(cmd) State 37 5 statement : preparable_statement.opt_hints WITH shift, and go to state 152 $default reduce using rule 89(opt_hints) opt_hints go to state 153 State 38 14 cmd : rollback_statement . $default reduce using rule 14(cmd) State 39 15 cmd : vacuum_statement . $default reduce using rule 15(cmd) State 40 16 cmd : begin_statement. $default reduce using rule 16(cmd) State 41 17 cmd : commit_statement . $default reduce using rule 17(cmd) State 42 4 statement : prepare_statement.opt_hints WITH shift, and go to state 152 $default reduce using rule 89(opt_hints) opt_hints go to state 154 State 43 50 preparable_statement : execute_statement . $default reduce using rule 50(preparable_statement) State 44 43 preparable_statement : import_statement. $default reduce using rule 43(preparable_statement) State 45 6 statement : show_statement. $default reduce using rule 6(statement) State 46 51 preparable_statement : alter_statement. $default reduce using rule 51(preparable_statement) State 47 44 preparable_statement : create_statement. $default reduce using rule 44(preparable_statement) State 48 49 preparable_statement : drop_statement. $default reduce using rule 49(preparable_statement) State 49 46 preparable_statement : delete_statement. $default reduce using rule 46(preparable_statement) State 50 47 preparable_statement : truncate_statement. $default reduce using rule 47(preparable_statement) State 51 45 preparable_statement : insert_statement. $default reduce using rule 45(preparable_statement) State 52 187 insert_statement : insert_type.INTO table_name opt_column_list VALUES super_list opt_upsert_clause 188 | insert_type.INTO table_name opt_column_list select_no_paren opt_upsert_clause INTO shift, and go to state 155 State 53 48 preparable_statement : update_statement . $default reduce using rule 48(preparable_statement) State 54 42 preparable_statement : select_statement. $default reduce using rule 42(preparable_statement) State 55 200 select_statement : opt_with_clause.select_with_paren 201 | opt_with_clause.select_no_paren 202 | opt_with_clause.select_with_paren set_operator select_paren_or_clause opt_order opt_limit SELECT shift, and go to state 156 '(' shift, and go to state 157 select_with_paren go to state 158 select_no_paren go to state 159 select_clause go to state 160 State 56 396 opt_with_clause : with_clause . $default reduce using rule 396(opt_with_clause) State 57 180 drop_statement : DEALLOCATE PREPARE.IDENTIFIER IDENTIFIER shift, and go to state 161 State 58 391 table_name : IDENTIFIER .392 | IDENTIFIER.'.' IDENTIFIER '.' shift, and go to state 162 $default reduce using rule 391(table_name) State 59 186 truncate_statement : TRUNCATE table_name . $default reduce using rule 186(truncate_statement) State 60 27 cmd_analyze : ANALYZE table_name. $default reduce using rule 27(cmd_analyze) State 61 96 execute_statement : EXECUTE IDENTIFIER .97 | EXECUTE IDENTIFIER.'(' opt_literal_list ')' '(' shift, and go to state 163 $default reduce using rule 96(execute_statement) State 62 94 prepare_statement : PREPARE IDENTIFIER.FROM prepare_target_query FROM shift, and go to state 164 State 63 103 show_statement : DESCRIBE table_name . $default reduce using rule 103(show_statement) State 64 114 create_statement : CREATE VIRTUAL.TABLE opt_not_exists table_name USING module_name 115 | CREATE VIRTUAL.TABLE opt_not_exists table_name USING module_name '(' column_def_commalist ')' TABLE shift, and go to state 165 State 65 117 opt_unique : UNIQUE . $default reduce using rule 117(opt_unique) State 66 109 create_statement : CREATE TABLE.opt_not_exists table_name FROM TBL FILE file_path 110 | CREATE TABLE.opt_not_exists table_name '(' column_def_commalist ')' 111 | CREATE TABLE.opt_not_exists table_name AS select_statement IF shift, and go to state 166 $default reduce using rule 145(opt_not_exists) opt_not_exists go to state 167 State 67 112 create_statement : CREATE VIEW.opt_not_exists table_name opt_column_list AS select_statement IF shift, and go to state 166 $default reduce using rule 145(opt_not_exists) opt_not_exists go to state 168 State 68 121 opt_tmp : TEMP. $default reduce using rule 121(opt_tmp) State 69 113 create_statement : CREATE opt_unique.INDEX opt_not_exists index_name ON table_name '(' ident_commalist ')' opt_where INDEX shift, and go to state 169 State 70 116 create_statement : CREATE trigger_declare.BEGIN trigger_cmd_list END BEGIN shift, and go to state 170 State 71 120 trigger_declare : opt_tmp.TRIGGER opt_not_exists trigger_name opt_trigger_time trigger_event ON table_name opt_for_each opt_when TRIGGER shift, and go to state 171 State 72 185 delete_statement : DELETE FROM.table_name opt_where IDENTIFIER shift, and go to state 58 table_name go to state 172 State 73 98 import_statement : IMPORT FROM.import_file_type FILE file_path INTO table_name CSV shift, and go to state 173 import_file_type go to state 174 State 74 193 insert_type : INSERT OR.resolve_type IGNORE shift, and go to state 175 REPLACE shift, and go to state 176 ROLLBACK shift, and go to state 177 ABORT shift, and go to state 178 FAIL shift, and go to state 179 resolve_type go to state 180 State 75 196 update_statement : UPDATE table_ref_name_no_alias.SET update_clause_commalist opt_where SET shift, and go to state 181 State 76 390 table_ref_name_no_alias : table_name . $default reduce using rule 390(table_ref_name_no_alias) State 77 104 alter_statement : ALTER TABLE.table_name RENAME TO table_name 105 | ALTER TABLE.table_name RENAME opt_column column_name TO column_name 106 | ALTER TABLE.table_name ADD opt_column column_def IDENTIFIER shift, and go to state 58 table_name go to state 182 State 78 178 drop_statement : DROP TABLE.opt_exists table_name IF shift, and go to state 183 $default reduce using rule 184(opt_exists) opt_exists go to state 184 State 79 179 drop_statement : DROP VIEW.opt_exists table_name IF shift, and go to state 183 $default reduce using rule 184(opt_exists) opt_exists go to state 185 State 80 181 drop_statement : DROP TRIGGER.opt_exists schema_name '.' trigger_name 182 | DROP TRIGGER.opt_exists trigger_name IF shift, and go to state 183 $default reduce using rule 184(opt_exists) opt_exists go to state 186 State 81 102 show_statement : SHOW COLUMNS.table_name IDENTIFIER shift, and go to state 58 table_name go to state 187 State 82 101 show_statement : SHOW TABLES . $default reduce using rule 101(show_statement) State 83 401 with_description : IDENTIFIER.AS select_with_paren AS shift, and go to state 188 State 84 398 with_clause : WITH with_description_list .400 with_description_list : with_description_list.',' with_description ',' shift, and go to state 189 $default reduce using rule 398(with_clause) State 85 399 with_description_list : with_description . $default reduce using rule 399(with_description_list) State 86 53 opt_transaction : TRANSACTION. $default reduce using rule 53(opt_transaction) State 87 67 commit_statement : END opt_transaction. $default reduce using rule 67(commit_statement) State 88 40 schema_name : IDENTIFIER .41 pragma_name : IDENTIFIER. '.' reduce using rule 40(schema_name)$default reduce using rule 41(pragma_name) State 89 21 cmd_pragma : PRAGMA pragma_key .22 | PRAGMA pragma_key.'=' pragma_value 23 | PRAGMA pragma_key.'(' pragma_value ')' '=' shift, and go to state 190 '(' shift, and go to state 191 $default reduce using rule 21(cmd_pragma) State 90 33 pragma_key : schema_name.'.' pragma_name '.' shift, and go to state 192 State 91 32 pragma_key : pragma_name . $default reduce using rule 32(pragma_key) State 92 25 cmd_reindex : REINDEX table_name. $default reduce using rule 25(cmd_reindex) State 93 52 rollback_statement : ROLLBACK opt_transaction.opt_to_savepoint TO shift, and go to state 193 $default reduce using rule 57(opt_to_savepoint) opt_to_savepoint go to state 194 State 94 63 begin_statement : BEGIN DEFFERED.opt_transaction TRANSACTION shift, and go to state 86 $default reduce using rule 54(opt_transaction) opt_transaction go to state 195 State 95 65 begin_statement : BEGIN EXCLUSIVE.opt_transaction TRANSACTION shift, and go to state 86 $default reduce using rule 54(opt_transaction) opt_transaction go to state 196 State 96 64 begin_statement : BEGIN IMEDIATE.opt_transaction TRANSACTION shift, and go to state 86 $default reduce using rule 54(opt_transaction) opt_transaction go to state 197 State 97 62 begin_statement : BEGIN opt_transaction . $default reduce using rule 62(begin_statement) State 98 364 string_literal : STRING. $default reduce using rule 364(string_literal) State 99 338 function_expr : IDENTIFIER.'(' ')' opt_filter_clause opt_over_clause 339 | IDENTIFIER.'(' opt_distinct expr_list ')' opt_filter_clause opt_over_clause 355 column_name : IDENTIFIER .356 | IDENTIFIER.'.' IDENTIFIER 358 | IDENTIFIER.'.' '*' '(' shift, and go to state 198 '.' shift, and go to state 199 $default reduce using rule 355(column_name) State 100 367 num_literal : FLOATVAL . $default reduce using rule 367(num_literal) State 101 369 int_literal : INTVAL. $default reduce using rule 369(int_literal) State 102 329 exists_expr : EXISTS.'(' select_no_paren ')' '(' shift, and go to state 200 State 103 345 extract_expr : EXTRACT.'(' datetime_field FROM expr ')' '(' shift, and go to state 201 State 104 323 case_expr : CASE.expr case_list END 324 | CASE.expr case_list ELSE expr END 325 | CASE.case_list END 326 | CASE.case_list ELSE expr END STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXISTS shift, and go to state 102 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 WHEN shift, and go to state 202 NOT shift, and go to state 106 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 CAST shift, and go to state 111 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 expr go to state 203 operand go to state 117 cast_expr go to state 118 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 logic_expr go to state 122 in_expr go to state 123 case_expr go to state 124 case_list go to state 204 exists_expr go to state 125 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 between_expr go to state 131 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 105 370 null_literal : NULL. $default reduce using rule 370(null_literal) State 106 299 unary_expr : NOT.operand 330 exists_expr : NOT.EXISTS '(' select_no_paren ')' STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXISTS shift, and go to state 205 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 206 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 operand go to state 207 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 case_expr go to state 124 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 107 352 array_expr : ARRAY.'[' expr_list ']' '[' shift, and go to state 208 State 108 365 bool_literal : TRUE. $default reduce using rule 365(bool_literal) State 109 366 bool_literal : FALSE . $default reduce using rule 366(bool_literal) State 110 29 cmd_attach : ATTACH DATABASE.expr AS schema_name STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXISTS shift, and go to state 102 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 106 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 CAST shift, and go to state 111 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 expr go to state 209 operand go to state 117 cast_expr go to state 118 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 logic_expr go to state 122 in_expr go to state 123 case_expr go to state 124 exists_expr go to state 125 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 between_expr go to state 131 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 111 295 cast_expr : CAST.'(' expr AS column_type ')' '(' shift, and go to state 210 State 112 298 unary_expr : '-'.operand STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 206 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 operand go to state 211 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 case_expr go to state 124 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 113 357 column_name : '*'. $default reduce using rule 357(column_name) State 114 285 operand : '('.expr ')' 294 | '('.select_no_paren ')' STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXISTS shift, and go to state 102 EXTRACT shift, and go to state 103 SELECT shift, and go to state 156 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 106 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 CAST shift, and go to state 111 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 select_no_paren go to state 212 select_clause go to state 160 expr go to state 213 operand go to state 117 cast_expr go to state 118 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 logic_expr go to state 122 in_expr go to state 123 case_expr go to state 124 exists_expr go to state 125 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 between_expr go to state 131 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 115 371 param_expr : '?'. $default reduce using rule 371(param_expr) State 116 28 cmd_attach : ATTACH expr.AS schema_name 317 logic_expr : expr.AND expr 318 | expr.OR expr AND shift, and go to state 214 AS shift, and go to state 215 OR shift, and go to state 216 State 117 279 expr : operand .300 unary_expr : operand.ISNULL 301 | operand.IS NULL 302 | operand.IS NOT NULL 304 binary_expr : operand.'-' operand 305 | operand.'+' operand 306 | operand.'/' operand 307 | operand.'*' operand 308 | operand.'%' operand 309 | operand.'^' operand 310 | operand.LIKE operand 311 | operand.NOT LIKE operand 312 | operand.ILIKE operand 313 | operand.CONCAT operand 314 | operand.GLOB operand 315 | operand.MATCH operand 316 | operand.REGEX operand 319 in_expr : operand.IN '(' expr_list ')' 320 | operand.NOT IN '(' expr_list ')' 321 | operand.IN '(' select_no_paren ')' 322 | operand.NOT IN '(' select_no_paren ')' 331 comp_expr : operand.'=' operand 332 | operand.EQUALS operand 333 | operand.NOTEQUALS operand 334 | operand.'<' operand 335 | operand.'>' operand 336 | operand.LESSEQ operand 337 | operand.GREATEREQ operand 353 array_index : operand.'[' int_literal ']' 354 between_expr : operand.BETWEEN operand AND operand BETWEEN shift, and go to state 217 ISNULL shift, and go to state 218 LIKE shift, and go to state 219 NOT shift, and go to state 220 IN shift, and go to state 221 IS shift, and go to state 222 CONCAT shift, and go to state 223 ILIKE shift, and go to state 224 GLOB shift, and go to state 225 MATCH shift, and go to state 226 REGEX shift, and go to state 227 '=' shift, and go to state 228 EQUALS shift, and go to state 229 NOTEQUALS shift, and go to state 230 '<' shift, and go to state 231 '>' shift, and go to state 232 LESSEQ shift, and go to state 233 GREATEREQ shift, and go to state 234 '+' shift, and go to state 235 '-' shift, and go to state 236 '*' shift, and go to state 237 '/' shift, and go to state 238 '%' shift, and go to state 239 '^' shift, and go to state 240 '[' shift, and go to state 241 $default reduce using rule 279(expr) State 118 284 expr : cast_expr . $default reduce using rule 284(expr) State 119 287 operand : scalar_expr. $default reduce using rule 287(operand) State 120 288 operand : unary_expr. $default reduce using rule 288(operand) State 121 289 operand : binary_expr. $default reduce using rule 289(operand) State 122 281 expr : logic_expr. $default reduce using rule 281(expr) State 123 283 expr : in_expr. $default reduce using rule 283(expr) State 124 290 operand : case_expr. $default reduce using rule 290(operand) State 125 282 expr : exists_expr. $default reduce using rule 282(expr) State 126 303 binary_expr : comp_expr. $default reduce using rule 303(binary_expr) State 127 291 operand : function_expr. $default reduce using rule 291(operand) State 128 292 operand : extract_expr. $default reduce using rule 292(operand) State 129 293 operand : array_expr. $default reduce using rule 293(operand) State 130 286 operand : array_index. $default reduce using rule 286(operand) State 131 280 expr : between_expr. $default reduce using rule 280(expr) State 132 296 scalar_expr : column_name. $default reduce using rule 296(scalar_expr) State 133 297 scalar_expr : literal. $default reduce using rule 297(scalar_expr) State 134 359 literal : string_literal. $default reduce using rule 359(literal) State 135 360 literal : bool_literal. $default reduce using rule 360(literal) State 136 361 literal : num_literal. $default reduce using rule 361(literal) State 137 368 num_literal : int_literal. $default reduce using rule 368(num_literal) State 138 362 literal : null_literal. $default reduce using rule 362(literal) State 139 363 literal : param_expr. $default reduce using rule 363(literal) State 140 40 schema_name : IDENTIFIER. $default reduce using rule 40(schema_name) State 141 31 cmd_detach : DETACH DATABASE.schema_name IDENTIFIER shift, and go to state 140 schema_name go to state 242 State 142 30 cmd_detach : DETACH schema_name . $default reduce using rule 30(cmd_detach) State 143 20 savepoint_name : IDENTIFIER. $default reduce using rule 20(savepoint_name) State 144 18 cmd_release : RELEASE SAVEPOINT.savepoint_name IDENTIFIER shift, and go to state 143 savepoint_name go to state 243 State 145 19 cmd_release : RELEASE savepoint_name . $default reduce using rule 19(cmd_release) State 146 60 opt_schema_name : schema_name. $default reduce using rule 60(opt_schema_name) State 147 58 vacuum_statement : VACUUM opt_schema_name.INTO file_path 59 | VACUUM opt_schema_name. INTO shift, and go to state 244 $default reduce using rule 59(vacuum_statement) State 148 66 commit_statement : COMMIT opt_transaction . $default reduce using rule 66(commit_statement) State 149 0 $accept : input $end. $default accept State 150 3 statement_list : statement_list ';'.statement 412 opt_semicolon : ';'. DEALLOCATE shift, and go to state 1 TRUNCATE shift, and go to state 2 ANALYZE shift, and go to state 3 EXECUTE shift, and go to state 4 PREPARE shift, and go to state 5 DESCRIBE shift, and go to state 6 CREATE shift, and go to state 7 DELETE shift, and go to state 8 IMPORT shift, and go to state 9 INSERT shift, and go to state 10 UPDATE shift, and go to state 11 ALTER shift, and go to state 12 DROP shift, and go to state 13 SHOW shift, and go to state 14 WITH shift, and go to state 15 END shift, and go to state 16 PRAGMA shift, and go to state 17 REINDEX shift, and go to state 18 REPLACE shift, and go to state 19 ROLLBACK shift, and go to state 20 BEGIN shift, and go to state 21 ATTACH shift, and go to state 22 DETACH shift, and go to state 23 RELEASE shift, and go to state 24 VACUUM shift, and go to state 25 COMMIT shift, and go to state 26 $end reduce using rule 412(opt_semicolon)$default reduce using rule 397(opt_with_clause) statement go to state 245 cmd go to state 30 cmd_release go to state 31 cmd_pragma go to state 32 cmd_reindex go to state 33 cmd_analyze go to state 34 cmd_attach go to state 35 cmd_detach go to state 36 preparable_statement go to state 37 rollback_statement go to state 38 vacuum_statement go to state 39 begin_statement go to state 40 commit_statement go to state 41 prepare_statement go to state 42 execute_statement go to state 43 import_statement go to state 44 show_statement go to state 45 alter_statement go to state 46 create_statement go to state 47 drop_statement go to state 48 delete_statement go to state 49 truncate_statement go to state 50 insert_statement go to state 51 insert_type go to state 52 update_statement go to state 53 select_statement go to state 54 opt_with_clause go to state 55 with_clause go to state 56 State 151 1 input : statement_list opt_semicolon . $default reduce using rule 1(input) State 152 88 opt_hints : WITH.HINT '(' hint_list ')' HINT shift, and go to state 246 State 153 5 statement : preparable_statement opt_hints . $default reduce using rule 5(statement) State 154 4 statement : prepare_statement opt_hints . $default reduce using rule 4(statement) State 155 187 insert_statement : insert_type INTO.table_name opt_column_list VALUES super_list opt_upsert_clause 188 | insert_type INTO.table_name opt_column_list select_no_paren opt_upsert_clause IDENTIFIER shift, and go to state 58 table_name go to state 247 State 156 215 select_clause : SELECT.opt_top opt_distinct select_list opt_from_clause opt_where opt_group 216 | SELECT.opt_top opt_distinct select_list opt_from_clause opt_where opt_group window_clause TOP shift, and go to state 248 $default reduce using rule 265(opt_top) opt_top go to state 249 State 157 203 select_with_paren : '('.select_no_paren ')' 204 | '('.select_with_paren ')' SELECT shift, and go to state 156 '(' shift, and go to state 157 select_with_paren go to state 250 select_no_paren go to state 251 select_clause go to state 160 State 158 200 select_statement : opt_with_clause select_with_paren .202 | opt_with_clause select_with_paren.set_operator select_paren_or_clause opt_order opt_limit INTERSECT shift, and go to state 252 EXCEPT shift, and go to state 253 UNION shift, and go to state 254 $default reduce using rule 200(select_statement) set_operator go to state 255 set_type go to state 256 State 159 201 select_statement : opt_with_clause select_no_paren . $default reduce using rule 201(select_statement) State 160 207 select_no_paren : select_clause.opt_order opt_limit 208 | select_clause.set_operator select_paren_or_clause opt_order opt_limit INTERSECT shift, and go to state 252 EXCEPT shift, and go to state 253 ORDER shift, and go to state 257 UNION shift, and go to state 254 $default reduce using rule 257(opt_order) set_operator go to state 258 set_type go to state 256 opt_order go to state 259 State 161 180 drop_statement : DEALLOCATE PREPARE IDENTIFIER . $default reduce using rule 180(drop_statement) State 162 392 table_name : IDENTIFIER '.'.IDENTIFIER IDENTIFIER shift, and go to state 260 State 163 97 execute_statement : EXECUTE IDENTIFIER '('.opt_literal_list ')' STRING shift, and go to state 98 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 NULL shift, and go to state 105 TRUE shift, and go to state 108 FALSE shift, and go to state 109 '?' shift, and go to state 115 $default reduce using rule 275(opt_literal_list) opt_literal_list go to state 261 literal_list go to state 262 literal go to state 263 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 164 94 prepare_statement : PREPARE IDENTIFIER FROM.prepare_target_query STRING shift, and go to state 264 prepare_target_query go to state 265 State 165 114 create_statement : CREATE VIRTUAL TABLE.opt_not_exists table_name USING module_name 115 | CREATE VIRTUAL TABLE.opt_not_exists table_name USING module_name '(' column_def_commalist ')' IF shift, and go to state 166 $default reduce using rule 145(opt_not_exists) opt_not_exists go to state 266 State 166 144 opt_not_exists : IF.NOT EXISTS NOT shift, and go to state 267 State 167 109 create_statement : CREATE TABLE opt_not_exists.table_name FROM TBL FILE file_path 110 | CREATE TABLE opt_not_exists.table_name '(' column_def_commalist ')' 111 | CREATE TABLE opt_not_exists.table_name AS select_statement IDENTIFIER shift, and go to state 58 table_name go to state 268 State 168 112 create_statement : CREATE VIEW opt_not_exists.table_name opt_column_list AS select_statement IDENTIFIER shift, and go to state 58 table_name go to state 269 State 169 113 create_statement : CREATE opt_unique INDEX.opt_not_exists index_name ON table_name '(' ident_commalist ')' opt_where IF shift, and go to state 166 $default reduce using rule 145(opt_not_exists) opt_not_exists go to state 270 State 170 116 create_statement : CREATE trigger_declare BEGIN.trigger_cmd_list END DELETE shift, and go to state 8 INSERT shift, and go to state 10 UPDATE shift, and go to state 11 WITH shift, and go to state 15 REPLACE shift, and go to state 19 $default reduce using rule 397(opt_with_clause) trigger_cmd_list go to state 271 trigger_cmd go to state 272 delete_statement go to state 273 insert_statement go to state 274 insert_type go to state 52 update_statement go to state 275 select_statement go to state 276 opt_with_clause go to state 55 with_clause go to state 56 State 171 120 trigger_declare : opt_tmp TRIGGER.opt_not_exists trigger_name opt_trigger_time trigger_event ON table_name opt_for_each opt_when IF shift, and go to state 166 $default reduce using rule 145(opt_not_exists) opt_not_exists go to state 277 State 172 185 delete_statement : DELETE FROM table_name.opt_where WHERE shift, and go to state 278 $default reduce using rule 251(opt_where) opt_where go to state 279 State 173 99 import_file_type : CSV. $default reduce using rule 99(import_file_type) State 174 98 import_statement : IMPORT FROM import_file_type.FILE file_path INTO table_name FILE shift, and go to state 280 State 175 162 resolve_type : IGNORE . $default reduce using rule 162(resolve_type) State 176 163 resolve_type : REPLACE. $default reduce using rule 163(resolve_type) State 177 164 resolve_type : ROLLBACK. $default reduce using rule 164(resolve_type) State 178 165 resolve_type : ABORT. $default reduce using rule 165(resolve_type) State 179 166 resolve_type : FAIL. $default reduce using rule 166(resolve_type) State 180 193 insert_type : INSERT OR resolve_type. $default reduce using rule 193(insert_type) State 181 196 update_statement : UPDATE table_ref_name_no_alias SET.update_clause_commalist opt_where IDENTIFIER shift, and go to state 281 update_clause_commalist go to state 282 update_clause go to state 283 State 182 104 alter_statement : ALTER TABLE table_name.RENAME TO table_name 105 | ALTER TABLE table_name.RENAME opt_column column_name TO column_name 106 | ALTER TABLE table_name.ADD opt_column column_def RENAME shift, and go to state 284 ADD shift, and go to state 285 State 183 183 opt_exists : IF.EXISTS EXISTS shift, and go to state 286 State 184 178 drop_statement : DROP TABLE opt_exists.table_name IDENTIFIER shift, and go to state 58 table_name go to state 287 State 185 179 drop_statement : DROP VIEW opt_exists.table_name IDENTIFIER shift, and go to state 58 table_name go to state 288 State 186 181 drop_statement : DROP TRIGGER opt_exists.schema_name '.' trigger_name 182 | DROP TRIGGER opt_exists.trigger_name IDENTIFIER shift, and go to state 289 schema_name go to state 290 trigger_name go to state 291 State 187 102 show_statement : SHOW COLUMNS table_name . $default reduce using rule 102(show_statement) State 188 401 with_description : IDENTIFIER AS.select_with_paren '(' shift, and go to state 157 select_with_paren go to state 292 State 189 400 with_description_list : with_description_list ','.with_description IDENTIFIER shift, and go to state 83 with_description go to state 293 State 190 22 cmd_pragma : PRAGMA pragma_key '='.pragma_value STRING shift, and go to state 98 IDENTIFIER shift, and go to state 294 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 DEFAULT shift, and go to state 295 DELETE shift, and go to state 296 ON shift, and go to state 297 pragma_value go to state 298 string_literal go to state 299 num_literal go to state 300 int_literal go to state 137 State 191 23 cmd_pragma : PRAGMA pragma_key '('.pragma_value ')' STRING shift, and go to state 98 IDENTIFIER shift, and go to state 294 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 DEFAULT shift, and go to state 295 DELETE shift, and go to state 296 ON shift, and go to state 297 pragma_value go to state 301 string_literal go to state 299 num_literal go to state 300 int_literal go to state 137 State 192 33 pragma_key : schema_name '.'.pragma_name IDENTIFIER shift, and go to state 302 pragma_name go to state 303 State 193 55 opt_to_savepoint : TO.savepoint_name 56 | TO.SAVEPOINT savepoint_name IDENTIFIER shift, and go to state 143 SAVEPOINT shift, and go to state 304 savepoint_name go to state 305 State 194 52 rollback_statement : ROLLBACK opt_transaction opt_to_savepoint . $default reduce using rule 52(rollback_statement) State 195 63 begin_statement : BEGIN DEFFERED opt_transaction. $default reduce using rule 63(begin_statement) State 196 65 begin_statement : BEGIN EXCLUSIVE opt_transaction. $default reduce using rule 65(begin_statement) State 197 64 begin_statement : BEGIN IMEDIATE opt_transaction. $default reduce using rule 64(begin_statement) State 198 338 function_expr : IDENTIFIER '('.')' opt_filter_clause opt_over_clause 339 | IDENTIFIER '('.opt_distinct expr_list ')' opt_filter_clause opt_over_clause DISTINCT shift, and go to state 306 ')' shift, and go to state 307 $default reduce using rule 245(opt_distinct) opt_distinct go to state 308 State 199 356 column_name : IDENTIFIER '.'.IDENTIFIER 358 | IDENTIFIER '.'.'*' IDENTIFIER shift, and go to state 309 '*' shift, and go to state 310 State 200 329 exists_expr : EXISTS '('.select_no_paren ')' SELECT shift, and go to state 156 select_no_paren go to state 311 select_clause go to state 160 State 201 345 extract_expr : EXTRACT '('.datetime_field FROM expr ')' SECOND shift, and go to state 312 MINUTE shift, and go to state 313 HOUR shift, and go to state 314 DAY shift, and go to state 315 MONTH shift, and go to state 316 YEAR shift, and go to state 317 datetime_field go to state 318 State 202 327 case_list : WHEN.expr THEN expr STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXISTS shift, and go to state 102 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 106 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 CAST shift, and go to state 111 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 expr go to state 319 operand go to state 117 cast_expr go to state 118 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 logic_expr go to state 122 in_expr go to state 123 case_expr go to state 124 exists_expr go to state 125 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 between_expr go to state 131 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 203 317 logic_expr : expr.AND expr 318 | expr.OR expr 323 case_expr : CASE expr.case_list END 324 | CASE expr.case_list ELSE expr END WHEN shift, and go to state 202 AND shift, and go to state 214 OR shift, and go to state 216 case_list go to state 320 State 204 325 case_expr : CASE case_list.END 326 | CASE case_list.ELSE expr END 328 case_list : case_list.WHEN expr THEN expr ELSE shift, and go to state 321 WHEN shift, and go to state 322 END shift, and go to state 323 State 205 330 exists_expr : NOT EXISTS.'(' select_no_paren ')' '(' shift, and go to state 324 State 206 299 unary_expr : NOT.operand STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 206 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 operand go to state 207 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 case_expr go to state 124 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 207 299 unary_expr : NOT operand .300 | operand.ISNULL 301 | operand.IS NULL 302 | operand.IS NOT NULL 304 binary_expr : operand.'-' operand 305 | operand.'+' operand 306 | operand.'/' operand 307 | operand.'*' operand 308 | operand.'%' operand 309 | operand.'^' operand 310 | operand.LIKE operand 311 | operand.NOT LIKE operand 312 | operand.ILIKE operand 313 | operand.CONCAT operand 314 | operand.GLOB operand 315 | operand.MATCH operand 316 | operand.REGEX operand 331 comp_expr : operand.'=' operand 332 | operand.EQUALS operand 333 | operand.NOTEQUALS operand 334 | operand.'<' operand 335 | operand.'>' operand 336 | operand.LESSEQ operand 337 | operand.GREATEREQ operand 353 array_index : operand.'[' int_literal ']' ISNULL shift, and go to state 218 LIKE shift, and go to state 219 NOT shift, and go to state 325 IS shift, and go to state 222 CONCAT shift, and go to state 223 ILIKE shift, and go to state 224 GLOB shift, and go to state 225 MATCH shift, and go to state 226 REGEX shift, and go to state 227 '=' shift, and go to state 228 EQUALS shift, and go to state 229 NOTEQUALS shift, and go to state 230 '<' shift, and go to state 231 '>' shift, and go to state 232 LESSEQ shift, and go to state 233 GREATEREQ shift, and go to state 234 '+' shift, and go to state 235 '-' shift, and go to state 236 '*' shift, and go to state 237 '/' shift, and go to state 238 '%' shift, and go to state 239 '^' shift, and go to state 240 '[' shift, and go to state 241 $default reduce using rule 299(unary_expr) State 208 352 array_expr : ARRAY '['.expr_list ']' STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXISTS shift, and go to state 102 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 106 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 CAST shift, and go to state 111 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 expr_list go to state 326 expr_alias go to state 327 expr go to state 328 operand go to state 117 cast_expr go to state 118 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 logic_expr go to state 122 in_expr go to state 123 case_expr go to state 124 exists_expr go to state 125 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 between_expr go to state 131 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 209 29 cmd_attach : ATTACH DATABASE expr.AS schema_name 317 logic_expr : expr.AND expr 318 | expr.OR expr AND shift, and go to state 214 AS shift, and go to state 329 OR shift, and go to state 216 State 210 295 cast_expr : CAST '('.expr AS column_type ')' STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXISTS shift, and go to state 102 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 106 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 CAST shift, and go to state 111 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 expr go to state 330 operand go to state 117 cast_expr go to state 118 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 logic_expr go to state 122 in_expr go to state 123 case_expr go to state 124 exists_expr go to state 125 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 between_expr go to state 131 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 211 298 unary_expr : '-' operand .300 | operand.ISNULL 301 | operand.IS NULL 302 | operand.IS NOT NULL 304 binary_expr : operand.'-' operand 305 | operand.'+' operand 306 | operand.'/' operand 307 | operand.'*' operand 308 | operand.'%' operand 309 | operand.'^' operand 310 | operand.LIKE operand 311 | operand.NOT LIKE operand 312 | operand.ILIKE operand 313 | operand.CONCAT operand 314 | operand.GLOB operand 315 | operand.MATCH operand 316 | operand.REGEX operand 331 comp_expr : operand.'=' operand 332 | operand.EQUALS operand 333 | operand.NOTEQUALS operand 334 | operand.'<' operand 335 | operand.'>' operand 336 | operand.LESSEQ operand 337 | operand.GREATEREQ operand 353 array_index : operand.'[' int_literal ']' CONCAT shift, and go to state 223 '*' shift, and go to state 237 '/' shift, and go to state 238 '%' shift, and go to state 239 '^' shift, and go to state 240 '[' shift, and go to state 241 $default reduce using rule 298(unary_expr) State 212 294 operand : '(' select_no_paren.')' ')' shift, and go to state 331 State 213 285 operand : '(' expr.')' 317 logic_expr : expr.AND expr 318 | expr.OR expr AND shift, and go to state 214 OR shift, and go to state 216 ')' shift, and go to state 332 State 214 317 logic_expr : expr AND.expr STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXISTS shift, and go to state 102 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 106 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 CAST shift, and go to state 111 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 expr go to state 333 operand go to state 117 cast_expr go to state 118 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 logic_expr go to state 122 in_expr go to state 123 case_expr go to state 124 exists_expr go to state 125 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 between_expr go to state 131 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 215 28 cmd_attach : ATTACH expr AS.schema_name IDENTIFIER shift, and go to state 140 schema_name go to state 334 State 216 318 logic_expr : expr OR.expr STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXISTS shift, and go to state 102 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 106 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 CAST shift, and go to state 111 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 expr go to state 335 operand go to state 117 cast_expr go to state 118 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 logic_expr go to state 122 in_expr go to state 123 case_expr go to state 124 exists_expr go to state 125 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 between_expr go to state 131 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 217 354 between_expr : operand BETWEEN.operand AND operand STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 206 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 operand go to state 336 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 case_expr go to state 124 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 218 300 unary_expr : operand ISNULL . $default reduce using rule 300(unary_expr) State 219 310 binary_expr : operand LIKE.operand STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 206 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 operand go to state 337 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 case_expr go to state 124 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 220 311 binary_expr : operand NOT.LIKE operand 320 in_expr : operand NOT.IN '(' expr_list ')' 322 | operand NOT.IN '(' select_no_paren ')' LIKE shift, and go to state 338 IN shift, and go to state 339 State 221 319 in_expr : operand IN.'(' expr_list ')' 321 | operand IN.'(' select_no_paren ')' '(' shift, and go to state 340 State 222 301 unary_expr : operand IS.NULL 302 | operand IS.NOT NULL NULL shift, and go to state 341 NOT shift, and go to state 342 State 223 313 binary_expr : operand CONCAT.operand STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 206 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 operand go to state 343 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 case_expr go to state 124 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 224 312 binary_expr : operand ILIKE.operand STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 206 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 operand go to state 344 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 case_expr go to state 124 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 225 314 binary_expr : operand GLOB.operand STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 206 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 operand go to state 345 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 case_expr go to state 124 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 226 315 binary_expr : operand MATCH.operand STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 206 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 operand go to state 346 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 case_expr go to state 124 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 227 316 binary_expr : operand REGEX.operand STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 206 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 operand go to state 347 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 case_expr go to state 124 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 228 331 comp_expr : operand '='.operand STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 206 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 operand go to state 348 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 case_expr go to state 124 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 229 332 comp_expr : operand EQUALS.operand STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 206 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 operand go to state 349 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 case_expr go to state 124 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 230 333 comp_expr : operand NOTEQUALS.operand STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 206 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 operand go to state 350 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 case_expr go to state 124 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 231 334 comp_expr : operand '<'.operand STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 206 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 operand go to state 351 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 case_expr go to state 124 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 232 335 comp_expr : operand '>'.operand STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 206 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 operand go to state 352 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 case_expr go to state 124 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 233 336 comp_expr : operand LESSEQ.operand STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 206 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 operand go to state 353 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 case_expr go to state 124 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 234 337 comp_expr : operand GREATEREQ.operand STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 206 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 operand go to state 354 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 case_expr go to state 124 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 235 305 binary_expr : operand '+'.operand STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 206 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 operand go to state 355 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 case_expr go to state 124 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 236 304 binary_expr : operand '-'.operand STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 206 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 operand go to state 356 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 case_expr go to state 124 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 237 307 binary_expr : operand '*'.operand STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 206 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 operand go to state 357 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 case_expr go to state 124 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 238 306 binary_expr : operand '/'.operand STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 206 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 operand go to state 358 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 case_expr go to state 124 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 239 308 binary_expr : operand '%'.operand STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 206 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 operand go to state 359 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 case_expr go to state 124 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 240 309 binary_expr : operand '^'.operand STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 206 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 operand go to state 360 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 case_expr go to state 124 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 241 353 array_index : operand '['.int_literal ']' INTVAL shift, and go to state 101 int_literal go to state 361 State 242 31 cmd_detach : DETACH DATABASE schema_name . $default reduce using rule 31(cmd_detach) State 243 18 cmd_release : RELEASE SAVEPOINT savepoint_name. $default reduce using rule 18(cmd_release) State 244 58 vacuum_statement : VACUUM opt_schema_name INTO.file_path STRING shift, and go to state 98 file_path go to state 362 string_literal go to state 363 State 245 3 statement_list : statement_list ';' statement . $default reduce using rule 3(statement_list) State 246 88 opt_hints : WITH HINT.'(' hint_list ')' '(' shift, and go to state 364 State 247 187 insert_statement : insert_type INTO table_name.opt_column_list VALUES super_list opt_upsert_clause 188 | insert_type INTO table_name.opt_column_list select_no_paren opt_upsert_clause '(' shift, and go to state 365 $default reduce using rule 195(opt_column_list) opt_column_list go to state 366 State 248 264 opt_top : TOP.int_literal INTVAL shift, and go to state 101 int_literal go to state 367 State 249 215 select_clause : SELECT opt_top.opt_distinct select_list opt_from_clause opt_where opt_group 216 | SELECT opt_top.opt_distinct select_list opt_from_clause opt_where opt_group window_clause DISTINCT shift, and go to state 306 $default reduce using rule 245(opt_distinct) opt_distinct go to state 368 State 250 204 select_with_paren : '(' select_with_paren.')' ')' shift, and go to state 369 State 251 203 select_with_paren : '(' select_no_paren.')' ')' shift, and go to state 370 State 252 211 set_type : INTERSECT . $default reduce using rule 211(set_type) State 253 212 set_type : EXCEPT. $default reduce using rule 212(set_type) State 254 210 set_type : UNION. $default reduce using rule 210(set_type) State 255 202 select_statement : opt_with_clause select_with_paren set_operator.select_paren_or_clause opt_order opt_limit SELECT shift, and go to state 156 '(' shift, and go to state 157 select_with_paren go to state 371 select_paren_or_clause go to state 372 select_clause go to state 373 State 256 209 set_operator : set_type.opt_all ALL shift, and go to state 374 $default reduce using rule 214(opt_all) opt_all go to state 375 State 257 256 opt_order : ORDER.BY order_list BY shift, and go to state 376 State 258 208 select_no_paren : select_clause set_operator.select_paren_or_clause opt_order opt_limit SELECT shift, and go to state 156 '(' shift, and go to state 157 select_with_paren go to state 371 select_paren_or_clause go to state 377 select_clause go to state 373 State 259 207 select_no_paren : select_clause opt_order.opt_limit OFFSET shift, and go to state 378 LIMIT shift, and go to state 379 $default reduce using rule 271(opt_limit) opt_limit go to state 380 State 260 392 table_name : IDENTIFIER '.' IDENTIFIER . $default reduce using rule 392(table_name) State 261 97 execute_statement : EXECUTE IDENTIFIER '(' opt_literal_list.')' ')' shift, and go to state 381 State 262 274 opt_literal_list : literal_list .277 literal_list : literal_list.',' literal ',' shift, and go to state 382 $default reduce using rule 274(opt_literal_list) State 263 276 literal_list : literal . $default reduce using rule 276(literal_list) State 264 95 prepare_target_query : STRING. $default reduce using rule 95(prepare_target_query) State 265 94 prepare_statement : PREPARE IDENTIFIER FROM prepare_target_query. $default reduce using rule 94(prepare_statement) State 266 114 create_statement : CREATE VIRTUAL TABLE opt_not_exists.table_name USING module_name 115 | CREATE VIRTUAL TABLE opt_not_exists.table_name USING module_name '(' column_def_commalist ')' IDENTIFIER shift, and go to state 58 table_name go to state 383 State 267 144 opt_not_exists : IF NOT.EXISTS EXISTS shift, and go to state 384 State 268 109 create_statement : CREATE TABLE opt_not_exists table_name.FROM TBL FILE file_path 110 | CREATE TABLE opt_not_exists table_name.'(' column_def_commalist ')' 111 | CREATE TABLE opt_not_exists table_name.AS select_statement FROM shift, and go to state 385 AS shift, and go to state 386 '(' shift, and go to state 387 State 269 112 create_statement : CREATE VIEW opt_not_exists table_name.opt_column_list AS select_statement '(' shift, and go to state 365 $default reduce using rule 195(opt_column_list) opt_column_list go to state 388 State 270 113 create_statement : CREATE opt_unique INDEX opt_not_exists.index_name ON table_name '(' ident_commalist ')' opt_where IDENTIFIER shift, and go to state 389 index_name go to state 390 State 271 116 create_statement : CREATE trigger_declare BEGIN trigger_cmd_list.END 138 trigger_cmd_list : trigger_cmd_list.trigger_cmd ';' DELETE shift, and go to state 8 INSERT shift, and go to state 10 UPDATE shift, and go to state 11 WITH shift, and go to state 15 END shift, and go to state 391 REPLACE shift, and go to state 19 $default reduce using rule 397(opt_with_clause) trigger_cmd go to state 392 delete_statement go to state 273 insert_statement go to state 274 insert_type go to state 52 update_statement go to state 275 select_statement go to state 276 opt_with_clause go to state 55 with_clause go to state 56 State 272 137 trigger_cmd_list : trigger_cmd.';' ';' shift, and go to state 393 State 273 142 trigger_cmd : delete_statement . $default reduce using rule 142(trigger_cmd) State 274 141 trigger_cmd : insert_statement. $default reduce using rule 141(trigger_cmd) State 275 140 trigger_cmd : update_statement. $default reduce using rule 140(trigger_cmd) State 276 139 trigger_cmd : select_statement. $default reduce using rule 139(trigger_cmd) State 277 120 trigger_declare : opt_tmp TRIGGER opt_not_exists.trigger_name opt_trigger_time trigger_event ON table_name opt_for_each opt_when IDENTIFIER shift, and go to state 394 trigger_name go to state 395 State 278 250 opt_where : WHERE.expr STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXISTS shift, and go to state 102 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 106 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 CAST shift, and go to state 111 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 expr go to state 396 operand go to state 117 cast_expr go to state 118 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 logic_expr go to state 122 in_expr go to state 123 case_expr go to state 124 exists_expr go to state 125 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 between_expr go to state 131 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 279 185 delete_statement : DELETE FROM table_name opt_where . $default reduce using rule 185(delete_statement) State 280 98 import_statement : IMPORT FROM import_file_type FILE.file_path INTO table_name STRING shift, and go to state 98 file_path go to state 397 string_literal go to state 363 State 281 199 update_clause : IDENTIFIER.'=' expr '=' shift, and go to state 398 State 282 196 update_statement : UPDATE table_ref_name_no_alias SET update_clause_commalist .opt_where 198 update_clause_commalist : update_clause_commalist.',' update_clause WHERE shift, and go to state 278 ',' shift, and go to state 399 $default reduce using rule 251(opt_where) opt_where go to state 400 State 283 197 update_clause_commalist : update_clause . $default reduce using rule 197(update_clause_commalist) State 284 104 alter_statement : ALTER TABLE table_name RENAME.TO table_name 105 | ALTER TABLE table_name RENAME.opt_column column_name TO column_name COLUMN shift, and go to state 401 TO shift, and go to state 402 $default reduce using rule 108(opt_column) opt_column go to state 403 State 285 106 alter_statement : ALTER TABLE table_name ADD.opt_column column_def COLUMN shift, and go to state 401 $default reduce using rule 108(opt_column) opt_column go to state 404 State 286 183 opt_exists : IF EXISTS . $default reduce using rule 183(opt_exists) State 287 178 drop_statement : DROP TABLE opt_exists table_name. $default reduce using rule 178(drop_statement) State 288 179 drop_statement : DROP VIEW opt_exists table_name. $default reduce using rule 179(drop_statement) State 289 40 schema_name : IDENTIFIER .123 trigger_name : IDENTIFIER. '.' reduce using rule 40(schema_name)$default reduce using rule 123(trigger_name) State 290 181 drop_statement : DROP TRIGGER opt_exists schema_name.'.' trigger_name '.' shift, and go to state 405 State 291 182 drop_statement : DROP TRIGGER opt_exists trigger_name . $default reduce using rule 182(drop_statement) State 292 401 with_description : IDENTIFIER AS select_with_paren. $default reduce using rule 401(with_description) State 293 400 with_description_list : with_description_list ',' with_description. $default reduce using rule 400(with_description_list) State 294 36 pragma_value : IDENTIFIER. $default reduce using rule 36(pragma_value) State 295 39 pragma_value : DEFAULT. $default reduce using rule 39(pragma_value) State 296 38 pragma_value : DELETE. $default reduce using rule 38(pragma_value) State 297 37 pragma_value : ON. $default reduce using rule 37(pragma_value) State 298 22 cmd_pragma : PRAGMA pragma_key '=' pragma_value. $default reduce using rule 22(cmd_pragma) State 299 35 pragma_value : string_literal. $default reduce using rule 35(pragma_value) State 300 34 pragma_value : num_literal. $default reduce using rule 34(pragma_value) State 301 23 cmd_pragma : PRAGMA pragma_key '(' pragma_value.')' ')' shift, and go to state 406 State 302 41 pragma_name : IDENTIFIER . $default reduce using rule 41(pragma_name) State 303 33 pragma_key : schema_name '.' pragma_name. $default reduce using rule 33(pragma_key) State 304 56 opt_to_savepoint : TO SAVEPOINT.savepoint_name IDENTIFIER shift, and go to state 143 savepoint_name go to state 407 State 305 55 opt_to_savepoint : TO savepoint_name . $default reduce using rule 55(opt_to_savepoint) State 306 244 opt_distinct : DISTINCT. $default reduce using rule 244(opt_distinct) State 307 338 function_expr : IDENTIFIER '(' ')'.opt_filter_clause opt_over_clause FILTER shift, and go to state 408 $default reduce using rule 344(opt_filter_clause) opt_filter_clause go to state 409 State 308 339 function_expr : IDENTIFIER '(' opt_distinct.expr_list ')' opt_filter_clause opt_over_clause STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXISTS shift, and go to state 102 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 106 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 CAST shift, and go to state 111 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 expr_list go to state 410 expr_alias go to state 327 expr go to state 328 operand go to state 117 cast_expr go to state 118 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 logic_expr go to state 122 in_expr go to state 123 case_expr go to state 124 exists_expr go to state 125 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 between_expr go to state 131 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 309 356 column_name : IDENTIFIER '.' IDENTIFIER . $default reduce using rule 356(column_name) State 310 358 column_name : IDENTIFIER '.' '*'. $default reduce using rule 358(column_name) State 311 329 exists_expr : EXISTS '(' select_no_paren.')' ')' shift, and go to state 411 State 312 346 datetime_field : SECOND . $default reduce using rule 346(datetime_field) State 313 347 datetime_field : MINUTE. $default reduce using rule 347(datetime_field) State 314 348 datetime_field : HOUR. $default reduce using rule 348(datetime_field) State 315 349 datetime_field : DAY. $default reduce using rule 349(datetime_field) State 316 350 datetime_field : MONTH. $default reduce using rule 350(datetime_field) State 317 351 datetime_field : YEAR. $default reduce using rule 351(datetime_field) State 318 345 extract_expr : EXTRACT '(' datetime_field.FROM expr ')' FROM shift, and go to state 412 State 319 317 logic_expr : expr.AND expr 318 | expr.OR expr 327 case_list : WHEN expr.THEN expr THEN shift, and go to state 413 AND shift, and go to state 214 OR shift, and go to state 216 State 320 323 case_expr : CASE expr case_list.END 324 | CASE expr case_list.ELSE expr END 328 case_list : case_list.WHEN expr THEN expr ELSE shift, and go to state 414 WHEN shift, and go to state 322 END shift, and go to state 415 State 321 326 case_expr : CASE case_list ELSE.expr END STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXISTS shift, and go to state 102 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 106 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 CAST shift, and go to state 111 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 expr go to state 416 operand go to state 117 cast_expr go to state 118 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 logic_expr go to state 122 in_expr go to state 123 case_expr go to state 124 exists_expr go to state 125 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 between_expr go to state 131 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 322 328 case_list : case_list WHEN.expr THEN expr STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXISTS shift, and go to state 102 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 106 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 CAST shift, and go to state 111 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 expr go to state 417 operand go to state 117 cast_expr go to state 118 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 logic_expr go to state 122 in_expr go to state 123 case_expr go to state 124 exists_expr go to state 125 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 between_expr go to state 131 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 323 325 case_expr : CASE case_list END . $default reduce using rule 325(case_expr) State 324 330 exists_expr : NOT EXISTS '('.select_no_paren ')' SELECT shift, and go to state 156 select_no_paren go to state 418 select_clause go to state 160 State 325 311 binary_expr : operand NOT.LIKE operand LIKE shift, and go to state 338 State 326 273 expr_list : expr_list.',' expr_alias 352 array_expr : ARRAY '[' expr_list.']' ']' shift, and go to state 419 ',' shift, and go to state 420 State 327 272 expr_list : expr_alias . $default reduce using rule 272(expr_list) State 328 278 expr_alias : expr.opt_alias 317 logic_expr : expr.AND expr 318 | expr.OR expr AND shift, and go to state 214 AS shift, and go to state 421 OR shift, and go to state 216 $default reduce using rule 395(opt_alias) alias go to state 422 opt_alias go to state 423 State 329 29 cmd_attach : ATTACH DATABASE expr AS.schema_name IDENTIFIER shift, and go to state 140 schema_name go to state 424 State 330 295 cast_expr : CAST '(' expr.AS column_type ')' 317 logic_expr : expr.AND expr 318 | expr.OR expr AND shift, and go to state 214 AS shift, and go to state 425 OR shift, and go to state 216 State 331 294 operand : '(' select_no_paren ')'. $default reduce using rule 294(operand) State 332 285 operand : '(' expr ')'. $default reduce using rule 285(operand) State 333 317 logic_expr : expr.AND expr 317 | expr AND expr .318 | expr.OR expr $default reduce using rule 317(logic_expr) State 334 28 cmd_attach : ATTACH expr AS schema_name . $default reduce using rule 28(cmd_attach) State 335 317 logic_expr : expr.AND expr 318 | expr.OR expr 318 | expr OR expr. AND shift, and go to state 214 $default reduce using rule 318(logic_expr) State 336 300 unary_expr : operand.ISNULL 301 | operand.IS NULL 302 | operand.IS NOT NULL 304 binary_expr : operand.'-' operand 305 | operand.'+' operand 306 | operand.'/' operand 307 | operand.'*' operand 308 | operand.'%' operand 309 | operand.'^' operand 310 | operand.LIKE operand 311 | operand.NOT LIKE operand 312 | operand.ILIKE operand 313 | operand.CONCAT operand 314 | operand.GLOB operand 315 | operand.MATCH operand 316 | operand.REGEX operand 331 comp_expr : operand.'=' operand 332 | operand.EQUALS operand 333 | operand.NOTEQUALS operand 334 | operand.'<' operand 335 | operand.'>' operand 336 | operand.LESSEQ operand 337 | operand.GREATEREQ operand 353 array_index : operand.'[' int_literal ']' 354 between_expr : operand BETWEEN operand.AND operand ISNULL shift, and go to state 218 LIKE shift, and go to state 219 AND shift, and go to state 426 NOT shift, and go to state 325 IS shift, and go to state 222 CONCAT shift, and go to state 223 ILIKE shift, and go to state 224 GLOB shift, and go to state 225 MATCH shift, and go to state 226 REGEX shift, and go to state 227 '=' shift, and go to state 228 EQUALS shift, and go to state 229 NOTEQUALS shift, and go to state 230 '<' shift, and go to state 231 '>' shift, and go to state 232 LESSEQ shift, and go to state 233 GREATEREQ shift, and go to state 234 '+' shift, and go to state 235 '-' shift, and go to state 236 '*' shift, and go to state 237 '/' shift, and go to state 238 '%' shift, and go to state 239 '^' shift, and go to state 240 '[' shift, and go to state 241 State 337 300 unary_expr : operand.ISNULL 301 | operand.IS NULL 302 | operand.IS NOT NULL 304 binary_expr : operand.'-' operand 305 | operand.'+' operand 306 | operand.'/' operand 307 | operand.'*' operand 308 | operand.'%' operand 309 | operand.'^' operand 310 | operand.LIKE operand 310 | operand LIKE operand .311 | operand.NOT LIKE operand 312 | operand.ILIKE operand 313 | operand.CONCAT operand 314 | operand.GLOB operand 315 | operand.MATCH operand 316 | operand.REGEX operand 331 comp_expr : operand.'=' operand 332 | operand.EQUALS operand 333 | operand.NOTEQUALS operand 334 | operand.'<' operand 335 | operand.'>' operand 336 | operand.LESSEQ operand 337 | operand.GREATEREQ operand 353 array_index : operand.'[' int_literal ']' ISNULL shift, and go to state 218 IS shift, and go to state 222 CONCAT shift, and go to state 223 '<' shift, and go to state 231 '>' shift, and go to state 232 LESSEQ shift, and go to state 233 GREATEREQ shift, and go to state 234 '+' shift, and go to state 235 '-' shift, and go to state 236 '*' shift, and go to state 237 '/' shift, and go to state 238 '%' shift, and go to state 239 '^' shift, and go to state 240 '[' shift, and go to state 241 LIKE error(nonassociative) ILIKE error(nonassociative) GLOB error(nonassociative) MATCH error(nonassociative) REGEX error(nonassociative) '=' error(nonassociative) EQUALS error(nonassociative) NOTEQUALS error(nonassociative) $default reduce using rule 310(binary_expr) State 338 311 binary_expr : operand NOT LIKE.operand STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 206 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 operand go to state 427 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 case_expr go to state 124 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 339 320 in_expr : operand NOT IN.'(' expr_list ')' 322 | operand NOT IN.'(' select_no_paren ')' '(' shift, and go to state 428 State 340 319 in_expr : operand IN '('.expr_list ')' 321 | operand IN '('.select_no_paren ')' STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXISTS shift, and go to state 102 EXTRACT shift, and go to state 103 SELECT shift, and go to state 156 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 106 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 CAST shift, and go to state 111 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 select_no_paren go to state 429 select_clause go to state 160 expr_list go to state 430 expr_alias go to state 327 expr go to state 328 operand go to state 117 cast_expr go to state 118 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 logic_expr go to state 122 in_expr go to state 123 case_expr go to state 124 exists_expr go to state 125 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 between_expr go to state 131 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 341 301 unary_expr : operand IS NULL . $default reduce using rule 301(unary_expr) State 342 302 unary_expr : operand IS NOT.NULL NULL shift, and go to state 431 State 343 300 unary_expr : operand.ISNULL 301 | operand.IS NULL 302 | operand.IS NOT NULL 304 binary_expr : operand.'-' operand 305 | operand.'+' operand 306 | operand.'/' operand 307 | operand.'*' operand 308 | operand.'%' operand 309 | operand.'^' operand 310 | operand.LIKE operand 311 | operand.NOT LIKE operand 312 | operand.ILIKE operand 313 | operand.CONCAT operand 313 | operand CONCAT operand .314 | operand.GLOB operand 315 | operand.MATCH operand 316 | operand.REGEX operand 331 comp_expr : operand.'=' operand 332 | operand.EQUALS operand 333 | operand.NOTEQUALS operand 334 | operand.'<' operand 335 | operand.'>' operand 336 | operand.LESSEQ operand 337 | operand.GREATEREQ operand 353 array_index : operand.'[' int_literal ']' '[' shift, and go to state 241 $default reduce using rule 313(binary_expr) State 344 300 unary_expr : operand.ISNULL 301 | operand.IS NULL 302 | operand.IS NOT NULL 304 binary_expr : operand.'-' operand 305 | operand.'+' operand 306 | operand.'/' operand 307 | operand.'*' operand 308 | operand.'%' operand 309 | operand.'^' operand 310 | operand.LIKE operand 311 | operand.NOT LIKE operand 312 | operand.ILIKE operand 312 | operand ILIKE operand .313 | operand.CONCAT operand 314 | operand.GLOB operand 315 | operand.MATCH operand 316 | operand.REGEX operand 331 comp_expr : operand.'=' operand 332 | operand.EQUALS operand 333 | operand.NOTEQUALS operand 334 | operand.'<' operand 335 | operand.'>' operand 336 | operand.LESSEQ operand 337 | operand.GREATEREQ operand 353 array_index : operand.'[' int_literal ']' ISNULL shift, and go to state 218 IS shift, and go to state 222 CONCAT shift, and go to state 223 '<' shift, and go to state 231 '>' shift, and go to state 232 LESSEQ shift, and go to state 233 GREATEREQ shift, and go to state 234 '+' shift, and go to state 235 '-' shift, and go to state 236 '*' shift, and go to state 237 '/' shift, and go to state 238 '%' shift, and go to state 239 '^' shift, and go to state 240 '[' shift, and go to state 241 LIKE error(nonassociative) ILIKE error(nonassociative) GLOB error(nonassociative) MATCH error(nonassociative) REGEX error(nonassociative) '=' error(nonassociative) EQUALS error(nonassociative) NOTEQUALS error(nonassociative) $default reduce using rule 312(binary_expr) State 345 300 unary_expr : operand.ISNULL 301 | operand.IS NULL 302 | operand.IS NOT NULL 304 binary_expr : operand.'-' operand 305 | operand.'+' operand 306 | operand.'/' operand 307 | operand.'*' operand 308 | operand.'%' operand 309 | operand.'^' operand 310 | operand.LIKE operand 311 | operand.NOT LIKE operand 312 | operand.ILIKE operand 313 | operand.CONCAT operand 314 | operand.GLOB operand 314 | operand GLOB operand .315 | operand.MATCH operand 316 | operand.REGEX operand 331 comp_expr : operand.'=' operand 332 | operand.EQUALS operand 333 | operand.NOTEQUALS operand 334 | operand.'<' operand 335 | operand.'>' operand 336 | operand.LESSEQ operand 337 | operand.GREATEREQ operand 353 array_index : operand.'[' int_literal ']' ISNULL shift, and go to state 218 IS shift, and go to state 222 CONCAT shift, and go to state 223 '<' shift, and go to state 231 '>' shift, and go to state 232 LESSEQ shift, and go to state 233 GREATEREQ shift, and go to state 234 '+' shift, and go to state 235 '-' shift, and go to state 236 '*' shift, and go to state 237 '/' shift, and go to state 238 '%' shift, and go to state 239 '^' shift, and go to state 240 '[' shift, and go to state 241 LIKE error(nonassociative) ILIKE error(nonassociative) GLOB error(nonassociative) MATCH error(nonassociative) REGEX error(nonassociative) '=' error(nonassociative) EQUALS error(nonassociative) NOTEQUALS error(nonassociative) $default reduce using rule 314(binary_expr) State 346 300 unary_expr : operand.ISNULL 301 | operand.IS NULL 302 | operand.IS NOT NULL 304 binary_expr : operand.'-' operand 305 | operand.'+' operand 306 | operand.'/' operand 307 | operand.'*' operand 308 | operand.'%' operand 309 | operand.'^' operand 310 | operand.LIKE operand 311 | operand.NOT LIKE operand 312 | operand.ILIKE operand 313 | operand.CONCAT operand 314 | operand.GLOB operand 315 | operand.MATCH operand 315 | operand MATCH operand .316 | operand.REGEX operand 331 comp_expr : operand.'=' operand 332 | operand.EQUALS operand 333 | operand.NOTEQUALS operand 334 | operand.'<' operand 335 | operand.'>' operand 336 | operand.LESSEQ operand 337 | operand.GREATEREQ operand 353 array_index : operand.'[' int_literal ']' ISNULL shift, and go to state 218 IS shift, and go to state 222 CONCAT shift, and go to state 223 '<' shift, and go to state 231 '>' shift, and go to state 232 LESSEQ shift, and go to state 233 GREATEREQ shift, and go to state 234 '+' shift, and go to state 235 '-' shift, and go to state 236 '*' shift, and go to state 237 '/' shift, and go to state 238 '%' shift, and go to state 239 '^' shift, and go to state 240 '[' shift, and go to state 241 LIKE error(nonassociative) ILIKE error(nonassociative) GLOB error(nonassociative) MATCH error(nonassociative) REGEX error(nonassociative) '=' error(nonassociative) EQUALS error(nonassociative) NOTEQUALS error(nonassociative) $default reduce using rule 315(binary_expr) State 347 300 unary_expr : operand.ISNULL 301 | operand.IS NULL 302 | operand.IS NOT NULL 304 binary_expr : operand.'-' operand 305 | operand.'+' operand 306 | operand.'/' operand 307 | operand.'*' operand 308 | operand.'%' operand 309 | operand.'^' operand 310 | operand.LIKE operand 311 | operand.NOT LIKE operand 312 | operand.ILIKE operand 313 | operand.CONCAT operand 314 | operand.GLOB operand 315 | operand.MATCH operand 316 | operand.REGEX operand 316 | operand REGEX operand .331 comp_expr : operand.'=' operand 332 | operand.EQUALS operand 333 | operand.NOTEQUALS operand 334 | operand.'<' operand 335 | operand.'>' operand 336 | operand.LESSEQ operand 337 | operand.GREATEREQ operand 353 array_index : operand.'[' int_literal ']' ISNULL shift, and go to state 218 IS shift, and go to state 222 CONCAT shift, and go to state 223 '<' shift, and go to state 231 '>' shift, and go to state 232 LESSEQ shift, and go to state 233 GREATEREQ shift, and go to state 234 '+' shift, and go to state 235 '-' shift, and go to state 236 '*' shift, and go to state 237 '/' shift, and go to state 238 '%' shift, and go to state 239 '^' shift, and go to state 240 '[' shift, and go to state 241 LIKE error(nonassociative) ILIKE error(nonassociative) GLOB error(nonassociative) MATCH error(nonassociative) REGEX error(nonassociative) '=' error(nonassociative) EQUALS error(nonassociative) NOTEQUALS error(nonassociative) $default reduce using rule 316(binary_expr) State 348 300 unary_expr : operand.ISNULL 301 | operand.IS NULL 302 | operand.IS NOT NULL 304 binary_expr : operand.'-' operand 305 | operand.'+' operand 306 | operand.'/' operand 307 | operand.'*' operand 308 | operand.'%' operand 309 | operand.'^' operand 310 | operand.LIKE operand 311 | operand.NOT LIKE operand 312 | operand.ILIKE operand 313 | operand.CONCAT operand 314 | operand.GLOB operand 315 | operand.MATCH operand 316 | operand.REGEX operand 331 comp_expr : operand.'=' operand 331 | operand '=' operand .332 | operand.EQUALS operand 333 | operand.NOTEQUALS operand 334 | operand.'<' operand 335 | operand.'>' operand 336 | operand.LESSEQ operand 337 | operand.GREATEREQ operand 353 array_index : operand.'[' int_literal ']' ISNULL shift, and go to state 218 IS shift, and go to state 222 CONCAT shift, and go to state 223 '<' shift, and go to state 231 '>' shift, and go to state 232 LESSEQ shift, and go to state 233 GREATEREQ shift, and go to state 234 '+' shift, and go to state 235 '-' shift, and go to state 236 '*' shift, and go to state 237 '/' shift, and go to state 238 '%' shift, and go to state 239 '^' shift, and go to state 240 '[' shift, and go to state 241 LIKE error(nonassociative) ILIKE error(nonassociative) GLOB error(nonassociative) MATCH error(nonassociative) REGEX error(nonassociative) '=' error(nonassociative) EQUALS error(nonassociative) NOTEQUALS error(nonassociative) $default reduce using rule 331(comp_expr) State 349 300 unary_expr : operand.ISNULL 301 | operand.IS NULL 302 | operand.IS NOT NULL 304 binary_expr : operand.'-' operand 305 | operand.'+' operand 306 | operand.'/' operand 307 | operand.'*' operand 308 | operand.'%' operand 309 | operand.'^' operand 310 | operand.LIKE operand 311 | operand.NOT LIKE operand 312 | operand.ILIKE operand 313 | operand.CONCAT operand 314 | operand.GLOB operand 315 | operand.MATCH operand 316 | operand.REGEX operand 331 comp_expr : operand.'=' operand 332 | operand.EQUALS operand 332 | operand EQUALS operand .333 | operand.NOTEQUALS operand 334 | operand.'<' operand 335 | operand.'>' operand 336 | operand.LESSEQ operand 337 | operand.GREATEREQ operand 353 array_index : operand.'[' int_literal ']' ISNULL shift, and go to state 218 IS shift, and go to state 222 CONCAT shift, and go to state 223 '<' shift, and go to state 231 '>' shift, and go to state 232 LESSEQ shift, and go to state 233 GREATEREQ shift, and go to state 234 '+' shift, and go to state 235 '-' shift, and go to state 236 '*' shift, and go to state 237 '/' shift, and go to state 238 '%' shift, and go to state 239 '^' shift, and go to state 240 '[' shift, and go to state 241 LIKE error(nonassociative) ILIKE error(nonassociative) GLOB error(nonassociative) MATCH error(nonassociative) REGEX error(nonassociative) '=' error(nonassociative) EQUALS error(nonassociative) NOTEQUALS error(nonassociative) $default reduce using rule 332(comp_expr) State 350 300 unary_expr : operand.ISNULL 301 | operand.IS NULL 302 | operand.IS NOT NULL 304 binary_expr : operand.'-' operand 305 | operand.'+' operand 306 | operand.'/' operand 307 | operand.'*' operand 308 | operand.'%' operand 309 | operand.'^' operand 310 | operand.LIKE operand 311 | operand.NOT LIKE operand 312 | operand.ILIKE operand 313 | operand.CONCAT operand 314 | operand.GLOB operand 315 | operand.MATCH operand 316 | operand.REGEX operand 331 comp_expr : operand.'=' operand 332 | operand.EQUALS operand 333 | operand.NOTEQUALS operand 333 | operand NOTEQUALS operand .334 | operand.'<' operand 335 | operand.'>' operand 336 | operand.LESSEQ operand 337 | operand.GREATEREQ operand 353 array_index : operand.'[' int_literal ']' ISNULL shift, and go to state 218 IS shift, and go to state 222 CONCAT shift, and go to state 223 '<' shift, and go to state 231 '>' shift, and go to state 232 LESSEQ shift, and go to state 233 GREATEREQ shift, and go to state 234 '+' shift, and go to state 235 '-' shift, and go to state 236 '*' shift, and go to state 237 '/' shift, and go to state 238 '%' shift, and go to state 239 '^' shift, and go to state 240 '[' shift, and go to state 241 LIKE error(nonassociative) ILIKE error(nonassociative) GLOB error(nonassociative) MATCH error(nonassociative) REGEX error(nonassociative) '=' error(nonassociative) EQUALS error(nonassociative) NOTEQUALS error(nonassociative) $default reduce using rule 333(comp_expr) State 351 300 unary_expr : operand.ISNULL 301 | operand.IS NULL 302 | operand.IS NOT NULL 304 binary_expr : operand.'-' operand 305 | operand.'+' operand 306 | operand.'/' operand 307 | operand.'*' operand 308 | operand.'%' operand 309 | operand.'^' operand 310 | operand.LIKE operand 311 | operand.NOT LIKE operand 312 | operand.ILIKE operand 313 | operand.CONCAT operand 314 | operand.GLOB operand 315 | operand.MATCH operand 316 | operand.REGEX operand 331 comp_expr : operand.'=' operand 332 | operand.EQUALS operand 333 | operand.NOTEQUALS operand 334 | operand.'<' operand 334 | operand '<' operand .335 | operand.'>' operand 336 | operand.LESSEQ operand 337 | operand.GREATEREQ operand 353 array_index : operand.'[' int_literal ']' ISNULL shift, and go to state 218 IS shift, and go to state 222 CONCAT shift, and go to state 223 '+' shift, and go to state 235 '-' shift, and go to state 236 '*' shift, and go to state 237 '/' shift, and go to state 238 '%' shift, and go to state 239 '^' shift, and go to state 240 '[' shift, and go to state 241 '<' error(nonassociative) '>' error(nonassociative) LESSEQ error(nonassociative) GREATEREQ error(nonassociative) $default reduce using rule 334(comp_expr) State 352 300 unary_expr : operand.ISNULL 301 | operand.IS NULL 302 | operand.IS NOT NULL 304 binary_expr : operand.'-' operand 305 | operand.'+' operand 306 | operand.'/' operand 307 | operand.'*' operand 308 | operand.'%' operand 309 | operand.'^' operand 310 | operand.LIKE operand 311 | operand.NOT LIKE operand 312 | operand.ILIKE operand 313 | operand.CONCAT operand 314 | operand.GLOB operand 315 | operand.MATCH operand 316 | operand.REGEX operand 331 comp_expr : operand.'=' operand 332 | operand.EQUALS operand 333 | operand.NOTEQUALS operand 334 | operand.'<' operand 335 | operand.'>' operand 335 | operand '>' operand .336 | operand.LESSEQ operand 337 | operand.GREATEREQ operand 353 array_index : operand.'[' int_literal ']' ISNULL shift, and go to state 218 IS shift, and go to state 222 CONCAT shift, and go to state 223 '+' shift, and go to state 235 '-' shift, and go to state 236 '*' shift, and go to state 237 '/' shift, and go to state 238 '%' shift, and go to state 239 '^' shift, and go to state 240 '[' shift, and go to state 241 '<' error(nonassociative) '>' error(nonassociative) LESSEQ error(nonassociative) GREATEREQ error(nonassociative) $default reduce using rule 335(comp_expr) State 353 300 unary_expr : operand.ISNULL 301 | operand.IS NULL 302 | operand.IS NOT NULL 304 binary_expr : operand.'-' operand 305 | operand.'+' operand 306 | operand.'/' operand 307 | operand.'*' operand 308 | operand.'%' operand 309 | operand.'^' operand 310 | operand.LIKE operand 311 | operand.NOT LIKE operand 312 | operand.ILIKE operand 313 | operand.CONCAT operand 314 | operand.GLOB operand 315 | operand.MATCH operand 316 | operand.REGEX operand 331 comp_expr : operand.'=' operand 332 | operand.EQUALS operand 333 | operand.NOTEQUALS operand 334 | operand.'<' operand 335 | operand.'>' operand 336 | operand.LESSEQ operand 336 | operand LESSEQ operand .337 | operand.GREATEREQ operand 353 array_index : operand.'[' int_literal ']' ISNULL shift, and go to state 218 IS shift, and go to state 222 CONCAT shift, and go to state 223 '+' shift, and go to state 235 '-' shift, and go to state 236 '*' shift, and go to state 237 '/' shift, and go to state 238 '%' shift, and go to state 239 '^' shift, and go to state 240 '[' shift, and go to state 241 '<' error(nonassociative) '>' error(nonassociative) LESSEQ error(nonassociative) GREATEREQ error(nonassociative) $default reduce using rule 336(comp_expr) State 354 300 unary_expr : operand.ISNULL 301 | operand.IS NULL 302 | operand.IS NOT NULL 304 binary_expr : operand.'-' operand 305 | operand.'+' operand 306 | operand.'/' operand 307 | operand.'*' operand 308 | operand.'%' operand 309 | operand.'^' operand 310 | operand.LIKE operand 311 | operand.NOT LIKE operand 312 | operand.ILIKE operand 313 | operand.CONCAT operand 314 | operand.GLOB operand 315 | operand.MATCH operand 316 | operand.REGEX operand 331 comp_expr : operand.'=' operand 332 | operand.EQUALS operand 333 | operand.NOTEQUALS operand 334 | operand.'<' operand 335 | operand.'>' operand 336 | operand.LESSEQ operand 337 | operand.GREATEREQ operand 337 | operand GREATEREQ operand .353 array_index : operand.'[' int_literal ']' ISNULL shift, and go to state 218 IS shift, and go to state 222 CONCAT shift, and go to state 223 '+' shift, and go to state 235 '-' shift, and go to state 236 '*' shift, and go to state 237 '/' shift, and go to state 238 '%' shift, and go to state 239 '^' shift, and go to state 240 '[' shift, and go to state 241 '<' error(nonassociative) '>' error(nonassociative) LESSEQ error(nonassociative) GREATEREQ error(nonassociative) $default reduce using rule 337(comp_expr) State 355 300 unary_expr : operand.ISNULL 301 | operand.IS NULL 302 | operand.IS NOT NULL 304 binary_expr : operand.'-' operand 305 | operand.'+' operand 305 | operand '+' operand .306 | operand.'/' operand 307 | operand.'*' operand 308 | operand.'%' operand 309 | operand.'^' operand 310 | operand.LIKE operand 311 | operand.NOT LIKE operand 312 | operand.ILIKE operand 313 | operand.CONCAT operand 314 | operand.GLOB operand 315 | operand.MATCH operand 316 | operand.REGEX operand 331 comp_expr : operand.'=' operand 332 | operand.EQUALS operand 333 | operand.NOTEQUALS operand 334 | operand.'<' operand 335 | operand.'>' operand 336 | operand.LESSEQ operand 337 | operand.GREATEREQ operand 353 array_index : operand.'[' int_literal ']' CONCAT shift, and go to state 223 '*' shift, and go to state 237 '/' shift, and go to state 238 '%' shift, and go to state 239 '^' shift, and go to state 240 '[' shift, and go to state 241 $default reduce using rule 305(binary_expr) State 356 300 unary_expr : operand.ISNULL 301 | operand.IS NULL 302 | operand.IS NOT NULL 304 binary_expr : operand.'-' operand 304 | operand '-' operand .305 | operand.'+' operand 306 | operand.'/' operand 307 | operand.'*' operand 308 | operand.'%' operand 309 | operand.'^' operand 310 | operand.LIKE operand 311 | operand.NOT LIKE operand 312 | operand.ILIKE operand 313 | operand.CONCAT operand 314 | operand.GLOB operand 315 | operand.MATCH operand 316 | operand.REGEX operand 331 comp_expr : operand.'=' operand 332 | operand.EQUALS operand 333 | operand.NOTEQUALS operand 334 | operand.'<' operand 335 | operand.'>' operand 336 | operand.LESSEQ operand 337 | operand.GREATEREQ operand 353 array_index : operand.'[' int_literal ']' CONCAT shift, and go to state 223 '*' shift, and go to state 237 '/' shift, and go to state 238 '%' shift, and go to state 239 '^' shift, and go to state 240 '[' shift, and go to state 241 $default reduce using rule 304(binary_expr) State 357 300 unary_expr : operand.ISNULL 301 | operand.IS NULL 302 | operand.IS NOT NULL 304 binary_expr : operand.'-' operand 305 | operand.'+' operand 306 | operand.'/' operand 307 | operand.'*' operand 307 | operand '*' operand .308 | operand.'%' operand 309 | operand.'^' operand 310 | operand.LIKE operand 311 | operand.NOT LIKE operand 312 | operand.ILIKE operand 313 | operand.CONCAT operand 314 | operand.GLOB operand 315 | operand.MATCH operand 316 | operand.REGEX operand 331 comp_expr : operand.'=' operand 332 | operand.EQUALS operand 333 | operand.NOTEQUALS operand 334 | operand.'<' operand 335 | operand.'>' operand 336 | operand.LESSEQ operand 337 | operand.GREATEREQ operand 353 array_index : operand.'[' int_literal ']' CONCAT shift, and go to state 223 '^' shift, and go to state 240 '[' shift, and go to state 241 $default reduce using rule 307(binary_expr) State 358 300 unary_expr : operand.ISNULL 301 | operand.IS NULL 302 | operand.IS NOT NULL 304 binary_expr : operand.'-' operand 305 | operand.'+' operand 306 | operand.'/' operand 306 | operand '/' operand .307 | operand.'*' operand 308 | operand.'%' operand 309 | operand.'^' operand 310 | operand.LIKE operand 311 | operand.NOT LIKE operand 312 | operand.ILIKE operand 313 | operand.CONCAT operand 314 | operand.GLOB operand 315 | operand.MATCH operand 316 | operand.REGEX operand 331 comp_expr : operand.'=' operand 332 | operand.EQUALS operand 333 | operand.NOTEQUALS operand 334 | operand.'<' operand 335 | operand.'>' operand 336 | operand.LESSEQ operand 337 | operand.GREATEREQ operand 353 array_index : operand.'[' int_literal ']' CONCAT shift, and go to state 223 '^' shift, and go to state 240 '[' shift, and go to state 241 $default reduce using rule 306(binary_expr) State 359 300 unary_expr : operand.ISNULL 301 | operand.IS NULL 302 | operand.IS NOT NULL 304 binary_expr : operand.'-' operand 305 | operand.'+' operand 306 | operand.'/' operand 307 | operand.'*' operand 308 | operand.'%' operand 308 | operand '%' operand .309 | operand.'^' operand 310 | operand.LIKE operand 311 | operand.NOT LIKE operand 312 | operand.ILIKE operand 313 | operand.CONCAT operand 314 | operand.GLOB operand 315 | operand.MATCH operand 316 | operand.REGEX operand 331 comp_expr : operand.'=' operand 332 | operand.EQUALS operand 333 | operand.NOTEQUALS operand 334 | operand.'<' operand 335 | operand.'>' operand 336 | operand.LESSEQ operand 337 | operand.GREATEREQ operand 353 array_index : operand.'[' int_literal ']' CONCAT shift, and go to state 223 '^' shift, and go to state 240 '[' shift, and go to state 241 $default reduce using rule 308(binary_expr) State 360 300 unary_expr : operand.ISNULL 301 | operand.IS NULL 302 | operand.IS NOT NULL 304 binary_expr : operand.'-' operand 305 | operand.'+' operand 306 | operand.'/' operand 307 | operand.'*' operand 308 | operand.'%' operand 309 | operand.'^' operand 309 | operand '^' operand .310 | operand.LIKE operand 311 | operand.NOT LIKE operand 312 | operand.ILIKE operand 313 | operand.CONCAT operand 314 | operand.GLOB operand 315 | operand.MATCH operand 316 | operand.REGEX operand 331 comp_expr : operand.'=' operand 332 | operand.EQUALS operand 333 | operand.NOTEQUALS operand 334 | operand.'<' operand 335 | operand.'>' operand 336 | operand.LESSEQ operand 337 | operand.GREATEREQ operand 353 array_index : operand.'[' int_literal ']' CONCAT shift, and go to state 223 '[' shift, and go to state 241 $default reduce using rule 309(binary_expr) State 361 353 array_index : operand '[' int_literal.']' ']' shift, and go to state 432 State 362 58 vacuum_statement : VACUUM opt_schema_name INTO file_path . $default reduce using rule 58(vacuum_statement) State 363 100 file_path : string_literal. $default reduce using rule 100(file_path) State 364 88 opt_hints : WITH HINT '('.hint_list ')' IDENTIFIER shift, and go to state 433 hint_list go to state 434 hint go to state 435 State 365 194 opt_column_list : '('.ident_commalist ')' IDENTIFIER shift, and go to state 436 ident_commalist go to state 437 State 366 187 insert_statement : insert_type INTO table_name opt_column_list.VALUES super_list opt_upsert_clause 188 | insert_type INTO table_name opt_column_list.select_no_paren opt_upsert_clause SELECT shift, and go to state 156 VALUES shift, and go to state 438 select_no_paren go to state 439 select_clause go to state 160 State 367 264 opt_top : TOP int_literal . $default reduce using rule 264(opt_top) State 368 215 select_clause : SELECT opt_top opt_distinct.select_list opt_from_clause opt_where opt_group 216 | SELECT opt_top opt_distinct.select_list opt_from_clause opt_where opt_group window_clause STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXISTS shift, and go to state 102 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 106 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 CAST shift, and go to state 111 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 select_list go to state 440 expr_list go to state 441 expr_alias go to state 327 expr go to state 328 operand go to state 117 cast_expr go to state 118 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 logic_expr go to state 122 in_expr go to state 123 case_expr go to state 124 exists_expr go to state 125 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 between_expr go to state 131 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 369 204 select_with_paren : '(' select_with_paren ')'. $default reduce using rule 204(select_with_paren) State 370 203 select_with_paren : '(' select_no_paren ')' . $default reduce using rule 203(select_with_paren) State 371 205 select_paren_or_clause : select_with_paren. $default reduce using rule 205(select_paren_or_clause) State 372 202 select_statement : opt_with_clause select_with_paren set_operator select_paren_or_clause.opt_order opt_limit ORDER shift, and go to state 257 $default reduce using rule 257(opt_order) opt_order go to state 442 State 373 206 select_paren_or_clause : select_clause . $default reduce using rule 206(select_paren_or_clause) State 374 213 opt_all : ALL. $default reduce using rule 213(opt_all) State 375 209 set_operator : set_type opt_all. $default reduce using rule 209(set_operator) State 376 256 opt_order : ORDER BY.order_list STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXISTS shift, and go to state 102 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 106 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 CAST shift, and go to state 111 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 order_list go to state 443 order_desc go to state 444 expr go to state 445 operand go to state 117 cast_expr go to state 118 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 logic_expr go to state 122 in_expr go to state 123 case_expr go to state 124 exists_expr go to state 125 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 between_expr go to state 131 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 377 208 select_no_paren : select_clause set_operator select_paren_or_clause.opt_order opt_limit ORDER shift, and go to state 257 $default reduce using rule 257(opt_order) opt_order go to state 446 State 378 267 opt_limit : OFFSET.expr STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXISTS shift, and go to state 102 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 106 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 CAST shift, and go to state 111 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 expr go to state 447 operand go to state 117 cast_expr go to state 118 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 logic_expr go to state 122 in_expr go to state 123 case_expr go to state 124 exists_expr go to state 125 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 between_expr go to state 131 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 379 266 opt_limit : LIMIT.expr 268 | LIMIT.expr OFFSET expr 269 | LIMIT.ALL 270 | LIMIT.ALL OFFSET expr STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXISTS shift, and go to state 102 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 ALL shift, and go to state 448 NOT shift, and go to state 106 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 CAST shift, and go to state 111 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 expr go to state 449 operand go to state 117 cast_expr go to state 118 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 logic_expr go to state 122 in_expr go to state 123 case_expr go to state 124 exists_expr go to state 125 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 between_expr go to state 131 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 380 207 select_no_paren : select_clause opt_order opt_limit . $default reduce using rule 207(select_no_paren) State 381 97 execute_statement : EXECUTE IDENTIFIER '(' opt_literal_list ')'. $default reduce using rule 97(execute_statement) State 382 277 literal_list : literal_list ','.literal STRING shift, and go to state 98 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 NULL shift, and go to state 105 TRUE shift, and go to state 108 FALSE shift, and go to state 109 '?' shift, and go to state 115 literal go to state 450 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 383 114 create_statement : CREATE VIRTUAL TABLE opt_not_exists table_name.USING module_name 115 | CREATE VIRTUAL TABLE opt_not_exists table_name.USING module_name '(' column_def_commalist ')' USING shift, and go to state 451 State 384 144 opt_not_exists : IF NOT EXISTS . $default reduce using rule 144(opt_not_exists) State 385 109 create_statement : CREATE TABLE opt_not_exists table_name FROM.TBL FILE file_path TBL shift, and go to state 452 State 386 111 create_statement : CREATE TABLE opt_not_exists table_name AS.select_statement WITH shift, and go to state 15 $default reduce using rule 397(opt_with_clause) select_statement go to state 453 opt_with_clause go to state 55 with_clause go to state 56 State 387 110 create_statement : CREATE TABLE opt_not_exists table_name '('.column_def_commalist ')' IDENTIFIER shift, and go to state 454 column_def_commalist go to state 455 column_def go to state 456 State 388 112 create_statement : CREATE VIEW opt_not_exists table_name opt_column_list.AS select_statement AS shift, and go to state 457 State 389 119 index_name : IDENTIFIER . $default reduce using rule 119(index_name) State 390 113 create_statement : CREATE opt_unique INDEX opt_not_exists index_name.ON table_name '(' ident_commalist ')' opt_where ON shift, and go to state 458 State 391 116 create_statement : CREATE trigger_declare BEGIN trigger_cmd_list END . $default reduce using rule 116(create_statement) State 392 138 trigger_cmd_list : trigger_cmd_list trigger_cmd.';' ';' shift, and go to state 459 State 393 137 trigger_cmd_list : trigger_cmd ';' . $default reduce using rule 137(trigger_cmd_list) State 394 123 trigger_name : IDENTIFIER. $default reduce using rule 123(trigger_name) State 395 120 trigger_declare : opt_tmp TRIGGER opt_not_exists trigger_name.opt_trigger_time trigger_event ON table_name opt_for_each opt_when BEFORE shift, and go to state 460 AFTER shift, and go to state 461 INSTEAD shift, and go to state 462 $default reduce using rule 127(opt_trigger_time) opt_trigger_time go to state 463 State 396 250 opt_where : WHERE expr .317 logic_expr : expr.AND expr 318 | expr.OR expr AND shift, and go to state 214 OR shift, and go to state 216 $default reduce using rule 250(opt_where) State 397 98 import_statement : IMPORT FROM import_file_type FILE file_path.INTO table_name INTO shift, and go to state 464 State 398 199 update_clause : IDENTIFIER '='.expr STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXISTS shift, and go to state 102 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 106 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 CAST shift, and go to state 111 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 expr go to state 465 operand go to state 117 cast_expr go to state 118 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 logic_expr go to state 122 in_expr go to state 123 case_expr go to state 124 exists_expr go to state 125 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 between_expr go to state 131 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 399 198 update_clause_commalist : update_clause_commalist ','.update_clause IDENTIFIER shift, and go to state 281 update_clause go to state 466 State 400 196 update_statement : UPDATE table_ref_name_no_alias SET update_clause_commalist opt_where . $default reduce using rule 196(update_statement) State 401 107 opt_column : COLUMN. $default reduce using rule 107(opt_column) State 402 104 alter_statement : ALTER TABLE table_name RENAME TO.table_name IDENTIFIER shift, and go to state 58 table_name go to state 467 State 403 105 alter_statement : ALTER TABLE table_name RENAME opt_column.column_name TO column_name IDENTIFIER shift, and go to state 468 '*' shift, and go to state 113 column_name go to state 469 State 404 106 alter_statement : ALTER TABLE table_name ADD opt_column.column_def IDENTIFIER shift, and go to state 454 column_def go to state 470 State 405 181 drop_statement : DROP TRIGGER opt_exists schema_name '.'.trigger_name IDENTIFIER shift, and go to state 394 trigger_name go to state 471 State 406 23 cmd_pragma : PRAGMA pragma_key '(' pragma_value ')'. $default reduce using rule 23(cmd_pragma) State 407 56 opt_to_savepoint : TO SAVEPOINT savepoint_name . $default reduce using rule 56(opt_to_savepoint) State 408 343 opt_filter_clause : FILTER.'(' WHERE expr ')' '(' shift, and go to state 472 State 409 338 function_expr : IDENTIFIER '(' ')' opt_filter_clause.opt_over_clause OVER shift, and go to state 473 $default reduce using rule 342(opt_over_clause) opt_over_clause go to state 474 State 410 273 expr_list : expr_list .',' expr_alias 339 function_expr : IDENTIFIER '(' opt_distinct expr_list.')' opt_filter_clause opt_over_clause ')' shift, and go to state 475 ',' shift, and go to state 420 State 411 329 exists_expr : EXISTS '(' select_no_paren ')'. $default reduce using rule 329(exists_expr) State 412 345 extract_expr : EXTRACT '(' datetime_field FROM.expr ')' STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXISTS shift, and go to state 102 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 106 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 CAST shift, and go to state 111 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 expr go to state 476 operand go to state 117 cast_expr go to state 118 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 logic_expr go to state 122 in_expr go to state 123 case_expr go to state 124 exists_expr go to state 125 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 between_expr go to state 131 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 413 327 case_list : WHEN expr THEN.expr STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXISTS shift, and go to state 102 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 106 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 CAST shift, and go to state 111 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 expr go to state 477 operand go to state 117 cast_expr go to state 118 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 logic_expr go to state 122 in_expr go to state 123 case_expr go to state 124 exists_expr go to state 125 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 between_expr go to state 131 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 414 324 case_expr : CASE expr case_list ELSE.expr END STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXISTS shift, and go to state 102 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 106 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 CAST shift, and go to state 111 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 expr go to state 478 operand go to state 117 cast_expr go to state 118 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 logic_expr go to state 122 in_expr go to state 123 case_expr go to state 124 exists_expr go to state 125 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 between_expr go to state 131 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 415 323 case_expr : CASE expr case_list END . $default reduce using rule 323(case_expr) State 416 317 logic_expr : expr.AND expr 318 | expr.OR expr 326 case_expr : CASE case_list ELSE expr.END AND shift, and go to state 214 END shift, and go to state 479 OR shift, and go to state 216 State 417 317 logic_expr : expr.AND expr 318 | expr.OR expr 328 case_list : case_list WHEN expr.THEN expr THEN shift, and go to state 480 AND shift, and go to state 214 OR shift, and go to state 216 State 418 330 exists_expr : NOT EXISTS '(' select_no_paren.')' ')' shift, and go to state 481 State 419 352 array_expr : ARRAY '[' expr_list ']'. $default reduce using rule 352(array_expr) State 420 273 expr_list : expr_list ','.expr_alias STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXISTS shift, and go to state 102 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 106 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 CAST shift, and go to state 111 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 expr_alias go to state 482 expr go to state 328 operand go to state 117 cast_expr go to state 118 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 logic_expr go to state 122 in_expr go to state 123 case_expr go to state 124 exists_expr go to state 125 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 between_expr go to state 131 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 421 393 alias : AS.IDENTIFIER IDENTIFIER shift, and go to state 483 State 422 394 opt_alias : alias . $default reduce using rule 394(opt_alias) State 423 278 expr_alias : expr opt_alias. $default reduce using rule 278(expr_alias) State 424 29 cmd_attach : ATTACH DATABASE expr AS schema_name. $default reduce using rule 29(cmd_attach) State 425 295 cast_expr : CAST '(' expr AS.column_type ')' INTEGER shift, and go to state 484 VARCHAR shift, and go to state 485 DOUBLE shift, and go to state 486 FLOAT shift, and go to state 487 CHAR shift, and go to state 488 LONG shift, and go to state 489 TEXT shift, and go to state 490 INT shift, and go to state 491 $default reduce using rule 177(column_type) column_type go to state 492 State 426 354 between_expr : operand BETWEEN operand AND.operand STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 206 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 operand go to state 493 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 case_expr go to state 124 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 427 300 unary_expr : operand.ISNULL 301 | operand.IS NULL 302 | operand.IS NOT NULL 304 binary_expr : operand.'-' operand 305 | operand.'+' operand 306 | operand.'/' operand 307 | operand.'*' operand 308 | operand.'%' operand 309 | operand.'^' operand 310 | operand.LIKE operand 311 | operand.NOT LIKE operand 311 | operand NOT LIKE operand .312 | operand.ILIKE operand 313 | operand.CONCAT operand 314 | operand.GLOB operand 315 | operand.MATCH operand 316 | operand.REGEX operand 331 comp_expr : operand.'=' operand 332 | operand.EQUALS operand 333 | operand.NOTEQUALS operand 334 | operand.'<' operand 335 | operand.'>' operand 336 | operand.LESSEQ operand 337 | operand.GREATEREQ operand 353 array_index : operand.'[' int_literal ']' ISNULL shift, and go to state 218 IS shift, and go to state 222 CONCAT shift, and go to state 223 '<' shift, and go to state 231 '>' shift, and go to state 232 LESSEQ shift, and go to state 233 GREATEREQ shift, and go to state 234 '+' shift, and go to state 235 '-' shift, and go to state 236 '*' shift, and go to state 237 '/' shift, and go to state 238 '%' shift, and go to state 239 '^' shift, and go to state 240 '[' shift, and go to state 241 LIKE error(nonassociative) ILIKE error(nonassociative) GLOB error(nonassociative) MATCH error(nonassociative) REGEX error(nonassociative) '=' error(nonassociative) EQUALS error(nonassociative) NOTEQUALS error(nonassociative) $default reduce using rule 311(binary_expr) State 428 320 in_expr : operand NOT IN '('.expr_list ')' 322 | operand NOT IN '('.select_no_paren ')' STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXISTS shift, and go to state 102 EXTRACT shift, and go to state 103 SELECT shift, and go to state 156 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 106 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 CAST shift, and go to state 111 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 select_no_paren go to state 494 select_clause go to state 160 expr_list go to state 495 expr_alias go to state 327 expr go to state 328 operand go to state 117 cast_expr go to state 118 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 logic_expr go to state 122 in_expr go to state 123 case_expr go to state 124 exists_expr go to state 125 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 between_expr go to state 131 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 429 321 in_expr : operand IN '(' select_no_paren.')' ')' shift, and go to state 496 State 430 273 expr_list : expr_list.',' expr_alias 319 in_expr : operand IN '(' expr_list.')' ')' shift, and go to state 497 ',' shift, and go to state 420 State 431 302 unary_expr : operand IS NOT NULL . $default reduce using rule 302(unary_expr) State 432 353 array_index : operand '[' int_literal ']'. $default reduce using rule 353(array_index) State 433 92 hint : IDENTIFIER .93 | IDENTIFIER.'(' literal_list ')' '(' shift, and go to state 498 $default reduce using rule 92(hint) State 434 88 opt_hints : WITH HINT '(' hint_list.')' 91 hint_list : hint_list.',' hint ')' shift, and go to state 499 ',' shift, and go to state 500 State 435 90 hint_list : hint. $default reduce using rule 90(hint_list) State 436 414 ident_commalist : IDENTIFIER . $default reduce using rule 414(ident_commalist) State 437 194 opt_column_list : '(' ident_commalist.')' 415 ident_commalist : ident_commalist.',' IDENTIFIER ')' shift, and go to state 501 ',' shift, and go to state 502 State 438 187 insert_statement : insert_type INTO table_name opt_column_list VALUES.super_list opt_upsert_clause '(' shift, and go to state 503 super_list go to state 504 State 439 188 insert_statement : insert_type INTO table_name opt_column_list select_no_paren.opt_upsert_clause ON shift, and go to state 505 $default reduce using rule 69(opt_upsert_clause) opt_upsert_clause go to state 506 upsert_clause go to state 507 State 440 215 select_clause : SELECT opt_top opt_distinct select_list.opt_from_clause opt_where opt_group 216 | SELECT opt_top opt_distinct select_list.opt_from_clause opt_where opt_group window_clause FROM shift, and go to state 508 $default reduce using rule 248(opt_from_clause) opt_from_clause go to state 509 from_clause go to state 510 State 441 246 select_list : expr_list .273 expr_list : expr_list.',' expr_alias ',' shift, and go to state 420 $default reduce using rule 246(select_list) State 442 202 select_statement : opt_with_clause select_with_paren set_operator select_paren_or_clause opt_order.opt_limit OFFSET shift, and go to state 378 LIMIT shift, and go to state 379 $default reduce using rule 271(opt_limit) opt_limit go to state 511 State 443 256 opt_order : ORDER BY order_list .259 order_list : order_list.',' order_desc ',' shift, and go to state 512 $default reduce using rule 256(opt_order) State 444 258 order_list : order_desc . $default reduce using rule 258(order_list) State 445 260 order_desc : expr.opt_order_type opt_null 317 logic_expr : expr.AND expr 318 | expr.OR expr DESC shift, and go to state 513 AND shift, and go to state 214 ASC shift, and go to state 514 OR shift, and go to state 216 $default reduce using rule 263(opt_order_type) opt_order_type go to state 515 State 446 208 select_no_paren : select_clause set_operator select_paren_or_clause opt_order.opt_limit OFFSET shift, and go to state 378 LIMIT shift, and go to state 379 $default reduce using rule 271(opt_limit) opt_limit go to state 516 State 447 267 opt_limit : OFFSET expr .317 logic_expr : expr.AND expr 318 | expr.OR expr AND shift, and go to state 214 OR shift, and go to state 216 $default reduce using rule 267(opt_limit) State 448 269 opt_limit : LIMIT ALL .270 | LIMIT ALL.OFFSET expr OFFSET shift, and go to state 517 $default reduce using rule 269(opt_limit) State 449 266 opt_limit : LIMIT expr .268 | LIMIT expr.OFFSET expr 317 logic_expr : expr.AND expr 318 | expr.OR expr OFFSET shift, and go to state 518 AND shift, and go to state 214 OR shift, and go to state 216 $default reduce using rule 266(opt_limit) State 450 277 literal_list : literal_list ',' literal . $default reduce using rule 277(literal_list) State 451 114 create_statement : CREATE VIRTUAL TABLE opt_not_exists table_name USING.module_name 115 | CREATE VIRTUAL TABLE opt_not_exists table_name USING.module_name '(' column_def_commalist ')' IDENTIFIER shift, and go to state 519 module_name go to state 520 State 452 109 create_statement : CREATE TABLE opt_not_exists table_name FROM TBL.FILE file_path FILE shift, and go to state 521 State 453 111 create_statement : CREATE TABLE opt_not_exists table_name AS select_statement . $default reduce using rule 111(create_statement) State 454 148 column_def : IDENTIFIER.column_type opt_column_arglist INTEGER shift, and go to state 484 VARCHAR shift, and go to state 485 DOUBLE shift, and go to state 486 FLOAT shift, and go to state 487 CHAR shift, and go to state 488 LONG shift, and go to state 489 TEXT shift, and go to state 490 INT shift, and go to state 491 $default reduce using rule 177(column_type) column_type go to state 522 State 455 110 create_statement : CREATE TABLE opt_not_exists table_name '(' column_def_commalist .')' 147 column_def_commalist : column_def_commalist.',' column_def ')' shift, and go to state 523 ',' shift, and go to state 524 State 456 146 column_def_commalist : column_def . $default reduce using rule 146(column_def_commalist) State 457 112 create_statement : CREATE VIEW opt_not_exists table_name opt_column_list AS.select_statement WITH shift, and go to state 15 $default reduce using rule 397(opt_with_clause) select_statement go to state 525 opt_with_clause go to state 55 with_clause go to state 56 State 458 113 create_statement : CREATE opt_unique INDEX opt_not_exists index_name ON.table_name '(' ident_commalist ')' opt_where IDENTIFIER shift, and go to state 58 table_name go to state 526 State 459 138 trigger_cmd_list : trigger_cmd_list trigger_cmd ';' . $default reduce using rule 138(trigger_cmd_list) State 460 124 opt_trigger_time : BEFORE. $default reduce using rule 124(opt_trigger_time) State 461 125 opt_trigger_time : AFTER. $default reduce using rule 125(opt_trigger_time) State 462 126 opt_trigger_time : INSTEAD.OF OF shift, and go to state 527 State 463 120 trigger_declare : opt_tmp TRIGGER opt_not_exists trigger_name opt_trigger_time.trigger_event ON table_name opt_for_each opt_when DELETE shift, and go to state 528 INSERT shift, and go to state 529 UPDATE shift, and go to state 530 trigger_event go to state 531 State 464 98 import_statement : IMPORT FROM import_file_type FILE file_path INTO.table_name IDENTIFIER shift, and go to state 58 table_name go to state 532 State 465 199 update_clause : IDENTIFIER '=' expr .317 logic_expr : expr.AND expr 318 | expr.OR expr AND shift, and go to state 214 OR shift, and go to state 216 $default reduce using rule 199(update_clause) State 466 198 update_clause_commalist : update_clause_commalist ',' update_clause . $default reduce using rule 198(update_clause_commalist) State 467 104 alter_statement : ALTER TABLE table_name RENAME TO table_name. $default reduce using rule 104(alter_statement) State 468 355 column_name : IDENTIFIER .356 | IDENTIFIER.'.' IDENTIFIER 358 | IDENTIFIER.'.' '*' '.' shift, and go to state 199 $default reduce using rule 355(column_name) State 469 105 alter_statement : ALTER TABLE table_name RENAME opt_column column_name.TO column_name TO shift, and go to state 533 State 470 106 alter_statement : ALTER TABLE table_name ADD opt_column column_def . $default reduce using rule 106(alter_statement) State 471 181 drop_statement : DROP TRIGGER opt_exists schema_name '.' trigger_name. $default reduce using rule 181(drop_statement) State 472 343 opt_filter_clause : FILTER '('.WHERE expr ')' WHERE shift, and go to state 534 State 473 340 opt_over_clause : OVER.'(' window ')' 341 | OVER.IDENTIFIER IDENTIFIER shift, and go to state 535 '(' shift, and go to state 536 State 474 338 function_expr : IDENTIFIER '(' ')' opt_filter_clause opt_over_clause . $default reduce using rule 338(function_expr) State 475 339 function_expr : IDENTIFIER '(' opt_distinct expr_list ')'.opt_filter_clause opt_over_clause FILTER shift, and go to state 408 $default reduce using rule 344(opt_filter_clause) opt_filter_clause go to state 537 State 476 317 logic_expr : expr.AND expr 318 | expr.OR expr 345 extract_expr : EXTRACT '(' datetime_field FROM expr.')' AND shift, and go to state 214 OR shift, and go to state 216 ')' shift, and go to state 538 State 477 317 logic_expr : expr.AND expr 318 | expr.OR expr 327 case_list : WHEN expr THEN expr. AND shift, and go to state 214 OR shift, and go to state 216 $default reduce using rule 327(case_list) State 478 317 logic_expr : expr.AND expr 318 | expr.OR expr 324 case_expr : CASE expr case_list ELSE expr.END AND shift, and go to state 214 END shift, and go to state 539 OR shift, and go to state 216 State 479 326 case_expr : CASE case_list ELSE expr END . $default reduce using rule 326(case_expr) State 480 328 case_list : case_list WHEN expr THEN.expr STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXISTS shift, and go to state 102 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 106 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 CAST shift, and go to state 111 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 expr go to state 540 operand go to state 117 cast_expr go to state 118 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 logic_expr go to state 122 in_expr go to state 123 case_expr go to state 124 exists_expr go to state 125 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 between_expr go to state 131 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 481 330 exists_expr : NOT EXISTS '(' select_no_paren ')' . $default reduce using rule 330(exists_expr) State 482 273 expr_list : expr_list ',' expr_alias. $default reduce using rule 273(expr_list) State 483 393 alias : AS IDENTIFIER. $default reduce using rule 393(alias) State 484 170 column_type : INTEGER. $default reduce using rule 170(column_type) State 485 174 column_type : VARCHAR.'(' INTVAL ')' '(' shift, and go to state 541 State 486 173 column_type : DOUBLE . $default reduce using rule 173(column_type) State 487 172 column_type : FLOAT. $default reduce using rule 172(column_type) State 488 175 column_type : CHAR.'(' INTVAL ')' '(' shift, and go to state 542 State 489 171 column_type : LONG. $default reduce using rule 171(column_type) State 490 176 column_type : TEXT. $default reduce using rule 176(column_type) State 491 169 column_type : INT. $default reduce using rule 169(column_type) State 492 295 cast_expr : CAST '(' expr AS column_type.')' ')' shift, and go to state 543 State 493 300 unary_expr : operand.ISNULL 301 | operand.IS NULL 302 | operand.IS NOT NULL 304 binary_expr : operand.'-' operand 305 | operand.'+' operand 306 | operand.'/' operand 307 | operand.'*' operand 308 | operand.'%' operand 309 | operand.'^' operand 310 | operand.LIKE operand 311 | operand.NOT LIKE operand 312 | operand.ILIKE operand 313 | operand.CONCAT operand 314 | operand.GLOB operand 315 | operand.MATCH operand 316 | operand.REGEX operand 331 comp_expr : operand.'=' operand 332 | operand.EQUALS operand 333 | operand.NOTEQUALS operand 334 | operand.'<' operand 335 | operand.'>' operand 336 | operand.LESSEQ operand 337 | operand.GREATEREQ operand 353 array_index : operand .'[' int_literal ']' 354 between_expr : operand BETWEEN operand AND operand. ISNULL shift, and go to state 218 LIKE shift, and go to state 219 NOT shift, and go to state 325 IS shift, and go to state 222 CONCAT shift, and go to state 223 ILIKE shift, and go to state 224 GLOB shift, and go to state 225 MATCH shift, and go to state 226 REGEX shift, and go to state 227 '=' shift, and go to state 228 EQUALS shift, and go to state 229 NOTEQUALS shift, and go to state 230 '<' shift, and go to state 231 '>' shift, and go to state 232 LESSEQ shift, and go to state 233 GREATEREQ shift, and go to state 234 '+' shift, and go to state 235 '-' shift, and go to state 236 '*' shift, and go to state 237 '/' shift, and go to state 238 '%' shift, and go to state 239 '^' shift, and go to state 240 '[' shift, and go to state 241 $default reduce using rule 354(between_expr) State 494 322 in_expr : operand NOT IN '(' select_no_paren.')' ')' shift, and go to state 544 State 495 273 expr_list : expr_list.',' expr_alias 320 in_expr : operand NOT IN '(' expr_list.')' ')' shift, and go to state 545 ',' shift, and go to state 420 State 496 321 in_expr : operand IN '(' select_no_paren ')'. $default reduce using rule 321(in_expr) State 497 319 in_expr : operand IN '(' expr_list ')'. $default reduce using rule 319(in_expr) State 498 93 hint : IDENTIFIER '('.literal_list ')' STRING shift, and go to state 98 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 NULL shift, and go to state 105 TRUE shift, and go to state 108 FALSE shift, and go to state 109 '?' shift, and go to state 115 literal_list go to state 546 literal go to state 263 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 499 88 opt_hints : WITH HINT '(' hint_list ')'. $default reduce using rule 88(opt_hints) State 500 91 hint_list : hint_list ','.hint IDENTIFIER shift, and go to state 433 hint go to state 547 State 501 194 opt_column_list : '(' ident_commalist ')'. $default reduce using rule 194(opt_column_list) State 502 415 ident_commalist : ident_commalist ','.IDENTIFIER IDENTIFIER shift, and go to state 548 State 503 189 super_list : '('.literal_list ')' STRING shift, and go to state 98 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 NULL shift, and go to state 105 TRUE shift, and go to state 108 FALSE shift, and go to state 109 '?' shift, and go to state 115 literal_list go to state 549 literal go to state 263 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 504 187 insert_statement : insert_type INTO table_name opt_column_list VALUES super_list.opt_upsert_clause 190 super_list : super_list.',' '(' literal_list ')' ON shift, and go to state 505 ',' shift, and go to state 550 $default reduce using rule 69(opt_upsert_clause) opt_upsert_clause go to state 551 upsert_clause go to state 507 State 505 70 upsert_clause : ON.CONFLICT DO NOTHING 71 | ON.CONFLICT DO UPDATE SET assign_list opt_where 72 | ON.CONFLICT '(' indexed_column_list ')' opt_where DO NOTHING 73 | ON.CONFLICT '(' indexed_column_list ')' opt_where DO UPDATE SET assign_list opt_where CONFLICT shift, and go to state 552 State 506 188 insert_statement : insert_type INTO table_name opt_column_list select_no_paren opt_upsert_clause . $default reduce using rule 188(insert_statement) State 507 68 opt_upsert_clause : upsert_clause. $default reduce using rule 68(opt_upsert_clause) State 508 249 from_clause : FROM.table_ref $default reduce using rule 377(table_prefix) table_ref go to state 553 table_prefix go to state 554 State 509 215 select_clause : SELECT opt_top opt_distinct select_list opt_from_clause.opt_where opt_group 216 | SELECT opt_top opt_distinct select_list opt_from_clause.opt_where opt_group window_clause WHERE shift, and go to state 278 $default reduce using rule 251(opt_where) opt_where go to state 555 State 510 247 opt_from_clause : from_clause . $default reduce using rule 247(opt_from_clause) State 511 202 select_statement : opt_with_clause select_with_paren set_operator select_paren_or_clause opt_order opt_limit. $default reduce using rule 202(select_statement) State 512 259 order_list : order_list ','.order_desc STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXISTS shift, and go to state 102 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 106 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 CAST shift, and go to state 111 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 order_desc go to state 556 expr go to state 445 operand go to state 117 cast_expr go to state 118 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 logic_expr go to state 122 in_expr go to state 123 case_expr go to state 124 exists_expr go to state 125 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 between_expr go to state 131 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 513 262 opt_order_type : DESC. $default reduce using rule 262(opt_order_type) State 514 261 opt_order_type : ASC. $default reduce using rule 261(opt_order_type) State 515 260 order_desc : expr opt_order_type.opt_null NULLS shift, and go to state 557 $default reduce using rule 83(opt_null) opt_null go to state 558 State 516 208 select_no_paren : select_clause set_operator select_paren_or_clause opt_order opt_limit . $default reduce using rule 208(select_no_paren) State 517 270 opt_limit : LIMIT ALL OFFSET.expr STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXISTS shift, and go to state 102 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 106 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 CAST shift, and go to state 111 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 expr go to state 559 operand go to state 117 cast_expr go to state 118 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 logic_expr go to state 122 in_expr go to state 123 case_expr go to state 124 exists_expr go to state 125 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 between_expr go to state 131 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 518 268 opt_limit : LIMIT expr OFFSET.expr STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXISTS shift, and go to state 102 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 106 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 CAST shift, and go to state 111 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 expr go to state 560 operand go to state 117 cast_expr go to state 118 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 logic_expr go to state 122 in_expr go to state 123 case_expr go to state 124 exists_expr go to state 125 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 between_expr go to state 131 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 519 143 module_name : IDENTIFIER. $default reduce using rule 143(module_name) State 520 114 create_statement : CREATE VIRTUAL TABLE opt_not_exists table_name USING module_name .115 | CREATE VIRTUAL TABLE opt_not_exists table_name USING module_name.'(' column_def_commalist ')' '(' shift, and go to state 561 $default reduce using rule 114(create_statement) State 521 109 create_statement : CREATE TABLE opt_not_exists table_name FROM TBL FILE.file_path STRING shift, and go to state 98 file_path go to state 562 string_literal go to state 363 State 522 148 column_def : IDENTIFIER column_type.opt_column_arglist PRIMARY shift, and go to state 563 UNIQUE shift, and go to state 564 NULL shift, and go to state 565 NOT shift, and go to state 566 AS shift, and go to state 567 GENERATED shift, and go to state 568 CHECK shift, and go to state 569 $default reduce using rule 150(opt_column_arglist) opt_column_arglist go to state 570 column_arglist go to state 571 column_arg go to state 572 State 523 110 create_statement : CREATE TABLE opt_not_exists table_name '(' column_def_commalist ')'. $default reduce using rule 110(create_statement) State 524 147 column_def_commalist : column_def_commalist ','.column_def IDENTIFIER shift, and go to state 454 column_def go to state 573 State 525 112 create_statement : CREATE VIEW opt_not_exists table_name opt_column_list AS select_statement . $default reduce using rule 112(create_statement) State 526 113 create_statement : CREATE opt_unique INDEX opt_not_exists index_name ON table_name.'(' ident_commalist ')' opt_where '(' shift, and go to state 574 State 527 126 opt_trigger_time : INSTEAD OF . $default reduce using rule 126(opt_trigger_time) State 528 128 trigger_event : DELETE. $default reduce using rule 128(trigger_event) State 529 129 trigger_event : INSERT. $default reduce using rule 129(trigger_event) State 530 130 trigger_event : UPDATE.opt_of_column_list OF shift, and go to state 575 $default reduce using rule 132(opt_of_column_list) opt_of_column_list go to state 576 State 531 120 trigger_declare : opt_tmp TRIGGER opt_not_exists trigger_name opt_trigger_time trigger_event.ON table_name opt_for_each opt_when ON shift, and go to state 577 State 532 98 import_statement : IMPORT FROM import_file_type FILE file_path INTO table_name . $default reduce using rule 98(import_statement) State 533 105 alter_statement : ALTER TABLE table_name RENAME opt_column column_name TO.column_name IDENTIFIER shift, and go to state 468 '*' shift, and go to state 113 column_name go to state 578 State 534 343 opt_filter_clause : FILTER '(' WHERE.expr ')' STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXISTS shift, and go to state 102 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 106 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 CAST shift, and go to state 111 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 expr go to state 579 operand go to state 117 cast_expr go to state 118 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 logic_expr go to state 122 in_expr go to state 123 case_expr go to state 124 exists_expr go to state 125 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 between_expr go to state 131 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 535 341 opt_over_clause : OVER IDENTIFIER . $default reduce using rule 341(opt_over_clause) State 536 340 opt_over_clause : OVER '('.window ')' IDENTIFIER shift, and go to state 580 $default reduce using rule 224(opt_base_window_name) window go to state 581 opt_base_window_name go to state 582 State 537 339 function_expr : IDENTIFIER '(' opt_distinct expr_list ')' opt_filter_clause.opt_over_clause OVER shift, and go to state 473 $default reduce using rule 342(opt_over_clause) opt_over_clause go to state 583 State 538 345 extract_expr : EXTRACT '(' datetime_field FROM expr ')'. $default reduce using rule 345(extract_expr) State 539 324 case_expr : CASE expr case_list ELSE expr END . $default reduce using rule 324(case_expr) State 540 317 logic_expr : expr.AND expr 318 | expr.OR expr 328 case_list : case_list WHEN expr THEN expr. AND shift, and go to state 214 OR shift, and go to state 216 $default reduce using rule 328(case_list) State 541 174 column_type : VARCHAR '('.INTVAL ')' INTVAL shift, and go to state 584 State 542 175 column_type : CHAR '('.INTVAL ')' INTVAL shift, and go to state 585 State 543 295 cast_expr : CAST '(' expr AS column_type ')'. $default reduce using rule 295(cast_expr) State 544 322 in_expr : operand NOT IN '(' select_no_paren ')'. $default reduce using rule 322(in_expr) State 545 320 in_expr : operand NOT IN '(' expr_list ')'. $default reduce using rule 320(in_expr) State 546 93 hint : IDENTIFIER '(' literal_list.')' 277 literal_list : literal_list.',' literal ')' shift, and go to state 586 ',' shift, and go to state 382 State 547 91 hint_list : hint_list ',' hint . $default reduce using rule 91(hint_list) State 548 415 ident_commalist : ident_commalist ',' IDENTIFIER. $default reduce using rule 415(ident_commalist) State 549 189 super_list : '(' literal_list.')' 277 literal_list : literal_list.',' literal ')' shift, and go to state 587 ',' shift, and go to state 382 State 550 190 super_list : super_list ','.'(' literal_list ')' '(' shift, and go to state 588 State 551 187 insert_statement : insert_type INTO table_name opt_column_list VALUES super_list opt_upsert_clause . $default reduce using rule 187(insert_statement) State 552 70 upsert_clause : ON CONFLICT.DO NOTHING 71 | ON CONFLICT.DO UPDATE SET assign_list opt_where 72 | ON CONFLICT.'(' indexed_column_list ')' opt_where DO NOTHING 73 | ON CONFLICT.'(' indexed_column_list ')' opt_where DO UPDATE SET assign_list opt_where DO shift, and go to state 589 '(' shift, and go to state 590 State 553 249 from_clause : FROM table_ref .376 table_prefix : table_ref.join_op NATURAL shift, and go to state 591 CROSS shift, and go to state 592 INNER shift, and go to state 593 OUTER shift, and go to state 594 RIGHT shift, and go to state 595 FULL shift, and go to state 596 JOIN shift, and go to state 597 LEFT shift, and go to state 598 ',' shift, and go to state 599 $default reduce using rule 249(from_clause) join_op go to state 600 join_kw go to state 601 State 554 372 table_ref : table_prefix.table_name opt_alias opt_index opt_on opt_using 373 | table_prefix.table_name '(' expr_list ')' opt_alias opt_on opt_using 374 | table_prefix.'(' select_no_paren ')' opt_alias opt_on opt_using 375 | table_prefix.'(' table_ref ')' opt_alias opt_on opt_using IDENTIFIER shift, and go to state 58 '(' shift, and go to state 602 table_name go to state 603 State 555 215 select_clause : SELECT opt_top opt_distinct select_list opt_from_clause opt_where.opt_group 216 | SELECT opt_top opt_distinct select_list opt_from_clause opt_where.opt_group window_clause GROUP shift, and go to state 604 $default reduce using rule 253(opt_group) opt_group go to state 605 State 556 259 order_list : order_list ',' order_desc . $default reduce using rule 259(order_list) State 557 81 opt_null : NULLS.FIRST 82 | NULLS.LAST LAST shift, and go to state 606 FIRST shift, and go to state 607 State 558 260 order_desc : expr opt_order_type opt_null . $default reduce using rule 260(order_desc) State 559 270 opt_limit : LIMIT ALL OFFSET expr .317 logic_expr : expr.AND expr 318 | expr.OR expr AND shift, and go to state 214 OR shift, and go to state 216 $default reduce using rule 270(opt_limit) State 560 268 opt_limit : LIMIT expr OFFSET expr .317 logic_expr : expr.AND expr 318 | expr.OR expr AND shift, and go to state 214 OR shift, and go to state 216 $default reduce using rule 268(opt_limit) State 561 115 create_statement : CREATE VIRTUAL TABLE opt_not_exists table_name USING module_name '('.column_def_commalist ')' IDENTIFIER shift, and go to state 454 column_def_commalist go to state 608 column_def go to state 456 State 562 109 create_statement : CREATE TABLE opt_not_exists table_name FROM TBL FILE file_path . $default reduce using rule 109(create_statement) State 563 155 column_arg : PRIMARY.KEY opt_order_type opt_on_conflict opt_autoinc KEY shift, and go to state 609 State 564 156 column_arg : UNIQUE.opt_on_conflict ON shift, and go to state 610 $default reduce using rule 161(opt_on_conflict) opt_on_conflict go to state 611 State 565 153 column_arg : NULL.opt_on_conflict ON shift, and go to state 610 $default reduce using rule 161(opt_on_conflict) opt_on_conflict go to state 612 State 566 154 column_arg : NOT.NULL opt_on_conflict NULL shift, and go to state 613 State 567 158 column_arg : AS.'(' expr ')' '(' shift, and go to state 614 State 568 157 column_arg : GENERATED.ALWAYS AS '(' expr ')' ALWAYS shift, and go to state 615 State 569 159 column_arg : CHECK.'(' expr ')' '(' shift, and go to state 616 State 570 148 column_def : IDENTIFIER column_type opt_column_arglist . $default reduce using rule 148(column_def) State 571 149 opt_column_arglist : column_arglist .151 column_arglist : column_arglist.column_arg PRIMARY shift, and go to state 563 UNIQUE shift, and go to state 564 NULL shift, and go to state 565 NOT shift, and go to state 566 AS shift, and go to state 567 GENERATED shift, and go to state 568 CHECK shift, and go to state 569 $default reduce using rule 149(opt_column_arglist) column_arg go to state 617 State 572 152 column_arglist : column_arg . $default reduce using rule 152(column_arglist) State 573 147 column_def_commalist : column_def_commalist ',' column_def. $default reduce using rule 147(column_def_commalist) State 574 113 create_statement : CREATE opt_unique INDEX opt_not_exists index_name ON table_name '('.ident_commalist ')' opt_where IDENTIFIER shift, and go to state 436 ident_commalist go to state 618 State 575 131 opt_of_column_list : OF.ident_commalist IDENTIFIER shift, and go to state 436 ident_commalist go to state 619 State 576 130 trigger_event : UPDATE opt_of_column_list . $default reduce using rule 130(trigger_event) State 577 120 trigger_declare : opt_tmp TRIGGER opt_not_exists trigger_name opt_trigger_time trigger_event ON.table_name opt_for_each opt_when IDENTIFIER shift, and go to state 58 table_name go to state 620 State 578 105 alter_statement : ALTER TABLE table_name RENAME opt_column column_name TO column_name . $default reduce using rule 105(alter_statement) State 579 317 logic_expr : expr.AND expr 318 | expr.OR expr 343 opt_filter_clause : FILTER '(' WHERE expr.')' AND shift, and go to state 214 OR shift, and go to state 216 ')' shift, and go to state 621 State 580 223 opt_base_window_name : IDENTIFIER . $default reduce using rule 223(opt_base_window_name) State 581 340 opt_over_clause : OVER '(' window.')' ')' shift, and go to state 622 State 582 221 window : opt_base_window_name.PARTITION BY expr_list opt_order opt_frame 222 | opt_base_window_name.opt_order opt_frame ORDER shift, and go to state 257 PARTITION shift, and go to state 623 $default reduce using rule 257(opt_order) opt_order go to state 624 State 583 339 function_expr : IDENTIFIER '(' opt_distinct expr_list ')' opt_filter_clause opt_over_clause . $default reduce using rule 339(function_expr) State 584 174 column_type : VARCHAR '(' INTVAL.')' ')' shift, and go to state 625 State 585 175 column_type : CHAR '(' INTVAL.')' ')' shift, and go to state 626 State 586 93 hint : IDENTIFIER '(' literal_list ')'. $default reduce using rule 93(hint) State 587 189 super_list : '(' literal_list ')'. $default reduce using rule 189(super_list) State 588 190 super_list : super_list ',' '('.literal_list ')' STRING shift, and go to state 98 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 NULL shift, and go to state 105 TRUE shift, and go to state 108 FALSE shift, and go to state 109 '?' shift, and go to state 115 literal_list go to state 627 literal go to state 263 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 589 70 upsert_clause : ON CONFLICT DO.NOTHING 71 | ON CONFLICT DO.UPDATE SET assign_list opt_where UPDATE shift, and go to state 628 NOTHING shift, and go to state 629 State 590 72 upsert_clause : ON CONFLICT '('.indexed_column_list ')' opt_where DO NOTHING 73 | ON CONFLICT '('.indexed_column_list ')' opt_where DO UPDATE SET assign_list opt_where STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXISTS shift, and go to state 102 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 106 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 CAST shift, and go to state 111 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 indexed_column_list go to state 630 indexed_column go to state 631 expr go to state 632 operand go to state 117 cast_expr go to state 118 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 logic_expr go to state 122 in_expr go to state 123 case_expr go to state 124 exists_expr go to state 125 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 between_expr go to state 131 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 591 411 join_kw : NATURAL . $default reduce using rule 411(join_kw) State 592 410 join_kw : CROSS. $default reduce using rule 410(join_kw) State 593 402 join_kw : INNER. $default reduce using rule 402(join_kw) State 594 408 join_kw : OUTER. $default reduce using rule 408(join_kw) State 595 405 join_kw : RIGHT.OUTER 406 | RIGHT. OUTER shift, and go to state 633 $default reduce using rule 406(join_kw) State 596 407 join_kw : FULL.OUTER 409 | FULL. OUTER shift, and go to state 634 $default reduce using rule 409(join_kw) State 597 379 join_op : JOIN. $default reduce using rule 379(join_op) State 598 403 join_kw : LEFT.OUTER 404 | LEFT. OUTER shift, and go to state 635 $default reduce using rule 404(join_kw) State 599 378 join_op : ','. $default reduce using rule 378(join_op) State 600 376 table_prefix : table_ref join_op . $default reduce using rule 376(table_prefix) State 601 380 join_op : join_kw.JOIN 381 | join_kw.IDENTIFIER JOIN 382 | join_kw.IDENTIFIER IDENTIFIER JOIN IDENTIFIER shift, and go to state 636 JOIN shift, and go to state 637 State 602 374 table_ref : table_prefix '('.select_no_paren ')' opt_alias opt_on opt_using 375 | table_prefix '('.table_ref ')' opt_alias opt_on opt_using SELECT shift, and go to state 156 $default reduce using rule 377(table_prefix) select_no_paren go to state 638 select_clause go to state 160 table_ref go to state 639 table_prefix go to state 554 State 603 372 table_ref : table_prefix table_name.opt_alias opt_index opt_on opt_using 373 | table_prefix table_name.'(' expr_list ')' opt_alias opt_on opt_using AS shift, and go to state 421 '(' shift, and go to state 640 $default reduce using rule 395(opt_alias) alias go to state 422 opt_alias go to state 641 State 604 252 opt_group : GROUP.BY expr_list opt_having BY shift, and go to state 642 State 605 215 select_clause : SELECT opt_top opt_distinct select_list opt_from_clause opt_where opt_group .216 | SELECT opt_top opt_distinct select_list opt_from_clause opt_where opt_group.window_clause WINDOW shift, and go to state 643 $default reduce using rule 215(select_clause) window_clause go to state 644 State 606 82 opt_null : NULLS LAST . $default reduce using rule 82(opt_null) State 607 81 opt_null : NULLS FIRST. $default reduce using rule 81(opt_null) State 608 115 create_statement : CREATE VIRTUAL TABLE opt_not_exists table_name USING module_name '(' column_def_commalist .')' 147 column_def_commalist : column_def_commalist.',' column_def ')' shift, and go to state 645 ',' shift, and go to state 524 State 609 155 column_arg : PRIMARY KEY.opt_order_type opt_on_conflict opt_autoinc DESC shift, and go to state 513 ASC shift, and go to state 514 $default reduce using rule 263(opt_order_type) opt_order_type go to state 646 State 610 160 opt_on_conflict : ON.CONFLICT resolve_type CONFLICT shift, and go to state 647 State 611 156 column_arg : UNIQUE opt_on_conflict . $default reduce using rule 156(column_arg) State 612 153 column_arg : NULL opt_on_conflict. $default reduce using rule 153(column_arg) State 613 154 column_arg : NOT NULL.opt_on_conflict ON shift, and go to state 610 $default reduce using rule 161(opt_on_conflict) opt_on_conflict go to state 648 State 614 158 column_arg : AS '('.expr ')' STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXISTS shift, and go to state 102 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 106 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 CAST shift, and go to state 111 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 expr go to state 649 operand go to state 117 cast_expr go to state 118 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 logic_expr go to state 122 in_expr go to state 123 case_expr go to state 124 exists_expr go to state 125 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 between_expr go to state 131 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 615 157 column_arg : GENERATED ALWAYS.AS '(' expr ')' AS shift, and go to state 650 State 616 159 column_arg : CHECK '('.expr ')' STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXISTS shift, and go to state 102 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 106 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 CAST shift, and go to state 111 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 expr go to state 651 operand go to state 117 cast_expr go to state 118 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 logic_expr go to state 122 in_expr go to state 123 case_expr go to state 124 exists_expr go to state 125 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 between_expr go to state 131 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 617 151 column_arglist : column_arglist column_arg . $default reduce using rule 151(column_arglist) State 618 113 create_statement : CREATE opt_unique INDEX opt_not_exists index_name ON table_name '(' ident_commalist.')' opt_where 415 ident_commalist : ident_commalist.',' IDENTIFIER ')' shift, and go to state 652 ',' shift, and go to state 502 State 619 131 opt_of_column_list : OF ident_commalist .415 ident_commalist : ident_commalist.',' IDENTIFIER ',' shift, and go to state 502 $default reduce using rule 131(opt_of_column_list) State 620 120 trigger_declare : opt_tmp TRIGGER opt_not_exists trigger_name opt_trigger_time trigger_event ON table_name.opt_for_each opt_when FOR shift, and go to state 653 $default reduce using rule 134(opt_for_each) opt_for_each go to state 654 State 621 343 opt_filter_clause : FILTER '(' WHERE expr ')'. $default reduce using rule 343(opt_filter_clause) State 622 340 opt_over_clause : OVER '(' window ')'. $default reduce using rule 340(opt_over_clause) State 623 221 window : opt_base_window_name PARTITION.BY expr_list opt_order opt_frame BY shift, and go to state 655 State 624 222 window : opt_base_window_name opt_order.opt_frame GROUPS shift, and go to state 656 RANGE shift, and go to state 657 ROWS shift, and go to state 658 $default reduce using rule 227(opt_frame) opt_frame go to state 659 range_or_rows go to state 660 State 625 174 column_type : VARCHAR '(' INTVAL ')'. $default reduce using rule 174(column_type) State 626 175 column_type : CHAR '(' INTVAL ')'. $default reduce using rule 175(column_type) State 627 190 super_list : super_list ',' '(' literal_list.')' 277 literal_list : literal_list.',' literal ')' shift, and go to state 661 ',' shift, and go to state 382 State 628 71 upsert_clause : ON CONFLICT DO UPDATE.SET assign_list opt_where SET shift, and go to state 662 State 629 70 upsert_clause : ON CONFLICT DO NOTHING . $default reduce using rule 70(upsert_clause) State 630 72 upsert_clause : ON CONFLICT '(' indexed_column_list.')' opt_where DO NOTHING 73 | ON CONFLICT '(' indexed_column_list .')' opt_where DO UPDATE SET assign_list opt_where 75 indexed_column_list : indexed_column_list.',' indexed_column ')' shift, and go to state 663 ',' shift, and go to state 664 State 631 74 indexed_column_list : indexed_column . $default reduce using rule 74(indexed_column_list) State 632 76 indexed_column : expr.opt_collate opt_order_type 317 logic_expr : expr.AND expr 318 | expr.OR expr AND shift, and go to state 214 OR shift, and go to state 216 COLLATE shift, and go to state 665 $default reduce using rule 78(opt_collate) opt_collate go to state 666 State 633 405 join_kw : RIGHT OUTER . $default reduce using rule 405(join_kw) State 634 407 join_kw : FULL OUTER. $default reduce using rule 407(join_kw) State 635 403 join_kw : LEFT OUTER. $default reduce using rule 403(join_kw) State 636 381 join_op : join_kw IDENTIFIER.JOIN 382 | join_kw IDENTIFIER.IDENTIFIER JOIN IDENTIFIER shift, and go to state 667 JOIN shift, and go to state 668 State 637 380 join_op : join_kw JOIN . $default reduce using rule 380(join_op) State 638 374 table_ref : table_prefix '(' select_no_paren.')' opt_alias opt_on opt_using ')' shift, and go to state 669 State 639 375 table_ref : table_prefix '(' table_ref.')' opt_alias opt_on opt_using 376 table_prefix : table_ref.join_op NATURAL shift, and go to state 591 CROSS shift, and go to state 592 INNER shift, and go to state 593 OUTER shift, and go to state 594 RIGHT shift, and go to state 595 FULL shift, and go to state 596 JOIN shift, and go to state 597 LEFT shift, and go to state 598 ')' shift, and go to state 670 ',' shift, and go to state 599 join_op go to state 600 join_kw go to state 601 State 640 373 table_ref : table_prefix table_name '('.expr_list ')' opt_alias opt_on opt_using STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXISTS shift, and go to state 102 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 106 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 CAST shift, and go to state 111 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 expr_list go to state 671 expr_alias go to state 327 expr go to state 328 operand go to state 117 cast_expr go to state 118 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 logic_expr go to state 122 in_expr go to state 123 case_expr go to state 124 exists_expr go to state 125 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 between_expr go to state 131 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 641 372 table_ref : table_prefix table_name opt_alias.opt_index opt_on opt_using NOT shift, and go to state 672 INDEXED shift, and go to state 673 $default reduce using rule 385(opt_index) opt_index go to state 674 State 642 252 opt_group : GROUP BY.expr_list opt_having STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXISTS shift, and go to state 102 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 106 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 CAST shift, and go to state 111 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 expr_list go to state 675 expr_alias go to state 327 expr go to state 328 operand go to state 117 cast_expr go to state 118 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 logic_expr go to state 122 in_expr go to state 123 case_expr go to state 124 exists_expr go to state 125 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 between_expr go to state 131 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 643 217 window_clause : WINDOW.windowdefn_list IDENTIFIER shift, and go to state 676 windowdefn_list go to state 677 windowdefn go to state 678 State 644 216 select_clause : SELECT opt_top opt_distinct select_list opt_from_clause opt_where opt_group window_clause . $default reduce using rule 216(select_clause) State 645 115 create_statement : CREATE VIRTUAL TABLE opt_not_exists table_name USING module_name '(' column_def_commalist ')'. $default reduce using rule 115(create_statement) State 646 155 column_arg : PRIMARY KEY opt_order_type.opt_on_conflict opt_autoinc ON shift, and go to state 610 $default reduce using rule 161(opt_on_conflict) opt_on_conflict go to state 679 State 647 160 opt_on_conflict : ON CONFLICT.resolve_type IGNORE shift, and go to state 175 REPLACE shift, and go to state 176 ROLLBACK shift, and go to state 177 ABORT shift, and go to state 178 FAIL shift, and go to state 179 resolve_type go to state 680 State 648 154 column_arg : NOT NULL opt_on_conflict . $default reduce using rule 154(column_arg) State 649 158 column_arg : AS '(' expr.')' 317 logic_expr : expr.AND expr 318 | expr.OR expr AND shift, and go to state 214 OR shift, and go to state 216 ')' shift, and go to state 681 State 650 157 column_arg : GENERATED ALWAYS AS.'(' expr ')' '(' shift, and go to state 682 State 651 159 column_arg : CHECK '(' expr.')' 317 logic_expr : expr.AND expr 318 | expr.OR expr AND shift, and go to state 214 OR shift, and go to state 216 ')' shift, and go to state 683 State 652 113 create_statement : CREATE opt_unique INDEX opt_not_exists index_name ON table_name '(' ident_commalist ')'.opt_where WHERE shift, and go to state 278 $default reduce using rule 251(opt_where) opt_where go to state 684 State 653 133 opt_for_each : FOR.EACH ROW EACH shift, and go to state 685 State 654 120 trigger_declare : opt_tmp TRIGGER opt_not_exists trigger_name opt_trigger_time trigger_event ON table_name opt_for_each.opt_when WHEN shift, and go to state 686 $default reduce using rule 136(opt_when) opt_when go to state 687 State 655 221 window : opt_base_window_name PARTITION BY.expr_list opt_order opt_frame STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXISTS shift, and go to state 102 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 106 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 CAST shift, and go to state 111 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 expr_list go to state 688 expr_alias go to state 327 expr go to state 328 operand go to state 117 cast_expr go to state 118 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 logic_expr go to state 122 in_expr go to state 123 case_expr go to state 124 exists_expr go to state 125 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 between_expr go to state 131 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 656 230 range_or_rows : GROUPS . $default reduce using rule 230(range_or_rows) State 657 228 range_or_rows : RANGE. $default reduce using rule 228(range_or_rows) State 658 229 range_or_rows : ROWS. $default reduce using rule 229(range_or_rows) State 659 222 window : opt_base_window_name opt_order opt_frame . $default reduce using rule 222(window) State 660 225 opt_frame : range_or_rows.frame_bound_s opt_frame_exclude 226 | range_or_rows.BETWEEN frame_bound_s AND frame_bound_e opt_frame_exclude STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 BETWEEN shift, and go to state 689 EXISTS shift, and go to state 102 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 106 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 CURRENT shift, and go to state 690 UNBOUNDED shift, and go to state 691 CAST shift, and go to state 111 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 frame_bound_s go to state 692 frame_bound go to state 693 expr go to state 694 operand go to state 117 cast_expr go to state 118 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 logic_expr go to state 122 in_expr go to state 123 case_expr go to state 124 exists_expr go to state 125 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 between_expr go to state 131 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 661 190 super_list : super_list ',' '(' literal_list ')'. $default reduce using rule 190(super_list) State 662 71 upsert_clause : ON CONFLICT DO UPDATE SET.assign_list opt_where IDENTIFIER shift, and go to state 468 '*' shift, and go to state 113 assign_list go to state 695 assign_clause go to state 696 column_name_list go to state 697 column_name go to state 698 State 663 72 upsert_clause : ON CONFLICT '(' indexed_column_list ')'.opt_where DO NOTHING 73 | ON CONFLICT '(' indexed_column_list ')'.opt_where DO UPDATE SET assign_list opt_where WHERE shift, and go to state 278 $default reduce using rule 251(opt_where) opt_where go to state 699 State 664 75 indexed_column_list : indexed_column_list ','.indexed_column STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXISTS shift, and go to state 102 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 106 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 CAST shift, and go to state 111 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 indexed_column go to state 700 expr go to state 632 operand go to state 117 cast_expr go to state 118 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 logic_expr go to state 122 in_expr go to state 123 case_expr go to state 124 exists_expr go to state 125 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 between_expr go to state 131 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 665 77 opt_collate : COLLATE.collation_name IDENTIFIER shift, and go to state 701 collation_name go to state 702 State 666 76 indexed_column : expr opt_collate.opt_order_type DESC shift, and go to state 513 ASC shift, and go to state 514 $default reduce using rule 263(opt_order_type) opt_order_type go to state 703 State 667 382 join_op : join_kw IDENTIFIER IDENTIFIER.JOIN JOIN shift, and go to state 704 State 668 381 join_op : join_kw IDENTIFIER JOIN . $default reduce using rule 381(join_op) State 669 374 table_ref : table_prefix '(' select_no_paren ')'.opt_alias opt_on opt_using AS shift, and go to state 421 $default reduce using rule 395(opt_alias) alias go to state 422 opt_alias go to state 705 State 670 375 table_ref : table_prefix '(' table_ref ')'.opt_alias opt_on opt_using AS shift, and go to state 421 $default reduce using rule 395(opt_alias) alias go to state 422 opt_alias go to state 706 State 671 273 expr_list : expr_list .',' expr_alias 373 table_ref : table_prefix table_name '(' expr_list.')' opt_alias opt_on opt_using ')' shift, and go to state 707 ',' shift, and go to state 420 State 672 384 opt_index : NOT.INDEXED INDEXED shift, and go to state 708 State 673 383 opt_index : INDEXED.BY column_name BY shift, and go to state 709 State 674 372 table_ref : table_prefix table_name opt_alias opt_index.opt_on opt_using ON shift, and go to state 710 ON[reduce using rule 387(opt_on)] $default reduce using rule 387(opt_on) opt_on go to state 711 State 675 252 opt_group : GROUP BY expr_list.opt_having 273 expr_list : expr_list.',' expr_alias HAVING shift, and go to state 712 ',' shift, and go to state 420 $default reduce using rule 255(opt_having) opt_having go to state 713 State 676 220 windowdefn : IDENTIFIER.AS '(' window ')' AS shift, and go to state 714 State 677 217 window_clause : WINDOW windowdefn_list .219 windowdefn_list : windowdefn_list.',' windowdefn ',' shift, and go to state 715 $default reduce using rule 217(window_clause) State 678 218 windowdefn_list : windowdefn . $default reduce using rule 218(windowdefn_list) State 679 155 column_arg : PRIMARY KEY opt_order_type opt_on_conflict.opt_autoinc AUTOINCR shift, and go to state 716 $default reduce using rule 168(opt_autoinc) opt_autoinc go to state 717 State 680 160 opt_on_conflict : ON CONFLICT resolve_type . $default reduce using rule 160(opt_on_conflict) State 681 158 column_arg : AS '(' expr ')'. $default reduce using rule 158(column_arg) State 682 157 column_arg : GENERATED ALWAYS AS '('.expr ')' STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXISTS shift, and go to state 102 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 106 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 CAST shift, and go to state 111 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 expr go to state 718 operand go to state 117 cast_expr go to state 118 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 logic_expr go to state 122 in_expr go to state 123 case_expr go to state 124 exists_expr go to state 125 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 between_expr go to state 131 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 683 159 column_arg : CHECK '(' expr ')'. $default reduce using rule 159(column_arg) State 684 113 create_statement : CREATE opt_unique INDEX opt_not_exists index_name ON table_name '(' ident_commalist ')' opt_where . $default reduce using rule 113(create_statement) State 685 133 opt_for_each : FOR EACH.ROW ROW shift, and go to state 719 State 686 135 opt_when : WHEN.expr STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXISTS shift, and go to state 102 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 106 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 CAST shift, and go to state 111 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 expr go to state 720 operand go to state 117 cast_expr go to state 118 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 logic_expr go to state 122 in_expr go to state 123 case_expr go to state 124 exists_expr go to state 125 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 between_expr go to state 131 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 687 120 trigger_declare : opt_tmp TRIGGER opt_not_exists trigger_name opt_trigger_time trigger_event ON table_name opt_for_each opt_when . $default reduce using rule 120(trigger_declare) State 688 221 window : opt_base_window_name PARTITION BY expr_list .opt_order opt_frame 273 expr_list : expr_list.',' expr_alias ORDER shift, and go to state 257 ',' shift, and go to state 420 $default reduce using rule 257(opt_order) opt_order go to state 721 State 689 226 opt_frame : range_or_rows BETWEEN.frame_bound_s AND frame_bound_e opt_frame_exclude STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXISTS shift, and go to state 102 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 106 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 CURRENT shift, and go to state 690 UNBOUNDED shift, and go to state 691 CAST shift, and go to state 111 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 frame_bound_s go to state 722 frame_bound go to state 693 expr go to state 694 operand go to state 117 cast_expr go to state 118 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 logic_expr go to state 122 in_expr go to state 123 case_expr go to state 124 exists_expr go to state 125 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 between_expr go to state 131 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 690 237 frame_bound : CURRENT.ROW ROW shift, and go to state 723 State 691 232 frame_bound_s : UNBOUNDED.PRECEDING PRECEDING shift, and go to state 724 State 692 225 opt_frame : range_or_rows frame_bound_s.opt_frame_exclude EXCLUDE shift, and go to state 725 $default reduce using rule 239(opt_frame_exclude) opt_frame_exclude go to state 726 State 693 231 frame_bound_s : frame_bound . $default reduce using rule 231(frame_bound_s) State 694 235 frame_bound : expr.PRECEDING 236 | expr.FOLLOWING 317 logic_expr : expr.AND expr 318 | expr.OR expr AND shift, and go to state 214 OR shift, and go to state 216 FOLLOWING shift, and go to state 727 PRECEDING shift, and go to state 728 State 695 71 upsert_clause : ON CONFLICT DO UPDATE SET assign_list.opt_where 80 assign_list : assign_list.',' assign_clause WHERE shift, and go to state 278 ',' shift, and go to state 729 $default reduce using rule 251(opt_where) opt_where go to state 730 State 696 79 assign_list : assign_clause . $default reduce using rule 79(assign_list) State 697 84 assign_clause : column_name_list.'=' expr 86 column_name_list : column_name_list.',' column_name '=' shift, and go to state 731 ',' shift, and go to state 732 State 698 85 column_name_list : column_name . $default reduce using rule 85(column_name_list) State 699 72 upsert_clause : ON CONFLICT '(' indexed_column_list ')' opt_where.DO NOTHING 73 | ON CONFLICT '(' indexed_column_list ')' opt_where.DO UPDATE SET assign_list opt_where DO shift, and go to state 733 State 700 75 indexed_column_list : indexed_column_list ',' indexed_column . $default reduce using rule 75(indexed_column_list) State 701 87 collation_name : IDENTIFIER. $default reduce using rule 87(collation_name) State 702 77 opt_collate : COLLATE collation_name. $default reduce using rule 77(opt_collate) State 703 76 indexed_column : expr opt_collate opt_order_type. $default reduce using rule 76(indexed_column) State 704 382 join_op : join_kw IDENTIFIER IDENTIFIER JOIN. $default reduce using rule 382(join_op) State 705 374 table_ref : table_prefix '(' select_no_paren ')' opt_alias.opt_on opt_using ON shift, and go to state 710 ON[reduce using rule 387(opt_on)] $default reduce using rule 387(opt_on) opt_on go to state 734 State 706 375 table_ref : table_prefix '(' table_ref ')' opt_alias.opt_on opt_using ON shift, and go to state 710 ON[reduce using rule 387(opt_on)] $default reduce using rule 387(opt_on) opt_on go to state 735 State 707 373 table_ref : table_prefix table_name '(' expr_list ')'.opt_alias opt_on opt_using AS shift, and go to state 421 $default reduce using rule 395(opt_alias) alias go to state 422 opt_alias go to state 736 State 708 384 opt_index : NOT INDEXED . $default reduce using rule 384(opt_index) State 709 383 opt_index : INDEXED BY.column_name IDENTIFIER shift, and go to state 468 '*' shift, and go to state 113 column_name go to state 737 State 710 386 opt_on : ON.expr STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXISTS shift, and go to state 102 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 106 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 CAST shift, and go to state 111 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 expr go to state 738 operand go to state 117 cast_expr go to state 118 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 logic_expr go to state 122 in_expr go to state 123 case_expr go to state 124 exists_expr go to state 125 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 between_expr go to state 131 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 711 372 table_ref : table_prefix table_name opt_alias opt_index opt_on.opt_using USING shift, and go to state 739 $default reduce using rule 389(opt_using) opt_using go to state 740 State 712 254 opt_having : HAVING.expr STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXISTS shift, and go to state 102 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 106 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 CAST shift, and go to state 111 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 expr go to state 741 operand go to state 117 cast_expr go to state 118 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 logic_expr go to state 122 in_expr go to state 123 case_expr go to state 124 exists_expr go to state 125 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 between_expr go to state 131 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 713 252 opt_group : GROUP BY expr_list opt_having . $default reduce using rule 252(opt_group) State 714 220 windowdefn : IDENTIFIER AS.'(' window ')' '(' shift, and go to state 742 State 715 219 windowdefn_list : windowdefn_list ','.windowdefn IDENTIFIER shift, and go to state 676 windowdefn go to state 743 State 716 167 opt_autoinc : AUTOINCR . $default reduce using rule 167(opt_autoinc) State 717 155 column_arg : PRIMARY KEY opt_order_type opt_on_conflict opt_autoinc. $default reduce using rule 155(column_arg) State 718 157 column_arg : GENERATED ALWAYS AS '(' expr.')' 317 logic_expr : expr.AND expr 318 | expr.OR expr AND shift, and go to state 214 OR shift, and go to state 216 ')' shift, and go to state 744 State 719 133 opt_for_each : FOR EACH ROW . $default reduce using rule 133(opt_for_each) State 720 135 opt_when : WHEN expr .317 logic_expr : expr.AND expr 318 | expr.OR expr AND shift, and go to state 214 OR shift, and go to state 216 $default reduce using rule 135(opt_when) State 721 221 window : opt_base_window_name PARTITION BY expr_list opt_order.opt_frame GROUPS shift, and go to state 656 RANGE shift, and go to state 657 ROWS shift, and go to state 658 $default reduce using rule 227(opt_frame) opt_frame go to state 745 range_or_rows go to state 660 State 722 226 opt_frame : range_or_rows BETWEEN frame_bound_s.AND frame_bound_e opt_frame_exclude AND shift, and go to state 746 State 723 237 frame_bound : CURRENT ROW . $default reduce using rule 237(frame_bound) State 724 232 frame_bound_s : UNBOUNDED PRECEDING. $default reduce using rule 232(frame_bound_s) State 725 238 opt_frame_exclude : EXCLUDE.frame_exclude GROUP shift, and go to state 747 CURRENT shift, and go to state 748 NO shift, and go to state 749 TIES shift, and go to state 750 frame_exclude go to state 751 State 726 225 opt_frame : range_or_rows frame_bound_s opt_frame_exclude . $default reduce using rule 225(opt_frame) State 727 236 frame_bound : expr FOLLOWING. $default reduce using rule 236(frame_bound) State 728 235 frame_bound : expr PRECEDING. $default reduce using rule 235(frame_bound) State 729 80 assign_list : assign_list ','.assign_clause IDENTIFIER shift, and go to state 468 '*' shift, and go to state 113 assign_clause go to state 752 column_name_list go to state 697 column_name go to state 698 State 730 71 upsert_clause : ON CONFLICT DO UPDATE SET assign_list opt_where . $default reduce using rule 71(upsert_clause) State 731 84 assign_clause : column_name_list '='.expr STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXISTS shift, and go to state 102 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 106 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 CAST shift, and go to state 111 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 expr go to state 753 operand go to state 117 cast_expr go to state 118 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 logic_expr go to state 122 in_expr go to state 123 case_expr go to state 124 exists_expr go to state 125 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 between_expr go to state 131 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 732 86 column_name_list : column_name_list ','.column_name IDENTIFIER shift, and go to state 468 '*' shift, and go to state 113 column_name go to state 754 State 733 72 upsert_clause : ON CONFLICT '(' indexed_column_list ')' opt_where DO.NOTHING 73 | ON CONFLICT '(' indexed_column_list ')' opt_where DO.UPDATE SET assign_list opt_where UPDATE shift, and go to state 755 NOTHING shift, and go to state 756 State 734 374 table_ref : table_prefix '(' select_no_paren ')' opt_alias opt_on.opt_using USING shift, and go to state 739 $default reduce using rule 389(opt_using) opt_using go to state 757 State 735 375 table_ref : table_prefix '(' table_ref ')' opt_alias opt_on.opt_using USING shift, and go to state 739 $default reduce using rule 389(opt_using) opt_using go to state 758 State 736 373 table_ref : table_prefix table_name '(' expr_list ')' opt_alias.opt_on opt_using ON shift, and go to state 710 ON[reduce using rule 387(opt_on)] $default reduce using rule 387(opt_on) opt_on go to state 759 State 737 383 opt_index : INDEXED BY column_name . $default reduce using rule 383(opt_index) State 738 317 logic_expr : expr.AND expr 318 | expr.OR expr 386 opt_on : ON expr. AND shift, and go to state 214 OR shift, and go to state 216 $default reduce using rule 386(opt_on) State 739 388 opt_using : USING.'(' ident_commalist ')' '(' shift, and go to state 760 State 740 372 table_ref : table_prefix table_name opt_alias opt_index opt_on opt_using . $default reduce using rule 372(table_ref) State 741 254 opt_having : HAVING expr .317 logic_expr : expr.AND expr 318 | expr.OR expr AND shift, and go to state 214 OR shift, and go to state 216 $default reduce using rule 254(opt_having) State 742 220 windowdefn : IDENTIFIER AS '('.window ')' IDENTIFIER shift, and go to state 580 $default reduce using rule 224(opt_base_window_name) window go to state 761 opt_base_window_name go to state 582 State 743 219 windowdefn_list : windowdefn_list ',' windowdefn . $default reduce using rule 219(windowdefn_list) State 744 157 column_arg : GENERATED ALWAYS AS '(' expr ')'. $default reduce using rule 157(column_arg) State 745 221 window : opt_base_window_name PARTITION BY expr_list opt_order opt_frame. $default reduce using rule 221(window) State 746 226 opt_frame : range_or_rows BETWEEN frame_bound_s AND.frame_bound_e opt_frame_exclude STRING shift, and go to state 98 IDENTIFIER shift, and go to state 99 FLOATVAL shift, and go to state 100 INTVAL shift, and go to state 101 EXISTS shift, and go to state 102 EXTRACT shift, and go to state 103 CASE shift, and go to state 104 NULL shift, and go to state 105 NOT shift, and go to state 106 ARRAY shift, and go to state 107 TRUE shift, and go to state 108 FALSE shift, and go to state 109 CURRENT shift, and go to state 690 UNBOUNDED shift, and go to state 762 CAST shift, and go to state 111 '-' shift, and go to state 112 '*' shift, and go to state 113 '(' shift, and go to state 114 '?' shift, and go to state 115 frame_bound_e go to state 763 frame_bound go to state 764 expr go to state 694 operand go to state 117 cast_expr go to state 118 scalar_expr go to state 119 unary_expr go to state 120 binary_expr go to state 121 logic_expr go to state 122 in_expr go to state 123 case_expr go to state 124 exists_expr go to state 125 comp_expr go to state 126 function_expr go to state 127 extract_expr go to state 128 array_expr go to state 129 array_index go to state 130 between_expr go to state 131 column_name go to state 132 literal go to state 133 string_literal go to state 134 bool_literal go to state 135 num_literal go to state 136 int_literal go to state 137 null_literal go to state 138 param_expr go to state 139 State 747 242 frame_exclude : GROUP . $default reduce using rule 242(frame_exclude) State 748 241 frame_exclude : CURRENT.ROW ROW shift, and go to state 765 State 749 240 frame_exclude : NO.OTHERS OTHERS shift, and go to state 766 State 750 243 frame_exclude : TIES. $default reduce using rule 243(frame_exclude) State 751 238 opt_frame_exclude : EXCLUDE frame_exclude . $default reduce using rule 238(opt_frame_exclude) State 752 80 assign_list : assign_list ',' assign_clause. $default reduce using rule 80(assign_list) State 753 84 assign_clause : column_name_list '=' expr .317 logic_expr : expr.AND expr 318 | expr.OR expr AND shift, and go to state 214 OR shift, and go to state 216 $default reduce using rule 84(assign_clause) State 754 86 column_name_list : column_name_list ',' column_name . $default reduce using rule 86(column_name_list) State 755 73 upsert_clause : ON CONFLICT '(' indexed_column_list ')' opt_where DO UPDATE.SET assign_list opt_where SET shift, and go to state 767 State 756 72 upsert_clause : ON CONFLICT '(' indexed_column_list ')' opt_where DO NOTHING . $default reduce using rule 72(upsert_clause) State 757 374 table_ref : table_prefix '(' select_no_paren ')' opt_alias opt_on opt_using. $default reduce using rule 374(table_ref) State 758 375 table_ref : table_prefix '(' table_ref ')' opt_alias opt_on opt_using . $default reduce using rule 375(table_ref) State 759 373 table_ref : table_prefix table_name '(' expr_list ')' opt_alias opt_on.opt_using USING shift, and go to state 739 $default reduce using rule 389(opt_using) opt_using go to state 768 State 760 388 opt_using : USING '('.ident_commalist ')' IDENTIFIER shift, and go to state 436 ident_commalist go to state 769 State 761 220 windowdefn : IDENTIFIER AS '(' window.')' ')' shift, and go to state 770 State 762 234 frame_bound_e : UNBOUNDED.FOLLOWING FOLLOWING shift, and go to state 771 State 763 226 opt_frame : range_or_rows BETWEEN frame_bound_s AND frame_bound_e.opt_frame_exclude EXCLUDE shift, and go to state 725 $default reduce using rule 239(opt_frame_exclude) opt_frame_exclude go to state 772 State 764 233 frame_bound_e : frame_bound . $default reduce using rule 233(frame_bound_e) State 765 241 frame_exclude : CURRENT ROW. $default reduce using rule 241(frame_exclude) State 766 240 frame_exclude : NO OTHERS. $default reduce using rule 240(frame_exclude) State 767 73 upsert_clause : ON CONFLICT '(' indexed_column_list ')' opt_where DO UPDATE SET.assign_list opt_where IDENTIFIER shift, and go to state 468 '*' shift, and go to state 113 assign_list go to state 773 assign_clause go to state 696 column_name_list go to state 697 column_name go to state 698 State 768 373 table_ref : table_prefix table_name '(' expr_list ')' opt_alias opt_on opt_using . $default reduce using rule 373(table_ref) State 769 388 opt_using : USING '(' ident_commalist.')' 415 ident_commalist : ident_commalist.',' IDENTIFIER ')' shift, and go to state 774 ',' shift, and go to state 502 State 770 220 windowdefn : IDENTIFIER AS '(' window ')'. $default reduce using rule 220(windowdefn) State 771 234 frame_bound_e : UNBOUNDED FOLLOWING . $default reduce using rule 234(frame_bound_e) State 772 226 opt_frame : range_or_rows BETWEEN frame_bound_s AND frame_bound_e opt_frame_exclude. $default reduce using rule 226(opt_frame) State 773 73 upsert_clause : ON CONFLICT '(' indexed_column_list ')' opt_where DO UPDATE SET assign_list.opt_where 80 assign_list : assign_list.',' assign_clause WHERE shift, and go to state 278 ',' shift, and go to state 729 $default reduce using rule 251(opt_where) opt_where go to state 775 State 774 388 opt_using : USING '(' ident_commalist ')'. $default reduce using rule 388(opt_using) State 775 73 upsert_clause : ON CONFLICT '(' indexed_column_list ')' opt_where DO UPDATE SET assign_list opt_where. $default reduce using rule 73(upsert_clause) ================================================ FILE: srcs/internal/sqlite/parser/bison_parser.y ================================================ % { /** * bison_parser.y * defines bison_parser.h * outputs bison_parser.c * * Grammar File Spec: http://dinosaur.compilertools.net/bison/bison_6.html * */ /********************************* ** Section 1: C Declarations *********************************/ #include #include #include "bison_parser.h" #include "flex_lexer.h" int yyerror(YYLTYPE * llocp, Program* result, yyscan_t scanner, const char* msg){return 0; } % } /********************************* ** Section 2: Bison Parser Declarations *********************************/ // Specify code that is included in the generated .h and .c files % code requires { // %code requires block #include "../include/ast.h" #include "../include/define.h" //#include "../include/utils.h" #include "parser_typedef.h" // Auto update column and line number #define YY_USER_ACTION \ yylloc->first_line = yylloc->last_line; \ yylloc->first_column = yylloc->last_column; \ for (int i = 0; yytext[i] != '\0'; i++) { \ yylloc->total_column++; \ yylloc->string_length++; \ if (yytext[i] == '\n') { \ yylloc->last_line++; \ yylloc->last_column = 0; \ } else { \ yylloc->last_column++; \ } \ } } // Define the names of the created files (defined in Makefile) // %output "bison_parser.cpp" // %defines "bison_parser.h" // Tell bison to create a reentrant parser % define api.pure full // Prefix the parser % define api.prefix{hsql_} % define api.token.prefix{SQL_} % define parse.error verbose % locations % initial - action { // Initialize @$.first_column = 0; @$.last_column = 0; @$.first_line = 0; @$.last_line = 0; @$.total_column = 0; @$.string_length = 0; }; // Define additional parameters for yylex // (http://www.gnu.org/software/bison/manual/html_node/Pure-Calling.html) % lex - param{yyscan_t scanner} // Define additional parameters for yyparse % parse - param{Program * result} % parse - param{yyscan_t scanner} /********************************* ** Define all data-types *(http://www.gnu.org/software/bison/manual/html_node/Union-Decl.html) *********************************/ % union HSQL_STYPE { double fval; int64_t ival; char* sval; uintmax_t uval; bool bval; Program* program_t; StatementList* statement_list_t; Statement* statement_t; PreparableStatement* preparable_statement_t; OptionalHints* optional_hints_t; HintList* hint_list_t; Hint* hint_t; PrepareStatement* prepare_statement_t; PrepareTargetQuery* prepare_target_query_t; ExecuteStatement* execute_statement_t; ImportStatement* import_statement_t; ImportFileType* import_file_type_t; FilePath* file_path_t; TableRefCommaList* table_ref_commalist_t; ShowStatement* show_statement_t; CreateStatement* create_statement_t; OptNotExists* opt_not_exists_t; ColumnDefCommaList* column_def_comma_list_t; ColumnDef* column_def_t; ColumnType* column_type_t; // OptColumnNullable* opt_column_nullable_t; DropStatement* drop_statement_t; OptExists* opt_exists_t; DeleteStatement* delete_statement_t; InsertStatement* insert_statement_t; OptColumnList* opt_column_list_t; UpdateStatement* update_statement_t; UpdateClauseCommalist* update_clause_commalist_t; UpdateClause* update_clause_t; SelectStatement* select_statement_t; SelectWithParen* select_with_paren_t; SelectParenOrClause* select_paren_or_clause_t; SelectNoParen* select_no_paren_t; SetOperator* set_operator_t; SetType* set_type_t; OptAll* opt_all_t; IdentCommaList* ident_commalist_t; SelectClause* select_clause_t; OptDistinct* opt_distinct_t; SelectList* select_list_t; OptFromClause* opt_from_clause_t; FromClause* from_clause_t; OptWhere* opt_where_t; OptGroup* opt_group_t; OptHaving* opt_having_t; OptOrder* opt_order_t; OrderList* order_list_t; OrderDesc* order_desc_t; OptOrderType* opt_order_type_t; OptTop* opt_top_t; OptLimit* opt_limit_t; ExprList* expr_list_t; OptLiteralList* opt_literal_list_t; LiteralList* literal_list_t; ExprAlias* expr_alias_t; Expr* expr_t; Operand* operand_t; ScalarExpr* scalar_expr_t; UnaryExpr* unary_expr_t; BinaryExpr* binary_expr_t; LogicExpr* logic_expr_t; InExpr* in_expr_t; CompExpr* comp_expr_t; CaseExpr* case_expr_t; CaseClause* case_clause_t; CaseList* case_list_t; ExistsExpr* exists_expr_t; FunctionExpr* function_expr_t; ExtractExpr* extract_expr_t; DatetimeField* datetime_field_t; ArrayExpr* array_expr_t; ArrayIndex* array_index_t; BetweenExpr* between_expr_t; ColumnName* column_name_t; Literal* literal_t; StringLiteral* string_literal_t; BoolLiteral* bool_literal_t; NumLiteral* num_literal_t; IntLiteral* int_literal_t; NullLiteral* null_literal_t; ParamExpr* param_expr_t; TableRef* table_ref_t; TableRefAtomic* table_ref_atomic_t; NonjoinTableRefAtomic* nonjoin_table_ref_atomic_t; TableRefName* table_ref_name_t; TableRefNameNoAlias* table_ref_name_no_alias_t; TableName* table_name_t; TableAlias* table_alias_t; OptTableAlias* opt_table_alias_t; Alias* alias_t; OptAlias* opt_alias_t; OptWithClause* opt_with_clause_t; WithClause* with_clause_t; WithDescriptionList* with_description_list_t; WithDescription* with_description_t; JoinClause* join_clause_t; OptJoinType* opt_join_type_t; JoinCondition* join_condition_t; OptSemicolon* opt_semicolon_t; Identifier* identifier_t; Cmd* cmd_t; CmdAttach* cmd_attach_t; CmdDetach* cmd_detach_t; CmdReindex* cmd_reindex_t; CmdAnalyze* cmd_analyze_t; CmdPragma* cmd_pragma_t; PragmaKey* pragma_key_t; PragmaValue* pragma_value_t; PragmaName* pragma_name_t; SchemaName* schema_name_t; OptColumnArglist* opt_column_arglist_t; ColumnArglist* column_arglist_t; ColumnArg* column_arg_t; OptOnConflict* opt_on_conflict_t; ResolveType* resolve_type_t; OptAutoinc* opt_autoinc_t; OptUnique* opt_unique_t; IndexName* index_name_t; TriggerDeclare* trigger_declare_t; OptTmp* opt_tmp_t; TriggerName* trigger_name_t; OptTriggerTime* opt_trigger_time_t; TriggerEvent* trigger_event_t; OptOfColumnList* opt_of_column_list_t; OptForEach* opt_for_each_t; OptWhen* opt_when_t; TriggerCmdList* trigger_cmd_list_t; TriggerCmd* trigger_cmd_t; ModuleName* module_name_t; OptOverClause* opt_over_clause_t; OptFilterClause* opt_filter_clause_t; WindowClause* window_clause_t; WindowDefnList* window_defn_list_t; WindowDefn* window_defn_t; Window* window_t; OptBaseWindowName* opt_base_window_name_t; OptFrame* opt_frame_t; RangeOrRows* range_or_rows_t; FrameBoundS* frame_bound_s_t; FrameBoundE* frame_bound_e_t; FrameBound* frame_bound_t; OptFrameExclude* opt_frame_exclude_t; FrameExclude* frame_exclude_t; InsertType* insert_type_t; SuperList* super_list_t; JoinKw* join_kw_t; TablePrefix* table_prefix_t; JoinOp* join_op_t; OptIndex* opt_index_t; OptOn* opt_on_t; OptUsing* opt_using_t; CastExpr* cast_expr_t; AlterStatement* alter_statement_t; OptColumn* opt_column_t; CmdRelease* cmd_release_t; SavepointName* savepoint_name_t; VacuumStatement* vacuum_statement_t; OptSchemaName* opt_schema_name_t; RollbackStatement* rollback_statement_t; OptTransaction* opt_transaction_t; OptToSavepoint* opt_to_savepoint_t; BeginStatement* begin_statement_t; CommitStatement* commit_statement_t; UpsertClause* upsert_clause_t; IndexedColumnList* indexed_column_list_t; IndexedColumn* indexed_column_t; OptCollate* opt_collate_t; AssignList* assign_list_t; OptNull* opt_null_t; AssignClause* assign_clause_t; ColumnNameList* column_name_list_t; CollationName* collation_name_t; OptUpsertClause* opt_upsert_clause_t; std::vector* str_vec; std::vector* table_vec; std::vector* column_vec; std::vector* update_vec; std::vector* expr_vec; std::vector* order_vec; std::vector* with_description_vec; } /********************************* ** Token Definition *********************************/ % token STRING IDENTIFIER % token FLOATVAL % token INTVAL //%token IDENTIFIER /* SQL Keywords */ % token DEALLOCATE PARAMETERS INTERSECT TEMPORARY TIMESTAMP % token DISTINCT NVARCHAR RESTRICT TRUNCATE ANALYZE BETWEEN % token CASCADE COLUMNS CONTROL DEFAULT EXECUTE EXPLAIN % token INTEGER NATURAL PREPARE PRIMARY SCHEMAS % token SPATIAL VARCHAR VIRTUAL DESCRIBE BEFORE COLUMN CREATE DELETE DIRECT % token DOUBLE ESCAPE EXCEPT EXISTS EXTRACT GLOBAL HAVING IMPORT % token INSERT ISNULL OFFSET RENAME SCHEMA SELECT SORTED % token TABLES UNIQUE UNLOAD UPDATE VALUES AFTER ALTER CROSS % token DELTA FLOAT GROUP INDEX INNER LIMIT LOCAL MERGE MINUS ORDER % token OUTER RIGHT TABLE UNION USING WHERE CALL CASE CHAR DATE % token DESC DROP ELSE FILE FROM FULL HASH HINT INTO JOIN % token LEFT LIKE LOAD LONG NULL PLAN SHOW TEXT THEN TIME % token VIEW WHEN WITH ADD ALL AND ASC CSV END FOR INT KEY % token NOT OFF SET TBL TOP AS BY IF IN IS OF ON OR TO % token ARRAY CONCAT ILIKE SECOND MINUTE HOUR DAY MONTH YEAR % token TRUE FALSE /* For SQLite */ % token PRAGMA REINDEX GENERATED ALWAYS CHECK CONFLICT IGNORE REPLACE ROLLBACK % token ABORT FAIL AUTOINCR BEGIN TRIGGER TEMP INSTEAD EACH ROW OVER FILTER PARTITION % token CURRENT EXCLUDE FOLLOWING GROUPS NO OTHERS PRECEDING RANGE ROWS TIES UNBOUNDED WINDOW % token ATTACH DETACH DATABASE INDEXED CAST SAVEPOINT RELEASE VACUUM TRANSACTION DEFFERED EXCLUSIVE % token IMEDIATE COMMIT GLOB MATCH REGEX NOTHING NULLS LAST FIRST DO COLLATE % type input % type statement_list % type statement % type preparable_statement % type opt_hints % type hint_list % type hint % type prepare_statement % type prepare_target_query % type execute_statement % type import_statement % type import_file_type % type file_path % type show_statement % type create_statement % type opt_not_exists % type column_def_commalist % type column_def % type column_type % type drop_statement % type opt_exists % type delete_statement truncate_statement % type insert_statement % type opt_column_list % type update_statement % type update_clause_commalist % type update_clause % type select_statement % type select_with_paren % type select_paren_or_clause % type select_no_paren % type set_operator % type set_type % type opt_all % type select_clause % type opt_distinct % type select_list % type opt_from_clause % type from_clause % type opt_where % type opt_group % type opt_having % type opt_order % type order_list % type order_desc % type opt_order_type % type opt_top % type opt_limit % type expr_list % type opt_literal_list % type literal_list % type expr_alias % type expr % type operand % type scalar_expr % type unary_expr % type binary_expr % type logic_expr % type in_expr % type comp_expr % type case_expr % type case_list % type exists_expr % type function_expr % type extract_expr % type datetime_field % type array_expr % type array_index % type between_expr % type column_name % type literal % type string_literal % type bool_literal % type num_literal % type int_literal % type null_literal % type param_expr % type table_ref % type table_ref_name_no_alias % type table_name % type alias % type opt_alias % type opt_with_clause % type with_clause % type with_description_list % type with_description % type opt_semicolon % type ident_commalist % type table_prefix % type join_op % type opt_index % type opt_on % type opt_using % type join_kw % type cmd % type cmd_attach % type cmd_detach % type cmd_analyze % type cmd_reindex % type cmd_pragma % type pragma_key % type pragma_value % type pragma_name % type schema_name % type opt_column_arglist % type column_arglist % type column_arg % type opt_on_conflict % type resolve_type % type opt_autoinc % type opt_unique % type index_name % type trigger_declare % type opt_tmp % type trigger_name % type opt_trigger_time % type trigger_event % type opt_of_column_list % type opt_for_each % type opt_when % type trigger_cmd_list % type trigger_cmd % type module_name % type opt_over_clause % type opt_filter_clause % type window_clause % type windowdefn_list % type windowdefn % type window % type opt_base_window_name % type opt_frame % type range_or_rows % type frame_bound_s % type frame_bound_e % type frame_bound % type opt_frame_exclude % type frame_exclude % type insert_type % type super_list % type cast_expr % type alter_statement % type opt_column % type cmd_release % type savepoint_name % type vacuum_statement % type opt_schema_name % type rollback_statement % type opt_transaction % type opt_to_savepoint % type begin_statement % type commit_statement % type upsert_clause % type indexed_column_list % type indexed_column % type opt_collate % type assign_list % type opt_null % type assign_clause % type column_name_list % type collation_name % type opt_upsert_clause /********************************* ** Destructor symbols *********************************/ % destructor{} /* */ % destructor { free(($$)); } /* %destructor { cout << "try to delete column_name_t" << endl; if($$ != NULL){ if($$->identifier1_) delete $$->identifier1_; if($$->identifier2_) delete $$->identifier2_; } delete $$; } column_name %destructor{ cout << "try to delete table_name_t" << endl; if($$ != NULL){ delete($$->table_name_); delete($$->database_name_); } delete $$; } table_name %destructor{ cout << "duck here" << endl; if($$ != NULL){ delete($$->id_); } delete $$; } %destructor{ cout << "duck me" << endl; if($$ != NULL){ for(auto &i: $$->v_expr_list_){ delete(i); } delete($$); } } */ % destructor { if ($$ != NULL) $$->deep_delete(); } <*> /****************************** ** Token Precedence and Associativity ** Precedence: lowest to highest ******************************/ % left OR % left AND % right NOT % nonassoc '=' EQUALS NOTEQUALS LIKE ILIKE GLOB MATCH REGEX % nonassoc '<' '>' LESS GREATER LESSEQ GREATEREQ % nonassoc NOTNULL % nonassoc ISNULL % nonassoc IS /* sets precedence for IS NULL, etc */ % left '+' '-' % left '*' '/' '%' % left '^' % left CONCAT /* Unary Operators */ % right UMINUS % left '[' ']' % left '(' ')' % left '.' % right JOIN % % /********************************* ** Section 3: Grammar Definition *********************************/ // Defines our general input. input : statement_list opt_semicolon { $$ = NULL; result->statement_list_ = $1; result->opt_semicolon_ = $2; }; statement_list : statement { $$ = new StatementList(); $$->v_statement_list_.push_back($1); } | statement_list ';' statement { $1->v_statement_list_.push_back($3); $$ = $1; }; statement : prepare_statement opt_hints { $$ = new Statement(); $$->sub_type_ = CASE1; $$->prepare_statement_ = $1; $$->optional_hints_ = $2; } | preparable_statement opt_hints { $$ = new Statement(); $$->sub_type_ = CASE0; $$->preparable_statement_ = $1; $$->optional_hints_ = $2; } | show_statement { $$ = new Statement(); $$->sub_type_ = CASE2; $$->show_statement_ = $1; } | cmd { $$ = new Statement(); $$->sub_type_ = CASE3; $$->cmd_ = $1; }; cmd : cmd_pragma { $$ = $1; } | cmd_reindex { $$ = $1; } | cmd_analyze { $$ = $1; } | cmd_attach { $$ = $1; } | cmd_detach { $$ = $1; } | cmd_release { $$ = $1; } | rollback_statement { $$ = $1; } | vacuum_statement { $$ = $1; } | begin_statement { $$ = $1; } | commit_statement { $$ = $1; }; cmd_release : RELEASE SAVEPOINT savepoint_name { $$ = new CmdRelease(); $$->sub_type_ = CASE0; $$->savepoint_name_ = $3; } | RELEASE savepoint_name { $$ = new CmdRelease(); $$->sub_type_ = CASE1; $$->savepoint_name_ = $2; }; savepoint_name : IDENTIFIER { $$ = new SavepointName(); $$->id_ = new Identifier($1, id_savepoint_name); free($1); }; cmd_pragma : PRAGMA pragma_key { $$ = new CmdPragma(); $$->sub_type_ = CASE0; $$->pragma_key_ = $2; } | PRAGMA pragma_key '=' pragma_value { $$ = new CmdPragma(); $$->sub_type_ = CASE1; $$->pragma_key_ = $2; $$->pragma_value_ = $4; } | PRAGMA pragma_key '(' pragma_value ')' { $$ = new CmdPragma(); $$->sub_type_ = CASE2; $$->pragma_key_ = $2; $$->pragma_value_ = $4; }; cmd_reindex : REINDEX { $$ = new CmdReindex(); $$->sub_type_ = CASE0; } | REINDEX table_name { $$ = new CmdReindex(); $$->sub_type_ = CASE1; $$->table_name_ = $2; $$->table_name_->table_name_->id_type_ = id_top_table_name; }; cmd_analyze : ANALYZE { $$ = new CmdAnalyze(); $$->sub_type_ = CASE0; } | ANALYZE table_name { $$ = new CmdAnalyze(); $$->sub_type_ = CASE1; $$->table_name_ = $2; $$->table_name_->table_name_->id_type_ = id_top_table_name; }; cmd_attach : ATTACH expr AS schema_name { $$ = new CmdAttach(); $$->sub_type_ = CASE0; $$->expr_ = $2; $$->schema_name_ = $4; } | ATTACH DATABASE expr AS schema_name { $$ = new CmdAttach(); $$->sub_type_ = CASE1; $$->expr_ = $3; $$->schema_name_ = $5; }; cmd_detach : DETACH schema_name { $$ = new CmdDetach(); $$->sub_type_ = CASE0; $$->schema_name_ = $2; } | DETACH DATABASE schema_name { $$ = new CmdDetach(); $$->sub_type_ = CASE1; $$->schema_name_ = $3; }; pragma_key : pragma_name { $$ = new PragmaKey(); $$->sub_type_ = CASE0; $$->pragma_name_ = $1; } | schema_name '.' pragma_name { $$ = new PragmaKey(); $$->sub_type_ = CASE1; $$->schema_name_ = $1; $$->pragma_name_ = $3; }; pragma_value : num_literal { $$ = new PragmaValue(); $$->sub_type_ = CASE0; $$->num_literal_ = $1; } | string_literal { $$ = new PragmaValue(); $$->sub_type_ = CASE1; $$->string_literal_ = $1; } | IDENTIFIER { $$ = new PragmaValue(); $$->sub_type_ = CASE2; $$->id_ = new Identifier($1, id_pragma_value); free($1); } | ON { $$ = new PragmaValue(); $$->sub_type_ = CASE2; $$->id_ = new Identifier("ON", id_pragma_value); } | DELETE { $$ = new PragmaValue(); $$->sub_type_ = CASE2; $$->id_ = new Identifier("DELETE", id_pragma_value); } | DEFAULT { $$ = new PragmaValue(); $$->sub_type_ = CASE2; $$->id_ = new Identifier("DEFAULT", id_pragma_value); }; schema_name : IDENTIFIER { $$ = new SchemaName(); $$->id_ = new Identifier($1, id_schema_name); free($1); }; pragma_name : IDENTIFIER { $$ = new PragmaName(); $$->id_ = new Identifier($1, id_pragma_name); free($1); }; preparable_statement : select_statement { $$ = $1; } | import_statement { $$ = $1; } | create_statement { $$ = $1; } | insert_statement { $$ = $1; } | delete_statement { $$ = $1; } | truncate_statement { $$ = $1; } | update_statement { $$ = $1; } | drop_statement { $$ = $1; } | execute_statement { $$ = $1; } | alter_statement { $$ = $1; }; rollback_statement : // add z ROLLBACK opt_transaction opt_to_savepoint { $$ = new RollbackStatement(); $$->opt_transaction_ = $2; $$->opt_to_savepoint_ = $3; }; opt_transaction : // add z TRANSACTION { $$ = new OptTransaction(); $$->sub_type_ = CASE0; $$->str_val_ = string("TRANSACTION"); } | /* empty */ { $$ = new OptTransaction(); $$->sub_type_ = CASE1; $$->str_val_ = string(""); }; opt_to_savepoint : // add z TO savepoint_name { $$ = new OptToSavepoint(); $$->sub_type_ = CASE0; $$->savepoint_name_ = $2; } | TO SAVEPOINT savepoint_name { $$ = new OptToSavepoint(); $$->sub_type_ = CASE1; $$->savepoint_name_ = $3; } | /* empty */ { $$ = new OptToSavepoint(); $$->sub_type_ = CASE2; }; vacuum_statement : // add z VACUUM opt_schema_name INTO file_path { $$ = new VacuumStatement(); $$->sub_type_ = CASE0; $$->opt_schema_name_ = $2; $$->file_path_ = $4; } | VACUUM opt_schema_name { $$ = new VacuumStatement(); $$->sub_type_ = CASE1; $$->opt_schema_name_ = $2; }; opt_schema_name : // add z schema_name { $$ = new OptSchemaName(); $$->sub_type_ = CASE0; $$->schema_name_ = $1; } | /*empty*/ { $$ = new OptSchemaName(); $$->sub_type_ = CASE1; }; begin_statement : // add z BEGIN opt_transaction { $$ = new BeginStatement(); $$->sub_type_ = CASE0; $$->opt_transaction_ = $2; } | BEGIN DEFFERED opt_transaction { $$ = new BeginStatement(); $$->sub_type_ = CASE1; $$->opt_transaction_ = $3; } | BEGIN IMEDIATE opt_transaction { $$ = new BeginStatement(); $$->sub_type_ = CASE2; $$->opt_transaction_ = $3; } | BEGIN EXCLUSIVE opt_transaction { $$ = new BeginStatement(); $$->sub_type_ = CASE3; $$->opt_transaction_ = $3; }; commit_statement : // add z COMMIT opt_transaction { $$ = new CommitStatement(); $$->sub_type_ = CASE0; $$->opt_transaction_ = $2; } | END opt_transaction { $$ = new CommitStatement(); $$->sub_type_ = CASE1; $$->opt_transaction_ = $2; }; opt_upsert_clause : upsert_clause { $$ = new OptUpsertClause(); $$->sub_type_ = CASE0; $$->upsert_clause_ = $1; } | /* empty */ { $$ = new OptUpsertClause(); $$->sub_type_ = CASE1; } upsert_clause : ON CONFLICT DO NOTHING { $$ = new UpsertClause(); $$->sub_type_ = CASE0; } | ON CONFLICT DO UPDATE SET assign_list opt_where { $$ = new UpsertClause(); $$->sub_type_ = CASE1; $$->assign_list_ = $6; $$->opt_where1_ = $7; } | ON CONFLICT '(' indexed_column_list ')' opt_where DO NOTHING { $$ = new UpsertClause(); $$->sub_type_ = CASE2; $$->indexed_column_list_ = $4; $$->opt_where1_ = $6; } | ON CONFLICT '(' indexed_column_list ')' opt_where DO UPDATE SET assign_list opt_where { $$ = new UpsertClause(); $$->sub_type_ = CASE3; $$->indexed_column_list_ = $4; $$->opt_where1_ = $6; $$->assign_list_ = $10; $$->opt_where2_ = $11; } ; indexed_column_list : indexed_column { $$ = new IndexedColumnList(); $$->v_indexed_column_list_.push_back($1); } | indexed_column_list ',' indexed_column { $1->v_indexed_column_list_.push_back($3); $$ = $1; }; indexed_column : expr opt_collate opt_order_type { $$ = new IndexedColumn(); $$->expr_ = $1; $$->opt_collate_ = $2; $$->opt_order_type_ = $3; }; opt_collate : COLLATE collation_name { $$ = new OptCollate(); $$->sub_type_ = CASE0; $$->collation_name_ = $2; } | /* empty */ { $$ = new OptCollate(); $$->sub_type_ = CASE1; $$->str_val_ = string(""); }; assign_list : assign_clause { $$ = new AssignList(); $$->v_assign_list_.push_back($1); } | assign_list ',' assign_clause { $1->v_assign_list_.push_back($3); $$ = $1; }; opt_null : NULLS FIRST { $$ = new OptNull(); $$->str_val_ = string("NULLS FIRST"); } | NULLS LAST { $$ = new OptNull(); $$->str_val_ = string("NULLS LAST"); } | { $$ = new OptNull(); $$->str_val_ = string(""); }; assign_clause : column_name_list '=' expr { $$ = new AssignClause(); $$->column_name_list_ = $1; $$->expr_ = $3; }; column_name_list : column_name { $$ = new ColumnNameList(); $$->v_column_name_list_.push_back($1); } | column_name_list ',' column_name { $1->v_column_name_list_.push_back($3); $$ = $1; }; collation_name : IDENTIFIER { $$ = new CollationName(); $$->id_ = new Identifier($1, id_collation_name); free($1); }; /****************************** * Hints ******************************/ opt_hints : WITH HINT '(' hint_list ')' { $$ = new OptionalHints(); $$->sub_type_ = CASE0; $$->hint_list_ = $4; } | /* empty */ { $$ = new OptionalHints(); $$->sub_type_ = CASE1; }; hint_list : hint { $$ = new HintList(); $$->v_hint_list_.push_back($1); } | hint_list ',' hint { $1->v_hint_list_.push_back($3); $$ = $1; }; hint : IDENTIFIER { $$ = new Hint(); $$->sub_type_ = CASE1; $$->id_ = new Identifier($1); free($1); } | IDENTIFIER '(' literal_list ')' { $$ = new Hint(); $$->sub_type_ = CASE0; $$->id_ = new Identifier($1); $$->literal_list_ = $3; free($1); }; /****************************** * Prepared Statement ******************************/ prepare_statement : PREPARE IDENTIFIER FROM prepare_target_query { $$ = new PrepareStatement(); $$->id_ = new Identifier($2); $$->prep_target_que_ = $4; free($2); }; prepare_target_query : STRING { $$ = new PrepareTargetQuery(); $$->prep_target_que_ = "'" + string($1) + "'"; free($1); }; execute_statement : EXECUTE IDENTIFIER { $$ = new ExecuteStatement(); $$->sub_type_ = CASE0; $$->id_ = new Identifier($2); free($2); } | EXECUTE IDENTIFIER '(' opt_literal_list ')' { $$ = new ExecuteStatement(); $$->sub_type_ = CASE1; $$->id_ = new Identifier($2); $$->opt_literal_list_ = $4; free($2); }; /****************************** * Import Statement ******************************/ import_statement : IMPORT FROM import_file_type FILE file_path INTO table_name { $$ = new ImportStatement(); $$->import_file_type_ = $3; $$->file_path_ = $5; $$->table_name_ = $7; }; import_file_type : CSV { $$ = new ImportFileType(); $$->str_val_ = "CSV"; }; file_path : string_literal { $$ = new FilePath(); $$->str_val_ = $1->str_val_; delete ($1); }; /****************************** * Show Statement * SHOW TABLES; ******************************/ show_statement : SHOW TABLES { $$ = new ShowStatement(); $$->sub_type_ = CASE0; } | SHOW COLUMNS table_name { $$ = new ShowStatement(); $$->sub_type_ = CASE1; $$->table_name_ = $3; $$->table_name_->table_name_->id_type_ = id_top_table_name; } | DESCRIBE table_name { $$ = new ShowStatement(); $$->sub_type_ = CASE2; $$->table_name_ = $2; $$->table_name_->table_name_->id_type_ = id_top_table_name; }; /***************************** * Alter statement * ALTER TABLE a RENAME TO b; * ALTER TABLE a ADD COLUMN c(name INT); *****************************/ alter_statement : ALTER TABLE table_name RENAME TO table_name { $$ = new AlterStatement(); $$->sub_type_ = CASE0; $$->table_name1_ = $3; $$->table_name2_ = $6; } | ALTER TABLE table_name RENAME opt_column column_name TO column_name { $$ = new AlterStatement(); $$->sub_type_ = CASE1; $$->table_name1_ = $3; $$->opt_column_ = $5; $$->column_name1_ = $6; $$->column_name2_ = $8; } | ALTER TABLE table_name ADD opt_column column_def { $$ = new AlterStatement(); $$->sub_type_ = CASE2; $$->table_name1_ = $3; $$->opt_column_ = $5; $$->column_def_ = $6; }; opt_column : COLUMN { $$ = new OptColumn(); $$->sub_type_ = CASE0; $$->str_val_ = string("COLUMN"); } | /* empty */ { $$ = new OptColumn(); $$->sub_type_ = CASE1; $$->str_val_ = string(""); }; /****************************** * Create Statement * CREATE TABLE students (name TEXT, student_number INTEGER, city TEXT, grade *DOUBLE) CREATE TABLE students FROM TBL FILE 'test/students.tbl' ******************************/ create_statement : CREATE TABLE opt_not_exists table_name FROM TBL FILE file_path { $$ = new CreateStatement(); $$->sub_type_ = CASE0; $$->opt_not_exists_ = $3; $$->table_name_ = $4; $$->file_path_ = $8; $$->table_name_->table_name_->id_type_ = id_create_table_name; } | CREATE TABLE opt_not_exists table_name '(' column_def_commalist ')' { $$ = new CreateStatement(); $$->sub_type_ = CASE1; $$->opt_not_exists_ = $3; $$->table_name_ = $4; $$->column_def_comma_list_ = $6; $$->table_name_->table_name_->id_type_ = id_create_table_name; } | CREATE TABLE opt_not_exists table_name AS select_statement { $$ = new CreateStatement(); $$->sub_type_ = CASE2; $$->opt_not_exists_ = $3; $$->table_name_ = $4; $$->select_statement_ = $6; $$->table_name_->table_name_->id_type_ = id_create_table_name; } | CREATE VIEW opt_not_exists table_name opt_column_list AS select_statement { $$ = new CreateStatement(); $$->sub_type_ = CASE3; $$->opt_not_exists_ = $3; $$->table_name_ = $4; $$->table_name_->table_name_->id_type_ = id_create_table_name; $$->opt_column_list_ = $5; if ($$->opt_column_list_->sub_type_ == CASE0) for (auto& i : $$->opt_column_list_->ident_comma_list_->v_iden_comma_list_) { i->id_type_ = id_create_column_name; } $$->select_statement_ = $7; $$->table_name_->table_name_->id_type_ = id_create_table_name; } // add 2 | CREATE opt_unique INDEX opt_not_exists index_name ON table_name '(' ident_commalist ')' opt_where { $$ = new CreateStatement(); $$->sub_type_ = CASE4; $$->opt_unique_ = $2; $$->opt_not_exists_ = $4; $$->index_name_ = $5; $$->table_name_ = $7; $$->table_name_->table_name_->id_type_ = id_top_table_name; $$->ident_commalist_ = $9; for (auto& i : $$->ident_commalist_->v_iden_comma_list_) { i->id_type_ = id_column_name; } $$->opt_where_ = $11; } | CREATE VIRTUAL TABLE opt_not_exists table_name USING module_name { $$ = new CreateStatement(); $$->sub_type_ = CASE5; $$->opt_not_exists_ = $4; $$->table_name_ = $5; $$->module_name_ = $7; $$->table_name_->table_name_->id_type_ = id_create_table_name; } | CREATE VIRTUAL TABLE opt_not_exists table_name USING module_name '(' column_def_commalist ')' { $$ = new CreateStatement(); $$->sub_type_ = CASE6; $$->opt_not_exists_ = $4; $$->table_name_ = $5; $$->module_name_ = $7; $$->table_name_->table_name_->id_type_ = id_create_table_name; $$->column_def_comma_list_ = $9; } | CREATE trigger_declare BEGIN trigger_cmd_list END { $$ = new CreateStatement(); $$->sub_type_ = CASE7; $$->trigger_declare_ = $2; $$->trigger_cmd_list_ = $4; }; opt_unique : UNIQUE { $$ = new OptUnique(); $$->str_val_ = string("UNIQUE"); } | /* empty */ { $$ = new OptUnique(); $$->str_val_ = string(""); }; index_name : IDENTIFIER { $$ = new IndexName(); $$->id_ = new Identifier($1, id_index_name); free($1); }; trigger_declare : opt_tmp TRIGGER opt_not_exists trigger_name opt_trigger_time trigger_event ON table_name opt_for_each opt_when { $$ = new TriggerDeclare(); $$->opt_tmp_ = $1; $$->opt_not_exists_ = $3; $$->trigger_name_ = $4; $$->opt_trigger_time_ = $5; $$->trigger_event_ = $6; $$->table_name_ = $8; $$->opt_for_each_ = $9; $$->opt_when_ = $10; }; opt_tmp : TEMP { $$ = new OptTmp(); $$->str_val_ = string("TEMP"); } | /* empty */ { $$ = new OptTmp(); $$->str_val_ = string(""); }; trigger_name : IDENTIFIER { $$ = new TriggerName(); $$->id_ = new Identifier($1, id_trigger_name); free($1); }; opt_trigger_time : BEFORE { $$ = new OptTriggerTime(); $$->str_val_ = string("BEFORE"); } | AFTER { $$ = new OptTriggerTime(); $$->str_val_ = string("AFTER"); } | INSTEAD OF { $$ = new OptTriggerTime(); $$->str_val_ = string("INSTEAD OF"); } | /* empty */ { $$ = new OptTriggerTime(); $$->str_val_ = string(""); }; trigger_event : DELETE { $$ = new TriggerEvent(); $$->sub_type_ = CASE0; } | INSERT { $$ = new TriggerEvent(); $$->sub_type_ = CASE1; } | UPDATE opt_of_column_list { $$ = new TriggerEvent(); $$->sub_type_ = CASE2; $$->opt_of_column_list_ = $2; }; opt_of_column_list : OF ident_commalist { $$ = new OptOfColumnList(); $$->sub_type_ = CASE0; $$->ident_commalist_ = $2; } | /* empty */ { $$ = new OptOfColumnList(); $$->sub_type_ = CASE1; }; opt_for_each : FOR EACH ROW { $$ = new OptForEach(); $$->str_val_ = string("FOR EACH ROW"); } | /* empty */ { $$ = new OptForEach(); $$->str_val_ = string(""); }; opt_when : WHEN expr { $$ = new OptWhen(); $$->sub_type_ = CASE0; $$->expr_ = $2; } | /* empty */ { $$ = new OptWhen(); $$->sub_type_ = CASE1; }; trigger_cmd_list : trigger_cmd ';' { $$ = new TriggerCmdList(); $$->v_trigger_cmd_list_.push_back($1); } | trigger_cmd_list trigger_cmd ';' { $1->v_trigger_cmd_list_.push_back($2); $$ = $1; }; trigger_cmd : select_statement { $$ = new TriggerCmd(); $$->stmt_ = $1; } | update_statement { $$ = new TriggerCmd(); $$->stmt_ = $1; } | insert_statement { $$ = new TriggerCmd(); $$->stmt_ = $1; } | delete_statement { $$ = new TriggerCmd(); $$->stmt_ = $1; }; module_name : IDENTIFIER { $$ = new ModuleName(); $$->id_ = new Identifier($1); free($1); }; opt_not_exists : IF NOT EXISTS { $$ = new OptNotExists(); $$->sub_type_ = CASE0; } | /* empty */ { $$ = new OptNotExists(); $$->sub_type_ = CASE1; }; column_def_commalist : column_def { $$ = new ColumnDefCommaList(); $$->v_column_def_comma_list_.push_back($1); } | column_def_commalist ',' column_def { $1->v_column_def_comma_list_.push_back($3); $$ = $1; }; column_def : IDENTIFIER column_type opt_column_arglist { $$ = new ColumnDef(); $$->id_ = new Identifier($1, id_create_column_name); $$->column_type_ = $2; $$->opt_column_arglist_ = $3; free($1); }; opt_column_arglist : column_arglist { $$ = new OptColumnArglist(); $$->sub_type_ = CASE0; $$->column_arglist_ = $1; } | /* empty */ { $$ = new OptColumnArglist(); $$->sub_type_ = CASE1; }; column_arglist : column_arglist column_arg { $1->v_column_arg_.push_back($2); $$ = $1; } | column_arg { $$ = new ColumnArglist(); $$->v_column_arg_.push_back($1); }; column_arg : NULL opt_on_conflict { $$ = new ColumnArg(); $$->sub_type_ = CASE0; $$->opt_on_conflict_ = $2; } | NOT NULL opt_on_conflict { $$ = new ColumnArg(); $$->sub_type_ = CASE1; $$->opt_on_conflict_ = $3; } | PRIMARY KEY opt_order_type opt_on_conflict opt_autoinc { $$ = new ColumnArg(); $$->sub_type_ = CASE2; $$->opt_order_type_ = $3; $$->opt_on_conflict_ = $4; $$->opt_autoinc_ = $5; } | UNIQUE opt_on_conflict { $$ = new ColumnArg(); $$->sub_type_ = CASE3; $$->opt_on_conflict_ = $2; } | GENERATED ALWAYS AS '(' expr ')' { $$ = new ColumnArg(); $$->sub_type_ = CASE4; $$->expr_ = $5; } | AS '(' expr ')' { $$ = new ColumnArg(); $$->sub_type_ = CASE5; $$->expr_ = $3; } | CHECK '(' expr ')' { $$ = new ColumnArg(); $$->sub_type_ = CASE6; $$->expr_ = $3; }; opt_on_conflict : ON CONFLICT resolve_type { $$ = new OptOnConflict(); $$->sub_type_ = CASE0; $$->resolve_type_ = $3; } | /* empty */ { $$ = new OptOnConflict(); $$->sub_type_ = CASE1; }; resolve_type : IGNORE { $$ = new ResolveType(); $$->str_val_ = string("IGNORE"); } | REPLACE { $$ = new ResolveType(); $$->str_val_ = string("REPLACE"); } | ROLLBACK { $$ = new ResolveType(); $$->str_val_ = string("ROLLBACK"); } | ABORT { $$ = new ResolveType(); $$->str_val_ = string("ABORT"); } | FAIL { $$ = new ResolveType(); $$->str_val_ = string("FAIL"); }; opt_autoinc : AUTOINCR { $$ = new OptAutoinc(); $$->str_val_ = string("AUTOINCR"); } | /* empty */ { $$ = new OptAutoinc(); $$->str_val_ = string(""); }; column_type : INT { $$ = new ColumnType(); $$->str_val_ = string("INT"); } | INTEGER { $$ = new ColumnType(); $$->str_val_ = string("INTEGER"); } | LONG { $$ = new ColumnType(); $$->str_val_ = string("LONG"); } | FLOAT { $$ = new ColumnType(); $$->str_val_ = string("FLOAT"); } | DOUBLE { $$ = new ColumnType(); $$->str_val_ = string("DOUBLE"); } | VARCHAR '(' INTVAL ')' { $$ = new ColumnType(); $$->str_val_ = string("VARCHAR(") + to_string($3) + ")"; } | CHAR '(' INTVAL ')' { $$ = new ColumnType(); $$->str_val_ = string("CHAR(") + to_string($3) + ")"; } | TEXT { $$ = new ColumnType(); $$->str_val_ = string("TEXT"); } | /* empty*/ { $$ = new ColumnType(); $$->str_val_ = string(""); }; /****************************** * Drop Statement * DROP TABLE students; * DEALLOCATE PREPARE stmt; ******************************/ drop_statement : DROP TABLE opt_exists table_name { $$ = new DropStatement(); $$->sub_type_ = CASE0; $$->opt_exists_ = $3; $$->table_name_ = $4; $$->table_name_->table_name_->id_type_ = id_top_table_name; $$->id_ = NULL; } | DROP VIEW opt_exists table_name { $$ = new DropStatement(); $$->sub_type_ = CASE1; $$->opt_exists_ = $3; $$->table_name_ = $4; $$->table_name_->table_name_->id_type_ = id_top_table_name; $$->id_ = NULL; } | DEALLOCATE PREPARE IDENTIFIER { $$ = new DropStatement(); $$->sub_type_ = CASE2; $$->id_ = new Identifier($3); free($3); } | DROP TRIGGER opt_exists schema_name '.' trigger_name { $$ = new DropStatement(); $$->sub_type_ = CASE3; $$->opt_exists_ = $3; $$->schema_name_ = $4; $$->trigger_name_ = $6; } | DROP TRIGGER opt_exists trigger_name { $$ = new DropStatement(); $$->sub_type_ = CASE4; $$->opt_exists_ = $3; $$->trigger_name_ = $4; }; opt_exists : IF EXISTS { $$ = new OptExists(); $$->str_val_ = string("IF EXISTS"); } | /* empty */ { $$ = new OptExists(); $$->str_val_ = string(""); }; /****************************** * Delete Statement / Truncate statement * DELETE FROM students WHERE grade > 3.0 * DELETE FROM students <=> TRUNCATE students ******************************/ delete_statement : DELETE FROM table_name opt_where { $$ = new DeleteStatement(); $$->sub_type_ = CASE0; $$->table_name_ = $3; $$->table_name_->table_name_->id_type_ = id_top_table_name; $$->opt_where_ = $4; }; truncate_statement : TRUNCATE table_name { $$ = new DeleteStatement(); $$->sub_type_ = CASE1; $$->table_name_ = $2; $$->table_name_->table_name_->id_type_ = id_top_table_name; }; /****************************** * Insert Statement * INSERT INTO students VALUES ('Max', 1112233, 'Musterhausen', 2.3) * INSERT INTO employees SELECT * FROM stundents ******************************/ insert_statement : insert_type INTO table_name opt_column_list VALUES super_list opt_upsert_clause { $$ = new InsertStatement(); $$->sub_type_ = CASE0; $$->insert_type_ = $1; $$->table_name_ = $3; $$->table_name_->table_name_->id_type_ = id_top_table_name; $$->opt_column_list_ = $4; $$->super_list_ = $6; $$->opt_upsert_clause_ = $7; if ($$->opt_column_list_->sub_type_ == CASE0) { for (auto& cname : $$->opt_column_list_->ident_comma_list_->v_iden_comma_list_) { cname->id_type_ = id_column_name; } } } | insert_type INTO table_name opt_column_list select_no_paren opt_upsert_clause { $$ = new InsertStatement(); $$->sub_type_ = CASE1; $$->insert_type_ = $1; $$->table_name_ = $3; $$->table_name_->table_name_->id_type_ = id_top_table_name; $$->opt_column_list_ = $4; $$->select_no_paren_ = $5; $$->opt_upsert_clause_ = $6; if ($$->opt_column_list_->sub_type_ == CASE0) { for (auto& cname : $$->opt_column_list_->ident_comma_list_->v_iden_comma_list_) { cname->id_type_ = id_column_name; } } }; super_list : '(' literal_list ')' { $$ = new SuperList(); $$->v_super_list_.push_back($2); } | super_list ',' '(' literal_list ')' { $1->v_super_list_.push_back($4); $$ = $1; }; insert_type : INSERT { $$ = new InsertType(); $$->sub_type_ = CASE0; $$->str_val_ = string("INSERT"); } | REPLACE { $$ = new InsertType(); $$->sub_type_ = CASE1; $$->str_val_ = string("REPLACE"); } | INSERT OR resolve_type { $$ = new InsertType(); $$->sub_type_ = CASE2; $$->resolve_type_ = $3; }; opt_column_list : '(' ident_commalist ')' { $$ = new OptColumnList(); $$->sub_type_ = CASE0; $$->ident_comma_list_ = $2; } | /* empty */ { $$ = new OptColumnList(); $$->sub_type_ = CASE1; }; /****************************** * Update Statement * UPDATE students SET grade = 1.3, name='Felix Fürstenberg' WHERE name = 'Max *Mustermann'; ******************************/ update_statement : UPDATE table_ref_name_no_alias SET update_clause_commalist opt_where { $$ = new UpdateStatement(); $$->table_ref_name_no_alias_ = $2; // had set id_top_table_name in table_ref_name_no_alias $$->update_clause_comma_list_ = $4; $$->opt_where_ = $5; }; update_clause_commalist : update_clause { $$ = new UpdateClauseCommalist(); $$->v_update_clause_list_.push_back($1); } | update_clause_commalist ',' update_clause { $1->v_update_clause_list_.push_back($3); $$ = $1; }; update_clause : IDENTIFIER '=' expr { $$ = new UpdateClause(); $$->id_ = new Identifier($1, id_column_name); $$->expr_ = $3; free($1); }; /****************************** * Select Statement * SELECT a TABLE table1 WHERE c = 1 ******************************/ select_statement : opt_with_clause select_with_paren { $$ = new SelectStatement(); $$->sub_type_ = CASE0; $$->opt_with_clause_ = $1; $$->select_with_paren_ = $2; } | opt_with_clause select_no_paren { $$ = new SelectStatement(); $$->sub_type_ = CASE1; $$->opt_with_clause_ = $1; $$->select_no_paren_ = $2; } | opt_with_clause select_with_paren set_operator select_paren_or_clause opt_order opt_limit { $$ = new SelectStatement(); $$->sub_type_ = CASE2; $$->opt_with_clause_ = $1; $$->select_with_paren_ = $2; $$->set_operator_ = $3; $$->select_paren_or_clause_ = $4; $$->opt_order_ = $5; $$->opt_limit_ = $6; }; select_with_paren : '(' select_no_paren ')' { $$ = new SelectWithParen(); $$->sub_type_ = CASE0; $$->select_no_paren_ = $2; } | '(' select_with_paren ')' { $$ = new SelectWithParen(); $$->sub_type_ = CASE1; $$->select_with_paren_ = $2; }; select_paren_or_clause : select_with_paren { $$ = new SelectParenOrClause(); $$->sub_type_ = CASE0; $$->select_with_paren_ = $1; } | select_clause { $$ = new SelectParenOrClause(); $$->sub_type_ = CASE1; $$->select_clause_ = $1; }; select_no_paren : select_clause opt_order opt_limit { $$ = new SelectNoParen(); $$->sub_type_ = CASE0; $$->select_clause_ = $1; $$->opt_order_ = $2; $$->opt_limit_ = $3; } | select_clause set_operator select_paren_or_clause opt_order opt_limit { $$ = new SelectNoParen(); $$->sub_type_ = CASE1; $$->select_clause_ = $1; $$->set_operator_ = $2; $$->select_paren_or_clause_ = $3; $$->opt_order_ = $4; $$->opt_limit_ = $5; }; set_operator : set_type opt_all { $$ = new SetOperator(); $$->set_type_ = $1; $$->opt_all_ = $2; }; set_type : UNION { $$ = new SetType(); $$->str_val_ = string("UNION"); } | INTERSECT { $$ = new SetType(); $$->str_val_ = string("INTERSECT"); } | EXCEPT { $$ = new SetType(); $$->str_val_ = string("EXCEPT"); }; opt_all : ALL { $$ = new OptAll(); $$->str_val_ = string("ALL"); } | /* empty */ { $$ = new OptAll(); $$->str_val_ = string(""); }; select_clause : SELECT opt_top opt_distinct select_list opt_from_clause opt_where opt_group { $$ = new SelectClause(); $$->sub_type_ = CASE0; $$->opt_top_ = $2; $$->opt_distinct_ = $3; $$->select_list_ = $4; $$->opt_from_clause_ = $5; $$->opt_where_ = $6; $$->opt_group_ = $7; } | SELECT opt_top opt_distinct select_list opt_from_clause opt_where opt_group window_clause { $$ = new SelectClause(); $$->sub_type_ = CASE1; $$->opt_top_ = $2; $$->opt_distinct_ = $3; $$->select_list_ = $4; $$->opt_from_clause_ = $5; $$->opt_where_ = $6; $$->opt_group_ = $7; $$->window_clause_ = $8; }; window_clause : WINDOW windowdefn_list { $$ = new WindowClause(); $$->windowdefn_list_ = $2; }; windowdefn_list : windowdefn { $$ = new WindowDefnList(); $$->v_windowdefn_list_.push_back($1); } | windowdefn_list ',' windowdefn { $1->v_windowdefn_list_.push_back($3); $$ = $1; }; windowdefn : IDENTIFIER AS '(' window ')' { $$ = new WindowDefn(); $$->id_ = new Identifier($1); $$->window_ = $4; free($1); }; window : opt_base_window_name PARTITION BY expr_list opt_order opt_frame { $$ = new Window(); $$->sub_type_ = CASE0; $$->opt_base_window_name_ = $1; $$->expr_list_ = $4; $$->opt_order_ = $5; $$->opt_frame_ = $6; } | opt_base_window_name opt_order opt_frame { $$ = new Window(); $$->sub_type_ = CASE1; $$->opt_base_window_name_ = $1; $$->opt_order_ = $2; $$->opt_frame_ = $3; }; opt_base_window_name : IDENTIFIER { $$ = new OptBaseWindowName(); $$->sub_type_ = CASE0; $$->id_ = new Identifier($1); free($1); } | /* empty */ { $$ = new OptBaseWindowName(); $$->sub_type_ = CASE1; }; opt_frame : range_or_rows frame_bound_s opt_frame_exclude { $$ = new OptFrame(); $$->sub_type_ = CASE0; $$->range_or_rows_ = $1; $$->frame_bound_s_ = $2; $$->opt_frame_exclude_ = $3; } | range_or_rows BETWEEN frame_bound_s AND frame_bound_e opt_frame_exclude { $$ = new OptFrame(); $$->sub_type_ = CASE1; $$->range_or_rows_ = $1; $$->frame_bound_s_ = $3; $$->frame_bound_e_ = $5; $$->opt_frame_exclude_ = $6; } | /* empty */ { $$ = new OptFrame(); $$->sub_type_ = CASE2; }; range_or_rows : RANGE { $$ = new RangeOrRows(); $$->str_val_ = string("RANGE"); } | ROWS { $$ = new RangeOrRows(); $$->str_val_ = string("ROWS"); } | GROUPS { $$ = new RangeOrRows(); $$->str_val_ = string("GROUPS"); }; frame_bound_s : frame_bound { $$ = new FrameBoundS(); $$->sub_type_ = CASE0; $$->frame_bound_ = $1; } | UNBOUNDED PRECEDING { $$ = new FrameBoundS(); $$->sub_type_ = CASE1; }; frame_bound_e : frame_bound { $$ = new FrameBoundE(); $$->sub_type_ = CASE0; $$->frame_bound_ = $1; } | UNBOUNDED FOLLOWING { $$ = new FrameBoundE(); $$->sub_type_ = CASE1; }; frame_bound : expr PRECEDING { $$ = new FrameBound(); $$->sub_type_ = CASE0; $$->expr_ = $1; } | expr FOLLOWING { $$ = new FrameBound(); $$->sub_type_ = CASE1; $$->expr_ = $1; } | CURRENT ROW { $$ = new FrameBound(); $$->sub_type_ = CASE2; }; opt_frame_exclude : EXCLUDE frame_exclude { $$ = new OptFrameExclude(); $$->sub_type_ = CASE0; $$->frame_exclude_ = $2; } | /* empty */ { $$ = new OptFrameExclude(); $$->sub_type_ = CASE1; }; frame_exclude : NO OTHERS { $$ = new FrameExclude(); $$->str_val_ = string("NO OTHERS"); } | CURRENT ROW { $$ = new FrameExclude(); $$->str_val_ = string("CURRENT ROW"); } | GROUP { $$ = new FrameExclude(); $$->str_val_ = string("GROUP"); } | TIES { $$ = new FrameExclude(); $$->str_val_ = string("TIES"); }; opt_distinct : DISTINCT { $$ = new OptDistinct(); $$->str_val_ = string("DISTINCT"); } | /* empty */ { $$ = new OptDistinct(); $$->str_val_ = string(""); }; select_list : expr_list { $$ = new SelectList(); $$->expr_list_ = $1; }; opt_from_clause : from_clause { $$ = new OptFromClause(); $$->sub_type_ = CASE0; $$->from_clause_ = $1; } | /* empty */ { $$ = new OptFromClause(); $$->sub_type_ = CASE1; }; from_clause : FROM table_ref { $$ = new FromClause(); $$->table_ref_ = $2; }; opt_where : WHERE expr { $$ = new OptWhere(); $$->sub_type_ = CASE0; $$->expr_ = $2; } | /* empty */ { $$ = new OptWhere(); $$->sub_type_ = CASE1; }; opt_group : GROUP BY expr_list opt_having { $$ = new OptGroup(); $$->sub_type_ = CASE0; $$->expr_list_ = $3; $$->opt_having_ = $4; } | /* empty */ { $$ = new OptGroup(); $$->sub_type_ = CASE1; }; opt_having : HAVING expr { $$ = new OptHaving(); $$->sub_type_ = CASE0; $$->expr_ = $2; } | /* empty */ { $$ = new OptHaving(); $$->sub_type_ = CASE1; }; opt_order : ORDER BY order_list { $$ = new OptOrder(); $$->sub_type_ = CASE0; $$->order_list_ = $3; } | /* empty */ { $$ = new OptOrder(); $$->sub_type_ = CASE1; }; order_list : order_desc { $$ = new OrderList(); $$->v_order_desc_.push_back($1); } | order_list ',' order_desc { $1->v_order_desc_.push_back($3); $$ = $1; }; order_desc : expr opt_order_type opt_null { $$ = new OrderDesc(); $$->expr_ = $1; $$->opt_order_type_ = $2; $$->opt_null_ = $3; }; opt_order_type : ASC { $$ = new OptOrderType(); $$->str_val_ = string("ASC"); } | DESC { $$ = new OptOrderType(); $$->str_val_ = string("DESC"); } | /* empty */ { $$ = new OptOrderType(); $$->str_val_ = string(""); }; opt_top : TOP int_literal { $$ = new OptTop(); $$->sub_type_ = CASE0; $$->int_literal_ = $2; } | /* empty */ { $$ = new OptTop(); $$->sub_type_ = CASE1; }; opt_limit : LIMIT expr { $$ = new OptLimit(); $$->sub_type_ = CASE0; $$->expr1_ = $2; } | OFFSET expr { $$ = new OptLimit(); $$->sub_type_ = CASE1; $$->expr1_ = $2; } | LIMIT expr OFFSET expr { $$ = new OptLimit(); $$->sub_type_ = CASE2; $$->expr1_ = $2; $$->expr2_ = $4; } | LIMIT ALL { $$ = new OptLimit(); $$->sub_type_ = CASE3; } | LIMIT ALL OFFSET expr { $$ = new OptLimit(); $$->sub_type_ = CASE4; $$->expr1_ = $4; } | /* empty */ { $$ = nullptr; }; /****************************** * Expressions ******************************/ expr_list : expr_alias { $$ = new ExprList(); $$->v_expr_list_.push_back($1); } | expr_list ',' expr_alias { $1->v_expr_list_.push_back($3); $$ = $1; }; opt_literal_list : literal_list { $$ = new OptLiteralList(); $$->sub_type_ = CASE0; $$->literal_list_ = $1; } | /* empty */ { $$ = new OptLiteralList(); $$->sub_type_ = CASE1; }; literal_list : literal { $$ = new LiteralList(); $$->v_literal_list_.push_back($1); } | literal_list ',' literal { $1->v_literal_list_.push_back($3); $$ = $1; }; expr_alias : expr opt_alias { $$ = new ExprAlias(); $$->expr_ = $1; $$->opt_alias_ = $2; }; expr : operand { $$ = $1; } | between_expr { $$ = $1; } | logic_expr { $$ = $1; } | exists_expr { $$ = $1; } | in_expr { $$ = $1; } | cast_expr { $$ = $1; }; operand : '(' expr ')' { $$ = new Operand(); $$->sub_type_ = CASE0; $$->expr_ = $2; } | array_index { $$ = new Operand(); $$->sub_type_ = CASE1; $$->expr_ = $1; } | scalar_expr { $$ = new Operand(); $$->sub_type_ = CASE1; $$->expr_ = $1; } | unary_expr { $$ = new Operand(); $$->sub_type_ = CASE1; $$->expr_ = $1; } | binary_expr { $$ = new Operand(); $$->sub_type_ = CASE1; $$->expr_ = $1; } | case_expr { $$ = new Operand(); $$->sub_type_ = CASE1; $$->expr_ = $1; } | function_expr { $$ = new Operand(); $$->sub_type_ = CASE1; $$->expr_ = $1; } | extract_expr { $$ = new Operand(); $$->sub_type_ = CASE1; $$->expr_ = $1; } | array_expr { $$ = new Operand(); $$->sub_type_ = CASE1; $$->expr_ = $1; } | '(' select_no_paren ')' { $$ = new Operand(); $$->sub_type_ = CASE2; $$->select_no_paren_ = $2; }; cast_expr : CAST '(' expr AS column_type ')' { $$ = new CastExpr(); $$->expr_ = $3; $$->column_type_ = $5; }; scalar_expr : column_name { $$ = new ScalarExpr(); $$->sub_type_ = CASE0; $$->column_name_ = $1; } | literal { $$ = new ScalarExpr(); $$->sub_type_ = CASE1; $$->literal_ = $1; }; unary_expr : '-' operand { $$ = new UnaryExpr(); $$->sub_type_ = CASE0; $$->operand_ = $2; $$->operator_ = string("-"); } | NOT operand { $$ = new UnaryExpr(); $$->sub_type_ = CASE1; $$->operand_ = $2; $$->operator_ = string("NOT"); } | operand ISNULL { $$ = new UnaryExpr(); $$->sub_type_ = CASE2; $$->operand_ = $1; $$->operator_ = string("ISNULL"); } | operand IS NULL { $$ = new UnaryExpr(); $$->sub_type_ = CASE3; $$->operand_ = $1; $$->operator_ = string("IS NULL"); } | operand IS NOT NULL { $$ = new UnaryExpr(); $$->sub_type_ = CASE4; $$->operand_ = $1; $$->operator_ = string("IS NOT NULL"); }; binary_expr : comp_expr { $$ = new BinaryExpr(); $$->sub_type_ = CASE0; $$->comp_expr_ = $1; } | operand '-' operand { $$ = new BinaryExpr(); $$->sub_type_ = CASE1; $$->operand1_ = $1; $$->operand2_ = $3; $$->operator_ = string("-"); } | operand '+' operand { $$ = new BinaryExpr(); $$->sub_type_ = CASE1; $$->operand1_ = $1; $$->operand2_ = $3; $$->operator_ = string("+"); } | operand '/' operand { $$ = new BinaryExpr(); $$->sub_type_ = CASE1; $$->operand1_ = $1; $$->operand2_ = $3; $$->operator_ = string("/"); } | operand '*' operand { $$ = new BinaryExpr(); $$->sub_type_ = CASE1; $$->operand1_ = $1; $$->operand2_ = $3; $$->operator_ = string("*"); } | operand '%' operand { $$ = new BinaryExpr(); $$->sub_type_ = CASE1; $$->operand1_ = $1; $$->operand2_ = $3; $$->operator_ = string("%"); } | operand '^' operand { $$ = new BinaryExpr(); $$->sub_type_ = CASE1; $$->operand1_ = $1; $$->operand2_ = $3; $$->operator_ = string("^"); } | operand LIKE operand { $$ = new BinaryExpr(); $$->sub_type_ = CASE1; $$->operand1_ = $1; $$->operand2_ = $3; $$->operator_ = string("LIKE"); } | operand NOT LIKE operand { $$ = new BinaryExpr(); $$->sub_type_ = CASE1; $$->operand1_ = $1; $$->operand2_ = $4; $$->operator_ = string("NOT LIKE"); } | operand ILIKE operand { $$ = new BinaryExpr(); $$->sub_type_ = CASE1; $$->operand1_ = $1; $$->operand2_ = $3; $$->operator_ = string("ILIKE"); } | operand CONCAT operand { $$ = new BinaryExpr(); $$->sub_type_ = CASE1; $$->operand1_ = $1; $$->operand2_ = $3; $$->operator_ = string("CONCAT"); } | operand GLOB operand { $$ = new BinaryExpr(); $$->sub_type_ = CASE1; $$->operand1_ = $1; $$->operand2_ = $3; $$->operator_ = string("GLOB"); } | operand MATCH operand { $$ = new BinaryExpr(); $$->sub_type_ = CASE1; $$->operand1_ = $1; $$->operand2_ = $3; $$->operator_ = string("MATCH"); } | operand REGEX operand { $$ = new BinaryExpr(); $$->sub_type_ = CASE1; $$->operand1_ = $1; $$->operand2_ = $3; $$->operator_ = string("REGEX"); }; logic_expr : expr AND expr { $$ = new LogicExpr(); $$->expr1_ = $1; $$->expr2_ = $3; $$->operator_ = string("AND"); } | expr OR expr { $$ = new LogicExpr(); $$->expr1_ = $1; $$->expr2_ = $3; $$->operator_ = string("OR"); }; in_expr : operand IN '(' expr_list ')' { $$ = new InExpr(); $$->sub_type_ = CASE0; $$->operand_ = $1; $$->expr_list_ = $4; } | operand NOT IN '(' expr_list ')' { $$ = new InExpr(); $$->sub_type_ = CASE1; $$->operand_ = $1; $$->expr_list_ = $5; } | operand IN '(' select_no_paren ')' { $$ = new InExpr(); $$->sub_type_ = CASE2; $$->operand_ = $1; $$->select_no_paren_ = $4; } | operand NOT IN '(' select_no_paren ')' { $$ = new InExpr(); $$->sub_type_ = CASE3; $$->operand_ = $1; $$->select_no_paren_ = $5; }; // CASE grammar based on: flex & bison by John Levine // https://www.safaribooksonline.com/library/view/flex-bison/9780596805418/ch04.html#id352665 case_expr : CASE expr case_list END { $$ = new CaseExpr(); $$->sub_type_ = CASE0; $$->case_expr_ = $2; $$->case_list_ = $3; } | CASE expr case_list ELSE expr END { $$ = new CaseExpr(); $$->sub_type_ = CASE1; $$->case_expr_ = $2; $$->case_list_ = $3; $$->else_expr_ = $5; } | CASE case_list END { $$ = new CaseExpr(); $$->sub_type_ = CASE2; $$->case_list_ = $2; } | CASE case_list ELSE expr END { $$ = new CaseExpr(); $$->sub_type_ = CASE3; $$->else_expr_ = $4; $$->case_list_ = $2; }; case_list : WHEN expr THEN expr { $$ = new CaseList(); $$->v_case_list_.push_back(new CaseClause($2, $4)); } | case_list WHEN expr THEN expr { $$->v_case_list_.push_back(new CaseClause($3, $5)); $$ = $1; }; exists_expr : EXISTS '(' select_no_paren ')' { $$ = new ExistsExpr(); $$->sub_type_ = CASE0; $$->select_no_paren_ = $3; } | NOT EXISTS '(' select_no_paren ')' { $$ = new ExistsExpr(); $$->sub_type_ = CASE1; $$->select_no_paren_ = $4; }; comp_expr : operand '=' operand { $$ = new CompExpr(); $$->operand1_ = $1; $$->operand2_ = $3; $$->operator_ = string("="); } | operand EQUALS operand { $$ = new CompExpr(); $$->operand1_ = $1; $$->operand2_ = $3; $$->operator_ = string("=="); } // zr | operand NOTEQUALS operand { $$ = new CompExpr(); $$->operand1_ = $1; $$->operand2_ = $3; $$->operator_ = string("!="); } // zr | operand '<' operand { $$ = new CompExpr(); $$->operand1_ = $1; $$->operand2_ = $3; $$->operator_ = string("<"); } | operand '>' operand { $$ = new CompExpr(); $$->operand1_ = $1; $$->operand2_ = $3; $$->operator_ = string(">"); } | operand LESSEQ operand { $$ = new CompExpr(); $$->operand1_ = $1; $$->operand2_ = $3; $$->operator_ = string("<="); } // zr | operand GREATEREQ operand { $$ = new CompExpr(); $$->operand1_ = $1; $$->operand2_ = $3; $$->operator_ = string(">="); } // zr ; function_expr : IDENTIFIER '(' ')' opt_filter_clause opt_over_clause { $$ = new FunctionExpr(); $$->sub_type_ = CASE0; $$->id_ = new Identifier($1); $$->opt_filter_clause_ = $4; $$->opt_over_clause_ = $5; free($1); } | IDENTIFIER '(' opt_distinct expr_list ')' opt_filter_clause opt_over_clause { $$ = new FunctionExpr(); $$->sub_type_ = CASE1; $$->id_ = new Identifier($1); $$->opt_distinct_ = $3; $$->expr_list_ = $4; $$->opt_filter_clause_ = $6; $$->opt_over_clause_ = $7; free($1); }; opt_over_clause : OVER '(' window ')' { $$ = new OptOverClause(); $$->sub_type_ = CASE0; $$->window_ = $3; } | OVER IDENTIFIER /* over window_name */ { $$ = new OptOverClause(); $$->sub_type_ = CASE1; $$->id_ = new Identifier($2, id_window_name); free($2); } | /* emtpy */ { $$ = new OptOverClause(); $$->sub_type_ = CASE2; }; opt_filter_clause : FILTER '(' WHERE expr ')' { $$ = new OptFilterClause(); $$->sub_type_ = CASE0; $$->expr_ = $4; } | /* emtpy */ { $$ = new OptFilterClause(); $$->sub_type_ = CASE1; }; extract_expr : EXTRACT '(' datetime_field FROM expr ')' { $$ = new ExtractExpr(); $$->datetime_field_ = $3; $$->expr_ = $5; $$->sub_type_ = CASE0; }; datetime_field : SECOND { $$ = new DatetimeField(); $$->str_val_ = string("SECOND"); } | MINUTE { $$ = new DatetimeField(); $$->str_val_ = string("MINUTE"); } | HOUR { $$ = new DatetimeField(); $$->str_val_ = string("HOUR"); } | DAY { $$ = new DatetimeField(); $$->str_val_ = string("DAY"); } | MONTH { $$ = new DatetimeField(); $$->str_val_ = string("MONTH"); } | YEAR { $$ = new DatetimeField(); $$->str_val_ = string("YEAR"); }; array_expr : ARRAY '[' expr_list ']' { $$ = new ArrayExpr(); $$->expr_list_ = $3; }; array_index : operand '[' int_literal ']' { $$ = new ArrayIndex(); $$->operand_ = $1; $$->int_literal_ = $3; }; between_expr : operand BETWEEN operand AND operand { $$ = new BetweenExpr(); $$->operand1_ = $1; $$->operand2_ = $3; $$->operand3_ = $5; }; column_name : IDENTIFIER { $$ = new ColumnName(); $$->sub_type_ = CASE0; $$->identifier1_ = new Identifier($1, id_column_name); free($1); } | IDENTIFIER '.' IDENTIFIER { $$ = new ColumnName(); $$->sub_type_ = CASE1; $$->identifier1_ = new Identifier($1, id_table_name); $$->identifier2_ = new Identifier($3, id_column_name); free($1); free($3); } | '*' { $$ = new ColumnName(); $$->sub_type_ = CASE2; } | IDENTIFIER '.' '*' { $$ = new ColumnName(); $$->sub_type_ = CASE3; $$->identifier1_ = new Identifier($1, id_table_name); free($1); }; literal : string_literal { $$ = $1; } | bool_literal { $$ = $1; } | num_literal { $$ = $1; } | null_literal { $$ = $1; } | param_expr { $$ = $1; }; string_literal : STRING { $$ = new StringLiteral(); $$->str_val_ = $1; free($1); }; bool_literal : TRUE { $$ = new BoolLiteral(); $$->b_val_ = true; } | FALSE { $$ = new BoolLiteral(); $$->b_val_ = false; }; num_literal : FLOATVAL { $$ = new NumLiteral(); $$->sub_type_ = CASE0; $$->f_val_ = $1; } | int_literal { $$ = new NumLiteral(); $$->sub_type_ = CASE1; $$->int_literal_ = $1; }; int_literal : INTVAL { $$ = new IntLiteral(); $$->int_val_ = $1; }; null_literal : NULL { $$ = new NullLiteral(); }; param_expr : '?' { $$ = new ParamExpr(); }; /****************************** * Table ******************************/ table_ref : table_prefix table_name opt_alias opt_index opt_on opt_using { $$ = new TableRef(); $$->sub_type_ = CASE0; $$->table_prefix_ = $1; $$->table_name_ = $2; $$->opt_alias_ = $3; $$->opt_index_ = $4; $$->opt_on_ = $5; $$->opt_using_ = $6; $$->table_name_->table_name_->id_type_ = id_top_table_name; } | table_prefix table_name '(' expr_list ')' opt_alias opt_on opt_using { $$ = new TableRef(); $$->sub_type_ = CASE1; $$->table_prefix_ = $1; $$->table_name_ = $2; $$->expr_list_ = $4; $$->opt_alias_ = $6; $$->opt_on_ = $7; $$->opt_using_ = $8; $$->table_name_->table_name_->id_type_ = id_top_table_name; } | table_prefix '(' select_no_paren ')' opt_alias opt_on opt_using { $$ = new TableRef(); $$->sub_type_ = CASE2; $$->table_prefix_ = $1; $$->select_no_paren_ = $3; $$->opt_alias_ = $5; $$->opt_on_ = $6; $$->opt_using_ = $7; } | table_prefix '(' table_ref ')' opt_alias opt_on opt_using { $$ = new TableRef(); $$->sub_type_ = CASE3; $$->table_prefix_ = $1; $$->table_ref_ = $3; $$->opt_alias_ = $5; $$->opt_on_ = $6; $$->opt_using_ = $7; }; table_prefix : table_ref join_op { $$ = new TablePrefix(); $$->sub_type_ = CASE0; $$->table_ref_ = $1; $$->join_op_ = $2; } | /*empty*/ { $$ = new TablePrefix(); $$->sub_type_ = CASE1; }; join_op : ',' { $$ = new JoinOp(); $$->sub_type_ = CASE0; } | JOIN { $$ = new JoinOp(); $$->sub_type_ = CASE1; } | join_kw JOIN { $$ = new JoinOp(); $$->sub_type_ = CASE2; $$->join_kw_ = $1; } | join_kw IDENTIFIER JOIN { $$ = new JoinOp(); $$->sub_type_ = CASE3; $$->id1_ = new Identifier($2, id_top_table_name); $$->join_kw_ = $1; free($2); } | join_kw IDENTIFIER IDENTIFIER JOIN { $$ = new JoinOp(); $$->sub_type_ = CASE4; $$->id1_ = new Identifier($2); $$->id2_ = new Identifier($3); $$->join_kw_ = $1; free($2); free($3); }; opt_index : INDEXED BY column_name { $$ = new OptIndex(); $$->sub_type_ = CASE0; $$->column_name_ = $3; } | NOT INDEXED { $$ = new OptIndex(); $$->sub_type_ = CASE1; } | /*empty*/ { $$ = new OptIndex(); $$->sub_type_ = CASE2; }; opt_on : ON expr { $$ = new OptOn(); $$->sub_type_ = CASE0; $$->expr_ = $2; } | /*empty*/ { $$ = new OptOn(); $$->sub_type_ = CASE1; }; opt_using : USING '(' ident_commalist ')' { $$ = new OptUsing(); $$->sub_type_ = CASE0; $$->ident_commalist_ = $3; } | /*empty*/ { $$ = new OptUsing(); $$->sub_type_ = CASE1; }; table_ref_name_no_alias : table_name { $$ = new TableRefNameNoAlias(); $$->table_name_ = $1; $$->table_name_->table_name_->id_type_ = id_top_table_name; }; table_name : IDENTIFIER { $$ = new TableName(); $$->sub_type_ = CASE0; $$->table_name_ = new Identifier($1, id_table_name); $$->database_name_ = NULL; free($1); } | IDENTIFIER '.' IDENTIFIER { $$ = new TableName(); $$->sub_type_ = CASE1; $$->database_name_ = new Identifier($1, id_database_name); $$->table_name_ = new Identifier($3, id_table_name); free($1); free($3); }; alias : AS IDENTIFIER { $$ = new Alias(); $$->sub_type_ = CASE0; $$->id_ = new Identifier($2); free($2); }; opt_alias : alias { $$ = new OptAlias(); $$->sub_type_ = CASE0; $$->alias_ = $1; } | /* empty */ { $$ = new OptAlias(); $$->sub_type_ = CASE1; }; /****************************** * With Descriptions ******************************/ opt_with_clause : with_clause { $$ = new OptWithClause(); $$->sub_type_ = CASE0; $$->with_clause_ = $1; } | /* empty */ { $$ = new OptWithClause(); $$->sub_type_ = CASE1; }; with_clause : WITH with_description_list { $$ = new WithClause(); $$->with_description_list_ = $2; }; with_description_list : with_description { $$ = new WithDescriptionList(); $$->v_with_description_list_.push_back($1); } | with_description_list ',' with_description { $1->v_with_description_list_.push_back($3); $$ = $1; }; with_description : IDENTIFIER AS select_with_paren { $$ = new WithDescription(); $$->id_ = new Identifier($1); $$->select_with_paren_ = $3; free($1); }; /****************************** * Join Statements ******************************/ join_kw : INNER { $$ = new JoinKw(); $$->str_val_ = string("INNER"); } | LEFT OUTER { $$ = new JoinKw(); $$->str_val_ = string("LEFT OUTER"); } | LEFT { $$ = new JoinKw(); $$->str_val_ = string("LEFT"); } | RIGHT OUTER { $$ = new JoinKw(); $$->str_val_ = string("RIGHT OUTER"); } | RIGHT { $$ = new JoinKw(); $$->str_val_ = string("RIGHT"); } | FULL OUTER { $$ = new JoinKw(); $$->str_val_ = string("FULL OUTER"); } | OUTER { $$ = new JoinKw(); $$->str_val_ = string("OUTER"); } | FULL { $$ = new JoinKw(); $$->str_val_ = string("FULL"); } | CROSS { $$ = new JoinKw(); $$->str_val_ = string("CROSS"); } | NATURAL { $$ = new JoinKw(); $$->str_val_ = string("NATURAL"); } //| /* empty, default */ { $$ = new JoinKw(); $$->str_val_ = string(""); } ; /* join_condition: expr { $$ = new JoinCondition(); $$->expr_ = $1;} ; */ /****************************** * Misc ******************************/ opt_semicolon : ';' { $$ = new OptSemicolon(); $$->str_val_ = string(";"); } | /* empty */ { $$ = new OptSemicolon(); $$->str_val_ = string(""); }; ident_commalist : IDENTIFIER { $$ = new IdentCommaList(); $$->v_iden_comma_list_.push_back(new Identifier($1)); free($1); } | ident_commalist ',' IDENTIFIER { $1->v_iden_comma_list_.push_back(new Identifier($3)); $$ = $1; free($3); }; % % /********************************* ** Section 4: Additional C code *********************************/ /* empty */ ================================================ FILE: srcs/internal/sqlite/parser/flex_lexer.cpp ================================================ #line 2 "flex_lexer.cpp" #line 4 "flex_lexer.cpp" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 6 #define YY_FLEX_SUBMINOR_VERSION 4 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif #ifdef yy_create_buffer #define hsql__create_buffer_ALREADY_DEFINED #else #define yy_create_buffer hsql__create_buffer #endif #ifdef yy_delete_buffer #define hsql__delete_buffer_ALREADY_DEFINED #else #define yy_delete_buffer hsql__delete_buffer #endif #ifdef yy_scan_buffer #define hsql__scan_buffer_ALREADY_DEFINED #else #define yy_scan_buffer hsql__scan_buffer #endif #ifdef yy_scan_string #define hsql__scan_string_ALREADY_DEFINED #else #define yy_scan_string hsql__scan_string #endif #ifdef yy_scan_bytes #define hsql__scan_bytes_ALREADY_DEFINED #else #define yy_scan_bytes hsql__scan_bytes #endif #ifdef yy_init_buffer #define hsql__init_buffer_ALREADY_DEFINED #else #define yy_init_buffer hsql__init_buffer #endif #ifdef yy_flush_buffer #define hsql__flush_buffer_ALREADY_DEFINED #else #define yy_flush_buffer hsql__flush_buffer #endif #ifdef yy_load_buffer_state #define hsql__load_buffer_state_ALREADY_DEFINED #else #define yy_load_buffer_state hsql__load_buffer_state #endif #ifdef yy_switch_to_buffer #define hsql__switch_to_buffer_ALREADY_DEFINED #else #define yy_switch_to_buffer hsql__switch_to_buffer #endif #ifdef yypush_buffer_state #define hsql_push_buffer_state_ALREADY_DEFINED #else #define yypush_buffer_state hsql_push_buffer_state #endif #ifdef yypop_buffer_state #define hsql_pop_buffer_state_ALREADY_DEFINED #else #define yypop_buffer_state hsql_pop_buffer_state #endif #ifdef yyensure_buffer_stack #define hsql_ensure_buffer_stack_ALREADY_DEFINED #else #define yyensure_buffer_stack hsql_ensure_buffer_stack #endif #ifdef yylex #define hsql_lex_ALREADY_DEFINED #else #define yylex hsql_lex #endif #ifdef yyrestart #define hsql_restart_ALREADY_DEFINED #else #define yyrestart hsql_restart #endif #ifdef yylex_init #define hsql_lex_init_ALREADY_DEFINED #else #define yylex_init hsql_lex_init #endif #ifdef yylex_init_extra #define hsql_lex_init_extra_ALREADY_DEFINED #else #define yylex_init_extra hsql_lex_init_extra #endif #ifdef yylex_destroy #define hsql_lex_destroy_ALREADY_DEFINED #else #define yylex_destroy hsql_lex_destroy #endif #ifdef yyget_debug #define hsql_get_debug_ALREADY_DEFINED #else #define yyget_debug hsql_get_debug #endif #ifdef yyset_debug #define hsql_set_debug_ALREADY_DEFINED #else #define yyset_debug hsql_set_debug #endif #ifdef yyget_extra #define hsql_get_extra_ALREADY_DEFINED #else #define yyget_extra hsql_get_extra #endif #ifdef yyset_extra #define hsql_set_extra_ALREADY_DEFINED #else #define yyset_extra hsql_set_extra #endif #ifdef yyget_in #define hsql_get_in_ALREADY_DEFINED #else #define yyget_in hsql_get_in #endif #ifdef yyset_in #define hsql_set_in_ALREADY_DEFINED #else #define yyset_in hsql_set_in #endif #ifdef yyget_out #define hsql_get_out_ALREADY_DEFINED #else #define yyget_out hsql_get_out #endif #ifdef yyset_out #define hsql_set_out_ALREADY_DEFINED #else #define yyset_out hsql_set_out #endif #ifdef yyget_leng #define hsql_get_leng_ALREADY_DEFINED #else #define yyget_leng hsql_get_leng #endif #ifdef yyget_text #define hsql_get_text_ALREADY_DEFINED #else #define yyget_text hsql_get_text #endif #ifdef yyget_lineno #define hsql_get_lineno_ALREADY_DEFINED #else #define yyget_lineno hsql_get_lineno #endif #ifdef yyset_lineno #define hsql_set_lineno_ALREADY_DEFINED #else #define yyset_lineno hsql_set_lineno #endif #ifdef yyget_column #define hsql_get_column_ALREADY_DEFINED #else #define yyget_column hsql_get_column #endif #ifdef yyset_column #define hsql_set_column_ALREADY_DEFINED #else #define yyset_column hsql_set_column #endif #ifdef yywrap #define hsql_wrap_ALREADY_DEFINED #else #define yywrap hsql_wrap #endif #ifdef yyget_lval #define hsql_get_lval_ALREADY_DEFINED #else #define yyget_lval hsql_get_lval #endif #ifdef yyset_lval #define hsql_set_lval_ALREADY_DEFINED #else #define yyset_lval hsql_set_lval #endif #ifdef yyget_lloc #define hsql_get_lloc_ALREADY_DEFINED #else #define yyget_lloc hsql_get_lloc #endif #ifdef yyset_lloc #define hsql_set_lloc_ALREADY_DEFINED #else #define yyset_lloc hsql_set_lloc #endif #ifdef yyalloc #define hsql_alloc_ALREADY_DEFINED #else #define yyalloc hsql_alloc #endif #ifdef yyrealloc #define hsql_realloc_ALREADY_DEFINED #else #define yyrealloc hsql_realloc #endif #ifdef yyfree #define hsql_free_ALREADY_DEFINED #else #define yyfree hsql_free #endif /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ #include #include #include #include /* end standard C headers. */ /* flex integer type definitions */ #ifndef FLEXINT_H #define FLEXINT_H /* C99 systems have . Non-C99 systems may or may not. */ #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. */ #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS 1 #endif #include typedef int8_t flex_int8_t; typedef uint8_t flex_uint8_t; typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; /* Limits of integral types. */ #ifndef INT8_MIN #define INT8_MIN (-128) #endif #ifndef INT16_MIN #define INT16_MIN (-32767 - 1) #endif #ifndef INT32_MIN #define INT32_MIN (-2147483647 - 1) #endif #ifndef INT8_MAX #define INT8_MAX (127) #endif #ifndef INT16_MAX #define INT16_MAX (32767) #endif #ifndef INT32_MAX #define INT32_MAX (2147483647) #endif #ifndef UINT8_MAX #define UINT8_MAX (255U) #endif #ifndef UINT16_MAX #define UINT16_MAX (65535U) #endif #ifndef UINT32_MAX #define UINT32_MAX (4294967295U) #endif #ifndef SIZE_MAX #define SIZE_MAX (~(size_t)0) #endif #endif /* ! C99 */ #endif /* ! FLEXINT_H */ /* begin standard C++ headers. */ /* TODO: this is always defined, so inline it */ #define yyconst const #if defined(__GNUC__) && __GNUC__ >= 3 #define yynoreturn __attribute__((__noreturn__)) #else #define yynoreturn #endif /* Returned upon end-of-file. */ #define YY_NULL 0 /* Promotes a possibly negative, possibly signed char to an * integer in range [0..255] for use as an array index. */ #define YY_SC_TO_UI(c) ((YY_CHAR)(c)) /* An opaque pointer. */ #ifndef YY_TYPEDEF_YY_SCANNER_T #define YY_TYPEDEF_YY_SCANNER_T typedef void *yyscan_t; #endif /* For convenience, these vars (plus the bison vars far below) are macros in the reentrant scanner. */ #define yyin yyg->yyin_r #define yyout yyg->yyout_r #define yyextra yyg->yyextra_r #define yyleng yyg->yyleng_r #define yytext yyg->yytext_r #define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno) #define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column) #define yy_flex_debug yyg->yy_flex_debug_r /* Enter a start condition. This macro really ought to take a parameter, * but we do it the disgusting crufty way forced on us by the ()-less * definition of BEGIN. */ #define BEGIN yyg->yy_start = 1 + 2 * /* Translate the current start state into a value that can be later handed * to BEGIN to return to the state. The YYSTATE alias is for lex * compatibility. */ #define YY_START ((yyg->yy_start - 1) / 2) #define YYSTATE YY_START /* Action number for EOF rule of a given start state. */ #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) /* Special action meaning "start processing a new file". */ #define YY_NEW_FILE yyrestart(yyin, yyscanner) #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ #ifndef YY_BUF_SIZE #ifdef __ia64__ /* On IA-64, the buffer size is 16k, not 8k. * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. * Ditto for the __ia64__ case accordingly. */ #define YY_BUF_SIZE 32768 #else #define YY_BUF_SIZE 16384 #endif /* __ia64__ */ #endif /* The state buf must be large enough to hold one state per character in the * main buffer. */ #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef size_t yy_size_t; #endif #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 #define YY_LESS_LINENO(n) #define YY_LINENO_REWIND_TO(ptr) /* Return all but the first "n" matched characters back to the input stream. */ #define yyless(n) \ do { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg); \ *yy_cp = yyg->yy_hold_char; \ YY_RESTORE_YY_MORE_OFFSET \ yyg->yy_c_buf_p = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ YY_DO_BEFORE_ACTION; /* set up yytext again */ \ } while (0) #define unput(c) yyunput(c, yyg->yytext_ptr, yyscanner) #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct yy_buffer_state { FILE *yy_input_file; char *yy_ch_buf; /* input buffer */ char *yy_buf_pos; /* current position in input buffer */ /* Size of input buffer in bytes, not including room for EOB * characters. */ int yy_buf_size; /* Number of characters read into yy_ch_buf, not including EOB * characters. */ int yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to * delete it. */ int yy_is_our_buffer; /* Whether this is an "interactive" input source; if so, and * if we're using stdio for input, then we want to use getc() * instead of fread(), to make sure we stop fetching input after * each newline. */ int yy_is_interactive; /* Whether we're considered to be at the beginning of a line. * If so, '^' rules will be active on the next match, otherwise * not. */ int yy_at_bol; int yy_bs_lineno; /**< The line count. */ int yy_bs_column; /**< The column count. */ /* Whether to try to fill the input buffer when we reach the * end of it. */ int yy_fill_buffer; int yy_buffer_status; #define YY_BUFFER_NEW 0 #define YY_BUFFER_NORMAL 1 /* When an EOF's been seen but there's still some text to process * then we mark the buffer as YY_EOF_PENDING, to indicate that we * shouldn't try reading from the input source any more. We might * still have a bunch of tokens to match, though, because of * possible backing-up. * * When we actually see the EOF, we change the status to "new" * (via yyrestart()), so that the user can continue scanning by * just pointing yyin at a new input file. */ #define YY_BUFFER_EOF_PENDING 2 }; #endif /* !YY_STRUCT_YY_BUFFER_STATE */ /* We provide macros for accessing buffer states in case in the * future we want to put the buffer states in a more general * "scanner state". * * Returns the top of the stack, or NULL. */ #define YY_CURRENT_BUFFER \ (yyg->yy_buffer_stack ? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] : NULL) /* Same as previous macro, but useful when we know that the buffer stack is not * NULL or when we need an lvalue. For internal use only. */ #define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] void yyrestart(FILE *input_file, yyscan_t yyscanner); void yy_switch_to_buffer(YY_BUFFER_STATE new_buffer, yyscan_t yyscanner); YY_BUFFER_STATE yy_create_buffer(FILE *file, int size, yyscan_t yyscanner); void yy_delete_buffer(YY_BUFFER_STATE b, yyscan_t yyscanner); void yy_flush_buffer(YY_BUFFER_STATE b, yyscan_t yyscanner); void yypush_buffer_state(YY_BUFFER_STATE new_buffer, yyscan_t yyscanner); void yypop_buffer_state(yyscan_t yyscanner); static void yyensure_buffer_stack(yyscan_t yyscanner); static void yy_load_buffer_state(yyscan_t yyscanner); static void yy_init_buffer(YY_BUFFER_STATE b, FILE *file, yyscan_t yyscanner); #define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER, yyscanner) YY_BUFFER_STATE yy_scan_buffer(char *base, yy_size_t size, yyscan_t yyscanner); YY_BUFFER_STATE yy_scan_string(const char *yy_str, yyscan_t yyscanner); YY_BUFFER_STATE yy_scan_bytes(const char *bytes, int len, yyscan_t yyscanner); void *yyalloc(yy_size_t, yyscan_t yyscanner); void *yyrealloc(void *, yy_size_t, yyscan_t yyscanner); void yyfree(void *, yyscan_t yyscanner); #define yy_new_buffer yy_create_buffer #define yy_set_interactive(is_interactive) \ { \ if (!YY_CURRENT_BUFFER) { \ yyensure_buffer_stack(yyscanner); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer(yyin, YY_BUF_SIZE, yyscanner); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ } #define yy_set_bol(at_bol) \ { \ if (!YY_CURRENT_BUFFER) { \ yyensure_buffer_stack(yyscanner); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer(yyin, YY_BUF_SIZE, yyscanner); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ } #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) /* Begin user sect3 */ #define hsql_wrap(yyscanner) (/*CONSTCOND*/ 1) #define YY_SKIP_YYWRAP typedef flex_uint8_t YY_CHAR; typedef int yy_state_type; #define yytext_ptr yytext_r static yy_state_type yy_get_previous_state(yyscan_t yyscanner); static yy_state_type yy_try_NUL_trans(yy_state_type current_state, yyscan_t yyscanner); static int yy_get_next_buffer(yyscan_t yyscanner); static void yynoreturn yy_fatal_error(const char *msg, yyscan_t yyscanner); /* Done after the current pattern has been matched and before the * corresponding action - sets up yytext. */ #define YY_DO_BEFORE_ACTION \ yyg->yytext_ptr = yy_bp; \ yyleng = (int)(yy_cp - yy_bp); \ yyg->yy_hold_char = *yy_cp; \ *yy_cp = '\0'; \ yyg->yy_c_buf_p = yy_cp; #define YY_NUM_RULES 207 #define YY_END_OF_BUFFER 208 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info { flex_int32_t yy_verify; flex_int32_t yy_nxt; }; static const flex_int16_t yy_accept[1460] = { 0, 0, 0, 204, 204, 2, 2, 208, 206, 4, 4, 206, 206, 196, 202, 196, 196, 199, 196, 196, 196, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 196, 204, 205, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 191, 0, 1, 199, 198, 197, 193, 192, 190, 194, 201, 201, 201, 201, 201, 201, 201, 118, 201, 201, 201, 119, 201, 201, 201, 201, 201, 201, 201, 201, 201, 186, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 120, 201, 201, 201, 121, 122, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 158, 201, 201, 123, 124, 125, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 126, 201, 201, 201, 201, 201, 201, 201, 201, 201, 195, 204, 203, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 200, 197, 201, 104, 201, 105, 201, 201, 201, 106, 201, 107, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 108, 201, 201, 130, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 109, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 110, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 111, 201, 201, 112, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 113, 201, 201, 114, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 151, 201, 201, 201, 201, 115, 201, 201, 201, 201, 116, 201, 201, 201, 201, 201, 117, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 76, 201, 77, 170, 78, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 79, 201, 201, 201, 201, 201, 80, 201, 201, 201, 201, 81, 150, 82, 201, 201, 201, 201, 201, 201, 201, 144, 201, 83, 201, 201, 201, 201, 84, 85, 201, 179, 201, 86, 201, 87, 129, 201, 201, 201, 201, 201, 201, 201, 201, 201, 88, 201, 89, 184, 90, 91, 201, 93, 201, 94, 201, 201, 201, 201, 201, 201, 95, 201, 201, 201, 201, 201, 152, 201, 201, 96, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 162, 201, 201, 201, 201, 97, 201, 201, 201, 148, 98, 99, 163, 100, 201, 201, 188, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 101, 201, 102, 201, 201, 103, 132, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 143, 56, 57, 201, 201, 58, 201, 201, 201, 146, 201, 201, 138, 201, 201, 201, 201, 201, 201, 59, 201, 201, 201, 201, 201, 201, 60, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 189, 201, 185, 61, 201, 201, 201, 62, 201, 201, 92, 201, 201, 63, 64, 201, 201, 201, 201, 201, 65, 66, 180, 67, 68, 201, 131, 201, 201, 183, 201, 201, 69, 201, 70, 201, 201, 201, 201, 201, 201, 161, 181, 201, 201, 201, 201, 201, 71, 201, 201, 201, 201, 201, 201, 201, 72, 201, 201, 201, 201, 201, 201, 73, 201, 201, 201, 74, 201, 201, 201, 201, 75, 201, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 137, 201, 167, 201, 31, 201, 201, 201, 32, 178, 201, 201, 33, 201, 201, 201, 201, 201, 34, 201, 168, 35, 201, 36, 37, 38, 201, 201, 201, 39, 201, 201, 153, 201, 201, 41, 157, 42, 140, 201, 43, 201, 44, 201, 201, 201, 45, 128, 201, 201, 201, 46, 159, 201, 201, 134, 201, 201, 201, 201, 201, 47, 201, 201, 201, 201, 48, 127, 49, 50, 201, 51, 201, 201, 201, 201, 201, 201, 52, 53, 54, 173, 55, 201, 201, 165, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 15, 201, 16, 17, 187, 18, 201, 19, 154, 201, 201, 20, 201, 201, 201, 155, 201, 21, 22, 40, 201, 201, 201, 133, 149, 23, 201, 24, 182, 201, 201, 201, 201, 25, 26, 135, 172, 141, 201, 201, 201, 27, 28, 201, 201, 201, 147, 201, 201, 29, 30, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 145, 139, 169, 201, 175, 10, 11, 201, 201, 201, 177, 201, 12, 201, 201, 201, 13, 142, 201, 201, 201, 201, 14, 201, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 201, 176, 156, 136, 7, 201, 166, 160, 171, 8, 9, 201, 164, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 6, 201, 2, 2, 2, 174, 2, 0}; static const YY_CHAR yy_ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 5, 1, 1, 6, 1, 7, 6, 6, 6, 6, 6, 8, 9, 6, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 6, 6, 11, 12, 13, 6, 1, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 6, 1, 6, 6, 40, 1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 6, 67, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}; static const YY_CHAR yy_meta[68] = { 0, 1, 1, 2, 1, 3, 1, 4, 1, 1, 5, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 1}; static const flex_int16_t yy_base[1466] = { 0, 0, 0, 380, 373, 67, 0, 379, 5858, 133, 135, 365, 0, 5858, 5858, 131, 365, 133, 132, 362, 361, 131, 122, 179, 181, 191, 242, 163, 203, 285, 119, 131, 243, 300, 219, 337, 210, 0, 302, 386, 429, 294, 137, 131, 137, 302, 0, 358, 0, 166, 168, 296, 296, 0, 0, 188, 277, 192, 236, 273, 263, 487, 540, 592, 644, 696, 748, 241, 368, 796, 297, 264, 418, 542, 848, 896, 590, 289, 642, 948, 1000, 636, 686, 363, 295, 196, 275, 5858, 224, 5858, 280, 204, 196, 5858, 5858, 5858, 5858, 0, 129, 202, 209, 385, 375, 288, 320, 328, 333, 406, 0, 536, 440, 591, 548, 332, 345, 576, 697, 531, 344, 394, 419, 406, 438, 553, 811, 597, 636, 547, 687, 583, 587, 598, 604, 641, 644, 644, 644, 0, 659, 693, 707, 748, 690, 697, 682, 694, 713, 743, 758, 731, 737, 744, 750, 745, 750, 759, 776, 799, 0, 802, 799, 791, 807, 795, 816, 850, 804, 1046, 812, 838, 803, 848, 859, 842, 842, 863, 863, 854, 891, 862, 890, 856, 904, 945, 877, 876, 947, 950, 902, 919, 908, 5858, 0, 5858, 0, 293, 0, 199, 0, 349, 187, 162, 0, 0, 0, 0, 962, 964, 999, 1002, 1036, 1039, 994, 1069, 1073, 1090, 1106, 1052, 1104, 1102, 1147, 1103, 1092, 1144, 1143, 1199, 1146, 1188, 1142, 1178, 1196, 1212, 1209, 1262, 1244, 1245, 1247, 1263, 1286, 1261, 1298, 1301, 1302, 1326, 1315, 1336, 1317, 1341, 1327, 1355, 1404, 1360, 1381, 1378, 1395, 1432, 1421, 1457, 1423, 1449, 1390, 1458, 1471, 1472, 1481, 1506, 1510, 1497, 1521, 1522, 1512, 1516, 1545, 1550, 1560, 1562, 1610, 1576, 1581, 1616, 1622, 1620, 1655, 1566, 1668, 1653, 1659, 1670, 1584, 1676, 1674, 1714, 1722, 1728, 1704, 1752, 1720, 1743, 1773, 1778, 0, 5858, 156, 893, 0, 914, 0, 930, 957, 949, 0, 969, 0, 970, 978, 995, 1002, 1000, 1051, 1787, 1051, 1070, 1773, 1066, 1227, 1118, 1151, 0, 1162, 1768, 0, 1190, 1388, 1656, 1255, 1309, 1330, 1344, 1368, 1409, 1431, 1463, 0, 1477, 1776, 1509, 1526, 1568, 1621, 1665, 1695, 1781, 1725, 1748, 1777, 0, 1786, 1790, 1804, 1809, 1797, 1814, 1814, 1804, 1809, 1816, 1821, 1829, 1820, 1832, 1834, 1835, 1837, 1820, 1829, 0, 1824, 1826, 1842, 1839, 1849, 1855, 1850, 1858, 1856, 1844, 1852, 1855, 1869, 1866, 1863, 1866, 1881, 1882, 1884, 1873, 1895, 1879, 1887, 1894, 1882, 1891, 1895, 1887, 1897, 1905, 1895, 1889, 1903, 1905, 1900, 1921, 1925, 1916, 1927, 0, 1912, 1919, 1920, 1929, 0, 1927, 1925, 1933, 1929, 1944, 0, 1936, 1944, 1947, 1939, 1948, 1940, 1955, 1946, 1943, 1948, 1968, 1950, 1960, 1971, 1980, 1978, 1975, 0, 151, 1990, 1989, 1992, 1994, 1998, 2000, 2022, 2004, 2032, 2013, 2038, 2043, 2044, 2046, 2068, 2067, 2084, 2076, 2100, 2112, 2102, 2133, 2142, 2130, 2136, 2154, 2168, 2152, 2166, 2196, 2187, 2178, 2208, 2190, 2206, 2212, 2227, 2241, 2222, 2230, 2256, 2260, 2264, 2258, 2266, 2282, 2290, 2292, 2281, 2316, 2318, 2320, 2315, 2326, 2344, 2332, 2369, 2356, 2355, 2370, 2380, 2392, 2384, 2408, 2410, 2413, 2398, 2424, 2434, 2438, 2426, 2443, 2447, 2462, 2468, 2464, 2492, 2487, 2497, 2498, 2501, 2529, 2516, 2535, 2537, 2551, 2540, 2552, 2569, 2541, 2546, 2570, 2591, 2605, 2586, 2607, 2626, 2594, 2640, 2603, 2635, 2639, 2661, 2656, 2665, 2674, 2689, 2679, 2648, 2678, 2714, 2691, 2702, 2710, 2727, 2733, 2732, 2743, 2745, 2758, 2762, 2767, 2764, 2768, 2777, 2799, 2803, 2807, 2821, 2822, 2820, 2836, 2835, 2837, 2873, 2861, 2870, 2894, 2875, 2889, 2891, 1984, 2022, 2035, 2058, 2077, 2088, 2120, 2139, 2145, 2175, 2218, 0, 2302, 0, 0, 0, 2298, 2325, 2342, 2356, 2381, 2416, 2463, 2489, 2506, 2588, 0, 2636, 2629, 2713, 2702, 2723, 2789, 2827, 2840, 2882, 2889, 0, 0, 0, 2888, 2894, 2894, 2899, 2909, 2929, 2931, 0, 2928, 0, 2929, 2918, 2920, 2929, 0, 0, 2927, 2947, 2933, 0, 2936, 0, 0, 2933, 2947, 2944, 2936, 2931, 2940, 2944, 2958, 2966, 0, 2952, 0, 0, 0, 0, 2946, 0, 2956, 0, 2961, 2965, 2967, 2966, 2965, 2979, 2973, 2991, 2993, 2981, 2984, 2985, 0, 2991, 2996, 0, 2993, 3002, 3007, 3008, 3007, 2992, 3013, 3017, 3007, 3021, 3005, 3004, 3025, 0, 3012, 3024, 3024, 3037, 0, 3036, 3033, 3041, 3033, 0, 0, 0, 3033, 3034, 3049, 0, 3054, 3037, 3045, 3039, 3060, 3042, 3056, 3045, 3065, 3063, 0, 3051, 0, 3069, 3061, 0, 0, 3086, 3077, 3087, 3089, 3091, 3095, 3105, 3119, 3131, 3120, 3121, 3135, 3149, 3137, 3143, 3153, 3154, 3165, 3175, 3189, 3179, 3191, 3208, 3205, 3194, 3227, 3217, 3233, 3229, 3239, 3242, 3265, 3270, 3273, 3279, 3287, 3275, 3281, 3296, 3305, 3313, 3319, 3311, 3321, 3329, 3359, 3365, 3315, 3347, 3350, 3353, 3363, 3369, 3381, 3375, 3387, 3404, 3403, 3409, 3413, 3432, 3415, 3419, 3445, 3437, 3449, 3454, 3463, 3473, 3475, 3471, 3503, 3477, 3499, 3487, 3508, 3511, 3517, 3521, 3525, 3540, 3529, 3539, 3551, 3565, 3570, 3562, 3557, 3581, 3593, 3583, 3611, 3614, 3616, 3599, 3615, 3633, 3605, 3639, 3645, 3648, 3673, 3657, 3670, 3679, 3687, 3701, 3702, 3711, 3688, 3740, 3712, 3741, 3742, 3745, 3746, 3743, 3755, 3774, 3756, 3786, 3780, 3784, 3795, 3798, 3810, 3814, 3799, 3838, 3828, 3820, 3850, 3853, 3854, 3862, 3852, 3878, 3883, 3884, 3892, 3887, 3902, 3906, 3917, 3918, 0, 0, 0, 3058, 3182, 0, 3204, 3336, 3398, 0, 3421, 3444, 0, 3512, 3585, 3634, 3651, 3657, 3691, 0, 3799, 3836, 3878, 3887, 3907, 3923, 0, 3920, 3924, 3913, 3923, 3936, 3940, 3926, 3943, 3931, 3934, 3948, 3958, 0, 3945, 0, 0, 3942, 3965, 3955, 3952, 3968, 3971, 0, 3976, 3959, 3976, 0, 3962, 3982, 3980, 3967, 3975, 0, 0, 0, 0, 0, 3986, 0, 3994, 3982, 0, 3989, 3979, 0, 3981, 0, 3996, 3985, 4006, 4007, 3997, 3998, 0, 0, 4012, 4000, 4015, 4018, 4016, 0, 4028, 4015, 4030, 4029, 4015, 4032, 4036, 4020, 4022, 4021, 4044, 4044, 4049, 4037, 0, 4048, 4050, 4050, 0, 4046, 4042, 4064, 4068, 0, 4047, 4066, 4068, 4069, 4070, 4078, 4074, 4082, 4110, 4080, 4104, 4108, 4123, 4114, 4118, 4139, 4147, 4152, 4144, 4153, 4158, 4168, 4196, 4187, 4201, 4190, 4182, 4193, 4218, 4233, 4212, 4241, 4231, 4242, 4252, 4256, 4266, 4271, 4296, 4304, 4287, 4306, 4290, 4295, 4320, 4305, 4341, 4330, 4354, 4335, 4339, 4349, 4358, 4360, 4364, 4379, 4393, 4370, 4395, 4403, 4392, 4398, 4404, 4408, 4414, 4427, 4429, 4448, 4443, 4433, 4462, 4457, 4446, 4467, 4458, 4483, 4486, 4500, 4498, 4502, 4519, 4511, 4516, 4517, 4521, 4534, 4552, 4551, 4540, 4569, 4570, 4588, 4574, 4603, 4586, 4609, 4614, 4624, 4627, 4626, 4638, 4643, 4648, 4640, 4652, 4677, 4662, 4678, 4680, 4692, 4714, 4720, 4681, 4711, 0, 4079, 0, 4138, 0, 4133, 4184, 4198, 4232, 0, 4249, 4250, 0, 4294, 4418, 4466, 4511, 4556, 0, 4578, 0, 0, 4595, 0, 0, 0, 4604, 4655, 4691, 0, 4685, 4681, 0, 4713, 4707, 0, 0, 0, 0, 4711, 0, 4731, 0, 4733, 4722, 4736, 0, 0, 4735, 4743, 4750, 0, 0, 4733, 4746, 0, 4747, 4752, 4734, 4736, 4760, 0, 4764, 4767, 4768, 4764, 4756, 0, 0, 0, 4764, 0, 4778, 4780, 4782, 4770, 4769, 4786, 0, 0, 0, 0, 0, 4773, 4781, 0, 4789, 4794, 4799, 4802, 4804, 4808, 4805, 4818, 4820, 4823, 4839, 4853, 4842, 4848, 4857, 4856, 4879, 4858, 4882, 4891, 4892, 4893, 4910, 4896, 4897, 4907, 4922, 4928, 4925, 4931, 4941, 4947, 4933, 4966, 4956, 4964, 4965, 4979, 4981, 4987, 4990, 4996, 5000, 5005, 5033, 5015, 5018, 5021, 5044, 5054, 5059, 5030, 5049, 5070, 5084, 5067, 5089, 5072, 5075, 5105, 5103, 5107, 5108, 5139, 5140, 5141, 5129, 5126, 5142, 5157, 5171, 5163, 5179, 5196, 5195, 5181, 5197, 5214, 5180, 5209, 5211, 5225, 5230, 5233, 5247, 5235, 0, 4793, 0, 0, 0, 0, 4859, 0, 0, 4936, 4950, 0, 4983, 5036, 5024, 0, 5104, 0, 0, 0, 5138, 5158, 5232, 0, 0, 0, 5239, 0, 0, 5235, 5249, 5241, 5254, 0, 0, 0, 0, 0, 5250, 5260, 5259, 0, 0, 5256, 5262, 5256, 0, 5279, 5283, 0, 0, 5284, 5287, 5285, 5288, 5289, 5299, 5302, 5301, 5303, 5313, 5341, 5318, 5343, 5339, 5347, 5351, 5355, 5353, 5356, 5357, 5387, 5381, 5385, 5391, 5393, 5395, 5419, 5406, 5409, 5430, 5421, 5425, 5449, 5427, 5451, 5455, 5459, 5460, 5473, 5483, 5481, 5464, 5492, 5505, 5513, 5509, 5514, 5522, 5523, 5526, 5527, 0, 0, 0, 5310, 0, 0, 0, 5397, 5408, 5468, 0, 5489, 0, 5522, 5528, 5536, 0, 0, 5529, 5535, 5546, 5554, 0, 5560, 5563, 5567, 5568, 5576, 5572, 5577, 5578, 5580, 5606, 5602, 5589, 5617, 5593, 5621, 5630, 5643, 5611, 5642, 5656, 5647, 5673, 5675, 5660, 5692, 5651, 0, 0, 0, 0, 5640, 0, 0, 0, 0, 0, 5645, 0, 5688, 5696, 5697, 5701, 5705, 5713, 5709, 5710, 5714, 5726, 5731, 5745, 5742, 0, 0, 5738, 5750, 5759, 5767, 0, 5763, 5858, 5832, 5837, 149, 5842, 5847, 5852}; static const flex_int16_t yy_def[1466] = { 0, 1459, 1, 1460, 1460, 1459, 5, 1459, 1459, 1459, 1459, 1459, 1461, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1459, 1463, 1459, 1464, 1464, 1459, 1464, 1465, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1459, 61, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 1464, 1459, 1459, 1461, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1459, 1463, 1459, 1464, 1464, 1464, 1465, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 1464, 1459, 1459, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1464, 1464, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 1462, 1462, 1462, 62, 62, 62, 1462, 62, 0, 1459, 1459, 1459, 1459, 1459, 1459}; static const flex_int16_t yy_nxt[5926] = { 0, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 37, 44, 37, 8, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 37, 44, 37, 45, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 77, 84, 77, 48, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 77, 84, 77, 85, 86, 86, 86, 86, 89, 107, 90, 92, 90, 93, 94, 98, 143, 99, 144, 100, 186, 188, 189, 97, 190, 101, 303, 102, 187, 108, 445, 103, 104, 105, 106, 302, 107, 195, 86, 86, 86, 445, 98, 143, 99, 144, 100, 186, 188, 189, 131, 190, 101, 303, 102, 187, 108, 132, 103, 104, 105, 106, 109, 133, 115, 198, 200, 199, 116, 110, 201, 199, 117, 444, 120, 302, 111, 131, 118, 112, 113, 119, 114, 91, 132, 121, 134, 122, 304, 109, 133, 115, 123, 163, 135, 116, 110, 124, 301, 117, 136, 120, 153, 111, 164, 118, 112, 113, 119, 114, 165, 305, 121, 134, 122, 304, 154, 202, 203, 123, 163, 135, 155, 156, 124, 125, 145, 136, 240, 153, 146, 164, 300, 126, 147, 241, 127, 165, 305, 128, 148, 242, 129, 154, 205, 130, 86, 86, 206, 155, 156, 253, 125, 145, 204, 240, 200, 146, 92, 90, 126, 147, 241, 127, 195, 86, 128, 148, 242, 129, 194, 206, 130, 137, 138, 206, 206, 196, 253, 139, 140, 141, 299, 149, 206, 166, 142, 150, 311, 167, 183, 151, 184, 168, 252, 185, 206, 152, 206, 169, 137, 138, 206, 206, 206, 312, 139, 140, 141, 299, 149, 206, 166, 142, 150, 311, 167, 183, 151, 184, 168, 252, 185, 206, 152, 157, 169, 201, 199, 206, 313, 206, 312, 158, 193, 314, 327, 159, 191, 160, 161, 162, 96, 95, 91, 328, 87, 338, 1459, 47, 206, 243, 157, 297, 298, 206, 47, 313, 309, 244, 158, 310, 314, 327, 159, 245, 160, 161, 162, 170, 206, 171, 328, 172, 338, 206, 173, 206, 243, 306, 297, 298, 206, 174, 175, 309, 244, 307, 310, 1459, 308, 339, 245, 1459, 315, 316, 170, 206, 171, 1459, 172, 254, 206, 173, 340, 255, 306, 341, 317, 256, 174, 175, 176, 177, 307, 257, 178, 308, 339, 179, 180, 315, 316, 320, 342, 206, 181, 321, 254, 182, 1459, 340, 255, 1459, 341, 317, 256, 1459, 1459, 176, 177, 1459, 257, 178, 1459, 1459, 179, 180, 1459, 1459, 320, 342, 206, 181, 321, 1459, 182, 194, 194, 1459, 194, 194, 194, 194, 194, 194, 206, 194, 194, 194, 206, 207, 206, 208, 206, 209, 206, 206, 206, 206, 206, 210, 206, 211, 206, 206, 206, 212, 213, 214, 215, 206, 206, 206, 206, 206, 206, 206, 207, 206, 208, 206, 209, 206, 206, 206, 206, 206, 210, 206, 211, 206, 206, 206, 212, 213, 214, 215, 206, 206, 206, 206, 206, 194, 206, 258, 206, 216, 206, 259, 318, 336, 337, 260, 206, 325, 206, 319, 343, 261, 206, 206, 206, 206, 353, 326, 1459, 217, 1459, 206, 1459, 206, 258, 206, 216, 206, 259, 318, 336, 337, 260, 206, 325, 206, 319, 343, 261, 206, 206, 206, 206, 353, 326, 272, 217, 218, 206, 206, 329, 206, 356, 357, 219, 330, 273, 322, 323, 324, 349, 220, 274, 350, 221, 222, 358, 223, 1459, 206, 1459, 206, 272, 359, 218, 1459, 206, 329, 206, 356, 357, 219, 330, 273, 322, 323, 324, 349, 220, 274, 350, 221, 222, 358, 223, 206, 206, 275, 206, 224, 359, 276, 351, 225, 292, 277, 293, 226, 352, 294, 360, 278, 363, 227, 1459, 206, 228, 361, 1459, 364, 362, 206, 206, 206, 275, 1459, 224, 365, 276, 351, 225, 292, 277, 293, 226, 352, 294, 360, 278, 363, 227, 295, 206, 228, 361, 206, 364, 362, 206, 296, 206, 229, 331, 354, 365, 206, 366, 332, 373, 355, 374, 375, 230, 333, 231, 206, 367, 376, 295, 232, 334, 335, 206, 377, 233, 206, 296, 368, 229, 331, 354, 1459, 206, 366, 332, 373, 355, 374, 375, 230, 333, 231, 206, 367, 376, 1459, 232, 334, 335, 1459, 377, 233, 206, 234, 368, 383, 369, 206, 378, 384, 379, 235, 385, 380, 236, 381, 370, 237, 386, 387, 238, 371, 372, 239, 388, 389, 382, 206, 1459, 1459, 234, 390, 383, 369, 206, 378, 384, 379, 235, 385, 380, 236, 381, 370, 237, 386, 387, 238, 371, 372, 239, 388, 389, 382, 206, 206, 246, 247, 390, 391, 392, 393, 248, 249, 250, 394, 395, 396, 344, 251, 345, 397, 401, 408, 346, 206, 1459, 1459, 1459, 411, 1459, 347, 206, 246, 247, 348, 391, 392, 393, 248, 249, 250, 394, 395, 396, 344, 251, 345, 397, 401, 408, 346, 206, 262, 409, 398, 411, 206, 347, 399, 412, 416, 348, 400, 417, 410, 413, 263, 418, 419, 420, 423, 1459, 264, 265, 414, 426, 206, 1459, 1459, 262, 409, 398, 415, 206, 433, 399, 412, 416, 434, 400, 417, 410, 413, 263, 418, 419, 420, 423, 424, 264, 265, 414, 426, 206, 206, 266, 425, 421, 427, 415, 440, 433, 443, 267, 587, 434, 428, 268, 422, 269, 270, 271, 588, 1459, 206, 424, 1459, 1459, 429, 1459, 1459, 206, 266, 425, 421, 427, 441, 440, 589, 443, 267, 587, 442, 428, 268, 422, 269, 270, 271, 588, 430, 206, 279, 435, 280, 429, 281, 431, 438, 282, 432, 590, 436, 441, 591, 589, 283, 284, 437, 442, 206, 439, 206, 592, 593, 1459, 206, 430, 1459, 279, 435, 280, 446, 281, 431, 438, 282, 432, 590, 436, 206, 591, 206, 283, 284, 437, 594, 206, 439, 206, 592, 593, 206, 206, 285, 286, 447, 206, 287, 446, 206, 288, 289, 595, 596, 454, 1459, 206, 290, 206, 1459, 291, 206, 594, 1459, 448, 597, 206, 206, 206, 206, 285, 286, 447, 206, 287, 1459, 206, 288, 289, 595, 596, 454, 452, 206, 290, 453, 206, 291, 206, 1459, 449, 448, 597, 206, 206, 402, 206, 403, 450, 206, 404, 451, 405, 206, 406, 598, 206, 407, 1459, 452, 206, 602, 453, 206, 455, 603, 206, 449, 1459, 206, 206, 606, 402, 1459, 403, 450, 206, 404, 451, 405, 206, 406, 598, 206, 407, 456, 206, 206, 602, 206, 206, 455, 603, 206, 1459, 463, 206, 206, 606, 464, 468, 206, 457, 206, 458, 459, 470, 206, 461, 206, 469, 609, 456, 206, 206, 462, 206, 206, 460, 206, 206, 206, 463, 206, 1459, 1459, 464, 468, 206, 457, 206, 458, 459, 470, 206, 461, 206, 469, 609, 206, 206, 206, 462, 206, 206, 460, 206, 206, 206, 482, 206, 465, 466, 467, 471, 472, 479, 480, 1459, 206, 473, 206, 610, 206, 206, 1459, 206, 206, 206, 1459, 206, 206, 611, 483, 1459, 206, 482, 1459, 465, 466, 467, 471, 472, 479, 480, 206, 206, 473, 206, 610, 206, 206, 474, 206, 614, 206, 206, 475, 1459, 611, 483, 481, 206, 476, 486, 206, 206, 484, 485, 206, 477, 478, 206, 206, 1459, 1459, 206, 1459, 1459, 474, 206, 614, 206, 206, 475, 607, 206, 1459, 481, 206, 476, 486, 206, 206, 484, 485, 206, 477, 478, 608, 206, 206, 206, 206, 206, 492, 1459, 1459, 493, 494, 619, 1459, 607, 206, 496, 495, 206, 487, 206, 488, 206, 206, 206, 489, 206, 500, 608, 497, 206, 206, 490, 206, 492, 498, 491, 493, 494, 619, 206, 206, 206, 496, 495, 206, 487, 206, 488, 206, 206, 206, 489, 206, 500, 499, 497, 206, 1459, 490, 206, 206, 498, 491, 620, 206, 501, 206, 206, 206, 502, 503, 206, 1459, 206, 1459, 206, 206, 1459, 1459, 206, 206, 499, 506, 206, 206, 206, 206, 206, 621, 509, 620, 206, 501, 206, 206, 206, 502, 503, 504, 206, 206, 505, 206, 206, 206, 206, 206, 206, 508, 506, 507, 206, 206, 510, 206, 621, 509, 622, 206, 206, 206, 206, 206, 623, 511, 504, 206, 516, 505, 1459, 1459, 206, 206, 206, 1459, 508, 206, 507, 206, 206, 510, 206, 615, 517, 622, 206, 206, 616, 206, 1459, 623, 511, 1459, 206, 516, 1459, 518, 528, 1459, 206, 206, 512, 206, 206, 1459, 206, 206, 519, 206, 615, 517, 513, 1459, 206, 616, 206, 514, 515, 624, 206, 206, 206, 206, 518, 528, 521, 206, 522, 512, 206, 206, 520, 625, 1459, 519, 206, 526, 1459, 513, 206, 206, 206, 1459, 514, 515, 624, 206, 206, 206, 206, 206, 523, 521, 524, 522, 206, 206, 206, 520, 625, 527, 626, 1459, 526, 525, 529, 206, 206, 206, 206, 206, 627, 1459, 1459, 206, 206, 206, 206, 523, 206, 524, 1459, 206, 206, 530, 531, 532, 527, 626, 206, 206, 525, 529, 1459, 206, 206, 206, 206, 627, 206, 533, 1459, 206, 206, 206, 630, 206, 1459, 206, 534, 206, 530, 531, 532, 538, 206, 206, 206, 535, 206, 206, 1459, 206, 536, 206, 537, 206, 533, 206, 1459, 206, 206, 630, 1459, 206, 206, 534, 206, 631, 206, 206, 538, 206, 206, 540, 535, 206, 206, 206, 1459, 536, 206, 537, 1459, 541, 206, 539, 206, 542, 1459, 206, 206, 543, 206, 206, 631, 206, 206, 206, 544, 206, 540, 1459, 632, 206, 206, 551, 560, 206, 206, 206, 541, 566, 539, 206, 542, 552, 206, 1459, 543, 206, 206, 1459, 1459, 206, 206, 544, 553, 1459, 206, 632, 206, 206, 551, 560, 206, 206, 206, 206, 566, 545, 206, 546, 552, 206, 547, 556, 548, 206, 549, 206, 206, 550, 555, 553, 557, 206, 1459, 206, 206, 1459, 554, 633, 558, 206, 206, 1459, 545, 206, 546, 206, 206, 547, 556, 548, 206, 549, 206, 562, 550, 555, 206, 557, 206, 617, 206, 1459, 206, 554, 633, 558, 206, 561, 559, 563, 206, 206, 206, 206, 618, 634, 206, 206, 206, 567, 562, 564, 206, 206, 1459, 206, 617, 568, 569, 206, 1459, 206, 565, 206, 561, 559, 563, 206, 206, 206, 206, 618, 634, 206, 206, 206, 567, 206, 564, 206, 1459, 577, 635, 570, 568, 569, 1459, 206, 206, 565, 206, 571, 573, 581, 206, 206, 206, 206, 1459, 574, 576, 206, 575, 572, 206, 1459, 582, 206, 577, 635, 570, 1459, 638, 206, 206, 206, 583, 639, 571, 573, 581, 206, 206, 578, 206, 206, 574, 576, 206, 575, 572, 1459, 579, 582, 206, 1459, 206, 612, 580, 638, 206, 613, 206, 583, 639, 206, 206, 586, 206, 628, 578, 206, 206, 604, 636, 584, 629, 640, 599, 579, 600, 585, 605, 206, 612, 580, 206, 641, 613, 637, 642, 206, 206, 206, 586, 601, 628, 643, 206, 644, 604, 636, 584, 629, 640, 599, 645, 600, 585, 605, 646, 647, 648, 206, 641, 649, 637, 642, 206, 650, 651, 652, 601, 653, 643, 654, 644, 655, 656, 660, 658, 661, 662, 645, 663, 664, 665, 646, 647, 648, 659, 666, 649, 657, 667, 668, 650, 651, 652, 669, 653, 670, 654, 671, 655, 656, 660, 658, 661, 662, 672, 663, 664, 665, 673, 674, 675, 659, 666, 676, 657, 667, 668, 677, 678, 679, 669, 680, 670, 681, 671, 684, 685, 688, 682, 686, 689, 672, 690, 691, 692, 673, 674, 675, 693, 694, 676, 695, 687, 696, 677, 678, 679, 683, 680, 697, 681, 698, 684, 685, 688, 682, 686, 689, 699, 690, 691, 692, 700, 701, 702, 693, 694, 703, 695, 687, 696, 704, 705, 706, 683, 707, 697, 708, 698, 709, 710, 711, 712, 713, 714, 699, 716, 719, 720, 700, 701, 702, 721, 715, 703, 717, 722, 718, 704, 705, 706, 723, 707, 724, 708, 725, 709, 710, 711, 712, 713, 714, 726, 716, 719, 720, 729, 727, 730, 721, 715, 728, 717, 722, 718, 731, 206, 206, 723, 733, 724, 206, 725, 735, 1459, 734, 877, 206, 1459, 726, 732, 206, 1459, 729, 727, 730, 206, 206, 728, 206, 206, 206, 731, 206, 206, 206, 733, 206, 206, 206, 735, 206, 734, 877, 206, 737, 736, 732, 206, 206, 206, 738, 878, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 879, 206, 741, 206, 206, 739, 740, 737, 736, 1459, 206, 206, 206, 738, 878, 206, 206, 206, 206, 206, 206, 206, 206, 206, 1459, 206, 743, 879, 206, 741, 880, 206, 739, 740, 744, 1459, 745, 206, 742, 206, 206, 747, 206, 206, 1459, 206, 206, 206, 206, 881, 748, 746, 206, 743, 206, 206, 206, 880, 1459, 1459, 882, 744, 751, 745, 206, 742, 206, 206, 747, 1459, 883, 749, 206, 1459, 206, 206, 881, 748, 746, 206, 750, 206, 206, 206, 206, 206, 752, 882, 206, 751, 754, 206, 1459, 1459, 206, 884, 755, 883, 749, 206, 753, 206, 206, 1459, 206, 206, 206, 750, 206, 206, 885, 206, 206, 752, 206, 206, 757, 754, 206, 756, 758, 206, 884, 755, 206, 759, 206, 753, 764, 206, 206, 206, 206, 206, 1459, 206, 886, 885, 206, 762, 206, 206, 766, 757, 760, 206, 756, 758, 206, 761, 206, 206, 759, 206, 763, 764, 765, 206, 206, 206, 206, 768, 206, 886, 206, 206, 762, 206, 206, 766, 887, 760, 1459, 767, 771, 206, 761, 206, 206, 206, 206, 763, 206, 765, 206, 206, 206, 206, 768, 206, 769, 206, 1459, 206, 206, 206, 770, 887, 1459, 206, 767, 771, 206, 1459, 772, 206, 206, 206, 206, 206, 206, 206, 773, 206, 775, 1459, 206, 769, 206, 774, 206, 206, 1459, 770, 776, 777, 206, 1459, 206, 206, 206, 772, 206, 781, 206, 206, 206, 206, 206, 773, 206, 775, 206, 206, 206, 206, 774, 778, 782, 779, 888, 776, 777, 206, 206, 206, 889, 206, 780, 206, 781, 206, 206, 206, 206, 206, 784, 206, 206, 206, 206, 206, 206, 890, 778, 782, 779, 888, 206, 785, 206, 206, 783, 889, 788, 780, 786, 206, 206, 206, 206, 206, 206, 784, 206, 206, 206, 206, 206, 206, 890, 1459, 891, 787, 206, 206, 785, 206, 206, 783, 791, 788, 892, 786, 206, 206, 206, 206, 789, 206, 1459, 206, 206, 206, 790, 206, 792, 206, 206, 891, 787, 206, 206, 1459, 206, 206, 206, 791, 1459, 892, 893, 206, 206, 206, 206, 789, 795, 793, 206, 206, 799, 790, 206, 792, 206, 206, 206, 794, 1459, 206, 206, 797, 206, 206, 206, 206, 796, 893, 206, 206, 206, 206, 1459, 795, 793, 798, 800, 799, 206, 206, 206, 894, 206, 206, 794, 206, 801, 206, 797, 206, 803, 206, 206, 796, 805, 206, 206, 206, 206, 206, 804, 802, 798, 800, 806, 206, 206, 206, 894, 206, 206, 1459, 206, 801, 206, 206, 809, 803, 1459, 206, 206, 805, 206, 206, 1459, 206, 206, 804, 802, 807, 895, 806, 1459, 206, 206, 808, 206, 206, 811, 206, 206, 206, 206, 809, 206, 812, 206, 206, 810, 206, 206, 814, 813, 206, 1459, 896, 807, 895, 897, 206, 1459, 206, 808, 206, 206, 811, 206, 206, 206, 206, 206, 206, 812, 206, 1459, 810, 206, 206, 814, 813, 206, 206, 896, 815, 816, 897, 206, 206, 206, 206, 1459, 206, 206, 823, 1459, 206, 206, 206, 824, 820, 206, 206, 817, 206, 206, 818, 819, 206, 206, 206, 815, 816, 206, 206, 206, 206, 206, 821, 206, 206, 823, 206, 825, 206, 206, 824, 820, 1459, 206, 817, 206, 206, 818, 819, 206, 822, 206, 898, 206, 206, 206, 206, 206, 206, 821, 206, 206, 829, 206, 825, 206, 206, 1459, 827, 833, 835, 826, 206, 206, 206, 1459, 830, 822, 206, 898, 206, 206, 1459, 206, 206, 206, 1459, 828, 206, 829, 206, 831, 206, 206, 206, 827, 833, 835, 826, 206, 206, 206, 206, 830, 832, 206, 837, 206, 206, 834, 899, 836, 900, 206, 828, 844, 1459, 206, 831, 206, 206, 206, 206, 206, 838, 1459, 206, 206, 206, 206, 839, 832, 206, 837, 206, 206, 834, 899, 836, 900, 206, 206, 844, 206, 841, 845, 206, 840, 206, 206, 206, 838, 206, 206, 206, 206, 206, 839, 847, 206, 843, 206, 206, 842, 1459, 206, 206, 1459, 206, 206, 206, 841, 845, 206, 840, 206, 206, 206, 206, 206, 901, 206, 1459, 206, 902, 847, 903, 843, 206, 206, 842, 846, 206, 206, 206, 848, 206, 206, 1459, 206, 206, 206, 1459, 206, 206, 206, 851, 901, 206, 849, 206, 902, 206, 903, 206, 850, 206, 1459, 846, 206, 206, 206, 848, 852, 206, 206, 206, 206, 206, 206, 206, 856, 206, 851, 206, 206, 849, 206, 854, 206, 853, 206, 850, 1459, 206, 206, 206, 206, 855, 206, 852, 206, 206, 857, 206, 206, 206, 206, 856, 206, 1459, 206, 206, 1459, 206, 854, 206, 853, 858, 904, 859, 206, 206, 1459, 206, 855, 206, 1459, 206, 860, 857, 206, 206, 865, 861, 1459, 206, 206, 206, 206, 206, 206, 905, 206, 206, 858, 904, 859, 862, 864, 863, 206, 206, 206, 206, 906, 860, 206, 206, 206, 865, 861, 866, 206, 206, 206, 206, 206, 867, 905, 868, 206, 206, 206, 206, 862, 864, 863, 206, 206, 206, 206, 906, 1459, 206, 206, 206, 206, 869, 866, 206, 874, 206, 1459, 1459, 867, 870, 868, 206, 206, 206, 206, 871, 907, 1459, 206, 206, 206, 206, 875, 206, 206, 206, 908, 206, 869, 909, 206, 874, 206, 872, 876, 910, 870, 873, 206, 206, 911, 206, 871, 907, 206, 912, 206, 206, 206, 875, 206, 206, 206, 908, 913, 914, 909, 915, 916, 917, 872, 876, 910, 918, 873, 919, 206, 911, 206, 920, 921, 206, 912, 922, 923, 924, 925, 926, 927, 928, 929, 913, 914, 930, 915, 916, 917, 931, 932, 935, 918, 936, 919, 937, 938, 939, 920, 921, 933, 942, 922, 923, 924, 925, 926, 927, 928, 929, 943, 934, 930, 940, 941, 944, 931, 932, 935, 945, 936, 946, 937, 938, 939, 947, 948, 933, 942, 949, 950, 951, 952, 953, 954, 955, 956, 943, 934, 957, 940, 941, 944, 958, 959, 960, 945, 961, 946, 962, 963, 964, 947, 948, 965, 966, 949, 950, 951, 952, 953, 954, 955, 956, 967, 968, 957, 969, 970, 971, 958, 959, 960, 972, 961, 973, 962, 963, 964, 974, 975, 965, 966, 976, 977, 978, 979, 980, 981, 982, 983, 967, 968, 984, 969, 970, 971, 985, 986, 987, 972, 988, 973, 989, 1103, 1459, 974, 975, 1459, 206, 976, 977, 978, 979, 980, 981, 982, 983, 206, 206, 984, 206, 991, 206, 985, 986, 987, 206, 988, 206, 989, 1103, 992, 990, 1459, 996, 206, 206, 206, 206, 1459, 993, 1459, 994, 1459, 206, 206, 995, 206, 991, 206, 206, 206, 1000, 206, 997, 206, 206, 1459, 992, 990, 999, 996, 206, 206, 206, 206, 206, 993, 206, 994, 206, 206, 206, 995, 206, 998, 1001, 206, 206, 1000, 206, 997, 206, 206, 206, 206, 206, 999, 206, 206, 1459, 1002, 1003, 206, 206, 206, 206, 206, 206, 206, 206, 206, 998, 1001, 206, 206, 206, 206, 1459, 206, 206, 206, 206, 206, 1004, 206, 206, 1006, 1002, 1003, 206, 206, 206, 206, 1005, 1010, 206, 206, 1459, 1459, 206, 206, 206, 206, 1104, 1007, 206, 206, 1105, 206, 206, 1004, 206, 206, 1006, 206, 1459, 206, 206, 206, 1009, 1005, 1010, 206, 1008, 1011, 206, 206, 206, 206, 206, 1104, 1007, 206, 206, 1105, 206, 206, 206, 206, 1014, 1012, 206, 206, 1459, 206, 1013, 1009, 206, 1459, 206, 1008, 1011, 206, 206, 206, 206, 206, 1015, 1459, 206, 206, 1016, 206, 1459, 206, 206, 1014, 1012, 1459, 206, 206, 1018, 1013, 206, 206, 206, 206, 1019, 1459, 206, 206, 206, 1021, 1017, 1015, 206, 206, 206, 1016, 206, 206, 1020, 206, 206, 1459, 206, 206, 206, 1018, 206, 206, 206, 206, 1459, 1019, 206, 206, 206, 206, 1021, 1017, 206, 206, 206, 206, 206, 206, 206, 1020, 206, 206, 206, 206, 206, 1022, 206, 206, 1024, 206, 206, 1023, 206, 206, 206, 206, 206, 1459, 1025, 206, 206, 206, 206, 206, 206, 1026, 1106, 206, 1029, 206, 206, 206, 1022, 206, 1030, 1024, 1027, 206, 1023, 206, 206, 206, 1028, 206, 206, 1025, 206, 206, 206, 206, 206, 206, 1026, 1106, 206, 1029, 206, 206, 206, 1031, 206, 1030, 206, 1027, 206, 1032, 206, 206, 206, 1028, 206, 206, 1033, 206, 1459, 206, 206, 206, 206, 1107, 1035, 206, 206, 206, 206, 206, 1031, 206, 206, 206, 206, 206, 1032, 206, 206, 206, 206, 206, 1034, 1033, 206, 1036, 1108, 206, 206, 206, 1107, 1035, 1459, 206, 206, 206, 206, 206, 206, 206, 206, 206, 1039, 1459, 206, 206, 1037, 206, 1109, 1034, 206, 206, 1036, 1108, 206, 206, 206, 206, 1040, 206, 1459, 206, 206, 1038, 206, 206, 1459, 206, 206, 1039, 206, 206, 1041, 1037, 206, 1109, 1045, 206, 206, 206, 206, 206, 206, 1459, 206, 1040, 206, 1042, 206, 206, 1038, 1043, 206, 1044, 1459, 206, 206, 206, 206, 1041, 206, 206, 206, 1045, 206, 206, 206, 206, 206, 206, 1046, 1048, 206, 206, 1042, 206, 206, 1459, 1043, 206, 1044, 1047, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 1110, 206, 206, 206, 206, 1046, 1048, 206, 206, 1049, 206, 206, 206, 206, 206, 1051, 1047, 206, 206, 206, 1050, 206, 206, 206, 1052, 206, 1459, 1110, 206, 206, 206, 206, 206, 206, 1057, 206, 1049, 206, 206, 206, 206, 206, 1051, 206, 206, 206, 1055, 1050, 1056, 206, 206, 1052, 1053, 1054, 206, 206, 1060, 206, 206, 206, 206, 1057, 206, 206, 1059, 206, 206, 1111, 1058, 1459, 206, 206, 206, 1055, 206, 1056, 206, 206, 206, 1053, 1054, 206, 206, 1060, 206, 206, 206, 206, 206, 206, 206, 1059, 206, 206, 1111, 1058, 1064, 1061, 206, 206, 1062, 206, 1063, 206, 206, 206, 206, 206, 206, 206, 1065, 206, 206, 206, 206, 206, 206, 1068, 1067, 206, 1066, 206, 1112, 1064, 1061, 206, 206, 1062, 1113, 1063, 1070, 206, 206, 206, 206, 206, 206, 1065, 206, 206, 1114, 206, 1069, 206, 1068, 1067, 206, 1066, 206, 1112, 206, 1072, 206, 206, 1459, 1113, 1073, 1070, 1459, 206, 206, 206, 1071, 206, 1115, 206, 206, 1114, 206, 1069, 206, 1075, 206, 206, 206, 206, 1077, 206, 1072, 206, 206, 206, 1074, 1073, 206, 206, 1459, 206, 206, 1071, 206, 1115, 1459, 206, 206, 206, 1459, 1076, 1075, 206, 1459, 206, 206, 1077, 206, 206, 1459, 206, 206, 1074, 1078, 206, 206, 206, 206, 206, 206, 1082, 206, 206, 1459, 206, 206, 1080, 1076, 1079, 1459, 1081, 1083, 1085, 1459, 206, 206, 206, 206, 206, 206, 1078, 206, 206, 206, 206, 206, 206, 1082, 206, 206, 206, 206, 206, 1080, 1084, 1079, 206, 1081, 1083, 1085, 206, 1459, 206, 206, 206, 206, 206, 1459, 206, 206, 206, 206, 1086, 1459, 206, 206, 206, 206, 206, 206, 206, 1084, 206, 206, 1116, 1459, 206, 206, 1087, 206, 206, 206, 1089, 1459, 206, 206, 206, 206, 206, 1086, 1088, 206, 206, 206, 206, 1092, 206, 206, 1117, 206, 206, 1116, 1090, 206, 206, 1087, 206, 206, 206, 1089, 1091, 206, 206, 206, 206, 1094, 206, 1088, 206, 206, 206, 206, 1092, 206, 206, 1117, 1459, 206, 206, 1090, 1096, 206, 1093, 206, 1097, 1095, 206, 1091, 206, 206, 206, 206, 1094, 206, 1098, 206, 206, 206, 206, 206, 206, 206, 1099, 206, 1118, 206, 1459, 1096, 206, 1093, 1119, 1097, 1095, 206, 206, 206, 206, 206, 1101, 206, 206, 1098, 206, 206, 1100, 206, 206, 206, 206, 1099, 206, 1118, 1102, 206, 206, 206, 1120, 1119, 206, 1121, 1122, 206, 206, 1123, 1124, 1101, 206, 206, 1125, 206, 206, 1100, 1126, 206, 206, 206, 1127, 1128, 1129, 1102, 206, 206, 1131, 1120, 1132, 206, 1121, 1122, 1133, 206, 1123, 1124, 1134, 1130, 1135, 1125, 1136, 1137, 1138, 1126, 206, 206, 1139, 1127, 1128, 1129, 1140, 1141, 1142, 1131, 1143, 1132, 1144, 1145, 1146, 1133, 1147, 1148, 1149, 1134, 1130, 1135, 1150, 1136, 1137, 1138, 1151, 1152, 1153, 1139, 1154, 1155, 1156, 1140, 1141, 1142, 1157, 1143, 1158, 1144, 1145, 1146, 1159, 1147, 1148, 1149, 1160, 1161, 1162, 1150, 1163, 1164, 1165, 1151, 1152, 1153, 1166, 1154, 1155, 1156, 1167, 1168, 1169, 1157, 1170, 1158, 1171, 1172, 1173, 1159, 1174, 1175, 1176, 1160, 1161, 1162, 1177, 1163, 1164, 1165, 1178, 1179, 1180, 1166, 1181, 1182, 1183, 1167, 1168, 1169, 1184, 1170, 1185, 1171, 1172, 1173, 1186, 1174, 1175, 1176, 1187, 1188, 206, 1177, 206, 206, 206, 1178, 1179, 1180, 206, 1181, 1182, 1183, 206, 1275, 1193, 1184, 206, 1185, 1189, 1191, 206, 1186, 206, 206, 206, 1187, 1188, 206, 206, 206, 206, 206, 206, 1190, 206, 206, 206, 1459, 206, 206, 1275, 1193, 1194, 206, 206, 1189, 1191, 206, 206, 206, 206, 206, 206, 1192, 1459, 206, 1195, 206, 206, 206, 1190, 206, 206, 206, 206, 206, 1459, 1196, 206, 1194, 1276, 206, 206, 206, 1459, 206, 1277, 206, 206, 206, 1192, 206, 1197, 1195, 206, 206, 206, 1201, 1200, 206, 1199, 206, 206, 206, 1196, 206, 1198, 1276, 206, 206, 206, 206, 206, 1277, 206, 206, 206, 206, 206, 1197, 1459, 1202, 206, 206, 1201, 1200, 1207, 1199, 1278, 206, 206, 206, 206, 1198, 206, 206, 1203, 206, 206, 206, 206, 1204, 1279, 206, 206, 206, 206, 1206, 1202, 206, 1459, 206, 1205, 1207, 206, 1278, 206, 206, 206, 206, 206, 206, 206, 1203, 206, 206, 1208, 206, 1204, 1279, 1459, 1210, 206, 206, 1206, 1212, 206, 206, 206, 1205, 1209, 206, 206, 206, 206, 206, 1213, 206, 1459, 206, 1280, 1281, 206, 1208, 1211, 206, 206, 206, 1210, 1215, 206, 1282, 1212, 206, 206, 206, 206, 1209, 1459, 206, 206, 1214, 206, 1213, 1216, 206, 206, 1280, 1281, 1459, 206, 1211, 206, 206, 206, 1217, 1215, 206, 1282, 1218, 206, 206, 206, 206, 206, 206, 1459, 206, 1214, 206, 206, 1216, 206, 206, 1219, 1223, 1220, 206, 206, 206, 206, 206, 1217, 1283, 206, 1459, 1218, 206, 206, 206, 206, 206, 206, 1221, 206, 1459, 206, 206, 206, 206, 206, 1219, 1223, 1220, 206, 206, 206, 206, 206, 1227, 1283, 206, 1222, 206, 206, 206, 206, 206, 1225, 1228, 1221, 206, 1224, 206, 206, 206, 206, 206, 206, 206, 1226, 206, 206, 206, 1230, 206, 1227, 1459, 206, 1222, 206, 206, 206, 206, 1233, 1225, 1228, 1229, 206, 1224, 206, 206, 206, 206, 206, 206, 206, 1226, 206, 206, 206, 1230, 206, 1232, 206, 206, 206, 206, 1231, 206, 206, 1233, 206, 206, 1229, 206, 1459, 206, 206, 206, 206, 206, 206, 1234, 1235, 206, 206, 206, 206, 206, 1232, 206, 206, 206, 206, 1231, 206, 206, 206, 206, 206, 1236, 206, 206, 206, 206, 1284, 206, 206, 206, 1234, 1235, 1459, 206, 206, 206, 206, 206, 1237, 206, 206, 206, 206, 206, 206, 206, 1238, 206, 1236, 206, 206, 206, 206, 1284, 206, 206, 206, 206, 1285, 1239, 206, 206, 206, 1459, 206, 1237, 1240, 206, 206, 206, 206, 206, 206, 1238, 206, 1241, 206, 1242, 206, 206, 206, 206, 1459, 206, 206, 1285, 1239, 206, 206, 206, 1244, 1245, 206, 1240, 206, 1243, 206, 206, 206, 206, 206, 1459, 1241, 206, 1242, 206, 1459, 206, 206, 1246, 206, 1248, 206, 206, 206, 206, 206, 1244, 1245, 206, 1286, 206, 1243, 206, 206, 206, 1247, 206, 1250, 1249, 206, 206, 206, 206, 206, 206, 1246, 206, 1248, 206, 206, 206, 206, 206, 1251, 206, 206, 1286, 206, 1252, 1287, 1459, 206, 1247, 206, 1250, 1249, 206, 206, 1253, 206, 206, 206, 206, 206, 206, 206, 1256, 206, 1288, 1459, 1251, 206, 206, 1254, 206, 1252, 1287, 1255, 1258, 206, 206, 206, 206, 206, 1459, 1253, 1289, 206, 1459, 206, 206, 206, 206, 1256, 206, 1288, 206, 1290, 1259, 206, 1254, 206, 206, 1459, 1255, 1258, 206, 206, 206, 206, 206, 1257, 1459, 1289, 206, 1263, 206, 206, 1459, 206, 206, 1260, 206, 206, 1290, 1259, 206, 206, 206, 206, 1261, 1264, 1265, 206, 206, 1262, 206, 206, 1257, 206, 206, 206, 1263, 206, 206, 1267, 206, 206, 1260, 206, 1266, 206, 1291, 206, 206, 1269, 206, 1261, 1264, 1265, 206, 206, 1262, 206, 206, 206, 206, 206, 206, 1268, 206, 206, 1267, 206, 206, 206, 1459, 1266, 206, 1291, 206, 1270, 1269, 206, 1292, 206, 1459, 1293, 206, 1294, 206, 206, 206, 206, 206, 1459, 1268, 206, 206, 1271, 206, 206, 206, 1272, 206, 206, 1459, 206, 1270, 1273, 1295, 1292, 206, 206, 1293, 1296, 1294, 206, 206, 1297, 206, 206, 1274, 1298, 206, 1299, 1271, 206, 1300, 1301, 1272, 206, 206, 206, 206, 1302, 1273, 1295, 1303, 1304, 206, 1305, 1296, 1306, 1307, 1308, 1297, 1309, 1310, 1274, 1298, 206, 1299, 1311, 206, 1300, 1301, 1312, 1313, 1314, 206, 1315, 1302, 1316, 1317, 1303, 1304, 1318, 1305, 1319, 1306, 1307, 1308, 1320, 1309, 1310, 1321, 1322, 1323, 1324, 1311, 1325, 206, 1459, 1312, 1313, 1314, 1326, 1315, 1459, 1316, 1317, 206, 1327, 1318, 206, 1319, 206, 1329, 1377, 1320, 206, 206, 1321, 1322, 1323, 1324, 206, 1325, 206, 1328, 1330, 206, 206, 1326, 206, 206, 206, 206, 206, 1327, 206, 206, 1459, 206, 1329, 1377, 1331, 206, 206, 1332, 206, 206, 206, 206, 206, 206, 1328, 1330, 206, 206, 206, 206, 206, 206, 206, 206, 1336, 206, 206, 206, 1338, 206, 1333, 1331, 206, 1334, 1332, 206, 206, 206, 206, 206, 206, 1335, 1459, 206, 1378, 206, 206, 206, 206, 206, 206, 1336, 206, 206, 206, 1338, 206, 1333, 1339, 206, 1334, 206, 206, 206, 1337, 206, 206, 206, 1335, 206, 206, 1378, 206, 206, 206, 206, 206, 206, 1340, 206, 206, 206, 206, 206, 1459, 1339, 206, 206, 206, 206, 206, 1337, 1341, 206, 206, 1343, 206, 206, 206, 206, 206, 206, 1342, 206, 206, 1340, 1379, 206, 206, 206, 206, 206, 206, 206, 206, 206, 1380, 206, 206, 1341, 1344, 206, 1343, 206, 206, 206, 206, 206, 206, 1342, 206, 206, 1345, 1379, 206, 206, 206, 206, 206, 206, 1346, 1347, 206, 1380, 206, 206, 206, 1344, 206, 206, 206, 206, 1381, 206, 206, 206, 206, 206, 206, 1345, 206, 206, 206, 206, 206, 1349, 206, 1346, 1347, 206, 206, 206, 1348, 206, 1350, 206, 206, 206, 206, 1381, 206, 206, 206, 206, 206, 1352, 206, 206, 206, 1459, 206, 206, 1349, 206, 1459, 206, 206, 206, 206, 1348, 206, 1350, 206, 206, 206, 206, 1382, 206, 206, 1383, 1459, 206, 1352, 206, 206, 206, 1351, 206, 206, 206, 206, 1353, 206, 206, 206, 1355, 1354, 206, 1459, 206, 206, 1459, 206, 1382, 206, 206, 1383, 206, 206, 206, 206, 206, 1359, 1351, 206, 206, 206, 206, 1353, 206, 206, 206, 1355, 1354, 206, 1356, 206, 206, 1357, 206, 206, 206, 206, 1358, 206, 1360, 206, 206, 1459, 1359, 1459, 206, 206, 1362, 206, 206, 206, 206, 1363, 206, 1459, 206, 1356, 1459, 206, 1357, 206, 206, 1459, 206, 1358, 1384, 1360, 206, 1361, 206, 206, 206, 206, 206, 1362, 206, 206, 1459, 206, 1363, 206, 1364, 1365, 206, 206, 206, 206, 1367, 1459, 1366, 206, 1385, 1384, 206, 206, 1361, 206, 206, 206, 206, 206, 206, 1386, 206, 206, 206, 206, 206, 1364, 1365, 206, 206, 206, 206, 1367, 206, 1366, 206, 1385, 1369, 206, 206, 1368, 206, 206, 206, 1459, 206, 206, 1386, 206, 206, 206, 206, 206, 206, 1370, 1371, 1372, 206, 206, 206, 206, 206, 206, 206, 1369, 1459, 206, 1368, 206, 206, 206, 206, 206, 206, 1373, 1374, 206, 206, 206, 206, 206, 1370, 1371, 1372, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 1387, 206, 206, 206, 206, 1388, 206, 1373, 1374, 206, 206, 206, 206, 206, 1375, 206, 1389, 1390, 206, 1391, 206, 206, 1376, 206, 206, 206, 206, 1387, 206, 206, 206, 1392, 1388, 1393, 1394, 206, 1395, 1396, 1397, 1398, 206, 1375, 206, 1389, 1390, 206, 1391, 1399, 206, 1376, 206, 1400, 206, 206, 1459, 206, 206, 206, 1392, 1459, 1393, 1394, 206, 1395, 1396, 1397, 1398, 206, 1401, 206, 206, 206, 206, 206, 1399, 206, 206, 206, 1400, 206, 206, 1403, 206, 206, 206, 1402, 206, 206, 1459, 206, 206, 206, 1459, 1425, 206, 1401, 206, 206, 206, 206, 206, 206, 206, 206, 206, 1404, 206, 1406, 1403, 206, 1405, 206, 1402, 206, 206, 206, 206, 206, 206, 206, 1425, 206, 1459, 206, 206, 206, 1459, 206, 206, 206, 1407, 206, 1404, 206, 1406, 206, 206, 1405, 206, 206, 1408, 206, 206, 206, 206, 206, 206, 1459, 206, 1410, 206, 206, 206, 1411, 206, 206, 206, 1407, 206, 206, 1459, 206, 206, 206, 1409, 1426, 206, 1408, 206, 206, 206, 206, 206, 206, 206, 206, 1410, 206, 1427, 206, 1411, 206, 206, 206, 1459, 1412, 206, 206, 206, 1414, 206, 1409, 1426, 206, 206, 206, 206, 206, 206, 1459, 206, 206, 206, 1415, 206, 1427, 206, 206, 206, 206, 206, 1413, 1412, 206, 206, 206, 1414, 206, 206, 206, 206, 206, 206, 206, 206, 206, 1416, 206, 206, 1459, 1415, 1459, 206, 1459, 206, 1428, 206, 206, 1413, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 1416, 206, 206, 1417, 1418, 1419, 206, 206, 206, 1428, 1459, 206, 1459, 206, 1459, 206, 206, 206, 206, 1429, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 1417, 1418, 1419, 1420, 206, 206, 1421, 1423, 1424, 1422, 206, 206, 206, 206, 206, 206, 1429, 206, 206, 206, 1430, 206, 1431, 1432, 206, 206, 206, 206, 206, 1433, 1420, 206, 206, 1421, 1423, 1424, 1422, 206, 206, 206, 1434, 206, 1435, 1436, 1437, 206, 206, 1430, 206, 1431, 1432, 1459, 206, 206, 206, 206, 1433, 206, 206, 206, 1459, 206, 206, 206, 1459, 1439, 1459, 1434, 206, 1435, 1436, 1437, 206, 206, 206, 206, 1438, 206, 206, 206, 206, 206, 206, 206, 206, 206, 1441, 206, 206, 206, 206, 206, 1439, 1440, 206, 206, 206, 1459, 206, 206, 206, 206, 206, 1438, 206, 206, 206, 206, 206, 206, 206, 206, 206, 1441, 206, 206, 206, 1442, 206, 1443, 1440, 206, 206, 206, 1444, 206, 206, 206, 206, 206, 1445, 1459, 206, 206, 206, 206, 1451, 1459, 206, 1452, 1453, 206, 206, 206, 1442, 206, 1443, 206, 206, 206, 1459, 1444, 1447, 206, 206, 206, 1446, 1445, 206, 206, 206, 206, 206, 1451, 1449, 206, 1452, 1453, 206, 1448, 1459, 1459, 206, 1454, 206, 206, 1450, 206, 206, 1447, 206, 206, 206, 1446, 1459, 206, 206, 206, 206, 1459, 206, 1449, 206, 206, 206, 206, 1448, 206, 206, 206, 1454, 206, 206, 1450, 206, 206, 206, 206, 206, 206, 206, 206, 1455, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 1459, 206, 206, 206, 206, 206, 206, 206, 206, 1457, 206, 1459, 206, 206, 206, 206, 1455, 1456, 206, 206, 206, 206, 206, 206, 206, 206, 1459, 206, 1459, 206, 1459, 206, 206, 1459, 206, 206, 1457, 1459, 1458, 206, 206, 206, 1459, 1459, 1456, 206, 1459, 1459, 206, 206, 1459, 206, 206, 1459, 206, 1459, 206, 1459, 1459, 206, 1459, 1459, 1459, 1459, 1459, 1458, 1459, 1459, 206, 1459, 1459, 1459, 206, 1459, 1459, 1459, 206, 46, 46, 46, 46, 46, 88, 1459, 1459, 88, 88, 192, 192, 192, 1459, 192, 194, 1459, 194, 194, 194, 197, 1459, 197, 197, 197, 7, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459}; static const flex_int16_t yy_chk[5926] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 9, 9, 10, 10, 15, 22, 15, 17, 17, 18, 18, 21, 30, 21, 31, 21, 42, 43, 43, 1462, 44, 21, 98, 21, 42, 22, 445, 21, 21, 21, 21, 302, 22, 49, 49, 50, 50, 201, 21, 30, 21, 31, 21, 42, 43, 43, 27, 44, 21, 98, 21, 42, 22, 27, 21, 21, 21, 21, 23, 27, 24, 55, 200, 55, 24, 23, 57, 57, 24, 197, 25, 92, 23, 27, 24, 23, 23, 24, 23, 91, 27, 25, 28, 25, 99, 23, 27, 24, 25, 36, 28, 24, 23, 25, 88, 24, 28, 25, 34, 23, 36, 24, 23, 23, 24, 23, 36, 100, 25, 28, 25, 99, 34, 58, 58, 25, 36, 28, 34, 34, 25, 26, 32, 28, 67, 34, 32, 36, 85, 26, 32, 67, 26, 36, 100, 26, 32, 67, 26, 34, 60, 26, 86, 86, 67, 34, 34, 71, 26, 32, 59, 67, 56, 32, 90, 90, 26, 32, 67, 26, 195, 195, 26, 32, 67, 26, 52, 71, 26, 29, 29, 67, 77, 51, 71, 29, 29, 29, 84, 33, 70, 38, 29, 33, 103, 38, 41, 33, 41, 38, 70, 41, 77, 33, 71, 38, 29, 29, 84, 77, 70, 104, 29, 29, 29, 84, 33, 70, 38, 29, 33, 103, 38, 41, 33, 41, 38, 70, 41, 77, 33, 35, 38, 199, 199, 84, 105, 70, 104, 35, 47, 106, 113, 35, 45, 35, 35, 35, 20, 19, 16, 114, 11, 118, 7, 4, 83, 68, 35, 83, 83, 68, 3, 105, 102, 68, 35, 102, 106, 113, 35, 68, 35, 35, 35, 39, 83, 39, 114, 39, 118, 68, 39, 83, 68, 101, 83, 83, 68, 39, 39, 102, 68, 101, 102, 0, 101, 119, 68, 0, 107, 107, 39, 83, 39, 0, 39, 72, 68, 39, 120, 72, 101, 121, 107, 72, 39, 39, 40, 40, 101, 72, 40, 101, 119, 40, 40, 107, 107, 110, 122, 72, 40, 110, 72, 40, 0, 120, 72, 0, 121, 107, 72, 0, 0, 40, 40, 0, 72, 40, 0, 0, 40, 40, 0, 0, 110, 122, 72, 40, 110, 0, 40, 61, 61, 0, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 62, 73, 62, 62, 62, 73, 109, 117, 117, 73, 62, 112, 62, 109, 123, 73, 62, 62, 62, 62, 127, 112, 0, 62, 0, 73, 0, 62, 73, 62, 62, 62, 73, 109, 117, 117, 73, 62, 112, 62, 109, 123, 73, 62, 62, 62, 62, 127, 112, 76, 62, 63, 73, 76, 115, 63, 129, 130, 63, 115, 76, 111, 111, 111, 125, 63, 76, 125, 63, 63, 131, 63, 0, 76, 0, 63, 76, 132, 63, 0, 76, 115, 63, 129, 130, 63, 115, 76, 111, 111, 111, 125, 63, 76, 125, 63, 63, 131, 63, 81, 76, 78, 63, 64, 132, 78, 126, 64, 81, 78, 81, 64, 126, 81, 133, 78, 135, 64, 0, 81, 64, 134, 0, 136, 134, 78, 81, 64, 78, 0, 64, 138, 78, 126, 64, 81, 78, 81, 64, 126, 81, 133, 78, 135, 64, 82, 81, 64, 134, 82, 136, 134, 78, 82, 64, 65, 116, 128, 138, 65, 139, 116, 142, 128, 143, 144, 65, 116, 65, 82, 140, 145, 82, 65, 116, 116, 82, 146, 65, 65, 82, 140, 65, 116, 128, 0, 65, 139, 116, 142, 128, 143, 144, 65, 116, 65, 82, 140, 145, 0, 65, 116, 116, 0, 146, 65, 65, 66, 140, 149, 141, 66, 147, 150, 147, 66, 151, 148, 66, 148, 141, 66, 152, 153, 66, 141, 141, 66, 154, 155, 148, 66, 0, 0, 66, 156, 149, 141, 66, 147, 150, 147, 66, 151, 148, 66, 148, 141, 66, 152, 153, 66, 141, 141, 66, 154, 155, 148, 66, 69, 69, 69, 156, 157, 159, 160, 69, 69, 69, 161, 162, 163, 124, 69, 124, 164, 166, 168, 124, 69, 0, 0, 0, 170, 0, 124, 69, 69, 69, 124, 157, 159, 160, 69, 69, 69, 161, 162, 163, 124, 69, 124, 164, 166, 168, 124, 69, 74, 169, 165, 170, 74, 124, 165, 171, 173, 124, 165, 174, 169, 172, 74, 175, 176, 177, 179, 0, 74, 74, 172, 181, 74, 0, 0, 74, 169, 165, 172, 74, 184, 165, 171, 173, 185, 165, 174, 169, 172, 74, 175, 176, 177, 179, 180, 74, 74, 172, 181, 74, 75, 75, 180, 178, 182, 172, 188, 184, 190, 75, 303, 185, 182, 75, 178, 75, 75, 75, 305, 0, 75, 180, 0, 0, 182, 0, 0, 75, 75, 180, 178, 182, 189, 188, 307, 190, 75, 303, 189, 182, 75, 178, 75, 75, 75, 305, 183, 75, 79, 186, 79, 182, 79, 183, 187, 79, 183, 308, 186, 189, 309, 307, 79, 79, 186, 189, 206, 187, 207, 311, 313, 0, 79, 183, 0, 79, 186, 79, 207, 79, 183, 187, 79, 183, 308, 186, 206, 309, 207, 79, 79, 186, 314, 206, 187, 207, 311, 313, 212, 79, 80, 80, 208, 208, 80, 207, 209, 80, 80, 315, 316, 212, 0, 206, 80, 207, 0, 80, 212, 314, 0, 209, 317, 208, 80, 212, 209, 80, 80, 208, 208, 80, 0, 209, 80, 80, 315, 316, 212, 211, 210, 80, 211, 211, 80, 212, 0, 210, 209, 317, 208, 80, 167, 209, 167, 210, 217, 167, 210, 167, 210, 167, 318, 211, 167, 0, 211, 210, 320, 211, 211, 213, 321, 213, 210, 0, 217, 214, 323, 167, 0, 167, 210, 217, 167, 210, 167, 210, 167, 318, 211, 167, 214, 213, 215, 320, 222, 214, 213, 321, 213, 0, 219, 217, 214, 323, 219, 221, 218, 215, 216, 216, 216, 222, 215, 218, 222, 221, 325, 214, 213, 215, 218, 222, 214, 216, 219, 221, 218, 219, 216, 0, 0, 219, 221, 218, 215, 216, 216, 216, 222, 215, 218, 222, 221, 325, 228, 224, 223, 218, 226, 220, 216, 219, 221, 218, 228, 216, 220, 220, 220, 223, 224, 226, 226, 0, 228, 224, 223, 326, 226, 220, 0, 228, 224, 223, 0, 226, 220, 328, 229, 0, 229, 228, 0, 220, 220, 220, 223, 224, 226, 226, 227, 228, 224, 223, 326, 226, 220, 225, 230, 331, 229, 225, 225, 0, 328, 229, 227, 229, 225, 232, 227, 232, 230, 231, 231, 225, 225, 227, 230, 0, 0, 225, 0, 0, 225, 230, 331, 229, 225, 225, 324, 232, 0, 227, 231, 225, 232, 227, 232, 230, 231, 231, 225, 225, 324, 230, 234, 235, 225, 236, 234, 0, 0, 234, 235, 334, 0, 324, 232, 236, 235, 231, 233, 239, 233, 237, 234, 235, 233, 236, 239, 324, 237, 234, 235, 233, 236, 234, 237, 233, 234, 235, 334, 239, 233, 237, 236, 235, 238, 233, 239, 233, 237, 234, 235, 233, 236, 239, 238, 237, 240, 0, 233, 241, 242, 237, 233, 335, 238, 240, 239, 233, 237, 241, 242, 238, 0, 244, 0, 246, 240, 0, 0, 241, 242, 238, 244, 240, 243, 248, 241, 242, 336, 248, 335, 238, 240, 244, 245, 246, 241, 242, 243, 247, 244, 243, 246, 240, 243, 248, 241, 242, 247, 244, 245, 243, 248, 249, 245, 336, 248, 337, 251, 247, 244, 245, 246, 338, 249, 243, 247, 251, 243, 0, 0, 243, 248, 249, 0, 247, 253, 245, 251, 252, 249, 245, 332, 252, 337, 251, 247, 332, 260, 0, 338, 249, 0, 254, 251, 0, 253, 260, 0, 252, 249, 250, 250, 253, 0, 251, 252, 254, 260, 332, 252, 250, 0, 254, 332, 260, 250, 250, 339, 256, 254, 258, 250, 253, 260, 256, 252, 256, 250, 250, 255, 255, 340, 0, 254, 260, 258, 0, 250, 256, 254, 258, 0, 250, 250, 339, 256, 259, 258, 250, 255, 257, 256, 257, 256, 257, 261, 255, 255, 340, 259, 341, 0, 258, 257, 261, 256, 259, 258, 262, 263, 343, 0, 0, 259, 257, 261, 255, 257, 264, 257, 0, 257, 261, 262, 263, 264, 259, 341, 262, 263, 257, 261, 0, 259, 267, 262, 263, 343, 264, 265, 0, 257, 261, 265, 345, 264, 0, 266, 266, 270, 262, 263, 264, 271, 267, 262, 263, 268, 268, 269, 0, 267, 269, 265, 270, 264, 265, 266, 0, 270, 265, 345, 0, 271, 266, 266, 270, 346, 268, 269, 271, 267, 272, 273, 268, 268, 269, 273, 0, 269, 265, 270, 0, 274, 266, 272, 270, 274, 0, 275, 271, 274, 272, 283, 346, 268, 269, 273, 275, 272, 273, 0, 347, 277, 273, 277, 283, 274, 278, 275, 274, 288, 272, 283, 274, 278, 275, 0, 274, 272, 283, 0, 0, 277, 273, 275, 278, 0, 278, 347, 277, 288, 277, 283, 274, 278, 275, 276, 288, 276, 283, 276, 278, 279, 276, 281, 276, 281, 276, 280, 277, 276, 280, 278, 281, 278, 0, 276, 288, 0, 279, 348, 281, 279, 276, 0, 276, 281, 276, 280, 279, 276, 281, 276, 281, 276, 280, 285, 276, 280, 285, 281, 282, 333, 276, 0, 286, 279, 348, 281, 279, 284, 282, 286, 281, 284, 280, 287, 333, 349, 285, 290, 282, 289, 285, 287, 286, 285, 0, 282, 333, 289, 290, 286, 0, 284, 287, 287, 284, 282, 286, 290, 284, 289, 287, 333, 349, 285, 290, 282, 289, 294, 287, 286, 0, 294, 350, 291, 289, 290, 0, 291, 284, 287, 287, 291, 292, 296, 290, 292, 289, 294, 0, 292, 293, 293, 292, 291, 294, 0, 296, 291, 294, 350, 291, 0, 352, 296, 291, 292, 297, 353, 291, 292, 296, 293, 292, 295, 294, 295, 292, 293, 293, 292, 291, 0, 295, 296, 291, 0, 297, 329, 295, 352, 296, 329, 292, 297, 353, 295, 298, 299, 293, 344, 295, 299, 295, 322, 351, 298, 344, 354, 319, 295, 319, 298, 322, 297, 329, 295, 298, 356, 329, 351, 357, 299, 295, 298, 299, 319, 344, 358, 299, 359, 322, 351, 298, 344, 354, 319, 360, 319, 298, 322, 361, 362, 363, 298, 356, 364, 351, 357, 299, 365, 366, 367, 319, 368, 358, 369, 359, 370, 371, 373, 372, 374, 376, 360, 377, 378, 379, 361, 362, 363, 372, 380, 364, 371, 381, 382, 365, 366, 367, 383, 368, 384, 369, 385, 370, 371, 373, 372, 374, 376, 386, 377, 378, 379, 387, 388, 389, 372, 380, 390, 371, 381, 382, 391, 392, 393, 383, 394, 384, 395, 385, 397, 398, 400, 396, 399, 401, 386, 402, 403, 404, 387, 388, 389, 405, 406, 390, 407, 399, 408, 391, 392, 393, 396, 394, 409, 395, 410, 397, 398, 400, 396, 399, 401, 411, 402, 403, 404, 412, 413, 414, 405, 406, 416, 407, 399, 408, 417, 418, 419, 396, 421, 409, 422, 410, 423, 424, 425, 427, 428, 429, 411, 430, 432, 433, 412, 413, 414, 434, 429, 416, 431, 435, 431, 417, 418, 419, 436, 421, 437, 422, 438, 423, 424, 425, 427, 428, 429, 439, 430, 432, 433, 441, 440, 442, 434, 429, 440, 431, 435, 431, 443, 447, 446, 436, 448, 437, 449, 438, 451, 0, 450, 587, 451, 0, 439, 446, 453, 0, 441, 440, 442, 447, 446, 440, 448, 455, 449, 443, 447, 446, 450, 448, 451, 449, 452, 451, 453, 450, 587, 451, 454, 452, 446, 453, 454, 455, 456, 588, 447, 446, 456, 448, 455, 449, 452, 457, 458, 450, 459, 451, 589, 452, 459, 453, 454, 457, 458, 454, 452, 0, 456, 454, 455, 456, 588, 457, 458, 456, 459, 461, 460, 452, 457, 458, 0, 459, 461, 589, 463, 459, 590, 454, 457, 458, 462, 0, 462, 456, 460, 461, 460, 463, 457, 458, 0, 459, 461, 460, 463, 591, 464, 462, 464, 461, 466, 463, 462, 590, 0, 0, 592, 462, 466, 462, 465, 460, 461, 460, 463, 0, 593, 465, 464, 0, 466, 463, 591, 464, 462, 464, 465, 466, 469, 462, 465, 467, 467, 592, 470, 466, 468, 465, 0, 0, 468, 594, 469, 593, 465, 464, 467, 466, 469, 0, 473, 467, 471, 465, 470, 469, 595, 465, 467, 467, 468, 470, 472, 468, 474, 471, 472, 468, 594, 469, 473, 474, 471, 467, 477, 469, 477, 473, 467, 471, 0, 470, 596, 595, 474, 476, 472, 468, 479, 472, 475, 474, 471, 472, 475, 475, 477, 473, 474, 471, 476, 477, 478, 477, 480, 476, 478, 481, 479, 596, 481, 474, 476, 472, 475, 479, 597, 475, 0, 480, 484, 475, 475, 477, 480, 482, 478, 476, 485, 478, 481, 480, 476, 478, 481, 479, 482, 481, 0, 483, 484, 475, 483, 597, 0, 482, 480, 484, 485, 0, 486, 480, 482, 478, 486, 485, 489, 481, 487, 483, 488, 0, 488, 482, 490, 487, 483, 484, 0, 483, 489, 490, 482, 0, 486, 485, 489, 486, 487, 494, 491, 486, 488, 489, 490, 487, 483, 488, 492, 488, 493, 490, 487, 491, 494, 492, 599, 489, 490, 494, 491, 486, 603, 489, 493, 487, 494, 491, 492, 488, 493, 490, 496, 498, 495, 492, 496, 493, 497, 604, 491, 494, 492, 599, 499, 497, 494, 491, 495, 603, 501, 493, 499, 498, 495, 492, 496, 493, 497, 496, 498, 495, 500, 496, 499, 497, 604, 0, 605, 500, 501, 499, 497, 504, 503, 495, 504, 501, 606, 499, 498, 495, 500, 496, 502, 497, 0, 502, 505, 500, 503, 499, 505, 504, 503, 605, 500, 501, 506, 0, 504, 503, 508, 504, 0, 606, 607, 502, 505, 500, 507, 502, 508, 506, 502, 505, 512, 503, 506, 505, 504, 503, 508, 507, 0, 506, 509, 510, 510, 508, 507, 511, 509, 607, 502, 505, 512, 507, 0, 508, 506, 511, 513, 512, 516, 506, 509, 608, 510, 508, 507, 511, 514, 509, 510, 510, 515, 507, 511, 509, 516, 517, 513, 512, 516, 518, 515, 514, 511, 513, 517, 516, 514, 509, 608, 510, 515, 0, 511, 514, 519, 517, 521, 515, 0, 518, 520, 516, 517, 513, 0, 516, 518, 515, 514, 519, 609, 517, 0, 514, 519, 520, 521, 515, 523, 523, 520, 519, 517, 521, 522, 524, 518, 520, 522, 524, 525, 526, 525, 526, 0, 610, 519, 609, 611, 523, 0, 519, 520, 521, 522, 523, 523, 520, 528, 524, 525, 522, 524, 526, 0, 522, 524, 525, 526, 525, 526, 527, 610, 527, 528, 611, 523, 529, 528, 530, 0, 522, 532, 535, 0, 528, 524, 525, 536, 532, 526, 527, 529, 531, 533, 530, 531, 529, 527, 530, 527, 528, 532, 535, 529, 528, 530, 533, 536, 532, 535, 534, 537, 531, 533, 536, 532, 0, 527, 529, 531, 533, 530, 531, 529, 534, 530, 612, 540, 532, 535, 534, 537, 538, 533, 536, 543, 540, 534, 537, 531, 533, 0, 539, 543, 545, 538, 539, 540, 541, 0, 541, 534, 538, 612, 540, 543, 0, 534, 537, 538, 0, 539, 543, 540, 545, 542, 539, 542, 541, 539, 543, 545, 538, 539, 540, 541, 546, 541, 542, 538, 547, 544, 543, 544, 614, 546, 615, 542, 539, 554, 0, 545, 542, 539, 542, 541, 546, 549, 548, 0, 547, 544, 548, 546, 549, 542, 550, 547, 544, 554, 544, 614, 546, 615, 542, 551, 554, 549, 551, 555, 553, 550, 548, 546, 549, 548, 550, 547, 544, 548, 552, 549, 557, 550, 553, 551, 554, 552, 0, 555, 553, 0, 551, 558, 549, 551, 555, 553, 550, 548, 552, 559, 557, 550, 616, 556, 0, 552, 617, 557, 618, 553, 551, 558, 552, 556, 555, 553, 560, 559, 558, 559, 0, 562, 561, 556, 0, 552, 559, 557, 562, 616, 556, 560, 563, 617, 564, 618, 560, 561, 558, 0, 556, 562, 561, 560, 559, 564, 559, 565, 562, 561, 556, 566, 563, 568, 564, 562, 567, 569, 560, 563, 566, 564, 565, 560, 561, 0, 570, 565, 562, 561, 567, 566, 564, 568, 565, 570, 567, 569, 566, 563, 568, 564, 0, 567, 569, 0, 570, 566, 571, 565, 571, 619, 572, 570, 565, 0, 573, 567, 566, 0, 568, 572, 570, 567, 569, 576, 573, 0, 571, 576, 574, 575, 572, 570, 620, 571, 573, 571, 619, 572, 574, 575, 574, 573, 578, 577, 579, 621, 572, 576, 574, 575, 576, 573, 577, 571, 576, 574, 575, 572, 578, 620, 579, 573, 578, 577, 579, 574, 575, 574, 581, 578, 577, 579, 621, 0, 576, 574, 575, 582, 580, 577, 580, 584, 584, 0, 0, 578, 581, 579, 581, 578, 577, 579, 582, 622, 0, 581, 585, 582, 586, 585, 580, 583, 584, 623, 582, 580, 627, 580, 584, 584, 583, 586, 628, 581, 583, 581, 585, 629, 586, 582, 622, 583, 630, 585, 582, 586, 585, 580, 583, 584, 623, 631, 632, 627, 633, 635, 637, 583, 586, 628, 638, 583, 639, 585, 629, 586, 640, 643, 583, 630, 644, 645, 647, 650, 651, 652, 653, 654, 631, 632, 655, 633, 635, 637, 656, 657, 660, 638, 665, 639, 667, 669, 670, 640, 643, 658, 672, 644, 645, 647, 650, 651, 652, 653, 654, 673, 658, 655, 671, 671, 674, 656, 657, 660, 675, 665, 676, 667, 669, 670, 677, 678, 658, 672, 679, 680, 682, 683, 685, 686, 687, 688, 673, 658, 689, 671, 671, 674, 690, 691, 692, 675, 693, 676, 694, 695, 696, 677, 678, 697, 699, 679, 680, 682, 683, 685, 686, 687, 688, 700, 701, 689, 702, 704, 705, 690, 691, 692, 706, 693, 707, 694, 695, 696, 711, 712, 697, 699, 713, 715, 716, 717, 718, 719, 720, 721, 700, 701, 722, 702, 704, 705, 723, 724, 726, 706, 728, 707, 729, 880, 0, 711, 712, 0, 733, 713, 715, 716, 717, 718, 719, 720, 721, 732, 734, 722, 735, 733, 736, 723, 724, 726, 737, 728, 733, 729, 880, 734, 732, 0, 738, 733, 738, 732, 734, 0, 735, 0, 736, 0, 732, 734, 737, 735, 733, 736, 739, 741, 742, 737, 739, 733, 738, 0, 734, 732, 741, 738, 740, 738, 732, 734, 743, 735, 745, 736, 739, 741, 742, 737, 746, 740, 744, 739, 741, 742, 744, 739, 740, 738, 747, 748, 743, 741, 745, 740, 0, 748, 749, 743, 746, 745, 749, 739, 741, 742, 744, 746, 740, 744, 747, 748, 750, 744, 0, 740, 752, 747, 748, 743, 750, 745, 749, 752, 748, 749, 751, 746, 753, 749, 751, 756, 750, 744, 0, 0, 752, 747, 748, 750, 881, 753, 755, 752, 883, 754, 751, 750, 753, 749, 752, 756, 0, 751, 758, 753, 755, 751, 756, 750, 754, 757, 755, 752, 757, 754, 760, 881, 753, 755, 759, 883, 754, 751, 758, 753, 761, 759, 756, 762, 0, 758, 760, 755, 757, 0, 760, 754, 757, 755, 759, 757, 754, 760, 762, 0, 761, 759, 763, 762, 0, 758, 763, 761, 759, 0, 762, 764, 765, 760, 765, 757, 768, 760, 766, 0, 766, 759, 769, 768, 764, 762, 763, 761, 767, 763, 762, 764, 767, 763, 765, 0, 768, 770, 764, 765, 766, 765, 769, 768, 0, 766, 771, 766, 767, 769, 768, 764, 774, 763, 772, 767, 779, 770, 764, 767, 773, 765, 775, 768, 770, 772, 771, 766, 774, 769, 776, 773, 774, 771, 772, 767, 779, 0, 775, 774, 773, 772, 775, 779, 770, 776, 884, 773, 780, 775, 776, 781, 772, 771, 782, 774, 777, 776, 773, 774, 777, 772, 778, 779, 783, 775, 778, 773, 780, 775, 784, 781, 776, 884, 782, 780, 786, 776, 781, 783, 777, 782, 785, 777, 783, 784, 778, 777, 787, 778, 784, 783, 785, 778, 0, 780, 786, 784, 781, 885, 789, 782, 785, 786, 789, 788, 783, 777, 787, 785, 790, 783, 784, 778, 791, 787, 793, 784, 788, 785, 794, 790, 887, 786, 789, 788, 885, 789, 0, 785, 790, 789, 788, 792, 791, 787, 793, 790, 796, 0, 794, 791, 792, 793, 888, 788, 795, 794, 790, 887, 797, 789, 788, 792, 797, 798, 0, 790, 796, 795, 792, 791, 0, 793, 799, 796, 795, 794, 798, 792, 797, 888, 802, 795, 800, 798, 801, 797, 804, 0, 792, 797, 798, 799, 799, 796, 795, 800, 806, 801, 0, 799, 802, 795, 800, 798, 801, 797, 804, 802, 805, 800, 798, 801, 803, 804, 803, 805, 806, 807, 799, 799, 808, 0, 800, 806, 801, 803, 809, 802, 805, 800, 810, 801, 803, 804, 811, 805, 890, 807, 813, 803, 808, 803, 805, 806, 807, 810, 809, 808, 814, 812, 810, 814, 803, 809, 811, 805, 812, 810, 813, 803, 815, 811, 0, 890, 807, 813, 819, 808, 814, 812, 819, 818, 810, 809, 816, 814, 812, 810, 814, 817, 815, 811, 817, 812, 818, 813, 819, 815, 816, 816, 820, 818, 822, 819, 816, 814, 812, 819, 818, 817, 821, 816, 821, 891, 820, 0, 817, 815, 826, 817, 820, 818, 822, 819, 829, 816, 816, 820, 818, 822, 823, 816, 821, 824, 827, 825, 817, 821, 826, 821, 891, 820, 827, 823, 829, 826, 824, 820, 825, 822, 823, 829, 828, 824, 827, 825, 828, 823, 830, 821, 824, 827, 825, 832, 831, 826, 830, 832, 892, 827, 823, 829, 828, 824, 893, 825, 834, 823, 830, 828, 824, 827, 825, 828, 831, 830, 894, 832, 833, 835, 832, 831, 833, 830, 832, 892, 834, 836, 836, 828, 0, 893, 837, 834, 0, 830, 837, 841, 835, 835, 895, 831, 833, 894, 832, 833, 835, 839, 836, 833, 838, 839, 841, 834, 836, 836, 837, 841, 838, 837, 840, 843, 0, 837, 841, 835, 835, 895, 0, 833, 838, 839, 0, 840, 839, 836, 0, 838, 839, 841, 840, 843, 0, 837, 841, 838, 842, 840, 843, 842, 844, 845, 848, 847, 846, 847, 0, 838, 839, 845, 840, 844, 0, 846, 849, 851, 0, 840, 843, 842, 844, 845, 848, 842, 846, 847, 842, 844, 845, 848, 847, 846, 847, 850, 849, 851, 845, 850, 844, 853, 846, 849, 851, 854, 0, 852, 842, 844, 845, 848, 0, 846, 847, 850, 855, 852, 0, 856, 859, 853, 850, 849, 851, 854, 850, 852, 853, 897, 0, 857, 854, 856, 852, 858, 855, 858, 0, 856, 859, 862, 850, 855, 852, 857, 856, 859, 853, 861, 862, 857, 854, 898, 852, 858, 897, 860, 857, 860, 856, 862, 858, 855, 858, 861, 856, 859, 862, 861, 864, 863, 857, 867, 864, 865, 861, 862, 857, 860, 898, 0, 858, 866, 860, 866, 860, 863, 862, 867, 865, 863, 861, 867, 864, 865, 861, 864, 863, 868, 867, 864, 865, 866, 869, 870, 860, 869, 872, 899, 866, 0, 866, 871, 863, 900, 867, 865, 863, 868, 867, 864, 865, 873, 869, 870, 868, 874, 872, 871, 866, 869, 870, 871, 869, 872, 899, 874, 875, 876, 871, 901, 900, 873, 902, 904, 868, 874, 905, 906, 873, 869, 870, 907, 874, 872, 871, 908, 875, 876, 871, 909, 910, 911, 874, 875, 876, 912, 901, 913, 873, 902, 904, 914, 874, 905, 906, 915, 911, 917, 907, 920, 921, 922, 908, 875, 876, 923, 909, 910, 911, 924, 925, 927, 912, 928, 913, 929, 931, 932, 914, 933, 934, 935, 915, 911, 917, 941, 920, 921, 922, 943, 944, 946, 923, 947, 949, 951, 924, 925, 927, 952, 928, 953, 929, 931, 932, 954, 933, 934, 935, 955, 956, 959, 941, 960, 961, 962, 943, 944, 946, 963, 947, 949, 951, 965, 966, 967, 952, 968, 953, 969, 970, 971, 954, 972, 973, 974, 955, 956, 959, 975, 960, 961, 962, 976, 977, 978, 963, 980, 981, 982, 965, 966, 967, 984, 968, 985, 969, 970, 971, 986, 972, 973, 974, 987, 989, 990, 975, 991, 992, 993, 976, 977, 978, 995, 980, 981, 982, 994, 1104, 998, 984, 996, 985, 993, 996, 990, 986, 991, 992, 993, 987, 989, 990, 995, 991, 992, 993, 994, 994, 998, 995, 996, 0, 999, 994, 1104, 998, 1000, 996, 997, 993, 996, 990, 1002, 991, 992, 993, 1003, 997, 0, 995, 1001, 1001, 999, 994, 994, 998, 1000, 996, 997, 999, 0, 1003, 1002, 1000, 1106, 997, 1003, 1004, 0, 1002, 1108, 1001, 1007, 1003, 997, 1005, 1004, 1001, 1001, 999, 1006, 1008, 1007, 1000, 1006, 997, 1009, 1004, 1003, 1002, 1005, 1106, 1007, 1003, 1004, 1005, 1010, 1108, 1001, 1007, 1006, 1008, 1005, 1004, 0, 1010, 1009, 1006, 1008, 1007, 1015, 1006, 1109, 1009, 1004, 1012, 1010, 1005, 1014, 1007, 1011, 1016, 1005, 1010, 1011, 1012, 1110, 1006, 1008, 1013, 1015, 1014, 1010, 1009, 0, 1012, 1013, 1015, 1014, 1109, 1019, 1016, 1012, 1010, 1011, 1014, 1017, 1011, 1016, 1013, 1017, 1011, 1012, 1110, 0, 1019, 1013, 1015, 1014, 1021, 1019, 1018, 1012, 1013, 1018, 1014, 1017, 1019, 1016, 1020, 1022, 1011, 0, 1017, 1111, 1113, 1013, 1017, 1020, 1021, 1023, 1018, 1019, 1024, 1024, 1114, 1021, 1019, 1018, 1020, 1022, 1018, 0, 1017, 1025, 1023, 1020, 1022, 1024, 1026, 1023, 1111, 1113, 0, 1024, 1020, 1021, 1023, 1018, 1025, 1024, 1024, 1114, 1026, 1025, 1029, 1020, 1022, 1031, 1026, 0, 1025, 1023, 1032, 1027, 1024, 1026, 1023, 1027, 1034, 1028, 1024, 1028, 1034, 1030, 1029, 1025, 1116, 1031, 0, 1026, 1025, 1029, 1032, 1027, 1031, 1026, 1030, 1033, 0, 1032, 1027, 1028, 1034, 1030, 1027, 1034, 1028, 1036, 1028, 1034, 1030, 1029, 1038, 1116, 1031, 1033, 1039, 1033, 1035, 1032, 1027, 1036, 1040, 1030, 1033, 1035, 1040, 1036, 1028, 1034, 1030, 1037, 1038, 1037, 1036, 1041, 1039, 1042, 1035, 1038, 0, 1043, 1033, 1039, 1033, 1035, 1040, 1046, 1036, 1040, 1041, 1037, 1035, 1040, 1036, 1041, 1044, 1042, 1037, 1038, 1037, 1043, 1041, 1039, 1042, 1035, 1045, 1046, 1043, 1049, 1045, 1044, 1047, 1040, 1046, 1050, 1044, 1041, 1037, 0, 1048, 1051, 1041, 1044, 1042, 1052, 1047, 1048, 1043, 1049, 1045, 1053, 1047, 1045, 1046, 1050, 1049, 1045, 1044, 1047, 1048, 1051, 1050, 1044, 1054, 1052, 1055, 1048, 1051, 1117, 1058, 1053, 1052, 1047, 1048, 0, 1049, 1045, 1053, 1047, 1057, 1056, 1050, 1061, 1054, 1056, 1055, 1048, 1051, 1057, 1058, 1054, 1052, 1055, 1060, 1063, 1117, 1058, 1053, 1059, 1057, 1118, 1059, 1061, 1062, 1056, 0, 1057, 1056, 1060, 1061, 1054, 1056, 1055, 1060, 1063, 1057, 1058, 1062, 1059, 1064, 1060, 1063, 1065, 1062, 0, 1059, 1057, 1118, 1059, 1061, 1062, 1056, 1066, 1067, 1067, 1060, 1066, 1065, 1068, 1064, 1060, 1063, 1065, 0, 1062, 1059, 1064, 1070, 0, 1065, 1062, 1068, 1071, 1072, 1067, 1069, 1066, 1073, 1068, 1066, 1067, 1067, 1119, 1066, 1065, 1068, 1064, 1070, 1069, 1065, 1074, 1073, 1071, 1072, 1070, 1069, 1077, 1073, 1068, 1071, 1072, 1067, 1069, 1066, 1073, 1068, 1075, 1076, 1075, 1119, 1074, 1076, 1120, 0, 1070, 1069, 1077, 1074, 1073, 1071, 1072, 1078, 1069, 1077, 1073, 1078, 1079, 1076, 1075, 1081, 1081, 1122, 0, 1075, 1076, 1075, 1079, 1074, 1076, 1120, 1080, 1083, 1083, 1077, 1080, 1078, 1079, 0, 1078, 1125, 1081, 0, 1078, 1079, 1076, 1075, 1081, 1081, 1122, 1082, 1129, 1084, 1083, 1079, 1080, 1084, 0, 1080, 1083, 1083, 1085, 1080, 1078, 1079, 1082, 0, 1125, 1081, 1088, 1082, 1086, 0, 1088, 1087, 1085, 1084, 1082, 1129, 1084, 1083, 1085, 1080, 1084, 1086, 1089, 1090, 1092, 1085, 1087, 1090, 1086, 1082, 1088, 1087, 1091, 1088, 1082, 1086, 1093, 1088, 1087, 1085, 1084, 1091, 1089, 1130, 1092, 1085, 1095, 1090, 1086, 1089, 1090, 1092, 1091, 1087, 1090, 1086, 1093, 1088, 1087, 1091, 1094, 1094, 1096, 1093, 1097, 1101, 1095, 0, 1091, 1089, 1130, 1092, 1097, 1095, 1090, 1131, 1098, 0, 1133, 1091, 1134, 1094, 1096, 1093, 1097, 1101, 0, 1094, 1094, 1096, 1098, 1097, 1101, 1095, 1099, 1102, 1098, 0, 1099, 1097, 1100, 1136, 1131, 1098, 1100, 1133, 1137, 1134, 1094, 1096, 1142, 1097, 1101, 1102, 1144, 1102, 1146, 1098, 1099, 1147, 1148, 1099, 1102, 1098, 1100, 1099, 1151, 1100, 1136, 1152, 1153, 1100, 1156, 1137, 1157, 1159, 1160, 1142, 1161, 1162, 1102, 1144, 1102, 1146, 1163, 1099, 1147, 1148, 1165, 1166, 1167, 1100, 1168, 1151, 1169, 1173, 1152, 1153, 1175, 1156, 1176, 1157, 1159, 1160, 1177, 1161, 1162, 1178, 1179, 1180, 1186, 1163, 1187, 1189, 0, 1165, 1166, 1167, 1190, 1168, 0, 1169, 1173, 1191, 1192, 1175, 1192, 1176, 1193, 1195, 1276, 1177, 1194, 1189, 1178, 1179, 1180, 1186, 1190, 1187, 1189, 1194, 1196, 1191, 1197, 1190, 1192, 1198, 1193, 1195, 1191, 1192, 1194, 1192, 0, 1193, 1195, 1276, 1197, 1194, 1189, 1199, 1196, 1199, 1197, 1190, 1201, 1198, 1194, 1196, 1191, 1197, 1202, 1192, 1198, 1193, 1195, 1200, 1204, 1194, 1204, 1203, 1206, 1199, 1200, 1197, 1201, 1202, 1199, 1196, 1199, 1197, 1202, 1201, 1198, 1203, 0, 1200, 1281, 1202, 1204, 1203, 1206, 1205, 1200, 1204, 1207, 1204, 1203, 1206, 1199, 1200, 1208, 1201, 1202, 1208, 1209, 1210, 1205, 1202, 1212, 1213, 1203, 1205, 1200, 1281, 1207, 1204, 1203, 1206, 1205, 1214, 1211, 1207, 1211, 1208, 1209, 1210, 0, 1208, 1212, 1213, 1208, 1209, 1210, 1205, 1215, 1212, 1213, 1217, 1205, 1214, 1216, 1207, 1211, 1218, 1216, 1221, 1214, 1211, 1284, 1211, 1208, 1209, 1210, 1219, 1215, 1212, 1213, 1217, 1285, 1220, 1216, 1215, 1219, 1218, 1217, 1221, 1214, 1216, 1223, 1211, 1218, 1216, 1221, 1219, 1220, 1284, 1224, 1225, 1222, 1220, 1219, 1215, 1222, 1223, 1217, 1285, 1220, 1216, 1223, 1219, 1218, 1226, 1221, 1227, 1287, 1223, 1224, 1225, 1222, 1228, 1219, 1220, 1229, 1224, 1225, 1222, 1220, 1230, 1230, 1222, 1223, 1226, 1231, 1227, 1228, 1223, 1232, 1232, 1226, 1228, 1227, 1287, 1229, 1224, 1225, 1222, 1228, 1234, 1230, 1229, 1235, 0, 1231, 1236, 1230, 1230, 0, 1232, 1226, 1231, 1227, 1228, 1240, 1232, 1232, 1233, 1228, 1234, 1288, 1229, 1235, 1289, 0, 1236, 1234, 1230, 1237, 1235, 1233, 1231, 1236, 1241, 1240, 1237, 1232, 1233, 1238, 1239, 1238, 1240, 0, 1239, 1233, 0, 1234, 1288, 1237, 1235, 1289, 1244, 1236, 1241, 1242, 1237, 1246, 1233, 1238, 1247, 1241, 1240, 1237, 1239, 1233, 1238, 1239, 1238, 1243, 1242, 1239, 1244, 1243, 1245, 1242, 1237, 1246, 1245, 1244, 1247, 1241, 1242, 0, 1246, 0, 1238, 1247, 1249, 1243, 1248, 1239, 1250, 1251, 1245, 0, 1243, 1242, 0, 1244, 1243, 1245, 1242, 0, 1246, 1245, 1291, 1247, 1249, 1248, 1248, 1256, 1250, 1251, 1255, 1249, 1243, 1248, 0, 1250, 1251, 1245, 1252, 1253, 1252, 1253, 1254, 1257, 1255, 0, 1254, 1256, 1295, 1291, 1255, 1249, 1248, 1248, 1256, 1250, 1251, 1255, 1258, 1296, 1252, 1253, 1254, 1257, 1260, 1252, 1253, 1252, 1253, 1254, 1257, 1255, 1259, 1254, 1256, 1295, 1261, 1255, 1258, 1259, 1261, 1267, 1264, 0, 1260, 1258, 1296, 1252, 1253, 1254, 1257, 1260, 1259, 1262, 1263, 1264, 1263, 1262, 1265, 1259, 1261, 1267, 1264, 1261, 0, 1258, 1259, 1261, 1267, 1264, 1268, 1260, 1269, 1265, 1266, 1266, 1263, 1262, 1265, 1259, 1262, 1263, 1264, 1263, 1262, 1265, 1270, 1261, 1267, 1264, 1268, 1271, 1269, 1297, 1272, 1266, 1274, 1268, 1301, 1269, 1265, 1266, 1266, 1263, 1262, 1265, 1270, 1272, 1273, 1304, 1305, 1271, 1306, 1270, 1272, 1273, 1274, 1268, 1271, 1269, 1297, 1272, 1266, 1274, 1307, 1301, 1313, 1314, 1273, 1315, 1318, 1319, 1320, 1270, 1272, 1273, 1304, 1305, 1271, 1306, 1322, 1272, 1273, 1274, 1323, 1326, 1328, 0, 1327, 1329, 1330, 1307, 0, 1313, 1314, 1273, 1315, 1318, 1319, 1320, 1331, 1327, 1333, 1332, 1334, 1326, 1328, 1322, 1327, 1329, 1330, 1323, 1326, 1328, 1335, 1327, 1329, 1330, 1332, 1337, 1331, 0, 1333, 1332, 1334, 0, 1380, 1331, 1327, 1333, 1332, 1334, 1326, 1328, 1335, 1327, 1329, 1330, 1336, 1337, 1339, 1335, 1336, 1338, 1338, 1332, 1337, 1331, 1340, 1333, 1332, 1334, 1341, 1380, 1343, 0, 1342, 1344, 1345, 0, 1339, 1335, 1336, 1340, 1338, 1336, 1337, 1339, 1340, 1336, 1338, 1338, 1341, 1342, 1343, 1340, 1342, 1344, 1345, 1341, 0, 1343, 1347, 1342, 1344, 1345, 1348, 1339, 1346, 1336, 1340, 1338, 1349, 0, 1350, 1340, 1351, 1346, 1384, 1341, 1342, 1343, 1347, 1342, 1344, 1345, 1348, 1353, 1346, 1347, 1354, 1385, 1349, 1348, 1350, 1346, 1351, 0, 1352, 1349, 1352, 1350, 1356, 1351, 1346, 1384, 1357, 1353, 1359, 1347, 1354, 1355, 0, 1348, 1353, 1346, 1357, 1354, 1385, 1349, 1352, 1350, 1356, 1351, 1355, 1352, 1357, 1352, 1359, 1356, 1358, 1355, 1360, 1357, 1353, 1359, 1361, 1354, 1355, 1358, 1362, 1363, 0, 1357, 0, 1367, 0, 1352, 1386, 1356, 1358, 1355, 1360, 1357, 1364, 1359, 1361, 1358, 1355, 1360, 1362, 1363, 1366, 1361, 1365, 1367, 1358, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1364, 1386, 0, 1358, 0, 1360, 0, 1364, 1366, 1361, 1365, 1388, 1369, 1362, 1363, 1366, 1371, 1365, 1367, 1368, 1370, 1372, 1364, 1365, 1366, 1369, 1368, 1364, 1370, 1373, 1374, 1371, 1369, 1375, 1376, 1366, 1371, 1365, 1388, 1369, 1370, 1372, 1390, 1371, 1391, 1392, 1368, 1370, 1372, 1373, 1374, 1395, 1369, 1375, 1376, 1370, 1373, 1374, 1371, 1369, 1375, 1376, 1396, 1371, 1397, 1398, 1400, 1370, 1372, 1390, 1401, 1391, 1392, 0, 1402, 1403, 1373, 1374, 1395, 1405, 1375, 1376, 0, 1404, 1406, 1407, 0, 1408, 0, 1396, 1401, 1397, 1398, 1400, 1402, 1403, 1411, 1401, 1404, 1405, 1413, 1402, 1403, 1404, 1406, 1407, 1405, 1408, 1410, 1410, 1404, 1406, 1407, 1409, 1408, 1409, 1411, 1401, 1417, 0, 1413, 1402, 1403, 1411, 1412, 1404, 1405, 1413, 1414, 1410, 1404, 1406, 1407, 1409, 1408, 1410, 1410, 1415, 1417, 1412, 1409, 1414, 1409, 1411, 1412, 1417, 1415, 1413, 1414, 1418, 1416, 1412, 1416, 0, 1420, 1414, 1410, 1415, 1425, 0, 1409, 1430, 1436, 1419, 1415, 1417, 1412, 1423, 1414, 1418, 1416, 1412, 0, 1415, 1420, 1414, 1418, 1416, 1419, 1416, 1421, 1420, 1422, 1419, 1415, 1425, 1422, 1423, 1430, 1436, 1419, 1421, 0, 0, 1423, 1438, 1418, 1416, 1424, 1424, 1421, 1420, 1422, 1439, 1440, 1419, 0, 1421, 1441, 1422, 1419, 0, 1442, 1422, 1423, 1438, 1444, 1445, 1421, 1424, 1443, 1446, 1438, 1439, 1440, 1424, 1424, 1421, 1441, 1422, 1439, 1440, 1442, 1447, 1443, 1441, 1444, 1445, 1448, 1442, 1443, 1446, 1438, 1444, 1445, 0, 1424, 1443, 1446, 1450, 1439, 1440, 1449, 1447, 1453, 1441, 0, 1454, 1448, 1442, 1447, 1443, 1449, 1444, 1445, 1448, 1455, 1443, 1446, 1450, 1458, 0, 1449, 0, 1456, 0, 1450, 1454, 0, 1449, 1447, 1453, 0, 1456, 1454, 1448, 1455, 0, 0, 1449, 1458, 0, 0, 1455, 1456, 0, 1450, 1458, 0, 1449, 0, 1456, 0, 0, 1454, 0, 0, 0, 0, 0, 1456, 0, 0, 1455, 0, 0, 0, 1458, 0, 0, 0, 1456, 1460, 1460, 1460, 1460, 1460, 1461, 0, 0, 1461, 1461, 1463, 1463, 1463, 0, 1463, 1464, 0, 1464, 1464, 1464, 1465, 0, 1465, 1465, 1465, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459}; /* The intent behind this definition is that it'll catch * any uses of REJECT which flex missed. */ #define REJECT reject_used_but_not_detected #define yymore() yymore_used_but_not_detected #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET #line 1 "flex_lexer.l" /** * lexer * * */ /*************************** ** Section 1: Definitions ***************************/ #line 12 "flex_lexer.l" #include #include #include "bison_parser.h" #define TOKEN(name) \ { return SQL_##name; } static thread_local std::stringstream strbuf; char *substr(const char *source, int from, int to); #line 2462 "flex_lexer.cpp" /*************************** ** Section 2: Rules ***************************/ /* Define the output files */ /* Make reentrant */ /* performance tweeks */ /* other flags */ /* %option nodefault */ /*************************** ** Section 3: Rules ***************************/ #line 2476 "flex_lexer.cpp" #define INITIAL 0 #define singlequotedstring 1 #define COMMENT 2 #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way * down here because we want the user's section 1 to have been scanned first. * The user has a chance to override it with an option. */ #include #endif #ifndef YY_EXTRA_TYPE #define YY_EXTRA_TYPE void * #endif /* Holds the entire state of the reentrant scanner. */ struct yyguts_t { /* User-defined. Not touched by flex. */ YY_EXTRA_TYPE yyextra_r; /* The rest are the same as the globals declared in the non-reentrant scanner. */ FILE *yyin_r, *yyout_r; size_t yy_buffer_stack_top; /**< index of top of stack. */ size_t yy_buffer_stack_max; /**< capacity of stack. */ YY_BUFFER_STATE *yy_buffer_stack; /**< Stack as an array. */ char yy_hold_char; int yy_n_chars; int yyleng_r; char *yy_c_buf_p; int yy_init; int yy_start; int yy_did_buffer_switch_on_eof; int yy_start_stack_ptr; int yy_start_stack_depth; int *yy_start_stack; yy_state_type yy_last_accepting_state; char *yy_last_accepting_cpos; int yylineno_r; int yy_flex_debug_r; char *yytext_r; int yy_more_flag; int yy_more_len; YYSTYPE *yylval_r; YYLTYPE *yylloc_r; }; /* end struct yyguts_t */ static int yy_init_globals(yyscan_t yyscanner); /* This must go here because YYSTYPE and YYLTYPE are included * from bison output in section 1.*/ #define yylval yyg->yylval_r #define yylloc yyg->yylloc_r int yylex_init(yyscan_t *scanner); int yylex_init_extra(YY_EXTRA_TYPE user_defined, yyscan_t *scanner); /* Accessor methods to globals. These are made visible to non-reentrant scanners for convenience. */ int yylex_destroy(yyscan_t yyscanner); int yyget_debug(yyscan_t yyscanner); void yyset_debug(int debug_flag, yyscan_t yyscanner); YY_EXTRA_TYPE yyget_extra(yyscan_t yyscanner); void yyset_extra(YY_EXTRA_TYPE user_defined, yyscan_t yyscanner); FILE *yyget_in(yyscan_t yyscanner); void yyset_in(FILE *_in_str, yyscan_t yyscanner); FILE *yyget_out(yyscan_t yyscanner); void yyset_out(FILE *_out_str, yyscan_t yyscanner); int yyget_leng(yyscan_t yyscanner); char *yyget_text(yyscan_t yyscanner); int yyget_lineno(yyscan_t yyscanner); void yyset_lineno(int _line_number, yyscan_t yyscanner); int yyget_column(yyscan_t yyscanner); void yyset_column(int _column_no, yyscan_t yyscanner); YYSTYPE *yyget_lval(yyscan_t yyscanner); void yyset_lval(YYSTYPE *yylval_param, yyscan_t yyscanner); YYLTYPE *yyget_lloc(yyscan_t yyscanner); void yyset_lloc(YYLTYPE *yylloc_param, yyscan_t yyscanner); /* Macros after this point can all be overridden by user definitions in * section 1. */ #ifndef YY_SKIP_YYWRAP #ifdef __cplusplus extern "C" int yywrap(yyscan_t yyscanner); #else extern int yywrap(yyscan_t yyscanner); #endif #endif #ifndef YY_NO_UNPUT #endif #ifndef yytext_ptr static void yy_flex_strncpy(char *, const char *, int, yyscan_t yyscanner); #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen(const char *, yyscan_t yyscanner); #endif #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput(yyscan_t yyscanner); #else static int input(yyscan_t yyscanner); #endif #endif /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE #ifdef __ia64__ /* On IA-64, the buffer size is 16k, not 8k */ #define YY_READ_BUF_SIZE 16384 #else #define YY_READ_BUF_SIZE 8192 #endif /* __ia64__ */ #endif /* Copy whatever the last rule matched to the standard output. */ #ifndef ECHO /* This used to be an fputs(), but since the string might contain NUL's, * we now use fwrite(). */ #define ECHO \ do { \ if (fwrite(yytext, (size_t)yyleng, 1, yyout)) { \ } \ } while (0) #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, * is returned in "result". */ #ifndef YY_INPUT #define YY_INPUT(buf, result, max_size) \ if (YY_CURRENT_BUFFER_LVALUE->yy_is_interactive) { \ int c = '*'; \ int n; \ for (n = 0; n < max_size && (c = getc(yyin)) != EOF && c != '\n'; ++n) \ buf[n] = (char)c; \ if (c == '\n') buf[n++] = (char)c; \ if (c == EOF && ferror(yyin)) \ YY_FATAL_ERROR("input in flex scanner failed"); \ result = n; \ } else { \ errno = 0; \ while ((result = (int)fread(buf, 1, (yy_size_t)max_size, yyin)) == 0 && \ ferror(yyin)) { \ if (errno != EINTR) { \ YY_FATAL_ERROR("input in flex scanner failed"); \ break; \ } \ errno = 0; \ clearerr(yyin); \ } \ } #endif /* No semi-colon after return; correct usage is to write "yyterminate();" - * we don't want an extra ';' after the "return" because that will cause * some compilers to complain about unreachable statements. */ #ifndef yyterminate #define yyterminate() return YY_NULL #endif /* Number of entries by which start-condition stack grows. */ #ifndef YY_START_STACK_INCR #define YY_START_STACK_INCR 25 #endif /* Report a fatal error. */ #ifndef YY_FATAL_ERROR #define YY_FATAL_ERROR(msg) yy_fatal_error(msg, yyscanner) #endif /* end tables serialization structures and prototypes */ /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL_IS_OURS 1 extern int yylex(YYSTYPE *yylval_param, YYLTYPE *yylloc_param, yyscan_t yyscanner); #define YY_DECL \ int yylex(YYSTYPE *yylval_param, YYLTYPE *yylloc_param, yyscan_t yyscanner) #endif /* !YY_DECL */ /* Code executed at the beginning of each rule, after yytext and yyleng * have been set up. */ #ifndef YY_USER_ACTION #define YY_USER_ACTION #endif /* Code executed at the end of each rule. */ #ifndef YY_BREAK #define YY_BREAK /*LINTED*/ break; #endif #define YY_RULE_SETUP YY_USER_ACTION /** The main scanner function which does all the work. */ YY_DECL { yy_state_type yy_current_state; char *yy_cp, *yy_bp; int yy_act; struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; yylval = yylval_param; yylloc = yylloc_param; if (!yyg->yy_init) { yyg->yy_init = 1; #ifdef YY_USER_INIT YY_USER_INIT; #endif if (!yyg->yy_start) yyg->yy_start = 1; /* first start state */ if (!yyin) yyin = stdin; if (!yyout) yyout = stdout; if (!YY_CURRENT_BUFFER) { yyensure_buffer_stack(yyscanner); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer(yyin, YY_BUF_SIZE, yyscanner); } yy_load_buffer_state(yyscanner); } { #line 56 "flex_lexer.l" #line 2763 "flex_lexer.cpp" while (/*CONSTCOND*/ 1) /* loops until end-of-file is reached */ { yy_cp = yyg->yy_c_buf_p; /* Support of yytext. */ *yy_cp = yyg->yy_hold_char; /* yy_bp points to the position in yy_ch_buf of the start of * the current run. */ yy_bp = yy_cp; yy_current_state = yyg->yy_start; yy_match: do { YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; if (yy_accept[yy_current_state]) { yyg->yy_last_accepting_state = yy_current_state; yyg->yy_last_accepting_cpos = yy_cp; } while (yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state) { yy_current_state = (int)yy_def[yy_current_state]; if (yy_current_state >= 1460) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; ++yy_cp; } while (yy_current_state != 1459); yy_cp = yyg->yy_last_accepting_cpos; yy_current_state = yyg->yy_last_accepting_state; yy_find_action: yy_act = yy_accept[yy_current_state]; YY_DO_BEFORE_ACTION; do_action: /* This label is used only to access EOF actions. */ switch (yy_act) { /* beginning of action switch */ case 0: /* must back up */ /* undo the effects of YY_DO_BEFORE_ACTION */ *yy_cp = yyg->yy_hold_char; yy_cp = yyg->yy_last_accepting_cpos; yy_current_state = yyg->yy_last_accepting_state; goto yy_find_action; case 1: YY_RULE_SETUP #line 58 "flex_lexer.l" BEGIN(COMMENT); YY_BREAK case 2: YY_RULE_SETUP #line 59 "flex_lexer.l" /* skipping comment content until a end of line is read */; YY_BREAK case 3: /* rule 3 can match eol */ YY_RULE_SETUP #line 60 "flex_lexer.l" BEGIN(INITIAL); YY_BREAK case 4: /* rule 4 can match eol */ YY_RULE_SETUP #line 62 "flex_lexer.l" /* skip whitespace */; YY_BREAK case 5: YY_RULE_SETUP #line 64 "flex_lexer.l" TOKEN(DEALLOCATE) YY_BREAK case 6: YY_RULE_SETUP #line 65 "flex_lexer.l" TOKEN(PARAMETERS) YY_BREAK case 7: YY_RULE_SETUP #line 66 "flex_lexer.l" TOKEN(INTERSECT) YY_BREAK case 8: YY_RULE_SETUP #line 67 "flex_lexer.l" TOKEN(TEMPORARY) YY_BREAK case 9: YY_RULE_SETUP #line 68 "flex_lexer.l" TOKEN(TIMESTAMP) YY_BREAK case 10: YY_RULE_SETUP #line 69 "flex_lexer.l" TOKEN(DESCRIBE) YY_BREAK case 11: YY_RULE_SETUP #line 70 "flex_lexer.l" TOKEN(DISTINCT) YY_BREAK case 12: YY_RULE_SETUP #line 71 "flex_lexer.l" TOKEN(NVARCHAR) YY_BREAK case 13: YY_RULE_SETUP #line 72 "flex_lexer.l" TOKEN(RESTRICT) YY_BREAK case 14: YY_RULE_SETUP #line 73 "flex_lexer.l" TOKEN(TRUNCATE) YY_BREAK case 15: YY_RULE_SETUP #line 74 "flex_lexer.l" TOKEN(ANALYZE) YY_BREAK case 16: YY_RULE_SETUP #line 75 "flex_lexer.l" TOKEN(BETWEEN) YY_BREAK case 17: YY_RULE_SETUP #line 76 "flex_lexer.l" TOKEN(CASCADE) YY_BREAK case 18: YY_RULE_SETUP #line 77 "flex_lexer.l" TOKEN(COLUMNS) YY_BREAK case 19: YY_RULE_SETUP #line 78 "flex_lexer.l" TOKEN(CONTROL) YY_BREAK case 20: YY_RULE_SETUP #line 79 "flex_lexer.l" TOKEN(DEFAULT) YY_BREAK case 21: YY_RULE_SETUP #line 80 "flex_lexer.l" TOKEN(EXECUTE) YY_BREAK case 22: YY_RULE_SETUP #line 81 "flex_lexer.l" TOKEN(EXPLAIN) YY_BREAK case 23: YY_RULE_SETUP #line 82 "flex_lexer.l" TOKEN(INTEGER) YY_BREAK case 24: YY_RULE_SETUP #line 83 "flex_lexer.l" TOKEN(NATURAL) YY_BREAK case 25: YY_RULE_SETUP #line 84 "flex_lexer.l" TOKEN(PREPARE) YY_BREAK case 26: YY_RULE_SETUP #line 85 "flex_lexer.l" TOKEN(PRIMARY) YY_BREAK case 27: YY_RULE_SETUP #line 86 "flex_lexer.l" TOKEN(SCHEMAS) YY_BREAK case 28: YY_RULE_SETUP #line 87 "flex_lexer.l" TOKEN(SPATIAL) YY_BREAK case 29: YY_RULE_SETUP #line 88 "flex_lexer.l" TOKEN(VARCHAR) YY_BREAK case 30: YY_RULE_SETUP #line 89 "flex_lexer.l" TOKEN(VIRTUAL) YY_BREAK case 31: YY_RULE_SETUP #line 90 "flex_lexer.l" TOKEN(BEFORE) YY_BREAK case 32: YY_RULE_SETUP #line 91 "flex_lexer.l" TOKEN(COLUMN) YY_BREAK case 33: YY_RULE_SETUP #line 92 "flex_lexer.l" TOKEN(CREATE) YY_BREAK case 34: YY_RULE_SETUP #line 93 "flex_lexer.l" TOKEN(DELETE) YY_BREAK case 35: YY_RULE_SETUP #line 94 "flex_lexer.l" TOKEN(DIRECT) YY_BREAK case 36: YY_RULE_SETUP #line 95 "flex_lexer.l" TOKEN(DOUBLE) YY_BREAK case 37: YY_RULE_SETUP #line 96 "flex_lexer.l" TOKEN(ESCAPE) YY_BREAK case 38: YY_RULE_SETUP #line 97 "flex_lexer.l" TOKEN(EXCEPT) YY_BREAK case 39: YY_RULE_SETUP #line 98 "flex_lexer.l" TOKEN(EXISTS) YY_BREAK case 40: YY_RULE_SETUP #line 99 "flex_lexer.l" TOKEN(EXTRACT) YY_BREAK case 41: YY_RULE_SETUP #line 100 "flex_lexer.l" TOKEN(GLOBAL) YY_BREAK case 42: YY_RULE_SETUP #line 101 "flex_lexer.l" TOKEN(HAVING) YY_BREAK case 43: YY_RULE_SETUP #line 102 "flex_lexer.l" TOKEN(IMPORT) YY_BREAK case 44: YY_RULE_SETUP #line 103 "flex_lexer.l" TOKEN(INSERT) YY_BREAK case 45: YY_RULE_SETUP #line 104 "flex_lexer.l" TOKEN(ISNULL) YY_BREAK case 46: YY_RULE_SETUP #line 105 "flex_lexer.l" TOKEN(OFFSET) YY_BREAK case 47: YY_RULE_SETUP #line 106 "flex_lexer.l" TOKEN(RENAME) YY_BREAK case 48: YY_RULE_SETUP #line 107 "flex_lexer.l" TOKEN(SCHEMA) YY_BREAK case 49: YY_RULE_SETUP #line 108 "flex_lexer.l" TOKEN(SELECT) YY_BREAK case 50: YY_RULE_SETUP #line 109 "flex_lexer.l" TOKEN(SORTED) YY_BREAK case 51: YY_RULE_SETUP #line 110 "flex_lexer.l" TOKEN(TABLES) YY_BREAK case 52: YY_RULE_SETUP #line 111 "flex_lexer.l" TOKEN(UNIQUE) YY_BREAK case 53: YY_RULE_SETUP #line 112 "flex_lexer.l" TOKEN(UNLOAD) YY_BREAK case 54: YY_RULE_SETUP #line 113 "flex_lexer.l" TOKEN(UPDATE) YY_BREAK case 55: YY_RULE_SETUP #line 114 "flex_lexer.l" TOKEN(VALUES) YY_BREAK case 56: YY_RULE_SETUP #line 115 "flex_lexer.l" TOKEN(AFTER) YY_BREAK case 57: YY_RULE_SETUP #line 116 "flex_lexer.l" TOKEN(ALTER) YY_BREAK case 58: YY_RULE_SETUP #line 117 "flex_lexer.l" TOKEN(ARRAY) YY_BREAK case 59: YY_RULE_SETUP #line 118 "flex_lexer.l" TOKEN(CROSS) YY_BREAK case 60: YY_RULE_SETUP #line 119 "flex_lexer.l" TOKEN(DELTA) YY_BREAK case 61: YY_RULE_SETUP #line 120 "flex_lexer.l" TOKEN(FLOAT) YY_BREAK case 62: YY_RULE_SETUP #line 121 "flex_lexer.l" TOKEN(GROUP) YY_BREAK case 63: YY_RULE_SETUP #line 122 "flex_lexer.l" TOKEN(INDEX) YY_BREAK case 64: YY_RULE_SETUP #line 123 "flex_lexer.l" TOKEN(INNER) YY_BREAK case 65: YY_RULE_SETUP #line 124 "flex_lexer.l" TOKEN(LIMIT) YY_BREAK case 66: YY_RULE_SETUP #line 125 "flex_lexer.l" TOKEN(LOCAL) YY_BREAK case 67: YY_RULE_SETUP #line 126 "flex_lexer.l" TOKEN(MERGE) YY_BREAK case 68: YY_RULE_SETUP #line 127 "flex_lexer.l" TOKEN(MINUS) YY_BREAK case 69: YY_RULE_SETUP #line 128 "flex_lexer.l" TOKEN(ORDER) YY_BREAK case 70: YY_RULE_SETUP #line 129 "flex_lexer.l" TOKEN(OUTER) YY_BREAK case 71: YY_RULE_SETUP #line 130 "flex_lexer.l" TOKEN(RIGHT) YY_BREAK case 72: YY_RULE_SETUP #line 131 "flex_lexer.l" TOKEN(TABLE) YY_BREAK case 73: YY_RULE_SETUP #line 132 "flex_lexer.l" TOKEN(UNION) YY_BREAK case 74: YY_RULE_SETUP #line 133 "flex_lexer.l" TOKEN(USING) YY_BREAK case 75: YY_RULE_SETUP #line 134 "flex_lexer.l" TOKEN(WHERE) YY_BREAK case 76: YY_RULE_SETUP #line 135 "flex_lexer.l" TOKEN(CALL) YY_BREAK case 77: YY_RULE_SETUP #line 136 "flex_lexer.l" TOKEN(CASE) YY_BREAK case 78: YY_RULE_SETUP #line 137 "flex_lexer.l" TOKEN(CHAR) YY_BREAK case 79: YY_RULE_SETUP #line 138 "flex_lexer.l" TOKEN(DATE) YY_BREAK case 80: YY_RULE_SETUP #line 139 "flex_lexer.l" TOKEN(DESC) YY_BREAK case 81: YY_RULE_SETUP #line 140 "flex_lexer.l" TOKEN(DROP) YY_BREAK case 82: YY_RULE_SETUP #line 141 "flex_lexer.l" TOKEN(ELSE) YY_BREAK case 83: YY_RULE_SETUP #line 142 "flex_lexer.l" TOKEN(FILE) YY_BREAK case 84: YY_RULE_SETUP #line 143 "flex_lexer.l" TOKEN(FROM) YY_BREAK case 85: YY_RULE_SETUP #line 144 "flex_lexer.l" TOKEN(FULL) YY_BREAK case 86: YY_RULE_SETUP #line 145 "flex_lexer.l" TOKEN(HASH) YY_BREAK case 87: YY_RULE_SETUP #line 146 "flex_lexer.l" TOKEN(HINT) YY_BREAK case 88: YY_RULE_SETUP #line 147 "flex_lexer.l" TOKEN(INTO) YY_BREAK case 89: YY_RULE_SETUP #line 148 "flex_lexer.l" TOKEN(JOIN) YY_BREAK case 90: YY_RULE_SETUP #line 149 "flex_lexer.l" TOKEN(LEFT) YY_BREAK case 91: YY_RULE_SETUP #line 150 "flex_lexer.l" TOKEN(LIKE) YY_BREAK case 92: YY_RULE_SETUP #line 151 "flex_lexer.l" TOKEN(ILIKE) YY_BREAK case 93: YY_RULE_SETUP #line 152 "flex_lexer.l" TOKEN(LOAD) YY_BREAK case 94: YY_RULE_SETUP #line 153 "flex_lexer.l" TOKEN(LONG) YY_BREAK case 95: YY_RULE_SETUP #line 154 "flex_lexer.l" TOKEN(NULL) YY_BREAK case 96: YY_RULE_SETUP #line 155 "flex_lexer.l" TOKEN(PLAN) YY_BREAK case 97: YY_RULE_SETUP #line 156 "flex_lexer.l" TOKEN(SHOW) YY_BREAK case 98: YY_RULE_SETUP #line 157 "flex_lexer.l" TOKEN(TEXT) YY_BREAK case 99: YY_RULE_SETUP #line 158 "flex_lexer.l" TOKEN(THEN) YY_BREAK case 100: YY_RULE_SETUP #line 159 "flex_lexer.l" TOKEN(TIME) YY_BREAK case 101: YY_RULE_SETUP #line 160 "flex_lexer.l" TOKEN(VIEW) YY_BREAK case 102: YY_RULE_SETUP #line 161 "flex_lexer.l" TOKEN(WHEN) YY_BREAK case 103: YY_RULE_SETUP #line 162 "flex_lexer.l" TOKEN(WITH) YY_BREAK case 104: YY_RULE_SETUP #line 163 "flex_lexer.l" TOKEN(ADD) YY_BREAK case 105: YY_RULE_SETUP #line 164 "flex_lexer.l" TOKEN(ALL) YY_BREAK case 106: YY_RULE_SETUP #line 165 "flex_lexer.l" TOKEN(AND) YY_BREAK case 107: YY_RULE_SETUP #line 166 "flex_lexer.l" TOKEN(ASC) YY_BREAK case 108: YY_RULE_SETUP #line 167 "flex_lexer.l" TOKEN(CSV) YY_BREAK case 109: YY_RULE_SETUP #line 168 "flex_lexer.l" TOKEN(END) YY_BREAK case 110: YY_RULE_SETUP #line 169 "flex_lexer.l" TOKEN(FOR) YY_BREAK case 111: YY_RULE_SETUP #line 170 "flex_lexer.l" TOKEN(INT) YY_BREAK case 112: YY_RULE_SETUP #line 171 "flex_lexer.l" TOKEN(KEY) YY_BREAK case 113: YY_RULE_SETUP #line 172 "flex_lexer.l" TOKEN(NOT) YY_BREAK case 114: YY_RULE_SETUP #line 173 "flex_lexer.l" TOKEN(OFF) YY_BREAK case 115: YY_RULE_SETUP #line 174 "flex_lexer.l" TOKEN(SET) YY_BREAK case 116: YY_RULE_SETUP #line 175 "flex_lexer.l" TOKEN(TBL) YY_BREAK case 117: YY_RULE_SETUP #line 176 "flex_lexer.l" TOKEN(TOP) YY_BREAK case 118: YY_RULE_SETUP #line 177 "flex_lexer.l" TOKEN(AS) YY_BREAK case 119: YY_RULE_SETUP #line 178 "flex_lexer.l" TOKEN(BY) YY_BREAK case 120: YY_RULE_SETUP #line 179 "flex_lexer.l" TOKEN(IF) YY_BREAK case 121: YY_RULE_SETUP #line 180 "flex_lexer.l" TOKEN(IN) YY_BREAK case 122: YY_RULE_SETUP #line 181 "flex_lexer.l" TOKEN(IS) YY_BREAK case 123: YY_RULE_SETUP #line 182 "flex_lexer.l" TOKEN(OF) YY_BREAK case 124: YY_RULE_SETUP #line 183 "flex_lexer.l" TOKEN(ON) YY_BREAK case 125: YY_RULE_SETUP #line 184 "flex_lexer.l" TOKEN(OR) YY_BREAK case 126: YY_RULE_SETUP #line 185 "flex_lexer.l" TOKEN(TO) YY_BREAK case 127: YY_RULE_SETUP #line 186 "flex_lexer.l" TOKEN(SECOND) YY_BREAK case 128: YY_RULE_SETUP #line 187 "flex_lexer.l" TOKEN(MINUTE) YY_BREAK case 129: YY_RULE_SETUP #line 188 "flex_lexer.l" TOKEN(HOUR) YY_BREAK case 130: YY_RULE_SETUP #line 189 "flex_lexer.l" TOKEN(DAY) YY_BREAK case 131: YY_RULE_SETUP #line 190 "flex_lexer.l" TOKEN(MONTH) YY_BREAK case 132: YY_RULE_SETUP #line 191 "flex_lexer.l" TOKEN(YEAR) YY_BREAK case 133: YY_RULE_SETUP #line 193 "flex_lexer.l" TOKEN(INDEXED) YY_BREAK case 134: YY_RULE_SETUP #line 194 "flex_lexer.l" TOKEN(PRAGMA) YY_BREAK case 135: YY_RULE_SETUP #line 195 "flex_lexer.l" TOKEN(REINDEX) YY_BREAK case 136: YY_RULE_SETUP #line 196 "flex_lexer.l" TOKEN(GENERATED) YY_BREAK case 137: YY_RULE_SETUP #line 197 "flex_lexer.l" TOKEN(ALWAYS) YY_BREAK case 138: YY_RULE_SETUP #line 198 "flex_lexer.l" TOKEN(CHECK) YY_BREAK case 139: YY_RULE_SETUP #line 199 "flex_lexer.l" TOKEN(CONFLICT) YY_BREAK case 140: YY_RULE_SETUP #line 200 "flex_lexer.l" TOKEN(IGNORE) YY_BREAK case 141: YY_RULE_SETUP #line 201 "flex_lexer.l" TOKEN(REPLACE) YY_BREAK case 142: YY_RULE_SETUP #line 202 "flex_lexer.l" TOKEN(ROLLBACK) YY_BREAK case 143: YY_RULE_SETUP #line 203 "flex_lexer.l" TOKEN(ABORT) YY_BREAK case 144: YY_RULE_SETUP #line 204 "flex_lexer.l" TOKEN(FAIL) YY_BREAK case 145: YY_RULE_SETUP #line 205 "flex_lexer.l" TOKEN(AUTOINCR) YY_BREAK case 146: YY_RULE_SETUP #line 206 "flex_lexer.l" TOKEN(BEGIN) YY_BREAK case 147: YY_RULE_SETUP #line 207 "flex_lexer.l" TOKEN(TRIGGER) YY_BREAK case 148: YY_RULE_SETUP #line 208 "flex_lexer.l" TOKEN(TEMP) YY_BREAK case 149: YY_RULE_SETUP #line 209 "flex_lexer.l" TOKEN(INSTEAD) YY_BREAK case 150: YY_RULE_SETUP #line 210 "flex_lexer.l" TOKEN(EACH) YY_BREAK case 151: YY_RULE_SETUP #line 211 "flex_lexer.l" TOKEN(ROW) YY_BREAK case 152: YY_RULE_SETUP #line 212 "flex_lexer.l" TOKEN(OVER) YY_BREAK case 153: YY_RULE_SETUP #line 213 "flex_lexer.l" TOKEN(FILTER) YY_BREAK case 154: YY_RULE_SETUP #line 214 "flex_lexer.l" TOKEN(CURRENT) YY_BREAK case 155: YY_RULE_SETUP #line 215 "flex_lexer.l" TOKEN(EXCLUDE) YY_BREAK case 156: YY_RULE_SETUP #line 216 "flex_lexer.l" TOKEN(FOLLOWING) YY_BREAK case 157: YY_RULE_SETUP #line 217 "flex_lexer.l" TOKEN(GROUPS) YY_BREAK case 158: YY_RULE_SETUP #line 218 "flex_lexer.l" TOKEN(NO) YY_BREAK case 159: YY_RULE_SETUP #line 219 "flex_lexer.l" TOKEN(OTHERS) YY_BREAK case 160: YY_RULE_SETUP #line 220 "flex_lexer.l" TOKEN(PRECEDING) YY_BREAK case 161: YY_RULE_SETUP #line 221 "flex_lexer.l" TOKEN(RANGE) YY_BREAK case 162: YY_RULE_SETUP #line 222 "flex_lexer.l" TOKEN(ROWS) YY_BREAK case 163: YY_RULE_SETUP #line 223 "flex_lexer.l" TOKEN(TIES) YY_BREAK case 164: YY_RULE_SETUP #line 224 "flex_lexer.l" TOKEN(UNBOUNDED) YY_BREAK case 165: YY_RULE_SETUP #line 225 "flex_lexer.l" TOKEN(WINDOW) YY_BREAK case 166: YY_RULE_SETUP #line 226 "flex_lexer.l" TOKEN(PARTITION) YY_BREAK case 167: YY_RULE_SETUP #line 227 "flex_lexer.l" TOKEN(ATTACH) YY_BREAK case 168: YY_RULE_SETUP #line 228 "flex_lexer.l" TOKEN(DETACH) YY_BREAK case 169: YY_RULE_SETUP #line 229 "flex_lexer.l" TOKEN(DATABASE) YY_BREAK case 170: YY_RULE_SETUP #line 230 "flex_lexer.l" TOKEN(CAST) YY_BREAK case 171: YY_RULE_SETUP #line 231 "flex_lexer.l" TOKEN(SAVEPOINT) YY_BREAK case 172: YY_RULE_SETUP #line 232 "flex_lexer.l" TOKEN(RELEASE) YY_BREAK case 173: YY_RULE_SETUP #line 234 "flex_lexer.l" TOKEN(VACUUM) YY_BREAK case 174: YY_RULE_SETUP #line 235 "flex_lexer.l" TOKEN(TRANSACTION) YY_BREAK case 175: YY_RULE_SETUP #line 236 "flex_lexer.l" TOKEN(DEFFERED) YY_BREAK case 176: YY_RULE_SETUP #line 237 "flex_lexer.l" TOKEN(EXCLUSIVE) YY_BREAK case 177: YY_RULE_SETUP #line 238 "flex_lexer.l" TOKEN(IMEDIATE) YY_BREAK case 178: YY_RULE_SETUP #line 239 "flex_lexer.l" TOKEN(COMMIT) YY_BREAK case 179: YY_RULE_SETUP #line 240 "flex_lexer.l" TOKEN(GLOB) YY_BREAK case 180: YY_RULE_SETUP #line 241 "flex_lexer.l" TOKEN(MATCH) YY_BREAK case 181: YY_RULE_SETUP #line 242 "flex_lexer.l" TOKEN(REGEX) YY_BREAK case 182: YY_RULE_SETUP #line 243 "flex_lexer.l" TOKEN(NOTHING) YY_BREAK case 183: YY_RULE_SETUP #line 244 "flex_lexer.l" TOKEN(NULLS) YY_BREAK case 184: YY_RULE_SETUP #line 245 "flex_lexer.l" TOKEN(LAST) YY_BREAK case 185: YY_RULE_SETUP #line 246 "flex_lexer.l" TOKEN(FIRST) YY_BREAK case 186: YY_RULE_SETUP #line 247 "flex_lexer.l" TOKEN(DO) YY_BREAK case 187: YY_RULE_SETUP #line 248 "flex_lexer.l" TOKEN(COLLATE) YY_BREAK case 188: YY_RULE_SETUP #line 251 "flex_lexer.l" { yylval->ival = 1; return SQL_INTVAL; } YY_BREAK case 189: YY_RULE_SETUP #line 255 "flex_lexer.l" { yylval->ival = 0; return SQL_INTVAL; } YY_BREAK /* Allow =/== see https://sqlite.org/lang_expr.html#collateop */ case 190: YY_RULE_SETUP #line 260 "flex_lexer.l" TOKEN(EQUALS) YY_BREAK case 191: YY_RULE_SETUP #line 261 "flex_lexer.l" TOKEN(NOTEQUALS) YY_BREAK case 192: YY_RULE_SETUP #line 262 "flex_lexer.l" TOKEN(NOTEQUALS) YY_BREAK case 193: YY_RULE_SETUP #line 263 "flex_lexer.l" TOKEN(LESSEQ) YY_BREAK case 194: YY_RULE_SETUP #line 264 "flex_lexer.l" TOKEN(GREATEREQ) YY_BREAK case 195: YY_RULE_SETUP #line 265 "flex_lexer.l" TOKEN(CONCAT) YY_BREAK case 196: YY_RULE_SETUP #line 267 "flex_lexer.l" { return yytext[0]; } YY_BREAK case 197: #line 270 "flex_lexer.l" case 198: YY_RULE_SETUP #line 270 "flex_lexer.l" { yylval->fval = atof(yytext); return SQL_FLOATVAL; } YY_BREAK case 199: YY_RULE_SETUP #line 275 "flex_lexer.l" { yylval->ival = atol(yytext); return SQL_INTVAL; } YY_BREAK case 200: YY_RULE_SETUP #line 280 "flex_lexer.l" { // Crop the leading and trailing quote char yylval->sval = substr(yytext, 1, strlen(yytext) - 1); return SQL_IDENTIFIER; } YY_BREAK case 201: YY_RULE_SETUP #line 286 "flex_lexer.l" { yylval->sval = strdup(yytext); return SQL_IDENTIFIER; } YY_BREAK case 202: YY_RULE_SETUP #line 291 "flex_lexer.l" { BEGIN singlequotedstring; strbuf = std::stringstream{}; } YY_BREAK case 203: YY_RULE_SETUP #line 292 "flex_lexer.l" { strbuf << '\''; } YY_BREAK case 204: /* rule 204 can match eol */ YY_RULE_SETUP #line 293 "flex_lexer.l" { strbuf << yytext; } YY_BREAK case 205: YY_RULE_SETUP #line 294 "flex_lexer.l" { BEGIN 0; yylval->sval = strdup(strbuf.str().c_str()); return SQL_STRING; } YY_BREAK case YY_STATE_EOF(singlequotedstring): #line 295 "flex_lexer.l" { /*fprintf(stdout, "[SQL-Lexer-Error] Unterminated string\n"); */ return 0; } YY_BREAK case 206: YY_RULE_SETUP #line 297 "flex_lexer.l" { /*fprintf(stdout, "[SQL-Lexer-Error] Unknown Character: %c\n", yytext[0]); */ return 0; } YY_BREAK case 207: YY_RULE_SETUP #line 300 "flex_lexer.l" ECHO; YY_BREAK #line 3875 "flex_lexer.cpp" case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(COMMENT): yyterminate(); case YY_END_OF_BUFFER: { /* Amount of text matched not including the EOB char. */ int yy_amount_of_matched_text = (int)(yy_cp - yyg->yytext_ptr) - 1; /* Undo the effects of YY_DO_BEFORE_ACTION. */ *yy_cp = yyg->yy_hold_char; YY_RESTORE_YY_MORE_OFFSET if (YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW) { /* We're scanning a new file or input source. It's * possible that this happened because the user * just pointed yyin at a new source and called * yylex(). If so, then we have to assure * consistency between YY_CURRENT_BUFFER and our * globals. Here is the right place to do so, because * this is the first action (other than possibly a * back-up) that will match for the new input source. */ yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; } /* Note that here we test for yy_c_buf_p "<=" to the position * of the first EOB in the buffer, since yy_c_buf_p will * already have been incremented past the NUL character * (since all states make transitions on EOB to the * end-of-buffer state). Contrast this with the test * in input(). */ if (yyg->yy_c_buf_p <= &YY_CURRENT_BUFFER_LVALUE ->yy_ch_buf[yyg->yy_n_chars]) { /* This was really a NUL. */ yy_state_type yy_next_state; yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state(yyscanner); /* Okay, we're now positioned to make the NUL * transition. We couldn't have * yy_get_previous_state() go ahead and do it * for us because it doesn't know how to deal * with the possibility of jamming (and we don't * want to build jamming into it because then it * will run more slowly). */ yy_next_state = yy_try_NUL_trans(yy_current_state, yyscanner); yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; if (yy_next_state) { /* Consume the NUL. */ yy_cp = ++yyg->yy_c_buf_p; yy_current_state = yy_next_state; goto yy_match; } else { yy_cp = yyg->yy_last_accepting_cpos; yy_current_state = yyg->yy_last_accepting_state; goto yy_find_action; } } else switch (yy_get_next_buffer(yyscanner)) { case EOB_ACT_END_OF_FILE: { yyg->yy_did_buffer_switch_on_eof = 0; if (yywrap(yyscanner)) { /* Note: because we've taken care in * yy_get_next_buffer() to have set up * yytext, we can now set up * yy_c_buf_p so that if some total * hoser (like flex itself) wants to * call the scanner after we return the * YY_NULL, it'll still work - another * YY_NULL will get returned. */ yyg->yy_c_buf_p = yyg->yytext_ptr + YY_MORE_ADJ; yy_act = YY_STATE_EOF(YY_START); goto do_action; } else { if (!yyg->yy_did_buffer_switch_on_eof) YY_NEW_FILE; } break; } case EOB_ACT_CONTINUE_SCAN: yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state(yyscanner); yy_cp = yyg->yy_c_buf_p; yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; goto yy_match; case EOB_ACT_LAST_MATCH: yyg->yy_c_buf_p = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars]; yy_current_state = yy_get_previous_state(yyscanner); yy_cp = yyg->yy_c_buf_p; yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; goto yy_find_action; } break; } default: YY_FATAL_ERROR("fatal flex scanner internal error--no action found"); } /* end of action switch */ } /* end of scanning one token */ } /* end of user's declarations */ } /* end of yylex */ /* yy_get_next_buffer - try to read in a new buffer * * Returns a code representing an action: * EOB_ACT_LAST_MATCH - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position * EOB_ACT_END_OF_FILE - end of file */ static int yy_get_next_buffer(yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; char *source = yyg->yytext_ptr; int number_to_move, i; int ret_val; if (yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1]) YY_FATAL_ERROR("fatal flex scanner internal error--end of buffer missed"); if (YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0) { /* Don't try to fill the buffer, so this is an EOF. */ if (yyg->yy_c_buf_p - yyg->yytext_ptr - YY_MORE_ADJ == 1) { /* We matched a single character, the EOB, so * treat this as a final EOF. */ return EOB_ACT_END_OF_FILE; } else { /* We matched some text prior to the EOB, first * process it. */ return EOB_ACT_LAST_MATCH; } } /* Try to read more data. */ /* First move last chars to start of buffer. */ number_to_move = (int)(yyg->yy_c_buf_p - yyg->yytext_ptr - 1); for (i = 0; i < number_to_move; ++i) *(dest++) = *(source++); if (YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING) /* don't do the read, it's not guaranteed to return an EOF, * just force an EOF */ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0; else { int num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while (num_to_read <= 0) { /* Not enough room in the buffer - grow it. */ /* just a shorter name for the current buffer */ YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE; int yy_c_buf_p_offset = (int)(yyg->yy_c_buf_p - b->yy_ch_buf); if (b->yy_is_our_buffer) { int new_size = b->yy_buf_size * 2; if (new_size <= 0) b->yy_buf_size += b->yy_buf_size / 8; else b->yy_buf_size *= 2; b->yy_ch_buf = (char *) /* Include room in for 2 EOB chars. */ yyrealloc((void *)b->yy_ch_buf, (yy_size_t)(b->yy_buf_size + 2), yyscanner); } else /* Can't grow it, we don't own it. */ b->yy_ch_buf = NULL; if (!b->yy_ch_buf) YY_FATAL_ERROR("fatal error - scanner input buffer overflow"); yyg->yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset]; num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; } if (num_to_read > YY_READ_BUF_SIZE) num_to_read = YY_READ_BUF_SIZE; /* Read in more data. */ YY_INPUT((&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), yyg->yy_n_chars, num_to_read); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; } if (yyg->yy_n_chars == 0) { if (number_to_move == YY_MORE_ADJ) { ret_val = EOB_ACT_END_OF_FILE; yyrestart(yyin, yyscanner); } else { ret_val = EOB_ACT_LAST_MATCH; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_EOF_PENDING; } } else ret_val = EOB_ACT_CONTINUE_SCAN; if ((yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { /* Extend the array by 50%, plus the number we really need. */ int new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1); YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *)yyrealloc((void *)YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t)new_size, yyscanner); if (!YY_CURRENT_BUFFER_LVALUE->yy_ch_buf) YY_FATAL_ERROR("out of dynamic memory in yy_get_next_buffer()"); /* "- 2" to take care of EOB's */ YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int)(new_size - 2); } yyg->yy_n_chars += number_to_move; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR; yyg->yytext_ptr = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; return ret_val; } /* yy_get_previous_state - get the state just before the EOB char was reached */ static yy_state_type yy_get_previous_state(yyscan_t yyscanner) { yy_state_type yy_current_state; char *yy_cp; struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; yy_current_state = yyg->yy_start; for (yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp) { YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); if (yy_accept[yy_current_state]) { yyg->yy_last_accepting_state = yy_current_state; yyg->yy_last_accepting_cpos = yy_cp; } while (yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state) { yy_current_state = (int)yy_def[yy_current_state]; if (yy_current_state >= 1460) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; } return yy_current_state; } /* yy_try_NUL_trans - try to make a transition on the NUL character * * synopsis * next_state = yy_try_NUL_trans( current_state ); */ static yy_state_type yy_try_NUL_trans(yy_state_type yy_current_state, yyscan_t yyscanner) { int yy_is_jam; struct yyguts_t *yyg = (struct yyguts_t *) yyscanner; /* This var may be unused depending upon options. */ char *yy_cp = yyg->yy_c_buf_p; YY_CHAR yy_c = 1; if (yy_accept[yy_current_state]) { yyg->yy_last_accepting_state = yy_current_state; yyg->yy_last_accepting_cpos = yy_cp; } while (yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state) { yy_current_state = (int)yy_def[yy_current_state]; if (yy_current_state >= 1460) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; yy_is_jam = (yy_current_state == 1459); (void)yyg; return yy_is_jam ? 0 : yy_current_state; } #ifndef YY_NO_UNPUT #endif #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput(yyscan_t yyscanner) #else static int input(yyscan_t yyscanner) #endif { int c; struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; *yyg->yy_c_buf_p = yyg->yy_hold_char; if (*yyg->yy_c_buf_p == YY_END_OF_BUFFER_CHAR) { /* yy_c_buf_p now points to the character we want to return. * If this occurs *before* the EOB characters, then it's a * valid NUL; if not, then we've hit the end of the buffer. */ if (yyg->yy_c_buf_p < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars]) /* This was really a NUL. */ *yyg->yy_c_buf_p = '\0'; else { /* need more input */ int offset = (int)(yyg->yy_c_buf_p - yyg->yytext_ptr); ++yyg->yy_c_buf_p; switch (yy_get_next_buffer(yyscanner)) { case EOB_ACT_LAST_MATCH: /* This happens because yy_g_n_b() * sees that we've accumulated a * token and flags that we need to * try matching the token before * proceeding. But for input(), * there's no matching to consider. * So convert the EOB_ACT_LAST_MATCH * to EOB_ACT_END_OF_FILE. */ /* Reset buffer status. */ yyrestart(yyin, yyscanner); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { if (yywrap(yyscanner)) return 0; if (!yyg->yy_did_buffer_switch_on_eof) YY_NEW_FILE; #ifdef __cplusplus return yyinput(yyscanner); #else return input(yyscanner); #endif } case EOB_ACT_CONTINUE_SCAN: yyg->yy_c_buf_p = yyg->yytext_ptr + offset; break; } } } c = *(unsigned char *)yyg->yy_c_buf_p; /* cast for 8-bit char's */ *yyg->yy_c_buf_p = '\0'; /* preserve yytext */ yyg->yy_hold_char = *++yyg->yy_c_buf_p; return c; } #endif /* ifndef YY_NO_INPUT */ /** Immediately switch to a different input stream. * @param input_file A readable stream. * @param yyscanner The scanner object. * @note This function does not reset the start condition to @c INITIAL . */ void yyrestart(FILE *input_file, yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; if (!YY_CURRENT_BUFFER) { yyensure_buffer_stack(yyscanner); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer(yyin, YY_BUF_SIZE, yyscanner); } yy_init_buffer(YY_CURRENT_BUFFER, input_file, yyscanner); yy_load_buffer_state(yyscanner); } /** Switch to a different input buffer. * @param new_buffer The new input buffer. * @param yyscanner The scanner object. */ void yy_switch_to_buffer(YY_BUFFER_STATE new_buffer, yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; /* TODO. We should be able to replace this entire function body * with * yypop_buffer_state(); * yypush_buffer_state(new_buffer); */ yyensure_buffer_stack(yyscanner); if (YY_CURRENT_BUFFER == new_buffer) return; if (YY_CURRENT_BUFFER) { /* Flush out information for old buffer. */ *yyg->yy_c_buf_p = yyg->yy_hold_char; YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; } YY_CURRENT_BUFFER_LVALUE = new_buffer; yy_load_buffer_state(yyscanner); /* We don't actually know whether we did this switch during * EOF (yywrap()) processing, but the only time this flag * is looked at is after yywrap() is called, so it's safe * to go ahead and always set it. */ yyg->yy_did_buffer_switch_on_eof = 1; } static void yy_load_buffer_state(yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; yyg->yytext_ptr = yyg->yy_c_buf_p = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; yyg->yy_hold_char = *yyg->yy_c_buf_p; } /** Allocate and initialize an input buffer state. * @param file A readable stream. * @param size The character buffer size in bytes. When in doubt, use @c * YY_BUF_SIZE. * @param yyscanner The scanner object. * @return the allocated buffer state. */ YY_BUFFER_STATE yy_create_buffer(FILE *file, int size, yyscan_t yyscanner) { YY_BUFFER_STATE b; b = (YY_BUFFER_STATE)yyalloc(sizeof(struct yy_buffer_state), yyscanner); if (!b) YY_FATAL_ERROR("out of dynamic memory in yy_create_buffer()"); b->yy_buf_size = size; /* yy_ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. */ b->yy_ch_buf = (char *)yyalloc((yy_size_t)(b->yy_buf_size + 2), yyscanner); if (!b->yy_ch_buf) YY_FATAL_ERROR("out of dynamic memory in yy_create_buffer()"); b->yy_is_our_buffer = 1; yy_init_buffer(b, file, yyscanner); return b; } /** Destroy the buffer. * @param b a buffer created with yy_create_buffer() * @param yyscanner The scanner object. */ void yy_delete_buffer(YY_BUFFER_STATE b, yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; if (!b) return; if (b == YY_CURRENT_BUFFER) /* Not sure if we should pop here. */ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE)0; if (b->yy_is_our_buffer) yyfree((void *)b->yy_ch_buf, yyscanner); yyfree((void *)b, yyscanner); } /* Initializes or reinitializes a buffer. * This function is sometimes called more than once on the same buffer, * such as during a yyrestart() or at EOF. */ static void yy_init_buffer(YY_BUFFER_STATE b, FILE *file, yyscan_t yyscanner) { int oerrno = errno; struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; yy_flush_buffer(b, yyscanner); b->yy_input_file = file; b->yy_fill_buffer = 1; /* If b is the current buffer, then yy_init_buffer was _probably_ * called from yyrestart() or through yy_get_next_buffer. * In that case, we don't want to reset the lineno or column. */ if (b != YY_CURRENT_BUFFER) { b->yy_bs_lineno = 1; b->yy_bs_column = 0; } b->yy_is_interactive = 0; errno = oerrno; } /** Discard all buffered characters. On the next scan, YY_INPUT will be called. * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. * @param yyscanner The scanner object. */ void yy_flush_buffer(YY_BUFFER_STATE b, yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; if (!b) return; b->yy_n_chars = 0; /* We always need two end-of-buffer characters. The first causes * a transition to the end-of-buffer state. The second causes * a jam in that state. */ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; b->yy_buf_pos = &b->yy_ch_buf[0]; b->yy_at_bol = 1; b->yy_buffer_status = YY_BUFFER_NEW; if (b == YY_CURRENT_BUFFER) yy_load_buffer_state(yyscanner); } /** Pushes the new state onto the stack. The new state becomes * the current state. This function will allocate the stack * if necessary. * @param new_buffer The new state. * @param yyscanner The scanner object. */ void yypush_buffer_state(YY_BUFFER_STATE new_buffer, yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; if (new_buffer == NULL) return; yyensure_buffer_stack(yyscanner); /* This block is copied from yy_switch_to_buffer. */ if (YY_CURRENT_BUFFER) { /* Flush out information for old buffer. */ *yyg->yy_c_buf_p = yyg->yy_hold_char; YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; } /* Only push if top exists. Otherwise, replace top. */ if (YY_CURRENT_BUFFER) yyg->yy_buffer_stack_top++; YY_CURRENT_BUFFER_LVALUE = new_buffer; /* copied from yy_switch_to_buffer. */ yy_load_buffer_state(yyscanner); yyg->yy_did_buffer_switch_on_eof = 1; } /** Removes and deletes the top of the stack, if present. * The next element becomes the new top. * @param yyscanner The scanner object. */ void yypop_buffer_state(yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; if (!YY_CURRENT_BUFFER) return; yy_delete_buffer(YY_CURRENT_BUFFER, yyscanner); YY_CURRENT_BUFFER_LVALUE = NULL; if (yyg->yy_buffer_stack_top > 0) --yyg->yy_buffer_stack_top; if (YY_CURRENT_BUFFER) { yy_load_buffer_state(yyscanner); yyg->yy_did_buffer_switch_on_eof = 1; } } /* Allocates the stack if it does not exist. * Guarantees space for at least one push. */ static void yyensure_buffer_stack(yyscan_t yyscanner) { yy_size_t num_to_alloc; struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; if (!yyg->yy_buffer_stack) { /* First allocation is just for 2 elements, since we don't know if this * scanner will even need a stack. We use 2 instead of 1 to avoid an * immediate realloc on the next call. */ num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */ yyg->yy_buffer_stack = (struct yy_buffer_state **)yyalloc( num_to_alloc * sizeof(struct yy_buffer_state *), yyscanner); if (!yyg->yy_buffer_stack) YY_FATAL_ERROR("out of dynamic memory in yyensure_buffer_stack()"); memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state *)); yyg->yy_buffer_stack_max = num_to_alloc; yyg->yy_buffer_stack_top = 0; return; } if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1) { /* Increase the buffer to prepare for a possible push. */ yy_size_t grow_size = 8 /* arbitrary grow size */; num_to_alloc = yyg->yy_buffer_stack_max + grow_size; yyg->yy_buffer_stack = (struct yy_buffer_state **)yyrealloc( yyg->yy_buffer_stack, num_to_alloc * sizeof(struct yy_buffer_state *), yyscanner); if (!yyg->yy_buffer_stack) YY_FATAL_ERROR("out of dynamic memory in yyensure_buffer_stack()"); /* zero only the new slots.*/ memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state *)); yyg->yy_buffer_stack_max = num_to_alloc; } } /** Setup the input buffer state to scan directly from a user-specified * character buffer. * @param base the character buffer * @param size the size in bytes of the character buffer * @param yyscanner The scanner object. * @return the newly allocated buffer state object. */ YY_BUFFER_STATE yy_scan_buffer(char *base, yy_size_t size, yyscan_t yyscanner) { YY_BUFFER_STATE b; if (size < 2 || base[size - 2] != YY_END_OF_BUFFER_CHAR || base[size - 1] != YY_END_OF_BUFFER_CHAR) /* They forgot to leave room for the EOB's. */ return NULL; b = (YY_BUFFER_STATE)yyalloc(sizeof(struct yy_buffer_state), yyscanner); if (!b) YY_FATAL_ERROR("out of dynamic memory in yy_scan_buffer()"); b->yy_buf_size = (int)(size - 2); /* "- 2" to take care of EOB's */ b->yy_buf_pos = b->yy_ch_buf = base; b->yy_is_our_buffer = 0; b->yy_input_file = NULL; b->yy_n_chars = b->yy_buf_size; b->yy_is_interactive = 0; b->yy_at_bol = 1; b->yy_fill_buffer = 0; b->yy_buffer_status = YY_BUFFER_NEW; yy_switch_to_buffer(b, yyscanner); return b; } /** Setup the input buffer state to scan a string. The next call to yylex() will * scan from a @e copy of @a str. * @param yystr a NUL-terminated string to scan * @param yyscanner The scanner object. * @return the newly allocated buffer state object. * @note If you want to scan bytes that may contain NUL values, then use * yy_scan_bytes() instead. */ YY_BUFFER_STATE yy_scan_string(const char *yystr, yyscan_t yyscanner) { return yy_scan_bytes(yystr, (int)strlen(yystr), yyscanner); } /** Setup the input buffer state to scan the given bytes. The next call to * yylex() will scan from a @e copy of @a bytes. * @param yybytes the byte buffer to scan * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. * @param yyscanner The scanner object. * @return the newly allocated buffer state object. */ YY_BUFFER_STATE yy_scan_bytes(const char *yybytes, int _yybytes_len, yyscan_t yyscanner) { YY_BUFFER_STATE b; char *buf; yy_size_t n; int i; /* Get memory for full buffer, including space for trailing EOB's. */ n = (yy_size_t)(_yybytes_len + 2); buf = (char *)yyalloc(n, yyscanner); if (!buf) YY_FATAL_ERROR("out of dynamic memory in yy_scan_bytes()"); for (i = 0; i < _yybytes_len; ++i) buf[i] = yybytes[i]; buf[_yybytes_len] = buf[_yybytes_len + 1] = YY_END_OF_BUFFER_CHAR; b = yy_scan_buffer(buf, n, yyscanner); if (!b) YY_FATAL_ERROR("bad buffer in yy_scan_bytes()"); /* It's okay to grow etc. this buffer, and we should throw it * away when we're done. */ b->yy_is_our_buffer = 1; return b; } #ifndef YY_EXIT_FAILURE #define YY_EXIT_FAILURE 2 #endif static void yynoreturn yy_fatal_error(const char *msg, yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; (void)yyg; fprintf(stderr, "%s\n", msg); exit(YY_EXIT_FAILURE); } /* Redefine yyless() so it works in section 3 code. */ #undef yyless #define yyless(n) \ do { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg); \ yytext[yyleng] = yyg->yy_hold_char; \ yyg->yy_c_buf_p = yytext + yyless_macro_arg; \ yyg->yy_hold_char = *yyg->yy_c_buf_p; \ *yyg->yy_c_buf_p = '\0'; \ yyleng = yyless_macro_arg; \ } while (0) /* Accessor methods (get/set functions) to struct members. */ /** Get the user-defined data for this scanner. * @param yyscanner The scanner object. */ YY_EXTRA_TYPE yyget_extra(yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; return yyextra; } /** Get the current line number. * @param yyscanner The scanner object. */ int yyget_lineno(yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; if (!YY_CURRENT_BUFFER) return 0; return yylineno; } /** Get the current column number. * @param yyscanner The scanner object. */ int yyget_column(yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; if (!YY_CURRENT_BUFFER) return 0; return yycolumn; } /** Get the input stream. * @param yyscanner The scanner object. */ FILE *yyget_in(yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; return yyin; } /** Get the output stream. * @param yyscanner The scanner object. */ FILE *yyget_out(yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; return yyout; } /** Get the length of the current token. * @param yyscanner The scanner object. */ int yyget_leng(yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; return yyleng; } /** Get the current token. * @param yyscanner The scanner object. */ char *yyget_text(yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; return yytext; } /** Set the user-defined data. This data is never touched by the scanner. * @param user_defined The data to be associated with this scanner. * @param yyscanner The scanner object. */ void yyset_extra(YY_EXTRA_TYPE user_defined, yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; yyextra = user_defined; } /** Set the current line number. * @param _line_number line number * @param yyscanner The scanner object. */ void yyset_lineno(int _line_number, yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; /* lineno is only valid if an input buffer exists. */ if (!YY_CURRENT_BUFFER) YY_FATAL_ERROR("yyset_lineno called with no buffer"); yylineno = _line_number; } /** Set the current column. * @param _column_no column number * @param yyscanner The scanner object. */ void yyset_column(int _column_no, yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; /* column is only valid if an input buffer exists. */ if (!YY_CURRENT_BUFFER) YY_FATAL_ERROR("yyset_column called with no buffer"); yycolumn = _column_no; } /** Set the input stream. This does not discard the current * input buffer. * @param _in_str A readable stream. * @param yyscanner The scanner object. * @see yy_switch_to_buffer */ void yyset_in(FILE *_in_str, yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; yyin = _in_str; } void yyset_out(FILE *_out_str, yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; yyout = _out_str; } int yyget_debug(yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; return yy_flex_debug; } void yyset_debug(int _bdebug, yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; yy_flex_debug = _bdebug; } /* Accessor methods for yylval and yylloc */ YYSTYPE *yyget_lval(yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; return yylval; } void yyset_lval(YYSTYPE *yylval_param, yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; yylval = yylval_param; } YYLTYPE *yyget_lloc(yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; return yylloc; } void yyset_lloc(YYLTYPE *yylloc_param, yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; yylloc = yylloc_param; } /* User-visible API */ /* yylex_init is special because it creates the scanner itself, so it is * the ONLY reentrant function that doesn't take the scanner as the last * argument. That's why we explicitly handle the declaration, instead of using * our macros. */ int yylex_init(yyscan_t *ptr_yy_globals) { if (ptr_yy_globals == NULL) { errno = EINVAL; return 1; } *ptr_yy_globals = (yyscan_t)yyalloc(sizeof(struct yyguts_t), NULL); if (*ptr_yy_globals == NULL) { errno = ENOMEM; return 1; } /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for * releases. */ memset(*ptr_yy_globals, 0x00, sizeof(struct yyguts_t)); return yy_init_globals(*ptr_yy_globals); } /* yylex_init_extra has the same functionality as yylex_init, but follows the * convention of taking the scanner as the last argument. Note however, that * this is a *pointer* to a scanner, as it will be allocated by this call (and * is the reason, too, why this function also must handle its own declaration). * The user defined value in the first argument will be available to yyalloc in * the yyextra field. */ int yylex_init_extra(YY_EXTRA_TYPE yy_user_defined, yyscan_t *ptr_yy_globals) { struct yyguts_t dummy_yyguts; yyset_extra(yy_user_defined, &dummy_yyguts); if (ptr_yy_globals == NULL) { errno = EINVAL; return 1; } *ptr_yy_globals = (yyscan_t)yyalloc(sizeof(struct yyguts_t), &dummy_yyguts); if (*ptr_yy_globals == NULL) { errno = ENOMEM; return 1; } /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */ memset(*ptr_yy_globals, 0x00, sizeof(struct yyguts_t)); yyset_extra(yy_user_defined, *ptr_yy_globals); return yy_init_globals(*ptr_yy_globals); } static int yy_init_globals(yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; /* Initialization is the same as for the non-reentrant scanner. * This function is called from yylex_destroy(), so don't allocate here. */ yyg->yy_buffer_stack = NULL; yyg->yy_buffer_stack_top = 0; yyg->yy_buffer_stack_max = 0; yyg->yy_c_buf_p = NULL; yyg->yy_init = 0; yyg->yy_start = 0; yyg->yy_start_stack_ptr = 0; yyg->yy_start_stack_depth = 0; yyg->yy_start_stack = NULL; /* Defined in main.c */ #ifdef YY_STDINIT yyin = stdin; yyout = stdout; #else yyin = NULL; yyout = NULL; #endif /* For future reference: Set errno on error, since we are called by * yylex_init() */ return 0; } /* yylex_destroy is for both reentrant and non-reentrant scanners. */ int yylex_destroy(yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; /* Pop the buffer stack, destroying each element. */ while (YY_CURRENT_BUFFER) { yy_delete_buffer(YY_CURRENT_BUFFER, yyscanner); YY_CURRENT_BUFFER_LVALUE = NULL; yypop_buffer_state(yyscanner); } /* Destroy the stack itself. */ yyfree(yyg->yy_buffer_stack, yyscanner); yyg->yy_buffer_stack = NULL; /* Destroy the start condition stack. */ yyfree(yyg->yy_start_stack, yyscanner); yyg->yy_start_stack = NULL; /* Reset the globals. This is important in a non-reentrant scanner so the next * time yylex() is called, initialization will occur. */ yy_init_globals(yyscanner); /* Destroy the main struct (reentrant only). */ yyfree(yyscanner, yyscanner); yyscanner = NULL; return 0; } /* * Internal utility routines. */ #ifndef yytext_ptr static void yy_flex_strncpy(char *s1, const char *s2, int n, yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; (void)yyg; int i; for (i = 0; i < n; ++i) s1[i] = s2[i]; } #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen(const char *s, yyscan_t yyscanner) { int n; for (n = 0; s[n]; ++n) ; return n; } #endif void *yyalloc(yy_size_t size, yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; (void)yyg; return malloc(size); } void *yyrealloc(void *ptr, yy_size_t size, yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; (void)yyg; /* The cast to (char *) in the following accommodates both * implementations that use char* generic pointers, and those * that use void* generic pointers. It works with the latter * because both ANSI C and C++ allow castless assignment from * any pointer type to void*, and deal with argument conversions * as though doing an assignment. */ return realloc(ptr, size); } void yyfree(void *ptr, yyscan_t yyscanner) { struct yyguts_t *yyg = (struct yyguts_t *)yyscanner; (void)yyg; free((char *)ptr); /* see yyrealloc() for (char *) cast */ } #define YYTABLES_NAME "yytables" #line 300 "flex_lexer.l" /*************************** ** Section 3: User code ***************************/ char *substr(const char *source, int from, int to) { int len = to - from; char *copy = (char *)malloc(len + 1); ; strncpy(copy, source + from, len); copy[len] = '\0'; return copy; } int yyerror(const char *msg) { fprintf(stdout, "[SQL-Lexer-Error] %s\n", msg); return 0; } ================================================ FILE: srcs/internal/sqlite/parser/flex_lexer.h ================================================ #ifndef hsql_HEADER_H #define hsql_HEADER_H 1 #define hsql_IN_HEADER 1 #line 6 "flex_lexer.h" #line 8 "flex_lexer.h" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 6 #define YY_FLEX_SUBMINOR_VERSION 4 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif #ifdef yy_create_buffer #define hsql__create_buffer_ALREADY_DEFINED #else #define yy_create_buffer hsql__create_buffer #endif #ifdef yy_delete_buffer #define hsql__delete_buffer_ALREADY_DEFINED #else #define yy_delete_buffer hsql__delete_buffer #endif #ifdef yy_scan_buffer #define hsql__scan_buffer_ALREADY_DEFINED #else #define yy_scan_buffer hsql__scan_buffer #endif #ifdef yy_scan_string #define hsql__scan_string_ALREADY_DEFINED #else #define yy_scan_string hsql__scan_string #endif #ifdef yy_scan_bytes #define hsql__scan_bytes_ALREADY_DEFINED #else #define yy_scan_bytes hsql__scan_bytes #endif #ifdef yy_init_buffer #define hsql__init_buffer_ALREADY_DEFINED #else #define yy_init_buffer hsql__init_buffer #endif #ifdef yy_flush_buffer #define hsql__flush_buffer_ALREADY_DEFINED #else #define yy_flush_buffer hsql__flush_buffer #endif #ifdef yy_load_buffer_state #define hsql__load_buffer_state_ALREADY_DEFINED #else #define yy_load_buffer_state hsql__load_buffer_state #endif #ifdef yy_switch_to_buffer #define hsql__switch_to_buffer_ALREADY_DEFINED #else #define yy_switch_to_buffer hsql__switch_to_buffer #endif #ifdef yypush_buffer_state #define hsql_push_buffer_state_ALREADY_DEFINED #else #define yypush_buffer_state hsql_push_buffer_state #endif #ifdef yypop_buffer_state #define hsql_pop_buffer_state_ALREADY_DEFINED #else #define yypop_buffer_state hsql_pop_buffer_state #endif #ifdef yyensure_buffer_stack #define hsql_ensure_buffer_stack_ALREADY_DEFINED #else #define yyensure_buffer_stack hsql_ensure_buffer_stack #endif #ifdef yylex #define hsql_lex_ALREADY_DEFINED #else #define yylex hsql_lex #endif #ifdef yyrestart #define hsql_restart_ALREADY_DEFINED #else #define yyrestart hsql_restart #endif #ifdef yylex_init #define hsql_lex_init_ALREADY_DEFINED #else #define yylex_init hsql_lex_init #endif #ifdef yylex_init_extra #define hsql_lex_init_extra_ALREADY_DEFINED #else #define yylex_init_extra hsql_lex_init_extra #endif #ifdef yylex_destroy #define hsql_lex_destroy_ALREADY_DEFINED #else #define yylex_destroy hsql_lex_destroy #endif #ifdef yyget_debug #define hsql_get_debug_ALREADY_DEFINED #else #define yyget_debug hsql_get_debug #endif #ifdef yyset_debug #define hsql_set_debug_ALREADY_DEFINED #else #define yyset_debug hsql_set_debug #endif #ifdef yyget_extra #define hsql_get_extra_ALREADY_DEFINED #else #define yyget_extra hsql_get_extra #endif #ifdef yyset_extra #define hsql_set_extra_ALREADY_DEFINED #else #define yyset_extra hsql_set_extra #endif #ifdef yyget_in #define hsql_get_in_ALREADY_DEFINED #else #define yyget_in hsql_get_in #endif #ifdef yyset_in #define hsql_set_in_ALREADY_DEFINED #else #define yyset_in hsql_set_in #endif #ifdef yyget_out #define hsql_get_out_ALREADY_DEFINED #else #define yyget_out hsql_get_out #endif #ifdef yyset_out #define hsql_set_out_ALREADY_DEFINED #else #define yyset_out hsql_set_out #endif #ifdef yyget_leng #define hsql_get_leng_ALREADY_DEFINED #else #define yyget_leng hsql_get_leng #endif #ifdef yyget_text #define hsql_get_text_ALREADY_DEFINED #else #define yyget_text hsql_get_text #endif #ifdef yyget_lineno #define hsql_get_lineno_ALREADY_DEFINED #else #define yyget_lineno hsql_get_lineno #endif #ifdef yyset_lineno #define hsql_set_lineno_ALREADY_DEFINED #else #define yyset_lineno hsql_set_lineno #endif #ifdef yyget_column #define hsql_get_column_ALREADY_DEFINED #else #define yyget_column hsql_get_column #endif #ifdef yyset_column #define hsql_set_column_ALREADY_DEFINED #else #define yyset_column hsql_set_column #endif #ifdef yywrap #define hsql_wrap_ALREADY_DEFINED #else #define yywrap hsql_wrap #endif #ifdef yyget_lval #define hsql_get_lval_ALREADY_DEFINED #else #define yyget_lval hsql_get_lval #endif #ifdef yyset_lval #define hsql_set_lval_ALREADY_DEFINED #else #define yyset_lval hsql_set_lval #endif #ifdef yyget_lloc #define hsql_get_lloc_ALREADY_DEFINED #else #define yyget_lloc hsql_get_lloc #endif #ifdef yyset_lloc #define hsql_set_lloc_ALREADY_DEFINED #else #define yyset_lloc hsql_set_lloc #endif #ifdef yyalloc #define hsql_alloc_ALREADY_DEFINED #else #define yyalloc hsql_alloc #endif #ifdef yyrealloc #define hsql_realloc_ALREADY_DEFINED #else #define yyrealloc hsql_realloc #endif #ifdef yyfree #define hsql_free_ALREADY_DEFINED #else #define yyfree hsql_free #endif /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ #include #include #include #include /* end standard C headers. */ /* flex integer type definitions */ #ifndef FLEXINT_H #define FLEXINT_H /* C99 systems have . Non-C99 systems may or may not. */ #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. */ #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS 1 #endif #include typedef int8_t flex_int8_t; typedef uint8_t flex_uint8_t; typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; /* Limits of integral types. */ #ifndef INT8_MIN #define INT8_MIN (-128) #endif #ifndef INT16_MIN #define INT16_MIN (-32767 - 1) #endif #ifndef INT32_MIN #define INT32_MIN (-2147483647 - 1) #endif #ifndef INT8_MAX #define INT8_MAX (127) #endif #ifndef INT16_MAX #define INT16_MAX (32767) #endif #ifndef INT32_MAX #define INT32_MAX (2147483647) #endif #ifndef UINT8_MAX #define UINT8_MAX (255U) #endif #ifndef UINT16_MAX #define UINT16_MAX (65535U) #endif #ifndef UINT32_MAX #define UINT32_MAX (4294967295U) #endif #ifndef SIZE_MAX #define SIZE_MAX (~(size_t)0) #endif #endif /* ! C99 */ #endif /* ! FLEXINT_H */ /* begin standard C++ headers. */ /* TODO: this is always defined, so inline it */ #define yyconst const #if defined(__GNUC__) && __GNUC__ >= 3 #define yynoreturn __attribute__((__noreturn__)) #else #define yynoreturn #endif /* An opaque pointer. */ #ifndef YY_TYPEDEF_YY_SCANNER_T #define YY_TYPEDEF_YY_SCANNER_T typedef void *yyscan_t; #endif /* For convenience, these vars (plus the bison vars far below) are macros in the reentrant scanner. */ #define yyin yyg->yyin_r #define yyout yyg->yyout_r #define yyextra yyg->yyextra_r #define yyleng yyg->yyleng_r #define yytext yyg->yytext_r #define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno) #define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column) #define yy_flex_debug yyg->yy_flex_debug_r /* Size of default input buffer. */ #ifndef YY_BUF_SIZE #ifdef __ia64__ /* On IA-64, the buffer size is 16k, not 8k. * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. * Ditto for the __ia64__ case accordingly. */ #define YY_BUF_SIZE 32768 #else #define YY_BUF_SIZE 16384 #endif /* __ia64__ */ #endif #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef size_t yy_size_t; #endif #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct yy_buffer_state { FILE *yy_input_file; char *yy_ch_buf; /* input buffer */ char *yy_buf_pos; /* current position in input buffer */ /* Size of input buffer in bytes, not including room for EOB * characters. */ int yy_buf_size; /* Number of characters read into yy_ch_buf, not including EOB * characters. */ int yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to * delete it. */ int yy_is_our_buffer; /* Whether this is an "interactive" input source; if so, and * if we're using stdio for input, then we want to use getc() * instead of fread(), to make sure we stop fetching input after * each newline. */ int yy_is_interactive; /* Whether we're considered to be at the beginning of a line. * If so, '^' rules will be active on the next match, otherwise * not. */ int yy_at_bol; int yy_bs_lineno; /**< The line count. */ int yy_bs_column; /**< The column count. */ /* Whether to try to fill the input buffer when we reach the * end of it. */ int yy_fill_buffer; int yy_buffer_status; }; #endif /* !YY_STRUCT_YY_BUFFER_STATE */ void yyrestart(FILE *input_file, yyscan_t yyscanner); void yy_switch_to_buffer(YY_BUFFER_STATE new_buffer, yyscan_t yyscanner); YY_BUFFER_STATE yy_create_buffer(FILE *file, int size, yyscan_t yyscanner); void yy_delete_buffer(YY_BUFFER_STATE b, yyscan_t yyscanner); void yy_flush_buffer(YY_BUFFER_STATE b, yyscan_t yyscanner); void yypush_buffer_state(YY_BUFFER_STATE new_buffer, yyscan_t yyscanner); void yypop_buffer_state(yyscan_t yyscanner); YY_BUFFER_STATE yy_scan_buffer(char *base, yy_size_t size, yyscan_t yyscanner); YY_BUFFER_STATE yy_scan_string(const char *yy_str, yyscan_t yyscanner); YY_BUFFER_STATE yy_scan_bytes(const char *bytes, int len, yyscan_t yyscanner); void *yyalloc(yy_size_t, yyscan_t yyscanner); void *yyrealloc(void *, yy_size_t, yyscan_t yyscanner); void yyfree(void *, yyscan_t yyscanner); /* Begin user sect3 */ #define hsql_wrap(yyscanner) (/*CONSTCOND*/ 1) #define YY_SKIP_YYWRAP #define yytext_ptr yytext_r #ifdef YY_HEADER_EXPORT_START_CONDITIONS #define INITIAL 0 #define singlequotedstring 1 #define COMMENT 2 #endif #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way * down here because we want the user's section 1 to have been scanned first. * The user has a chance to override it with an option. */ #include #endif #ifndef YY_EXTRA_TYPE #define YY_EXTRA_TYPE void * #endif int yylex_init(yyscan_t *scanner); int yylex_init_extra(YY_EXTRA_TYPE user_defined, yyscan_t *scanner); /* Accessor methods to globals. These are made visible to non-reentrant scanners for convenience. */ int yylex_destroy(yyscan_t yyscanner); int yyget_debug(yyscan_t yyscanner); void yyset_debug(int debug_flag, yyscan_t yyscanner); YY_EXTRA_TYPE yyget_extra(yyscan_t yyscanner); void yyset_extra(YY_EXTRA_TYPE user_defined, yyscan_t yyscanner); FILE *yyget_in(yyscan_t yyscanner); void yyset_in(FILE *_in_str, yyscan_t yyscanner); FILE *yyget_out(yyscan_t yyscanner); void yyset_out(FILE *_out_str, yyscan_t yyscanner); int yyget_leng(yyscan_t yyscanner); char *yyget_text(yyscan_t yyscanner); int yyget_lineno(yyscan_t yyscanner); void yyset_lineno(int _line_number, yyscan_t yyscanner); int yyget_column(yyscan_t yyscanner); void yyset_column(int _column_no, yyscan_t yyscanner); YYSTYPE *yyget_lval(yyscan_t yyscanner); void yyset_lval(YYSTYPE *yylval_param, yyscan_t yyscanner); YYLTYPE *yyget_lloc(yyscan_t yyscanner); void yyset_lloc(YYLTYPE *yylloc_param, yyscan_t yyscanner); /* Macros after this point can all be overridden by user definitions in * section 1. */ #ifndef YY_SKIP_YYWRAP #ifdef __cplusplus extern "C" int yywrap(yyscan_t yyscanner); #else extern int yywrap(yyscan_t yyscanner); #endif #endif #ifndef yytext_ptr static void yy_flex_strncpy(char *, const char *, int, yyscan_t yyscanner); #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen(const char *, yyscan_t yyscanner); #endif #ifndef YY_NO_INPUT #endif /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE #ifdef __ia64__ /* On IA-64, the buffer size is 16k, not 8k */ #define YY_READ_BUF_SIZE 16384 #else #define YY_READ_BUF_SIZE 8192 #endif /* __ia64__ */ #endif /* Number of entries by which start-condition stack grows. */ #ifndef YY_START_STACK_INCR #define YY_START_STACK_INCR 25 #endif /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL_IS_OURS 1 extern int yylex(YYSTYPE *yylval_param, YYLTYPE *yylloc_param, yyscan_t yyscanner); #define YY_DECL \ int yylex(YYSTYPE *yylval_param, YYLTYPE *yylloc_param, yyscan_t yyscanner) #endif /* !YY_DECL */ /* yy_get_previous_state - get the state just before the EOB char was reached */ #undef YY_NEW_FILE #undef YY_FLUSH_BUFFER #undef yy_set_bol #undef yy_new_buffer #undef yy_set_interactive #undef YY_DO_BEFORE_ACTION #ifdef YY_DECL_IS_OURS #undef YY_DECL_IS_OURS #undef YY_DECL #endif #ifndef hsql__create_buffer_ALREADY_DEFINED #undef yy_create_buffer #endif #ifndef hsql__delete_buffer_ALREADY_DEFINED #undef yy_delete_buffer #endif #ifndef hsql__scan_buffer_ALREADY_DEFINED #undef yy_scan_buffer #endif #ifndef hsql__scan_string_ALREADY_DEFINED #undef yy_scan_string #endif #ifndef hsql__scan_bytes_ALREADY_DEFINED #undef yy_scan_bytes #endif #ifndef hsql__init_buffer_ALREADY_DEFINED #undef yy_init_buffer #endif #ifndef hsql__flush_buffer_ALREADY_DEFINED #undef yy_flush_buffer #endif #ifndef hsql__load_buffer_state_ALREADY_DEFINED #undef yy_load_buffer_state #endif #ifndef hsql__switch_to_buffer_ALREADY_DEFINED #undef yy_switch_to_buffer #endif #ifndef hsql_push_buffer_state_ALREADY_DEFINED #undef yypush_buffer_state #endif #ifndef hsql_pop_buffer_state_ALREADY_DEFINED #undef yypop_buffer_state #endif #ifndef hsql_ensure_buffer_stack_ALREADY_DEFINED #undef yyensure_buffer_stack #endif #ifndef hsql_lex_ALREADY_DEFINED #undef yylex #endif #ifndef hsql_restart_ALREADY_DEFINED #undef yyrestart #endif #ifndef hsql_lex_init_ALREADY_DEFINED #undef yylex_init #endif #ifndef hsql_lex_init_extra_ALREADY_DEFINED #undef yylex_init_extra #endif #ifndef hsql_lex_destroy_ALREADY_DEFINED #undef yylex_destroy #endif #ifndef hsql_get_debug_ALREADY_DEFINED #undef yyget_debug #endif #ifndef hsql_set_debug_ALREADY_DEFINED #undef yyset_debug #endif #ifndef hsql_get_extra_ALREADY_DEFINED #undef yyget_extra #endif #ifndef hsql_set_extra_ALREADY_DEFINED #undef yyset_extra #endif #ifndef hsql_get_in_ALREADY_DEFINED #undef yyget_in #endif #ifndef hsql_set_in_ALREADY_DEFINED #undef yyset_in #endif #ifndef hsql_get_out_ALREADY_DEFINED #undef yyget_out #endif #ifndef hsql_set_out_ALREADY_DEFINED #undef yyset_out #endif #ifndef hsql_get_leng_ALREADY_DEFINED #undef yyget_leng #endif #ifndef hsql_get_text_ALREADY_DEFINED #undef yyget_text #endif #ifndef hsql_get_lineno_ALREADY_DEFINED #undef yyget_lineno #endif #ifndef hsql_set_lineno_ALREADY_DEFINED #undef yyset_lineno #endif #ifndef hsql_get_column_ALREADY_DEFINED #undef yyget_column #endif #ifndef hsql_set_column_ALREADY_DEFINED #undef yyset_column #endif #ifndef hsql_wrap_ALREADY_DEFINED #undef yywrap #endif #ifndef hsql_get_lval_ALREADY_DEFINED #undef yyget_lval #endif #ifndef hsql_set_lval_ALREADY_DEFINED #undef yyset_lval #endif #ifndef hsql_get_lloc_ALREADY_DEFINED #undef yyget_lloc #endif #ifndef hsql_set_lloc_ALREADY_DEFINED #undef yyset_lloc #endif #ifndef hsql_alloc_ALREADY_DEFINED #undef yyalloc #endif #ifndef hsql_realloc_ALREADY_DEFINED #undef yyrealloc #endif #ifndef hsql_free_ALREADY_DEFINED #undef yyfree #endif #ifndef hsql_text_ALREADY_DEFINED #undef yytext #endif #ifndef hsql_leng_ALREADY_DEFINED #undef yyleng #endif #ifndef hsql_in_ALREADY_DEFINED #undef yyin #endif #ifndef hsql_out_ALREADY_DEFINED #undef yyout #endif #ifndef hsql__flex_debug_ALREADY_DEFINED #undef yy_flex_debug #endif #ifndef hsql_lineno_ALREADY_DEFINED #undef yylineno #endif #ifndef hsql_tables_fload_ALREADY_DEFINED #undef yytables_fload #endif #ifndef hsql_tables_destroy_ALREADY_DEFINED #undef yytables_destroy #endif #ifndef hsql_TABLES_NAME_ALREADY_DEFINED #undef yyTABLES_NAME #endif #line 300 "flex_lexer.l" #line 737 "flex_lexer.h" #undef hsql_IN_HEADER #endif /* hsql_HEADER_H */ ================================================ FILE: srcs/internal/sqlite/parser/flex_lexer.l ================================================ /** * lexer * * */ /*************************** ** Section 1: Definitions ***************************/ % { #include #include #include "bison_parser.h" #define TOKEN(name) \ { return SQL_##name; } static thread_local std::stringstream strbuf; char* substr(const char* source, int from, int to); % } % x singlequotedstring /*************************** ** Section 2: Rules ***************************/ /* Define the output files */ % option header - file = "flex_lexer.h" % option outfile = "flex_lexer.cpp" /* Make reentrant */ % option reentrant % option bison - bridge /* performance tweeks */ % option never - interactive % option batch /* other flags */ % option noyywrap % option nounput % option warn % option case -insensitive % option prefix = "hsql_" % option bison - locations /* %option nodefault */ % s COMMENT /*************************** ** Section 3: Rules ***************************/ % % --BEGIN(COMMENT); [^\n]* /* skipping comment content until a end of line is read */; \n BEGIN(INITIAL); [ \t\n] + /* skip whitespace */; DEALLOCATE TOKEN(DEALLOCATE) PARAMETERS TOKEN(PARAMETERS) INTERSECT TOKEN(INTERSECT) TEMPORARY TOKEN(TEMPORARY) TIMESTAMP TOKEN(TIMESTAMP) DESCRIBE TOKEN(DESCRIBE) DISTINCT TOKEN(DISTINCT) NVARCHAR TOKEN(NVARCHAR) RESTRICT TOKEN(RESTRICT) TRUNCATE TOKEN(TRUNCATE) ANALYZE TOKEN(ANALYZE) BETWEEN TOKEN(BETWEEN) CASCADE TOKEN(CASCADE) COLUMNS TOKEN(COLUMNS) CONTROL TOKEN(CONTROL) DEFAULT TOKEN(DEFAULT) EXECUTE TOKEN(EXECUTE) EXPLAIN TOKEN(EXPLAIN) INTEGER TOKEN(INTEGER) NATURAL TOKEN(NATURAL) PREPARE TOKEN(PREPARE) PRIMARY TOKEN(PRIMARY) SCHEMAS TOKEN(SCHEMAS) SPATIAL TOKEN(SPATIAL) VARCHAR TOKEN(VARCHAR) VIRTUAL TOKEN(VIRTUAL) BEFORE TOKEN(BEFORE) COLUMN TOKEN(COLUMN) CREATE TOKEN(CREATE) DELETE TOKEN(DELETE) DIRECT TOKEN(DIRECT) DOUBLE TOKEN(DOUBLE) ESCAPE TOKEN(ESCAPE) EXCEPT TOKEN(EXCEPT) EXISTS TOKEN(EXISTS) EXTRACT TOKEN(EXTRACT) GLOBAL TOKEN(GLOBAL) HAVING TOKEN(HAVING) IMPORT TOKEN(IMPORT) INSERT TOKEN(INSERT) ISNULL TOKEN(ISNULL) OFFSET TOKEN(OFFSET) RENAME TOKEN(RENAME) SCHEMA TOKEN(SCHEMA) SELECT TOKEN(SELECT) SORTED TOKEN(SORTED) TABLES TOKEN(TABLES) UNIQUE TOKEN(UNIQUE) UNLOAD TOKEN(UNLOAD) UPDATE TOKEN(UPDATE) VALUES TOKEN(VALUES) AFTER TOKEN(AFTER) ALTER TOKEN(ALTER) ARRAY TOKEN(ARRAY) CROSS TOKEN(CROSS) DELTA TOKEN(DELTA) FLOAT TOKEN(FLOAT) GROUP TOKEN(GROUP) INDEX TOKEN(INDEX) INNER TOKEN(INNER) LIMIT TOKEN(LIMIT) LOCAL TOKEN(LOCAL) MERGE TOKEN(MERGE) MINUS TOKEN(MINUS) ORDER TOKEN(ORDER) OUTER TOKEN(OUTER) RIGHT TOKEN(RIGHT) TABLE TOKEN(TABLE) UNION TOKEN(UNION) USING TOKEN(USING) WHERE TOKEN(WHERE) CALL TOKEN(CALL) CASE TOKEN(CASE) CHAR TOKEN(CHAR) DATE TOKEN(DATE) DESC TOKEN(DESC) DROP TOKEN(DROP) ELSE TOKEN(ELSE) FILE TOKEN(FILE) FROM TOKEN(FROM) FULL TOKEN(FULL) HASH TOKEN(HASH) HINT TOKEN(HINT) INTO TOKEN(INTO) JOIN TOKEN(JOIN) LEFT TOKEN(LEFT) LIKE TOKEN(LIKE) ILIKE TOKEN(ILIKE) LOAD TOKEN(LOAD) LONG TOKEN(LONG) NULL TOKEN(NULL) PLAN TOKEN(PLAN) SHOW TOKEN(SHOW) TEXT TOKEN(TEXT) THEN TOKEN(THEN) TIME TOKEN(TIME) VIEW TOKEN(VIEW) WHEN TOKEN(WHEN) WITH TOKEN(WITH) ADD TOKEN(ADD) ALL TOKEN(ALL) AND TOKEN(AND) ASC TOKEN(ASC) CSV TOKEN(CSV) END TOKEN(END) FOR TOKEN(FOR) INT TOKEN(INT) KEY TOKEN(KEY) NOT TOKEN(NOT) OFF TOKEN(OFF) SET TOKEN(SET) TBL TOKEN(TBL) TOP TOKEN(TOP) AS TOKEN(AS) BY TOKEN(BY) IF TOKEN(IF) IN TOKEN(IN) IS TOKEN(IS) OF TOKEN(OF) ON TOKEN(ON) OR TOKEN(OR) TO TOKEN(TO) SECOND TOKEN(SECOND) MINUTE TOKEN(MINUTE) HOUR TOKEN(HOUR) DAY TOKEN(DAY) MONTH TOKEN(MONTH) YEAR TOKEN(YEAR) INDEXED TOKEN(INDEXED) PRAGMA TOKEN(PRAGMA) REINDEX TOKEN(REINDEX) GENERATED TOKEN(GENERATED) ALWAYS TOKEN(ALWAYS) CHECK TOKEN(CHECK) CONFLICT TOKEN(CONFLICT) IGNORE TOKEN(IGNORE) REPLACE TOKEN(REPLACE) ROLLBACK TOKEN(ROLLBACK) ABORT TOKEN(ABORT) FAIL TOKEN(FAIL) AUTOINCR TOKEN(AUTOINCR) BEGIN TOKEN(BEGIN) TRIGGER TOKEN(TRIGGER) TEMP TOKEN(TEMP) INSTEAD TOKEN(INSTEAD) EACH TOKEN(EACH) ROW TOKEN(ROW) OVER TOKEN(OVER) FILTER TOKEN(FILTER) CURRENT TOKEN(CURRENT) EXCLUDE TOKEN(EXCLUDE) FOLLOWING TOKEN(FOLLOWING) GROUPS TOKEN(GROUPS) NO TOKEN(NO) OTHERS TOKEN(OTHERS) PRECEDING TOKEN(PRECEDING) RANGE TOKEN(RANGE) ROWS TOKEN(ROWS) TIES TOKEN(TIES) UNBOUNDED TOKEN(UNBOUNDED) WINDOW TOKEN(WINDOW) PARTITION TOKEN(PARTITION) ATTACH TOKEN(ATTACH) DETACH TOKEN(DETACH) DATABASE TOKEN(DATABASE) CAST TOKEN(CAST) SAVEPOINT TOKEN(SAVEPOINT) RELEASE TOKEN(RELEASE) VACUUM TOKEN(VACUUM) TRANSACTION TOKEN(TRANSACTION) DEFFERED TOKEN(DEFFERED) EXCLUSIVE TOKEN(EXCLUSIVE) IMEDIATE TOKEN(IMEDIATE) COMMIT TOKEN(COMMIT) GLOB TOKEN(GLOB) MATCH TOKEN(MATCH) REGEX TOKEN(REGEX) NOTHING TOKEN(NOTHING) NULLS TOKEN(NULLS) LAST TOKEN(LAST) FIRST TOKEN(FIRST) DO TOKEN(DO) COLLATE TOKEN(COLLATE) TRUE { yylval->ival = 1; return SQL_INTVAL; } FALSE { yylval->ival = 0; return SQL_INTVAL; } /* Allow =/== see https://sqlite.org/lang_expr.html#collateop */ "==" TOKEN(EQUALS) "!=" TOKEN(NOTEQUALS) "<>" TOKEN(NOTEQUALS) "<=" TOKEN(LESSEQ) ">=" TOKEN(GREATEREQ) "||" TOKEN(CONCAT) [-+*/(){},.;<>=^%:?[\]|] { return yytext[0]; } -?[0-9]+"."[0-9]* | "."[0-9]* { yylval->fval = atof(yytext); return SQL_FLOATVAL; } -?[0-9]+ { yylval->ival = atol(yytext); return SQL_INTVAL; } \"[^\"\n]+\" { // Crop the leading and trailing quote char yylval->sval = substr(yytext, 1, strlen(yytext) - 1); return SQL_IDENTIFIER; } [A - Za - z][A - Za - z0 - 9_] * { yylval->sval = strdup(yytext); return SQL_IDENTIFIER; } \' { BEGIN singlequotedstring; strbuf = std::stringstream{}; } < singlequotedstring >\'\' { strbuf << '\''; } [^']* { strbuf << yytext; } \' { BEGIN 0; yylval->sval = strdup(strbuf.str().c_str()); return SQL_STRING; } <> { /*fprintf(stdout, "[SQL-Lexer-Error] Unterminated string\n"); */ return 0; } . { /*fprintf(stdout, "[SQL-Lexer-Error] Unknown Character: %c\n", yytext[0]); */ return 0; } %% /*************************** ** Section 3: User code ***************************/ char* substr(const char* source, int from, int to) { int len = to - from; char* copy = (char*)malloc(len + 1); ; strncpy(copy, source + from, len); copy[len] = '\0'; return copy; } int yyerror(const char *msg) { fprintf(stdout, "[SQL-Lexer-Error] %s\n", msg); return 0; } ================================================ FILE: srcs/internal/sqlite/parser/parser_typedef.h ================================================ #ifndef __PARSER_TYPEDEF_H__ #define __PARSER_TYPEDEF_H__ #include #ifndef YYtypeDEF_YY_SCANNER_T #define YYtypeDEF_YY_SCANNER_T typedef void* yyscan_t; #endif #define YYSTYPE HSQL_STYPE #define YYLTYPE HSQL_LTYPE struct HSQL_CUST_LTYPE { int first_line; int first_column; int last_line; int last_column; int total_column; // Length of the string in the SQL query string int string_length; // Parameters. // int param_id; std::vector param_list; }; #define HSQL_LTYPE HSQL_CUST_LTYPE #define HSQL_LTYPE_IS_DECLARED 1 #endif ================================================ FILE: srcs/internal/sqlite/sqlite.cc ================================================ #include "sqlite.h" #include #include #include "ast.h" #include "define.h" #include "mutator.h" #include "utils.h" SQLiteDB *create_sqlite() { return new SQLiteDB; } SQLiteDB::SQLiteDB() { mutator_ = std::make_unique(); } bool SQLiteDB::initialize(YAML::Node config) { const std::string init_lib_path = config["init_lib"].as(); std::cerr << "Init path" << init_lib_path << std::endl; const std::string pragma_path = config["pragma"].as(); std::cerr << "pragma path" << pragma_path << std::endl; std::vector file_list = get_all_files_in_dir(init_lib_path.c_str()); for (auto &f : file_list) { std::cerr << "init lib: " << f << ", status "; mutator_->init(f, "", pragma_path); } return true; } bool SQLiteDB::save_interesting_query(const std::string &query) { if (Program *program = parser(query)) { std::vector ir_set; IR *ir = program->translate(ir_set); ir_set.clear(); string strip_sql = mutator_->extract_struct(ir); // string strip_sql = ir->to_string(); auto p_strip_sql = parser(strip_sql); if (p_strip_sql) { auto root_ir = p_strip_sql->translate(ir_set); p_strip_sql->deep_delete(); // mutator_->add_ir_to_library(root_ir); mutator_->add_to_library(root_ir); deep_delete(root_ir); } return true; } return false; } size_t SQLiteDB::validate_all(const std::vector &ir_set) { for (IR *ir : ir_set) { std::string validated_ir = mutator_->validate(ir); if (validated_ir.empty()) { continue; } validated_test_cases_.push(std::move(validated_ir)); } return validated_test_cases_.size(); } bool SQLiteDB::has_mutated_test_cases() { return !validated_test_cases_.empty(); } size_t SQLiteDB::mutate(const std::string &query) { std::vector ir_set, mutated_tree; Program *program_root = parser(query.c_str()); if (program_root == nullptr) { return 0; } // TODO: Remove this uncessary try. // Or we will have exception from the parser? try { program_root->translate(ir_set); } catch (...) { for (auto ir : ir_set) { delete ir; } program_root->deep_delete(); } program_root->deep_delete(); mutated_tree = mutator_->mutate_all(ir_set); deep_delete(ir_set[ir_set.size() - 1]); size_t validated_ir_size = validate_all(mutated_tree); for (auto ir : mutated_tree) { deep_delete(ir); } // std::cerr << "validated ir size: " << validated_ir_size << std::endl; return validated_ir_size; } std::string SQLiteDB::get_next_mutated_query() { auto result = validated_test_cases_.top(); validated_test_cases_.pop(); return result; } ================================================ FILE: srcs/internal/sqlite/sqlite.h ================================================ #ifndef __SQLITE_H_H_H__ #define __SQLITE_H_H_H__ #include #include #include #include "db.h" class Mutator; class IR; class SQLiteDB : public DataBase { public: // Set up the database. SQLiteDB(); virtual bool initialize(YAML::Node config); virtual size_t mutate(const std::string &); virtual bool save_interesting_query(const std::string &); // Return an new query to test. The `buffer` should be unmanaged, virtual std::string get_next_mutated_query(); virtual bool has_mutated_test_cases(); // Clean up the enviroment, e.g., drop all the databases. virtual bool clean_up() { return true; } private: size_t validate_all(const std::vector &ir_set); std::unique_ptr mutator_; std::stack validated_test_cases_; }; SQLiteDB *create_sqlite(); #endif ================================================ FILE: srcs/internal/sqlite/srcs/ast.cpp ================================================ #include "../include/ast.h" #include #include #include #include #include "../include/mutator.h" #include "../include/utils.h" static string s_table_name; string IR::to_string() { string res; if (type_ == kColumnName && str_val_ == "*") return str_val_; if (type_ == kFilePath || type_ == kPrepareTargetQuery || type_ == kStringLiteral || type_ == kIdentifier || type_ == kOptOrderType || type_ == kColumnType || type_ == kSetType || type_ == kOptJoinType || type_ == kOptDistinct || type_ == kNullLiteral) return str_val_; if (type_ == kIntLiteral) return std::to_string(int_val_); if (type_ == kFloatLiteral || type_ == kconst_float) return std::to_string(f_val_); if (type_ == kconst_str) return str_val_; if (type_ == kconst_int) return std::to_string(int_val_); if (!str_val_.empty()) return str_val_; if (op_ != NULL) res += op_->prefix_ + " "; if (left_ != NULL) res += left_->to_string() + " "; if (op_ != NULL) res += op_->middle_ + " "; if (right_ != NULL) res += right_->to_string() + " "; if (op_ != NULL) res += op_->suffix_; trim_string(res); return res; } IR *ShowStatement::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(1) IR *tmp = SAFETRANSLATE(table_name_); res = new IR(kShowStatement, OPSTART("SHOW COLUMNS"), tmp); CASEEND CASESTART(0) res = new IR(kShowStatement, OPSTART("SHOW TABLES")); CASEEND CASESTART(2) IR *tmp = SAFETRANSLATE(table_name_); res = new IR(kShowStatement, OPSTART("DESCRIBE"), tmp); CASEEND SWITCHEND TRANSLATEEND } IR *TableName::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) IR *tmp1 = SAFETRANSLATE(table_name_); res = new IR(kTableName, OP0(), tmp1); CASEEND CASESTART(1) IR *tmp1 = SAFETRANSLATE(database_name_); IR *tmp2 = SAFETRANSLATE(table_name_); res = new IR(kTableName, OPMID("."), tmp1, tmp2); CASEEND SWITCHEND TRANSLATEEND } IR *DropStatement::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) IR *tmp1 = SAFETRANSLATE(opt_exists_); IR *tmp2 = SAFETRANSLATE(table_name_); res = new IR(kDropStatement, OPSTART("DROP TABLE"), tmp1, tmp2); CASEEND CASESTART(1) IR *tmp1 = SAFETRANSLATE(opt_exists_); IR *tmp2 = SAFETRANSLATE(table_name_); res = new IR(kDropStatement, OPSTART("DROP VIEW"), tmp1, tmp2); CASEEND CASESTART(2) IR *tmp1 = SAFETRANSLATE(id_); res = new IR(kDropStatement, OPSTART("DEALLOCATE PREPARE"), tmp1); CASEEND CASESTART(3) auto opt_exist = SAFETRANSLATE(opt_exists_); auto schema_name = SAFETRANSLATE(schema_name_); auto trigger_name = SAFETRANSLATE(trigger_name_); res = new IR(kUnknown, OPMID("."), schema_name, trigger_name); PUSH(res); res = new IR(kDropStatement, OP1("DROP TRIGGER"), opt_exist, res); CASEEND CASESTART(4) auto opt_exist = SAFETRANSLATE(opt_exists_); auto trigger_name = SAFETRANSLATE(trigger_name_); res = new IR(kDropStatement, OP1("DROP TRIGGER"), opt_exist, trigger_name); CASEEND SWITCHEND TRANSLATEEND } IR *OptExists::translate(vector &v_ir_collector) { TRANSLATESTART res = new IR(kOptExists, str_val_); TRANSLATEEND } IR *Node::translate(vector &v_ir_collector) { return NULL; } IR *Opt::translate(vector &v_ir_collector) { return NULL; } IR *OptString::translate(vector &v_ir_collector) { return NULL; } IR *Program::translate(vector &v_ir_collector) { TRANSLATESTART res = SAFETRANSLATE(statement_list_); auto tmp = SAFETRANSLATE(opt_semicolon_); res = new IR(kProgram, OP0(), res, tmp); TRANSLATEEND } IR *StatementList::translate(vector &v_ir_collector) { TRANSLATESTART TRANSLATELIST(kStatementList, v_statement_list_, ";"); TRANSLATEENDNOPUSH } IR *Statement::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = SAFETRANSLATE(preparable_statement_); auto tmp = SAFETRANSLATE(optional_hints_); res = new IR(kStatement, OP0(), res, tmp); CASEEND CASESTART(1) res = SAFETRANSLATE(prepare_statement_); auto tmp = SAFETRANSLATE(optional_hints_); res = new IR(kStatement, OP0(), res, tmp); CASEEND CASESTART(2) res = SAFETRANSLATE(show_statement_); res = new IR(kStatement, OP0(), res); CASEEND CASESTART(3) res = SAFETRANSLATE(cmd_); res = new IR(kStatement, OP0(), res); CASEEND SWITCHEND TRANSLATEEND } IR *OptionalHints::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = SAFETRANSLATE(hint_list_); res = new IR(kOptionalHints, OP3("WITH HINT", "(", ")"), NULL, res); CASEEND CASESTART(1) res = new IR(kOptionalHints, ""); CASEEND SWITCHEND TRANSLATEEND } IR *PrepareStatement::translate(vector &v_ir_collector) { TRANSLATESTART res = SAFETRANSLATE(id_); auto tmp = SAFETRANSLATE(prep_target_que_); res = new IR(kPrepareStatement, OP2("PREPARE", "FROM"), res, tmp); TRANSLATEEND } IR *PreparableStatement::translate(vector &v_ir_collector) { return NULL; } IR *Hint::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = SAFETRANSLATE(id_); auto tmp = SAFETRANSLATE(literal_list_); res = new IR(kHint, OP3("", "(", ")"), res, tmp); CASEEND CASESTART(1) res = SAFETRANSLATE(id_); res = new IR(kHint, OP0(), res); CASEEND SWITCHEND TRANSLATEEND } IR *HintList::translate(vector &v_ir_collector) { TRANSLATESTART TRANSLATELIST(kHintList, v_hint_list_, ","); TRANSLATEEND } IR *PrepareTargetQuery::translate(vector &v_ir_collector) { TRANSLATESTART res = new IR(kPrepareTargetQuery, prep_target_que_); TRANSLATEEND } IR *SelectStatement::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(opt_with_clause_); auto tmp2 = SAFETRANSLATE(select_with_paren_); res = new IR(kSelectStatement, OP0(), tmp1, tmp2); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(opt_with_clause_); auto tmp2 = SAFETRANSLATE(select_no_paren_); res = new IR(kSelectStatement, OP0(), tmp1, tmp2); CASEEND CASESTART(2) auto tmp1 = SAFETRANSLATE(opt_with_clause_); auto tmp2 = SAFETRANSLATE(select_with_paren_); auto tmp3 = SAFETRANSLATE(set_operator_); auto tmp4 = SAFETRANSLATE(select_paren_or_clause_); auto tmp5 = SAFETRANSLATE(opt_order_); IR *tmp6 = NULL; if (opt_limit_ != NULL) tmp6 = SAFETRANSLATE(opt_limit_); res = new IR(kUnknown, OP0(), tmp1, tmp2); PUSH(res); res = new IR(kUnknown, OP0(), res, tmp3); PUSH(res); res = new IR(kUnknown, OP0(), res, tmp4); PUSH(res); res = new IR(kUnknown, OP0(), res, tmp5); if (opt_limit_ != NULL) { PUSH(res); res = new IR(kSelectStatement, OP0(), res, tmp6); } CASEEND SWITCHEND TRANSLATEEND } IR *ImportStatement::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(import_file_type_); auto tmp2 = SAFETRANSLATE(file_path_); auto tmp3 = SAFETRANSLATE(table_name_); res = new IR(kUnknown, OP2("IMPORT FROM", "FILE"), tmp1, tmp2); PUSH(res); res = new IR(kImportStatement, OPMID("INTO"), res, tmp3); TRANSLATEEND } IR *CreateStatement::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(opt_not_exists_); auto tmp2 = SAFETRANSLATE(table_name_); auto tmp = new IR(kUnknown, OP0(), tmp1, tmp2); PUSH(tmp); auto tmp3 = SAFETRANSLATE(file_path_); res = new IR(kCreateStatement, OP2("CREATE TABLE", "FROM TBL FILE"), tmp, tmp3); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(opt_not_exists_); auto tmp2 = SAFETRANSLATE(table_name_); auto tmp = new IR(kUnknown, OP0(), tmp1, tmp2); PUSH(tmp); auto tmp3 = SAFETRANSLATE(column_def_comma_list_); res = new IR(kCreateStatement, OP3("CREATE TABLE", "(", ")"), tmp, tmp3); CASEEND CASESTART(2) auto tmp1 = SAFETRANSLATE(opt_not_exists_); auto tmp2 = SAFETRANSLATE(table_name_); auto tmp = new IR(kUnknown, OP0(), tmp1, tmp2); PUSH(tmp); auto tmp3 = SAFETRANSLATE(select_statement_); res = new IR(kCreateStatement, OP2("CREATE TABLE", "AS"), tmp, tmp3); CASEEND CASESTART(3) auto tmp1 = SAFETRANSLATE(opt_not_exists_); auto tmp2 = SAFETRANSLATE(table_name_); auto tmp = new IR(kUnknown, OP0(), tmp1, tmp2); PUSH(tmp); auto tmp3 = SAFETRANSLATE(opt_column_list_); auto tmp4 = new IR(kUnknown, OP0(), tmp, tmp3); PUSH(tmp4); auto tmp5 = SAFETRANSLATE(select_statement_); res = new IR(kCreateStatement, OP2("CREATE VIEW", "AS"), tmp4, tmp5); CASEEND CASESTART(4) auto tmp1 = SAFETRANSLATE(opt_unique_); auto tmp2 = SAFETRANSLATE(opt_not_exists_); res = new IR(kUnknown, OP2("CREATE", "INDEX"), tmp1, tmp2); PUSH(res); auto tmp3 = SAFETRANSLATE(index_name_); res = new IR(kUnknown, OP0(), res, tmp3); PUSH(res); auto tmp4 = SAFETRANSLATE(table_name_); res = new IR(kUnknown, OPMID("ON"), res, tmp4); PUSH(res); auto tmp5 = SAFETRANSLATE(ident_commalist_); res = new IR(kCreateStatement, OP3("", "(", ")"), res, tmp5); PUSH(res); auto tmp6 = SAFETRANSLATE(opt_where_); res = new IR(kCreateStatement, OP0(), res, tmp6); CASEEND CASESTART(5) auto tmp1 = SAFETRANSLATE(opt_not_exists_); auto tmp2 = SAFETRANSLATE(table_name_); res = new IR(kUnknown, OP1("CREATE VIRTUAL TABLE"), tmp1, tmp2); PUSH(res); auto tmp3 = SAFETRANSLATE(module_name_); res = new IR(kCreateStatement, OPMID("USING"), res, tmp3); CASEEND CASESTART(6) auto tmp1 = SAFETRANSLATE(opt_not_exists_); auto tmp2 = SAFETRANSLATE(table_name_); res = new IR(kUnknown, OP1("CREATE VIRTUAL TABLE"), tmp1, tmp2); PUSH(res); auto tmp3 = SAFETRANSLATE(module_name_); res = new IR(kCreateStatement, OPMID("USING"), res, tmp3); PUSH(res); auto tmp4 = SAFETRANSLATE(column_def_comma_list_); res = new IR(kCreateStatement, OP3("", "(", ")"), res, tmp4); CASEEND CASESTART(7) auto tmp1 = SAFETRANSLATE(trigger_declare_); auto tmp2 = SAFETRANSLATE(trigger_cmd_list_); res = new IR(kCreateStatement, OP3("CREATE", "BEGIN", "END"), tmp1, tmp2); CASEEND SWITCHEND TRANSLATEEND } IR *InsertStatement::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = SAFETRANSLATE(insert_type_); auto tmp = SAFETRANSLATE(table_name_); res = new IR(kUnknown, OPMID("INTO"), res, tmp); PUSH(res); tmp = SAFETRANSLATE(opt_column_list_); res = new IR(kUnknown, OP0(), res, tmp); PUSH(res); tmp = SAFETRANSLATE(super_list_); tmp = new IR(kUnknown, OP0(), tmp); PUSH(tmp); res = new IR(kInsertStatement, OPMID("VALUES"), res, tmp); PUSH(tmp); tmp = SAFETRANSLATE(opt_upsert_clause_); res = new IR(kInsertStatement, OP0(), res, tmp); CASEEND CASESTART(1) res = SAFETRANSLATE(insert_type_); auto tmp = SAFETRANSLATE(table_name_); res = new IR(kUnknown, OPMID("INTO"), res, tmp); PUSH(res); tmp = SAFETRANSLATE(opt_column_list_); res = new IR(kUnknown, OP0(), res, tmp); PUSH(res); tmp = SAFETRANSLATE(select_no_paren_); res = new IR(kInsertStatement, OP0(), res, tmp); PUSH(tmp); tmp = SAFETRANSLATE(opt_upsert_clause_); res = new IR(kInsertStatement, OP0(), res, tmp); CASEEND SWITCHEND TRANSLATEEND } IR *InsertType::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kInsertType, str_val_); CASEEND CASESTART(1) res = new IR(kInsertType, str_val_); CASEEND CASESTART(2) res = SAFETRANSLATE(resolve_type_); res = new IR(kInsertType, OP1("INSERT OR"), res); CASEEND SWITCHEND TRANSLATEEND } void InsertType::deep_delete() { SAFEDELETE(resolve_type_); delete this; } IR *DeleteStatement::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) IR *tmp1 = SAFETRANSLATE(table_name_); IR *tmp2 = SAFETRANSLATE(opt_where_); res = new IR(kDeleteStatement, OPSTART("DELETE FROM"), tmp1, tmp2); CASEEND CASESTART(1) IR *tmp1 = SAFETRANSLATE(table_name_); res = new IR(kDeleteStatement, OPSTART("TRUNCATE"), tmp1); CASEEND SWITCHEND TRANSLATEEND } IR *UpdateStatement::translate(vector &v_ir_collector) { TRANSLATESTART res = SAFETRANSLATE(table_ref_name_no_alias_); auto tmp = SAFETRANSLATE(update_clause_comma_list_); res = new IR(kUpdateStatement, OP2("UPDATE", "SET"), res, tmp); PUSH(res); tmp = SAFETRANSLATE(opt_where_); res = new IR(kUpdateStatement, OP0(), res, tmp); TRANSLATEEND } IR *ExecuteStatement::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto id = SAFETRANSLATE(id_); res = new IR(kExecuteStatement, OPSTART("EXECUTE"), id); CASEEND CASESTART(1) auto id = SAFETRANSLATE(id_); auto tmp = SAFETRANSLATE(opt_literal_list_); res = new IR(kExecuteStatement, OP3("EXECUTE", "(", ")"), id, tmp); CASEEND SWITCHEND TRANSLATEEND } IR *ImportFileType::translate(vector &v_ir_collector) { TRANSLATESTART res = new IR(kImportFileType, str_val_); TRANSLATEEND } IR *FilePath::translate(vector &v_ir_collector) { TRANSLATESTART res = new IR(kFilePath, str_val_); TRANSLATEEND } IR *OptNotExists::translate(vector &v_ir_collector) { TRANSLATESTART res = new IR(kOptNotExists, str_val_); TRANSLATEEND } IR *ColumnDefCommaList::translate(vector &v_ir_collector) { TRANSLATESTART TRANSLATELIST(kColumnDefCommaList, v_column_def_comma_list_, ","); TRANSLATEENDNOPUSH } IR *ColumnDef::translate(vector &v_ir_collector) { TRANSLATESTART res = SAFETRANSLATE(id_); auto tmp = SAFETRANSLATE(column_type_); res = new IR(kColumnDef, OP0(), res, tmp); PUSH(res); tmp = SAFETRANSLATE(opt_column_arglist_); res = new IR(kColumnDef, OP0(), res, tmp); TRANSLATEEND } IR *ColumnType::translate(vector &v_ir_collector) { TRANSLATESTART res = new IR(kColumnType, str_val_); TRANSLATEEND } IR *OptColumnNullable::translate(vector &v_ir_collector) { TRANSLATESTART res = new IR(kOptColumnNullable, str_val_); TRANSLATEEND } IR *OptColumnList::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = SAFETRANSLATE(ident_comma_list_); res = new IR(kOptColumnList, OP3("(", "", ")"), res); CASEEND CASESTART(1) res = new IR(kOptColumnList, ""); CASEEND SWITCHEND TRANSLATEEND } IR *UpdateClauseCommalist::translate(vector &v_ir_collector) { TRANSLATESTART TRANSLATELIST(kUpdateClauseCommalist, v_update_clause_list_, ","); TRANSLATEENDNOPUSH } IR *UpdateClause::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(id_); auto tmp2 = SAFETRANSLATE(expr_); res = new IR(kUpdateClause, OPMID("="), tmp1, tmp2); TRANSLATEEND } IR *SelectWithParen::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = SAFETRANSLATE(select_no_paren_); res = new IR(kSelectWithParen, OP3("(", "", ")"), res); CASEEND CASESTART(1) res = SAFETRANSLATE(select_with_paren_); res = new IR(kSelectWithParen, OP3("(", "", ")"), res); CASEEND SWITCHEND TRANSLATEEND } IR *SelectParenOrClause::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = SAFETRANSLATE(select_with_paren_); res = new IR(kSelectParenOrClause, OP0(), res); CASEEND CASESTART(1) res = SAFETRANSLATE(select_clause_); res = new IR(kSelectParenOrClause, OP0(), res); CASEEND SWITCHEND TRANSLATEEND } IR *SelectNoParen::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = SAFETRANSLATE(select_clause_); auto tmp = SAFETRANSLATE(opt_order_); res = new IR(kSelectNoParen, OP0(), res, tmp); if (opt_limit_ != NULL) { PUSH(res); tmp = SAFETRANSLATE(opt_limit_); res = new IR(kSelectNoParen, OP0(), res, tmp); } CASEEND CASESTART(1) res = SAFETRANSLATE(select_clause_); auto tmp = SAFETRANSLATE(set_operator_); res = new IR(kUnknown, OP0(), res, tmp); PUSH(res); tmp = SAFETRANSLATE(select_paren_or_clause_); res = new IR(kSelectNoParen, OP0(), res, tmp); PUSH(res); tmp = SAFETRANSLATE(opt_order_); res = new IR(kSelectNoParen, OP0(), res, tmp); if (opt_limit_ != NULL) { PUSH(res); tmp = SAFETRANSLATE(opt_limit_); res = new IR(kSelectNoParen, OP0(), res, tmp); } CASEEND SWITCHEND TRANSLATEEND } IR *SetOperator::translate(vector &v_ir_collector) { TRANSLATESTART res = SAFETRANSLATE(set_type_); auto tmp = SAFETRANSLATE(opt_all_); res = new IR(kSetOperator, OP0(), res, tmp); TRANSLATEEND } IR *SetType::translate(vector &v_ir_collector) { TRANSLATESTART res = new IR(kSetType, str_val_); TRANSLATEEND } IR *OptAll::translate(vector &v_ir_collector) { TRANSLATESTART res = new IR(kOptAll, str_val_); TRANSLATEEND } IR *SelectClause::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(opt_top_); auto tmp2 = SAFETRANSLATE(opt_distinct_); auto tmp3 = SAFETRANSLATE(select_list_); auto tmp4 = SAFETRANSLATE(opt_from_clause_); auto tmp5 = SAFETRANSLATE(opt_where_); auto tmp6 = SAFETRANSLATE(opt_group_); res = new IR(kUnknown, OPSTART("SELECT"), tmp1, tmp2); PUSH(res); res = new IR(kUnknown, OP0(), res, tmp3); PUSH(res); res = new IR(kUnknown, OP0(), res, tmp4); PUSH(res); res = new IR(kUnknown, OP0(), res, tmp5); PUSH(res); res = new IR(kSelectClause, OP0(), res, tmp6); if (sub_type_ == 1) { PUSH(res); auto tmp = SAFETRANSLATE(window_clause_); res = new IR(kSelectClause, OP0(), res, tmp); } TRANSLATEEND } IR *OptDistinct::translate(vector &v_ir_collector) { TRANSLATESTART res = new IR(kOptDistinct, str_val_); TRANSLATEEND } IR *SelectList::translate(vector &v_ir_collector) { TRANSLATESTART res = SAFETRANSLATE(expr_list_); res = new IR(kSelectList, OP0(), res); TRANSLATEEND } IR *FromClause::translate(vector &v_ir_collector) { TRANSLATESTART res = SAFETRANSLATE(table_ref_); res = new IR(kFromClause, OPSTART("FROM"), res); TRANSLATEEND } IR *OptFromClause::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = SAFETRANSLATE(from_clause_); res = new IR(kOptFromClause, OP0(), res); CASEEND CASESTART(1) res = new IR(kOptFromClause, ""); CASEEND SWITCHEND TRANSLATEEND } IR *OptWhere::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) IR *tmp1 = SAFETRANSLATE(expr_); res = new IR(kOptWhere, OPSTART("WHERE"), tmp1); CASEEND CASESTART(1) res = new IR(kOptWhere, string("")); CASEEND SWITCHEND TRANSLATEEND } IR *OptGroup::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(expr_list_); auto tmp2 = SAFETRANSLATE(opt_having_); res = new IR(kOptGroup, OPSTART("GROUP BY"), tmp1, tmp2); CASEEND CASESTART(1) res = new IR(kOptGroup, ""); CASEEND SWITCHEND TRANSLATEEND } IR *OptHaving::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = SAFETRANSLATE(expr_); res = new IR(kOptHaving, OP1("HAVING"), res); CASEEND CASESTART(1) res = new IR(kOptHaving, ""); CASEEND SWITCHEND TRANSLATEEND } IR *OptOrder::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = SAFETRANSLATE(order_list_); res = new IR(kOptOrder, OP1("ORDER BY"), res); CASEEND CASESTART(1) res = new IR(kOptOrder, ""); CASEEND SWITCHEND TRANSLATEEND } IR *OrderList::translate(vector &v_ir_collector) { TRANSLATESTART TRANSLATELIST(kOrderList, v_order_desc_, ","); TRANSLATEENDNOPUSH } IR *OrderDesc::translate(vector &v_ir_collector) { TRANSLATESTART res = SAFETRANSLATE(expr_); auto tmp = SAFETRANSLATE(opt_order_type_); res = new IR(kOrderDesc, OP0(), res, tmp); PUSH(res); tmp = SAFETRANSLATE(opt_null_); res = new IR(kOrderDesc, OP0(), res, tmp); TRANSLATEEND } IR *OptOrderType::translate(vector &v_ir_collector) { TRANSLATESTART res = new IR(kOptOrderType, str_val_); TRANSLATEEND } IR *OptTop::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp = SAFETRANSLATE(int_literal_); res = new IR(kOptTop, OPSTART("TOP"), tmp); CASEEND CASESTART(1) res = new IR(kOptTop, ""); CASEEND SWITCHEND TRANSLATEEND } IR *OptLimit::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp = SAFETRANSLATE(expr1_); res = new IR(kOptLimit, OPSTART("LIMIT"), tmp); CASEEND CASESTART(1) auto tmp = SAFETRANSLATE(expr1_); res = new IR(kOptLimit, OPSTART("OFFSET"), tmp); CASEEND CASESTART(2) auto tmp1 = SAFETRANSLATE(expr1_); auto tmp2 = SAFETRANSLATE(expr2_); res = new IR(kOptLimit, OP2("LIMIT", "OFFSET"), tmp1, tmp2); CASEEND CASESTART(3) res = new IR(kOptLimit, "LIMIT ALL"); CASEEND CASESTART(4) auto tmp = SAFETRANSLATE(expr1_); res = new IR(kOptLimit, OPSTART("LIMIT ALL OFFSET"), tmp); CASEEND CASESTART(5) res = new IR(kOptLimit, ""); CASEEND SWITCHEND TRANSLATEEND } IR *ExprList::translate(vector &v_ir_collector) { TRANSLATESTART TRANSLATELIST(kExprList, v_expr_list_, ","); TRANSLATEENDNOPUSH } IR *LiteralList::translate(vector &v_ir_collector) { TRANSLATESTART TRANSLATELIST(kLiteralList, v_literal_list_, ","); TRANSLATEENDNOPUSH } IR *OptLiteralList::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = SAFETRANSLATE(literal_list_); res = new IR(kOptLiteralList, OP0(), res); CASEEND CASESTART(1) res = new IR(kOptLiteralList, ""); CASEEND SWITCHEND TRANSLATEEND } IR *ExprAlias::translate(vector &v_ir_collector) { TRANSLATESTART res = SAFETRANSLATE(expr_); auto tmp = SAFETRANSLATE(opt_alias_); res = new IR(kExprAlias, OP0(), res, tmp); TRANSLATEEND } IR *Expr::translate(vector &v_ir_collector) { return NULL; } IR *Operand::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = SAFETRANSLATE(expr_); res = new IR(kOperand, OP2("(", ")"), res); CASEEND CASESTART(1) res = SAFETRANSLATE(expr_); res = new IR(kOperand, OP0(), res); CASEEND CASESTART(2) res = SAFETRANSLATE(select_no_paren_); res = new IR(kOperand, OP2("(", ")"), res); CASEEND SWITCHEND TRANSLATEEND } IR *BetweenExpr::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(operand2_); auto tmp2 = SAFETRANSLATE(operand3_); res = new IR(kUnknown, OPMID("AND"), tmp1, tmp2); PUSH(res); auto tmp3 = SAFETRANSLATE(operand1_); res = new IR(kBetweenExpr, OPMID("BETWEEN"), tmp3, res); TRANSLATEEND } IR *LogicExpr::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(expr1_); auto tmp2 = SAFETRANSLATE(expr2_); res = new IR(kLogicExpr, OPMID(operator_), tmp1, tmp2); TRANSLATEEND } IR *ExistsExpr::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = SAFETRANSLATE(select_no_paren_); res = new IR(kOperand, OP2("(", ")"), res); PUSH(res); res = new IR(kExistsExpr, OP1("EXISTS"), res); CASEEND CASESTART(1) res = SAFETRANSLATE(select_no_paren_); res = new IR(kUnknown, OP2("(", ")"), res); PUSH(res); res = new IR(kExistsExpr, OP1("EXISTS"), res); CASEEND SWITCHEND TRANSLATEEND } IR *InExpr::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(operand_); auto tmp2 = SAFETRANSLATE(expr_list_); auto tmp3 = new IR(kUnknown, OP3("(", "", ")"), tmp2); res = new IR(kInExpr, OPMID("IN"), tmp1, tmp3); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(operand_); auto tmp2 = SAFETRANSLATE(expr_list_); auto tmp3 = new IR(kUnknown, OP3("(", "", ")"), tmp2); res = new IR(kInExpr, OPMID("NOT IN"), tmp1, tmp3); CASEEND CASESTART(2) auto tmp1 = SAFETRANSLATE(operand_); auto tmp2 = SAFETRANSLATE(select_no_paren_); auto tmp3 = new IR(kUnknown, OP3("(", "", ")"), tmp2); res = new IR(kInExpr, OPMID("IN"), tmp1, tmp3); CASEEND CASESTART(3) auto tmp1 = SAFETRANSLATE(operand_); auto tmp2 = SAFETRANSLATE(select_no_paren_); auto tmp3 = new IR(kUnknown, OP3("(", "", ")"), tmp2); res = new IR(kInExpr, OPMID("IN"), tmp1, tmp3); CASEEND SWITCHEND TRANSLATEEND } IR *ArrayIndex::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(operand_); auto tmp2 = SAFETRANSLATE(int_literal_); res = new IR(kArrayIndex, OP3("", "[", "]"), tmp1, tmp2); TRANSLATEEND } IR *ScalarExpr::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = SAFETRANSLATE(column_name_); res = new IR(kScalarExpr, OP0(), res); CASEEND CASESTART(1) res = SAFETRANSLATE(literal_); res = new IR(kScalarExpr, OP0(), res); CASEEND SWITCHEND TRANSLATEEND } IR *UnaryExpr::translate(vector &v_ir_collector) { TRANSLATESTART res = SAFETRANSLATE(operand_); SWITCHSTART CASESTART(0) res = new IR(kUnaryExpr, OP1("-"), res); CASEEND CASESTART(1) res = new IR(kUnaryExpr, OP1("NOT"), res); CASEEND CASESTART(2) res = new IR(kUnaryExpr, OPMID("ISNULL"), res); CASEEND CASESTART(3) res = new IR(kUnaryExpr, OPMID("IS NULL"), res); CASEEND CASESTART(4) res = new IR(kUnaryExpr, OPMID("IS NOT NULL"), res); CASEEND SWITCHEND TRANSLATEEND } IR *BinaryExpr::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp = SAFETRANSLATE(comp_expr_); res = new IR(kBinaryExpr, OP0(), tmp); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(operand1_); auto tmp2 = SAFETRANSLATE(operand2_); res = new IR(kBinaryExpr, OPMID(operator_), tmp1, tmp2); CASEEND SWITCHEND TRANSLATEEND } IR *CompExpr::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(operand1_); auto tmp2 = SAFETRANSLATE(operand2_); res = new IR(kCompExpr, OPMID(operator_), tmp1, tmp2); TRANSLATEEND } IR *CaseExpr::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(case_expr_); auto tmp2 = SAFETRANSLATE(case_list_); res = new IR(kCaseExpr, OP3("CASE", "", "END"), tmp1, tmp2); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(case_expr_); auto tmp2 = SAFETRANSLATE(case_list_); auto tmp3 = SAFETRANSLATE(else_expr_); res = new IR(kUnknown, OP0(), tmp1, tmp2); PUSH(res); res = new IR(kCaseExpr, OP3("CASE", "ELSE", "END"), res, tmp3); CASEEND CASESTART(2) res = SAFETRANSLATE(case_list_); res = new IR(kCaseExpr, OP3("CASE", "", "END"), res); CASEEND CASESTART(3) auto tmp1 = SAFETRANSLATE(case_list_); auto tmp2 = SAFETRANSLATE(else_expr_); res = new IR(kCaseExpr, OP3("CASE", "ELSE", "END"), tmp1, tmp2); CASEEND SWITCHEND TRANSLATEEND } IR *FunctionExpr::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = SAFETRANSLATE(id_); res = new IR(kFunctionExpr, OPEND("()"), res); PUSH(res); auto tmp1 = SAFETRANSLATE(opt_filter_clause_); res = new IR(kFunctionExpr, OP0(), res, tmp1); PUSH(res); tmp1 = SAFETRANSLATE(opt_over_clause_); res = new IR(kFunctionExpr, OP0(), res, tmp1); CASEEND CASESTART(1) res = SAFETRANSLATE(id_); auto tmp = SAFETRANSLATE(opt_distinct_); auto tmp2 = SAFETRANSLATE(expr_list_); auto tmp_res = new IR(kExprList, OP3("(", "", ")"), tmp, tmp2); PUSH(tmp_res); res = new IR(kFunctionExpr, OP0(), res, tmp_res); PUSH(res); auto tmp1 = SAFETRANSLATE(opt_filter_clause_); res = new IR(kFunctionExpr, OP0(), res, tmp1); PUSH(res); tmp1 = SAFETRANSLATE(opt_over_clause_); res = new IR(kFunctionExpr, OP0(), res, tmp1); CASEEND SWITCHEND TRANSLATEEND } IR *ExtractExpr::translate(vector &v_ir_collector) { TRANSLATESTART res = SAFETRANSLATE(datetime_field_); IR *expr = SAFETRANSLATE(expr_); res = new IR(kUnknown, OP3("(", "FROM", ")"), res, expr); PUSH(res); res = new IR(kExtractExpr, OPSTART("EXTRACT"), res); TRANSLATEEND } IR *ArrayExpr::translate(vector &v_ir_collector) { TRANSLATESTART res = SAFETRANSLATE(expr_list_); res = new IR(kArrayExpr, OP3("ARRAY", "[", "]"), NULL, res); TRANSLATEEND } IR *CaseClause::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(when_expr_); auto tmp2 = SAFETRANSLATE(then_expr_); res = new IR(kCaseClause, OP2("WHEN", "THEN"), tmp1, tmp2); TRANSLATEEND } IR *CaseList::translate(vector &v_ir_collector) { TRANSLATESTART TRANSLATELIST(kCaseList, v_case_list_, " "); TRANSLATEENDNOPUSH } IR *DatetimeField::translate(vector &v_ir_collector) { TRANSLATESTART res = new IR(kDatetimeField, str_val_); TRANSLATEEND } IR *ColumnName::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = SAFETRANSLATE(identifier1_); res = new IR(kColumnName, OP0(), res); CASEEND CASESTART(1) res = SAFETRANSLATE(identifier1_); IR *tmp = SAFETRANSLATE(identifier2_); res->id_type_ = id_whatever; tmp->id_type_ = id_whatever; res = new IR(kColumnName, OPMID("."), res, tmp); res->id_type_ = id_column_name; CASEEND CASESTART(2) res = new IR(kColumnName, string("*")); CASEEND CASESTART(3) res = SAFETRANSLATE(identifier1_); res->id_type_ = id_whatever; IR *tmp = new IR(kconst_str, string("*")); PUSH(tmp); res = new IR(kColumnName, OPMID("."), res, tmp); res->id_type_ = id_column_name; CASEEND SWITCHEND TRANSLATEEND } IR *Literal::translate(vector &v_ir_collector) { TRANSLATESTART assert(0); TRANSLATEEND } IR *StringLiteral::translate(vector &v_ir_collector) { TRANSLATESTART res = new IR(kStringLiteral, "'" + str_val_ + "'"); TRANSLATEEND } IR *BoolLiteral::translate(vector &v_ir_collector) { TRANSLATESTART res = new IR(kBoolLiteral, b_val_); TRANSLATEEND } IR *NumLiteral::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kFloatLiteral, f_val_); CASEEND CASESTART(1) res = SAFETRANSLATE(int_literal_); CASEEND SWITCHEND TRANSLATEEND } IR *IntLiteral::translate(vector &v_ir_collector) { TRANSLATESTART res = new IR(kIntLiteral, int_val_); TRANSLATEEND } IR *NullLiteral::translate(vector &v_ir_collector) { TRANSLATESTART res = new IR(kNullLiteral, string("NULL")); TRANSLATEEND } IR *ParamExpr::translate(vector &v_ir_collector) { return NULL; } IR *Identifier::translate(vector &v_ir_collector) { TRANSLATESTART res = new IR(kIdentifier, id_, id_type_); TRANSLATEEND } IR *TableRefCommaList::translate(vector &v_ir_collector) { TRANSLATESTART TRANSLATELIST(kTableRefCommaList, v_table_ref_comma_list_, ","); TRANSLATEEND } IR *TableRefAtomic::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = SAFETRANSLATE(nonjoin_table_ref_atomic_); res = new IR(kTableRefAtomic, OP0(), res); CASEEND CASESTART(1) res = SAFETRANSLATE(join_clause_); res = new IR(kTableRefAtomic, OP0(), res); CASEEND SWITCHEND TRANSLATEEND } IR *NonjoinTableRefAtomic::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = SAFETRANSLATE(table_ref_name_); res = new IR(kNonjoinTableRefAtomic, OP0(), res); CASEEND CASESTART(1) res = SAFETRANSLATE(select_statement_); IR *tmp1 = SAFETRANSLATE(opt_table_alias_); res = new IR(kNonjoinTableRefAtomic, OP2("(", ")"), res, tmp1); CASEEND SWITCHEND TRANSLATEEND } IR *TableRefName::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp1 = SAFETRANSLATE(table_name_); auto tmp2 = SAFETRANSLATE(opt_table_alias_); res = new IR(kTableRefName, OP0(), tmp1, tmp2); TRANSLATEEND } IR *TableRefNameNoAlias::translate(vector &v_ir_collector) { TRANSLATESTART res = SAFETRANSLATE(table_name_); res = new IR(kTableRefNameNoAlias, OP0(), res); TRANSLATEEND } IR *TableAlias::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = SAFETRANSLATE(alias_); res = new IR(kTableAlias, OP0(), res); CASEEND CASESTART(1) IR *id = SAFETRANSLATE(id_); IR *tmp = SAFETRANSLATE(ident_comma_list_); res = new IR(kTableAlias, OP3("AS", "(", ")"), id, tmp); CASEEND SWITCHEND TRANSLATEEND } IR *OptTableAlias::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = SAFETRANSLATE(table_alias_); res = new IR(kOptTableAlias, OP0(), res); CASEEND CASESTART(1) res = new IR(kOptTableAlias, ""); CASEEND SWITCHEND TRANSLATEEND } IR *Alias::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = SAFETRANSLATE(id_); res = new IR(kAlias, OPSTART("AS"), res); CASEEND CASESTART(1) res = SAFETRANSLATE(id_); res = new IR(kAlias, OP0(), res); CASEEND SWITCHEND TRANSLATEEND } IR *OptAlias::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = SAFETRANSLATE(alias_); res = new IR(kOptAlias, OP0(), res); CASEEND CASESTART(1) res = new IR(kOptAlias, ""); CASEEND SWITCHEND TRANSLATEEND } IR *WithClause::translate(vector &v_ir_collector) { TRANSLATESTART res = SAFETRANSLATE(with_description_list_); res = new IR(kWithClause, OPSTART("WITH"), res); TRANSLATEEND } IR *OptWithClause::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = SAFETRANSLATE(with_clause_); res = new IR(kOptWithClause, OP0(), res); CASEEND CASESTART(1) res = new IR(kOptWithClause, ""); CASEEND SWITCHEND TRANSLATEEND } IR *WithDescriptionList::translate(vector &v_ir_collector) { TRANSLATESTART TRANSLATELIST(kWithDescriptionList, v_with_description_list_, ","); TRANSLATEENDNOPUSH } IR *WithDescription::translate(vector &v_ir_collector) { TRANSLATESTART IR *id = SAFETRANSLATE(id_); IR *tmp = SAFETRANSLATE(select_with_paren_); res = new IR(kWithDescription, OPMID("AS"), id, tmp); TRANSLATEEND } IR *JoinClause::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) IR *tmp = SAFETRANSLATE(table_ref_atomic1_); IR *tmp2 = SAFETRANSLATE(nonjoin_table_ref_atomic_); res = new IR(kJoinClause, OPMID("NATURAL JOIN"), tmp, tmp2); CASEEND CASESTART(1) IR *tmp = SAFETRANSLATE(table_ref_atomic1_); IR *tmp2 = SAFETRANSLATE(opt_join_type_); res = new IR(kUnknown, OP0(), tmp, tmp2); PUSH(res); IR *tmp3 = SAFETRANSLATE(table_ref_atomic2_); res = new IR(kUnknown, OPMID("JOIN"), res, tmp3); PUSH(res); IR *tmp4 = SAFETRANSLATE(join_condition_); res = new IR(kJoinClause, OPMID("ON"), res, tmp4); CASEEND CASESTART(2) IR *tmp = SAFETRANSLATE(table_ref_atomic1_); IR *tmp2 = SAFETRANSLATE(opt_join_type_); res = new IR(kUnknown, OP0(), tmp, tmp2); PUSH(res); IR *tmp3 = SAFETRANSLATE(table_ref_atomic2_); res = new IR(kUnknown, OPMID("JOIN"), res, tmp3); PUSH(res); IR *tmp4 = SAFETRANSLATE(column_name_); IR *tmp5 = new IR(kUnknown, OP3("(", "", ")"), tmp4); PUSH(res); res = new IR(kJoinClause, OP3("", "USING", ""), res, tmp5); CASEEND CASESTART(3) IR *tmp = SAFETRANSLATE(table_ref_atomic1_); IR *tmp2 = SAFETRANSLATE(opt_join_type_); res = new IR(kUnknown, OP0(), tmp, tmp2); PUSH(res); IR *tmp3 = SAFETRANSLATE(table_ref_atomic2_); res = new IR(kJoinClause, OPMID("JOIN"), res, tmp3); CASEEND SWITCHEND TRANSLATEEND } IR *OptJoinType::translate(vector &v_ir_collector) { TRANSLATESTART res = new IR(kOptJoinType, str_val_); TRANSLATEEND } IR *JoinCondition::translate(vector &v_ir_collector) { TRANSLATESTART res = SAFETRANSLATE(expr_); res = new IR(kJoinCondition, OP0(), res); TRANSLATEEND } IR *OptSemicolon::translate(vector &v_ir_collector) { TRANSLATESTART res = new IR(kOptSemicolon, str_val_); TRANSLATEEND } IR *IdentCommaList::translate(vector &v_ir_collector) { TRANSLATESTART TRANSLATELIST(kIdentCommaList, v_iden_comma_list_, ",") TRANSLATEENDNOPUSH } void Opt::deep_delete() { delete this; } void OptString::deep_delete() { delete this; } void Program::deep_delete() { SAFEDELETE(statement_list_); SAFEDELETE(opt_semicolon_); delete this; } void StatementList::deep_delete() { SAFEDELETELIST(v_statement_list_); delete this; } void Statement::deep_delete() { SAFEDELETE(optional_hints_); SAFEDELETE(preparable_statement_); SAFEDELETE(prepare_statement_); SAFEDELETE(show_statement_); SAFEDELETE(cmd_); delete this; } void OptionalHints::deep_delete() { SAFEDELETE(hint_list_); delete this; } void PrepareStatement::deep_delete() { SAFEDELETE(id_); SAFEDELETE(prep_target_que_); delete this; } void PreparableStatement::deep_delete() { delete this; } void ShowStatement::deep_delete() { SAFEDELETE(table_name_); delete this; } void Hint::deep_delete() { SAFEDELETE(literal_list_); SAFEDELETE(id_); delete this; } void HintList::deep_delete() { SAFEDELETELIST(v_hint_list_); delete this; } void PrepareTargetQuery::deep_delete() { delete this; } void SelectStatement::deep_delete() { SAFEDELETE(opt_with_clause_); SAFEDELETE(select_with_paren_); SAFEDELETE(select_no_paren_); SAFEDELETE(set_operator_); SAFEDELETE(select_paren_or_clause_); SAFEDELETE(opt_order_); SAFEDELETE(opt_limit_); delete this; } void ImportStatement::deep_delete() { SAFEDELETE(import_file_type_); SAFEDELETE(file_path_); SAFEDELETE(table_name_); delete this; } void CreateStatement::deep_delete() { SAFEDELETE(opt_not_exists_); SAFEDELETE(table_name_); SAFEDELETE(file_path_); SAFEDELETE(column_def_comma_list_); SAFEDELETE(select_statement_); SAFEDELETE(opt_column_list_); SAFEDELETE(opt_unique_); SAFEDELETE(index_name_); SAFEDELETE(ident_commalist_); SAFEDELETE(opt_where_); SAFEDELETE(module_name_); SAFEDELETE(trigger_declare_); SAFEDELETE(trigger_cmd_list_); delete this; } void InsertStatement::deep_delete() { SAFEDELETE(insert_type_); SAFEDELETE(table_name_); SAFEDELETE(opt_column_list_); SAFEDELETE(super_list_); SAFEDELETE(select_no_paren_); SAFEDELETE(opt_upsert_clause_); delete this; } void DeleteStatement::deep_delete() { SAFEDELETE(table_name_); SAFEDELETE(opt_where_); delete this; } void UpdateStatement::deep_delete() { SAFEDELETE(table_ref_name_no_alias_); SAFEDELETE(update_clause_comma_list_); SAFEDELETE(opt_where_); delete this; } void DropStatement::deep_delete() { SAFEDELETE(opt_exists_); SAFEDELETE(table_name_); SAFEDELETE(id_); SAFEDELETE(schema_name_); SAFEDELETE(trigger_name_); delete this; } void ExecuteStatement::deep_delete() { SAFEDELETE(id_); SAFEDELETE(opt_literal_list_); delete this; } void ImportFileType::deep_delete() { delete this; } void FilePath::deep_delete() { delete this; } void OptNotExists::deep_delete() { delete this; } void ColumnDefCommaList::deep_delete() { SAFEDELETELIST(v_column_def_comma_list_); delete this; } void ColumnDef::deep_delete() { SAFEDELETE(id_); SAFEDELETE(column_type_); SAFEDELETE(opt_column_arglist_); delete this; } void ColumnType::deep_delete() { delete this; } void OptColumnNullable::deep_delete() { delete this; } void OptExists::deep_delete() { delete this; } void OptColumnList::deep_delete() { SAFEDELETE(ident_comma_list_); delete this; } void UpdateClauseCommalist::deep_delete() { SAFEDELETELIST(v_update_clause_list_); delete this; } void UpdateClause::deep_delete() { SAFEDELETE(id_); SAFEDELETE(expr_); delete this; } void SelectWithParen::deep_delete() { SAFEDELETE(select_no_paren_); SAFEDELETE(select_with_paren_); delete this; } void SelectParenOrClause::deep_delete() { SAFEDELETE(select_with_paren_); SAFEDELETE(select_clause_); delete this; } void SelectNoParen::deep_delete() { SAFEDELETE(select_clause_); SAFEDELETE(opt_order_); SAFEDELETE(opt_limit_); SAFEDELETE(set_operator_); SAFEDELETE(select_paren_or_clause_); delete this; } void SetOperator::deep_delete() { SAFEDELETE(set_type_); SAFEDELETE(opt_all_); delete this; } void SetType::deep_delete() { delete this; } void OptAll::deep_delete() { delete this; } void SelectClause::deep_delete() { SAFEDELETE(opt_top_); SAFEDELETE(opt_distinct_); SAFEDELETE(select_list_); SAFEDELETE(opt_from_clause_); SAFEDELETE(opt_where_); SAFEDELETE(opt_group_); SAFEDELETE(window_clause_); delete this; } void OptDistinct::deep_delete() { delete this; } void SelectList::deep_delete() { SAFEDELETE(expr_list_); delete this; } void FromClause::deep_delete() { SAFEDELETE(table_ref_); delete this; } void OptFromClause::deep_delete() { SAFEDELETE(from_clause_); delete this; } void OptWhere::deep_delete() { SAFEDELETE(expr_); delete this; } void OptGroup::deep_delete() { SAFEDELETE(expr_list_); SAFEDELETE(opt_having_); delete this; } void OptHaving::deep_delete() { SAFEDELETE(expr_); delete this; } void OptOrder::deep_delete() { SAFEDELETE(order_list_); delete this; } void OrderList::deep_delete() { SAFEDELETELIST(v_order_desc_); delete this; } void OrderDesc::deep_delete() { SAFEDELETE(expr_); SAFEDELETE(opt_order_type_); SAFEDELETE(opt_null_); delete this; } void OptOrderType::deep_delete() { delete this; } void OptTop::deep_delete() { SAFEDELETE(int_literal_); delete this; } void OptLimit::deep_delete() { SAFEDELETE(expr1_); SAFEDELETE(expr2_); delete this; } void ExprList::deep_delete() { SAFEDELETELIST(v_expr_list_); delete this; } void LiteralList::deep_delete() { SAFEDELETELIST(v_literal_list_); delete this; } void OptLiteralList::deep_delete() { SAFEDELETE(literal_list_); delete this; } void Alias::deep_delete() { SAFEDELETE(id_); delete this; } void Expr::deep_delete() { delete this; } void ExprAlias::deep_delete() { SAFEDELETE(expr_); SAFEDELETE(opt_alias_); delete this; } void Operand::deep_delete() { SAFEDELETE(expr_); SAFEDELETE(select_no_paren_); delete this; } void BetweenExpr::deep_delete() { SAFEDELETE(operand1_); SAFEDELETE(operand2_); SAFEDELETE(operand3_); delete this; } void LogicExpr::deep_delete() { SAFEDELETE(expr1_); SAFEDELETE(expr2_); delete this; } void ExistsExpr::deep_delete() { SAFEDELETE(select_no_paren_); delete this; } void InExpr::deep_delete() { SAFEDELETE(operand_); SAFEDELETE(expr_list_); SAFEDELETE(select_no_paren_); delete this; } void ArrayIndex::deep_delete() { SAFEDELETE(int_literal_); SAFEDELETE(operand_); delete this; } void ScalarExpr::deep_delete() { SAFEDELETE(column_name_); SAFEDELETE(literal_); delete this; } void UnaryExpr::deep_delete() { SAFEDELETE(operand_); delete this; } void BinaryExpr::deep_delete() { SAFEDELETE(operand2_); SAFEDELETE(operand1_); SAFEDELETE(comp_expr_); delete this; } void CompExpr::deep_delete() { SAFEDELETE(operand2_); SAFEDELETE(operand1_); delete this; } void CaseExpr::deep_delete() { SAFEDELETE(case_expr_); SAFEDELETE(else_expr_); SAFEDELETE(case_list_); delete this; } void FunctionExpr::deep_delete() { SAFEDELETE(id_); SAFEDELETE(opt_distinct_); SAFEDELETE(expr_list_); SAFEDELETE(opt_filter_clause_); SAFEDELETE(opt_over_clause_); delete this; } void ExtractExpr::deep_delete() { SAFEDELETE(datetime_field_); SAFEDELETE(expr_); delete this; } void ArrayExpr::deep_delete() { SAFEDELETE(expr_list_); delete this; } void CaseClause::deep_delete() { SAFEDELETE(when_expr_); SAFEDELETE(then_expr_); delete this; } void CaseList::deep_delete() { SAFEDELETELIST(v_case_list_); delete this; } void DatetimeField::deep_delete() { delete this; } void ColumnName::deep_delete() { SAFEDELETE(identifier1_); SAFEDELETE(identifier2_); delete this; } void Literal::deep_delete() { delete this; } void StringLiteral::deep_delete() { delete this; } void BoolLiteral::deep_delete() { delete this; } void NumLiteral::deep_delete() { SAFEDELETE(int_literal_); delete this; } void IntLiteral::deep_delete() { delete this; } void NullLiteral::deep_delete() { delete this; } void ParamExpr::deep_delete() { delete this; } void Identifier::deep_delete() { delete this; } void TableRefCommaList::deep_delete() { SAFEDELETELIST(v_table_ref_comma_list_); delete this; } void TableRefAtomic::deep_delete() { SAFEDELETE(nonjoin_table_ref_atomic_); SAFEDELETE(join_clause_); delete this; } void NonjoinTableRefAtomic::deep_delete() { SAFEDELETE(table_ref_name_); SAFEDELETE(select_statement_); SAFEDELETE(opt_table_alias_); delete this; } void TableRefName::deep_delete() { SAFEDELETE(table_name_); SAFEDELETE(opt_table_alias_); delete this; } void TableRefNameNoAlias::deep_delete() { SAFEDELETE(table_name_); delete this; } void TableName::deep_delete() { SAFEDELETE(table_name_); SAFEDELETE(database_name_); delete this; } void TableAlias::deep_delete() { SAFEDELETE(alias_); SAFEDELETE(ident_comma_list_); SAFEDELETE(id_); delete this; } void OptTableAlias::deep_delete() { SAFEDELETE(table_alias_); delete this; } void OptAlias::deep_delete() { SAFEDELETE(alias_); delete this; } void WithClause::deep_delete() { SAFEDELETE(with_description_list_); delete this; } void OptWithClause::deep_delete() { SAFEDELETE(with_clause_); delete this; } void WithDescriptionList::deep_delete() { SAFEDELETELIST(v_with_description_list_); delete this; } void WithDescription::deep_delete() { SAFEDELETE(select_with_paren_); SAFEDELETE(id_); delete this; } void JoinClause::deep_delete() { SAFEDELETE(table_ref_atomic1_); SAFEDELETE(nonjoin_table_ref_atomic_); SAFEDELETE(opt_join_type_); SAFEDELETE(table_ref_atomic2_); SAFEDELETE(column_name_); SAFEDELETE(join_condition_); delete this; } void OptJoinType::deep_delete() { delete this; } void JoinCondition::deep_delete() { SAFEDELETE(expr_); delete this; } void OptSemicolon::deep_delete() { delete this; } void IdentCommaList::deep_delete() { SAFEDELETELIST(v_iden_comma_list_); delete this; } void Cmd::deep_delete() { delete this; } IR *Cmd::translate(vector &v_ir_collector) { return NULL; } void CmdAttach::deep_delete() { SAFEDELETE(expr_); SAFEDELETE(schema_name_); delete this; } IR *CmdAttach::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = SAFETRANSLATE(expr_); auto tmp = SAFETRANSLATE(schema_name_); res = new IR(kCmdAttach, OP2("ATTACH", "AS"), res, tmp); CASEEND CASESTART(1) res = SAFETRANSLATE(expr_); auto tmp = SAFETRANSLATE(schema_name_); res = new IR(kCmdAttach, OP2("ATTACH DATABASE", "AS"), res, tmp); CASEEND SWITCHEND TRANSLATEEND } IR *CmdReindex::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kCmdReindex, "REINDEX"); CASEEND CASESTART(1) res = SAFETRANSLATE(table_name_); res = new IR(kCmdReindex, OP1("REINDEX"), res); CASEEND SWITCHEND TRANSLATEEND } void CmdReindex::deep_delete() { SAFEDELETE(table_name_); delete this; } void CmdDetach::deep_delete() { SAFEDELETE(schema_name_); delete this; } IR *CmdDetach::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = SAFETRANSLATE(schema_name_); res = new IR(kCmdDetach, OP1("DETACH"), res); CASEEND CASESTART(1) res = SAFETRANSLATE(schema_name_); res = new IR(kCmdDetach, OP1("DETACH DATABASE"), res); CASEEND SWITCHEND TRANSLATEEND } void CmdAnalyze::deep_delete() { SAFEDELETE(table_name_); delete this; } IR *CmdAnalyze::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kCmdAnalyze, string("ANALYZE")); CASEEND CASESTART(1) res = SAFETRANSLATE(table_name_); res = new IR(kCmdAnalyze, OP1("ANALYZE"), res); CASEEND SWITCHEND TRANSLATEEND } void CmdPragma::deep_delete() { SAFEDELETE(pragma_key_); SAFEDELETE(pragma_value_); SAFEDELETE(table_name_); delete this; } IR *CmdPragma::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto pk = SAFETRANSLATE(pragma_key_); res = new IR(kCmdPragma, OPSTART("PRAGMA"), pk); CASEEND CASESTART(1) auto pk = SAFETRANSLATE(pragma_key_); auto pv = SAFETRANSLATE(pragma_value_); res = new IR(kCmdPragma, OP2("PRAGMA", "="), pk, pv); CASEEND CASESTART(2) auto pk = SAFETRANSLATE(pragma_key_); auto pv = SAFETRANSLATE(pragma_value_); res = new IR(kCmdPragma, OP3("PRAGMA", "(", ")"), pk, pv); CASEEND CASESTART(3) res = new IR(kCmdPragma, string("REINDEX")); CASEEND CASESTART(4) auto table_name = SAFETRANSLATE(table_name_); res = new IR(kCmdPragma, OPSTART("REINDEX"), table_name); CASEEND CASESTART(5) res = new IR(kCmdPragma, string("ANALYZE")); CASEEND CASESTART(6) auto table_name = SAFETRANSLATE(table_name_); res = new IR(kCmdPragma, OPSTART("ANALYZE"), table_name); CASEEND SWITCHEND TRANSLATEEND } void PragmaKey::deep_delete() { SAFEDELETE(pragma_name_); SAFEDELETE(schema_name_); delete this; } IR *PragmaKey::translate(vector &v_ir_collector) { TRANSLATESTART auto pn = SAFETRANSLATE(pragma_name_); SWITCHSTART CASESTART(0) res = new IR(kPragmaKey, OP0(), pn); CASEEND CASESTART(1) auto sn = SAFETRANSLATE(schema_name_); res = new IR(kPragmaKey, OPMID("."), sn, pn); CASEEND SWITCHEND TRANSLATEEND } void PragmaValue::deep_delete() { SAFEDELETE(num_literal_); SAFEDELETE(string_literal_); SAFEDELETE(id_); delete this; } IR *PragmaValue::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = SAFETRANSLATE(num_literal_); res = new IR(kPragmaValue, OP0(), res); CASEEND CASESTART(1) res = SAFETRANSLATE(string_literal_); res = new IR(kPragmaValue, OP0(), res); CASEEND CASESTART(2) res = SAFETRANSLATE(id_); res = new IR(kPragmaValue, OP0(), res); CASEEND SWITCHEND TRANSLATEEND } void PragmaName::deep_delete() { SAFEDELETE(id_); delete this; } IR *PragmaName::translate(vector &v_ir_collector) { TRANSLATESTART auto name = SAFETRANSLATE(id_); res = new IR(kPragmaName, OP0(), name); TRANSLATEEND } void SchemaName::deep_delete() { SAFEDELETE(id_); delete this; } IR *SchemaName::translate(vector &v_ir_collector) { TRANSLATESTART auto name = SAFETRANSLATE(id_); res = new IR(kSchemaName, OP0(), name); TRANSLATEEND } IR *OptColumnArglist::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp = SAFETRANSLATE(column_arglist_); res = new IR(kOptColumnArglist, OP0(), tmp); CASEEND CASESTART(1) res = new IR(kOptColumnArglist, ""); CASEEND SWITCHEND TRANSLATEEND } void OptColumnArglist::deep_delete() { SAFEDELETE(column_arglist_); delete this; } IR *ColumnArglist::translate(vector &v_ir_collector) { TRANSLATESTART TRANSLATELIST(kColumnArglist, v_column_arg_, " "); TRANSLATEENDNOPUSH } void ColumnArglist::deep_delete() { SAFEDELETELIST(v_column_arg_); delete this; } IR *ColumnArg::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = SAFETRANSLATE(opt_on_conflict_); res = new IR(kColumnArg, OP1("NULL"), res); CASEEND CASESTART(1) res = SAFETRANSLATE(opt_on_conflict_); res = new IR(kColumnArg, OP1("NOT NULL"), res); CASEEND CASESTART(2) auto tmp = SAFETRANSLATE(opt_order_type_); auto tmp1 = SAFETRANSLATE(opt_on_conflict_); res = new IR(kColumnArg, OP1("PRIMARY KEY"), tmp, tmp1); PUSH(res); tmp = SAFETRANSLATE(opt_autoinc_); res = new IR(kColumnArg, OP0(), res, tmp); CASEEND CASESTART(3) res = SAFETRANSLATE(opt_on_conflict_); res = new IR(kColumnArg, OP1("UNIQUE"), res); CASEEND CASESTART(4) res = SAFETRANSLATE(expr_); res = new IR(kColumnArg, OP2("GENERATED ALWAYS AS(", ")"), res); CASEEND CASESTART(5) res = SAFETRANSLATE(expr_); res = new IR(kColumnArg, OP2("AS(", ")"), res); CASEEND CASESTART(6) res = SAFETRANSLATE(expr_); res = new IR(kColumnArg, OP2("CHECK(", ")"), res); CASEEND SWITCHEND TRANSLATEEND } void ColumnArg::deep_delete() { SAFEDELETE(opt_on_conflict_); SAFEDELETE(opt_order_type_); SAFEDELETE(opt_autoinc_); SAFEDELETE(expr_); delete this; } IR *OptOnConflict::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = SAFETRANSLATE(resolve_type_); res = new IR(kOptOnConflict, OP1("ON CONFLICT"), res); CASEEND CASESTART(1) res = new IR(kOptOnConflict, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptOnConflict::deep_delete() { SAFEDELETE(resolve_type_); delete this; } IR *ResolveType::translate(vector &v_ir_collector) { TRANSLATESTART res = new IR(kResolveType, str_val_); TRANSLATEEND } void ResolveType::deep_delete() { delete this; } IR *OptAutoinc::translate(vector &v_ir_collector) { TRANSLATESTART res = new IR(kOptAutoinc, str_val_); TRANSLATEEND } void OptAutoinc::deep_delete() { delete this; } IR *OptUnique::translate(vector &v_ir_collector) { TRANSLATESTART res = new IR(kOptUnique, str_val_); TRANSLATEEND } void OptUnique::deep_delete() { delete this; } IR *IndexName::translate(vector &v_ir_collector) { TRANSLATESTART res = SAFETRANSLATE(id_); res = new IR(kIndexName, OP0(), res); TRANSLATEEND } void IndexName::deep_delete() { SAFEDELETE(id_); delete this; } IR *TriggerDeclare::translate(vector &v_ir_collector) { TRANSLATESTART res = SAFETRANSLATE(opt_tmp_); auto tmp = SAFETRANSLATE(opt_not_exists_); res = new IR(kUnknown, OPMID("TRIGGER"), res, tmp); PUSH(res); tmp = SAFETRANSLATE(trigger_name_); res = new IR(kUnknown, OP0(), res, tmp); PUSH(res); tmp = SAFETRANSLATE(opt_trigger_time_); res = new IR(kUnknown, OP0(), res, tmp); PUSH(res); tmp = SAFETRANSLATE(trigger_event_); res = new IR(kUnknown, OP0(), res, tmp); PUSH(res); tmp = SAFETRANSLATE(table_name_); res = new IR(kTriggerDeclare, OPMID("ON"), res, tmp); PUSH(res); tmp = SAFETRANSLATE(opt_for_each_); res = new IR(kTriggerDeclare, OP0(), res, tmp); PUSH(res); tmp = SAFETRANSLATE(opt_when_); res = new IR(kTriggerDeclare, OP0(), res, tmp); TRANSLATEEND } void TriggerDeclare::deep_delete() { SAFEDELETE(opt_tmp_); SAFEDELETE(opt_not_exists_); SAFEDELETE(trigger_name_); SAFEDELETE(opt_trigger_time_); SAFEDELETE(trigger_event_); SAFEDELETE(table_name_); SAFEDELETE(opt_for_each_); SAFEDELETE(opt_when_); delete this; } IR *OptTmp::translate(vector &v_ir_collector) { TRANSLATESTART res = new IR(kOptTmp, str_val_); TRANSLATEEND } void OptTmp::deep_delete() { delete this; } IR *TriggerName::translate(vector &v_ir_collector) { TRANSLATESTART res = SAFETRANSLATE(id_); res = new IR(kTriggerName, OP0(), res); TRANSLATEEND } void TriggerName::deep_delete() { SAFEDELETE(id_); delete this; } IR *OptTriggerTime::translate(vector &v_ir_collector) { TRANSLATESTART res = new IR(kOptTriggerTime, str_val_); TRANSLATEEND } void OptTriggerTime::deep_delete() { delete this; } IR *TriggerEvent::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kTriggerEvent, string("DELETE")); CASEEND CASESTART(1) res = new IR(kTriggerEvent, string("INSERT")); CASEEND CASESTART(2) res = SAFETRANSLATE(opt_of_column_list_); res = new IR(kTriggerEvent, OP1("UPDATE"), res); CASEEND SWITCHEND TRANSLATEEND } void TriggerEvent::deep_delete() { SAFEDELETE(opt_of_column_list_); delete this; } IR *OptOfColumnList::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = SAFETRANSLATE(ident_commalist_); res = new IR(kOptOfColumnList, OP1("OF"), res); CASEEND CASESTART(1) res = new IR(kOptOfColumnList, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptOfColumnList::deep_delete() { SAFEDELETE(ident_commalist_); delete this; } IR *OptForEach::translate(vector &v_ir_collector) { TRANSLATESTART res = new IR(kOptForEach, str_val_); TRANSLATEEND } void OptForEach::deep_delete() { delete this; } IR *OptWhen::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = SAFETRANSLATE(expr_); res = new IR(kOptWhen, OP1("WHEN"), res); CASEEND CASESTART(1) res = new IR(kOptWhen, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptWhen::deep_delete() { SAFEDELETE(expr_); delete this; } IR *TriggerCmdList::translate(vector &v_ir_collector) { TRANSLATESTART TRANSLATELIST(kTriggerCmdList, v_trigger_cmd_list_, ";"); res->op_->suffix_ = ";"; TRANSLATEENDNOPUSH } void TriggerCmdList::deep_delete() { SAFEDELETELIST(v_trigger_cmd_list_); delete this; } IR *TriggerCmd::translate(vector &v_ir_collector) { TRANSLATESTART res = SAFETRANSLATE(stmt_); TRANSLATEEND } void TriggerCmd::deep_delete() { SAFEDELETE(stmt_); delete this; } IR *ModuleName::translate(vector &v_ir_collector) { TRANSLATESTART res = SAFETRANSLATE(id_); res = new IR(kModuleName, OP0(), res); TRANSLATEEND } void ModuleName::deep_delete() { SAFEDELETE(id_); delete this; } IR *OptOverClause::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = SAFETRANSLATE(window_); res = new IR(kOptOverClause, OP2("OVER(", ")"), res); CASEEND CASESTART(1) res = SAFETRANSLATE(id_); res = new IR(kOptOverClause, OP1("OVER"), res); CASEEND CASESTART(2) res = new IR(kOptOverClause, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptOverClause::deep_delete() { SAFEDELETE(window_); SAFEDELETE(id_); delete this; } IR *OptFilterClause::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = SAFETRANSLATE(expr_); res = new IR(kOptFilterClause, OP2("FILTER( WHEN", ")"), res); CASEEND CASESTART(1) res = new IR(kOptFilterClause, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptFilterClause::deep_delete() { SAFEDELETE(expr_); delete this; } IR *WindowClause::translate(vector &v_ir_collector) { TRANSLATESTART TRANSLATEEND } void WindowClause::deep_delete() { SAFEDELETE(windowdefn_list_); delete this; } IR *WindowDefnList::translate(vector &v_ir_collector) { TRANSLATESTART TRANSLATELIST(kWindowDefnList, v_windowdefn_list_, ","); TRANSLATEENDNOPUSH } void WindowDefnList::deep_delete() { SAFEDELETELIST(v_windowdefn_list_); delete this; } IR *WindowDefn::translate(vector &v_ir_collector) { TRANSLATESTART auto id_ir = SAFETRANSLATE(id_); auto win_ir = SAFETRANSLATE(window_); auto tmp_ir = new IR(kUnknown, OP2("(", ")"), win_ir); PUSH(tmp_ir); res = new IR(kWindowDefn, OPMID("AS"), id_ir, tmp_ir); TRANSLATEEND } void WindowDefn::deep_delete() { SAFEDELETE(id_); SAFEDELETE(window_); delete this; } IR *Window::translate(vector &v_ir_collector) { TRANSLATESTART auto windowname = SAFETRANSLATE(opt_base_window_name_); auto opt_order = SAFETRANSLATE(opt_order_); auto opt_frame = SAFETRANSLATE(opt_frame_); SWITCHSTART CASESTART(0) auto expr_list = SAFETRANSLATE(expr_list_); auto tmp = new IR(kUnknown, OPMID("PARTITION BY"), windowname, expr_list); PUSH(tmp); tmp = new IR(kUnknown, OP0(), tmp, opt_order); PUSH(tmp); res = new IR(kWindow, OP0(), tmp, opt_frame); CASEEND CASESTART(1) auto tmp = new IR(kUnknown, OP0(), windowname, opt_order); PUSH(tmp); res = new IR(kWindow, OP0(), tmp, opt_frame); CASEEND SWITCHEND TRANSLATEEND } void Window::deep_delete() { SAFEDELETE(opt_base_window_name_); SAFEDELETE(expr_list_); SAFEDELETE(opt_order_); SAFEDELETE(opt_frame_); delete this; } IR *OptBaseWindowName::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = SAFETRANSLATE(id_); res = new IR(kOptBaseWindowName, OP0(), res); CASEEND CASESTART(1) res = new IR(kOptBaseWindowName, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptBaseWindowName::deep_delete() { SAFEDELETE(id_); delete this; } IR *OptFrame::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto range_or_row = SAFETRANSLATE(range_or_rows_); auto frame_bound_s = SAFETRANSLATE(frame_bound_s_); auto opt_frame_exclude = SAFETRANSLATE(opt_frame_exclude_); res = new IR(kUnknown, OP0(), range_or_row, frame_bound_s); PUSH(res); res = new IR(kOptFrame, OP0(), res, opt_frame_exclude); CASEEND CASESTART(1) auto range_or_row = SAFETRANSLATE(range_or_rows_); auto frame_bound_s = SAFETRANSLATE(frame_bound_s_); auto opt_frame_exclude = SAFETRANSLATE(opt_frame_exclude_); res = SAFETRANSLATE(frame_bound_e_); res = new IR(kUnknown, OP2("BEWTEEN", "AND"), frame_bound_s, res); PUSH(res); res = new IR(kUnknown, OP0(), range_or_row, res); PUSH(res); res = new IR(kOptFrame, OP0(), res, opt_frame_exclude); CASEEND CASESTART(2) res = new IR(kOptFrame, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptFrame::deep_delete() { SAFEDELETE(range_or_rows_); SAFEDELETE(frame_bound_e_); SAFEDELETE(frame_bound_s_); SAFEDELETE(opt_frame_exclude_); delete this; } IR *RangeOrRows::translate(vector &v_ir_collector) { TRANSLATESTART res = new IR(kRangeOrRows, str_val_); TRANSLATEEND } void RangeOrRows::deep_delete() { delete this; } IR *FrameBoundS::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = SAFETRANSLATE(frame_bound_); res = new IR(kFrameBoundS, OP0(), res); CASEEND CASESTART(1) res = new IR(kFrameBoundS, string("UNBOUNDED PRECEDING")); CASEEND SWITCHEND TRANSLATEEND } void FrameBoundS::deep_delete() { SAFEDELETE(frame_bound_); delete this; } IR *FrameBoundE::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = SAFETRANSLATE(frame_bound_); res = new IR(kFrameBoundE, OP0(), res); CASEEND CASESTART(1) res = new IR(kFrameBoundE, string("UNBOUNDED FOLLOWING")); CASEEND SWITCHEND TRANSLATEEND } void FrameBoundE::deep_delete() { SAFEDELETE(frame_bound_); delete this; } IR *FrameBound::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = SAFETRANSLATE(expr_); res = new IR(kFrameBound, OPEND("PRECEDING"), res); CASEEND CASESTART(1) res = SAFETRANSLATE(expr_); res = new IR(kFrameBound, OPEND("FOLLOWING"), res); CASEEND CASESTART(2) res = new IR(kFrameBound, OP1("CURRENT ROW")); CASEEND SWITCHEND TRANSLATEEND } void FrameBound::deep_delete() { SAFEDELETE(expr_); delete this; } IR *OptFrameExclude::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = SAFETRANSLATE(frame_exclude_); res = new IR(kOptFrameExclude, OP1("EXCLUDE"), res); CASEEND CASESTART(1) res = new IR(kOptFrameExclude, string("")); CASEEND SWITCHEND TRANSLATEEND } void OptFrameExclude::deep_delete() { SAFEDELETE(frame_exclude_); delete this; } IR *FrameExclude::translate(vector &v_ir_collector) { TRANSLATESTART res = new IR(kFrameExclude, str_val_); TRANSLATEEND } void FrameExclude::deep_delete() { delete this; } IR *SuperList::translate(vector &v_ir_collector) { TRANSLATESTART res = SAFETRANSLATE(v_super_list_[0]); res = new IR(kSuperList, OP2("(", ")"), res); PUSH(res); for (int i = 1; i < v_super_list_.size(); i++) { auto tmp = SAFETRANSLATE(v_super_list_[i]); res = new IR(kSuperList, OP3("", ",(", ")"), res, tmp); PUSH(res); } TRANSLATEENDNOPUSH } void SuperList::deep_delete() { SAFEDELETELIST(v_super_list_); delete this; } IR *TableRef::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(table_prefix_); auto tmp2 = SAFETRANSLATE(table_name_); res = new IR(kTableRef, OP0(), tmp1, tmp2); PUSH(res); auto tmp3 = SAFETRANSLATE(opt_alias_); res = new IR(kTableRef, OP0(), res, tmp3); PUSH(res); auto tmp4 = SAFETRANSLATE(opt_index_); res = new IR(kTableRef, OP0(), res, tmp4); PUSH(res); auto tmp5 = SAFETRANSLATE(opt_on_); res = new IR(kTableRef, OP0(), res, tmp5); PUSH(res); auto tmp6 = SAFETRANSLATE(opt_using_); res = new IR(kTableRef, OP0(), res, tmp6); CASEEND CASESTART(1) auto tmp1 = SAFETRANSLATE(table_prefix_); auto tmp2 = SAFETRANSLATE(table_name_); res = new IR(kUnknown, OP0(), tmp1, tmp2); PUSH(res); auto tmp3 = SAFETRANSLATE(expr_list_); res = new IR(kTableRef, OP0(), res, tmp3); PUSH(res); auto tmp4 = SAFETRANSLATE(opt_alias_); res = new IR(kTableRef, OP0(), res, tmp4); PUSH(res); auto tmp5 = SAFETRANSLATE(opt_on_); res = new IR(kTableRef, OP0(), res, tmp5); PUSH(res); auto tmp6 = SAFETRANSLATE(opt_using_); res = new IR(kTableRef, OP0(), res, tmp6); CASEEND CASESTART(2) auto tmp1 = SAFETRANSLATE(table_prefix_); auto tmp2 = SAFETRANSLATE(select_no_paren_); res = new IR(kTableRef, OP0(), tmp1, tmp2); PUSH(res); auto tmp3 = SAFETRANSLATE(opt_alias_); res = new IR(kTableRef, OP0(), res, tmp3); PUSH(res); auto tmp4 = SAFETRANSLATE(opt_on_); res = new IR(kTableRef, OP0(), res, tmp4); PUSH(res); auto tmp5 = SAFETRANSLATE(opt_using_); res = new IR(kTableRef, OP0(), res, tmp5); CASEEND CASESTART(3) auto tmp1 = SAFETRANSLATE(table_prefix_); auto tmp2 = SAFETRANSLATE(table_ref_); res = new IR(kTableRef, OP0(), tmp1, tmp2); PUSH(res); auto tmp3 = SAFETRANSLATE(opt_alias_); res = new IR(kTableRef, OP0(), res, tmp3); PUSH(res); auto tmp4 = SAFETRANSLATE(opt_on_); res = new IR(kTableRef, OP0(), res, tmp4); PUSH(res); auto tmp5 = SAFETRANSLATE(opt_using_); res = new IR(kTableRef, OP0(), res, tmp5); CASEEND SWITCHEND TRANSLATEEND } IR *TablePrefix::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp1 = SAFETRANSLATE(table_ref_); auto tmp2 = SAFETRANSLATE(join_op_); res = new IR(kTablePrefix, OP0(), tmp1, tmp2); CASEEND CASESTART(1) res = new IR(kTablePrefix, string("")); CASEEND SWITCHEND TRANSLATEEND } IR *JoinOp::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kJoinOp, string(",")); CASEEND CASESTART(1) res = new IR(kJoinOp, string("JOIN")); CASEEND CASESTART(2) auto tmp = SAFETRANSLATE(join_kw_); res = new IR(kJoinOp, OPEND("JOIN"), tmp); CASEEND CASESTART(3) auto tmp = SAFETRANSLATE(join_kw_); auto tmp2 = SAFETRANSLATE(id1_); res = new IR(kJoinOp, OPEND("JOIN"), tmp, tmp2); CASEEND CASESTART(4) auto tmp = SAFETRANSLATE(join_kw_); auto tmp1 = SAFETRANSLATE(id1_); auto tmp2 = SAFETRANSLATE(id2_); res = new IR(kUnknown, OP0(), tmp1, tmp2); PUSH(res); res = new IR(kJoinOp, OPEND("JOIN"), tmp, res); CASEEND SWITCHEND TRANSLATEEND } IR *OptIndex::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp = SAFETRANSLATE(column_name_); res = new IR(kOptIndex, OP1("INDEXED BY"), tmp); CASEEND CASESTART(1) res = new IR(kOptIndex, string("NOT INDEXED")); CASEEND CASESTART(2) res = new IR(kOptIndex, string("")); CASEEND SWITCHEND TRANSLATEEND } IR *OptOn::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp = SAFETRANSLATE(expr_); res = new IR(kOptOn, OP1("ON"), tmp); CASEEND CASESTART(1) res = new IR(kOptOn, string("")); CASEEND SWITCHEND TRANSLATEEND } IR *OptUsing::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp = SAFETRANSLATE(ident_commalist_); res = new IR(kOptUsing, OP3("USING", "(", ")"), NULL, tmp); CASEEND CASESTART(1) res = new IR(kOptUsing, string("")); CASEEND SWITCHEND TRANSLATEEND } IR *JoinKw::translate(vector &v_ir_collector) { TRANSLATESTART res = new IR(kJoinKw, str_val_); TRANSLATEEND } void TableRef::deep_delete() { SAFEDELETE(opt_on_); SAFEDELETE(opt_alias_); SAFEDELETE(expr_list_); SAFEDELETE(opt_using_); SAFEDELETE(table_name_); SAFEDELETE(table_prefix_); SAFEDELETE(table_ref_); SAFEDELETE(opt_index_); SAFEDELETE(select_no_paren_); delete this; } void TablePrefix::deep_delete() { SAFEDELETE(table_ref_); SAFEDELETE(join_op_); delete this; } void JoinOp::deep_delete() { SAFEDELETE(join_kw_); SAFEDELETE(id1_); SAFEDELETE(id2_); delete this; } void OptIndex::deep_delete() { SAFEDELETE(column_name_); delete this; } void OptOn::deep_delete() { SAFEDELETE(expr_); delete this; } void OptUsing::deep_delete() { SAFEDELETE(ident_commalist_); delete this; } void JoinKw::deep_delete() { delete this; } void CastExpr::deep_delete() { SAFEDELETE(column_type_); SAFEDELETE(expr_); delete this; } IR *CastExpr::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp0 = SAFETRANSLATE(expr_); auto tmp1 = SAFETRANSLATE(column_type_); res = new IR(kUnknown, OP3("CAST (", "AS", ")"), tmp0, tmp1); TRANSLATEEND } void AlterStatement::deep_delete() { SAFEDELETE(table_name1_); SAFEDELETE(table_name2_); SAFEDELETE(column_def_); SAFEDELETE(opt_column_); SAFEDELETE(column_name1_); SAFEDELETE(column_name2_); delete this; } IR *AlterStatement::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp0 = SAFETRANSLATE(table_name1_); auto tmp1 = SAFETRANSLATE(table_name2_); res = new IR(kAlterStatement, OP2("ALTER TABLE", "RENAME TO"), tmp0, tmp1); CASEEND CASESTART(1) auto tmp0 = SAFETRANSLATE(table_name1_); auto tmp1 = SAFETRANSLATE(opt_column_); auto tmp2 = SAFETRANSLATE(column_name1_); auto tmp3 = SAFETRANSLATE(column_name2_); res = new IR(kUnknown, OP2("ALTER TABLE", "RENAME"), tmp0, tmp1); PUSH(res); res = new IR(kUnknown, OP0(), res, tmp2); PUSH(res); res = new IR(kAlterStatement, OPMID("TO"), res, tmp3); CASEEND CASESTART(2) auto tmp0 = SAFETRANSLATE(table_name1_); auto tmp1 = SAFETRANSLATE(opt_column_); auto tmp2 = SAFETRANSLATE(column_def_); res = new IR(kUnknown, OP2("ALTER TABLE", "ADD"), tmp0, tmp1); PUSH(res); res = new IR(kAlterStatement, OP0(), res, tmp2); CASEEND SWITCHEND TRANSLATEEND } void OptColumn::deep_delete() { delete this; } IR *OptColumn::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kOptColumn, str_val_); CASEEND CASESTART(1) res = new IR(kOptColumn, str_val_); CASEEND SWITCHEND TRANSLATEEND } void CmdRelease::deep_delete() { SAFEDELETE(savepoint_name_); delete this; } IR *CmdRelease::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = SAFETRANSLATE(savepoint_name_); res = new IR(kCmdRelease, OP1("RELEASE SAVEPOINT"), res); CASEEND CASESTART(1) res = SAFETRANSLATE(savepoint_name_); res = new IR(kCmdRelease, OP1("RELEASE"), res); CASEEND SWITCHEND TRANSLATEEND } void SavepointName::deep_delete() { SAFEDELETE(id_); delete this; } IR *SavepointName::translate(vector &v_ir_collector) { TRANSLATESTART res = SAFETRANSLATE(id_); res = new IR(kSavepointName, OP0(), res); TRANSLATEEND } void VacuumStatement::deep_delete() { SAFEDELETE(opt_schema_name_); SAFEDELETE(file_path_); delete (this); } IR *VacuumStatement::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp0 = SAFETRANSLATE(opt_schema_name_); auto tmp1 = SAFETRANSLATE(file_path_); res = new IR(kVacuumStatement, OP2("VACUUM", "INTO"), tmp0, tmp1); CASEEND CASESTART(1) auto tmp0 = SAFETRANSLATE(opt_schema_name_); res = new IR(kVacuumStatement, OP1("VACUUM"), tmp0); CASEEND SWITCHEND TRANSLATEEND } void OptSchemaName::deep_delete() { SAFEDELETE(schema_name_); delete this; } IR *OptSchemaName::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp0 = SAFETRANSLATE(schema_name_); res = new IR(kOptSchemaName, OP0(), tmp0); CASEEND CASESTART(1) res = new IR(kOptSchemaName, string("")); CASEEND SWITCHEND TRANSLATEEND } void RollbackStatement::deep_delete() { SAFEDELETE(opt_transaction_); SAFEDELETE(opt_to_savepoint_); delete this; } IR *RollbackStatement::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp0 = SAFETRANSLATE(opt_transaction_); auto tmp1 = SAFETRANSLATE(opt_to_savepoint_); res = new IR(kRollbackStatement, OP1("ROLLBACK"), tmp0, tmp1); TRANSLATEEND } void OptTransaction::deep_delete() { delete this; } IR *OptTransaction::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kOptTransaction, str_val_); CASEEND CASESTART(1) res = new IR(kOptTransaction, str_val_); CASEEND SWITCHEND TRANSLATEEND } void OptToSavepoint::deep_delete() { SAFEDELETE(savepoint_name_); delete this; } IR *OptToSavepoint::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp0 = SAFETRANSLATE(savepoint_name_); res = new IR(kOptToSavepoint, OP1("TO"), tmp0); CASEEND CASESTART(1) auto tmp0 = SAFETRANSLATE(savepoint_name_); res = new IR(kOptToSavepoint, OP1("TO SAVEPOINT"), tmp0); CASEEND CASESTART(2) res = new IR(kOptToSavepoint, string("")); CASEEND SWITCHEND TRANSLATEEND } void BeginStatement::deep_delete() { SAFEDELETE(opt_transaction_); delete this; } IR *BeginStatement::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp0 = SAFETRANSLATE(opt_transaction_); res = new IR(kBeginStatement, OP1("BEGIN"), tmp0); CASEEND CASESTART(1) auto tmp0 = SAFETRANSLATE(opt_transaction_); res = new IR(kBeginStatement, OP1("BEGIN DEFFERED"), tmp0); CASEEND CASESTART(2) auto tmp0 = SAFETRANSLATE(opt_transaction_); res = new IR(kBeginStatement, OP1("BEGIN IMEDIATE"), tmp0); CASEEND CASESTART(3) auto tmp0 = SAFETRANSLATE(opt_transaction_); res = new IR(kBeginStatement, OP1("BEGIN EXCLUSIVE"), tmp0); CASEEND SWITCHEND TRANSLATEEND } void CommitStatement::deep_delete() { SAFEDELETE(opt_transaction_); delete this; } IR *CommitStatement::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp0 = SAFETRANSLATE(opt_transaction_); res = new IR(kCommitStatement, OP1("COMMIT"), tmp0); CASEEND CASESTART(1) auto tmp0 = SAFETRANSLATE(opt_transaction_); res = new IR(kCommitStatement, OP1("END"), tmp0); CASEEND SWITCHEND TRANSLATEEND } void UpsertClause::deep_delete() { SAFEDELETE(assign_list_); SAFEDELETE(indexed_column_list_); SAFEDELETE(opt_where1_); SAFEDELETE(opt_where2_); delete this; } IR *UpsertClause::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = new IR(kUpsertClause, OPSTART("ON CONFLICT DO NOTHING")); CASEEND CASESTART(1) auto tmp0 = SAFETRANSLATE(assign_list_); auto tmp1 = SAFETRANSLATE(opt_where1_); res = new IR(kUpsertClause, OP1("ON CONFLICT DO UPDATE SET"), tmp0, tmp1); CASEEND CASESTART(2) auto tmp0 = SAFETRANSLATE(indexed_column_list_); auto tmp1 = SAFETRANSLATE(opt_where1_); res = new IR(kUpsertClause, OP2("ON CONFLICT (", ")"), tmp0, tmp1); CASEEND CASESTART(3) auto tmp0 = SAFETRANSLATE(indexed_column_list_); auto tmp1 = SAFETRANSLATE(opt_where1_); auto tmp2 = SAFETRANSLATE(assign_list_); auto tmp3 = SAFETRANSLATE(opt_where2_); res = new IR(kUpsertClause, OP2("ON CONFLICT (", ")"), tmp0, tmp1); PUSH(res); res = new IR(kUpsertClause, OPMID("DO UPDATE SET"), res, tmp2); PUSH(res); res = new IR(kUpsertClause, OP0(), res, tmp3); CASEEND SWITCHEND TRANSLATEEND } void IndexedColumnList::deep_delete() { SAFEDELETELIST(v_indexed_column_list_); delete this; } IR *IndexedColumnList::translate(vector &v_ir_collector) { TRANSLATESTART TRANSLATELIST(kIndexedColumnList, v_indexed_column_list_, ",") TRANSLATEENDNOPUSH } void IndexedColumn::deep_delete() { SAFEDELETE(opt_collate_); SAFEDELETE(expr_); SAFEDELETE(opt_order_type_); delete this; } IR *IndexedColumn::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp0 = SAFETRANSLATE(expr_); auto tmp1 = SAFETRANSLATE(opt_collate_); auto tmp2 = SAFETRANSLATE(opt_order_type_); res = new IR(kIndexedColumn, OP0(), tmp0, tmp1); PUSH(res); res = new IR(kIndexedColumn, OP0(), res, tmp2); TRANSLATEEND } void OptCollate::deep_delete() { SAFEDELETE(collation_name_); delete this; } IR *OptCollate::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) auto tmp0 = SAFETRANSLATE(collation_name_); res = new IR(kOptCollate, OP1("COLLATE"), tmp0); CASEEND CASESTART(1) res = new IR(kOptCollate, str_val_); CASEEND SWITCHEND TRANSLATEEND } void AssignList::deep_delete() { SAFEDELETELIST(v_assign_list_); delete this; } IR *AssignList::translate(vector &v_ir_collector) { TRANSLATESTART TRANSLATELIST(kAssignList, v_assign_list_, ","); TRANSLATEENDNOPUSH } void OptNull::deep_delete() { delete this; } IR *OptNull::translate(vector &v_ir_collector) { TRANSLATESTART res = new IR(kOptNull, str_val_); TRANSLATEEND } void AssignClause::deep_delete() { SAFEDELETE(expr_); SAFEDELETE(column_name_list_); delete this; } IR *AssignClause::translate(vector &v_ir_collector) { TRANSLATESTART auto tmp0 = SAFETRANSLATE(column_name_list_); auto tmp1 = SAFETRANSLATE(expr_); res = new IR(kAssignClause, OP1("="), tmp0, tmp1); TRANSLATEEND } void ColumnNameList::deep_delete() { SAFEDELETELIST(v_column_name_list_); delete this; } IR *ColumnNameList::translate(vector &v_ir_collector) { TRANSLATESTART TRANSLATELIST(kColumnNameList, v_column_name_list_, ","); TRANSLATEENDNOPUSH } void CollationName::deep_delete() { SAFEDELETE(id_); delete this; } IR *CollationName::translate(vector &v_ir_collector) { TRANSLATESTART auto name = SAFETRANSLATE(id_); res = new IR(kCollationName, OP0(), name); TRANSLATEEND } void OptUpsertClause::deep_delete() { SAFEDELETE(upsert_clause_); delete this; } IR *OptUpsertClause::translate(vector &v_ir_collector) { TRANSLATESTART SWITCHSTART CASESTART(0) res = SAFETRANSLATE(upsert_clause_); res = new IR(kOptUpsertClause, OP0(), res); CASEEND CASESTART(1) res = new IR(kOptUpsertClause, string("")); CASEEND SWITCHEND TRANSLATEEND } ================================================ FILE: srcs/internal/sqlite/srcs/mutator.cpp ================================================ #include "../include/mutator.h" #include #include #include #include #include #include #include #include "../include/ast.h" #include "../include/define.h" #include "../include/utils.h" #define _NON_REPLACE_ using namespace std; vector Mutator::common_string_libary; vector Mutator::value_libary; map> Mutator::m_tables; vector Mutator::v_table_names; IR *Mutator::deep_copy_with_record(const IR *root, const IR *record) { IR *left = NULL, *right = NULL, *copy_res; if (root->left_) left = deep_copy_with_record( root->left_, record); // do you have a second version for deep_copy // that accept only one argument? if (root->right_) right = deep_copy_with_record(root->right_, record); // no I forget to update here if (root->op_ != NULL) copy_res = new IR( root->type_, OP3(root->op_->prefix_, root->op_->middle_, root->op_->suffix_), left, right, root->f_val_, root->str_val_, root->name_, root->mutated_times_); else copy_res = new IR(root->type_, NULL, left, right, root->f_val_, root->str_val_, root->name_, root->mutated_times_); copy_res->id_type_ = root->id_type_; if (root == record && record != NULL) { this->record_ = copy_res; } return copy_res; } bool Mutator::check_node_num(IR *root, unsigned int limit) { auto v_statements = extract_statement(root); bool is_good = true; if (v_statements.size() > 5) { is_good = false; } else for (auto stmt : v_statements) { if (calc_node(stmt) > limit) { is_good = false; break; } } return is_good; } vector Mutator::mutate_all(vector &v_ir_collector) { vector res; set res_hash; IR *root = v_ir_collector[v_ir_collector.size() - 1]; for (auto ir : v_ir_collector) { if (ir == root || ir->type_ == kProgram) continue; vector v_mutated_ir = mutate(ir); for (auto i : v_mutated_ir) { IR *new_ir_tree = deep_copy_with_record(root, ir); replace(new_ir_tree, this->record_, i); if (!check_node_num(new_ir_tree, 100)) { deep_delete(new_ir_tree); continue; } string tmp = extract_struct(new_ir_tree); unsigned tmp_hash = hash(tmp); if (res_hash.find(tmp_hash) != res_hash.end()) { deep_delete(new_ir_tree); continue; } res_hash.insert(tmp_hash); res.push_back(new_ir_tree); } } return res; } void Mutator::init(string f_testcase, string f_common_string, string pragma) { ifstream input_test(f_testcase); string line; // init lib from multiple sql while (getline(input_test, line)) { auto p = parser(line); if (p == NULL) continue; vector v_ir; auto res = p->translate(v_ir); p->deep_delete(); p = NULL; string strip_sql = extract_struct(res); deep_delete(res); p = parser(strip_sql); if (p == NULL) continue; res = p->translate(v_ir); p->deep_delete(); p = NULL; add_to_library(res); deep_delete(res); ; } // init utils::m_tables vector v_tmp = {"haha1", "haha2", "haha3"}; v_table_names.insert(v_table_names.end(), v_tmp.begin(), v_tmp.end()); m_tables["haha1"] = {"ducking_column0_1", "ducking_column1_1", "ducking_column2_1"}; m_tables["haha2"] = {"ducking_column0_2", "ducking_column1_2", "ducking_column2_2"}; m_tables["haha3"] = {"ducking_column0_3", "ducking_column1_3", "ducking_column2_3"}; // init value_libary vector value_lib_init = {0, (unsigned long)LONG_MAX, (unsigned long)ULONG_MAX, (unsigned long)CHAR_BIT, (unsigned long)SCHAR_MIN, (unsigned long)SCHAR_MAX, (unsigned long)UCHAR_MAX, (unsigned long)CHAR_MIN, (unsigned long)CHAR_MAX, (unsigned long)MB_LEN_MAX, (unsigned long)SHRT_MIN, (unsigned long)INT_MIN, (unsigned long)INT_MAX, (unsigned long)SCHAR_MIN, (unsigned long)SCHAR_MIN, (unsigned long)UINT_MAX, (unsigned long)FLT_MAX, (unsigned long)DBL_MAX, (unsigned long)LDBL_MAX, (unsigned long)FLT_MIN, (unsigned long)DBL_MIN, (unsigned long)LDBL_MIN}; value_libary.insert(value_libary.begin(), value_lib_init.begin(), value_lib_init.end()); // init common_string_libary common_string_libary.push_back("DO_NOT_BE_EMPTY"); if (f_common_string != "") { ifstream input_string(f_common_string); string s; while (getline(input_string, s)) { common_string_libary.push_back(s); } } string_libary.push_back("x"); string_libary.push_back("v0"); string_libary.push_back("v1"); ifstream input_pragma(pragma); assert(input_pragma.is_open()); string s; cout << "[duck]start init pragma" << endl; while (getline(input_pragma, s)) { if (s.empty()) continue; auto pos = s.find('='); if (pos == string::npos) continue; string k = s.substr(0, pos - 1); string v = s.substr(pos + 2); if (find(cmds_.begin(), cmds_.end(), k) == cmds_.end()) { cmds_.push_back(k); cout << "Pushing: " << s << std::endl; } m_cmd_value_lib_[k].push_back(v); } assert(!cmds_.empty()); relationmap[id_column_name] = id_top_table_name; relationmap[id_table_name] = id_top_table_name; relationmap[id_index_name] = id_top_table_name; relationmap[id_create_column_name] = id_create_table_name; relationmap[id_pragma_value] = id_pragma_name; cross_map[id_top_table_name] = id_create_table_name; return; } vector Mutator::mutate(IR *input) { vector res; if (!lucky_enough_to_be_mutated(input->mutated_times_)) { return res; // return a empty set if the IR is not mutated } res.push_back(strategy_delete(input)); res.push_back(strategy_insert(input)); res.push_back(strategy_replace(input)); // may do some simple filter for res, like removing some duplicated cases input->mutated_times_ += res.size(); for (auto i : res) { if (i == NULL) continue; i->mutated_times_ = input->mutated_times_; } return res; } bool Mutator::replace(IR *root, IR *old_ir, IR *new_ir) { auto parent_ir = locate_parent(root, old_ir); if (parent_ir == NULL) return false; if (parent_ir->left_ == old_ir) { deep_delete(old_ir); parent_ir->left_ = new_ir; return true; } else if (parent_ir->right_ == old_ir) { deep_delete(old_ir); parent_ir->right_ = new_ir; return true; } return false; } IR *Mutator::locate_parent(IR *root, IR *old_ir) { if (root->left_ == old_ir || root->right_ == old_ir) return root; if (root->left_ != NULL) if (auto res = locate_parent(root->left_, old_ir)) return res; if (root->right_ != NULL) if (auto res = locate_parent(root->right_, old_ir)) return res; return NULL; } string Mutator::validate(IR *root) { if (root == NULL) return ""; try { string sql_str = root->to_string(); auto parsed_ir = parser(sql_str); if (parsed_ir == NULL) return ""; parsed_ir->deep_delete(); reset_counter(); vector ordered_ir; auto graph = build_dependency_graph(root, relationmap, cross_map, ordered_ir); fix_graph(graph, root, ordered_ir); return fix(root); } catch (...) { // invalid sql , skip } return ""; } static void collect_ir(IR *root, set &type_to_fix, vector &ir_to_fix) { auto idtype = root->id_type_; if (root->left_) { collect_ir(root->left_, type_to_fix, ir_to_fix); } if (type_to_fix.find(idtype) != type_to_fix.end()) { ir_to_fix.push_back(root); } if (root->right_) { collect_ir(root->right_, type_to_fix, ir_to_fix); } } static IR *search_mapped_ir(IR *ir, IDTYPE idtype) { vector to_search; vector backup; to_search.push_back(ir); while (!to_search.empty()) { for (auto i : to_search) { if (i->id_type_ == idtype) { return i; } if (i->left_) { backup.push_back(i->left_); } if (i->right_) { backup.push_back(i->right_); } } to_search = move(backup); backup.clear(); } return NULL; } void cross_stmt_map(map> &graph, vector &ir_to_fix, map &cross_map) { for (auto m : cross_map) { vector value; vector key; for (auto &k : graph) { if (k.first->id_type_ == m.first) { key.push_back(k.first); } } for (auto &k : ir_to_fix) { if (k->id_type_ == m.second) { value.push_back(k); } } if (key.empty()) return; for (auto val : value) { graph[key[get_rand_int(key.size())]].insert(val); } } } void toptable_map(map> &graph, vector &ir_to_fix, vector &toptable) { vector tablename; for (auto ir : ir_to_fix) { if (ir->id_type_ == id_table_name) { tablename.push_back(ir); } else if (ir->id_type_ == id_top_table_name) { toptable.push_back(ir); } } if (toptable.empty()) return; for (auto k : tablename) { auto r = get_rand_int(toptable.size()); graph[toptable[r]].insert(k); } } vector Mutator::extract_statement(IR *root) { vector res; deque bfs = {root}; while (bfs.empty() != true) { auto node = bfs.front(); bfs.pop_front(); if (node->type_ == kStatement) res.push_back(node); if (node->left_) bfs.push_back(node->left_); if (node->right_) bfs.push_back(node->right_); } return res; } vector Mutator::cut_subquery(IR *program, map &m_save) { vector res; vector v_statements; deque dfs = {program}; while (dfs.empty() != true) { auto node = dfs.front(); dfs.pop_front(); if (node->type_ == kStatement) v_statements.push_back(node); if (node->left_) dfs.push_back(node->left_); if (node->right_) dfs.push_back(node->right_); } reverse(v_statements.begin(), v_statements.end()); for (auto &stmt : v_statements) { deque q_bfs = {stmt}; res.push_back(stmt); while (!q_bfs.empty()) { auto cur = q_bfs.front(); q_bfs.pop_front(); if (cur->left_) { q_bfs.push_back(cur->left_); if (cur->left_->type_ == kSelectNoParen) { res.push_back(cur->left_); m_save[&cur->left_] = cur->left_; cur->left_ = NULL; } } if (cur->right_) { q_bfs.push_back(cur->right_); if (cur->right_->type_ == kSelectNoParen) { res.push_back(cur->right_); m_save[&cur->right_] = cur->right_; cur->right_ = NULL; } } } } return res; } bool Mutator::fix_back(map &m_save) { for (auto &i : m_save) { if (*(i.first) != NULL) return false; *(i.first) = i.second; } return true; } map> Mutator::build_dependency_graph( IR *root, map &relationmap, map &cross_map, vector &ordered_ir) { map> graph; set type_to_fix; map m_save; for (auto &iter : relationmap) { type_to_fix.insert(iter.first); type_to_fix.insert(iter.second); } auto ir_list = cut_subquery(root, m_save); for (auto stmt : ir_list) { vector ir_to_fix; collect_ir(stmt, type_to_fix, ir_to_fix); for (auto ii : ir_to_fix) { ordered_ir.push_back(ii); } cross_stmt_map(graph, ir_to_fix, cross_map); vector v_top_table; toptable_map(graph, ir_to_fix, v_top_table); for (auto ir : ir_to_fix) { auto idtype = ir->id_type_; graph[ir].empty(); if (relationmap.find(idtype) == relationmap.end()) { continue; } auto curptr = ir; bool flag = false; while (true) { auto pptr = locate_parent(stmt, curptr); if (pptr == NULL) break; while (pptr->left_ == NULL || pptr->right_ == NULL) { curptr = pptr; pptr = locate_parent(stmt, curptr); if (pptr == NULL) { flag = true; break; } } if (flag) break; auto to_search_child = pptr->left_; if (pptr->left_ == curptr) { to_search_child = pptr->right_; } auto match_ir = search_mapped_ir(to_search_child, relationmap[idtype]); if (match_ir != NULL) { if (ir->type_ == kColumnName && ir->left_ != NULL) { if (v_top_table.size() > 0) match_ir = v_top_table[get_rand_int(v_top_table.size())]; graph[match_ir].insert(ir->left_); if (ir->right_) { graph[match_ir].insert(ir->right_); ir->left_->id_type_ = id_table_name; ir->right_->id_type_ = id_column_name; ir->id_type_ = id_whatever; } } else graph[match_ir].insert(ir); break; } curptr = pptr; } } } fix_back(m_save); return graph; } IR *Mutator::strategy_delete(IR *cur) { assert(cur); MUTATESTART DOLEFT res = deep_copy(cur); if (res->left_ != NULL) deep_delete(res->left_); res->left_ = NULL; DORIGHT res = deep_copy(cur); if (res->right_ != NULL) deep_delete(res->right_); res->right_ = NULL; DOBOTH res = deep_copy(cur); if (res->left_ != NULL) deep_delete(res->left_); if (res->right_ != NULL) deep_delete(res->right_); res->left_ = res->right_ = NULL; MUTATEEND } IR *Mutator::strategy_insert(IR *cur) { assert(cur); auto res = deep_copy(cur); if (cur->type_ == kStatementList) { int size = left_lib[kStatementList].size(); auto new_right = deep_copy(left_lib[kStatementList][get_rand_int(size)]); auto new_res = new IR(kStatementList, OPMID(";"), res, new_right); return new_res; } if (res->right_ == NULL && res->left_ != NULL) { auto left_type = res->left_->type_; auto left_lib_size = left_lib[left_type].size(); if (left_lib_size != 0) { auto new_right = deep_copy(left_lib[left_type][get_rand_int(left_lib_size)]); res->right_ = new_right; return res; } } else if (res->right_ != NULL && res->left_ == NULL) { auto right_type = res->right_->type_; auto right_lib_size = right_lib[right_type].size(); if (right_lib_size != 0) { auto new_left = deep_copy(right_lib[right_type][get_rand_int(right_lib_size)]); res->left_ = new_left; return res; } } int lib_size = ir_libary_2D_[res->type_].size(); if (lib_size == 0) { deep_delete(res); return NULL; } auto save = res; res = deep_copy(ir_libary_2D_[res->type_][get_rand_int(lib_size)]); deep_delete(save); return res; } IR *Mutator::strategy_replace(IR *cur) { assert(cur); MUTATESTART DOLEFT res = deep_copy(cur); auto new_node = get_from_libary_2D(res->left_); if (new_node != NULL) { new_node = deep_copy(new_node); if (res->left_ != NULL) { new_node->id_type_ = res->left_->id_type_; } } if (res->left_ != NULL) deep_delete(res->left_); res->left_ = new_node; DORIGHT res = deep_copy(cur); auto new_node = get_from_libary_2D(res->right_); if (new_node != NULL) { new_node = deep_copy(new_node); if (res->right_ != NULL) { new_node->id_type_ = res->right_->id_type_; } } if (res->right_ != NULL) deep_delete(res->right_); res->right_ = new_node; DOBOTH res = deep_copy(cur); auto new_left = get_from_libary_2D(res->left_); auto new_right = get_from_libary_2D(res->right_); if (new_left != NULL) { new_left = deep_copy(new_left); if (res->left_ != NULL) { new_left->id_type_ = res->left_->id_type_; } } if (new_right != NULL) { new_right = deep_copy(new_right); if (res->right_ != NULL) { new_right->id_type_ = res->right_->id_type_; } } if (res->left_) deep_delete(res->left_); if (res->right_) deep_delete(res->right_); res->left_ = new_left; res->right_ = new_right; MUTATEEND return res; } bool Mutator::lucky_enough_to_be_mutated(unsigned int mutated_times) { if (get_rand_int(mutated_times + 1) < LUCKY_NUMBER) { return true; } return false; } IR *Mutator::get_from_libary_2D(IR *ir) { static IR *empty_str = new IR(kStringLiteral, ""); if (!ir) return NULL; auto &i = ir_libary_2D_[ir->type_]; if (i.size() == 0) return empty_str; return i[get_rand_int(i.size())]; } IR *Mutator::get_from_libary_3D(IR *ir) { NODETYPE left_type = kEmpty, right_type = kEmpty; if (ir->left_) { left_type = ir->left_->type_; } if (ir->right_) { right_type = ir->right_->type_; } auto &i = ir_libary_3D_[left_type][right_type]; if (i.size() == 0) return new IR(kStringLiteral, ""); return i[get_rand_int(i.size())]; } string Mutator::get_a_string() { unsigned com_size = common_string_libary.size(); unsigned lib_size = string_libary.size(); unsigned double_lib_size = lib_size * 2; unsigned rand_int = get_rand_int(double_lib_size + com_size); if (rand_int < double_lib_size) { return string_libary[rand_int >> 1]; } else { rand_int -= double_lib_size; return common_string_libary[rand_int]; } } unsigned long Mutator::get_a_val() { if (value_libary.size() == 0) return 0xdeadbeef; return value_libary[get_rand_int(value_libary.size())]; } unsigned long Mutator::get_library_size() { unsigned long res = 0; for (auto &i : ir_libary_2D_) { res += i.second.size(); } for (auto &i : ir_libary_3D_) { for (auto &j : i.second) { res += j.second.size(); } } for (auto &i : left_lib) { res += i.second.size(); } for (auto &i : right_lib) { res += i.second.size(); } return res; } #ifdef _NON_REPLACE_ void Mutator::add_to_library(IR *ir) { #else void Mutator::add_to_library_core(IR *ir) { #endif NODETYPE p_type = ir->type_; unsigned long p_hash = hash(ir->to_string()); if (ir_libary_2D_hash_[p_type].find(p_hash) != ir_libary_2D_hash_[p_type].end()) { return; } IR *ir_copy = deep_copy(ir); add_to_library_core(ir_copy); } #ifdef _NON_REPLACE_ void Mutator::add_to_library_core(IR *ir) { #else void Mutator::add_to_library(IR *ir) { #endif string p_str = ir->to_string(); unsigned long p_hash = hash(p_str); NODETYPE p_type = ir->type_; NODETYPE left_type = kEmpty, right_type = kEmpty; // update library_2D if (ir_libary_2D_hash_[p_type].find(p_hash) != ir_libary_2D_hash_[p_type].end()) { return; } ir_libary_2D_hash_[p_type].insert(p_hash); #ifdef _NON_REPLACE_ ir_libary_2D_[p_type].push_back(ir); #else ir_libary_2D_[p_type].push_back(deep_copy(ir)); #endif if (ir->left_) { left_type = ir->left_->type_; #ifdef _NON_REPLACE_ add_to_library_core(ir->left_); #else add_to_library(ir->left_); #endif } if (ir->right_) { right_type = ir->right_->type_; #ifdef _NON_REPLACE_ add_to_library_core(ir->right_); #else add_to_library(ir->right_); #endif } // update right_lib, left_lib if (ir->right_ && ir->left_) { #ifdef _NON_REPLACE_ right_lib[right_type].push_back(ir->left_); left_lib[left_type].push_back(ir->right_); #else right_lib[right_type].push_back(deep_copy(ir->left_)); left_lib[left_type].push_back(deep_copy(ir->right_)); #endif } // update library_3D set &hash_map = ir_libary_3D_hash_[left_type][right_type]; if (hash_map.find(p_hash) != hash_map.end()) { return; } ir_libary_3D_hash_[left_type][right_type].insert(p_hash); #ifdef _NON_REPLACE_ ir_libary_3D_[left_type][right_type].push_back(ir); #else ir_libary_3D_[left_type][right_type].push_back(deep_copy(ir)); #endif return; } unsigned long Mutator::hash(string sql) { return ducking_hash(sql.c_str(), sql.size()); } unsigned long Mutator::hash(IR *root) { return this->hash(root->to_string()); } void Mutator::debug(IR *root) { cout << get_string_by_type(root->type_) << endl; if (root->left_) debug(root->left_); if (root->right_) debug(root->right_); } Mutator::~Mutator() { cout << "HERE" << endl; // delete ir_libary_3D_ for (auto &i : ir_libary_3D_) { for (auto &j : i.second) { for (auto &ir : j.second) { deep_delete(ir); } } } // delete ir_libary_2D_ for (auto &i : ir_libary_2D_) { for (auto &ir : i.second) { deep_delete(ir); } } // delete left_lib for (auto &i : left_lib) { for (auto &ir : i.second) { deep_delete(ir); } } // delete right_lib for (auto &i : right_lib) { for (auto &ir : i.second) { deep_delete(ir); } } } void Mutator::fix_one(map> &graph, IR *fixed_key, set &visited) { if (fixed_key->id_type_ == id_create_table_name) { string tablename = fixed_key->str_val_; auto &colums = m_tables[tablename]; for (auto &val : graph[fixed_key]) { if (val->id_type_ == id_create_column_name) { string new_column = gen_id_name(); colums.push_back(new_column); val->str_val_ = new_column; visited.insert(val); } else if (val->id_type_ == id_top_table_name) { val->str_val_ = tablename; visited.insert(val); fix_one(graph, val, visited); } } } else if (fixed_key->id_type_ == id_top_table_name) { string tablename = fixed_key->str_val_; auto &colums = m_tables[tablename]; for (auto &val : graph[fixed_key]) { if (val->id_type_ == id_column_name) { val->str_val_ = vector_rand_ele(colums); visited.insert(val); } else if (val->id_type_ == id_table_name) { val->str_val_ = tablename; visited.insert(val); } else if (val->id_type_ == id_index_name) { string new_index = gen_id_name(); val->str_val_ = new_index; m_tables[new_index] = m_tables[tablename]; v_table_names.push_back(new_index); } } } } void Mutator::fix_graph(map> &graph, IR *root, vector &ordered_ir) { set visited; reset_database(); for (auto ir : ordered_ir) { auto iter = make_pair(ir, graph[ir]); if (visited.find(iter.first) != visited.end()) { continue; } visited.insert(iter.first); if (iter.second.empty()) { if (iter.first->id_type_ == id_column_name) { string tablename = vector_rand_ele(v_table_names); auto &colums = m_tables[tablename]; iter.first->str_val_ = vector_rand_ele(colums); continue; } } if (iter.first->id_type_ == id_create_table_name || iter.first->id_type_ == id_top_table_name) { if (iter.first->id_type_ == id_create_table_name) { string new_table_name = gen_id_name(); v_table_names.push_back(new_table_name); iter.first->str_val_ = new_table_name; } else { iter.first->str_val_ = vector_rand_ele(v_table_names); } fix_one(graph, iter.first, visited); } } } /* tranverse ir in the order: _right ==> root ==> left_ */ string Mutator::fix(IR *root) { string res; auto *right_ = root->right_, *left_ = root->left_; auto *op_ = root->op_; auto type_ = root->type_; auto str_val_ = root->str_val_; auto f_val_ = root->f_val_; auto int_val_ = root->int_val_; auto id_type_ = root->id_type_; string tmp_right; if (right_ != NULL) tmp_right = fix(right_); if (type_ == kIdentifier && (id_type_ == id_database_name || id_type_ == id_schema_name)) { if (get_rand_int(2) == 1) return string("main"); else return string("temp"); } if (type_ == kCmdPragma) { string res = "PRAGMA "; int lib_size = cmds_.size(); string &key = cmds_[get_rand_int(lib_size)]; res += key; int value_size = m_cmd_value_lib_[key].size(); string value = m_cmd_value_lib_[key][get_rand_int(value_size)]; if (!value.compare("_int_")) { value = string("=") + to_string(value_libary[get_rand_int(value_libary.size())]); } else if (!value.compare("_empty_")) { value = ""; } else if (!value.compare("_boolean_")) { if (get_rand_int(2) == 0) value = "=false"; else value = "=true"; } else { value = "=" + value; } if (!value.empty()) res += value + ";"; return res; } if (type_ == kFilePath || type_ == kPrepareTargetQuery || type_ == kOptOrderType || type_ == kColumnType || type_ == kSetType || type_ == kOptJoinType || type_ == kOptDistinct || type_ == kNullLiteral) return str_val_; if (type_ == kStringLiteral) { auto s = string_libary[get_rand_int(string_libary.size())]; return "'" + s + "'"; } if (type_ == kIntLiteral) return std::to_string(value_libary[get_rand_int(value_libary.size())]); if (type_ == kFloatLiteral || type_ == kconst_float) return std::to_string( float(value_libary[get_rand_int(value_libary.size())]) + 0.1); if (type_ == kconst_str) return string_libary[get_rand_int(string_libary.size())]; ; if (type_ == kconst_int) return std::to_string(value_libary[get_rand_int(value_libary.size())]); if (!str_val_.empty()) return str_val_; if (op_ != NULL) res += op_->prefix_ + " "; if (left_ != NULL) res += fix(left_) + " "; if (op_ != NULL) res += op_->middle_ + " "; if (right_ != NULL) res += tmp_right + " "; if (op_ != NULL) res += op_->suffix_; trim_string(res); return res; } unsigned int Mutator::calc_node(IR *root) { unsigned int res = 0; if (root->left_) res += calc_node(root->left_); if (root->right_) res += calc_node(root->right_); return res + 1; } string Mutator::extract_struct2(IR *root) { static int counter = 0; string res; auto *right_ = root->right_, *left_ = root->left_; auto *op_ = root->op_; auto type_ = root->type_; auto str_val_ = root->str_val_; if (type_ == kColumnName && str_val_ == "*") return str_val_; if (type_ == kOptOrderType || type_ == kNullLiteral || type_ == kColumnType || type_ == kSetType || type_ == kOptJoinType || type_ == kOptDistinct) return str_val_; if (root->id_type_ != id_whatever && root->id_type_ != id_module_name) { return "x" + to_string(counter++); } if (type_ == kPrepareTargetQuery || type_ == kStringLiteral) { string str_val = str_val_; str_val.erase(std::remove(str_val.begin(), str_val.end(), '\''), str_val.end()); str_val.erase(std::remove(str_val.begin(), str_val.end(), '"'), str_val.end()); string magic_string = magic_string_generator(str_val); unsigned long h = hash(magic_string); if (string_libary_hash_.find(h) == string_libary_hash_.end()) { string_libary.push_back(magic_string); string_libary_hash_.insert(h); } return "'y'"; } if (type_ == kIntLiteral) { value_libary.push_back(root->int_val_); return "10"; } if (type_ == kFloatLiteral || type_ == kconst_float) { value_libary.push_back((unsigned long)root->f_val_); return "0.1"; } if (type_ == kconst_int) { value_libary.push_back(root->int_val_); return "11"; } if (type_ == kFilePath) return "'file_name'"; if (!str_val_.empty()) return str_val_; if (op_ != NULL) res += op_->prefix_ + " "; if (left_ != NULL) res += extract_struct2(left_) + " "; if (op_ != NULL) res += op_->middle_ + " "; if (right_ != NULL) res += extract_struct2(right_) + " "; if (op_ != NULL) res += op_->suffix_; trim_string(res); return res; } string Mutator::extract_struct(IR *root) { static int counter = 0; string res; auto *right_ = root->right_, *left_ = root->left_; auto *op_ = root->op_; auto type_ = root->type_; auto str_val_ = root->str_val_; if (type_ == kColumnName && str_val_ == "*") return str_val_; if (type_ == kOptOrderType || type_ == kNullLiteral || type_ == kColumnType || type_ == kSetType || type_ == kOptJoinType || type_ == kOptDistinct) return str_val_; if (root->id_type_ != id_whatever && root->id_type_ != id_module_name) { return "x"; } if (type_ == kPrepareTargetQuery || type_ == kStringLiteral) { string str_val = str_val_; str_val.erase(std::remove(str_val.begin(), str_val.end(), '\''), str_val.end()); str_val.erase(std::remove(str_val.begin(), str_val.end(), '"'), str_val.end()); string magic_string = magic_string_generator(str_val); unsigned long h = hash(magic_string); if (string_libary_hash_.find(h) == string_libary_hash_.end()) { string_libary.push_back(magic_string); string_libary_hash_.insert(h); } return "'y'"; } if (type_ == kIntLiteral) { value_libary.push_back(root->int_val_); return "10"; } if (type_ == kFloatLiteral || type_ == kconst_float) { value_libary.push_back((unsigned long)root->f_val_); return "0.1"; } if (type_ == kconst_int) { value_libary.push_back(root->int_val_); return "11"; } if (type_ == kFilePath) return "'file_name'"; if (!str_val_.empty()) return str_val_; if (op_ != NULL) res += op_->prefix_ + " "; if (left_ != NULL) res += extract_struct(left_) + " "; if (op_ != NULL) res += op_->middle_ + " "; if (right_ != NULL) res += extract_struct(right_) + " "; if (op_ != NULL) res += op_->suffix_; trim_string(res); return res; } void Mutator::add_new_table(IR *root, string &table_name) { if (root->left_ != NULL) add_new_table(root->left_, table_name); if (root->right_ != NULL) add_new_table(root->right_, table_name); // add to table_name_lib_ if (root->type_ == kTableName) { if (root->operand_num_ == 1) { table_name = root->left_->str_val_; } else if (root->operand_num_ == 2) { table_name = root->left_->str_val_ + "." + root->right_->str_val_; } } // add to column_name_lib_ if (root->type_ == kColumnDef) { auto tmp = root->left_; if (tmp->type_ == kIdentifier) { if (!table_name.empty() && !tmp->str_val_.empty()) ; m_tables[table_name].push_back(tmp->str_val_); if (find(v_table_names.begin(), v_table_names.end(), table_name) != v_table_names.end()) v_table_names.push_back(table_name); } } } void Mutator::reset_database() { m_tables.clear(); v_table_names.clear(); } int Mutator::try_fix(char *buf, int len, char *&new_buf, int &new_len) { string sql(buf); auto ast = parser(sql); new_buf = buf; new_len = len; if (ast == NULL) return 0; vector v_ir; auto ir_root = ast->translate(v_ir); ast->deep_delete(); if (ir_root == NULL) return 0; auto fixed = validate(ir_root); deep_delete(ir_root); if (fixed.empty()) return 0; char *sfixed = (char *)malloc(fixed.size() + 1); memcpy(sfixed, fixed.c_str(), fixed.size()); sfixed[fixed.size()] = 0; new_buf = sfixed; new_len = fixed.size(); return 1; } ================================================ FILE: srcs/internal/sqlite/srcs/utils.cpp ================================================ #include "../include/utils.h" string get_string_by_type(IRTYPE type) { #define DECLARE_CASE(classname) \ if (type == k##classname) return #classname; ALLCLASS(DECLARE_CASE); #undef DECLARE_CASE return ""; } string magic_string_generator(string &s) { unsigned int i = get_rand_int(100); if (i < 80) return s; return "**%s**"; } void print_v_ir(vector &v_ir_collector) { for (auto ir : v_ir_collector) { if (ir->operand_num_ == 0) { if (ir->type_ == kconst_int) cout << ir->name_ << " = .int." << ir->int_val_ << endl; else if (ir->type_ == kconst_float) cout << ir->name_ << " = .float." << ir->f_val_ << endl; else if (ir->type_ == kBoolLiteral) cout << ir->name_ << " = .bool." << ir->b_val_ << endl; else cout << ir->name_ << " = .str." << ir->str_val_ << endl; } else if (ir->operand_num_ == 1) { string res = ""; if (ir->op_ != NULL) { res += ir->op_->prefix_ + " "; res += ir->left_->name_ + " "; res += ir->op_->middle_ + " "; res += ir->op_->suffix_ + " "; } cout << ir->name_ << " = " << res << endl; } else if (ir->operand_num_ == 2) { string res = ""; if (ir->op_ != NULL) { res += ir->op_->prefix_ + " "; res += ir->left_->name_ + " "; res += ir->op_->middle_ + " "; res += ir->right_->name_ + " "; res += ir->op_->suffix_ + " "; } cout << ir->name_ << " = " << res << endl; } } return; } void print_ir(IR *ir) { if (ir->left_ != NULL) print_ir(ir->left_); if (ir->right_ != NULL) print_ir(ir->right_); if (ir->operand_num_ == 0) { if (ir->type_ == kconst_int) cout << ir->name_ << " = .int." << ir->int_val_ << endl; else if (ir->type_ == kconst_float) cout << ir->name_ << " = .float." << ir->f_val_ << endl; else if (ir->type_ == kBoolLiteral) cout << ir->name_ << " = .bool." << ir->b_val_ << endl; else cout << ir->name_ << " = .str." << ir->str_val_ << endl; } else if (ir->operand_num_ == 1) { string res = ""; if (ir->op_ != NULL) { res += ir->op_->prefix_ + " "; res += ir->left_->name_ + " "; res += ir->op_->middle_ + " "; res += ir->op_->suffix_ + " "; } cout << ir->name_ << " = " << res << endl; } else if (ir->operand_num_ == 2) { string res = ""; if (ir->op_ != NULL) { res += ir->op_->prefix_ + " "; res += ir->left_->name_ + " "; res += ir->op_->middle_ + " "; res += ir->right_->name_ + " "; res += ir->op_->suffix_ + " "; } cout << ir->name_ << " = " << res << endl; } return; } Program *parser(string sql) { yyscan_t scanner; YY_BUFFER_STATE state; Program *p = new Program(); if (hsql_lex_init(&scanner)) { return NULL; } state = hsql__scan_string(sql.c_str(), scanner); int ret = hsql_parse(p, scanner); hsql__delete_buffer(state, scanner); hsql_lex_destroy(scanner); if (ret != 0) { p->deep_delete(); return NULL; } return p; } typedef unsigned long uint64_t; uint64_t ducking_hash(const void *key, int len) { const uint64_t m = 0xc6a4a7935bd1e995; const int r = 47; uint64_t h = 0xdeadbeefdeadbeef ^ (len * m); const uint64_t *data = (const uint64_t *)key; const uint64_t *end = data + (len / 8); while (data != end) { uint64_t k = *data++; k *= m; k ^= k >> r; k *= m; h ^= k; h *= m; } const unsigned char *data2 = (const unsigned char *)data; switch (len & 7) { case 7: h ^= uint64_t(data2[6]) << 48; case 6: h ^= uint64_t(data2[5]) << 40; case 5: h ^= uint64_t(data2[4]) << 32; case 4: h ^= uint64_t(data2[3]) << 24; case 3: h ^= uint64_t(data2[2]) << 16; case 2: h ^= uint64_t(data2[1]) << 8; case 1: h ^= uint64_t(data2[0]); h *= m; }; h ^= h >> r; h *= m; h ^= h >> r; return h; } void trim_string(string &res) { int count = 0; int idx = 0; bool expect_space = false; for (int i = 0, sz = res.size(); i < sz; i++) { if (res[i] == ' ') { if (expect_space == false) { continue; } else { expect_space = false; res[idx++] = res[i]; count++; } } else { expect_space = true; res[idx++] = res[i]; count++; } } res.resize(count); } vector get_all_files_in_dir(const char *dir_name, bool absolute) { vector file_list; // check the parameter ! if (NULL == dir_name) { cout << " dir_name is null ! " << endl; return file_list; } // check if dir_name is a valid dir struct stat s; lstat(dir_name, &s); if (!S_ISDIR(s.st_mode)) { cout << "dir_name is not a valid directory !" << endl; return file_list; } struct dirent *filename; // return value for readdir() DIR *dir; // return value for opendir() dir = opendir(dir_name); if (NULL == dir) { cout << "Can not open dir " << dir_name << endl; return file_list; } cout << "Successfully opened the dir !" << endl; /* read all the files in the dir ~ */ while ((filename = readdir(dir)) != NULL) { // get rid of "." and ".." if (strcmp(filename->d_name, ".") == 0 || strcmp(filename->d_name, "..") == 0) continue; cout << filename->d_name << endl; if (absolute) { file_list.push_back(string(dir_name) + "/" + string(filename->d_name)); } else { file_list.push_back(string(filename->d_name)); } } closedir(dir); return file_list; } IR *deep_copy(const IR *root) { IR *left = NULL, *right = NULL, *copy_res; if (root->left_) left = deep_copy(root->left_); // do you have a second version for // deep_copy that accept only one argument? if (root->right_) right = deep_copy(root->right_); // no I forget to update here if (root->op_ != NULL) copy_res = new IR( root->type_, OP3(root->op_->prefix_, root->op_->middle_, root->op_->suffix_), left, right, root->f_val_, root->str_val_, root->name_, root->mutated_times_); else copy_res = new IR(root->type_, NULL, left, right, root->f_val_, root->str_val_, root->name_, root->mutated_times_); copy_res->id_type_ = root->id_type_; return copy_res; } void deep_delete(IR *root) { if (root->left_) deep_delete(root->left_); if (root->right_) deep_delete(root->right_); if (root->op_) delete root->op_; delete root; } ================================================ FILE: srcs/utils/config_validate.cc ================================================ #include "config_validate.h" #include #include #include #include #include #include "absl/strings/str_format.h" namespace { constexpr std::string_view kSupportedDB[] = {"sqlite", "mysql", "postgresql", "mariadb"}; }; namespace utils { bool path_exist(std::string_view path) { struct stat sb; return stat(path.data(), &sb) == 0; } bool validate_db_config(const YAML::Node& config) { if (!config["required"] || !config["db"]) { std::cerr << "You should set the `required` field and `db` for validity checks." << std::endl; return false; } if (!config["required"].IsSequence()) { std::cerr << "The `required` field should be a list." << std::endl; return false; } if (config["should_exist"]) { if (!config["should_exist"].IsSequence()) { return false; } for (std::size_t i = 0; i < config["should_exist"].size(); i++) { std::string key_should_exist = config["should_exist"].as()[i].as(); if (!config[key_should_exist]) { std::cerr << key_should_exist << " is set in `should_exist` but is not a valid key!\n"; } std::string file_should_exist = config[key_should_exist].as(); if (!path_exist(file_should_exist)) { std::cerr << file_should_exist << " doesn't exist!\n"; return false; } } } for (std::size_t i = 0; i < config["required"].size(); i++) { std::string required_key = config["required"].as()[i].as(); if (!config[required_key]) { std::cerr << absl::StrFormat("The required field %s is not set.\n", required_key); return false; } } bool supported = false; for (auto db : kSupportedDB) { if (config["db"].as() == db) { supported = true; break; } } if (!supported) { std::cerr << absl::StrFormat("%s is not supported by Squirrel yet.\n", config["db"].as()); } return supported; } }; // namespace utils ================================================ FILE: srcs/utils/config_validate.h ================================================ #ifndef __UTILS_CONFIG_VALIDATE__ #define __UTILS_CONFIG_VALIDATE__ #include #include "yaml-cpp/yaml.h" namespace utils { // Check whether the configuration is Ok. bool validate_db_config(const YAML::Node&); bool path_exist(std::string_view); }; // namespace utils #endif //__UTILS_CONFIG_VALIDATE__ ================================================ FILE: tests/CMakeLists.txt ================================================ cmake_minimum_required(VERSION 3.14) project(Squirrel) set(CMAKE_CXX_STANDARD 17) include(FetchContent) FetchContent_Declare( googletest URL https://github.com/google/googletest/archive/03597a01ee50ed33e9dfd640b249b4be3799d395.zip ) # For Windows : Prevent overriding the parent project's compiler/linker settings set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) FetchContent_MakeAvailable(googletest) enable_testing() add_executable( db_config_test db_config_test.cc ) target_link_libraries( db_config_test GTest::gtest_main yaml-cpp config_validator ) include(GoogleTest) gtest_discover_tests(db_config_test) ================================================ FILE: tests/db_config_test.cc ================================================ #include #include "yaml-cpp/yaml.h" #include "config_validate.h" TEST(ConfigValidatorTest, DBTypeNotSupported) { const char* kConfig = R"V0G0N( init_lib: x pragma: x db: sqlite3 )V0G0N"; YAML::Node config = YAML::Load(kConfig); EXPECT_FALSE(utils::validate_db_config(config)) << kConfig; } TEST(ConfigValidatorTest, RequiredNotSet) { const char* kConfig = R"V0G0N( init_lib: x pragma: x db: sqlite )V0G0N"; YAML::Node config = YAML::Load(kConfig); EXPECT_FALSE(utils::validate_db_config(config)); } TEST(ConfigValidatorTest, EveryRequiredKeywordShouldBeSet) { const char* kConfig = R"V0G0N( required: ["init_lib", "pragma", "db"] pragma: x db: sqlite )V0G0N"; YAML::Node config = YAML::Load(kConfig); EXPECT_FALSE(utils::validate_db_config(config)); } TEST(ConfigValidatorTest, MissingFilesInShoulExistIsNotAllowed) { const char* kConfig = R"V0G0N( required: ["init_lib", "pragma", "db"] should_exist: ["pragma"] pragma: "/file/not/exist" init_lib: x db: sqlite )V0G0N"; YAML::Node config = YAML::Load(kConfig); EXPECT_FALSE(utils::validate_db_config(config)); } TEST(ConfigValidatorTest, CorrectlyConfiguredFileReturnTrue) { const char* kConfig = R"V0G0N( required: ["init_lib", "pragma", "db"] should_exist: ["pragma", "init_lib"] pragma: "/bin/sh" init_lib: "/bin" db: sqlite )V0G0N"; YAML::Node config = YAML::Load(kConfig); EXPECT_TRUE(utils::validate_db_config(config)); }