Skip to content

Commit 11ee86a

Browse files
committed
Add tests for MySQL BIT and PostgreSQL BYTEA columns
Signed-off-by: Joern Bernhardt <[email protected]>
1 parent f8e04ae commit 11ee86a

File tree

3 files changed

+153
-0
lines changed

3 files changed

+153
-0
lines changed

src/test/java/io/vertx/ext/asyncsql/MySQLClientTest.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,16 @@
2020
import io.vertx.core.Handler;
2121
import io.vertx.core.json.JsonArray;
2222
import io.vertx.core.json.JsonObject;
23+
import io.vertx.ext.sql.ResultSet;
2324
import io.vertx.ext.sql.SQLConnection;
2425
import io.vertx.ext.sql.UpdateResult;
2526
import io.vertx.ext.unit.Async;
2627
import io.vertx.ext.unit.TestContext;
2728
import org.junit.Before;
2829
import org.junit.Test;
2930

31+
import java.util.Arrays;
32+
3033
public class MySQLClientTest extends SQLTestBase {
3134

3235

@@ -93,6 +96,36 @@ public void testInsertedIds(TestContext context) {
9396
});
9497
}
9598

99+
@Override
100+
protected String createByteArray1TableColumn() {
101+
return "BIT(1)";
102+
}
103+
104+
@Override
105+
protected String createByteArray2TableColumn() {
106+
return "BIT(2)";
107+
}
108+
109+
@Override
110+
protected String createByteArray3TableColumn() {
111+
return "BIT(9)";
112+
}
113+
114+
@Override
115+
protected String[] insertByteArray1Values() {
116+
return new String[]{"B'1'", "B'0'", "B'1'"};
117+
}
118+
119+
@Override
120+
protected String[] insertByteArray2Values() {
121+
return new String[]{"B'10'", "B'01'", "B'11'"};
122+
}
123+
124+
@Override
125+
protected String[] insertByteArray3Values() {
126+
return new String[]{"B'100000000'", "B'000000001'", "B'100000001'"};
127+
}
128+
96129
private void setupAutoIncrementTable(SQLConnection conn, Handler<AsyncResult<Void>> handler) {
97130
conn.execute("BEGIN",
98131
ar -> conn.execute("DROP TABLE IF EXISTS test_table",

src/test/java/io/vertx/ext/asyncsql/PostgreSQLClientTest.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import org.junit.Before;
2828
import org.junit.Test;
2929

30+
import java.util.Arrays;
3031
import java.util.UUID;
3132

3233
public class PostgreSQLClientTest extends SQLTestBase {
@@ -111,6 +112,36 @@ public void testUsingUUIDsInTables(TestContext context) {
111112
});
112113
}
113114

115+
@Override
116+
protected String createByteArray1TableColumn() {
117+
return "BYTEA";
118+
}
119+
120+
@Override
121+
protected String createByteArray2TableColumn() {
122+
return "BYTEA";
123+
}
124+
125+
@Override
126+
protected String createByteArray3TableColumn() {
127+
return "BYTEA";
128+
}
129+
130+
@Override
131+
protected String[] insertByteArray1Values() {
132+
return new String[]{"E'\\x01'", "E'\\\\x00'", "E'\\\\x01'"};
133+
}
134+
135+
@Override
136+
protected String[] insertByteArray2Values() {
137+
return new String[]{"E'\\\\x02'", "E'\\\\x01'", "E'\\\\x03'"};
138+
}
139+
140+
@Override
141+
protected String[] insertByteArray3Values() {
142+
return new String[]{"E'\\\\x0100'", "E'\\\\x0001'", "E'\\\\x0101'"};
143+
}
144+
114145
private void setupAutoIncrementTable(SQLConnection conn, Handler<AsyncResult<Void>> handler) {
115146
conn.execute("BEGIN",
116147
ar -> conn.execute("DROP TABLE IF EXISTS test_table",

src/test/java/io/vertx/ext/asyncsql/SQLTestBase.java

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import io.vertx.ext.unit.TestContext;
2929
import org.junit.Test;
3030

31+
import java.util.Arrays;
3132
import java.util.List;
3233

3334
public abstract class SQLTestBase extends AbstractTestBase {
@@ -459,6 +460,94 @@ public void testDateValueSelection(TestContext context) {
459460
});
460461
}
461462

463+
protected abstract String createByteArray1TableColumn();
464+
protected abstract String createByteArray2TableColumn();
465+
protected abstract String createByteArray3TableColumn();
466+
protected abstract String[] insertByteArray1Values();
467+
protected abstract String[] insertByteArray2Values();
468+
protected abstract String[] insertByteArray3Values();
469+
470+
@Test
471+
public void testByteA1Fields(TestContext context) {
472+
Async async = context.async();
473+
client.getConnection(arConn -> {
474+
ensureSuccess(context, arConn);
475+
conn = arConn.result();
476+
conn.execute("DROP TABLE IF EXISTS test_table", arDrop -> {
477+
ensureSuccess(context, arDrop);
478+
conn.execute("CREATE TABLE test_table (id INT, some_bit " + createByteArray1TableColumn() + ")", arCreate -> {
479+
ensureSuccess(context, arCreate);
480+
String[] s = insertByteArray1Values();
481+
conn.execute("INSERT INTO test_table (id, some_bit) VALUES (1, " + s[0] + "),(2, " + s[1] + "),(3, " + s[2] + ")", arInsert -> {
482+
ensureSuccess(context, arInsert);
483+
conn.query("SELECT some_bit FROM test_table ORDER BY id", arQuery -> {
484+
ensureSuccess(context, arQuery);
485+
ResultSet res = arQuery.result();
486+
context.assertTrue(Arrays.equals(new byte[]{0b1}, res.getRows().get(0).getBinary("some_bit")));
487+
context.assertTrue(Arrays.equals(new byte[]{0b0}, res.getResults().get(1).getBinary(0)));
488+
context.assertTrue(Arrays.equals(new byte[]{0b1}, res.getRows().get(2).getBinary("some_bit")));
489+
async.complete();
490+
});
491+
});
492+
});
493+
});
494+
});
495+
}
496+
497+
@Test
498+
public void testByteA2Fields(TestContext context) {
499+
Async async = context.async();
500+
client.getConnection(arConn -> {
501+
ensureSuccess(context, arConn);
502+
conn = arConn.result();
503+
conn.execute("DROP TABLE IF EXISTS test_table", arDrop -> {
504+
ensureSuccess(context, arDrop);
505+
conn.execute("CREATE TABLE test_table (id INT, some_bit " + createByteArray2TableColumn() + ")", arCreate -> {
506+
ensureSuccess(context, arCreate);
507+
String[] s = insertByteArray2Values();
508+
conn.execute("INSERT INTO test_table (id, some_bit) VALUES (1, " + s[0] + "),(2, " + s[1] + "),(3, " + s[2] + ")", arInsert -> {
509+
ensureSuccess(context, arInsert);
510+
conn.query("SELECT some_bit FROM test_table ORDER BY id", arQuery -> {
511+
ensureSuccess(context, arQuery);
512+
ResultSet res = arQuery.result();
513+
context.assertTrue(Arrays.equals(new byte[]{0b10}, res.getRows().get(0).getBinary("some_bit")));
514+
context.assertTrue(Arrays.equals(new byte[]{0b01}, res.getResults().get(1).getBinary(0)));
515+
context.assertTrue(Arrays.equals(new byte[]{0b11}, res.getRows().get(2).getBinary("some_bit")));
516+
async.complete();
517+
});
518+
});
519+
});
520+
});
521+
});
522+
}
523+
524+
@Test
525+
public void testByteA3Fields(TestContext context) {
526+
Async async = context.async();
527+
client.getConnection(arConn -> {
528+
ensureSuccess(context, arConn);
529+
conn = arConn.result();
530+
conn.execute("DROP TABLE IF EXISTS test_table", arDrop -> {
531+
ensureSuccess(context, arDrop);
532+
conn.execute("CREATE TABLE test_table (id INT, some_bit " + createByteArray3TableColumn() + ")", arCreate -> {
533+
ensureSuccess(context, arCreate);
534+
String[] s = insertByteArray3Values();
535+
conn.execute("INSERT INTO test_table (id, some_bit) VALUES (1, " + s[0] + "),(2, " + s[1] + "),(3, " + s[2] + ")", arInsert -> {
536+
ensureSuccess(context, arInsert);
537+
conn.query("SELECT some_bit FROM test_table ORDER BY id", arQuery -> {
538+
ensureSuccess(context, arQuery);
539+
ResultSet res = arQuery.result();
540+
context.assertTrue(Arrays.equals(new byte[]{0b1, 0b0}, res.getRows().get(0).getBinary("some_bit")));
541+
context.assertTrue(Arrays.equals(new byte[]{0b0, 0b1}, res.getResults().get(1).getBinary(0)));
542+
context.assertTrue(Arrays.equals(new byte[]{0b1, 0b1}, res.getRows().get(2).getBinary("some_bit")));
543+
async.complete();
544+
});
545+
});
546+
});
547+
});
548+
});
549+
}
550+
462551
protected void setSqlModeIfPossible(Handler<Void> handler) {
463552
handler.handle(null);
464553
}

0 commit comments

Comments
 (0)