@Override public long getInt64() { checkType(Type.int64()); checkNotNull(); return value; }
@Override public long getLong(String columnName) { int columnIndex = getColumnIndex(columnName); checkNonNullOfType(columnIndex, Type.int64(), columnName); return getLongInternal(columnIndex); }
@Override public long[] getLongArray(int columnIndex) { checkNonNullOfType(columnIndex, Type.array(Type.int64()), columnIndex); return getLongArrayInternal(columnIndex); }
@Override public List<Long> getLongList(int columnIndex) { checkNonNullOfType(columnIndex, Type.array(Type.int64()), columnIndex); return getLongListInternal(columnIndex); }
@Override Type newElementType() { return Type.array(Type.int64()); } }.test();
@Override public long[] getLongArray(String columnName) { int columnIndex = getColumnIndex(columnName); checkNonNullOfType(columnIndex, Type.array(Type.int64()), columnName); return getLongArrayInternal(columnIndex); }
@Override public List<Long> getLongList(String columnName) { int columnIndex = getColumnIndex(columnName); checkNonNullOfType(columnIndex, Type.array(Type.int64()), columnName); return getLongListInternal(columnIndex); }
@Test public void simple() { Struct row = execute(Statement.of("SELECT 1"), Type.int64()); assertThat(row.getLong(0)).isEqualTo(1); }
@Test public void int64() { Value v = Value.int64(123); assertThat(v.getType()).isEqualTo(Type.int64()); assertThat(v.isNull()).isFalse(); assertThat(v.getInt64()).isEqualTo(123); assertThat(v.toString()).isEqualTo("123"); }
@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(); }
@Test public void int64WrapperNull() { Value v = Value.int64(null); assertThat(v.getType()).isEqualTo(Type.int64()); assertThat(v.isNull()).isTrue(); assertThat(v.toString()).isEqualTo(NULL_STRING); expectedException.expect(IllegalStateException.class); expectedException.expectMessage("null value"); v.getInt64(); }
@Test public void bindInt64Array() { Struct row = execute( Statement.newBuilder("SELECT @v").bind("v").toInt64Array(asList(null, 1L, 2L)), Type.array(Type.int64())); assertThat(row.isNull(0)).isFalse(); assertThat(row.getLongList(0)).containsExactly(null, 1L, 2L).inOrder(); }
@Test public void bindInt64() { Struct row = execute(Statement.newBuilder("SELECT @v").bind("v").to(1234), Type.int64()); assertThat(row.isNull(0)).isFalse(); assertThat(row.getLong(0)).isEqualTo(1234); }
@Test public void unnamedFields() { Struct struct = Struct.newBuilder().add(Value.int64(2)).add(Value.int64(3)).build(); assertThat(struct.getType()) .isEqualTo( Type.struct( Type.StructField.of("", Type.int64()), Type.StructField.of("", Type.int64()))); assertThat(struct.getLong(0)).isEqualTo(2); assertThat(struct.getLong(1)).isEqualTo(3); }
@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 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 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 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"); }
@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 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)); }