Skip to content

Commit

Permalink
Tests
Browse files Browse the repository at this point in the history
  • Loading branch information
jjfox15 committed Jan 28, 2025
1 parent 7ced952 commit c7e3e23
Show file tree
Hide file tree
Showing 3 changed files with 358 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ private void prettyPrintPg(
if (interleaveInParent() != null) {
appendable
.append(" \nINTERLEAVE IN ")
.append(interleaveType() == InterleaveType.IN ? "" : "PARENT")
.append(interleaveType() == InterleaveType.IN ? "" : "PARENT ")
.append(quoteIdentifier(interleaveInParent(), dialect()));
if (onDeleteCascade()) {
appendable.append(" ON DELETE CASCADE");
Expand Down Expand Up @@ -166,7 +166,7 @@ private void prettyPrintGsql(
if (interleaveInParent() != null) {
appendable
.append(",\nINTERLEAVE IN ")
.append(interleaveType() == InterleaveType.IN ? " " : "PARENT")
.append(interleaveType() == InterleaveType.IN ? " " : "PARENT ")
.append(quoteIdentifier(interleaveInParent(), dialect()));
if (onDeleteCascade()) {
appendable.append(" ON DELETE CASCADE");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1302,4 +1302,256 @@ public void pgPlacementTable() {
+ "\"location\" character varying NOT NULL PLACEMENT KEY,\n\t"
+ "PRIMARY KEY (\"id\")\n)\n\n"));
}

@Test
public void interleaveTable() {
String parentTable =
"{"
+ " \"type\" : \"record\","
+ " \"name\" : \"ParentTable\","
+ " \"namespace\" : \"spannertest\","
+ " \"fields\" : [ {"
+ " \"name\" : \"k1\","
+ " \"type\" : \"string\","
+ " \"sqlType\" : \"STRING(MAX)\","
+ " \"notNull\" : \"true\""
+ " }, {"
+ " \"name\" : \"v1\","
+ " \"type\" : \"string\","
+ " \"sqlType\" : \"STRING(MAX)\","
+ " \"notNull\" : \"true\""
+ " }],"
+ " \"googleStorage\" : \"CloudSpanner\","
+ " \"googleFormatVersion\" : \"booleans\","
+ " \"spannerPrimaryKey_0\" : \"`k1` ASC\""
+ "}";

// Confirming backwards compatibility, so that an avro schema with no interleave type is treated
// as IN PARENT by default.
String interleaveInParentTableNoInterleaveType =
"{"
+ " \"type\" : \"record\","
+ " \"name\" : \"interleaveInParentTableNoInterleaveType\","
+ " \"namespace\" : \"spannertest\","
+ " \"fields\" : [ {"
+ " \"name\" : \"k1\","
+ " \"type\" : \"string\","
+ " \"sqlType\" : \"STRING(MAX)\","
+ " \"notNull\" : \"true\""
+ " }, {"
+ " \"name\" : \"v1\","
+ " \"type\" : \"string\","
+ " \"sqlType\" : \"STRING(MAX)\","
+ " \"notNull\" : \"true\""
+ " }],"
+ " \"googleStorage\" : \"CloudSpanner\","
+ " \"spannerParent\" : \"ParentTable\","
+ " \"googleFormatVersion\" : \"booleans\","
+ " \"spannerPrimaryKey_0\" : \"`k1` ASC\""
+ "}";

String interleaveInParentTable =
"{"
+ " \"type\" : \"record\","
+ " \"name\" : \"interleaveInParentTable\","
+ " \"namespace\" : \"spannertest\","
+ " \"fields\" : [ {"
+ " \"name\" : \"k1\","
+ " \"type\" : \"string\","
+ " \"sqlType\" : \"STRING(MAX)\","
+ " \"notNull\" : \"true\""
+ " }, {"
+ " \"name\" : \"v1\","
+ " \"type\" : \"string\","
+ " \"sqlType\" : \"STRING(MAX)\","
+ " \"notNull\" : \"true\""
+ " }],"
+ " \"googleStorage\" : \"CloudSpanner\","
+ " \"spannerParent\" : \"ParentTable\","
+ " \"spannerInterleaveType\" : \"IN PARENT\","
+ " \"googleFormatVersion\" : \"booleans\","
+ " \"spannerPrimaryKey_0\" : \"`k1` ASC\""
+ "}";

String interleaveInTable =
"{"
+ " \"type\" : \"record\","
+ " \"name\" : \"interleaveInTable\","
+ " \"namespace\" : \"spannertest\","
+ " \"fields\" : [ {"
+ " \"name\" : \"k1\","
+ " \"type\" : \"string\","
+ " \"sqlType\" : \"STRING(MAX)\","
+ " \"notNull\" : \"true\""
+ " }, {"
+ " \"name\" : \"v1\","
+ " \"type\" : \"string\","
+ " \"sqlType\" : \"STRING(MAX)\","
+ " \"notNull\" : \"true\""
+ " }],"
+ " \"googleStorage\" : \"CloudSpanner\","
+ " \"spannerParent\" : \"ParentTable\","
+ " \"spannerInterleaveType\" : \"IN\","
+ " \"googleFormatVersion\" : \"booleans\","
+ " \"spannerPrimaryKey_0\" : \"`k1` ASC\""
+ "}";

Collection<Schema> schemas = new ArrayList<>();
Schema.Parser parser = new Schema.Parser();
schemas.add(parser.parse(parentTable));
schemas.add(parser.parse(interleaveInParentTableNoInterleaveType));
schemas.add(parser.parse(interleaveInParentTable));
schemas.add(parser.parse(interleaveInTable));

AvroSchemaToDdlConverter converter = new AvroSchemaToDdlConverter();
Ddl ddl = converter.toDdl(schemas);
assertThat(ddl.allTables(), hasSize(4));
assertThat(
ddl.prettyPrint(),
equalToCompressingWhiteSpace(
"CREATE TABLE `ParentTable` (\n\t"
+ "`k1` STRING(MAX) NOT NULL,\n\t"
+ "`v1` STRING(MAX) NOT NULL,\n"
+ ") PRIMARY KEY (`k1` ASC)\n\n\n"
+ "CREATE TABLE `interleaveInParentTable` (\n\t"
+ "`k1` STRING(MAX) NOT NULL,\n\t"
+ "`v1` STRING(MAX) NOT NULL,\n"
+ ") PRIMARY KEY (`k1` ASC),\nINTERLEAVE IN PARENT `ParentTable`\n\n"
+ "CREATE TABLE `interleaveInParentTableNoInterleaveType` (\n\t"
+ "`k1` STRING(MAX) NOT NULL,\n\t"
+ "`v1` STRING(MAX) NOT NULL,\n"
+ ") PRIMARY KEY (`k1` ASC),\nINTERLEAVE IN PARENT `ParentTable`\n\n"
+ "CREATE TABLE `interleaveInTable` (\n\t"
+ "`k1` STRING(MAX) NOT NULL,\n\t"
+ "`v1` STRING(MAX) NOT NULL,\n"
+ ") PRIMARY KEY (`k1` ASC),\nINTERLEAVE IN `ParentTable`\n\n"));
}

@Test
public void pgInterleaveTable() {
String parentTable =
"{"
+ " \"type\" : \"record\","
+ " \"name\" : \"ParentTable\","
+ " \"namespace\" : \"spannertest\","
+ " \"fields\" : [ {"
+ " \"name\" : \"k1\","
+ " \"type\" : \"string\","
+ " \"sqlType\" : \"character varying\","
+ " \"notNull\" : \"true\""
+ " }, {"
+ " \"name\" : \"v1\","
+ " \"type\" : \"string\","
+ " \"sqlType\" : \"character varying\","
+ " \"notNull\" : \"true\""
+ " }],"
+ " \"googleStorage\" : \"CloudSpanner\","
+ " \"googleFormatVersion\" : \"booleans\","
+ " \"spannerPrimaryKey_0\" : \"k1 ASC\""
+ "}";

// Confirming backwards compatibility, so that an avro schema with no interleave type is treated
// as IN PARENT by default.
String interleaveInParentTableNoInterleaveType =
"{"
+ " \"type\" : \"record\","
+ " \"name\" : \"interleaveInParentTableNoInterleaveType\","
+ " \"namespace\" : \"spannertest\","
+ " \"fields\" : [ {"
+ " \"name\" : \"k1\","
+ " \"type\" : \"string\","
+ " \"sqlType\" : \"character varying\","
+ " \"notNull\" : \"true\""
+ " }, {"
+ " \"name\" : \"v1\","
+ " \"type\" : \"string\","
+ " \"sqlType\" : \"character varying\","
+ " \"notNull\" : \"true\""
+ " }],"
+ " \"googleStorage\" : \"CloudSpanner\","
+ " \"spannerParent\" : \"ParentTable\","
+ " \"googleFormatVersion\" : \"booleans\","
+ " \"spannerPrimaryKey_0\" : \"k1 ASC\""
+ "}";

String interleaveInParentTable =
"{"
+ " \"type\" : \"record\","
+ " \"name\" : \"interleaveInParentTable\","
+ " \"namespace\" : \"spannertest\","
+ " \"fields\" : [ {"
+ " \"name\" : \"k1\","
+ " \"type\" : \"string\","
+ " \"sqlType\" : \"character varying\","
+ " \"notNull\" : \"true\""
+ " }, {"
+ " \"name\" : \"v1\","
+ " \"type\" : \"string\","
+ " \"sqlType\" : \"character varying\","
+ " \"notNull\" : \"true\""
+ " }],"
+ " \"googleStorage\" : \"CloudSpanner\","
+ " \"spannerParent\" : \"ParentTable\","
+ " \"spannerInterleaveType\" : \"IN PARENT\","
+ " \"googleFormatVersion\" : \"booleans\","
+ " \"spannerPrimaryKey_0\" : \"k1 ASC\""
+ "}";

String interleaveInTable =
"{"
+ " \"type\" : \"record\","
+ " \"name\" : \"interleaveInTable\","
+ " \"namespace\" : \"spannertest\","
+ " \"fields\" : [ {"
+ " \"name\" : \"k1\","
+ " \"type\" : \"string\","
+ " \"sqlType\" : \"character varying\","
+ " \"notNull\" : \"true\""
+ " }, {"
+ " \"name\" : \"v1\","
+ " \"type\" : \"string\","
+ " \"sqlType\" : \"character varying\","
+ " \"notNull\" : \"true\""
+ " }],"
+ " \"googleStorage\" : \"CloudSpanner\","
+ " \"spannerParent\" : \"ParentTable\","
+ " \"spannerInterleaveType\" : \"IN\","
+ " \"googleFormatVersion\" : \"booleans\","
+ " \"spannerPrimaryKey_0\" : \"k1 ASC\""
+ "}";

Collection<Schema> schemas = new ArrayList<>();
Schema.Parser parser = new Schema.Parser();
schemas.add(parser.parse(parentTable));
schemas.add(parser.parse(interleaveInParentTableNoInterleaveType));
schemas.add(parser.parse(interleaveInParentTable));
schemas.add(parser.parse(interleaveInTable));

AvroSchemaToDdlConverter converter = new AvroSchemaToDdlConverter(Dialect.POSTGRESQL);
Ddl ddl = converter.toDdl(schemas);
assertThat(ddl.allTables(), hasSize(4));
assertThat(
ddl.prettyPrint(),
equalToCompressingWhiteSpace(
"CREATE TABLE \"ParentTable\" (\n\t"
+ "\"k1\" character varying NOT NULL,\n\t"
+ "\"v1\" character varying NOT NULL,\n\t"
+ "PRIMARY KEY (\"k1\")\n"
+ ")\n\n\n"
+ "CREATE TABLE \"interleaveInParentTable\" (\n\t"
+ "\"k1\" character varying NOT NULL,\n\t"
+ "\"v1\" character varying NOT NULL,\n\t"
+ "PRIMARY KEY (\"k1\")\n"
+ ") \nINTERLEAVE IN PARENT \"ParentTable\"\n\n"
+ "CREATE TABLE \"interleaveInParentTableNoInterleaveType\" (\n\t"
+ "\"k1\" character varying NOT NULL,\n\t"
+ "\"v1\" character varying NOT NULL,\n\t"
+ "PRIMARY KEY (\"k1\")\n"
+ ") \nINTERLEAVE IN PARENT \"ParentTable\"\n\n"
+ "CREATE TABLE \"interleaveInTable\" (\n\t"
+ "\"k1\" character varying NOT NULL,\n\t"
+ "\"v1\" character varying NOT NULL,\n\t"
+ "PRIMARY KEY (\"k1\")\n"
+ ") \nINTERLEAVE IN \"ParentTable\"\n\n"));
}
}
Loading

0 comments on commit c7e3e23

Please sign in to comment.