Skip to content

Commit 1141ff0

Browse files
committed
Updated tests for sql queries
1 parent 65817ac commit 1141ff0

8 files changed

+93
-39
lines changed

jdbc/src/test/java/tech/ydb/jdbc/impl/YdbPreparedStatementImplTest.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -231,9 +231,10 @@ public void addAndClearBatch(SqlQueries.YqlQuery mode) throws SQLException {
231231
@EnumSource(SqlQueries.YqlQuery.class)
232232
public void executeEmptyBatch(SqlQueries.YqlQuery mode) throws SQLException {
233233
String yql = TEST_TABLE.upsertOne(mode, "c_Text", "Text");
234+
String prm = mode == SqlQueries.YqlQuery.SIMPLE ? "$key" : "$c_Text";
234235
try (YdbPreparedStatement statement = jdbc.connection().unwrap(YdbConnection.class).prepareStatement(yql)) {
235-
ExceptionAssert.sqlDataException("Missing value for parameter", () -> statement.execute());
236-
ExceptionAssert.sqlDataException("Missing value for parameter", () -> statement.executeUpdate());
236+
ExceptionAssert.sqlDataException("Missing value for parameter: " + prm, statement::execute);
237+
ExceptionAssert.sqlDataException("Missing value for parameter: " + prm, statement::executeUpdate);
237238
statement.executeBatch();
238239
}
239240

jdbc/src/test/java/tech/ydb/jdbc/impl/YdbPreparedStatementTest.java

Lines changed: 72 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import java.time.temporal.ChronoField;
2121
import java.time.temporal.ChronoUnit;
2222
import java.util.UUID;
23+
import java.util.function.Function;
2324

2425
import org.junit.jupiter.api.AfterAll;
2526
import org.junit.jupiter.api.Assertions;
@@ -126,21 +127,40 @@ public void executeUpdateTest(SqlQueries.JdbcQuery query) throws SQLException {
126127
}
127128
}
128129

129-
@ParameterizedTest(name = "with {0}")
130-
@EnumSource(value=SqlQueries.JdbcQuery.class, names = { "BATCHED", "TYPED", "BULK" })
131-
public void executeWithMissingParameter(SqlQueries.JdbcQuery query) throws SQLException {
132-
String sql = TEST_TABLE.upsertOne(query, "c_Text", "Text");
130+
@Test
131+
public void executeWithMissingParameter() throws SQLException {
132+
Function<SqlQueries.JdbcQuery, String> upsert = mode -> TEST_TABLE.upsertOne(mode, "c_Text", "Text");
133133

134-
try (PreparedStatement statement = jdbc.connection().prepareStatement(sql)) {
135-
statement.setInt(1, 1);
136-
ExceptionAssert.sqlDataException("Missing value for parameter", statement::execute);
134+
try (PreparedStatement ps = jdbc.connection().prepareStatement(upsert.apply(SqlQueries.JdbcQuery.STANDARD))) {
135+
ps.setInt(1, 1);
136+
ExceptionAssert.sqlDataException("Missing value for parameter: $p2", ps::execute);
137+
}
138+
139+
try (PreparedStatement ps = jdbc.connection().prepareStatement(upsert.apply(SqlQueries.JdbcQuery.IN_MEMORY))) {
140+
ps.setInt(1, 1);
141+
ExceptionAssert.sqlDataException("Missing value for parameter: $jp2", ps::execute);
142+
}
143+
144+
try (PreparedStatement ps = jdbc.connection().prepareStatement(upsert.apply(SqlQueries.JdbcQuery.TYPED))) {
145+
ps.setInt(1, 1);
146+
ExceptionAssert.sqlDataException("Missing value for parameter: $p2", ps::execute);
147+
}
148+
149+
try (PreparedStatement ps = jdbc.connection().prepareStatement(upsert.apply(SqlQueries.JdbcQuery.BATCHED))) {
150+
ps.setInt(1, 1);
151+
ExceptionAssert.sqlDataException("Missing value for parameter: $p2", ps::execute);
152+
}
153+
154+
try (PreparedStatement ps = jdbc.connection().prepareStatement(upsert.apply(SqlQueries.JdbcQuery.BULK))) {
155+
ps.setInt(1, 1);
156+
ExceptionAssert.sqlDataException("Missing value for parameter: $c_Text", ps::execute);
137157
}
138158
}
139159

140160
@ParameterizedTest(name = "with {0}")
141-
@EnumSource(value=SqlQueries.JdbcQuery.class, names = { "BATCHED", "TYPED", "BULK" })
161+
@EnumSource(value=SqlQueries.JdbcQuery.class, names = { "BATCHED", "TYPED" })
142162
public void executeWithWrongType(SqlQueries.JdbcQuery query) throws SQLException {
143-
String sql = TEST_TABLE.upsertOne(query, "c_Text", "Text"); // Must be Optional<Text>
163+
String sql = TEST_TABLE.upsertOne(query, "c_Text", "Text");
144164

145165
try (PreparedStatement statement = jdbc.connection().prepareStatement(sql)) {
146166
statement.setInt(1, 1);
@@ -151,41 +171,62 @@ public void executeWithWrongType(SqlQueries.JdbcQuery query) throws SQLException
151171
}
152172

153173
@ParameterizedTest(name = "with {0}")
154-
@EnumSource(value=SqlQueries.JdbcQuery.class, names = { "BATCHED", "TYPED", "BULK" })
155-
public void executeWithWrongNameReal(SqlQueries.JdbcQuery query) throws SQLException {
156-
String upsert = TEST_TABLE.upsertOne(query, "c_NotText", "Text");
157-
ExceptionAssert.ydbException("No such column: c_NotText", () -> jdbc.connection().prepareStatement(upsert));
158-
};
174+
@ValueSource(strings = { "c_NotText" , "C_TEXT", "c_text" })
175+
public void executeWithWrongColumnName(String columnName) throws SQLException {
176+
String errorMessage = "No such column: " + columnName;
159177

160-
@ParameterizedTest(name = "with {0}")
161-
@EnumSource(value=SqlQueries.JdbcQuery.class, names = { "STANDARD", "IN_MEMORY" })
162-
public void executeWithWrongNameInMemory(SqlQueries.JdbcQuery query) throws SQLException {
163-
String upsert = TEST_TABLE.upsertOne(query, "c_NotText", "Text");
178+
String standard = TEST_TABLE.upsertOne(SqlQueries.JdbcQuery.STANDARD, columnName, "Text");
179+
String inMemory = TEST_TABLE.upsertOne(SqlQueries.JdbcQuery.IN_MEMORY, columnName, "Text");
180+
String typed = TEST_TABLE.upsertOne(SqlQueries.JdbcQuery.TYPED, columnName, "Text");
181+
String batched = TEST_TABLE.upsertOne(SqlQueries.JdbcQuery.BATCHED, columnName, "Text");
182+
String bulk = TEST_TABLE.upsertOne(SqlQueries.JdbcQuery.BULK, columnName, "Text");
164183

165-
try (PreparedStatement statement = jdbc.connection().prepareStatement(upsert)) {
184+
try (PreparedStatement statement = jdbc.connection().prepareStatement(standard)) {
166185
statement.setInt(1, 1);
167186
statement.setString(2, "value-1");
168-
ExceptionAssert.ydbException("No such column: c_NotText", statement::execute);
187+
ExceptionAssert.ydbException(errorMessage, statement::execute);
169188
}
170-
};
171189

172-
@ParameterizedTest(name = "with {0}")
173-
@EnumSource(value=SqlQueries.JdbcQuery.class, names = { "BATCHED", "TYPED", "BULK" })
174-
public void executeWithWrongTableReal(SqlQueries.JdbcQuery query) throws SQLException {
175-
String upsert = new SqlQueries("unknown_table").upsertOne(query, "c_NotText", "Text");
176-
ExceptionAssert.ydbException("Cannot find table", () -> jdbc.connection().prepareStatement(upsert));
190+
try (PreparedStatement statement = jdbc.connection().prepareStatement(inMemory)) {
191+
statement.setInt(1, 1);
192+
statement.setString(2, "value-1");
193+
ExceptionAssert.ydbException(errorMessage, statement::execute);
194+
}
195+
196+
ExceptionAssert.ydbException(errorMessage, () -> jdbc.connection().prepareStatement(typed));
197+
ExceptionAssert.ydbException(errorMessage, () -> jdbc.connection().prepareStatement(batched));
198+
ExceptionAssert.sqlException("Cannot parse BULK upsert: column " + columnName + " not found",
199+
() -> jdbc.connection().prepareStatement(bulk));
177200
};
178201

179202
@ParameterizedTest(name = "with {0}")
180-
@EnumSource(value=SqlQueries.JdbcQuery.class, names = { "STANDARD", "IN_MEMORY" })
181-
public void executeWithWrongTableInMemory(SqlQueries.JdbcQuery query) throws SQLException {
182-
String upsert = new SqlQueries("unknown_table").upsertOne(query, "c_NotText", "Text");
203+
@ValueSource(strings = { "unknown_table"/*, "YDB_PREPARED_TEST", "ydD_prepared_test"*/ })
204+
public void executeWithWrongTableName(String tableName) throws SQLException {
205+
String errorMessage = "Cannot find table 'db.[" + jdbc.database() + "/" + tableName + "]";
206+
SqlQueries queries = new SqlQueries(tableName);
207+
208+
String standard = queries.upsertOne(SqlQueries.JdbcQuery.STANDARD, "c_Text", "Text");
209+
String inMemory = queries.upsertOne(SqlQueries.JdbcQuery.IN_MEMORY, "c_Text", "Text");
210+
String typed = queries.upsertOne(SqlQueries.JdbcQuery.TYPED, "c_Text", "Text");
211+
String batched = queries.upsertOne(SqlQueries.JdbcQuery.BATCHED, "c_Text", "Text");
212+
String bulk = queries.upsertOne(SqlQueries.JdbcQuery.BULK, "c_Text", "Text");
213+
214+
try (PreparedStatement statement = jdbc.connection().prepareStatement(standard)) {
215+
statement.setInt(1, 1);
216+
statement.setString(2, "value-1");
217+
ExceptionAssert.ydbException(errorMessage, statement::execute);
218+
}
183219

184-
try (PreparedStatement statement = jdbc.connection().prepareStatement(upsert)) {
220+
try (PreparedStatement statement = jdbc.connection().prepareStatement(inMemory)) {
185221
statement.setInt(1, 1);
186222
statement.setString(2, "value-1");
187-
ExceptionAssert.ydbException("Cannot find table", statement::execute);
223+
ExceptionAssert.ydbException(errorMessage, statement::execute);
188224
}
225+
226+
ExceptionAssert.ydbException(errorMessage, () -> jdbc.connection().prepareStatement(typed));
227+
ExceptionAssert.ydbException(errorMessage, () -> jdbc.connection().prepareStatement(batched));
228+
ExceptionAssert.sqlException("Cannot parse BULK upsert: Status{code = SCHEME_ERROR(code=400070)}",
229+
() -> jdbc.connection().prepareStatement(bulk));
189230
};
190231

191232
@ParameterizedTest(name = "with {0}")

jdbc/src/test/java/tech/ydb/jdbc/impl/YdbPreparedStatementWithDataQueryBatchedImplTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,8 @@ public void executeEmpty() throws SQLException {
130130
@Test
131131
public void executeEmptyNoResultSet() throws SQLException {
132132
try (YdbPreparedStatement statement = prepareBatchUpsert("c_Text", "Optional<Text>")) {
133-
statement.setInt("key", 1); // key is requiered value
133+
statement.setInt("key", 1);
134+
statement.setString("c_Text", "value-1");
134135
ExceptionAssert.sqlException("Query must return ResultSet", statement::executeQuery);
135136
}
136137
jdbc.connection().commit();

jdbc/src/test/java/tech/ydb/jdbc/impl/YdbPreparedStatementWithDataQueryImplTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ public void executeWrongParameters() throws SQLException {
119119
String sql = upsertSql("c_Text", "Text"); // Must be Text?
120120
try (YdbPreparedStatement statement = jdbc.connection().unwrap(YdbConnection.class).prepareStatement(sql)) {
121121
statement.setInt("key", 1);
122-
ExceptionAssert.sqlDataException("Missing value for parameter", statement::execute);
122+
ExceptionAssert.sqlDataException("Missing value for parameter: $c_Text", statement::execute);
123123
}
124124

125125
try (YdbPreparedStatement statement = jdbc.connection().unwrap(YdbConnection.class).prepareStatement(sql)) {

jdbc/src/test/java/tech/ydb/jdbc/impl/YdbTablePreparedStatementImplTest.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -249,9 +249,10 @@ public void addAndClearBatch(SqlQueries.YqlQuery mode) throws SQLException {
249249
@EnumSource(SqlQueries.YqlQuery.class)
250250
public void executeEmptyBatch(SqlQueries.YqlQuery mode) throws SQLException {
251251
String yql = TEST_TABLE.upsertOne(mode, "c_Text", "Text");
252+
String prm = mode == SqlQueries.YqlQuery.SIMPLE ? "$key" : "$c_Text";
252253
try (YdbPreparedStatement statement = jdbc.connection().unwrap(YdbConnection.class).prepareStatement(yql)) {
253-
ExceptionAssert.sqlDataException("Missing value for parameter", () -> statement.execute());
254-
ExceptionAssert.sqlDataException("Missing value for parameter", () -> statement.executeUpdate());
254+
ExceptionAssert.sqlDataException("Missing value for parameter: " + prm, statement::execute);
255+
ExceptionAssert.sqlDataException("Missing value for parameter: " + prm, statement::executeUpdate);
255256
statement.executeBatch();
256257
}
257258

jdbc/src/test/java/tech/ydb/jdbc/impl/helper/ExceptionAssert.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,9 @@ public static void sqlDataException(String message, Executable exec) {
2929
SQLDataException ex = Assertions.assertThrows(SQLDataException.class, exec,
3030
"Invalid statement must throw SQLDataException"
3131
);
32-
Assertions.assertTrue(ex.getMessage().contains(message),
33-
"SQLDataException '" + ex.getMessage() + "' doesn't contain message '" + message + "'");
32+
Assertions.assertEquals(message, ex.getMessage());
33+
// Assertions.assertTrue(ex.getMessage().contains(message),
34+
// "SQLDataException '" + ex.getMessage() + "' doesn't contain message '" + message + "'");
3435
}
3536

3637
public static void sqlRecoverable(String message, Executable exec) {

jdbc/src/test/java/tech/ydb/jdbc/impl/helper/JdbcConnectionExtention.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ public JdbcConnectionExtention(YdbHelperExtension ydb, boolean autoCommit) {
4141
.withArg("failOnTruncatedResult", "true")
4242
.withArg("autoCommit", String.valueOf(autoCommit))
4343
// .withArg("useQueryService", "false")
44+
4445
);
4546
}
4647

@@ -72,6 +73,10 @@ public String jdbcURL() {
7273
return jdbcURL.build();
7374
}
7475

76+
public String database() {
77+
return jdbcURL.database();
78+
}
79+
7580
public Connection connection() {
7681
Assert.assertFalse("Retrive connection before initialization", stack.isEmpty());
7782
return stack.peek();

jdbc/src/test/java/tech/ydb/jdbc/impl/helper/JdbcUrlHelper.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,10 @@ public JdbcUrlHelper withAutority(String username, String password) {
5151
return new JdbcUrlHelper(ydb, extra, newAuthority.append("@").toString(), disableToken);
5252
}
5353

54+
public String database() {
55+
return ydb.database();
56+
}
57+
5458
public String build() {
5559
if (!YdbHelperFactory.getInstance().isEnabled()) {
5660
return "jdbc:ydb:grpc://localhost/local";

0 commit comments

Comments
 (0)