Search in sources :

Example 6 with RDBTableMetaData

use of org.apache.jackrabbit.oak.plugins.document.rdb.RDBDocumentStore.RDBTableMetaData in project jackrabbit-oak by apache.

the class RDBDocumentStoreJDBCTest method conditionalRead.

@Test
public void conditionalRead() throws SQLException {
    String id = this.getClass().getName() + ".conditionalRead";
    super.ds.remove(Collection.NODES, id);
    UpdateOp op = new UpdateOp(id, true);
    op.set("_modified", 1L);
    removeMe.add(id);
    assertTrue(super.ds.create(Collection.NODES, Collections.singletonList(op)));
    NodeDocument nd = super.ds.find(Collection.NODES, id, 0);
    assertNotNull(nd);
    Long lastmodcount = nd.getModCount();
    Long lastmodified = nd.getModified();
    assertNotNull(lastmodcount);
    assertNotNull(lastmodified);
    RDBTableMetaData tmd = ((RDBDocumentStore) super.ds).getTable(Collection.NODES);
    Connection con = super.rdbDataSource.getConnection();
    con.setReadOnly(true);
    try {
        RDBRow rMcNotMatch = jdbc.read(con, tmd, id, lastmodcount + 1, lastmodified);
        assertNotNull(rMcNotMatch.getData());
        RDBRow rMcNotGiven = jdbc.read(con, tmd, id, -1, lastmodified);
        assertNotNull(rMcNotGiven.getData());
        RDBRow rMcMatch = jdbc.read(con, tmd, id, lastmodcount, lastmodified);
        assertNull(rMcMatch.getData());
        RDBRow rMcMatchModNonmatch = jdbc.read(con, tmd, id, lastmodcount, lastmodified + 2);
        assertNotNull(rMcMatchModNonmatch.getData());
    } finally {
        con.close();
    }
}
Also used : RDBTableMetaData(org.apache.jackrabbit.oak.plugins.document.rdb.RDBDocumentStore.RDBTableMetaData) UpdateOp(org.apache.jackrabbit.oak.plugins.document.UpdateOp) Connection(java.sql.Connection) NodeDocument(org.apache.jackrabbit.oak.plugins.document.NodeDocument) Test(org.junit.Test) AbstractDocumentStoreTest(org.apache.jackrabbit.oak.plugins.document.AbstractDocumentStoreTest)

Example 7 with RDBTableMetaData

use of org.apache.jackrabbit.oak.plugins.document.rdb.RDBDocumentStore.RDBTableMetaData in project jackrabbit-oak by apache.

the class RDBDocumentStoreJDBCTest method queryIteratorNotConsumedTest.

@Test
public void queryIteratorNotConsumedTest() throws SQLException, NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
    LogCustomizer customLogs = LogCustomizer.forLogger(RDBDocumentStoreJDBC.class.getName()).enable(Level.DEBUG).contains("finalizing unclosed").create();
    customLogs.starting();
    insertTestResource(this.getClass().getName() + "." + name.getMethodName());
    MyConnectionHandler ch = new MyConnectionHandler(super.rdbDataSource);
    RDBTableMetaData tmd = ((RDBDocumentStore) super.ds).getTable(Collection.NODES);
    List<QueryCondition> conditions = Collections.emptyList();
    Iterator<RDBRow> qi = jdbc.queryAsIterator(ch, tmd, null, null, RDBDocumentStore.EMPTY_KEY_PATTERN, conditions, Integer.MAX_VALUE, null);
    assertTrue(qi instanceof Closeable);
    assertEquals(1, ch.cnt.get());
    Method fin = qi.getClass().getDeclaredMethod("finalize");
    try {
        fin.setAccessible(true);
        fin.invoke(qi);
        assertTrue("finalizing non-consumed iterator should generate log entry", customLogs.getLogs().size() >= 1);
    } finally {
        Utils.closeIfCloseable(qi);
        fin.setAccessible(false);
        customLogs.finished();
    }
}
Also used : RDBTableMetaData(org.apache.jackrabbit.oak.plugins.document.rdb.RDBDocumentStore.RDBTableMetaData) LogCustomizer(org.apache.jackrabbit.oak.commons.junit.LogCustomizer) Closeable(java.io.Closeable) Method(java.lang.reflect.Method) QueryCondition(org.apache.jackrabbit.oak.plugins.document.rdb.RDBDocumentStore.QueryCondition) Test(org.junit.Test) AbstractDocumentStoreTest(org.apache.jackrabbit.oak.plugins.document.AbstractDocumentStoreTest)

