Search in sources :

Example 76 with ClientConfiguration

use of herddb.client.ClientConfiguration in project herddb by diennea.

the class BatchTest method testBatch.

@Test
public void testBatch() throws Exception {
    try (Server server = new Server(TestUtils.newServerConfigurationWithAutoPort(folder.newFolder().toPath()))) {
        server.start();
        server.waitForStandaloneBoot();
        try (HDBClient client = new HDBClient(new ClientConfiguration(folder.newFolder().toPath()))) {
            client.setClientSideMetadataProvider(new StaticClientSideMetadataProvider(server));
            try (BasicHerdDBDataSource dataSource = new BasicHerdDBDataSource(client);
                Connection con = dataSource.getConnection();
                PreparedStatement statementCreatePage = con.prepareStatement("CREATE TABLE mytable (n1 int primary key auto_increment, name string)");
                PreparedStatement statement = con.prepareStatement("INSERT INTO mytable (name) values(?)")) {
                statementCreatePage.addBatch();
                // use executeBatch for DDL, like in MySQL import scripts
                int[] resultsCreate = statementCreatePage.executeBatch();
                assertEquals(1, resultsCreate[0]);
                {
                    for (int i = 0; i < 100; i++) {
                        statement.setString(1, "v" + i);
                        statement.addBatch();
                    }
                    int[] results = statement.executeBatch();
                    for (int i = 0; i < 100; i++) {
                        assertEquals(1, results[i]);
                    }
                    try (ResultSet rs = statement.executeQuery("SELECT * FROM mytable ORDER BY n1")) {
                        int count = 0;
                        while (rs.next()) {
                            assertEquals("v" + count, rs.getString("name"));
                            assertEquals(count + 1, rs.getInt("n1"));
                            count++;
                        }
                        assertEquals(100, count);
                    }
                }
                int next_id;
                try (ResultSet rs = statement.executeQuery("SELECT MAX(n1) FROM mytable")) {
                    assertTrue(rs.next());
                    next_id = rs.getInt(1) + 1;
                    assertEquals(101, next_id);
                }
                statement.executeUpdate("DELETE FROM mytable");
                try (ResultSet rs = statement.executeQuery("SELECT COUNT(*) FROM mytable")) {
                    assertTrue(rs.next());
                    assertEquals(0, rs.getInt(1));
                }
                // transactions
                con.setAutoCommit(false);
                {
                    for (int i = 0; i < 100; i++) {
                        statement.setString(1, "v" + i);
                        statement.addBatch();
                    }
                    int[] results = statement.executeBatch();
                    for (int i = 0; i < 100; i++) {
                        assertEquals(1, results[i]);
                    }
                    try (ResultSet rs = statement.executeQuery("SELECT * FROM mytable ORDER BY n1")) {
                        int count = 0;
                        while (rs.next()) {
                            assertEquals("v" + count, rs.getString("name"));
                            assertEquals(count + next_id, rs.getInt("n1"));
                            count++;
                        }
                        assertEquals(100, count);
                    }
                }
                con.commit();
            }
        }
    }
}
Also used : StaticClientSideMetadataProvider(herddb.server.StaticClientSideMetadataProvider) HDBClient(herddb.client.HDBClient) Server(herddb.server.Server) Connection(java.sql.Connection) ResultSet(java.sql.ResultSet) PreparedStatement(java.sql.PreparedStatement) ClientConfiguration(herddb.client.ClientConfiguration) Test(org.junit.Test)

Example 77 with ClientConfiguration

use of herddb.client.ClientConfiguration in project herddb by diennea.

the class BatchTest method testBatchAsync.

