/*
* Copyright (c) 2011-2014 The original author or authors
* ------------------------------------------------------
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* and Apache License v2.0 which accompanies this distribution.
*
* The Eclipse Public License is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* The Apache License v2.0 is available at
* http://www.opensource.org/licenses/apache2.0.php
*
* You may elect to redistribute this code under either of these licenses.
*/
package io.vertx.ext.jdbc;
import io.vertx.core.json.JsonArray;
import io.vertx.core.json.JsonObject;
import io.vertx.ext.sql.UpdateResult;
import io.vertx.test.core.VertxTestBase;
import org.junit.BeforeClass;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* @author <a href="mailto:nscavell@redhat.com">Nick Scavelli</a>
*/
public abstract class JDBCClientTestBase extends VertxTestBase {
private static final List<String> SQL = new ArrayList<>();
static {
System.setProperty("textdb.allow_full_path", "true");
//TODO: Create table with more types for testing
SQL.add("drop table if exists select_table;");
SQL.add("drop table if exists insert_table;");
SQL.add("drop table if exists insert_table2;");
SQL.add("drop table if exists update_table;");
SQL.add("drop table if exists delete_table;");
SQL.add("drop table if exists blob_table;");
SQL.add("drop table if exists big_table;");
SQL.add("create table select_table (id int, lname varchar(255), fname varchar(255) );");
SQL.add("insert into select_table values (1, 'doe', 'john');");
SQL.add("insert into select_table values (2, 'doe', 'jane');");
SQL.add("create table insert_table (id int generated by default as identity (start with 1 increment by 1) not null, lname varchar(255), fname varchar(255), dob date );");
SQL.add("create table insert_table2 (id int not null, lname varchar(255), fname varchar(255), dob date );");
SQL.add("create table update_table (id int, lname varchar(255), fname varchar(255), dob date );");
SQL.add("insert into update_table values (1, 'doe', 'john', '2001-01-01');");
SQL.add("create table delete_table (id int, lname varchar(255), fname varchar(255), dob date );");
SQL.add("insert into delete_table values (1, 'doe', 'john', '2001-01-01');");
SQL.add("insert into delete_table values (2, 'doe', 'jane', '2002-02-02');");
SQL.add("create table blob_table (b blob, c clob, a int array default array[]);");
SQL.add("insert into blob_table (b, c, a) values (load_file('pom.xml'), convert('Hello', clob), ARRAY[1,2,3])");
SQL.add("create table big_table(id int primary key, name varchar(255))");
for (int i = 0; i < 200; i++) {
SQL.add("insert into big_table values(" + i + ", 'Hello')");
}
}
@BeforeClass
public static void createDb() throws Exception {
Connection conn = DriverManager.getConnection(config().getString("url"));
for (String sql : SQL) {
conn.createStatement().execute(sql);
}
}
protected static JsonObject config() {
return new JsonObject()
.put("url", "jdbc:hsqldb:mem:test?shutdown=true")
.put("driver_class", "org.hsqldb.jdbcDriver");
}
protected void assertUpdate(UpdateResult result, int updated) {
assertUpdate(result, updated, false);
}
protected void assertUpdate(UpdateResult result, int updated, boolean generatedKeys) {
assertNotNull(result);
assertEquals(updated, result.getUpdated());
if (generatedKeys) {
JsonArray keys = result.getKeys();
assertNotNull(keys);
assertEquals(updated, keys.size());
Set<Integer> numbers = new HashSet<>();
for (int i = 0; i < updated; i++) {
assertTrue(keys.getValue(i) instanceof Integer);
assertTrue(numbers.add(i));
}
}
}
protected static void setLogLevel(String name, Level level) {
Logger logger = Logger.getLogger(name);
if (logger != null) {
logger.setLevel(level);
}
}
}