diff --git a/src/main/resources/com/google/cloud/spanner/jdbc/DatabaseMetaData_GetColumns.sql b/src/main/resources/com/google/cloud/spanner/jdbc/DatabaseMetaData_GetColumns.sql index b59f3b78a..8509ee00f 100644 --- a/src/main/resources/com/google/cloud/spanner/jdbc/DatabaseMetaData_GetColumns.sql +++ b/src/main/resources/com/google/cloud/spanner/jdbc/DatabaseMetaData_GetColumns.sql @@ -78,7 +78,7 @@ SELECT TABLE_CATALOG AS TABLE_CAT, TABLE_SCHEMA AS TABLE_SCHEM, TABLE_NAME, COLU NULL AS SCOPE_SCHEMA, NULL AS SCOPE_TABLE, NULL AS SOURCE_DATA_TYPE, - 'NO' AS IS_AUTOINCREMENT, + IS_IDENTITY AS IS_AUTOINCREMENT, CASE WHEN (IS_GENERATED = 'NEVER') THEN 'NO' ELSE 'YES' diff --git a/src/main/resources/com/google/cloud/spanner/jdbc/postgresql/DatabaseMetaData_GetColumns.sql b/src/main/resources/com/google/cloud/spanner/jdbc/postgresql/DatabaseMetaData_GetColumns.sql index 5924f980f..a8260ff13 100644 --- a/src/main/resources/com/google/cloud/spanner/jdbc/postgresql/DatabaseMetaData_GetColumns.sql +++ b/src/main/resources/com/google/cloud/spanner/jdbc/postgresql/DatabaseMetaData_GetColumns.sql @@ -72,7 +72,7 @@ SELECT TABLE_CATALOG AS "TABLE_CAT", TABLE_SCHEMA AS "TABLE_SCHEM", TABLE_NAME A NULL AS "SCOPE_SCHEMA", NULL AS "SCOPE_TABLE", NULL AS "SOURCE_DATA_TYPE", - 'NO' AS "IS_AUTOINCREMENT", + IS_IDENTITY AS "IS_AUTOINCREMENT", CASE WHEN (IS_GENERATED = 'NEVER') THEN 'NO' ELSE 'YES' diff --git a/src/test/java/com/google/cloud/spanner/jdbc/it/ITJdbcDatabaseMetaDataTest.java b/src/test/java/com/google/cloud/spanner/jdbc/it/ITJdbcDatabaseMetaDataTest.java index 0ebd0031a..6f514bed0 100644 --- a/src/test/java/com/google/cloud/spanner/jdbc/it/ITJdbcDatabaseMetaDataTest.java +++ b/src/test/java/com/google/cloud/spanner/jdbc/it/ITJdbcDatabaseMetaDataTest.java @@ -118,6 +118,7 @@ private static final class Column { private final Integer charOctetLength; private final boolean computed; private final String defaultValue; + private final boolean autoIncrement; private Column( String name, @@ -138,7 +139,8 @@ private Column( nullable, charOctetLength, false, - null); + null, + false); } private Column( @@ -151,7 +153,8 @@ private Column( boolean nullable, Integer charOctetLength, boolean computed, - String defaultValue) { + String defaultValue, + boolean autoIncrement) { this.name = name; this.type = type; this.typeName = typeName; @@ -162,14 +165,17 @@ private Column( this.charOctetLength = charOctetLength; this.computed = computed; this.defaultValue = defaultValue; + this.autoIncrement = autoIncrement; } } private static final List EXPECTED_COLUMNS = Arrays.asList( new Column("ColInt64", Types.BIGINT, "INT64", 19, null, 10, false, null), - new Column("ColFloat64", Types.DOUBLE, "FLOAT64", 15, 16, 2, false, null, false, "0.0"), - new Column("ColFloat32", Types.REAL, "FLOAT32", 15, 16, 2, false, null, false, "0.0"), + new Column( + "ColFloat64", Types.DOUBLE, "FLOAT64", 15, 16, 2, false, null, false, "0.0", false), + new Column( + "ColFloat32", Types.REAL, "FLOAT32", 15, 16, 2, false, null, false, "0.0", false), new Column("ColBool", Types.BOOLEAN, "BOOL", null, null, null, false, null), new Column( "ColString", @@ -181,7 +187,8 @@ private Column( false, 100, false, - "'Hello World!'"), + "'Hello World!'", + false), new Column( "ColStringMax", Types.NVARCHAR, "STRING(MAX)", 2621440, null, null, false, 2621440), new Column("ColBytes", Types.BINARY, "BYTES(100)", 100, null, null, false, null), @@ -196,7 +203,8 @@ private Column( false, null, false, - "DATE '2000-01-01'"), + "DATE '2000-01-01'", + false), new Column("ColTimestamp", Types.TIMESTAMP, "TIMESTAMP", 35, null, null, false, null), new Column("ColCommitTS", Types.TIMESTAMP, "TIMESTAMP", 35, null, null, false, null), new Column("ColNumeric", Types.NUMERIC, "NUMERIC", 15, null, 10, false, null), @@ -243,7 +251,10 @@ private Column( true, 2621440, true, - null)); + null, + false), + new Column( + "ColIdentity", Types.BIGINT, "INT64", 19, null, 10, true, null, false, null, true)); @Test public void testGetColumns() throws SQLException { @@ -301,8 +312,11 @@ public void testGetColumns() throws SQLException { assertNull(rs.getString("SCOPE_TABLE")); assertEquals(0, rs.getShort("SOURCE_DATA_TYPE")); assertTrue(rs.wasNull()); - assertEquals("NO", rs.getString("IS_AUTOINCREMENT")); assertEquals(col.computed ? "YES" : "NO", rs.getString("IS_GENERATEDCOLUMN")); + // TODO: Remove check when the emulator correctly returns IS_IDENTITY + if (!EmulatorSpannerHelper.isUsingEmulator()) { + assertEquals(col.autoIncrement ? "YES" : "NO", rs.getString("IS_AUTOINCREMENT")); + } assertEquals(24, rs.getMetaData().getColumnCount()); } assertFalse(rs.next()); diff --git a/src/test/java/com/google/cloud/spanner/jdbc/it/ITJdbcPreparedStatementTest.java b/src/test/java/com/google/cloud/spanner/jdbc/it/ITJdbcPreparedStatementTest.java index a26137b21..60698799f 100644 --- a/src/test/java/com/google/cloud/spanner/jdbc/it/ITJdbcPreparedStatementTest.java +++ b/src/test/java/com/google/cloud/spanner/jdbc/it/ITJdbcPreparedStatementTest.java @@ -1129,7 +1129,7 @@ public void test09_MetaData_FromQuery() throws SQLException { try (PreparedStatement ps = con.prepareStatement("SELECT * FROM TableWithAllColumnTypes WHERE ColInt64=?")) { ResultSetMetaData metadata = ps.getMetaData(); - assertEquals(26, metadata.getColumnCount()); + assertEquals(27, metadata.getColumnCount()); int index = 0; assertEquals("ColInt64", metadata.getColumnLabel(++index)); assertEquals("ColFloat64", metadata.getColumnLabel(++index)); @@ -1157,6 +1157,7 @@ public void test09_MetaData_FromQuery() throws SQLException { assertEquals("ColNumericArray", metadata.getColumnLabel(++index)); assertEquals("ColJsonArray", metadata.getColumnLabel(++index)); assertEquals("ColComputed", metadata.getColumnLabel(++index)); + assertEquals("ColIdentity", metadata.getColumnLabel(++index)); } } } diff --git a/src/test/resources/com/google/cloud/spanner/jdbc/it/CreateMusicTables.sql b/src/test/resources/com/google/cloud/spanner/jdbc/it/CreateMusicTables.sql index 8e4a60b24..712551f57 100644 --- a/src/test/resources/com/google/cloud/spanner/jdbc/it/CreateMusicTables.sql +++ b/src/test/resources/com/google/cloud/spanner/jdbc/it/CreateMusicTables.sql @@ -96,6 +96,7 @@ CREATE TABLE TableWithAllColumnTypes ( ColJsonArray ARRAY, ColComputed STRING(MAX) AS (CONCAT(COALESCE(ColString, ''), ' ', COALESCE(ColStringMax, ''))) STORED, + ColIdentity INT64 GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE), ) PRIMARY KEY (ColInt64) ;