@Test
public void testBatchAsync() throws Exception {
    try (Server server = new Server(TestUtils.newServerConfigurationWithAutoPort(folder.newFolder().toPath()))) {
        server.start();
        server.waitForStandaloneBoot();
        try (HDBClient client = new HDBClient(new ClientConfiguration(folder.newFolder().toPath()))) {
            client.setClientSideMetadataProvider(new StaticClientSideMetadataProvider(server));
            try (BasicHerdDBDataSource dataSource = new BasicHerdDBDataSource(client);
                Connection con = dataSource.getConnection();
                PreparedStatementAsync statementCreatePage = con.prepareStatement("CREATE TABLE mytable (n1 int primary key auto_increment, name string)").unwrap(PreparedStatementAsync.class);
                PreparedStatementAsync statement = con.prepareStatement("INSERT INTO mytable (name) values(?)").unwrap(PreparedStatementAsync.class)) {
                statementCreatePage.addBatch();
                // use executeBatch for DDL, like in MySQL import scripts
                int[] resultsCreate = statementCreatePage.executeBatchAsync().get();
                assertEquals(1, resultsCreate[0]);
                {
                    for (int i = 0; i < 100; i++) {
                        statement.setString(1, "v" + i);
                        statement.addBatch();
                    }
                    int[] results = statement.executeBatchAsync().get();
                    for (int i = 0; i < 100; i++) {
                        assertEquals(1, results[i]);
                    }
                    try (ResultSet rs = statement.executeQuery("SELECT * FROM mytable ORDER BY n1")) {
                        int count = 0;
                        while (rs.next()) {
                            assertEquals("v" + count, rs.getString("name"));
                            assertEquals(count + 1, rs.getInt("n1"));
                            count++;
                        }
                        assertEquals(100, count);
                    }
                }
                int next_id;
                try (ResultSet rs = statement.executeQuery("SELECT MAX(n1) FROM mytable")) {
                    assertTrue(rs.next());
                    next_id = rs.getInt(1) + 1;
                    assertEquals(101, next_id);
                }
                statement.executeUpdate("DELETE FROM mytable");
                try (ResultSet rs = statement.executeQuery("SELECT COUNT(*) FROM mytable")) {
                    assertTrue(rs.next());
                    assertEquals(0, rs.getInt(1));
                }
                // transactions
                con.setAutoCommit(false);
                {
                    for (int i = 0; i < 100; i++) {
                        statement.setString(1, "v" + i);
                        statement.addBatch();
                    }
                    int[] results = statement.executeBatchAsync().get();
                    for (int i = 0; i < 100; i++) {
                        assertEquals(1, results[i]);
                    }
                    try (ResultSet rs = statement.executeQuery("SELECT * FROM mytable ORDER BY n1")) {
                        int count = 0;
                        while (rs.next()) {
                            assertEquals("v" + count, rs.getString("name"));
                            assertEquals(count + next_id, rs.getInt("n1"));
                            count++;
                        }
                        assertEquals(100, count);
                    }
                }
                con.commit();
            }
        }
    }
}
Also used : StaticClientSideMetadataProvider(herddb.server.StaticClientSideMetadataProvider) HDBClient(herddb.client.HDBClient) Server(herddb.server.Server) Connection(java.sql.Connection) ResultSet(java.sql.ResultSet) ClientConfiguration(herddb.client.ClientConfiguration) Test(org.junit.Test)

Example 78 with ClientConfiguration

use of herddb.client.ClientConfiguration in project herddb by diennea.

the class MixedCaseIdentifiersTest method testUpdate.

@Test
public void testUpdate() throws Exception {
    try (Server server = new Server(TestUtils.newServerConfigurationWithAutoPort(folder.newFolder().toPath()))) {
        server.start();
        server.waitForStandaloneBoot();
        try (HDBClient client = new HDBClient(new ClientConfiguration(folder.newFolder().toPath()))) {
            client.setClientSideMetadataProvider(new StaticClientSideMetadataProvider(server));
            try (BasicHerdDBDataSource dataSource = new BasicHerdDBDataSource(client);
                Connection con = dataSource.getConnection();
                Statement create = con.createStatement();
                PreparedStatement statement_insert = con.prepareStatement("INSERT INTO q1_MESSAGE(msg_id,STATUS,recipient) values(?,?,?)");
                PreparedStatement statement_update = con.prepareStatement("UPDATE q1_MESSAGE SET STATUS = 2,lastbouncecategory=null WHERE MSG_ID = ? and (status=1 or status=5)")) {
                create.execute(CREATE_TABLE);
                long msg_id = 213;
                statement_insert.setLong(1, msg_id);
                statement_insert.setInt(2, 1);
                statement_insert.setString(3, "test@localhost");
                assertEquals(1, statement_insert.executeUpdate());
                statement_update.setLong(1, msg_id);
                assertEquals(1, statement_update.executeUpdate());
                try (ResultSet rs = create.executeQuery("SELECT M.MSG_ID FROM q1_MESSAGE M WHERE 1=1 AND (M.RECIPIENT LIKE '%@localhost%')")) {
                    long _msg_id = -1;
                    int record_count = 0;
                    while (rs.next()) {
                        _msg_id = rs.getLong(1);
                        record_count++;
                    }
                    assertEquals(1, record_count);
                    assertTrue(_msg_id > 0);
                }
                try (PreparedStatement ps = con.prepareStatement("UPDATE q1_MESSAGE SET STATUS= 6,SID=?,LAST_MODIFY_TIME=?,NEXT_SEND_TIME = null, LASTBOUNCECATEGORY=? WHERE MSG_ID = ?")) {
                    ps.setInt(1, 1);
                    ps.setTimestamp(2, new java.sql.Timestamp(System.currentTimeMillis()));
                    ps.setInt(3, 2);
                    ps.setLong(4, msg_id);
                    assertEquals(1, ps.executeUpdate());
                }
                try (ResultSet rs = create.executeQuery("SELECT M.MSG_ID FROM q1_MESSAGE M WHERE 1=1 AND status=6 and (M.RECIPIENT LIKE '%@localhost%')")) {
                    long _msg_id = -1;
                    int record_count = 0;
                    while (rs.next()) {
                        _msg_id = rs.getLong(1);
                        record_count++;
                    }
                    assertEquals(1, record_count);
                    assertTrue(_msg_id > 0);
                }
            }
        }
    }
}
Also used : Server(herddb.server.Server) PreparedStatement(java.sql.PreparedStatement) Statement(java.sql.Statement) Connection(java.sql.Connection) PreparedStatement(java.sql.PreparedStatement) StaticClientSideMetadataProvider(herddb.server.StaticClientSideMetadataProvider) HDBClient(herddb.client.HDBClient) ResultSet(java.sql.ResultSet) ClientConfiguration(herddb.client.ClientConfiguration) Test(org.junit.Test)

