Search in sources :

Example 71 with HDBClient

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

the class JdbcForeignKeyMetadataTest method test.

@Test
public void test() 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 statement = con.createStatement()) {
                statement.execute("CREATE TABLE ptable (pkey string primary key, p1 string, p2 string)");
                statement.execute("CREATE TABLE ctable (ckey string primary key, c1 string, c2 string," + "        CONSTRAINT `fk1` FOREIGN KEY (`c1`,`c2`) REFERENCES ptable(`p1`,`p2`) ON DELETE CASCADE)");
                DatabaseMetaData metaData = con.getMetaData();
                try (ResultSet rs = metaData.getImportedKeys(null, null, "CTABLE")) {
                    verifyForeignKeyResultSet(rs);
                }
                try (ResultSet rs = metaData.getImportedKeys(null, TableSpace.DEFAULT, "CTABLE")) {
                    verifyForeignKeyResultSet(rs);
                }
                try (ResultSet rs = metaData.getImportedKeys(null, TableSpace.DEFAULT, "PTABLE")) {
                    assertFalse(rs.next());
                }
                try (ResultSet rs = metaData.getExportedKeys(null, null, "ptable")) {
                    verifyForeignKeyResultSet(rs);
                }
                try (ResultSet rs = metaData.getExportedKeys(null, TableSpace.DEFAULT, "ptable")) {
                    verifyForeignKeyResultSet(rs);
                }
                try (ResultSet rs = metaData.getExportedKeys(null, null, "CTABLE")) {
                    assertFalse(rs.next());
                }
                try (ResultSet rs = metaData.getCrossReference(null, TableSpace.DEFAULT, "ptable", null, TableSpace.DEFAULT, "ctable")) {
                    verifyForeignKeyResultSet(rs);
                }
                try (ResultSet rs = metaData.getCrossReference(null, TableSpace.DEFAULT, "ptable", null, null, "ctable")) {
                    verifyForeignKeyResultSet(rs);
                }
                try (ResultSet rs = metaData.getCrossReference(null, null, "ptable", null, null, "ctable")) {
                    verifyForeignKeyResultSet(rs);
                }
            }
        }
    }
}
Also used : StaticClientSideMetadataProvider(herddb.server.StaticClientSideMetadataProvider) HDBClient(herddb.client.HDBClient) Server(herddb.server.Server) Statement(java.sql.Statement) Connection(java.sql.Connection) ResultSet(java.sql.ResultSet) DatabaseMetaData(java.sql.DatabaseMetaData) ClientConfiguration(herddb.client.ClientConfiguration) Test(org.junit.Test)

Example 72 with HDBClient

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

the class AdvancedInsertSyntaxTest method testInsertMultiValues.

@Test
public void testInsertMultiValues() 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 = con.prepareStatement("INSERT INTO mytable (name) values (?),(?)");
                PreparedStatement statement_return_keys = con.prepareStatement("INSERT INTO mytable (name) values (?),(?)", Statement.RETURN_GENERATED_KEYS)) {
                create.execute("CREATE TABLE mytable (n1 int primary key auto_increment, name string)");
                statement.setString(1, "v1");
                statement.setString(2, "v2");
                statement.executeUpdate();
                try {
                    statement_return_keys.setString(1, "v1");
                    statement_return_keys.setString(2, "v2");
                    statement_return_keys.executeUpdate();
                    fail();
                } catch (SQLException err) {
                    assertTrue(err.getMessage().contains("cannot 'return values' on multi-values insert"));
                }
            }
        }
    }
}
Also used : StaticClientSideMetadataProvider(herddb.server.StaticClientSideMetadataProvider) HDBClient(herddb.client.HDBClient) Server(herddb.server.Server) SQLException(java.sql.SQLException) PreparedStatement(java.sql.PreparedStatement) Statement(java.sql.Statement) Connection(java.sql.Connection) PreparedStatement(java.sql.PreparedStatement) ClientConfiguration(herddb.client.ClientConfiguration) Test(org.junit.Test)

Example 73 with HDBClient

use of herddb.client.HDBClient 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 74 with HDBClient

use of herddb.client.HDBClient 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 75 with HDBClient

use of herddb.client.HDBClient 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)

Aggregations

HDBClient (herddb.client.HDBClient)84 ClientConfiguration (herddb.client.ClientConfiguration)83 Test (org.junit.Test)75 Server (herddb.server.Server)52 HDBConnection (herddb.client.HDBConnection)46 StaticClientSideMetadataProvider (herddb.server.StaticClientSideMetadataProvider)41 Connection (java.sql.Connection)38 Statement (java.sql.Statement)34 PreparedStatement (java.sql.PreparedStatement)30 ResultSet (java.sql.ResultSet)29 Table (herddb.model.Table)20 CreateTableStatement (herddb.model.commands.CreateTableStatement)20 InsertStatement (herddb.model.commands.InsertStatement)19 ServerConfiguration (herddb.server.ServerConfiguration)14 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