@Override Type newType() { return Type.string(); } }.test();
@Override Type newElementType() { return Type.string(); } }.test();
@Override public String getString(int columnIndex) { checkNonNullOfType(columnIndex, Type.string(), columnIndex); return getStringInternal(columnIndex); }
@Override public String getString() { checkType(Type.string()); checkNotNull(); return value; }
@Override public List<String> getStringList(int columnIndex) { checkNonNullOfType(columnIndex, Type.array(Type.string()), columnIndex); return getStringListInternal(columnIndex); }
@Override public String getString(String columnName) { int columnIndex = getColumnIndex(columnName); checkNonNullOfType(columnIndex, Type.string(), columnName); return getStringInternal(columnIndex); }
@Override public List<String> getStringList(String columnName) { int columnIndex = getColumnIndex(columnName); checkNonNullOfType(columnIndex, Type.array(Type.string()), columnName); return getStringListInternal(columnIndex); }
@Test public void string() { Value v = Value.string("abc"); assertThat(v.getType()).isEqualTo(Type.string()); assertThat(v.isNull()).isFalse(); assertThat(v.getString()).isEqualTo("abc"); }
@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 bindString() { Struct row = execute(Statement.newBuilder("SELECT @v").bind("v").to("abc"), Type.string()); assertThat(row.isNull(0)).isFalse(); assertThat(row.getString(0)).isEqualTo("abc"); }
@Test public void arrayOfStructEmpty() { Type structType = Type.struct(StructField.of("", Type.string()), StructField.of("", Type.int64())); Struct row = execute( Statement.of("SELECT ARRAY(SELECT AS STRUCT * FROM (SELECT 'a', 1) WHERE 0 = 1)"), Type.array(structType)); assertThat(row.isNull(0)).isFalse(); List<Struct> value = row.getStructList(0); assertThat(value.size()).isEqualTo(0); }
@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 empty() { Type type = Type.struct(Type.StructField.of("f", Type.string())); PartialResultSet partialResultSet = PartialResultSet.newBuilder().setMetadata(makeMetadata(type)).build(); consumer.onPartialResultSet(partialResultSet); consumer.onCompleted(); assertThat(resultSet.next()).isFalse(); assertThat(resultSet.getType()).isEqualTo(type); }
@Test public void closeResultSet() { ResultSet rs = ResultSets.forRows( Type.struct(Type.StructField.of("f1", Type.string())), Arrays.asList(Struct.newBuilder().set("f1").to("x").build())); rs.close(); expected.expect(IllegalStateException.class); rs.getCurrentRowAsStruct(); }
@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 structFieldIndexAmbiguous() { Type t = Type.struct(StructField.of("f1", Type.int64()), StructField.of("f1", Type.string())); expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("Ambiguous field name: f1"); t.getFieldIndex("f1"); }
@Test public void emptyMultipleResponses() { PartialResultSet partialResultSet = PartialResultSet.newBuilder() .setMetadata(makeMetadata(Type.struct(Type.StructField.of("f", Type.string())))) .build(); consumer.onPartialResultSet(partialResultSet); consumer.onPartialResultSet(PartialResultSet.getDefaultInstance()); consumer.onPartialResultSet(PartialResultSet.getDefaultInstance()); consumer.onCompleted(); assertThat(resultSet.next()).isFalse(); }
@Test public void resultSetIterationWithStructColumns() { Type nestedStructType = Type.struct(Type.StructField.of("g1", Type.string())); Type type = Type.struct( Type.StructField.of("f1", nestedStructType), Type.StructField.of("f2", Type.int64())); Struct value1 = Struct.newBuilder().set("g1").to("abc").build(); Struct struct1 = Struct.newBuilder().set("f1").to(value1).set("f2").to((Long) null).build(); expected.expect(UnsupportedOperationException.class); expected.expectMessage("STRUCT-typed columns are not supported inside ResultSets."); ResultSets.forRows(type, Arrays.asList(struct1)); }
@Test public void singleResponse() { consumer.onPartialResultSet( PartialResultSet.newBuilder() .setMetadata(makeMetadata(Type.struct(Type.StructField.of("f", Type.string())))) .addValues(Value.string("a").toProto()) .addValues(Value.string("b").toProto()) .addValues(Value.string("c").toProto()) .build()); consumer.onCompleted(); assertThat(consumeAllString()).containsExactly("a", "b", "c").inOrder(); }
@Test public void multiResponseChunkingStreamClosed() { consumer.onPartialResultSet( PartialResultSet.newBuilder() .setMetadata(makeMetadata(Type.struct(Type.StructField.of("f", Type.string())))) .addValues(Value.string("abcdefg").toProto()) .setChunkedValue(true) .build()); consumer.onCompleted(); expectedException.expect(isSpannerException(ErrorCode.INTERNAL)); resultSet.next(); }