[
  {
    "namePrefix": "should not report errors",
    "beforeCursor": "CREATE TABLE IF NOT EXISTS foo LIKE db.tbl USING CSV ROW FORMAT DELIMITED STORED AS PARQUET TBLPROPERTIES ('a'='b') LOCATION 'boo'; ",
    "afterCursor": "",
    "noErrors": true,
    "containsKeywords": [
      "SELECT"
    ],
    "expectedResult": {
      "lowerCase": false
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE ",
    "afterCursor": "",
    "containsKeywords": [
      "TABLE",
      "EXTERNAL TABLE"
    ],
    "expectedResult": {
      "lowerCase": false
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE EXTERNAL ",
    "afterCursor": "",
    "expectedResult": {
      "lowerCase": false,
      "suggestKeywords": [
        "TABLE"
      ]
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE TABLE ",
    "afterCursor": "",
    "expectedResult": {
      "lowerCase": false,
      "suggestKeywords": [
        "IF NOT EXISTS"
      ],
      "suggestDatabases": {
        "appendDot": true
      }
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE TABLE IF ",
    "afterCursor": "",
    "expectedResult": {
      "lowerCase": false,
      "suggestKeywords": [
        "NOT EXISTS"
      ]
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE EXTERNAL TABLE IF NOT ",
    "afterCursor": "",
    "expectedResult": {
      "lowerCase": false,
      "suggestKeywords": [
        "EXISTS"
      ]
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE TABLE foo ",
    "afterCursor": "",
    "expectedResult": {
      "lowerCase": false,
      "suggestKeywords": [
        "LIKE",
        "USING",
        "COMMENT",
        "PARTITIONED BY",
        "CLUSTERED BY",
        "ROW FORMAT",
        "STORED AS",
        "LOCATION",
        "TBLPROPERTIES",
        "AS"
      ]
    }
  },
  {
    "namePrefix": "should suggest tables",
    "beforeCursor": "CREATE TABLE foo LIKE ",
    "afterCursor": "",
    "expectedResult": {
      "lowerCase": false,
      "suggestDatabases": {
        "appendDot": true
      },
      "suggestTables": {}
    }
  },
  {
    "namePrefix": "should suggest tables",
    "beforeCursor": "CREATE TABLE foo LIKE foo.",
    "afterCursor": "",
    "expectedResult": {
      "lowerCase": false,
      "suggestTables": {
        "identifierChain": [
          {
            "name": "foo"
          }
        ]
      }
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE TABLE IF NOT EXISTS foo LIKE bar ",
    "afterCursor": "",
    "expectedResult": {
      "lowerCase": false,
      "suggestKeywords": [
        "USING"
      ]
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE TABLE IF NOT EXISTS foo LIKE bar USING ",
    "afterCursor": "",
    "containsKeywords": [
      "PARQUET"
    ],
    "expectedResult": {
      "lowerCase": false
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE TABLE IF NOT EXISTS foo LIKE bar USING CSV ",
    "afterCursor": "",
    "expectedResult": {
      "lowerCase": false,
      "suggestKeywords": [
        "ROW FORMAT",
        "STORED AS",
        "TBLPROPERTIES",
        "LOCATION"
      ]
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE TABLE IF NOT EXISTS foo LIKE bar USING CSV ROW ",
    "afterCursor": "",
    "expectedResult": {
      "lowerCase": false,
      "suggestKeywords": [
        "FORMAT"
      ]
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE TABLE IF NOT EXISTS foo LIKE bar USING CSV ROW FORMAT ",
    "afterCursor": "",
    "containsKeywords": [
      "DELIMITED",
      "SERDE"
    ],
    "expectedResult": {
      "lowerCase": false
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE TABLE IF NOT EXISTS foo LIKE bar USING CSV ROW FORMAT DELIMITED ",
    "afterCursor": "",
    "containsKeywords": [
      "STORED AS",
      "LOCATION"
    ],
    "expectedResult": {
      "lowerCase": false
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE TABLE foo LIKE bar USING CSV STORED ",
    "afterCursor": "",
    "expectedResult": {
      "lowerCase": false,
      "suggestKeywords": [
        "AS"
      ]
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE TABLE foo LIKE bar USING CSV STORED AS ",
    "afterCursor": "",
    "containsKeywords": [
      "ORC"
    ],
    "expectedResult": {
      "lowerCase": false
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE TABLE foo LIKE bar USING CSV STORED AS ORC ",
    "afterCursor": "",
    "expectedResult": {
      "lowerCase": false,
      "suggestKeywords": [
        "TBLPROPERTIES",
        "LOCATION"
      ]
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE TABLE foo LIKE bar USING CSV STORED AS ORC TBLPROPERTIES ('a' = 'b') ",
    "afterCursor": "",
    "expectedResult": {
      "lowerCase": false,
      "suggestKeywords": [
        "LOCATION"
      ]
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE TABLE ",
    "afterCursor": " foo LIKE bar USING CSV STORED AS ORC TBLPROPERTIES ('a' = 'b')",
    "expectedResult": {
      "lowerCase": false,
      "suggestKeywords": [
        "IF NOT EXISTS"
      ]
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE TABLE IF ",
    "afterCursor": " foo LIKE bar USING CSV STORED AS ORC TBLPROPERTIES ('a' = 'b')",
    "expectedResult": {
      "lowerCase": false,
      "suggestKeywords": [
        "NOT EXISTS"
      ]
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE TABLE boo (id ",
    "afterCursor": "",
    "containsKeywords": [
      "INT",
      "INTERVAL MINUTE"
    ],
    "expectedResult": {
      "lowerCase": false
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE TABLE boo (id INTERVAL MINUTE ",
    "afterCursor": "",
    "containsKeywords": [
      "COMMENT",
      "TO SECOND"
    ],
    "expectedResult": {
      "lowerCase": false
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE TABLE boo (id INTERVAL MINUTE, foo ",
    "afterCursor": "",
    "containsKeywords": [
      "STRING"
    ],
    "expectedResult": {
      "lowerCase": false
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE TABLE boo (id INTERVAL MINUTE, foo STRING) ",
    "afterCursor": "",
    "containsKeywords": [
      "COMMENT",
      "USING",
      "ROW FORMAT",
      "AS"
    ],
    "expectedResult": {
      "lowerCase": false
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE TABLE boo (id INTERVAL MINUTE, foo STRING) USING ",
    "afterCursor": "",
    "containsKeywords": [
      "CSV"
    ],
    "expectedResult": {
      "lowerCase": false
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE TABLE boo (id INTERVAL MINUTE, foo STRING) USING CSV ",
    "afterCursor": "",
    "expectedResult": {
      "lowerCase": false,
      "suggestKeywords": [
        "OPTIONS",
        "PARTITIONED BY",
        "CLUSTERED BY",
        "LOCATION",
        "COMMENT",
        "TBLPROPERTIES",
        "AS"
      ]
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE TABLE IF NOT EXISTS boo (id INTERVAL MINUTE, foo STRING) USING CSV OPTIONS ('a'='b') ",
    "afterCursor": "",
    "expectedResult": {
      "lowerCase": false,
      "suggestKeywords": [
        "PARTITIONED BY",
        "CLUSTERED BY",
        "LOCATION",
        "COMMENT",
        "TBLPROPERTIES",
        "AS"
      ]
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE TABLE IF NOT EXISTS boo (id INTERVAL MINUTE, foo STRING) USING CSV OPTIONS ('a'='b') PARTITIONED ",
    "afterCursor": "",
    "expectedResult": {
      "lowerCase": false,
      "suggestKeywords": [
        "BY"
      ]
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE TABLE IF NOT EXISTS boo (id INTERVAL MINUTE, foo STRING) USING CSV OPTIONS ('a'='b') PARTITIONED BY (a, b, c) ",
    "afterCursor": "",
    "expectedResult": {
      "lowerCase": false,
      "suggestKeywords": [
        "CLUSTERED BY",
        "LOCATION",
        "COMMENT",
        "TBLPROPERTIES",
        "AS"
      ]
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE TABLE IF NOT EXISTS boo (id INTERVAL MINUTE, foo STRING) USING CSV OPTIONS ('a'='b') PARTITIONED BY (a, b, c) CLUSTERED ",
    "afterCursor": "",
    "expectedResult": {
      "lowerCase": false,
      "suggestKeywords": [
        "BY"
      ]
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE TABLE IF NOT EXISTS boo (id INTERVAL MINUTE, foo STRING) USING CSV OPTIONS ('a'='b') PARTITIONED BY (a, b, c) CLUSTERED BY (e, f) ",
    "afterCursor": "",
    "expectedResult": {
      "lowerCase": false,
      "suggestKeywords": [
        "SORTED BY",
        "INTO"
      ]
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE TABLE IF NOT EXISTS boo (id INTERVAL MINUTE, foo STRING) USING CSV OPTIONS ('a'='b') PARTITIONED BY (a, b, c) CLUSTERED BY (e, f) SORTED ",
    "afterCursor": "",
    "expectedResult": {
      "lowerCase": false,
      "suggestKeywords": [
        "BY"
      ]
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE TABLE IF NOT EXISTS boo (id INTERVAL MINUTE, foo STRING) USING CSV OPTIONS ('a'='b') PARTITIONED BY (a, b, c) CLUSTERED BY (e, f) SORTED BY (d) ",
    "afterCursor": "",
    "expectedResult": {
      "lowerCase": false,
      "suggestKeywords": [
        "INTO"
      ]
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE TABLE boo (id int) USING CSV CLUSTERED BY (e, f) INTO 1 ",
    "afterCursor": "",
    "expectedResult": {
      "lowerCase": false,
      "suggestKeywords": [
        "BUCKETS"
      ]
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE TABLE boo (id int) USING CSV CLUSTERED BY (e, f) SORTED BY (d) INTO 1 ",
    "afterCursor": "",
    "expectedResult": {
      "lowerCase": false,
      "suggestKeywords": [
        "BUCKETS"
      ]
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE TABLE boo (id int) USING CSV CLUSTERED BY (e, f) INTO 1 BUCKETS ",
    "afterCursor": "",
    "expectedResult": {
      "lowerCase": false,
      "suggestKeywords": [
        "LOCATION",
        "COMMENT",
        "TBLPROPERTIES",
        "AS"
      ]
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE TABLE boo (id int) USING CSV CLUSTERED BY (e, f) INTO 1 BUCKETS LOCATION 'foo' ",
    "afterCursor": "",
    "expectedResult": {
      "lowerCase": false,
      "suggestKeywords": [
        "COMMENT",
        "TBLPROPERTIES",
        "AS"
      ]
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE TABLE boo (id int) USING CSV CLUSTERED BY (e, f) INTO 1 BUCKETS LOCATION 'foo' COMMENT 'boo' ",
    "afterCursor": "",
    "expectedResult": {
      "lowerCase": false,
      "suggestKeywords": [
        "TBLPROPERTIES",
        "AS"
      ]
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE TABLE boo (id int) USING CSV LOCATION 'foo' COMMENT 'boo' TBLPROPERTIES ('a'='b') ",
    "afterCursor": "",
    "expectedResult": {
      "lowerCase": false,
      "suggestKeywords": [
        "AS"
      ]
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE TABLE boo (id int) USING CSV LOCATION 'foo' COMMENT 'boo' TBLPROPERTIES ('a'='b') AS ",
    "afterCursor": "",
    "expectedResult": {
      "lowerCase": false,
      "suggestKeywords": [
        "SELECT"
      ]
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE TABLE boo (id int) USING CSV AS SELECT ",
    "afterCursor": "",
    "containsKeywords": [
      "*"
    ],
    "expectedResult": {
      "lowerCase": false,
      "suggestAggregateFunctions": {
        "tables": []
      },
      "suggestAnalyticFunctions": true,
      "suggestFunctions": {},
      "suggestTables": {
        "prependQuestionMark": true,
        "prependFrom": true
      },
      "suggestDatabases": {
        "prependQuestionMark": true,
        "prependFrom": true,
        "appendDot": true
      }
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE TABLE ",
    "afterCursor": " boo (id int) USING CSV AS SELECT * FROM foo;",
    "expectedResult": {
      "lowerCase": false,
      "suggestKeywords": [
        "IF NOT EXISTS"
      ]
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE TABLE IF NOT ",
    "afterCursor": " boo (id int) USING CSV AS SELECT * FROM foo;",
    "expectedResult": {
      "lowerCase": false,
      "suggestKeywords": [
        "EXISTS"
      ]
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE EXTERNAL TABLE foo (id ",
    "afterCursor": "",
    "containsKeywords": ["NUMERIC"],
    "expectedResult": {
      "lowerCase": false
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE EXTERNAL TABLE foo (id int) ",
    "afterCursor": "",
    "containsKeywords": ["COMMENT","PARTITIONED BY","CLUSTERED BY","ROW FORMAT","STORED AS","LOCATION","TBLPROPERTIES","AS"],
    "expectedResult": {
      "lowerCase": false
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE EXTERNAL TABLE foo (id int) COMMENT 'bla' ",
    "afterCursor": "",
    "expectedResult": {
      "lowerCase": false,
      "suggestKeywords": ["PARTITIONED BY","CLUSTERED BY","ROW FORMAT","STORED AS","LOCATION","TBLPROPERTIES","AS"]
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE EXTERNAL TABLE foo (id int) COMMENT 'bla' PARTITIONED ",
    "afterCursor": "",
    "expectedResult": {
      "lowerCase": false,
      "suggestKeywords": ["BY"]
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE EXTERNAL TABLE foo (id int) COMMENT 'bla' PARTITIONED BY (a) ",
    "afterCursor": "",
    "expectedResult": {
      "lowerCase": false,
      "suggestKeywords": ["CLUSTERED BY","ROW FORMAT","STORED AS","LOCATION","TBLPROPERTIES","AS"]
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE EXTERNAL TABLE foo (id int) COMMENT 'bla' PARTITIONED BY (a) CLUSTERED ",
    "afterCursor": "",
    "expectedResult": {
      "lowerCase": false,
      "suggestKeywords": ["BY"]
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE EXTERNAL TABLE foo (id int) COMMENT 'bla' PARTITIONED BY (a) CLUSTERED BY (a) ",
    "afterCursor": "",
    "expectedResult": {
      "lowerCase": false,
      "suggestKeywords": ["SORTED BY", "INTO"]
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE EXTERNAL TABLE foo (id int) COMMENT 'bla' PARTITIONED BY (a) CLUSTERED BY (a) INTO 10 BUCKETS ",
    "afterCursor": "",
    "expectedResult": {
      "lowerCase": false,
      "suggestKeywords": ["ROW FORMAT","STORED AS","LOCATION","TBLPROPERTIES","AS"]
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE TABLE foo (id int) COMMENT 'bla' PARTITIONED BY (a) CLUSTERED BY (a) INTO 10 BUCKETS ROW ",
    "afterCursor": "",
    "expectedResult": {
      "lowerCase": false,
      "suggestKeywords": ["FORMAT"]
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE EXTERNAL TABLE foo (id int) ROW FORMAT DELIMITED ",
    "afterCursor": "",
    "containsKeywords": ["STORED AS","LOCATION","TBLPROPERTIES","AS"],
    "expectedResult": {
      "lowerCase": false
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE EXTERNAL TABLE foo (id int) ROW FORMAT DELIMITED STORED ",
    "afterCursor": "",
    "expectedResult": {
      "lowerCase": false,
      "suggestKeywords": ["AS"]
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE TABLE IF NOT EXISTS foo (id int) ROW FORMAT DELIMITED STORED AS PARQUET ",
    "afterCursor": "",
    "expectedResult": {
      "lowerCase": false,
      "suggestKeywords": ["LOCATION","TBLPROPERTIES","AS"]
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE EXTERNAL TABLE foo (id int) LOCATION 'foo' ",
    "afterCursor": "",
    "expectedResult": {
      "lowerCase": false,
      "suggestKeywords": ["TBLPROPERTIES","AS"]
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE EXTERNAL TABLE foo (id int) TBLPROPERTIES ('foo'='1') ",
    "afterCursor": "",
    "expectedResult": {
      "lowerCase": false,
      "suggestKeywords": ["AS"]
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE TABLE boo (id int) AS ",
    "afterCursor": "",
    "expectedResult": {
      "lowerCase": false,
      "suggestKeywords": [
        "SELECT"
      ]
    }
  },
  {
    "namePrefix": "should suggest keywords",
    "beforeCursor": "CREATE TABLE boo (id int) AS SELECT ",
    "afterCursor": "",
    "containsKeywords": [
      "*"
    ],
    "expectedResult": {
      "lowerCase": false,
      "suggestAggregateFunctions": {
        "tables": []
      },
      "suggestAnalyticFunctions": true,
      "suggestFunctions": {},
      "suggestTables": {
        "prependQuestionMark": true,
        "prependFrom": true
      },
      "suggestDatabases": {
        "prependQuestionMark": true,
        "prependFrom": true,
        "appendDot": true
      }
    }
  }
]