private Object getAsObject(int columnIndex) { Type type = getColumnType(columnIndex); if (isNull(columnIndex)) { return null; switch (type.getCode()) { case BOOL: return getBooleanInternal(columnIndex); case INT64: return getLongInternal(columnIndex); return getStructInternal(columnIndex); case ARRAY: switch (type.getArrayElementType().getCode()) { case BOOL: return getBooleanListInternal(columnIndex);
@Test public void bindStringArrayEmpty() { Struct row = execute( Statement.newBuilder("SELECT @v").bind("v").toStringArray(Arrays.<String>asList()), Type.array(Type.string())); assertThat(row.isNull(0)).isFalse(); assertThat(row.getStringList(0)).containsExactly(); }
@Test public void bindInt64ArrayEmpty() { Struct row = execute( Statement.newBuilder("SELECT @v").bind("v").toInt64Array(Arrays.<Long>asList()), Type.array(Type.int64())); assertThat(row.isNull(0)).isFalse(); assertThat(row.getLongList(0)).containsExactly(); }
/** Returns a descriptor for an array of {@code elementType}. */ public static Type array(Type elementType) { Preconditions.checkNotNull(elementType); switch (elementType.getCode()) { case BOOL: return TYPE_ARRAY_BOOL; case INT64: return TYPE_ARRAY_INT64; case FLOAT64: return TYPE_ARRAY_FLOAT64; case STRING: return TYPE_ARRAY_STRING; case BYTES: return TYPE_ARRAY_BYTES; case TIMESTAMP: return TYPE_ARRAY_TIMESTAMP; case DATE: return TYPE_ARRAY_DATE; default: return new Type(Code.ARRAY, elementType, null); } }
private void checkNonNullArrayOfStruct(int columnIndex, Object columnNameForError) { Type actualType = getColumnType(columnIndex); checkState( actualType.getCode() == Type.Code.ARRAY && actualType.getArrayElementType().getCode() == Type.Code.STRUCT, "Column %s is not of correct type: expected ARRAY<STRUCT<...>> but was %s", columnNameForError, actualType); checkNonNull(columnIndex, columnNameForError); } }
PrePopulatedResultSet(Type type, Iterable<Struct> rows) { Preconditions.checkNotNull(rows); Preconditions.checkNotNull(type); Preconditions.checkArgument(type.getCode() == Type.Code.STRUCT); for (StructField field : type.getStructFields()) { if (field.getType().getCode() == Code.STRUCT) { throw new UnsupportedOperationException( "STRUCT-typed columns are not supported inside ResultSets."); } } this.type = type; this.rows = rows instanceof List<?> ? (List<Struct>) rows : Lists.newArrayList(rows); for (Struct row : rows) { Preconditions.checkArgument(row.getType().equals(type)); } }
@Test public void nullStructGetter() { List<Type.StructField> fieldTypes = Arrays.asList( Type.StructField.of("f1", Type.string()), Type.StructField.of("f2", Type.int64())); Value v = Value.struct(Type.struct(fieldTypes), null); assertThat(v.isNull()).isTrue(); expectedException.expect(IllegalStateException.class); expectedException.expectMessage("Illegal call to getter of null value."); v.getStruct(); }
@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 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(); }
@Test public void bindDateArrayEmpty() { Struct row = execute( Statement.newBuilder("SELECT @v").bind("v").toDateArray(Arrays.<Date>asList()), Type.array(Type.date())); assertThat(row.isNull(0)).isFalse(); assertThat(row.getDateList(0)).containsExactly(); }
@Test public void bindBoolArrayEmpty() { Struct row = execute( Statement.newBuilder("SELECT @v").bind("v").toBoolArray(Arrays.<Boolean>asList()), Type.array(Type.bool())); assertThat(row.isNull(0)).isFalse(); assertThat(row.getBooleanList(0)).containsExactly(); }
@Test public void bindTimestampArrayEmpty() { Struct row = execute( Statement.newBuilder("SELECT @v") .bind("v") .toTimestampArray(Arrays.<Timestamp>asList()), Type.array(Type.timestamp())); assertThat(row.isNull(0)).isFalse(); assertThat(row.getTimestampList(0)).containsExactly(); }
@Test public void bindBytesArrayEmpty() { Struct row = execute( Statement.newBuilder("SELECT @v").bind("v").toBytesArray(Arrays.<ByteArray>asList()), Type.array(Type.bytes())); assertThat(row.isNull(0)).isFalse(); assertThat(row.getBytesList(0)).isEmpty(); }
@Test public void bool() { Value v = Value.bool(true); assertThat(v.getType()).isEqualTo(Type.bool()); assertThat(v.isNull()).isFalse(); assertThat(v.getBool()).isTrue(); assertThat(v.toString()).isEqualTo("true"); }
@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); }
@Ignore // Not yet supported by the backend. @Test public void arrayOfStructNull() { Type structType = Type.struct(StructField.of("", Type.string()), StructField.of("", Type.int64())); Struct row = execute( Statement.of("SELECT CAST (NULL AS ARRAY<STRUCT<string,int64>>)"), Type.array(structType)); 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 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 bindDateArrayNull() { Struct row = execute( Statement.newBuilder("SELECT @v").bind("v").toDateArray(null), Type.array(Type.date())); 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(); }