diff --git a/src/main/java/com/google/cloud/solutions/spannerddl/parser/ASTcolumn_type.java b/src/main/java/com/google/cloud/solutions/spannerddl/parser/ASTcolumn_type.java index 7b8fb9e..733d6be 100644 --- a/src/main/java/com/google/cloud/solutions/spannerddl/parser/ASTcolumn_type.java +++ b/src/main/java/com/google/cloud/solutions/spannerddl/parser/ASTcolumn_type.java @@ -62,7 +62,14 @@ public String toString() { // length. return typeName + "(" + ((ASTlength) children[0]) + ")"; case "ARRAY": - return "ARRAY<" + ((ASTcolumn_type) children[0]) + ">"; + String arrayType = "ARRAY<" + ((ASTcolumn_type) children[0]) + ">"; + if (jjtGetNumChildren() > 1) { + return arrayType + + "(vector_length=>" + + ((SimpleNode) children[1]).jjtGetLastToken().toString() + + ")"; + } + return arrayType; case "PG": // PG.pgtype return AstTreeUtils.tokensToString(this).toUpperCase(Locale.ROOT); case "STRUCT": diff --git a/src/main/jjtree-sources/ddl_expression.jjt b/src/main/jjtree-sources/ddl_expression.jjt index 25fcccb..80a9a0e 100644 --- a/src/main/jjtree-sources/ddl_expression.jjt +++ b/src/main/jjtree-sources/ddl_expression.jjt @@ -27,6 +27,7 @@ void googlesql_operator() : | "-" | "*" | "/" + | "=>" | "=" | "!=" | "<>" diff --git a/src/main/jjtree-sources/ddl_parser.jjt b/src/main/jjtree-sources/ddl_parser.jjt index b696bf4..aab2300 100644 --- a/src/main/jjtree-sources/ddl_parser.jjt +++ b/src/main/jjtree-sources/ddl_parser.jjt @@ -393,7 +393,7 @@ void column_type() : | | | "<" column_type() ">" - [ "(" "="">" #vector_length ")"] + [ "(" "=>" #vector_length ")"] | | ( "<" struct_fields() ">" | "<>" ) | dotted_path() diff --git a/src/test/resources/ddlParserValidation.txt b/src/test/resources/ddlParserValidation.txt index 3461bd1..38f983a 100644 --- a/src/test/resources/ddlParserValidation.txt +++ b/src/test/resources/ddlParserValidation.txt @@ -215,4 +215,12 @@ CREATE TABLE test1 ( keycol INT64 NOT NULL PRIMARY KEY, value INT64 ) CREATE TABLE test1 ( keycol INT64, value INT64 ) +== Test 24 named params using => in generation expression + +CREATE TABLE test_named_params ( key INT64, key_tokens TOKENLIST AS ( TOKENIZE_SUBSTRING ( key, ngram_size_min => 3, ngram_size_max => 3, relative_search_types => [ 'word_prefix' ] ) ) HIDDEN ) PRIMARY KEY (key) + +== Test 25 ARRAY with vector_length=> + +CREATE TABLE test_vector_length ( key INT64, embedding ARRAY(vector_length=>128) ) PRIMARY KEY (key) + == diff --git a/src/test/resources/expectedDdlDiff.txt b/src/test/resources/expectedDdlDiff.txt index 7027453..6769b04 100644 --- a/src/test/resources/expectedDdlDiff.txt +++ b/src/test/resources/expectedDdlDiff.txt @@ -379,5 +379,9 @@ ALTER TABLE mytable SET OPTIONS (locality_group='lg2') ALTER TABLE mytable SET OPTIONS (droppedKey=NULL,newKey='value2') +== TEST 75 create table with named params using => + +CREATE TABLE test_named_params ( key INT64, key_tokens TOKENLIST AS ( tokenize_substring ( key, ngram_size_min => 3, ngram_size_max => 3, relative_search_types => [ 'word_prefix' ] ) ) HIDDEN ) PRIMARY KEY (key) + == diff --git a/src/test/resources/newDdl.txt b/src/test/resources/newDdl.txt index 907fb82..989f32f 100644 --- a/src/test/resources/newDdl.txt +++ b/src/test/resources/newDdl.txt @@ -592,4 +592,11 @@ create table mytable (keycol int64) primary key(keycol), OPTIONS(locality_group create table mytable (keycol int64) primary key(keycol), OPTIONS(existingKey='value', newKey='value2') +== TEST 75 create table with named params using => + +create table test_named_params ( + key int64, + key_tokens tokenlist as (tokenize_substring(key, ngram_size_min=>3, ngram_size_max=>3, relative_search_types=>['word_prefix'])) hidden +) primary key (key); + == diff --git a/src/test/resources/originalDdl.txt b/src/test/resources/originalDdl.txt index caf0af7..ed6b122 100644 --- a/src/test/resources/originalDdl.txt +++ b/src/test/resources/originalDdl.txt @@ -591,5 +591,9 @@ create table mytable (keycol int64) primary key(keycol), OPTIONS(locality_group create table mytable (keycol int64) primary key(keycol), OPTIONS(existingKey='value', droppedKey='value1') +== TEST 75 create table with named params using => + +-- Nothing here + ==