Example 79 with ClientConfiguration

use of herddb.client.ClientConfiguration in project herddb by diennea.

the class PreparedStatemetParametersTest method missingParameter.

/**
 * Execute a prepared statement without a needed parameter
 */
@Test(expected = SQLException.class)
public void missingParameter() throws Exception {
    try (Server server = new Server(TestUtils.newServerConfigurationWithAutoPort(folder.newFolder().toPath()))) {
        server.start();
        server.waitForStandaloneBoot();
        try (HDBClient client = new HDBClient(new ClientConfiguration(folder.newFolder().toPath()))) {
            client.setClientSideMetadataProvider(new StaticClientSideMetadataProvider(server));
            try (BasicHerdDBDataSource dataSource = new BasicHerdDBDataSource(client)) {
                try (Connection con = dataSource.getConnection();
                    Statement statement = con.createStatement()) {
                    statement.execute("CREATE TABLE mytable (c1 int primary key)");
                }
                try (Connection con = dataSource.getConnection();
                    PreparedStatement statement = con.prepareStatement("INSERT INTO mytable values (?)")) {
                    int rows = statement.executeUpdate();
                    Assert.assertEquals(1, rows);
                }
            }
        }
    }
}
Also used : StaticClientSideMetadataProvider(herddb.server.StaticClientSideMetadataProvider) HDBClient(herddb.client.HDBClient) Server(herddb.server.Server) Statement(java.sql.Statement) PreparedStatement(java.sql.PreparedStatement) Connection(java.sql.Connection) PreparedStatement(java.sql.PreparedStatement) ClientConfiguration(herddb.client.ClientConfiguration) Test(org.junit.Test)

Example 80 with ClientConfiguration

use of herddb.client.ClientConfiguration in project herddb by diennea.

the class SimpleScanTest method testCloseResultSetsOnCloseConnection.