Example 8 with RDBTableMetaData

use of org.apache.jackrabbit.oak.plugins.document.rdb.RDBDocumentStore.RDBTableMetaData in project jackrabbit-oak by apache.

the class RDBDocumentStoreJDBCTest method queryMinLastModifiedTest.

@Test
public void queryMinLastModifiedTest() throws SQLException {
    String baseName = this.getClass().getName() + "." + name.getMethodName();
    long magicValue = (long) (Math.random() * 100000);
    String baseNameNullModified = baseName + "-1";
    super.ds.remove(Collection.NODES, baseNameNullModified);
    UpdateOp op = new UpdateOp(baseNameNullModified, true);
    op.set(RDBDocumentStore.COLLISIONSMODCOUNT, magicValue);
    op.set(NodeDocument.DELETED_ONCE, true);
    assertTrue(super.ds.create(Collection.NODES, Collections.singletonList(op)));
    removeMe.add(baseNameNullModified);
    String baseName10Modified = baseName + "-2";
    super.ds.remove(Collection.NODES, baseName10Modified);
    op = new UpdateOp(baseName10Modified, true);
    op.set(RDBDocumentStore.COLLISIONSMODCOUNT, magicValue);
    op.set(NodeDocument.MODIFIED_IN_SECS, 10);
    op.set(NodeDocument.DELETED_ONCE, true);
    assertTrue(super.ds.create(Collection.NODES, Collections.singletonList(op)));
    removeMe.add(baseName10Modified);
    String baseName20Modified = baseName + "-3";
    super.ds.remove(Collection.NODES, baseName20Modified);
    op = new UpdateOp(baseName20Modified, true);
    op.set(RDBDocumentStore.COLLISIONSMODCOUNT, magicValue);
    op.set(NodeDocument.MODIFIED_IN_SECS, 20);
    op.set(NodeDocument.DELETED_ONCE, true);
    assertTrue(super.ds.create(Collection.NODES, Collections.singletonList(op)));
    removeMe.add(baseName20Modified);
    String baseName5ModifiedNoDeletedOnce = baseName + "-4";
    super.ds.remove(Collection.NODES, baseName5ModifiedNoDeletedOnce);
    op = new UpdateOp(baseName5ModifiedNoDeletedOnce, true);
    op.set(RDBDocumentStore.COLLISIONSMODCOUNT, magicValue);
    op.set(NodeDocument.MODIFIED_IN_SECS, 5);
    assertTrue(super.ds.create(Collection.NODES, Collections.singletonList(op)));
    removeMe.add(baseName5ModifiedNoDeletedOnce);
    LogCustomizer customLogs = LogCustomizer.forLogger(RDBDocumentStoreJDBC.class.getName()).enable(Level.DEBUG).contains("Aggregate query").contains("min(MODIFIED)").create();
    customLogs.starting();
    Connection con = super.rdbDataSource.getConnection();
    try {
        con.setReadOnly(true);
        RDBTableMetaData tmd = ((RDBDocumentStore) super.ds).getTable(Collection.NODES);
        List<QueryCondition> conditions = new ArrayList<QueryCondition>();
        conditions.add(new QueryCondition(RDBDocumentStore.COLLISIONSMODCOUNT, "=", magicValue));
        long min = jdbc.getLong(con, tmd, "min", "_modified", null, null, RDBDocumentStore.EMPTY_KEY_PATTERN, conditions);
        assertEquals(5, min);
        con.commit();
    } finally {
        con.close();
        assertEquals("should have a DEBUG level log entry", 1, customLogs.getLogs().size());
        customLogs.finished();
        customLogs = null;
    }
    con = super.rdbDataSource.getConnection();
    try {
        con.setReadOnly(true);
        RDBTableMetaData tmd = ((RDBDocumentStore) super.ds).getTable(Collection.NODES);
        List<QueryCondition> conditions = new ArrayList<QueryCondition>();
        conditions.add(new QueryCondition(RDBDocumentStore.COLLISIONSMODCOUNT, "=", magicValue));
        conditions.add(new QueryCondition(NodeDocument.DELETED_ONCE, "=", 1));
        long min = jdbc.getLong(con, tmd, "min", "_modified", null, null, RDBDocumentStore.EMPTY_KEY_PATTERN, conditions);
        assertEquals(10, min);
        con.commit();
    } finally {
        con.close();
    }
}
Also used : RDBTableMetaData(org.apache.jackrabbit.oak.plugins.document.rdb.RDBDocumentStore.RDBTableMetaData) UpdateOp(org.apache.jackrabbit.oak.plugins.document.UpdateOp) LogCustomizer(org.apache.jackrabbit.oak.commons.junit.LogCustomizer) Connection(java.sql.Connection) ArrayList(java.util.ArrayList) QueryCondition(org.apache.jackrabbit.oak.plugins.document.rdb.RDBDocumentStore.QueryCondition) Test(org.junit.Test) AbstractDocumentStoreTest(org.apache.jackrabbit.oak.plugins.document.AbstractDocumentStoreTest)

