private static Struct queryRow(ReadContext ctx) { ResultSet resultSet = Statement.of("SELECT StringValue FROM TestTable").executeQuery(ctx); // TODO(user): Consider a library routine to consume a single row from a query. assertThat(resultSet.next()).isTrue(); Struct row = resultSet.getCurrentRowAsStruct(); assertThat(resultSet.next()).isFalse(); return row; }
@Test public void bindBool() { Struct row = execute(Statement.newBuilder("SELECT @v").bind("v").to(true).build(), Type.bool()); assertThat(row.isNull(0)).isFalse(); assertThat(row.getBoolean(0)).isEqualTo(true); }
@Test public void bindReplacement() { String sql = "SELECT Name FROM Users WHERE Id = @id"; Statement stmt = Statement.newBuilder(sql).bind("id").to(1).bind("id").to(2).build(); assertThat(stmt.hasBinding("id")).isTrue(); assertThat(stmt.getSql()).isEqualTo(sql); assertThat(stmt.getParameters()).isEqualTo(ImmutableMap.of("id", Value.int64(2))); assertThat(stmt.toString()).isEqualTo(sql + " {id: 2}"); }
@Test public void basic() { String sql = "SELECT 1"; Statement stmt = Statement.of(sql); assertThat(stmt.getSql()).isEqualTo(sql); assertThat(stmt.getParameters()).isEmpty(); assertThat(stmt.toString()).isEqualTo(sql); reserializeAndAssert(stmt); }
@Test public void analyzePlan() { Statement statement = Statement.of("SELECT 1 AS column UNION ALL SELECT 2"); ResultSet resultSet = statement.analyzeQuery(client.singleUse(TimestampBound.strong()), QueryAnalyzeMode.PLAN); assertThat(resultSet.next()).isFalse(); assertThat(resultSet.getType()).isEqualTo(Type.struct(StructField.of("column", Type.int64()))); ResultSetStats receivedStats = resultSet.getStats(); assertThat(receivedStats).isNotNull(); assertThat(receivedStats.hasQueryPlan()).isTrue(); assertThat(receivedStats.hasQueryStats()).isFalse(); }
@Override public Struct read(ReadContext ctx, String key) { ResultSet resultSet = ctx.executeQuery( Statement.newBuilder("SELECT V FROM T WHERE K = @key") .bind("key") .to(key) .build()); assertThat(resultSet.next()).isTrue(); Struct row = resultSet.getCurrentRowAsStruct(); assertThat(resultSet.next()).isFalse(); return row; } });
@Ignore // Not yet supported by the backend. @Test public void arrayOfStructNullElement() { Type structType = Type.struct(StructField.of("", Type.string()), StructField.of("", Type.int64())); Struct row = execute( Statement.of( "SELECT ARRAY(SELECT AS STRUCT 'a', 1" + " UNION ALL SELECT CAST (NULL AS STRUCT<string,int64>))"), Type.array(structType)); assertThat(row.isNull(0)).isFalse(); List<Struct> value = row.getStructList(0); assertThat(value.size()).isEqualTo(2); assertThat(value.get(0).getType()).isEqualTo(structType); assertThat(value.get(0).getString(0)).isEqualTo("a"); assertThat(value.get(0).getLong(1)).isEqualTo(1); assertThat(value.get(1)).isNull(); }
@Test public void bindStructNull() { Struct row = execute( Statement.newBuilder("SELECT @p IS NULL") .bind("p") .to( Type.struct( asList( Type.StructField.of("f1", Type.string()), Type.StructField.of("f2", Type.float64()))), null) .build(), Type.bool()); assertThat(row.getBoolean(0)).isTrue(); }
@Test public void bindBoolArrayNull() { Struct row = execute( Statement.newBuilder("SELECT @v").bind("v").toBoolArray((boolean[]) null), Type.array(Type.bool())); assertThat(row.isNull(0)).isTrue(); }
@Test public void bindTimestampArrayNull() { Struct row = execute( Statement.newBuilder("SELECT @v").bind("v").toTimestampArray(null), Type.array(Type.timestamp())); assertThat(row.isNull(0)).isTrue(); }
@Test public void bindStringArrayNull() { Struct row = execute( Statement.newBuilder("SELECT @v").bind("v").toStringArray(null), Type.array(Type.string())); assertThat(row.isNull(0)).isTrue(); }
@Test public void bindBytesArrayNull() { Struct row = execute( Statement.newBuilder("SELECT @v").bind("v").toBytesArray(null), Type.array(Type.bytes())); assertThat(row.isNull(0)).isTrue(); }
@Test public void bindInt64ArrayNull() { Struct row = execute( Statement.newBuilder("SELECT @v").bind("v").toInt64Array((long[]) null), Type.array(Type.int64())); assertThat(row.isNull(0)).isTrue(); }
@Test public void bindStringNull() { Struct row = execute(Statement.newBuilder("SELECT @v").bind("v").to((String) null), Type.string()); assertThat(row.isNull(0)).isTrue(); }
@Test public void bindDateArrayNull() { Struct row = execute( Statement.newBuilder("SELECT @v").bind("v").toDateArray(null), Type.array(Type.date())); assertThat(row.isNull(0)).isTrue(); }
@Test public void bindFloat64Null() { Struct row = execute(Statement.newBuilder("SELECT @v").bind("v").to((Double) null), Type.float64()); assertThat(row.isNull(0)).isTrue(); }
@Test public void bindDateNull() { Struct row = execute(Statement.newBuilder("SELECT @v").bind("v").to((Date) null), Type.date()); assertThat(row.isNull(0)).isTrue(); }
@Test public void bindFloat64ArrayNull() { Struct row = execute( Statement.newBuilder("SELECT @v").bind("v").toFloat64Array((double[]) null), Type.array(Type.float64())); assertThat(row.isNull(0)).isTrue(); }
@Test public void bindInt64Null() { Struct row = execute(Statement.newBuilder("SELECT @v").bind("v").to((Long) null), Type.int64()); assertThat(row.isNull(0)).isTrue(); }
@Test public void bindBytesNull() { Struct row = execute(Statement.newBuilder("SELECT @v").bind("v").to((ByteArray) null), Type.bytes()); assertThat(row.isNull(0)).isTrue(); }