@Test
public void testCloseResultSetsOnCloseConnection() throws Exception {
    try (Server server = new Server(herddb.jdbc.TestUtils.newServerConfigurationWithAutoPort(folder.newFolder().toPath()))) {
        server.start();
        server.waitForStandaloneBoot();
        try (HDBClient client = new HDBClient(new ClientConfiguration(folder.newFolder().toPath()))) {
            client.setClientSideMetadataProvider(new StaticClientSideMetadataProvider(server));
            try (BasicHerdDBDataSource dataSource = new BasicHerdDBDataSource(client)) {
                try (Connection con = dataSource.getConnection();
                    Statement statement = con.createStatement()) {
                    statement.execute("CREATE TABLE mytable (k1 string primary key, n1 int, l1 long, t1 timestamp, nu string, b1 bool, d1 double)");
                }
                try (Connection con = dataSource.getConnection();
                    PreparedStatement statement = con.prepareStatement("INSERT INTO mytable(k1,n1,l1,t1,nu,b1,d1) values(?,?,?,?,?,?,?)")) {
                    for (int n = 0; n < 10; ++n) {
                        int i = 1;
                        statement.setString(i++, "mykey_" + n);
                        statement.setInt(i++, n);
                        statement.setLong(i++, n);
                        statement.setTimestamp(i++, new java.sql.Timestamp(System.currentTimeMillis()));
                        statement.setString(i++, null);
                        statement.setBoolean(i++, true);
                        statement.setDouble(i++, n + 0.5);
                        statement.addBatch();
                    }
                    int[] batches = statement.executeBatch();
                    Assert.assertEquals(10, batches.length);
                    for (int batch : batches) {
                        Assert.assertEquals(1, batch);
                    }
                }
                try (Connection con = dataSource.getConnection()) {
                    con.setAutoCommit(false);
                    Transaction tx;
                    try (Statement s = con.createStatement()) {
                        // force the creation of the transaction, by issuing a DML command
                        s.executeUpdate("UPDATE mytable set n1=1 where k1 ='aaa'");
                    }
                    try (PreparedStatement statement = con.prepareStatement("SELECT n1, k1 FROM mytable")) {
                        statement.setFetchSize(1);
                        ResultSet rs = statement.executeQuery();
                        assertTrue(rs.next());
                        List<Transaction> transactions = server.getManager().getTableSpaceManager(TableSpace.DEFAULT).getTransactions();
                        assertEquals(1, transactions.size());
                        tx = transactions.get(0);
                        assertEquals(1, tx.getRefCount());
                    }
                    // close statement -> close result set -> transaction refcount = 0
                    // closing of scanners is non blocking, we have to wait
                    TestUtils.waitForCondition(() -> tx.getRefCount() == 0, NOOP, 100);
                }
                Transaction tx;
                try (Connection con = dataSource.getConnection()) {
                    con.setAutoCommit(false);
                    try (Statement s = con.createStatement()) {
                        // force the creation of the transaction, by issuing a DML command
                        s.executeUpdate("UPDATE mytable set n1=1 where k1 ='aaa'");
                    }
                    PreparedStatement statement = con.prepareStatement("SELECT n1, k1 FROM mytable");
                    statement.setFetchSize(1);
                    ResultSet rs = statement.executeQuery();
                    assertTrue(rs.next());
                    List<Transaction> transactions = server.getManager().getTableSpaceManager(TableSpace.DEFAULT).getTransactions();
                    assertEquals(1, transactions.size());
                    tx = transactions.get(0);
                    assertEquals(1, tx.getRefCount());
                }
                // close connection -> close statement -> close result set -> transaction refcount = 0 (and rolled back)
                TestUtils.waitForCondition(() -> tx.getRefCount() == 0, NOOP, 100);
            }
        }
    }
}
Also used : Server(herddb.server.Server) PreparedStatement(java.sql.PreparedStatement) Statement(java.sql.Statement) Connection(java.sql.Connection) PreparedStatement(java.sql.PreparedStatement) StaticClientSideMetadataProvider(herddb.server.StaticClientSideMetadataProvider) HDBClient(herddb.client.HDBClient) Transaction(herddb.model.Transaction) ResultSet(java.sql.ResultSet) ClientConfiguration(herddb.client.ClientConfiguration) Test(org.junit.Test)

Aggregations

ClientConfiguration (herddb.client.ClientConfiguration)89 HDBClient (herddb.client.HDBClient)83 Test (org.junit.Test)79 Server (herddb.server.Server)56 HDBConnection (herddb.client.HDBConnection)45 StaticClientSideMetadataProvider (herddb.server.StaticClientSideMetadataProvider)41 Connection (java.sql.Connection)39 Statement (java.sql.Statement)34 PreparedStatement (java.sql.PreparedStatement)30 ResultSet (java.sql.ResultSet)29 Table (herddb.model.Table)23 CreateTableStatement (herddb.model.commands.CreateTableStatement)23 InsertStatement (herddb.model.commands.InsertStatement)22 ServerConfiguration (herddb.server.ServerConfiguration)17 ScanResultSet (herddb.client.ScanResultSet)13 ByteArrayInputStream (java.io.ByteArrayInputStream)13 ProgressListener (herddb.backup.ProgressListener)12 ByteArrayOutputStream (java.io.ByteArrayOutputStream)12 HashSet (java.util.HashSet)12 Index (herddb.model.Index)9