@NotNull @Override public synchronized <S> BaseQueryRunner<S> query(@NotNull final String queryText, @NotNull final ResultLayout<S> layout) { SqlQuery<S> query = new SqlQuery<S>(queryText, layout); return this.query(query); }
@NotNull @Override public SqlQuery<S> rewrite(@NotNull final StringOperator operator) { String transformedSourceText = operator.apply(mySourceText); return new SqlQuery<S>( myRow, transformedSourceText, myName, myDescription, myLayout, myDescription ); }
@NotNull public final <S> SqlQuery<S> query(@NotNull final String name, @NotNull final ResultLayout<S> layout) { TextFileFragment fragment = getText(name); fragment = stripSingleStatement(fragment); final SqlQuery<S> query = new SqlQuery<S>(fragment, layout); query.setDisplayName(fragment.getFragmentName()); return query; }
@Nullable private <S> S queryForStruct(final String queryText, final Class<S> structClass) { final SqlQuery<S> query = new SqlQuery<S>(queryText, rowOf(structOf(structClass))); return query(query); }
@Test public void query_raw_strings() { final String queryText = "select 'C', 'String' from X1"; final SqlQuery<Object[]> query = new SqlQuery<Object[]>(queryText, rowOf(rawArray())); final Object[] strings = query(query); assertThat(strings).hasSize(2); assertThat(strings[0]).isInstanceOf(String.class); assertThat(strings[1]).isInstanceOf(String.class); assertThat(strings[0]).isEqualTo("C"); assertThat(strings[1]).isEqualTo("String"); }
@Test public void million_of_ints() { SqlQuery<int[]> query = new SqlQuery<int[]>("select cast(X as int) from system_range(1,1000000)", columnOfInts(1000)); int[] array = query(query); assertThat(array).hasSize(1000000); assertThat(array[0]).isEqualTo(1); assertThat(array[999999]).isEqualTo(1000000); }
@Test public void million_of_longs() { SqlQuery<long[]> query = new SqlQuery<long[]>("select cast(X as bigint) from system_range(1,1000000)", columnOfLongs(1000)); long[] array = query(query); assertThat(array).hasSize(1000000); assertThat(array[0]).isEqualTo(1L); assertThat(array[999999]).isEqualTo(1000000L); }
@Test public void query_primitive_numbers_positive() { final String queryText = "select 127 as B, 32767 as S, 2147483647 as I, 9223372036854775807 as L from X1"; final SqlQuery<PrimitiveNumbers> query = new SqlQuery<PrimitiveNumbers>(queryText, rowOf(structOf(PrimitiveNumbers.class))); PrimitiveNumbers pn = query(query); assertThat(pn.B).isEqualTo((byte)127); assertThat(pn.S).isEqualTo((short)32767); assertThat(pn.I).isEqualTo(2147483647); assertThat(pn.L).isEqualTo(9223372036854775807L); }
@Test public void query_primitive_numbers_negative() { final String queryText = "select -128 as B, -32768 as S, -2147483648 as I, -9223372036854775808 as L from X1"; final SqlQuery<PrimitiveNumbers> query = new SqlQuery<PrimitiveNumbers>(queryText, rowOf(structOf(PrimitiveNumbers.class))); PrimitiveNumbers pn = query(query); assertThat(pn.B).isEqualTo((byte)-128); assertThat(pn.S).isEqualTo((short)-32768); assertThat(pn.I).isEqualTo(-2147483648); assertThat(pn.L).isEqualTo(-9223372036854775808L); }
@Test public void query_boxed_numbers_positive() { final String queryText = "select 127 as B, 32767 as S, 2147483647 as I, 9223372036854775807 as L from X1"; final SqlQuery<BoxedNumbers> query = new SqlQuery<BoxedNumbers>(queryText, rowOf(structOf(BoxedNumbers.class))); BoxedNumbers bn = query(query); assertThat(bn.B).isEqualTo((byte) 127); assertThat(bn.S).isEqualTo((short)32767); assertThat(bn.I).isEqualTo(2147483647); assertThat(bn.L).isEqualTo(9223372036854775807L); }
@Test public void long_array_basic() { SqlQuery<long[]> query = new SqlQuery<long[]>("select 11, 22, 33", rowOf(arrayOfLongs())); long[] array = query(query); assertThat(array).containsExactly(11L,22L,33L); }
@Test public void query_existence_1() { String queryText = "select 1 "+(isOracle ? "from dual" : ""); SqlQuery<Boolean> q = new SqlQuery<Boolean>(queryText, existence()); final Boolean b = query(q); assertThat(b).isNotNull() .isTrue(); }
@Test public void array_row_basic() { SqlQuery<Integer[]> query = new SqlQuery<Integer[]>("select 11, 22, 33", rowOf(arrayOf(3, Integer.class))); Integer[] array = query(query); assertThat(array).isEqualTo(new Integer[] {11, 22, 33}); }
@Test public void int_array_basic() { SqlQuery<int[]> query = new SqlQuery<int[]>("select 11, 22, 33", rowOf(arrayOfInts())); int[] array = query(query); assertThat(array).containsExactly(11,22,33); }
@Test public void query_existence_0 () { String queryText = "select 1 from "+(isOracle ? "dual" : "X1")+" where 1 is null"; SqlQuery<Boolean> q = new SqlQuery<Boolean>(queryText, existence()); final Boolean b = query(q); assertThat(b).isNotNull() .isFalse(); }
@Test public void empty_cursor() { final SqlQuery<List<Tetra>> query = new SqlQuery<List<Tetra>>( "select 11,22,33,44 from information_schema.schemata where 1 is null", listOf(structOf(Tetra.class))); myFacade.inSession(new InSessionNoResult() { @Override public void run(@NotNull final DBSession session) { List<Tetra> result = session.query(query).run(); assertThat(result).isEmpty(); } }); }
@Test public void query_calendar_values_now() { String queryText = "select NOW as javaDate, NOW as sqlDate, NOW as sqlTimestamp, NOW as sqlTime"; if (isOracle) queryText += " from dual"; SqlQuery<CalendarValues> query = new SqlQuery<CalendarValues>(queryText, rowOf(structOf(CalendarValues.class))) .rewrite(Rewriters.replace("NOW", sqlNow())); CalendarValues cv = query(query); assertThat(cv.javaDate) .isExactlyInstanceOf(java.util.Date.class); assertThat(cv.sqlDate) .isExactlyInstanceOf(java.sql.Date.class); assertThat(cv.sqlTimestamp).isExactlyInstanceOf(java.sql.Timestamp.class); assertThat(cv.sqlTime) .isExactlyInstanceOf(java.sql.Time.class); }
@Test public void return_one_basic_struct() { final String queryText = "select 44 as the_int_value, \n" + " 'million' as the_string_value \n"; final SqlQuery<IntAndString> query = new SqlQuery<IntAndString>(queryText, rowOf(structOf(IntAndString.class))); myFacade.inTransaction(new InTransactionNoResult() { @Override public void run(@NotNull final DBTransaction tran) { IntAndString bs = tran.query(query).run(); assertThat(bs).isNotNull(); assertThat(bs.the_int_value).isEqualTo(44); assertThat(bs.the_string_value).isEqualTo("million"); } }); }
@Test public void return_list_of_basic_struct() { final SqlQuery<List<IntAndString>> query = new SqlQuery<List<IntAndString>>(QUERY_RETURNS_TWO_BASIC_STRUCT_ROWS, listOf(structOf(IntAndString.class))); myFacade.inTransaction(new InTransactionNoResult() { @Override public void run(@NotNull final DBTransaction tran) { List<IntAndString> bs = tran.query(query).run(); assertThat(bs).isNotNull() .hasSize(2); assertThat(bs.get(0).the_int_value).isEqualTo(11); assertThat(bs.get(0).the_string_value).isEqualTo("one"); assertThat(bs.get(1).the_int_value).isEqualTo(22); assertThat(bs.get(1).the_string_value).isEqualTo("two"); } }); }
@Test public void basic_4_with_query() { final SqlScript script = new SqlScript(new SqlCommand("create table TT4a(X1 integer)"), new SqlCommand("insert into TT4a values (44)"), new SqlQuery<Boolean>("select * from TT4a", Layouts.existence()), new SqlCommand("drop table TT4a")); myFacade.inSession(new InSessionNoResult() { @Override public void run(@NotNull final DBSession session) { session.script(script).run(); } }); }