package com.ldbc.driver.workloads.simple.db; import com.ldbc.driver.Db; import com.ldbc.driver.DbConnectionState; import com.ldbc.driver.DbException; import com.ldbc.driver.OperationHandler; import com.ldbc.driver.ResultReporter; import com.ldbc.driver.control.LoggingService; import com.ldbc.driver.workloads.simple.InsertOperation; import com.ldbc.driver.workloads.simple.ReadModifyWriteOperation; import com.ldbc.driver.workloads.simple.ReadOperation; import com.ldbc.driver.workloads.simple.ScanOperation; import com.ldbc.driver.workloads.simple.UpdateOperation; import java.io.IOException; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Vector; public class SimpleDb extends Db { private static final Object OBJECT_RESULT = ""; private static final Map<String,Iterator<Byte>> MAP_RESULT = new HashMap<>(); private static final Vector<Map<String,Iterator<Byte>>> VECTOR_RESULT = new Vector<>(); static class BasicClient { BasicClient( String connectionUrl ) { } <T> T execute( String queryString, Map<String,Object> queryParams, T defaultResult ) { return defaultResult; } } static class BasicDbConnectionState extends DbConnectionState { private final BasicClient basicClient; private BasicDbConnectionState( String connectionUrl ) { basicClient = new BasicClient( connectionUrl ); } BasicClient client() { return basicClient; } @Override public void close() throws IOException { } } private BasicDbConnectionState connectionState = null; @Override public void onInit( Map<String,String> properties, LoggingService loggingService ) throws DbException { registerOperationHandler( InsertOperation.class, InsertOperationHandler.class ); registerOperationHandler( ReadOperation.class, ReadOperationHandler.class ); registerOperationHandler( UpdateOperation.class, UpdateOperationHandler.class ); registerOperationHandler( ScanOperation.class, ScanOperationHandler.class ); registerOperationHandler( ReadModifyWriteOperation.class, ReadModifyWriteOperationHandler.class ); String connectionUrl = properties.get( "url" ); connectionState = new BasicDbConnectionState( connectionUrl ); } @Override public void onClose() throws IOException { } public static class InsertOperationHandler implements OperationHandler<InsertOperation,BasicDbConnectionState> { @Override public void executeOperation( InsertOperation operation, BasicDbConnectionState dbConnectionState, ResultReporter resultReporter ) throws DbException { Map<String,Object> queryParams = new HashMap<>(); queryParams.put( "table", operation.table() ); queryParams.put( "key", operation.key() ); queryParams.put( "valuedFields", operation.fields() ); // TODO replace with actual query string String queryString = null; BasicClient client = dbConnectionState.client(); Object result = client.execute( queryString, queryParams, OBJECT_RESULT ); // TODO replace with actual result code resultReporter.report( 0, result, operation ); } } public static class ReadOperationHandler implements OperationHandler<ReadOperation,BasicDbConnectionState> { @Override public void executeOperation( ReadOperation operation, BasicDbConnectionState dbConnectionState, ResultReporter resultReporter ) throws DbException { Map<String,Object> queryParams = new HashMap<>(); queryParams.put( "table", operation.table() ); queryParams.put( "key", operation.key() ); queryParams.put( "fields", operation.fields() ); // TODO replace with actual query string String queryString = null; BasicClient client = dbConnectionState.client(); Map<String,Iterator<Byte>> result = client.execute( queryString, queryParams, MAP_RESULT ); // TODO replace with actual result code resultReporter.report( 0, result, operation ); } } public static class UpdateOperationHandler implements OperationHandler<UpdateOperation,BasicDbConnectionState> { @Override public void executeOperation( UpdateOperation operation, BasicDbConnectionState dbConnectionState, ResultReporter resultReporter ) throws DbException { Map<String,Object> queryParams = new HashMap<>(); queryParams.put( "table", operation.table() ); queryParams.put( "key", operation.key() ); queryParams.put( "values", operation.fields() ); // TODO replace with actual query string String queryString = null; Map<String,Iterator<Byte>> result = dbConnectionState.client().execute( queryString, queryParams, MAP_RESULT ); // TODO replace with actual result code resultReporter.report( 0, result, operation ); } } public static class ScanOperationHandler implements OperationHandler<ScanOperation,BasicDbConnectionState> { @Override public void executeOperation( ScanOperation operation, BasicDbConnectionState dbConnectionState, ResultReporter resultReporter ) throws DbException { Map<String,Object> queryParams = new HashMap<>(); queryParams.put( "table", operation.table() ); queryParams.put( "key", operation.startkey() ); queryParams.put( "recordCount", operation.recordCount() ); queryParams.put( "fields", operation.fields() ); // TODO replace with actual query string String queryString = null; Vector<Map<String,Iterator<Byte>>> result = dbConnectionState.client().execute( queryString, queryParams, VECTOR_RESULT ); // TODO replace with actual result code resultReporter.report( 0, result, operation ); } } public static class ReadModifyWriteOperationHandler implements OperationHandler<ReadModifyWriteOperation,BasicDbConnectionState> { @Override public void executeOperation( ReadModifyWriteOperation operation, BasicDbConnectionState dbConnectionState, ResultReporter resultReporter ) throws DbException { Map<String,Object> queryParams = new HashMap<>(); queryParams.put( "table", operation.table() ); queryParams.put( "key", operation.key() ); queryParams.put( "fields", operation.fields() ); queryParams.put( "values", operation.values() ); // TODO replace with actual query string String queryString = null; Object result = dbConnectionState.client().execute( queryString, queryParams, OBJECT_RESULT ); // TODO replace with actual result code resultReporter.report( 0, result, operation ); } } @Override protected DbConnectionState getConnectionState() throws DbException { return connectionState; } }