Example 9 with RDBTableMetaData

use of org.apache.jackrabbit.oak.plugins.document.rdb.RDBDocumentStore.RDBTableMetaData in project jackrabbit-oak by apache.

the class RDBDocumentStoreJDBCTest method queryCountTest.

@Test
public void queryCountTest() throws SQLException {
    insertTestResource(this.getClass().getName() + "." + name.getMethodName());
    Connection con = super.rdbDataSource.getConnection();
    try {
        con.setReadOnly(true);
        RDBTableMetaData tmd = ((RDBDocumentStore) super.ds).getTable(Collection.NODES);
        List<QueryCondition> conditions = Collections.emptyList();
        long cnt = jdbc.getLong(con, tmd, "count", "*", null, null, RDBDocumentStore.EMPTY_KEY_PATTERN, conditions);
        assertTrue(cnt > 0);
    } finally {
        con.close();
    }
}
Also used : RDBTableMetaData(org.apache.jackrabbit.oak.plugins.document.rdb.RDBDocumentStore.RDBTableMetaData) Connection(java.sql.Connection) QueryCondition(org.apache.jackrabbit.oak.plugins.document.rdb.RDBDocumentStore.QueryCondition) Test(org.junit.Test) AbstractDocumentStoreTest(org.apache.jackrabbit.oak.plugins.document.AbstractDocumentStoreTest)

Aggregations

RDBTableMetaData (org.apache.jackrabbit.oak.plugins.document.rdb.RDBDocumentStore.RDBTableMetaData)9 Test (org.junit.Test)9 AbstractDocumentStoreTest (org.apache.jackrabbit.oak.plugins.document.AbstractDocumentStoreTest)6 LogCustomizer (org.apache.jackrabbit.oak.commons.junit.LogCustomizer)5 QueryCondition (org.apache.jackrabbit.oak.plugins.document.rdb.RDBDocumentStore.QueryCondition)5 Closeable (java.io.Closeable)3 Connection (java.sql.Connection)3 UpdateOp (org.apache.jackrabbit.oak.plugins.document.UpdateOp)2 Method (java.lang.reflect.Method)1 ArrayList (java.util.ArrayList)1 NodeDocument (org.apache.jackrabbit.oak.plugins.document.NodeDocument)1