From ed1de15911bf823a8e082e97080253397a34fbcb Mon Sep 17 00:00:00 2001 From: Simon Willison Date: Thu, 25 Jun 2026 17:37:11 -0700 Subject: [PATCH] First attempt at CREATE TABLE parsing Plus valid and invalid CREATE TABLE examples extracted from the SQLite source code at: https://github.com/sqlite/sqlite/blob/02ea41d5241eb7dbbd88ded5b25a988dbb96e47c/test/e_createtable.test --- create_table_parser.py | 681 ++++++++++++++++++++++++++++++++ tests/invalid_create_table.json | 31 ++ tests/valid_create_table.json | 274 +++++++++++++ 3 files changed, 986 insertions(+) create mode 100644 create_table_parser.py create mode 100644 tests/invalid_create_table.json create mode 100644 tests/valid_create_table.json diff --git a/create_table_parser.py b/create_table_parser.py new file mode 100644 index 0000000..9f2282c --- /dev/null +++ b/create_table_parser.py @@ -0,0 +1,681 @@ +"""Parse a SQLite CREATE TABLE statement into a structured, queryable model. + +SQLite exposes no introspection for CHECK constraints (and only partial detail +elsewhere), so the source of truth is the original DDL in sqlite_master. This +module parses that DDL with a recursive-descent parser whose functions mirror +the SQLite grammar, and returns a `Table` made of `Column`s and typed +`Constraint`s. + +The constraint list on each Column/Table is the source of truth; the convenient +accessors (`table["age"]`, `table.primary_key`, `col.not_null`, `table.checks`) +are derived views over it, so adding a new constraint type means adding a +dataclass and a property -- nothing else has to change. +""" +from dataclasses import dataclass, field +from typing import List, Optional + + +# --------------------------------------------------------------------------- # +# Constraint model +# --------------------------------------------------------------------------- # + +class Constraint: + """Marker base so all constraint kinds share an isinstance() umbrella.""" + + +@dataclass +class Check(Constraint): + check: str # SQL expression inside CHECK (...) + name: str = "" # from CONSTRAINT , usually blank + column: str = "" # owning column, or "" for table-level + options: Optional[List] = None # values iff the check is exactly `col IN (...)` + + def __repr__(self): + return (f"Check(check={self.check!r}, name={self.name!r}, " + f"column={self.column!r}, options={self.options!r})") + + +@dataclass +class PrimaryKey(Constraint): + columns: List[str] + name: str = "" + autoincrement: bool = False + order: str = "" # ASC/DESC for an inline single-column PK + + +@dataclass +class Unique(Constraint): + columns: List[str] + name: str = "" + + +@dataclass +class NotNull(Constraint): + column: str + name: str = "" + + +@dataclass +class Default(Constraint): + column: str + value: str # raw default text, e.g. "0", "'x'", "1 + 2" + name: str = "" + + +@dataclass +class Collate(Constraint): + column: str + collation: str + name: str = "" + + +@dataclass +class Generated(Constraint): + column: str + expression: str + stored: bool = False + name: str = "" + + +@dataclass +class ForeignKey(Constraint): + columns: List[str] # local column(s) + table: str # referenced table + references: List[str] = field(default_factory=list) # referenced column(s) + on_delete: str = "NO ACTION" + on_update: str = "NO ACTION" + name: str = "" + + +# --------------------------------------------------------------------------- # +# Column & Table +# --------------------------------------------------------------------------- # + +@dataclass +class Column: + name: str + type: str = "" + constraints: List[Constraint] = field(default_factory=list) + + def __post_init__(self): + self._table = None # set when attached to a Table + + def _first(self, cls): + return next((c for c in self.constraints if isinstance(c, cls)), None) + + def _inline_primary_key(self) -> bool: + return any(isinstance(c, PrimaryKey) for c in self.constraints) + + @property + def checks(self) -> List[Check]: + return [c for c in self.constraints if isinstance(c, Check)] + + @property + def not_null(self) -> bool: + return any(isinstance(c, NotNull) for c in self.constraints) + + @property + def primary_key(self) -> bool: + # Part of the table's PK, whether declared inline or as a composite + # table constraint. Falls back to inline-only if not attached to a Table. + if self._table is not None: + return self.name in self._table.primary_key + return self._inline_primary_key() + + @property + def autoincrement(self) -> bool: + pk = self._first(PrimaryKey) + return bool(pk and pk.autoincrement) + + @property + def unique(self) -> bool: + return any(isinstance(c, Unique) for c in self.constraints) + + @property + def default(self) -> Optional[str]: + d = self._first(Default) + return d.value if d else None + + @property + def collation(self) -> Optional[str]: + c = self._first(Collate) + return c.collation if c else None + + @property + def generated(self) -> Optional[str]: + g = self._first(Generated) + return g.expression if g else None + + @property + def foreign_key(self) -> Optional[ForeignKey]: + return self._first(ForeignKey) + + def __repr__(self): + bits = [repr(self.name)] + if self.type: + bits.append(f"type={self.type!r}") + if self.constraints: + bits.append(f"constraints={len(self.constraints)}") + return f"Column({', '.join(bits)})" + + +@dataclass +class Table: + name: str + columns: List[Column] = field(default_factory=list) + constraints: List[Constraint] = field(default_factory=list) # table-level + schema: str = "" + temporary: bool = False + if_not_exists: bool = False + without_rowid: bool = False + strict: bool = False + + def __post_init__(self): + self._by_name = {c.name: c for c in self.columns} + for col in self.columns: + col._table = self + + # --- mapping-style column access --- + def __getitem__(self, name) -> Column: + return self._by_name[name] + + def __contains__(self, name) -> bool: + return name in self._by_name + + def __iter__(self): + return iter(self.columns) + + def __len__(self): + return len(self.columns) + + def column(self, name, default=None) -> Optional[Column]: + return self._by_name.get(name, default) + + @property + def column_names(self) -> List[str]: + return [c.name for c in self.columns] + + # --- checks --- + @property + def checks(self) -> List[Check]: + out = [] + for col in self.columns: + out.extend(col.checks) + out.extend(c for c in self.constraints if isinstance(c, Check)) + return out + + @property + def column_checks(self): + return {col.name: col.checks for col in self.columns if col.checks} + + @property + def table_checks(self) -> List[Check]: + return [c for c in self.constraints if isinstance(c, Check)] + + # --- keys --- + @property + def primary_key(self) -> List[str]: + table_pk = next((c for c in self.constraints if isinstance(c, PrimaryKey)), None) + if table_pk: + return list(table_pk.columns) + return [col.name for col in self.columns if col._inline_primary_key()] + + @property + def foreign_keys(self) -> List[ForeignKey]: + fks = [col.foreign_key for col in self.columns if col.foreign_key] + fks += [c for c in self.constraints if isinstance(c, ForeignKey)] + return fks + + def __repr__(self): + q = f"{self.schema}.{self.name}" if self.schema else self.name + return f"Table({q!r}, columns=[{', '.join(self.column_names)}])" + + +# --------------------------------------------------------------------------- # +# Lexical helpers (string / identifier / paren aware) +# --------------------------------------------------------------------------- # + +def _unquote(tok): + tok = (tok or "").strip() + if len(tok) >= 2 and tok[0] in ('"', '`', "'") and tok[-1] == tok[0]: + return tok[1:-1].replace(tok[0] * 2, tok[0]) + if len(tok) >= 2 and tok[0] == '[' and tok[-1] == ']': + return tok[1:-1] + return tok + + +def _coerce(val): + val = val.strip() + if val and val[0] in ("'", '"') and val[-1] == val[0]: + return val[1:-1].replace(val[0] * 2, val[0]) + for cast in (int, float): + try: + return cast(val) + except ValueError: + pass + return val + + +def _split_top_level(body): + items, depth, start, i, n = [], 0, 0, 0, len(body) + while i < n: + c = body[i] + if c in ("'", '"', '`'): + i += 1 + while i < n: + if body[i] == c: + if i + 1 < n and body[i + 1] == c: + i += 2; continue + i += 1; break + i += 1 + continue + if c == '[': + while i < n and body[i] != ']': + i += 1 + i += 1; continue + if c == '(': + depth += 1 + elif c == ')': + depth -= 1 + elif c == ',' and depth == 0: + items.append(body[start:i]); start = i + 1 + i += 1 + items.append(body[start:]) + return [it.strip() for it in items if it.strip()] + + +def _tokenize(s): + """Top-level tokens: ('word'|'string'|'group'|'punct', text). Parenthesised + groups are captured whole so nested commas/keywords never reach the parser.""" + tokens, i, n = [], 0, len(s) + while i < n: + c = s[i] + if c.isspace(): + i += 1; continue + if c in ("'", '"', '`'): + start = i; i += 1 + while i < n: + if s[i] == c: + if i + 1 < n and s[i + 1] == c: + i += 2; continue + i += 1; break + i += 1 + tokens.append(('string', s[start:i])); continue + if c == '[': + start = i; i += 1 + while i < n and s[i] != ']': + i += 1 + i += 1 + tokens.append(('string', s[start:i])); continue + if c == '(': + start = i; depth = 0 + while i < n: + cc = s[i] + if cc in ("'", '"', '`'): + i += 1 + while i < n: + if s[i] == cc: + if i + 1 < n and s[i + 1] == cc: + i += 2; continue + i += 1; break + i += 1 + continue + if cc == '(': + depth += 1 + elif cc == ')': + depth -= 1 + if depth == 0: + i += 1; break + i += 1 + tokens.append(('group', s[start:i])); continue + if c.isalnum() or c in '_$': + start = i + while i < n and (s[i].isalnum() or s[i] in '_$'): + i += 1 + tokens.append(('word', s[start:i])); continue + tokens.append(('punct', c)); i += 1 + return tokens + + +def _locate_body(sql): + """Return (open_idx, close_idx) of the outermost ( ), or (-1, -1).""" + i, n, depth, open_idx = 0, len(sql), 0, -1 + while i < n: + c = sql[i] + if c in ("'", '"', '`'): + i += 1 + while i < n: + if sql[i] == c: + if i + 1 < n and sql[i + 1] == c: + i += 2; continue + i += 1; break + i += 1 + continue + if c == '[': + while i < n and sql[i] != ']': + i += 1 + i += 1; continue + if c == '(': + if depth == 0: + open_idx = i + depth += 1 + elif c == ')': + depth -= 1 + if depth == 0: + return open_idx, i + i += 1 + return open_idx, -1 + + +def _leading_ident(part): + toks = _tokenize(part) + return _unquote(toks[0][1]) if toks else "" + + +def _parse_options(expr): + """Value list iff the whole expression is exactly `col IN (...)`, else None.""" + toks = _tokenize(expr) + if len(toks) != 3: + return None + (k0, v0), (k1, v1), (k2, v2) = toks + is_ident = k0 == 'word' or (k0 == 'string' and v0[0] in '"[`') + if not (is_ident and k1 == 'word' and v1.upper() == 'IN' and k2 == 'group'): + return None + return [_coerce(x) for x in _split_top_level(v2[1:-1])] + + +# --------------------------------------------------------------------------- # +# Parser +# --------------------------------------------------------------------------- # + +_TABLE_CONSTRAINT = {"PRIMARY", "UNIQUE", "CHECK", "FOREIGN"} +_COLUMN_CONSTRAINT = {"PRIMARY", "UNIQUE", "CHECK", "COLLATE", "REFERENCES", + "GENERATED", "AS"} + + +class _TableParser: + def __init__(self, sql): + self.sql = sql + self.toks = [] + self.pos = 0 + self.columns: List[Column] = [] + self.table_constraints: List[Constraint] = [] + + # -- cursor -- + def _peek(self, offset=0): + i = self.pos + offset + return self.toks[i] if 0 <= i < len(self.toks) else (None, None) + + def _kind(self, offset=0): + return self._peek(offset)[0] + + def _val(self, offset=0): + return self._peek(offset)[1] + + def _advance(self): + tok = self._peek() + self.pos += 1 + return tok + + def _at_end(self): + return self.pos >= len(self.toks) + + def _kw(self, *words, offset=0): + k, v = self._peek(offset) + return k == "word" and v is not None and v.upper() in words + + def _comma(self): + return self._peek() == ("punct", ",") + + # -- entry -- + def parse(self) -> Table: + open_idx, close_idx = _locate_body(self.sql) + header = self.sql[:open_idx] if open_idx != -1 else self.sql + info = self._parse_header(header) + + if open_idx != -1 and not info["as_select"]: + body = self.sql[open_idx + 1:close_idx] if close_idx != -1 else self.sql[open_idx + 1:] + self.toks = _tokenize(body) + self._body() + + trailer = self.sql[close_idx + 1:] if close_idx != -1 else "" + ups = [t[1].upper() for t in _tokenize(trailer) if t[0] == "word"] + + return Table( + name=info["name"], columns=self.columns, constraints=self.table_constraints, + schema=info["schema"], temporary=info["temporary"], + if_not_exists=info["if_not_exists"], + without_rowid=("WITHOUT" in ups and "ROWID" in ups), + strict=("STRICT" in ups), + ) + + def _parse_header(self, header): + toks = _tokenize(header) + def up(k): return toks[k][1].upper() if 0 <= k < len(toks) and toks[k][0] == "word" else None + j = 0 + temporary = if_not_exists = as_select = False + schema = name = "" + if up(j) == "CREATE": j += 1 + if up(j) in ("TEMP", "TEMPORARY"): temporary = True; j += 1 + if up(j) == "TABLE": j += 1 + if up(j) == "IF" and up(j + 1) == "NOT" and up(j + 2) == "EXISTS": + if_not_exists = True; j += 3 + if j < len(toks): + first = _unquote(toks[j][1]); j += 1 + if j < len(toks) and toks[j] == ("punct", "."): + j += 1 + schema = first + name = _unquote(toks[j][1]) if j < len(toks) else ""; j += 1 + else: + name = first + if up(j) == "AS": + as_select = True + return dict(name=name, schema=schema, temporary=temporary, + if_not_exists=if_not_exists, as_select=as_select) + + def _body(self): + if self._at_end(): + return + self._definition() + while self._comma(): + self._advance() + if self._at_end(): + break + self._definition() + + def _definition(self): + if self._kw("CONSTRAINT") or self._kw(*_TABLE_CONSTRAINT): + self._table_constraint(self._constraint_name()) + else: + self._column_def() + + def _constraint_name(self): + if self._kw("CONSTRAINT"): + self._advance() + return _unquote(self._advance()[1]) + return "" + + # -- columns -- + def _column_def(self): + name = _unquote(self._advance()[1]) + ctype = self._type_name() + cons: List[Constraint] = [] + while not self._at_end() and not self._comma(): + c = self._column_constraint(name) + if c is not None: + cons.append(c) + self.columns.append(Column(name=name, type=ctype, constraints=cons)) + + def _type_name(self): + words = [] + while self._kind() == "word" and not self._starts_column_constraint(): + words.append(self._advance()[1]) + ctype = " ".join(words) + if words and self._kind() == "group": + ctype += self._advance()[1] + return ctype + + def _column_constraint(self, column): + name = self._constraint_name() + if self._kw("CHECK") and self._kind(1) == "group": + self._advance() + expr = self._advance()[1][1:-1].strip() + return Check(expr, name=name, column=column, options=_parse_options(expr)) + if self._kw("PRIMARY"): + self._advance() + if self._kw("KEY"): self._advance() + order = "" + if self._kw("ASC", "DESC"): order = self._advance()[1].upper() + self._conflict_clause() + auto = False + if self._kw("AUTOINCREMENT"): self._advance(); auto = True + return PrimaryKey([column], name=name, autoincrement=auto, order=order) + if self._kw("NOT"): + self._advance() + if self._kw("NULL"): self._advance() + self._conflict_clause() + return NotNull(column, name=name) + if self._kw("NULL"): + self._advance(); self._conflict_clause(); return None + if self._kw("UNIQUE"): + self._advance(); self._conflict_clause() + return Unique([column], name=name) + if self._kw("DEFAULT"): + self._advance() + return Default(column, self._default_value(), name=name) + if self._kw("COLLATE"): + self._advance() + coll = _unquote(self._advance()[1]) + return Collate(column, coll, name=name) + if self._kw("REFERENCES"): + return self._foreign_key_clause([column], name) + if self._kw("GENERATED", "AS"): + return self._generated(column, name) + # unknown: consume one token to guarantee progress + self._advance() + return None + + def _default_value(self): + k, v = self._peek() + if k == "group": + self._advance(); return v[1:-1].strip() + if k == "punct" and v in "+-": + self._advance(); return v + (self._advance()[1] or "") + self._advance(); return v + + def _generated(self, column, name): + if self._kw("GENERATED"): + self._advance() + if self._kw("ALWAYS"): self._advance() + if self._kw("AS"): self._advance() + expr = "" + if self._kind() == "group": + expr = self._advance()[1][1:-1].strip() + stored = False + if self._kw("STORED"): self._advance(); stored = True + elif self._kw("VIRTUAL"): self._advance() + return Generated(column, expr, stored=stored, name=name) + + def _conflict_clause(self): + if self._kw("ON") and self._kw("CONFLICT", offset=1): + self._advance(); self._advance() + if self._kind() == "word": self._advance() + + def _foreign_key_clause(self, columns, name): + self._advance() # REFERENCES + table = _unquote(self._advance()[1]) if self._kind() in ("word", "string") else "" + refs = [] + if self._kind() == "group": + refs = [_leading_ident(p) for p in _split_top_level(self._advance()[1][1:-1])] + on_delete = on_update = "NO ACTION" + while True: + if self._kw("ON"): + self._advance() + which = (self._advance()[1] or "").upper() # DELETE | UPDATE + action = self._fk_action() + if which == "DELETE": on_delete = action + elif which == "UPDATE": on_update = action + elif self._kw("MATCH"): + self._advance() + if self._kind() == "word": self._advance() + elif self._kw("DEFERRABLE") or (self._kw("NOT") and self._kw("DEFERRABLE", offset=1)): + if self._kw("NOT"): self._advance() + self._advance() # DEFERRABLE + if self._kw("INITIALLY"): + self._advance() + if self._kind() == "word": self._advance() + else: + break + return ForeignKey(columns, table, references=refs, + on_delete=on_delete, on_update=on_update, name=name) + + def _fk_action(self): + if self._kw("SET"): + self._advance() + return "SET " + (self._advance()[1] or "").upper() + if self._kw("NO"): + self._advance() + if self._kind() == "word": self._advance() + return "NO ACTION" + if self._kind() == "word": + return (self._advance()[1] or "").upper() + return "" + + def _starts_column_constraint(self, offset=0): + k, v = self._peek(offset) + if k != "word": + return False + up = v.upper() + if up == "NOT": + return self._kw("NULL", offset=offset + 1) + if up == "DEFAULT": + return not self._kw("SET", offset=offset - 1) + if up == "CONSTRAINT": + return True + return up in _COLUMN_CONSTRAINT + + # -- table constraints -- + def _table_constraint(self, name): + if self._kw("CHECK") and self._kind(1) == "group": + self._advance() + expr = self._advance()[1][1:-1].strip() + self.table_constraints.append( + Check(expr, name=name, column="", options=_parse_options(expr))) + elif self._kw("PRIMARY"): + self._advance() + if self._kw("KEY"): self._advance() + cols = self._column_list_group() + self._conflict_clause() + self.table_constraints.append(PrimaryKey(cols, name=name)) + elif self._kw("UNIQUE"): + self._advance() + cols = self._column_list_group() + self._conflict_clause() + self.table_constraints.append(Unique(cols, name=name)) + elif self._kw("FOREIGN"): + self._advance() + if self._kw("KEY"): self._advance() + cols = self._column_list_group() + self.table_constraints.append(self._foreign_key_clause(cols, name)) + # consume any remainder up to the next top-level comma + while not self._at_end() and not self._comma(): + self._advance() + + def _column_list_group(self): + if self._kind() == "group": + return [_leading_ident(p) for p in _split_top_level(self._advance()[1][1:-1])] + return [] + + +# --------------------------------------------------------------------------- # +# Public API +# --------------------------------------------------------------------------- # + +def parse_create_table(create_sql) -> Table: + """Parse a CREATE TABLE statement into a Table.""" + return _TableParser(create_sql).parse() + + +def parse_checks(create_sql) -> List[Check]: + """Backwards-compatible helper: just the CHECK constraints, in declaration order.""" + return parse_create_table(create_sql).checks diff --git a/tests/invalid_create_table.json b/tests/invalid_create_table.json new file mode 100644 index 0000000..06f06a3 --- /dev/null +++ b/tests/invalid_create_table.json @@ -0,0 +1,31 @@ +[ + "CREATE TABLE t1(c1 one(number))", + "CREATE TABLE sqlite_abc(a, b, c)", + "CREATE TABLE temp.sqlite_helloworld(x)", + "CREATE TABLE auxa.\"sqlite__\"(x, y)", + "CREATE TABLE auxb.\"sqlite_\"(z)", + "CREATE TABLE \"SQLITE_TBL\"(z)", + "CREATE TABLE george.t1(a, b)", + "CREATE TABLE _.t1(a, b)", + "CREATE TEMP TABLE main.t1(a, b)", + "CREATE TEMPORARY TABLE auxa.t2(a, b)", + "CREATE TEMP TABLE auxb.t3(a, b)", + "CREATE TEMPORARY TABLE main.xxx(x)", + "CREATE TABLE t5(x DEFAULT ( (SELECT 1) ))", + "CREATE TABLE t5(x DEFAULT ( \"abc\" ))", + "CREATE TABLE t5(x DEFAULT ( 1 IN (SELECT 1) ))", + "CREATE TABLE t5(x DEFAULT ( EXISTS (SELECT 1) ))", + "CREATE TABLE t5(x DEFAULT ( x!=?1 ))", + "CREATE TABLE t10(c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30, c31, c32, c33, c34, c35, c36, c37, c38, c39, c40, c41, c42, c43, c44, c45, c46, c47, c48, c49, c50, c51, c52, c53, c54, c55, c56, c57, c58, c59, c60, c61, c62, c63, c64, c65, c66, c67, c68, c69, c70, c71, c72, c73, c74, c75, c76, c77, c78, c79, c80, c81, c82, c83, c84, c85, c86, c87, c88, c89, c90, c91, c92, c93, c94, c95, c96, c97, c98, c99, c100, c101, c102, c103, c104, c105, c106, c107, c108, c109, c110, c111, c112, c113, c114, c115, c116, c117, c118, c119, c120, c121, c122, c123, c124, c125, c126, c127, c128, c129, c130, c131, c132, c133, c134, c135, c136, c137, c138, c139, c140, c141, c142, c143, c144, c145, c146, c147, c148, c149, c150, c151, c152, c153, c154, c155, c156, c157, c158, c159, c160, c161, c162, c163, c164, c165, c166, c167, c168, c169, c170, c171, c172, c173, c174, c175, c176, c177, c178, c179, c180, c181, c182, c183, c184, c185, c186, c187, c188, c189, c190, c191, c192, c193, c194, c195, c196, c197, c198, c199, c200, c201, c202, c203, c204, c205, c206, c207, c208, c209, c210, c211, c212, c213, c214, c215, c216, c217, c218, c219, c220, c221, c222, c223, c224, c225, c226, c227, c228, c229, c230, c231, c232, c233, c234, c235, c236, c237, c238, c239, c240, c241, c242, c243, c244, c245, c246, c247, c248, c249, c250, c251, c252, c253, c254, c255, c256, c257, c258, c259, c260, c261, c262, c263, c264, c265, c266, c267, c268, c269, c270, c271, c272, c273, c274, c275, c276, c277, c278, c279, c280, c281, c282, c283, c284, c285, c286, c287, c288, c289, c290, c291, c292, c293, c294, c295, c296, c297, c298, c299, c300, c301, c302, c303, c304, c305, c306, c307, c308, c309, c310, c311, c312, c313, c314, c315, c316, c317, c318, c319, c320, c321, c322, c323, c324, c325, c326, c327, c328, c329, c330, c331, c332, c333, c334, c335, c336, c337, c338, c339, c340, c341, c342, c343, c344, c345, c346, c347, c348, c349, c350, c351, c352, c353, c354, c355, c356, c357, c358, c359, c360, c361, c362, c363, c364, c365, c366, c367, c368, c369, c370, c371, c372, c373, c374, c375, c376, c377, c378, c379, c380, c381, c382, c383, c384, c385, c386, c387, c388, c389, c390, c391, c392, c393, c394, c395, c396, c397, c398, c399, c400, c401, c402, c403, c404, c405, c406, c407, c408, c409, c410, c411, c412, c413, c414, c415, c416, c417, c418, c419, c420, c421, c422, c423, c424, c425, c426, c427, c428, c429, c430, c431, c432, c433, c434, c435, c436, c437, c438, c439, c440, c441, c442, c443, c444, c445, c446, c447, c448, c449, c450, c451, c452, c453, c454, c455, c456, c457, c458, c459, c460, c461, c462, c463, c464, c465, c466, c467, c468, c469, c470, c471, c472, c473, c474, c475, c476, c477, c478, c479, c480, c481, c482, c483, c484, c485, c486, c487, c488, c489, c490, c491, c492, c493, c494, c495, c496, c497, c498, c499, c500, c501, c502, c503, c504, c505, c506, c507, c508, c509, c510, c511, c512, c513, c514, c515, c516, c517, c518, c519, c520, c521, c522, c523, c524, c525, c526, c527, c528, c529, c530, c531, c532, c533, c534, c535, c536, c537, c538, c539, c540, c541, c542, c543, c544, c545, c546, c547, c548, c549, c550, c551, c552, c553, c554, c555, c556, c557, c558, c559, c560, c561, c562, c563, c564, c565, c566, c567, c568, c569, c570, c571, c572, c573, c574, c575, c576, c577, c578, c579, c580, c581, c582, c583, c584, c585, c586, c587, c588, c589, c590, c591, c592, c593, c594, c595, c596, c597, c598, c599, c600, c601, c602, c603, c604, c605, c606, c607, c608, c609, c610, c611, c612, c613, c614, c615, c616, c617, c618, c619, c620, c621, c622, c623, c624, c625, c626, c627, c628, c629, c630, c631, c632, c633, c634, c635, c636, c637, c638, c639, c640, c641, c642, c643, c644, c645, c646, c647, c648, c649, c650, c651, c652, c653, c654, c655, c656, c657, c658, c659, c660, c661, c662, c663, c664, c665, c666, c667, c668, c669, c670, c671, c672, c673, c674, c675, c676, c677, c678, c679, c680, c681, c682, c683, c684, c685, c686, c687, c688, c689, c690, c691, c692, c693, c694, c695, c696, c697, c698, c699, c700, c701, c702, c703, c704, c705, c706, c707, c708, c709, c710, c711, c712, c713, c714, c715, c716, c717, c718, c719, c720, c721, c722, c723, c724, c725, c726, c727, c728, c729, c730, c731, c732, c733, c734, c735, c736, c737, c738, c739, c740, c741, c742, c743, c744, c745, c746, c747, c748, c749, c750, c751, c752, c753, c754, c755, c756, c757, c758, c759, c760, c761, c762, c763, c764, c765, c766, c767, c768, c769, c770, c771, c772, c773, c774, c775, c776, c777, c778, c779, c780, c781, c782, c783, c784, c785, c786, c787, c788, c789, c790, c791, c792, c793, c794, c795, c796, c797, c798, c799, c800, c801, c802, c803, c804, c805, c806, c807, c808, c809, c810, c811, c812, c813, c814, c815, c816, c817, c818, c819, c820, c821, c822, c823, c824, c825, c826, c827, c828, c829, c830, c831, c832, c833, c834, c835, c836, c837, c838, c839, c840, c841, c842, c843, c844, c845, c846, c847, c848, c849, c850, c851, c852, c853, c854, c855, c856, c857, c858, c859, c860, c861, c862, c863, c864, c865, c866, c867, c868, c869, c870, c871, c872, c873, c874, c875, c876, c877, c878, c879, c880, c881, c882, c883, c884, c885, c886, c887, c888, c889, c890, c891, c892, c893, c894, c895, c896, c897, c898, c899, c900, c901, c902, c903, c904, c905, c906, c907, c908, c909, c910, c911, c912, c913, c914, c915, c916, c917, c918, c919, c920, c921, c922, c923, c924, c925, c926, c927, c928, c929, c930, c931, c932, c933, c934, c935, c936, c937, c938, c939, c940, c941, c942, c943, c944, c945, c946, c947, c948, c949, c950, c951, c952, c953, c954, c955, c956, c957, c958, c959, c960, c961, c962, c963, c964, c965, c966, c967, c968, c969, c970, c971, c972, c973, c974, c975, c976, c977, c978, c979, c980, c981, c982, c983, c984, c985, c986, c987, c988, c989, c990, c991, c992, c993, c994, c995, c996, c997, c998, c999, c1000, c1001, c1002, c1003, c1004, c1005, c1006, c1007, c1008, c1009, c1010, c1011, c1012, c1013, c1014, c1015, c1016, c1017, c1018, c1019, c1020, c1021, c1022, c1023, c1024, c1025, c1026, c1027, c1028, c1029, c1030, c1031, c1032, c1033, c1034, c1035, c1036, c1037, c1038, c1039, c1040, c1041, c1042, c1043, c1044, c1045, c1046, c1047, c1048, c1049, c1050, c1051, c1052, c1053, c1054, c1055, c1056, c1057, c1058, c1059, c1060, c1061, c1062, c1063, c1064, c1065, c1066, c1067, c1068, c1069, c1070, c1071, c1072, c1073, c1074, c1075, c1076, c1077, c1078, c1079, c1080, c1081, c1082, c1083, c1084, c1085, c1086, c1087, c1088, c1089, c1090, c1091, c1092, c1093, c1094, c1095, c1096, c1097, c1098, c1099, c1100, c1101, c1102, c1103, c1104, c1105, c1106, c1107, c1108, c1109, c1110, c1111, c1112, c1113, c1114, c1115, c1116, c1117, c1118, c1119, c1120, c1121, c1122, c1123, c1124, c1125, c1126, c1127, c1128, c1129, c1130, c1131, c1132, c1133, c1134, c1135, c1136, c1137, c1138, c1139, c1140, c1141, c1142, c1143, c1144, c1145, c1146, c1147, c1148, c1149, c1150, c1151, c1152, c1153, c1154, c1155, c1156, c1157, c1158, c1159, c1160, c1161, c1162, c1163, c1164, c1165, c1166, c1167, c1168, c1169, c1170, c1171, c1172, c1173, c1174, c1175, c1176, c1177, c1178, c1179, c1180, c1181, c1182, c1183, c1184, c1185, c1186, c1187, c1188, c1189, c1190, c1191, c1192, c1193, c1194, c1195, c1196, c1197, c1198, c1199, c1200, c1201, c1202, c1203, c1204, c1205, c1206, c1207, c1208, c1209, c1210, c1211, c1212, c1213, c1214, c1215, c1216, c1217, c1218, c1219, c1220, c1221, c1222, c1223, c1224, c1225, c1226, c1227, c1228, c1229, c1230, c1231, c1232, c1233, c1234, c1235, c1236, c1237, c1238, c1239, c1240, c1241, c1242, c1243, c1244, c1245, c1246, c1247, c1248, c1249, c1250, c1251, c1252, c1253, c1254, c1255, c1256, c1257, c1258, c1259, c1260, c1261, c1262, c1263, c1264, c1265, c1266, c1267, c1268, c1269, c1270, c1271, c1272, c1273, c1274, c1275, c1276, c1277, c1278, c1279, c1280, c1281, c1282, c1283, c1284, c1285, c1286, c1287, c1288, c1289, c1290, c1291, c1292, c1293, c1294, c1295, c1296, c1297, c1298, c1299, c1300, c1301, c1302, c1303, c1304, c1305, c1306, c1307, c1308, c1309, c1310, c1311, c1312, c1313, c1314, c1315, c1316, c1317, c1318, c1319, c1320, c1321, c1322, c1323, c1324, c1325, c1326, c1327, c1328, c1329, c1330, c1331, c1332, c1333, c1334, c1335, c1336, c1337, c1338, c1339, c1340, c1341, c1342, c1343, c1344, c1345, c1346, c1347, c1348, c1349, c1350, c1351, c1352, c1353, c1354, c1355, c1356, c1357, c1358, c1359, c1360, c1361, c1362, c1363, c1364, c1365, c1366, c1367, c1368, c1369, c1370, c1371, c1372, c1373, c1374, c1375, c1376, c1377, c1378, c1379, c1380, c1381, c1382, c1383, c1384, c1385, c1386, c1387, c1388, c1389, c1390, c1391, c1392, c1393, c1394, c1395, c1396, c1397, c1398, c1399, c1400, c1401, c1402, c1403, c1404, c1405, c1406, c1407, c1408, c1409, c1410, c1411, c1412, c1413, c1414, c1415, c1416, c1417, c1418, c1419, c1420, c1421, c1422, c1423, c1424, c1425, c1426, c1427, c1428, c1429, c1430, c1431, c1432, c1433, c1434, c1435, c1436, c1437, c1438, c1439, c1440, c1441, c1442, c1443, c1444, c1445, c1446, c1447, c1448, c1449, c1450, c1451, c1452, c1453, c1454, c1455, c1456, c1457, c1458, c1459, c1460, c1461, c1462, c1463, c1464, c1465, c1466, c1467, c1468, c1469, c1470, c1471, c1472, c1473, c1474, c1475, c1476, c1477, c1478, c1479, c1480, c1481, c1482, c1483, c1484, c1485, c1486, c1487, c1488, c1489, c1490, c1491, c1492, c1493, c1494, c1495, c1496, c1497, c1498, c1499, c1500, c1501, c1502, c1503, c1504, c1505, c1506, c1507, c1508, c1509, c1510, c1511, c1512, c1513, c1514, c1515, c1516, c1517, c1518, c1519, c1520, c1521, c1522, c1523, c1524, c1525, c1526, c1527, c1528, c1529, c1530, c1531, c1532, c1533, c1534, c1535, c1536, c1537, c1538, c1539, c1540, c1541, c1542, c1543, c1544, c1545, c1546, c1547, c1548, c1549, c1550, c1551, c1552, c1553, c1554, c1555, c1556, c1557, c1558, c1559, c1560, c1561, c1562, c1563, c1564, c1565, c1566, c1567, c1568, c1569, c1570, c1571, c1572, c1573, c1574, c1575, c1576, c1577, c1578, c1579, c1580, c1581, c1582, c1583, c1584, c1585, c1586, c1587, c1588, c1589, c1590, c1591, c1592, c1593, c1594, c1595, c1596, c1597, c1598, c1599, c1600, c1601, c1602, c1603, c1604, c1605, c1606, c1607, c1608, c1609, c1610, c1611, c1612, c1613, c1614, c1615, c1616, c1617, c1618, c1619, c1620, c1621, c1622, c1623, c1624, c1625, c1626, c1627, c1628, c1629, c1630, c1631, c1632, c1633, c1634, c1635, c1636, c1637, c1638, c1639, c1640, c1641, c1642, c1643, c1644, c1645, c1646, c1647, c1648, c1649, c1650, c1651, c1652, c1653, c1654, c1655, c1656, c1657, c1658, c1659, c1660, c1661, c1662, c1663, c1664, c1665, c1666, c1667, c1668, c1669, c1670, c1671, c1672, c1673, c1674, c1675, c1676, c1677, c1678, c1679, c1680, c1681, c1682, c1683, c1684, c1685, c1686, c1687, c1688, c1689, c1690, c1691, c1692, c1693, c1694, c1695, c1696, c1697, c1698, c1699, c1700, c1701, c1702, c1703, c1704, c1705, c1706, c1707, c1708, c1709, c1710, c1711, c1712, c1713, c1714, c1715, c1716, c1717, c1718, c1719, c1720, c1721, c1722, c1723, c1724, c1725, c1726, c1727, c1728, c1729, c1730, c1731, c1732, c1733, c1734, c1735, c1736, c1737, c1738, c1739, c1740, c1741, c1742, c1743, c1744, c1745, c1746, c1747, c1748, c1749, c1750, c1751, c1752, c1753, c1754, c1755, c1756, c1757, c1758, c1759, c1760, c1761, c1762, c1763, c1764, c1765, c1766, c1767, c1768, c1769, c1770, c1771, c1772, c1773, c1774, c1775, c1776, c1777, c1778, c1779, c1780, c1781, c1782, c1783, c1784, c1785, c1786, c1787, c1788, c1789, c1790, c1791, c1792, c1793, c1794, c1795, c1796, c1797, c1798, c1799, c1800, c1801, c1802, c1803, c1804, c1805, c1806, c1807, c1808, c1809, c1810, c1811, c1812, c1813, c1814, c1815, c1816, c1817, c1818, c1819, c1820, c1821, c1822, c1823, c1824, c1825, c1826, c1827, c1828, c1829, c1830, c1831, c1832, c1833, c1834, c1835, c1836, c1837, c1838, c1839, c1840, c1841, c1842, c1843, c1844, c1845, c1846, c1847, c1848, c1849, c1850, c1851, c1852, c1853, c1854, c1855, c1856, c1857, c1858, c1859, c1860, c1861, c1862, c1863, c1864, c1865, c1866, c1867, c1868, c1869, c1870, c1871, c1872, c1873, c1874, c1875, c1876, c1877, c1878, c1879, c1880, c1881, c1882, c1883, c1884, c1885, c1886, c1887, c1888, c1889, c1890, c1891, c1892, c1893, c1894, c1895, c1896, c1897, c1898, c1899, c1900, c1901, c1902, c1903, c1904, c1905, c1906, c1907, c1908, c1909, c1910, c1911, c1912, c1913, c1914, c1915, c1916, c1917, c1918, c1919, c1920, c1921, c1922, c1923, c1924, c1925, c1926, c1927, c1928, c1929, c1930, c1931, c1932, c1933, c1934, c1935, c1936, c1937, c1938, c1939, c1940, c1941, c1942, c1943, c1944, c1945, c1946, c1947, c1948, c1949, c1950, c1951, c1952, c1953, c1954, c1955, c1956, c1957, c1958, c1959, c1960, c1961, c1962, c1963, c1964, c1965, c1966, c1967, c1968, c1969, c1970, c1971, c1972, c1973, c1974, c1975, c1976, c1977, c1978, c1979, c1980, c1981, c1982, c1983, c1984, c1985, c1986, c1987, c1988, c1989, c1990, c1991, c1992, c1993, c1994, c1995, c1996, c1997, c1998, c1999, c2000)", + "CREATE TABLE t11(c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30, c31, c32, c33, c34, c35, c36, c37, c38, c39, c40, c41, c42, c43, c44, c45, c46, c47, c48, c49, c50, c51, c52, c53, c54, c55, c56, c57, c58, c59, c60, c61, c62, c63, c64, c65, c66, c67, c68, c69, c70, c71, c72, c73, c74, c75, c76, c77, c78, c79, c80, c81, c82, c83, c84, c85, c86, c87, c88, c89, c90, c91, c92, c93, c94, c95, c96, c97, c98, c99, c100, c101, c102, c103, c104, c105, c106, c107, c108, c109, c110, c111, c112, c113, c114, c115, c116, c117, c118, c119, c120, c121, c122, c123, c124, c125, c126, c127, c128, c129, c130, c131, c132, c133, c134, c135, c136, c137, c138, c139, c140, c141, c142, c143, c144, c145, c146, c147, c148, c149, c150, c151, c152, c153, c154, c155, c156, c157, c158, c159, c160, c161, c162, c163, c164, c165, c166, c167, c168, c169, c170, c171, c172, c173, c174, c175, c176, c177, c178, c179, c180, c181, c182, c183, c184, c185, c186, c187, c188, c189, c190, c191, c192, c193, c194, c195, c196, c197, c198, c199, c200, c201, c202, c203, c204, c205, c206, c207, c208, c209, c210, c211, c212, c213, c214, c215, c216, c217, c218, c219, c220, c221, c222, c223, c224, c225, c226, c227, c228, c229, c230, c231, c232, c233, c234, c235, c236, c237, c238, c239, c240, c241, c242, c243, c244, c245, c246, c247, c248, c249, c250, c251, c252, c253, c254, c255, c256, c257, c258, c259, c260, c261, c262, c263, c264, c265, c266, c267, c268, c269, c270, c271, c272, c273, c274, c275, c276, c277, c278, c279, c280, c281, c282, c283, c284, c285, c286, c287, c288, c289, c290, c291, c292, c293, c294, c295, c296, c297, c298, c299, c300, c301, c302, c303, c304, c305, c306, c307, c308, c309, c310, c311, c312, c313, c314, c315, c316, c317, c318, c319, c320, c321, c322, c323, c324, c325, c326, c327, c328, c329, c330, c331, c332, c333, c334, c335, c336, c337, c338, c339, c340, c341, c342, c343, c344, c345, c346, c347, c348, c349, c350, c351, c352, c353, c354, c355, c356, c357, c358, c359, c360, c361, c362, c363, c364, c365, c366, c367, c368, c369, c370, c371, c372, c373, c374, c375, c376, c377, c378, c379, c380, c381, c382, c383, c384, c385, c386, c387, c388, c389, c390, c391, c392, c393, c394, c395, c396, c397, c398, c399, c400, c401, c402, c403, c404, c405, c406, c407, c408, c409, c410, c411, c412, c413, c414, c415, c416, c417, c418, c419, c420, c421, c422, c423, c424, c425, c426, c427, c428, c429, c430, c431, c432, c433, c434, c435, c436, c437, c438, c439, c440, c441, c442, c443, c444, c445, c446, c447, c448, c449, c450, c451, c452, c453, c454, c455, c456, c457, c458, c459, c460, c461, c462, c463, c464, c465, c466, c467, c468, c469, c470, c471, c472, c473, c474, c475, c476, c477, c478, c479, c480, c481, c482, c483, c484, c485, c486, c487, c488, c489, c490, c491, c492, c493, c494, c495, c496, c497, c498, c499, c500, c501, c502, c503, c504, c505, c506, c507, c508, c509, c510, c511, c512, c513, c514, c515, c516, c517, c518, c519, c520, c521, c522, c523, c524, c525, c526, c527, c528, c529, c530, c531, c532, c533, c534, c535, c536, c537, c538, c539, c540, c541, c542, c543, c544, c545, c546, c547, c548, c549, c550, c551, c552, c553, c554, c555, c556, c557, c558, c559, c560, c561, c562, c563, c564, c565, c566, c567, c568, c569, c570, c571, c572, c573, c574, c575, c576, c577, c578, c579, c580, c581, c582, c583, c584, c585, c586, c587, c588, c589, c590, c591, c592, c593, c594, c595, c596, c597, c598, c599, c600, c601, c602, c603, c604, c605, c606, c607, c608, c609, c610, c611, c612, c613, c614, c615, c616, c617, c618, c619, c620, c621, c622, c623, c624, c625, c626, c627, c628, c629, c630, c631, c632, c633, c634, c635, c636, c637, c638, c639, c640, c641, c642, c643, c644, c645, c646, c647, c648, c649, c650, c651, c652, c653, c654, c655, c656, c657, c658, c659, c660, c661, c662, c663, c664, c665, c666, c667, c668, c669, c670, c671, c672, c673, c674, c675, c676, c677, c678, c679, c680, c681, c682, c683, c684, c685, c686, c687, c688, c689, c690, c691, c692, c693, c694, c695, c696, c697, c698, c699, c700, c701, c702, c703, c704, c705, c706, c707, c708, c709, c710, c711, c712, c713, c714, c715, c716, c717, c718, c719, c720, c721, c722, c723, c724, c725, c726, c727, c728, c729, c730, c731, c732, c733, c734, c735, c736, c737, c738, c739, c740, c741, c742, c743, c744, c745, c746, c747, c748, c749, c750, c751, c752, c753, c754, c755, c756, c757, c758, c759, c760, c761, c762, c763, c764, c765, c766, c767, c768, c769, c770, c771, c772, c773, c774, c775, c776, c777, c778, c779, c780, c781, c782, c783, c784, c785, c786, c787, c788, c789, c790, c791, c792, c793, c794, c795, c796, c797, c798, c799, c800, c801, c802, c803, c804, c805, c806, c807, c808, c809, c810, c811, c812, c813, c814, c815, c816, c817, c818, c819, c820, c821, c822, c823, c824, c825, c826, c827, c828, c829, c830, c831, c832, c833, c834, c835, c836, c837, c838, c839, c840, c841, c842, c843, c844, c845, c846, c847, c848, c849, c850, c851, c852, c853, c854, c855, c856, c857, c858, c859, c860, c861, c862, c863, c864, c865, c866, c867, c868, c869, c870, c871, c872, c873, c874, c875, c876, c877, c878, c879, c880, c881, c882, c883, c884, c885, c886, c887, c888, c889, c890, c891, c892, c893, c894, c895, c896, c897, c898, c899, c900, c901, c902, c903, c904, c905, c906, c907, c908, c909, c910, c911, c912, c913, c914, c915, c916, c917, c918, c919, c920, c921, c922, c923, c924, c925, c926, c927, c928, c929, c930, c931, c932, c933, c934, c935, c936, c937, c938, c939, c940, c941, c942, c943, c944, c945, c946, c947, c948, c949, c950, c951, c952, c953, c954, c955, c956, c957, c958, c959, c960, c961, c962, c963, c964, c965, c966, c967, c968, c969, c970, c971, c972, c973, c974, c975, c976, c977, c978, c979, c980, c981, c982, c983, c984, c985, c986, c987, c988, c989, c990, c991, c992, c993, c994, c995, c996, c997, c998, c999, c1000, c1001, c1002, c1003, c1004, c1005, c1006, c1007, c1008, c1009, c1010, c1011, c1012, c1013, c1014, c1015, c1016, c1017, c1018, c1019, c1020, c1021, c1022, c1023, c1024, c1025, c1026, c1027, c1028, c1029, c1030, c1031, c1032, c1033, c1034, c1035, c1036, c1037, c1038, c1039, c1040, c1041, c1042, c1043, c1044, c1045, c1046, c1047, c1048, c1049, c1050, c1051, c1052, c1053, c1054, c1055, c1056, c1057, c1058, c1059, c1060, c1061, c1062, c1063, c1064, c1065, c1066, c1067, c1068, c1069, c1070, c1071, c1072, c1073, c1074, c1075, c1076, c1077, c1078, c1079, c1080, c1081, c1082, c1083, c1084, c1085, c1086, c1087, c1088, c1089, c1090, c1091, c1092, c1093, c1094, c1095, c1096, c1097, c1098, c1099, c1100, c1101, c1102, c1103, c1104, c1105, c1106, c1107, c1108, c1109, c1110, c1111, c1112, c1113, c1114, c1115, c1116, c1117, c1118, c1119, c1120, c1121, c1122, c1123, c1124, c1125, c1126, c1127, c1128, c1129, c1130, c1131, c1132, c1133, c1134, c1135, c1136, c1137, c1138, c1139, c1140, c1141, c1142, c1143, c1144, c1145, c1146, c1147, c1148, c1149, c1150, c1151, c1152, c1153, c1154, c1155, c1156, c1157, c1158, c1159, c1160, c1161, c1162, c1163, c1164, c1165, c1166, c1167, c1168, c1169, c1170, c1171, c1172, c1173, c1174, c1175, c1176, c1177, c1178, c1179, c1180, c1181, c1182, c1183, c1184, c1185, c1186, c1187, c1188, c1189, c1190, c1191, c1192, c1193, c1194, c1195, c1196, c1197, c1198, c1199, c1200, c1201, c1202, c1203, c1204, c1205, c1206, c1207, c1208, c1209, c1210, c1211, c1212, c1213, c1214, c1215, c1216, c1217, c1218, c1219, c1220, c1221, c1222, c1223, c1224, c1225, c1226, c1227, c1228, c1229, c1230, c1231, c1232, c1233, c1234, c1235, c1236, c1237, c1238, c1239, c1240, c1241, c1242, c1243, c1244, c1245, c1246, c1247, c1248, c1249, c1250, c1251, c1252, c1253, c1254, c1255, c1256, c1257, c1258, c1259, c1260, c1261, c1262, c1263, c1264, c1265, c1266, c1267, c1268, c1269, c1270, c1271, c1272, c1273, c1274, c1275, c1276, c1277, c1278, c1279, c1280, c1281, c1282, c1283, c1284, c1285, c1286, c1287, c1288, c1289, c1290, c1291, c1292, c1293, c1294, c1295, c1296, c1297, c1298, c1299, c1300, c1301, c1302, c1303, c1304, c1305, c1306, c1307, c1308, c1309, c1310, c1311, c1312, c1313, c1314, c1315, c1316, c1317, c1318, c1319, c1320, c1321, c1322, c1323, c1324, c1325, c1326, c1327, c1328, c1329, c1330, c1331, c1332, c1333, c1334, c1335, c1336, c1337, c1338, c1339, c1340, c1341, c1342, c1343, c1344, c1345, c1346, c1347, c1348, c1349, c1350, c1351, c1352, c1353, c1354, c1355, c1356, c1357, c1358, c1359, c1360, c1361, c1362, c1363, c1364, c1365, c1366, c1367, c1368, c1369, c1370, c1371, c1372, c1373, c1374, c1375, c1376, c1377, c1378, c1379, c1380, c1381, c1382, c1383, c1384, c1385, c1386, c1387, c1388, c1389, c1390, c1391, c1392, c1393, c1394, c1395, c1396, c1397, c1398, c1399, c1400, c1401, c1402, c1403, c1404, c1405, c1406, c1407, c1408, c1409, c1410, c1411, c1412, c1413, c1414, c1415, c1416, c1417, c1418, c1419, c1420, c1421, c1422, c1423, c1424, c1425, c1426, c1427, c1428, c1429, c1430, c1431, c1432, c1433, c1434, c1435, c1436, c1437, c1438, c1439, c1440, c1441, c1442, c1443, c1444, c1445, c1446, c1447, c1448, c1449, c1450, c1451, c1452, c1453, c1454, c1455, c1456, c1457, c1458, c1459, c1460, c1461, c1462, c1463, c1464, c1465, c1466, c1467, c1468, c1469, c1470, c1471, c1472, c1473, c1474, c1475, c1476, c1477, c1478, c1479, c1480, c1481, c1482, c1483, c1484, c1485, c1486, c1487, c1488, c1489, c1490, c1491, c1492, c1493, c1494, c1495, c1496, c1497, c1498, c1499, c1500, c1501, c1502, c1503, c1504, c1505, c1506, c1507, c1508, c1509, c1510, c1511, c1512, c1513, c1514, c1515, c1516, c1517, c1518, c1519, c1520, c1521, c1522, c1523, c1524, c1525, c1526, c1527, c1528, c1529, c1530, c1531, c1532, c1533, c1534, c1535, c1536, c1537, c1538, c1539, c1540, c1541, c1542, c1543, c1544, c1545, c1546, c1547, c1548, c1549, c1550, c1551, c1552, c1553, c1554, c1555, c1556, c1557, c1558, c1559, c1560, c1561, c1562, c1563, c1564, c1565, c1566, c1567, c1568, c1569, c1570, c1571, c1572, c1573, c1574, c1575, c1576, c1577, c1578, c1579, c1580, c1581, c1582, c1583, c1584, c1585, c1586, c1587, c1588, c1589, c1590, c1591, c1592, c1593, c1594, c1595, c1596, c1597, c1598, c1599, c1600, c1601, c1602, c1603, c1604, c1605, c1606, c1607, c1608, c1609, c1610, c1611, c1612, c1613, c1614, c1615, c1616, c1617, c1618, c1619, c1620, c1621, c1622, c1623, c1624, c1625, c1626, c1627, c1628, c1629, c1630, c1631, c1632, c1633, c1634, c1635, c1636, c1637, c1638, c1639, c1640, c1641, c1642, c1643, c1644, c1645, c1646, c1647, c1648, c1649, c1650, c1651, c1652, c1653, c1654, c1655, c1656, c1657, c1658, c1659, c1660, c1661, c1662, c1663, c1664, c1665, c1666, c1667, c1668, c1669, c1670, c1671, c1672, c1673, c1674, c1675, c1676, c1677, c1678, c1679, c1680, c1681, c1682, c1683, c1684, c1685, c1686, c1687, c1688, c1689, c1690, c1691, c1692, c1693, c1694, c1695, c1696, c1697, c1698, c1699, c1700, c1701, c1702, c1703, c1704, c1705, c1706, c1707, c1708, c1709, c1710, c1711, c1712, c1713, c1714, c1715, c1716, c1717, c1718, c1719, c1720, c1721, c1722, c1723, c1724, c1725, c1726, c1727, c1728, c1729, c1730, c1731, c1732, c1733, c1734, c1735, c1736, c1737, c1738, c1739, c1740, c1741, c1742, c1743, c1744, c1745, c1746, c1747, c1748, c1749, c1750, c1751, c1752, c1753, c1754, c1755, c1756, c1757, c1758, c1759, c1760, c1761, c1762, c1763, c1764, c1765, c1766, c1767, c1768, c1769, c1770, c1771, c1772, c1773, c1774, c1775, c1776, c1777, c1778, c1779, c1780, c1781, c1782, c1783, c1784, c1785, c1786, c1787, c1788, c1789, c1790, c1791, c1792, c1793, c1794, c1795, c1796, c1797, c1798, c1799, c1800, c1801, c1802, c1803, c1804, c1805, c1806, c1807, c1808, c1809, c1810, c1811, c1812, c1813, c1814, c1815, c1816, c1817, c1818, c1819, c1820, c1821, c1822, c1823, c1824, c1825, c1826, c1827, c1828, c1829, c1830, c1831, c1832, c1833, c1834, c1835, c1836, c1837, c1838, c1839, c1840, c1841, c1842, c1843, c1844, c1845, c1846, c1847, c1848, c1849, c1850, c1851, c1852, c1853, c1854, c1855, c1856, c1857, c1858, c1859, c1860, c1861, c1862, c1863, c1864, c1865, c1866, c1867, c1868, c1869, c1870, c1871, c1872, c1873, c1874, c1875, c1876, c1877, c1878, c1879, c1880, c1881, c1882, c1883, c1884, c1885, c1886, c1887, c1888, c1889, c1890, c1891, c1892, c1893, c1894, c1895, c1896, c1897, c1898, c1899, c1900, c1901, c1902, c1903, c1904, c1905, c1906, c1907, c1908, c1909, c1910, c1911, c1912, c1913, c1914, c1915, c1916, c1917, c1918, c1919, c1920, c1921, c1922, c1923, c1924, c1925, c1926, c1927, c1928, c1929, c1930, c1931, c1932, c1933, c1934, c1935, c1936, c1937, c1938, c1939, c1940, c1941, c1942, c1943, c1944, c1945, c1946, c1947, c1948, c1949, c1950, c1951, c1952, c1953, c1954, c1955, c1956, c1957, c1958, c1959, c1960, c1961, c1962, c1963, c1964, c1965, c1966, c1967, c1968, c1969, c1970, c1971, c1972, c1973, c1974, c1975, c1976, c1977, c1978, c1979, c1980, c1981, c1982, c1983, c1984, c1985, c1986, c1987, c1988, c1989, c1990, c1991, c1992, c1993, c1994, c1995, c1996, c1997, c1998, c1999, c2000)", + "CREATE TABLE t5(a PRIMARY KEY, b PRIMARY KEY, c)", + "CREATE TABLE t5(a, b PRIMARY KEY, c, PRIMARY KEY(a))", + "CREATE TABLE t5(a INTEGER PRIMARY KEY, b PRIMARY KEY, c)", + "CREATE TABLE t5(a INTEGER PRIMARY KEY, b, c, PRIMARY KEY(b, c))", + "CREATE TABLE t5(a PRIMARY KEY, b, c, PRIMARY KEY(a))", + "CREATE TABLE t5(a INTEGER PRIMARY KEY, b, c, PRIMARY KEY(a))", + "CREATE TABLE t7(a, b) WITHOUT ROWID", + "CREATE TABLE t4(a, b, NOT NULL(a))", + "CREATE TABLE t4(a PRIMARY KEY, b, NOT NULL(a))", + "CREATE TABLE t4(a, b, c UNIQUE, NOT NULL(a, b, c))" +] diff --git a/tests/valid_create_table.json b/tests/valid_create_table.json new file mode 100644 index 0000000..eaf00fa --- /dev/null +++ b/tests/valid_create_table.json @@ -0,0 +1,274 @@ +[ + "CREATE TABLE t1(c1 one)", + "CREATE TABLE t1(c1 one two)", + "CREATE TABLE t1(c1 one two three)", + "CREATE TABLE t1(c1 one two three four)", + "CREATE TABLE t1(c1 one two three four(14))", + "CREATE TABLE t1(c1 one two three four(14, 22))", + "CREATE TABLE t1(c1 var(+14, -22.3))", + "CREATE TABLE t1(c1 var(1.0e10))", + "CREATE TABLE t2(x PRIMARY KEY)", + "CREATE TABLE t1(c1 text PRIMARY KEY)", + "CREATE TABLE t1(c1 text PRIMARY KEY ASC)", + "CREATE TABLE t1(c1 text PRIMARY KEY DESC)", + "CREATE TABLE t1(c1 text CONSTRAINT cons PRIMARY KEY DESC)", + "CREATE TABLE t1(c1 text NOT NULL)", + "CREATE TABLE t1(c1 text CONSTRAINT nm NOT NULL)", + "CREATE TABLE t1(c1 text NULL)", + "CREATE TABLE t1(c1 text CONSTRAINT nm NULL)", + "CREATE TABLE t1(c1 text UNIQUE)", + "CREATE TABLE t1(c1 text CONSTRAINT un UNIQUE)", + "CREATE TABLE t1(c1 text CHECK(c1!=0))", + "CREATE TABLE t1(c1 text CONSTRAINT chk CHECK(c1!=0))", + "CREATE TABLE t1(c1 text DEFAULT 1)", + "CREATE TABLE t1(c1 text DEFAULT -1)", + "CREATE TABLE t1(c1 text DEFAULT +1)", + "CREATE TABLE t1(c1 text DEFAULT -45.8e22)", + "CREATE TABLE t1(c1 text DEFAULT (1+1))", + "CREATE TABLE t1(c1 text CONSTRAINT \"1 2\" DEFAULT (1+1))", + "CREATE TABLE t1(c1 text COLLATE nocase)", + "CREATE TABLE t1(c1 text CONSTRAINT 'a x' COLLATE nocase)", + "CREATE TABLE t1(c1 REFERENCES t2)", + "CREATE TABLE t1(c1 CONSTRAINT abc REFERENCES t2)", + "CREATE TABLE t1(c1 \n PRIMARY KEY NOT NULL UNIQUE CHECK(c1 IS 'ten') DEFAULT 123 REFERENCES t1\n )", + "CREATE TABLE t1(c1 \n REFERENCES t1 DEFAULT 123 CHECK(c1 IS 'ten') UNIQUE NOT NULL PRIMARY KEY \n )", + "CREATE TABLE t2(x PRIMARY KEY)", + "CREATE TABLE t1(c1, c2, PRIMARY KEY(c1))", + "CREATE TABLE t1(c1, c2, PRIMARY KEY(c1, c2))", + "CREATE TABLE t1(c1, c2, PRIMARY KEY(c1, c2) ON CONFLICT IGNORE)", + "CREATE TABLE t1(c1, c2, UNIQUE(c1))", + "CREATE TABLE t1(c1, c2, UNIQUE(c1, c2))", + "CREATE TABLE t1(c1, c2, UNIQUE(c1, c2) ON CONFLICT IGNORE)", + "CREATE TABLE t1(c1, c2, CHECK(c1 IS NOT c2))", + "CREATE TABLE t1(c1, c2, FOREIGN KEY(c1) REFERENCES t2)", + "CREATE TABLE t1(\n col1,\n col2 TEXT,\n col3 INTEGER UNIQUE,\n col4 VARCHAR(10, 10) PRIMARY KEY,\n \"name with spaces\" REFERENCES t1\n )", + "CREATE TABLE t2(a, b, c)", + "CREATE TABLE t1(a, b, c)", + "CREATE TEMP TABLE t1(a, b, c)", + "CREATE TEMPORARY TABLE t1(a, b, c)", + "CREATE TABLE IF NOT EXISTS t1(a, b, c)", + "CREATE TEMP TABLE IF NOT EXISTS t1(a, b, c)", + "CREATE TEMPORARY TABLE IF NOT EXISTS t1(a, b, c)", + "CREATE TABLE main.t1(a, b, c)", + "CREATE TEMP TABLE temp.t1(a, b, c)", + "CREATE TEMPORARY TABLE temp.t1(a, b, c)", + "CREATE TABLE IF NOT EXISTS main.t1(a, b, c)", + "CREATE TEMP TABLE IF NOT EXISTS temp.t1(a, b, c)", + "CREATE TEMPORARY TABLE IF NOT EXISTS temp.t1(a, b, c)", + "CREATE TABLE t1 AS SELECT * FROM t2", + "CREATE TEMP TABLE t1 AS SELECT c, b, a FROM t2", + "CREATE TABLE t1 AS SELECT count(*), max(b), min(a) FROM t2", + "CREATE TABLE t2(x PRIMARY KEY, y)", + "CREATE TABLE t3(i, j, UNIQUE(i, j) )", + "CREATE TABLE t1(a \n REFERENCES t2(x) MATCH FULL \n ON DELETE SET NULL ON UPDATE RESTRICT DEFERRABLE\n )", + "CREATE TABLE t1(a \n REFERENCES t2(x) \n ON DELETE RESTRICT ON UPDATE SET NULL MATCH FULL \n NOT DEFERRABLE INITIALLY IMMEDIATE\n )", + "CREATE TABLE t1(a \n REFERENCES t2(x) MATCH PARTIAL \n ON DELETE SET NULL ON UPDATE CASCADE DEFERRABLE INITIALLY IMMEDIATE\n )", + "CREATE TABLE t1(a \n REFERENCES t2(x) MATCH PARTIAL \n ON DELETE RESTRICT ON UPDATE SET DEFAULT \n )", + "CREATE TABLE t1(a \n REFERENCES t2(x) MATCH PARTIAL \n ON DELETE RESTRICT ON UPDATE RESTRICT DEFERRABLE\n )", + "CREATE TABLE t1(a \n REFERENCES t2(x) MATCH PARTIAL \n ON DELETE NO ACTION ON UPDATE SET DEFAULT NOT DEFERRABLE INITIALLY IMMEDIATE\n )", + "CREATE TABLE t1(a \n REFERENCES t2(x) MATCH SIMPLE \n ON DELETE SET NULL ON UPDATE CASCADE NOT DEFERRABLE\n )", + "CREATE TABLE t1(a \n REFERENCES t2(x) MATCH SIMPLE \n ON DELETE SET DEFAULT ON UPDATE SET NULL DEFERRABLE\n )", + "CREATE TABLE t1(a \n REFERENCES t2(x) MATCH SIMPLE \n ON DELETE SET DEFAULT NOT DEFERRABLE\n )", + "CREATE TABLE t1(a \n REFERENCES t2(x) MATCH SIMPLE \n ON DELETE RESTRICT ON UPDATE SET DEFAULT NOT DEFERRABLE INITIALLY DEFERRED\n )", + "CREATE TABLE t1(a \n REFERENCES t2(x) MATCH SIMPLE \n ON DELETE RESTRICT ON UPDATE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE\n )", + "CREATE TABLE t1(a \n REFERENCES t2(x) MATCH SIMPLE \n ON DELETE NO ACTION ON UPDATE SET DEFAULT NOT DEFERRABLE\n )", + "CREATE TABLE t1(a \n REFERENCES t2(x) MATCH STICK \n ON DELETE CASCADE ON UPDATE CASCADE DEFERRABLE\n )", + "CREATE TABLE t1(a \n REFERENCES t2(x) MATCH STICK \n ON UPDATE SET NULL NOT DEFERRABLE INITIALLY DEFERRED\n )", + "CREATE TABLE t1(a \n REFERENCES t2(x)\n ON DELETE SET NULL ON UPDATE NO ACTION DEFERRABLE INITIALLY IMMEDIATE\n )", + "CREATE TABLE t1(a \n REFERENCES t2(x) ON DELETE RESTRICT ON UPDATE NO ACTION NOT DEFERRABLE\n )", + "CREATE TABLE t1(a \n REFERENCES t2(x) NOT DEFERRABLE INITIALLY DEFERRED\n )", + "CREATE TABLE t1(a \n REFERENCES t2 MATCH FULL \n ON DELETE SET NULL ON UPDATE SET NULL DEFERRABLE INITIALLY IMMEDIATE\n )", + "CREATE TABLE t1(a \n REFERENCES t2 MATCH FULL \n ON DELETE SET NULL ON UPDATE SET DEFAULT NOT DEFERRABLE\n )", + "CREATE TABLE t1(a \n REFERENCES t2 MATCH FULL ON DELETE SET DEFAULT ON UPDATE SET NULL \n )", + "CREATE TABLE t1(a \n REFERENCES t2 MATCH FULL \n ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE\n )", + "CREATE TABLE t1(a \n REFERENCES t2 MATCH PARTIAL \n ON DELETE SET NULL ON UPDATE RESTRICT NOT DEFERRABLE\n )", + "CREATE TABLE t1(a \n REFERENCES t2 MATCH PARTIAL \n ON DELETE SET NULL ON UPDATE NO ACTION DEFERRABLE\n )", + "CREATE TABLE t1(a \n REFERENCES t2 MATCH PARTIAL ON DELETE CASCADE ON UPDATE SET DEFAULT \n )", + "CREATE TABLE t1(a \n REFERENCES t2 MATCH PARTIAL NOT DEFERRABLE\n )", + "CREATE TABLE t1(a \n REFERENCES t2 MATCH SIMPLE \n ON DELETE SET DEFAULT ON UPDATE CASCADE DEFERRABLE\n )", + "CREATE TABLE t1(a \n REFERENCES t2 MATCH STICK \n ON DELETE SET NULL ON UPDATE NO ACTION DEFERRABLE INITIALLY IMMEDIATE\n )", + "CREATE TABLE t1(a \n REFERENCES t2 MATCH STICK \n ON DELETE NO ACTION ON UPDATE SET DEFAULT NOT DEFERRABLE INITIALLY IMMEDIATE\n )", + "CREATE TABLE t1(a \n REFERENCES t2 MATCH STICK \n ON UPDATE SET DEFAULT DEFERRABLE INITIALLY IMMEDIATE\n )", + "CREATE TABLE t1(a \n REFERENCES t2 \n ON DELETE RESTRICT ON UPDATE NO ACTION DEFERRABLE INITIALLY DEFERRED\n )", + "CREATE TABLE sqlit_abc(a, b, c)", + "CREATE TABLE temp.sqlitehelloworld(x)", + "CREATE TABLE auxa.\"sqlite\"(x, y)", + "CREATE TABLE auxb.\"sqlite-\"(z)", + "CREATE TABLE \"SQLITE-TBL\"(z)", + "CREATE TABLE main.abc(a, b, c)", + "CREATE TABLE temp.helloworld(x)", + "CREATE TABLE auxa.\"t 1\"(x, y)", + "CREATE TABLE auxb.xyz(z)", + "CREATE TABLE main.abc(a, b, c)", + "CREATE TABLE main.t1(a, b, c)", + "CREATE TABLE temp.tmp(a, b, c)", + "CREATE TABLE auxb.tbl(x, y)", + "CREATE TABLE auxb.t1(k, v)", + "CREATE TABLE auxa.next(c, d)", + "CREATE TEMP TABLE t1(a, b)", + "CREATE TEMPORARY TABLE t2(a, b)", + "CREATE TEMP TABLE temp.t1(a, b)", + "CREATE TEMPORARY TABLE temp.t2(a, b)", + "CREATE TEMP TABLE TEMP.t3(a, b)", + "CREATE TEMPORARY TABLE TEMP.xxx(x)", + "CREATE TABLE t1(a, b)", + "CREATE TABLE t2(a, b)", + "CREATE TABLE t3(a, b)", + "CREATE TABLE xxx(x)", + "CREATE TABLE t1(x, y)", + "CREATE TABLE auxa.tbl1(x, y)", + "CREATE TABLE t1(a, b)", + "CREATE TABLE i1(a, b)", + "CREATE TABLE v1(a, b)", + "CREATE TABLE auxa.tbl1(a, b)", + "CREATE TABLE auxa.idx1(a, b)", + "CREATE TABLE auxa.view1(a, b)", + "CREATE TABLE auxa.t1(a, b)", + "CREATE TABLE auxa.i1(a, b)", + "CREATE TABLE auxa.v1(a, b)", + "CREATE TABLE tbl1(a, b)", + "CREATE TABLE idx1(a, b)", + "CREATE TABLE view1(a, b)", + "CREATE TABLE t1(x, y)", + "CREATE TABLE auxa.tbl1(x, y)", + "CREATE TABLE IF NOT EXISTS t1(a, b)", + "CREATE TABLE IF NOT EXISTS auxa.tbl1(a, b)", + "CREATE TABLE IF NOT EXISTS v1(a, b)", + "CREATE TABLE IF NOT EXISTS auxa.view1(a, b)", + "CREATE TABLE IF NOT EXISTS i1(a, b)", + "CREATE TABLE IF NOT EXISTS auxa.idx1(a, b)", + "CREATE TABLE t1(x, y)", + "CREATE TABLE auxb.t2(x, y)", + "CREATE TABLE tr1(a, b)", + "CREATE TABLE tr2(a, b)", + "CREATE TABLE auxb.tr1(a, b)", + "CREATE TABLE auxb.tr2(a, b)", + "CREATE TABLE t1(a, b)", + "CREATE TABLE t2(a, b)", + "CREATE TABLE auxa.t3(a, b)", + "CREATE TABLE auxa.t4(a, b)", + "CREATE TABLE t1(a, b, c)", + "CREATE TABLE t2(d, e, f)", + "CREATE TABLE t3(g BIGINT, h VARCHAR(10))", + "CREATE TABLE t4(i BLOB, j ANYOLDATA)", + "CREATE TABLE t5(k FLOAT, l INTEGER)", + "CREATE TABLE t6(m DEFAULT 10, n DEFAULT 5, PRIMARY KEY(m, n))", + "CREATE TABLE t7(x INTEGER PRIMARY KEY)", + "CREATE TABLE t8(o COLLATE nocase DEFAULT 'abc')", + "CREATE TABLE t9(p NOT NULL, q DOUBLE CHECK (q!=0), r STRING UNIQUE)", + "CREATE TABLE x1 AS SELECT * FROM t1", + "CREATE TABLE x1 AS SELECT c, b, a FROM t1", + "CREATE TABLE x1 AS SELECT * FROM t1, t2", + "CREATE TABLE x1 AS SELECT count(*) FROM t1", + "CREATE TABLE x1 AS SELECT count(a) AS a, max(b) FROM t1", + "CREATE TABLE x1 AS SELECT a FROM t1", + "CREATE TABLE x1 AS SELECT * FROM t3", + "CREATE TABLE x1 AS SELECT * FROM t4", + "CREATE TABLE x1 AS SELECT * FROM t5", + "CREATE TABLE x1 AS SELECT * FROM t6", + "CREATE TABLE x1(m,n)", + "CREATE TABLE x2 AS SELECT * FROM t7", + "CREATE TABLE x2(x INT)", + "CREATE TABLE x3 AS SELECT * FROM t8", + "CREATE TABLE x3(o)", + "CREATE TABLE x4 AS SELECT * FROM t9", + "CREATE TABLE x4(p,q REAL,r NUM)", + "CREATE TABLE t1(x, y)", + "CREATE TABLE x1 AS SELECT * FROM t1", + "CREATE TABLE x2 AS SELECT * FROM t1 ORDER BY x DESC", + "CREATE TABLE x3 AS SELECT * FROM t1 ORDER BY x ASC", + "CREATE TABLE t1(x VARCHAR(10), y INTEGER, z DOUBLE)", + "CREATE TABLE t2(a DATETIME, b STRING, c REAL)", + "CREATE TABLE t3(o, t)", + "CREATE TABLE t4(\n a DEFAULT NULL,\n b DEFAULT 'string constant',\n c DEFAULT X'424C4F42',\n d DEFAULT 1,\n e DEFAULT -1,\n f DEFAULT 3.14,\n g DEFAULT -3.14,\n h DEFAULT ( substr('abcd', 0, 2) || 'cd' ),\n i DEFAULT CURRENT_TIME,\n j DEFAULT CURRENT_DATE,\n k DEFAULT CURRENT_TIMESTAMP\n )", + "CREATE TABLE t5(x DEFAULT ( 'abc' ))", + "CREATE TABLE t5(x DEFAULT ( 1 IN (1, 2, 3) ))", + "CREATE TABLE t5(\n a DEFAULT NULL, \n b DEFAULT 'text value', \n c DEFAULT X'424C4F42',\n d DEFAULT -45678.6,\n e DEFAULT 394507\n )", + "CREATE TABLE t6(a DEFAULT ( nextint() ), b DEFAULT ( nextint() ))", + "CREATE TABLE t7(\n a DEFAULT CURRENT_TIME, \n b DEFAULT CURRENT_DATE, \n c DEFAULT CURRENT_TIMESTAMP\n )", + "CREATE TABLE t8(a COLLATE nocase, b COLLATE rtrim, c COLLATE binary, d)", + "CREATE TABLE t9(c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30, c31, c32, c33, c34, c35, c36, c37, c38, c39, c40, c41, c42, c43, c44, c45, c46, c47, c48, c49, c50, c51, c52, c53, c54, c55, c56, c57, c58, c59, c60, c61, c62, c63, c64, c65, c66, c67, c68, c69, c70, c71, c72, c73, c74, c75, c76, c77, c78, c79, c80, c81, c82, c83, c84, c85, c86, c87, c88, c89, c90, c91, c92, c93, c94, c95, c96, c97, c98, c99, c100, c101, c102, c103, c104, c105, c106, c107, c108, c109, c110, c111, c112, c113, c114, c115, c116, c117, c118, c119, c120, c121, c122, c123, c124, c125, c126, c127, c128, c129, c130, c131, c132, c133, c134, c135, c136, c137, c138, c139, c140, c141, c142, c143, c144, c145, c146, c147, c148, c149, c150, c151, c152, c153, c154, c155, c156, c157, c158, c159, c160, c161, c162, c163, c164, c165, c166, c167, c168, c169, c170, c171, c172, c173, c174, c175, c176, c177, c178, c179, c180, c181, c182, c183, c184, c185, c186, c187, c188, c189, c190, c191, c192, c193, c194, c195, c196, c197, c198, c199, c200, c201, c202, c203, c204, c205, c206, c207, c208, c209, c210, c211, c212, c213, c214, c215, c216, c217, c218, c219, c220, c221, c222, c223, c224, c225, c226, c227, c228, c229, c230, c231, c232, c233, c234, c235, c236, c237, c238, c239, c240, c241, c242, c243, c244, c245, c246, c247, c248, c249, c250, c251, c252, c253, c254, c255, c256, c257, c258, c259, c260, c261, c262, c263, c264, c265, c266, c267, c268, c269, c270, c271, c272, c273, c274, c275, c276, c277, c278, c279, c280, c281, c282, c283, c284, c285, c286, c287, c288, c289, c290, c291, c292, c293, c294, c295, c296, c297, c298, c299, c300, c301, c302, c303, c304, c305, c306, c307, c308, c309, c310, c311, c312, c313, c314, c315, c316, c317, c318, c319, c320, c321, c322, c323, c324, c325, c326, c327, c328, c329, c330, c331, c332, c333, c334, c335, c336, c337, c338, c339, c340, c341, c342, c343, c344, c345, c346, c347, c348, c349, c350, c351, c352, c353, c354, c355, c356, c357, c358, c359, c360, c361, c362, c363, c364, c365, c366, c367, c368, c369, c370, c371, c372, c373, c374, c375, c376, c377, c378, c379, c380, c381, c382, c383, c384, c385, c386, c387, c388, c389, c390, c391, c392, c393, c394, c395, c396, c397, c398, c399, c400, c401, c402, c403, c404, c405, c406, c407, c408, c409, c410, c411, c412, c413, c414, c415, c416, c417, c418, c419, c420, c421, c422, c423, c424, c425, c426, c427, c428, c429, c430, c431, c432, c433, c434, c435, c436, c437, c438, c439, c440, c441, c442, c443, c444, c445, c446, c447, c448, c449, c450, c451, c452, c453, c454, c455, c456, c457, c458, c459, c460, c461, c462, c463, c464, c465, c466, c467, c468, c469, c470, c471, c472, c473, c474, c475, c476, c477, c478, c479, c480, c481, c482, c483, c484, c485, c486, c487, c488, c489, c490, c491, c492, c493, c494, c495, c496, c497, c498, c499, c500, c501, c502, c503, c504, c505, c506, c507, c508, c509, c510, c511, c512, c513, c514, c515, c516, c517, c518, c519, c520, c521, c522, c523, c524, c525, c526, c527, c528, c529, c530, c531, c532, c533, c534, c535, c536, c537, c538, c539, c540, c541, c542, c543, c544, c545, c546, c547, c548, c549, c550, c551, c552, c553, c554, c555, c556, c557, c558, c559, c560, c561, c562, c563, c564, c565, c566, c567, c568, c569, c570, c571, c572, c573, c574, c575, c576, c577, c578, c579, c580, c581, c582, c583, c584, c585, c586, c587, c588, c589, c590, c591, c592, c593, c594, c595, c596, c597, c598, c599, c600, c601, c602, c603, c604, c605, c606, c607, c608, c609, c610, c611, c612, c613, c614, c615, c616, c617, c618, c619, c620, c621, c622, c623, c624, c625, c626, c627, c628, c629, c630, c631, c632, c633, c634, c635, c636, c637, c638, c639, c640, c641, c642, c643, c644, c645, c646, c647, c648, c649, c650, c651, c652, c653, c654, c655, c656, c657, c658, c659, c660, c661, c662, c663, c664, c665, c666, c667, c668, c669, c670, c671, c672, c673, c674, c675, c676, c677, c678, c679, c680, c681, c682, c683, c684, c685, c686, c687, c688, c689, c690, c691, c692, c693, c694, c695, c696, c697, c698, c699, c700, c701, c702, c703, c704, c705, c706, c707, c708, c709, c710, c711, c712, c713, c714, c715, c716, c717, c718, c719, c720, c721, c722, c723, c724, c725, c726, c727, c728, c729, c730, c731, c732, c733, c734, c735, c736, c737, c738, c739, c740, c741, c742, c743, c744, c745, c746, c747, c748, c749, c750, c751, c752, c753, c754, c755, c756, c757, c758, c759, c760, c761, c762, c763, c764, c765, c766, c767, c768, c769, c770, c771, c772, c773, c774, c775, c776, c777, c778, c779, c780, c781, c782, c783, c784, c785, c786, c787, c788, c789, c790, c791, c792, c793, c794, c795, c796, c797, c798, c799, c800, c801, c802, c803, c804, c805, c806, c807, c808, c809, c810, c811, c812, c813, c814, c815, c816, c817, c818, c819, c820, c821, c822, c823, c824, c825, c826, c827, c828, c829, c830, c831, c832, c833, c834, c835, c836, c837, c838, c839, c840, c841, c842, c843, c844, c845, c846, c847, c848, c849, c850, c851, c852, c853, c854, c855, c856, c857, c858, c859, c860, c861, c862, c863, c864, c865, c866, c867, c868, c869, c870, c871, c872, c873, c874, c875, c876, c877, c878, c879, c880, c881, c882, c883, c884, c885, c886, c887, c888, c889, c890, c891, c892, c893, c894, c895, c896, c897, c898, c899, c900, c901, c902, c903, c904, c905, c906, c907, c908, c909, c910, c911, c912, c913, c914, c915, c916, c917, c918, c919, c920, c921, c922, c923, c924, c925, c926, c927, c928, c929, c930, c931, c932, c933, c934, c935, c936, c937, c938, c939, c940, c941, c942, c943, c944, c945, c946, c947, c948, c949, c950, c951, c952, c953, c954, c955, c956, c957, c958, c959, c960, c961, c962, c963, c964, c965, c966, c967, c968, c969, c970, c971, c972, c973, c974, c975, c976, c977, c978, c979, c980, c981, c982, c983, c984, c985, c986, c987, c988, c989, c990, c991, c992, c993, c994, c995, c996, c997, c998, c999, c1000, c1001, c1002, c1003, c1004, c1005, c1006, c1007, c1008, c1009, c1010, c1011, c1012, c1013, c1014, c1015, c1016, c1017, c1018, c1019, c1020, c1021, c1022, c1023, c1024, c1025, c1026, c1027, c1028, c1029, c1030, c1031, c1032, c1033, c1034, c1035, c1036, c1037, c1038, c1039, c1040, c1041, c1042, c1043, c1044, c1045, c1046, c1047, c1048, c1049, c1050, c1051, c1052, c1053, c1054, c1055, c1056, c1057, c1058, c1059, c1060, c1061, c1062, c1063, c1064, c1065, c1066, c1067, c1068, c1069, c1070, c1071, c1072, c1073, c1074, c1075, c1076, c1077, c1078, c1079, c1080, c1081, c1082, c1083, c1084, c1085, c1086, c1087, c1088, c1089, c1090, c1091, c1092, c1093, c1094, c1095, c1096, c1097, c1098, c1099, c1100, c1101, c1102, c1103, c1104, c1105, c1106, c1107, c1108, c1109, c1110, c1111, c1112, c1113, c1114, c1115, c1116, c1117, c1118, c1119, c1120, c1121, c1122, c1123, c1124, c1125, c1126, c1127, c1128, c1129, c1130, c1131, c1132, c1133, c1134, c1135, c1136, c1137, c1138, c1139, c1140, c1141, c1142, c1143, c1144, c1145, c1146, c1147, c1148, c1149, c1150, c1151, c1152, c1153, c1154, c1155, c1156, c1157, c1158, c1159, c1160, c1161, c1162, c1163, c1164, c1165, c1166, c1167, c1168, c1169, c1170, c1171, c1172, c1173, c1174, c1175, c1176, c1177, c1178, c1179, c1180, c1181, c1182, c1183, c1184, c1185, c1186, c1187, c1188, c1189, c1190, c1191, c1192, c1193, c1194, c1195, c1196, c1197, c1198, c1199, c1200, c1201, c1202, c1203, c1204, c1205, c1206, c1207, c1208, c1209, c1210, c1211, c1212, c1213, c1214, c1215, c1216, c1217, c1218, c1219, c1220, c1221, c1222, c1223, c1224, c1225, c1226, c1227, c1228, c1229, c1230, c1231, c1232, c1233, c1234, c1235, c1236, c1237, c1238, c1239, c1240, c1241, c1242, c1243, c1244, c1245, c1246, c1247, c1248, c1249, c1250, c1251, c1252, c1253, c1254, c1255, c1256, c1257, c1258, c1259, c1260, c1261, c1262, c1263, c1264, c1265, c1266, c1267, c1268, c1269, c1270, c1271, c1272, c1273, c1274, c1275, c1276, c1277, c1278, c1279, c1280, c1281, c1282, c1283, c1284, c1285, c1286, c1287, c1288, c1289, c1290, c1291, c1292, c1293, c1294, c1295, c1296, c1297, c1298, c1299, c1300, c1301, c1302, c1303, c1304, c1305, c1306, c1307, c1308, c1309, c1310, c1311, c1312, c1313, c1314, c1315, c1316, c1317, c1318, c1319, c1320, c1321, c1322, c1323, c1324, c1325, c1326, c1327, c1328, c1329, c1330, c1331, c1332, c1333, c1334, c1335, c1336, c1337, c1338, c1339, c1340, c1341, c1342, c1343, c1344, c1345, c1346, c1347, c1348, c1349, c1350, c1351, c1352, c1353, c1354, c1355, c1356, c1357, c1358, c1359, c1360, c1361, c1362, c1363, c1364, c1365, c1366, c1367, c1368, c1369, c1370, c1371, c1372, c1373, c1374, c1375, c1376, c1377, c1378, c1379, c1380, c1381, c1382, c1383, c1384, c1385, c1386, c1387, c1388, c1389, c1390, c1391, c1392, c1393, c1394, c1395, c1396, c1397, c1398, c1399, c1400, c1401, c1402, c1403, c1404, c1405, c1406, c1407, c1408, c1409, c1410, c1411, c1412, c1413, c1414, c1415, c1416, c1417, c1418, c1419, c1420, c1421, c1422, c1423, c1424, c1425, c1426, c1427, c1428, c1429, c1430, c1431, c1432, c1433, c1434, c1435, c1436, c1437, c1438, c1439, c1440, c1441, c1442, c1443, c1444, c1445, c1446, c1447, c1448, c1449, c1450, c1451, c1452, c1453, c1454, c1455, c1456, c1457, c1458, c1459, c1460, c1461, c1462, c1463, c1464, c1465, c1466, c1467, c1468, c1469, c1470, c1471, c1472, c1473, c1474, c1475, c1476, c1477, c1478, c1479, c1480, c1481, c1482, c1483, c1484, c1485, c1486, c1487, c1488, c1489, c1490, c1491, c1492, c1493, c1494, c1495, c1496, c1497, c1498, c1499, c1500, c1501, c1502, c1503, c1504, c1505, c1506, c1507, c1508, c1509, c1510, c1511, c1512, c1513, c1514, c1515, c1516, c1517, c1518, c1519, c1520, c1521, c1522, c1523, c1524, c1525, c1526, c1527, c1528, c1529, c1530, c1531, c1532, c1533, c1534, c1535, c1536, c1537, c1538, c1539, c1540, c1541, c1542, c1543, c1544, c1545, c1546, c1547, c1548, c1549, c1550, c1551, c1552, c1553, c1554, c1555, c1556, c1557, c1558, c1559, c1560, c1561, c1562, c1563, c1564, c1565, c1566, c1567, c1568, c1569, c1570, c1571, c1572, c1573, c1574, c1575, c1576, c1577, c1578, c1579, c1580, c1581, c1582, c1583, c1584, c1585, c1586, c1587, c1588, c1589, c1590, c1591, c1592, c1593, c1594, c1595, c1596, c1597, c1598, c1599, c1600, c1601, c1602, c1603, c1604, c1605, c1606, c1607, c1608, c1609, c1610, c1611, c1612, c1613, c1614, c1615, c1616, c1617, c1618, c1619, c1620, c1621, c1622, c1623, c1624, c1625, c1626, c1627, c1628, c1629, c1630, c1631, c1632, c1633, c1634, c1635, c1636, c1637, c1638, c1639, c1640, c1641, c1642, c1643, c1644, c1645, c1646, c1647, c1648, c1649, c1650, c1651, c1652, c1653, c1654, c1655, c1656, c1657, c1658, c1659, c1660, c1661, c1662, c1663, c1664, c1665, c1666, c1667, c1668, c1669, c1670, c1671, c1672, c1673, c1674, c1675, c1676, c1677, c1678, c1679, c1680, c1681, c1682, c1683, c1684, c1685, c1686, c1687, c1688, c1689, c1690, c1691, c1692, c1693, c1694, c1695, c1696, c1697, c1698, c1699, c1700, c1701, c1702, c1703, c1704, c1705, c1706, c1707, c1708, c1709, c1710, c1711, c1712, c1713, c1714, c1715, c1716, c1717, c1718, c1719, c1720, c1721, c1722, c1723, c1724, c1725, c1726, c1727, c1728, c1729, c1730, c1731, c1732, c1733, c1734, c1735, c1736, c1737, c1738, c1739, c1740, c1741, c1742, c1743, c1744, c1745, c1746, c1747, c1748, c1749, c1750, c1751, c1752, c1753, c1754, c1755, c1756, c1757, c1758, c1759, c1760, c1761, c1762, c1763, c1764, c1765, c1766, c1767, c1768, c1769, c1770, c1771, c1772, c1773, c1774, c1775, c1776, c1777, c1778, c1779, c1780, c1781, c1782, c1783, c1784, c1785, c1786, c1787, c1788, c1789, c1790, c1791, c1792, c1793, c1794, c1795, c1796, c1797, c1798, c1799, c1800, c1801, c1802, c1803, c1804, c1805, c1806, c1807, c1808, c1809, c1810, c1811, c1812, c1813, c1814, c1815, c1816, c1817, c1818, c1819, c1820, c1821, c1822, c1823, c1824, c1825, c1826, c1827, c1828, c1829, c1830, c1831, c1832, c1833, c1834, c1835, c1836, c1837, c1838, c1839, c1840, c1841, c1842, c1843, c1844, c1845, c1846, c1847, c1848, c1849, c1850, c1851, c1852, c1853, c1854, c1855, c1856, c1857, c1858, c1859, c1860, c1861, c1862, c1863, c1864, c1865, c1866, c1867, c1868, c1869, c1870, c1871, c1872, c1873, c1874, c1875, c1876, c1877, c1878, c1879, c1880, c1881, c1882, c1883, c1884, c1885, c1886, c1887, c1888, c1889, c1890, c1891, c1892, c1893, c1894, c1895, c1896, c1897, c1898, c1899, c1900, c1901, c1902, c1903, c1904, c1905, c1906, c1907, c1908, c1909, c1910, c1911, c1912, c1913, c1914, c1915, c1916, c1917, c1918, c1919, c1920, c1921, c1922, c1923, c1924, c1925, c1926, c1927, c1928, c1929, c1930, c1931, c1932, c1933, c1934, c1935, c1936, c1937, c1938, c1939, c1940, c1941, c1942, c1943, c1944, c1945, c1946, c1947, c1948, c1949, c1950, c1951, c1952, c1953, c1954, c1955, c1956, c1957, c1958, c1959, c1960, c1961, c1962, c1963, c1964, c1965, c1966, c1967, c1968, c1969, c1970, c1971, c1972, c1973, c1974, c1975, c1976, c1977, c1978, c1979, c1980, c1981, c1982, c1983, c1984, c1985, c1986, c1987, c1988, c1989, c1990, c1991, c1992, c1993, c1994, c1995, c1996, c1997, c1998, c1999)", + "CREATE TABLE t10(c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30, c31, c32, c33, c34, c35, c36, c37, c38, c39, c40, c41, c42, c43, c44, c45, c46, c47, c48, c49, c50, c51, c52, c53, c54, c55, c56, c57, c58, c59, c60, c61, c62, c63, c64, c65, c66, c67, c68, c69, c70, c71, c72, c73, c74, c75, c76, c77, c78, c79, c80, c81, c82, c83, c84, c85, c86, c87, c88, c89, c90, c91, c92, c93, c94, c95, c96, c97, c98, c99, c100, c101, c102, c103, c104, c105, c106, c107, c108, c109, c110, c111, c112, c113, c114, c115, c116, c117, c118, c119, c120, c121, c122, c123, c124, c125, c126, c127, c128, c129, c130, c131, c132, c133, c134, c135, c136, c137, c138, c139, c140, c141, c142, c143, c144, c145, c146, c147, c148, c149, c150, c151, c152, c153, c154, c155, c156, c157, c158, c159, c160, c161, c162, c163, c164, c165, c166, c167, c168, c169, c170, c171, c172, c173, c174, c175, c176, c177, c178, c179, c180, c181, c182, c183, c184, c185, c186, c187, c188, c189, c190, c191, c192, c193, c194, c195, c196, c197, c198, c199, c200, c201, c202, c203, c204, c205, c206, c207, c208, c209, c210, c211, c212, c213, c214, c215, c216, c217, c218, c219, c220, c221, c222, c223, c224, c225, c226, c227, c228, c229, c230, c231, c232, c233, c234, c235, c236, c237, c238, c239, c240, c241, c242, c243, c244, c245, c246, c247, c248, c249, c250, c251, c252, c253, c254, c255, c256, c257, c258, c259, c260, c261, c262, c263, c264, c265, c266, c267, c268, c269, c270, c271, c272, c273, c274, c275, c276, c277, c278, c279, c280, c281, c282, c283, c284, c285, c286, c287, c288, c289, c290, c291, c292, c293, c294, c295, c296, c297, c298, c299, c300, c301, c302, c303, c304, c305, c306, c307, c308, c309, c310, c311, c312, c313, c314, c315, c316, c317, c318, c319, c320, c321, c322, c323, c324, c325, c326, c327, c328, c329, c330, c331, c332, c333, c334, c335, c336, c337, c338, c339, c340, c341, c342, c343, c344, c345, c346, c347, c348, c349, c350, c351, c352, c353, c354, c355, c356, c357, c358, c359, c360, c361, c362, c363, c364, c365, c366, c367, c368, c369, c370, c371, c372, c373, c374, c375, c376, c377, c378, c379, c380, c381, c382, c383, c384, c385, c386, c387, c388, c389, c390, c391, c392, c393, c394, c395, c396, c397, c398, c399, c400, c401, c402, c403, c404, c405, c406, c407, c408, c409, c410, c411, c412, c413, c414, c415, c416, c417, c418, c419, c420, c421, c422, c423, c424, c425, c426, c427, c428, c429, c430, c431, c432, c433, c434, c435, c436, c437, c438, c439, c440, c441, c442, c443, c444, c445, c446, c447, c448, c449, c450, c451, c452, c453, c454, c455, c456, c457, c458, c459, c460, c461, c462, c463, c464, c465, c466, c467, c468, c469, c470, c471, c472, c473, c474, c475, c476, c477, c478, c479, c480, c481, c482, c483, c484, c485, c486, c487, c488, c489, c490, c491, c492, c493, c494, c495, c496, c497, c498, c499)", + "CREATE TABLE t11(c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30, c31, c32, c33, c34, c35, c36, c37, c38, c39, c40, c41, c42, c43, c44, c45, c46, c47, c48, c49, c50, c51, c52, c53, c54, c55, c56, c57, c58, c59, c60, c61, c62, c63, c64, c65, c66, c67, c68, c69, c70, c71, c72, c73, c74, c75, c76, c77, c78, c79, c80, c81, c82, c83, c84, c85, c86, c87, c88, c89, c90, c91, c92, c93, c94, c95, c96, c97, c98, c99, c100, c101, c102, c103, c104, c105, c106, c107, c108, c109, c110, c111, c112, c113, c114, c115, c116, c117, c118, c119, c120, c121, c122, c123, c124, c125, c126, c127, c128, c129, c130, c131, c132, c133, c134, c135, c136, c137, c138, c139, c140, c141, c142, c143, c144, c145, c146, c147, c148, c149, c150, c151, c152, c153, c154, c155, c156, c157, c158, c159, c160, c161, c162, c163, c164, c165, c166, c167, c168, c169, c170, c171, c172, c173, c174, c175, c176, c177, c178, c179, c180, c181, c182, c183, c184, c185, c186, c187, c188, c189, c190, c191, c192, c193, c194, c195, c196, c197, c198, c199, c200, c201, c202, c203, c204, c205, c206, c207, c208, c209, c210, c211, c212, c213, c214, c215, c216, c217, c218, c219, c220, c221, c222, c223, c224, c225, c226, c227, c228, c229, c230, c231, c232, c233, c234, c235, c236, c237, c238, c239, c240, c241, c242, c243, c244, c245, c246, c247, c248, c249, c250, c251, c252, c253, c254, c255, c256, c257, c258, c259, c260, c261, c262, c263, c264, c265, c266, c267, c268, c269, c270, c271, c272, c273, c274, c275, c276, c277, c278, c279, c280, c281, c282, c283, c284, c285, c286, c287, c288, c289, c290, c291, c292, c293, c294, c295, c296, c297, c298, c299, c300, c301, c302, c303, c304, c305, c306, c307, c308, c309, c310, c311, c312, c313, c314, c315, c316, c317, c318, c319, c320, c321, c322, c323, c324, c325, c326, c327, c328, c329, c330, c331, c332, c333, c334, c335, c336, c337, c338, c339, c340, c341, c342, c343, c344, c345, c346, c347, c348, c349, c350, c351, c352, c353, c354, c355, c356, c357, c358, c359, c360, c361, c362, c363, c364, c365, c366, c367, c368, c369, c370, c371, c372, c373, c374, c375, c376, c377, c378, c379, c380, c381, c382, c383, c384, c385, c386, c387, c388, c389, c390, c391, c392, c393, c394, c395, c396, c397, c398, c399, c400, c401, c402, c403, c404, c405, c406, c407, c408, c409, c410, c411, c412, c413, c414, c415, c416, c417, c418, c419, c420, c421, c422, c423, c424, c425, c426, c427, c428, c429, c430, c431, c432, c433, c434, c435, c436, c437, c438, c439, c440, c441, c442, c443, c444, c445, c446, c447, c448, c449, c450, c451, c452, c453, c454, c455, c456, c457, c458, c459, c460, c461, c462, c463, c464, c465, c466, c467, c468, c469, c470, c471, c472, c473, c474, c475, c476, c477, c478, c479, c480, c481, c482, c483, c484, c485, c486, c487, c488, c489, c490, c491, c492, c493, c494, c495, c496, c497, c498, c499, c500)", + "CREATE TABLE t12(a, b, c)", + "CREATE TABLE t1(a, b, c)", + "CREATE TABLE t2(a PRIMARY KEY, b, c)", + "CREATE TABLE t3(a, b, c, PRIMARY KEY(a))", + "CREATE TABLE t4(a, b, c, PRIMARY KEY(c,b,a))", + "CREATE TABLE t6(a, b)", + "CREATE TABLE t5(a, b INTEGER PRIMARY KEY, c)", + "CREATE TABLE t5(a PRIMARY KEY, b, c)", + "CREATE TABLE t5(a, b, c, PRIMARY KEY(a))", + "CREATE TABLE t5(a, b, c, PRIMARY KEY(c,b,a))", + "CREATE TABLE t5(a, b INTEGER PRIMARY KEY, c)", + "CREATE TABLE t1(x PRIMARY KEY, y)", + "CREATE TABLE t2(x, y, PRIMARY KEY(x, y))", + "CREATE TABLE t3(s, u INTEGER PRIMARY KEY, v)", + "CREATE TABLE t4(s, u INT PRIMARY KEY, v) WITHOUT ROWID", + "CREATE TABLE t5(s, u INT PRIMARY KEY NOT NULL, v)", + "CREATE TABLE t6(s INT, u INT PRIMARY KEY, v INT) STRICT", + "CREATE TABLE t7(s INT, u INT PRIMARY KEY NOT NULL, v INT) STRICT", + "CREATE TABLE t1(a UNIQUE, b UNIQUE)", + "CREATE TABLE t2(a UNIQUE, b, c, UNIQUE(c, b))", + "CREATE TABLE t3(a, b, c, UNIQUE(a), UNIQUE(b), UNIQUE(c))", + "CREATE TABLE t4(a, b, c, UNIQUE(a, b, c))", + "CREATE TABLE t1(a TEXT PRIMARY KEY, b)", + "CREATE TABLE t1(a INTEGER PRIMARY KEY, b)", + "CREATE TABLE t1(a TEXT UNIQUE, b)", + "CREATE TABLE t1(a PRIMARY KEY, b TEXT UNIQUE)", + "CREATE TABLE t1(a PRIMARY KEY, b, c, UNIQUE(c, b))", + "CREATE TABLE t1(a, b PRIMARY KEY)", + "CREATE TABLE t2(a, b, c, UNIQUE(b, c))", + "CREATE TABLE x1(a TEXT, b INTEGER CHECK( b>0 ))", + "CREATE TABLE t1(a TEXT, b INTEGER, CHECK( b>0 ))", + "CREATE TABLE x2(a CHECK( a||b ), b)", + "CREATE TABLE t2(a, b, CHECK( a||b ))", + "CREATE TABLE t1(a NOT NULL, b)", + "CREATE TABLE t2(a PRIMARY KEY NOT NULL, b)", + "CREATE TABLE t3(a NOT NULL, b NOT NULL, c NOT NULL UNIQUE)", + "CREATE TABLE t1_ab(a PRIMARY KEY ON CONFLICT ABORT, b)", + "CREATE TABLE t1_ro(a PRIMARY KEY ON CONFLICT ROLLBACK, b)", + "CREATE TABLE t1_ig(a PRIMARY KEY ON CONFLICT IGNORE, b)", + "CREATE TABLE t1_fa(a PRIMARY KEY ON CONFLICT FAIL, b)", + "CREATE TABLE t1_re(a PRIMARY KEY ON CONFLICT REPLACE, b)", + "CREATE TABLE t1_xx(a PRIMARY KEY, b)", + "CREATE TABLE t2_ab(a, b NOT NULL ON CONFLICT ABORT)", + "CREATE TABLE t2_ro(a, b NOT NULL ON CONFLICT ROLLBACK)", + "CREATE TABLE t2_ig(a, b NOT NULL ON CONFLICT IGNORE)", + "CREATE TABLE t2_fa(a, b NOT NULL ON CONFLICT FAIL)", + "CREATE TABLE t2_re(a, b NOT NULL ON CONFLICT REPLACE)", + "CREATE TABLE t2_xx(a, b NOT NULL)", + "CREATE TABLE t3_ab(a, b, UNIQUE(a, b) ON CONFLICT ABORT)", + "CREATE TABLE t3_ro(a, b, UNIQUE(a, b) ON CONFLICT ROLLBACK)", + "CREATE TABLE t3_ig(a, b, UNIQUE(a, b) ON CONFLICT IGNORE)", + "CREATE TABLE t3_fa(a, b, UNIQUE(a, b) ON CONFLICT FAIL)", + "CREATE TABLE t3_re(a, b, UNIQUE(a, b) ON CONFLICT REPLACE)", + "CREATE TABLE t3_xx(a, b, UNIQUE(a, b))", + "CREATE TABLE t4(a, b CHECK (b!=10))", + "CREATE TABLE t5(a NOT NULL ON CONFLICT IGNORE, b NOT NULL ON CONFLICT ABORT)", + "CREATE TABLE t1(x, y)", + "CREATE TABLE t2(oid, b)", + "CREATE TABLE t3(a, _rowid_)", + "CREATE TABLE t4(a, b, rowid)", + "CREATE TABLE t5(pk integer primary key)", + "CREATE TABLE t5(pk integer, primary key(pk))", + "CREATE TABLE t5(pk integer, v integer, primary key(pk))", + "CREATE TABLE t5(pk integer, v integer, primary key(pk, v))", + "CREATE TABLE t5(pk int, v integer, primary key(pk, v))", + "CREATE TABLE t5(pk int, v integer, primary key(pk))", + "CREATE TABLE t5(pk int primary key, v integer)", + "CREATE TABLE t5(pk inTEger primary key)", + "CREATE TABLE t5(pk inteGEr, primary key(pk))", + "CREATE TABLE t5(pk INTEGER, v integer, primary key(pk))", + "CREATE TABLE t6(pk INT primary key)", + "CREATE TABLE t7(pk BIGINT primary key)", + "CREATE TABLE t8(pk SHORT INTEGER primary key)", + "CREATE TABLE t9(pk UNSIGNED INTEGER primary key)", + "CREATE TABLE t(x INTEGER PRIMARY KEY ASC, y, z)", + "CREATE TABLE t(x INTEGER, y, z, PRIMARY KEY(x ASC))", + "CREATE TABLE t(x INTEGER, y, z, PRIMARY KEY(x DESC))", + "CREATE TABLE t(x INTEGER PRIMARY KEY DESC, y, z)", + "CREATE TABLE t10(a, b)", + "CREATE TABLE t11(a, b INTEGER PRIMARY KEY)", + "CREATE TABLE t12(x INTEGER PRIMARY KEY, y)" +]