diff --git a/bee-engine/src/main/java/com/dianping/bee/engine/build/ComponentsConfigurator.java b/bee-engine/src/main/java/com/dianping/bee/engine/build/ComponentsConfigurator.java index e411e30ac2bfd21b149ca2949c323e267aec3db3..f1eb288586014d91aa2f24e2f7f2537e2c10bfef 100644 --- a/bee-engine/src/main/java/com/dianping/bee/engine/build/ComponentsConfigurator.java +++ b/bee-engine/src/main/java/com/dianping/bee/engine/build/ComponentsConfigurator.java @@ -3,6 +3,10 @@ package com.dianping.bee.engine.build; import java.util.ArrayList; import java.util.List; +import com.dianping.bee.db.cat.CatDatabase; +import com.dianping.bee.db.cat.EventIndexer; +import com.dianping.bee.db.cat.TransactionIndexer; +import com.dianping.bee.db.dog.DogDatabase; import com.dianping.bee.engine.spi.DatabaseProvider; import com.dianping.bee.engine.spi.StatementManager; import com.dianping.bee.engine.spi.TableProviderManager; @@ -22,6 +26,7 @@ import com.dianping.bee.engine.spi.evaluator.logical.LiteralNumberEvaluator; import com.dianping.bee.engine.spi.evaluator.logical.LiteralStringEvaluator; import com.dianping.bee.engine.spi.evaluator.logical.LogicalAndEvaluator; import com.dianping.bee.engine.spi.evaluator.logical.LogicalOrEvaluator; +import com.dianping.bee.engine.spi.evaluator.logical.ParamMarkerEvaluator; import com.dianping.bee.engine.spi.handler.internal.DescHandler; import com.dianping.bee.engine.spi.handler.internal.PrepareHandler; import com.dianping.bee.engine.spi.handler.internal.SelectHandler; @@ -72,10 +77,19 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator { defineHandlers(all); defineLogicalEvaluators(all); defineFunctionEvaluators(all); + defineDatabaseProvider(all); return all; } + // FIXME: need dependency reverse + private void defineDatabaseProvider(List all) { + all.add(C(DatabaseProvider.class, "cat", CatDatabase.class)); + all.add(C(TransactionIndexer.class)); + all.add(C(EventIndexer.class)); + all.add(C(DatabaseProvider.class, "dog", DogDatabase.class)); + } + private void defineFunctionEvaluators(List all) { all.add(C(Evaluator.class, ConcatEvaluator.ID, ConcatEvaluator.class)); } @@ -110,7 +124,8 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator { all.add(C(Evaluator.class, InEvaluator.ID, InEvaluator.class)); all.add(C(Evaluator.class, IdentifierEvaluator.ID, IdentifierEvaluator.class)); - + all.add(C(Evaluator.class, ParamMarkerEvaluator.ID, ParamMarkerEvaluator.class)); + all.add(C(Evaluator.class, LiteralStringEvaluator.ID, LiteralStringEvaluator.class)); all.add(C(Evaluator.class, LiteralNumberEvaluator.ID, LiteralNumberEvaluator.class)); all.add(C(Evaluator.class, LiteralBooleanEvaluator.ID, LiteralBooleanEvaluator.class)); diff --git a/bee-engine/src/main/java/com/dianping/bee/engine/spi/evaluator/logical/ParamMarkerEvaluator.java b/bee-engine/src/main/java/com/dianping/bee/engine/spi/evaluator/logical/ParamMarkerEvaluator.java new file mode 100644 index 0000000000000000000000000000000000000000..e8c884e48ffa96b8e0ad868831e62f4832e27218 --- /dev/null +++ b/bee-engine/src/main/java/com/dianping/bee/engine/spi/evaluator/logical/ParamMarkerEvaluator.java @@ -0,0 +1,14 @@ +package com.dianping.bee.engine.spi.evaluator.logical; + +import com.alibaba.cobar.parser.ast.expression.primary.ParamMarker; +import com.dianping.bee.engine.spi.evaluator.AbstractEvaluator; +import com.dianping.bee.engine.spi.row.RowContext; + +public class ParamMarkerEvaluator extends AbstractEvaluator { + public static final String ID = ParamMarker.class.getName(); + + @Override + public Object evaluate(RowContext ctx, ParamMarker expr) { + return ctx.getFirstAttribute(expr.getParamIndex(), ""); + } +} diff --git a/bee-engine/src/main/java/com/dianping/bee/engine/spi/internal/SingleTableStatementBuilder.java b/bee-engine/src/main/java/com/dianping/bee/engine/spi/internal/SingleTableStatementBuilder.java index 0fa2ffbda1ca2637d5286b27087f7b0bfb4d1f54..0f44f75f733829b39ba6f421322471c2c6790345 100644 --- a/bee-engine/src/main/java/com/dianping/bee/engine/spi/internal/SingleTableStatementBuilder.java +++ b/bee-engine/src/main/java/com/dianping/bee/engine/spi/internal/SingleTableStatementBuilder.java @@ -166,7 +166,13 @@ public class SingleTableStatementBuilder extends EmptySQLASTVisitor { Number value = ((LiteralNumber) right).getNumber(); m_stmt.addAttribute(name, value); - } + } else if (right instanceof ParamMarker) { + // FIXME + String name = ((Identifier) left).getIdText(); + String value = "?"; + + m_stmt.addAttribute(name, value); + } } super.visit(node); diff --git a/bee-engine/src/main/java/com/dianping/bee/engine/spi/row/DefaultRowContext.java b/bee-engine/src/main/java/com/dianping/bee/engine/spi/row/DefaultRowContext.java index b3c72d2869269b72dbb3faa0c82a8663352858d8..6f1ec13567a470d81d78251e81092516ee0deb61 100644 --- a/bee-engine/src/main/java/com/dianping/bee/engine/spi/row/DefaultRowContext.java +++ b/bee-engine/src/main/java/com/dianping/bee/engine/spi/row/DefaultRowContext.java @@ -1,6 +1,8 @@ package com.dianping.bee.engine.spi.row; import java.util.Arrays; +import java.util.Collection; +import java.util.Iterator; import java.util.List; import java.util.Map; @@ -27,7 +29,7 @@ public class DefaultRowContext implements RowContext { } @SuppressWarnings("unchecked") - @Override + @Override public List getAttributeValues(String name) { return (List) m_attributes.get(name); } @@ -45,7 +47,7 @@ public class DefaultRowContext implements RowContext { @SuppressWarnings("unchecked") @Override - public T getFirstAttribute(String name, T defaultValue) { + public T getFirstAttribute(String name, T defaultValue) { List list = (List) m_attributes.get(name); if (list == null || list.isEmpty()) { @@ -55,6 +57,27 @@ public class DefaultRowContext implements RowContext { } } + @SuppressWarnings("unchecked") + @Override + public T getFirstAttribute(int attrIndex, T defaultValue) { + int index = 0; + Collection> values = m_attributes.values(); + Iterator> iterator = values.iterator(); + while (iterator.hasNext() && index++ < attrIndex) { + iterator.next(); + } + if (iterator.hasNext()) { + List list = (List) iterator.next(); + + if (list == null || list.isEmpty()) { + return defaultValue; + } else { + return list.get(0); + } + } + return defaultValue; + } + @SuppressWarnings("unchecked") @Override public T getValue(int colIndex) { @@ -85,6 +108,7 @@ public class DefaultRowContext implements RowContext { public void setColumnValue(int colIndex, Object value) { m_values[colIndex] = value; } + public void setRowListener(RowListener listener) { m_listener = listener; } diff --git a/bee-engine/src/main/java/com/dianping/bee/engine/spi/row/RowContext.java b/bee-engine/src/main/java/com/dianping/bee/engine/spi/row/RowContext.java index 2e02fc0d85517ead87ee742b609d85f2a61a0069..e090db3c088ab46bdb1161b1d07b92252943dcf3 100644 --- a/bee-engine/src/main/java/com/dianping/bee/engine/spi/row/RowContext.java +++ b/bee-engine/src/main/java/com/dianping/bee/engine/spi/row/RowContext.java @@ -16,6 +16,8 @@ public interface RowContext { public T getFirstAttribute(String name, T defaultValue); + public T getFirstAttribute(int attrIndex, T defaultValue); + public T getValue(int colIndex); public T getValue(String columnName); diff --git a/bee-engine/src/main/resources/META-INF/plexus/components.xml b/bee-engine/src/main/resources/META-INF/plexus/components.xml index 46d821aa65710c6ee364e37dd8c2b64f353cd1f7..c29b2153d2b7254099a3f50601aab513af674d6c 100644 --- a/bee-engine/src/main/resources/META-INF/plexus/components.xml +++ b/bee-engine/src/main/resources/META-INF/plexus/components.xml @@ -177,6 +177,11 @@ com.alibaba.cobar.parser.ast.expression.primary.Identifier com.dianping.bee.engine.spi.evaluator.logical.IdentifierEvaluator + + com.dianping.bee.engine.spi.evaluator.Evaluator + com.alibaba.cobar.parser.ast.expression.primary.ParamMarker + com.dianping.bee.engine.spi.evaluator.logical.ParamMarkerEvaluator + com.dianping.bee.engine.spi.evaluator.Evaluator com.alibaba.cobar.parser.ast.expression.primary.literal.LiteralString @@ -197,5 +202,23 @@ com.alibaba.cobar.parser.ast.expression.primary.function.string.Concat com.dianping.bee.engine.spi.evaluator.function.ConcatEvaluator + + com.dianping.bee.engine.spi.DatabaseProvider + cat + com.dianping.bee.db.cat.CatDatabase + + + com.dianping.bee.db.cat.TransactionIndexer + com.dianping.bee.db.cat.TransactionIndexer + + + com.dianping.bee.db.cat.EventIndexer + com.dianping.bee.db.cat.EventIndexer + + + com.dianping.bee.engine.spi.DatabaseProvider + dog + com.dianping.bee.db.dog.DogDatabase + diff --git a/bee-engine/src/test/java/com/dianping/bee/db/CatDatabase.java b/bee-engine/src/test/java/com/dianping/bee/db/cat/CatDatabase.java similarity index 82% rename from bee-engine/src/test/java/com/dianping/bee/db/CatDatabase.java rename to bee-engine/src/test/java/com/dianping/bee/db/cat/CatDatabase.java index 6ff8d61d3e6a255351d469b4606198b06d385af6..b5a84e9df0050c547cfa686e8d6fadb0ddaeb807 100644 --- a/bee-engine/src/test/java/com/dianping/bee/db/CatDatabase.java +++ b/bee-engine/src/test/java/com/dianping/bee/db/cat/CatDatabase.java @@ -1,13 +1,10 @@ -package com.dianping.bee.db; - -import org.apache.commons.lang3.RandomStringUtils; +package com.dianping.bee.db.cat; import com.dianping.bee.engine.spi.DatabaseProvider; import com.dianping.bee.engine.spi.TableProvider; import com.dianping.bee.engine.spi.index.Index; import com.dianping.bee.engine.spi.meta.ColumnMeta; import com.dianping.bee.engine.spi.meta.IndexMeta; -import com.dianping.bee.engine.spi.row.RowContext; public class CatDatabase implements DatabaseProvider { @@ -62,18 +59,18 @@ public class CatDatabase implements DatabaseProvider { } @Override - public IndexMeta[] getIndexes() { + public IndexMeta getDefaultIndex() { return null; } @Override - public String getName() { - return m_name; + public IndexMeta[] getIndexes() { + return null; } @Override - public IndexMeta getDefaultIndex() { - return null; + public String getName() { + return m_name; } } @@ -165,6 +162,11 @@ public class CatDatabase implements DatabaseProvider { } } + @Override + public Class getIndexClass() { + return EventIndexer.class; + } + @Override public int getLength() { return m_columns.length; @@ -178,11 +180,6 @@ public class CatDatabase implements DatabaseProvider { throw new IndexOutOfBoundsException("size: " + m_orders.length + ", index: " + index); } } - - @Override - public Class getIndexClass() { - return TransactionIndexer.class; - } } public static enum TransactionColumn implements ColumnMeta { @@ -263,6 +260,11 @@ public class CatDatabase implements DatabaseProvider { } } + @Override + public Class getIndexClass() { + return TransactionIndexer.class; + } + @Override public int getLength() { return m_columns.length; @@ -276,49 +278,6 @@ public class CatDatabase implements DatabaseProvider { throw new IndexOutOfBoundsException("size: " + m_orders.length + ", index: " + index); } } - - @Override - public Class getIndexClass() { - throw new UnsupportedOperationException("Not implemented yet!"); - } - } - - private static class TransactionSampleData { - private static Object[][] sampleData; - - static { - sampleData = new Object[10][]; - int columnSize = TransactionColumn.values().length; - for (int i = 0; i < sampleData.length; i++) { - sampleData[i] = new Object[columnSize]; - for (int j = 0; i < columnSize; j++) { - if (TransactionColumn.values()[j].getType().getSimpleName().equals("String")) { - sampleData[i][j] = RandomStringUtils.randomAlphabetic(5); - } else if (TransactionColumn.values()[j].getType().getSimpleName().equals("Integer") - || TransactionColumn.values()[j].getType().getSimpleName().equals("Long")) { - sampleData[i][j] = RandomStringUtils.randomNumeric(3); - } else { - sampleData[i][j] = RandomStringUtils.randomAlphanumeric(5); - } - } - } - } - - public static Object[][] getSampleData() { - return sampleData; - } - } - - private class TransactionIndexer implements Index { - - @Override - public void query(RowContext ctx) throws Exception { - Object[][] sampleData = TransactionSampleData.getSampleData(); - for (int i = 0; i < sampleData.length; i++) { - ctx.apply(); - } - } - } @Override diff --git a/bee-engine/src/test/java/com/dianping/bee/db/cat/EventIndexer.java b/bee-engine/src/test/java/com/dianping/bee/db/cat/EventIndexer.java new file mode 100644 index 0000000000000000000000000000000000000000..bfd374c7847006adf783b9f59695f70c8e73b9c1 --- /dev/null +++ b/bee-engine/src/test/java/com/dianping/bee/db/cat/EventIndexer.java @@ -0,0 +1,118 @@ +/** + * Project: bee-engine + * + * File Created at 2012-9-3 + * + * Copyright 2012 dianping.com. + * All rights reserved. + * + * This software is the confidential and proprietary information of + * Dianping Company. ("Confidential Information"). You shall not + * disclose such Confidential Information and shall use it only in + * accordance with the terms of the license agreement you entered into + * with dianping.com. + */ +package com.dianping.bee.db.cat; + +import java.util.Random; + +import org.apache.commons.lang3.RandomStringUtils; + +import com.dianping.bee.db.cat.CatDatabase.EventColumn; +import com.dianping.bee.engine.spi.index.Index; +import com.dianping.bee.engine.spi.row.RowContext; + +public class EventIndexer implements Index { + + @Override + public void query(RowContext ctx) throws Exception { + Object[][] sampleData = EventSampleData.getSampleData(); + for (int i = 0; i < sampleData.length; i++) { + applyRow(ctx, sampleData[i]); + } + } + + /** + * @param objects + */ + private void applyRow(RowContext ctx, Object[] row) { + int cols = ctx.getColumnSize(); + + for (int i = 0; i < cols; i++) { + EventColumn column = ctx.getColumn(i); + + switch (column) { + case Type: + ctx.setColumnValue(i, row[2]); + break; + case Name: + ctx.setColumnValue(i, row[3]); + break; + case Domain: + ctx.setColumnValue(i, row[1]); + break; + case StartTime: + ctx.setColumnValue(i, row[0]); + break; + case MinDuration: + ctx.setColumnValue(i, row[7]); + break; + case MaxDuration: + ctx.setColumnValue(i, row[8]); + break; + case SampleMessage: + ctx.setColumnValue(i, row[6]); + break; + case TotalCount: + ctx.setColumnValue(i, row[4]); + break; + case Line95: + ctx.setColumnValue(i, row[11]); + break; + case Failures: + ctx.setColumnValue(i, row[5]); + default: + // TODO more here + } + } + + ctx.apply(); + } + + static class EventSampleData { + private static Object[][] sampleData; + + static { + sampleData = new Object[10][]; + Random random = new Random(); + int columnSize = EventColumn.values().length; + for (int i = 0; i < sampleData.length; i++) { + sampleData[i] = new Object[columnSize]; + for (int j = 0; j < columnSize; j++) { + + if (EventColumn.values()[j].getName().equalsIgnoreCase("Domain")) { + sampleData[i][j] = random.nextBoolean() ? "MobileApi" : RandomStringUtils.randomAlphabetic(5); + continue; + } else if (EventColumn.values()[j].getName().equalsIgnoreCase("StartTime")) { + sampleData[i][j] = random.nextBoolean() ? "20120822" : RandomStringUtils.randomNumeric(8); + continue; + } + + if (EventColumn.values()[j].getType().getSimpleName().equals("String")) { + sampleData[i][j] = RandomStringUtils.randomAlphabetic(5); + } else if (EventColumn.values()[j].getType().getSimpleName().equals("Integer") + || EventColumn.values()[j].getType().getSimpleName().equals("Long")) { + sampleData[i][j] = RandomStringUtils.randomNumeric(3); + } else { + sampleData[i][j] = RandomStringUtils.randomAlphanumeric(5); + } + } + } + } + + public static Object[][] getSampleData() { + return sampleData; + } + } + +} \ No newline at end of file diff --git a/bee-engine/src/test/java/com/dianping/bee/db/cat/TransactionIndexer.java b/bee-engine/src/test/java/com/dianping/bee/db/cat/TransactionIndexer.java new file mode 100644 index 0000000000000000000000000000000000000000..4966a14c7b5ec597b4407f522bb4ca0be7401a2a --- /dev/null +++ b/bee-engine/src/test/java/com/dianping/bee/db/cat/TransactionIndexer.java @@ -0,0 +1,118 @@ +/** + * Project: bee-engine + * + * File Created at 2012-9-3 + * + * Copyright 2012 dianping.com. + * All rights reserved. + * + * This software is the confidential and proprietary information of + * Dianping Company. ("Confidential Information"). You shall not + * disclose such Confidential Information and shall use it only in + * accordance with the terms of the license agreement you entered into + * with dianping.com. + */ +package com.dianping.bee.db.cat; + +import java.util.Random; + +import org.apache.commons.lang3.RandomStringUtils; + +import com.dianping.bee.db.cat.CatDatabase.TransactionColumn; +import com.dianping.bee.engine.spi.index.Index; +import com.dianping.bee.engine.spi.row.RowContext; + +public class TransactionIndexer implements Index { + + @Override + public void query(RowContext ctx) throws Exception { + Object[][] sampleData = TransactionSampleData.getSampleData(); + for (int i = 0; i < sampleData.length; i++) { + applyRow(ctx, sampleData[i]); + } + } + + /** + * @param objects + */ + private void applyRow(RowContext ctx, Object[] row) { + int cols = ctx.getColumnSize(); + + for (int i = 0; i < cols; i++) { + TransactionColumn column = ctx.getColumn(i); + + switch (column) { + case Type: + ctx.setColumnValue(i, row[2]); + break; + case Name: + ctx.setColumnValue(i, row[3]); + break; + case Domain: + ctx.setColumnValue(i, row[1]); + break; + case StartTime: + ctx.setColumnValue(i, row[0]); + break; + case MinDuration: + ctx.setColumnValue(i, row[7]); + break; + case MaxDuration: + ctx.setColumnValue(i, row[8]); + break; + case SampleMessage: + ctx.setColumnValue(i, row[6]); + break; + case TotalCount: + ctx.setColumnValue(i, row[4]); + break; + case Line95: + ctx.setColumnValue(i, row[11]); + break; + case Failures: + ctx.setColumnValue(i, row[5]); + default: + // TODO more here + } + } + + ctx.apply(); + } + + static class TransactionSampleData { + private static Object[][] sampleData; + + static { + sampleData = new Object[10][]; + Random random = new Random(); + int columnSize = TransactionColumn.values().length; + for (int i = 0; i < sampleData.length; i++) { + sampleData[i] = new Object[columnSize]; + for (int j = 0; j < columnSize; j++) { + + if (TransactionColumn.values()[j].getName().equalsIgnoreCase("Domain")) { + sampleData[i][j] = random.nextBoolean() ? "MobileApi" : RandomStringUtils.randomAlphabetic(5); + continue; + } else if (TransactionColumn.values()[j].getName().equalsIgnoreCase("StartTime")) { + sampleData[i][j] = random.nextBoolean() ? "20120822" : RandomStringUtils.randomNumeric(8); + continue; + } + + if (TransactionColumn.values()[j].getType().getSimpleName().equals("String")) { + sampleData[i][j] = RandomStringUtils.randomAlphabetic(5); + } else if (TransactionColumn.values()[j].getType().getSimpleName().equals("Integer") + || TransactionColumn.values()[j].getType().getSimpleName().equals("Long")) { + sampleData[i][j] = RandomStringUtils.randomNumeric(3); + } else { + sampleData[i][j] = RandomStringUtils.randomAlphanumeric(5); + } + } + } + } + + public static Object[][] getSampleData() { + return sampleData; + } + } + +} \ No newline at end of file diff --git a/bee-engine/src/test/java/com/dianping/bee/db/DogDatabase.java b/bee-engine/src/test/java/com/dianping/bee/db/dog/DogDatabase.java similarity index 76% rename from bee-engine/src/test/java/com/dianping/bee/db/DogDatabase.java rename to bee-engine/src/test/java/com/dianping/bee/db/dog/DogDatabase.java index 7a3f1b76e5f9251eb98d93dc8e4f7f320b123642..f7dbf5c2e021e0b2f693eaeba76014164044711e 100644 --- a/bee-engine/src/test/java/com/dianping/bee/db/DogDatabase.java +++ b/bee-engine/src/test/java/com/dianping/bee/db/dog/DogDatabase.java @@ -1,4 +1,4 @@ -package com.dianping.bee.db; +package com.dianping.bee.db.dog; import com.dianping.bee.engine.spi.DatabaseProvider; import com.dianping.bee.engine.spi.TableProvider; @@ -48,34 +48,6 @@ public class DogDatabase implements DatabaseProvider { return m_name; } -// @Override -// public RowSet queryByIndex(IndexMeta index, ColumnMeta[] selectColumns) { -// ColumnMeta[] columns = selectColumns; -// DefaultRowSet rowSet = new DefaultRowSet(columns); -// -// for (int rowIndex = 0; rowIndex < 10; rowIndex++) { -// Cell[] cells = new Cell[columns.length]; -// -// for (int colIndex = 0; colIndex < cells.length; colIndex++) { -// ColumnMeta columnMeta = columns[colIndex]; -// String randomValue = null; -// if (columnMeta.getType().getSimpleName().equals("String")) { -// randomValue = RandomStringUtils.randomAlphabetic(5); -// } else if (columnMeta.getType().getSimpleName().equals("Integer") -// || columnMeta.getType().getSimpleName().equals("Long")) { -// randomValue = RandomStringUtils.randomNumeric(3); -// } else { -// randomValue = RandomStringUtils.randomAlphanumeric(5); -// } -// cells[colIndex] = new DefaultCell(columnMeta, randomValue); -// } -// -// Row row = new DefaultRow(cells); -// rowSet.addRow(row); -// } -// return rowSet; -// } - @Override public IndexMeta getDefaultIndex() { return TransactionIndex.IDX_STARTTIME_DOMAIN; diff --git a/bee-engine/src/test/java/com/dianping/bee/jdbc/JDBCTest.java b/bee-engine/src/test/java/com/dianping/bee/jdbc/JDBCTest.java index a36cac34b113a5f84501917f867859229b0408d7..95d7ba1446b9f04522cc3b12a9098336bbcf524a 100644 --- a/bee-engine/src/test/java/com/dianping/bee/jdbc/JDBCTest.java +++ b/bee-engine/src/test/java/com/dianping/bee/jdbc/JDBCTest.java @@ -72,7 +72,7 @@ public class JDBCTest extends ComponentTestCase { Assert.assertNotNull(rs); rs.last(); Assert.assertEquals(0, rs.getRow()); - displayResultSet(rs); + displayResultSet(sql, rs); conn.close(); } @@ -85,18 +85,20 @@ public class JDBCTest extends ComponentTestCase { String driver = "com.mysql.jdbc.Driver"; String userName = "test"; String password = "test"; + String sql = null; Class.forName(driver).newInstance(); DriverManager.setLoginTimeout(600); Connection conn = DriverManager.getConnection(url + dbName, userName, password); Statement stmt = conn.createStatement(); Assert.assertNotNull(stmt); - ResultSet rs = stmt.executeQuery("select type, sum(failures) from transaction where domain=? and starttime=?"); - Assert.assertEquals(2, rs.getMetaData().getColumnCount()); + sql = "select type, sum(failures), domain from transaction where domain='MobileApi' and starttime='20120822'"; + ResultSet rs = stmt.executeQuery(sql); + Assert.assertEquals(3, rs.getMetaData().getColumnCount()); Assert.assertNotNull(rs); rs.last(); Assert.assertTrue(rs.getRow() > 0); - displayResultSet(rs); + displayResultSet(sql, rs); conn.close(); } @@ -108,6 +110,7 @@ public class JDBCTest extends ComponentTestCase { String driver = "com.mysql.jdbc.Driver"; String userName = "test"; String password = "test"; + String sql = null; Class.forName(driver).newInstance(); DriverManager.setLoginTimeout(600); @@ -115,34 +118,37 @@ public class JDBCTest extends ComponentTestCase { Statement stmt1 = conn.createStatement(); Assert.assertNotNull(stmt1); - ResultSet rs1 = stmt1.executeQuery("select type, sum(failures) from transaction where domain=? and starttime=?"); + sql = "select type, sum(failures) from transaction where domain='MobileApi' and starttime='20120822'"; + ResultSet rs1 = stmt1.executeQuery(sql); Assert.assertEquals(2, rs1.getMetaData().getColumnCount()); Assert.assertNotNull(rs1); rs1.last(); Assert.assertTrue(rs1.getRow() > 0); - displayResultSet(rs1); + displayResultSet(sql, rs1); Statement stmt2 = conn.createStatement(); Assert.assertNotNull(stmt2); - ResultSet rs2 = stmt2.executeQuery("select type,sum(failures) from event"); + sql = "select type,sum(failures) from event"; + ResultSet rs2 = stmt2.executeQuery(sql); Assert.assertEquals(2, rs2.getMetaData().getColumnCount()); Assert.assertNotNull(rs2); rs2.last(); Assert.assertTrue(rs2.getRow() > 0); - displayResultSet(rs2); + displayResultSet(sql, rs2); Statement stmt3 = conn.createStatement(); Assert.assertNotNull(stmt3); - ResultSet rs3 = stmt3.executeQuery("select * from transaction"); + sql = "select * from transaction"; + ResultSet rs3 = stmt3.executeQuery(sql); Assert.assertTrue(rs3.getMetaData().getColumnCount() > 0); Assert.assertNotNull(rs3); rs3.last(); Assert.assertTrue(rs3.getRow() > 0); - displayResultSet(rs3); + displayResultSet(sql, rs3); conn.close(); } -// @Test + @Test public void testMultiQueryInMultiDatabaese() throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException { String url = "jdbc:mysql://localhost:2330/"; @@ -150,6 +156,7 @@ public class JDBCTest extends ComponentTestCase { String driver = "com.mysql.jdbc.Driver"; String userName = "test"; String password = "test"; + String sql = null; Class.forName(driver).newInstance(); DriverManager.setLoginTimeout(600); @@ -157,28 +164,31 @@ public class JDBCTest extends ComponentTestCase { Statement stmt1 = conn1.createStatement(); Assert.assertNotNull(stmt1); - ResultSet rs1 = stmt1.executeQuery("select type, sum(failures) from transaction where domain=? and starttime=?"); + sql = "select type, sum(failures) from transaction where domain='MobileApi' and starttime='20120822'"; + ResultSet rs1 = stmt1.executeQuery(sql); Assert.assertEquals(2, rs1.getMetaData().getColumnCount()); Assert.assertNotNull(rs1); rs1.last(); Assert.assertTrue(rs1.getRow() > 0); - displayResultSet(rs1); + displayResultSet(sql, rs1); conn1.close(); dbName = "dog"; Connection conn2 = DriverManager.getConnection(url + dbName, userName, password); Statement stmt2 = conn2.createStatement(); Assert.assertNotNull(stmt2); - ResultSet rs2 = stmt2.executeQuery("select type, sum(failures) from transaction where domain=? and starttime=?"); + sql = "select type, sum(failures) from transaction where domain='MobileApi' and starttime='20120822'"; + ResultSet rs2 = stmt2.executeQuery(sql); Assert.assertEquals(2, rs2.getMetaData().getColumnCount()); Assert.assertNotNull(rs2); rs2.last(); Assert.assertTrue(rs2.getRow() > 0); - displayResultSet(rs2); + displayResultSet(sql, rs2); conn2.close(); } - private void displayResultSet(ResultSet rs) throws SQLException { + private void displayResultSet(String sql, ResultSet rs) throws SQLException { + System.out.println("Query: " + sql); ResultSetMetaData meta = rs.getMetaData(); int columns = meta.getColumnCount(); for (int column = 1; column <= columns; column++) { diff --git a/bee-engine/src/test/java/com/dianping/bee/jdbc/JDBCTestConfigurator.java b/bee-engine/src/test/java/com/dianping/bee/jdbc/JDBCTestConfigurator.java index 60920ad06b8a211676f7fc213955d170b7028c10..d362bee7ab322ba76a3f940e28c98ae9e6c06308 100644 --- a/bee-engine/src/test/java/com/dianping/bee/jdbc/JDBCTestConfigurator.java +++ b/bee-engine/src/test/java/com/dianping/bee/jdbc/JDBCTestConfigurator.java @@ -4,8 +4,10 @@ import java.io.File; import java.util.ArrayList; import java.util.List; -import com.dianping.bee.db.CatDatabase; -import com.dianping.bee.db.DogDatabase; +import com.dianping.bee.db.cat.CatDatabase; +import com.dianping.bee.db.cat.EventIndexer; +import com.dianping.bee.db.cat.TransactionIndexer; +import com.dianping.bee.db.dog.DogDatabase; import com.dianping.bee.engine.spi.DatabaseProvider; import com.site.lookup.configuration.AbstractResourceConfigurator; import com.site.lookup.configuration.Component; @@ -20,6 +22,8 @@ public class JDBCTestConfigurator extends AbstractResourceConfigurator { List all = new ArrayList(); all.add(C(DatabaseProvider.class, "cat", CatDatabase.class)); + all.add(C(EventIndexer.class)); + all.add(C(TransactionIndexer.class)); all.add(C(DatabaseProvider.class, "dog", DogDatabase.class)); return all; diff --git a/bee-engine/src/test/resources/com/dianping/bee/jdbc/JDBCTest.xml b/bee-engine/src/test/resources/com/dianping/bee/jdbc/JDBCTest.xml index cae09ff613dcb8bb2f16ff798f900036d2c73bb2..b06787a12895e700338640ae3aa7d4374a163586 100644 --- a/bee-engine/src/test/resources/com/dianping/bee/jdbc/JDBCTest.xml +++ b/bee-engine/src/test/resources/com/dianping/bee/jdbc/JDBCTest.xml @@ -3,12 +3,20 @@ com.dianping.bee.engine.spi.DatabaseProvider cat - com.dianping.bee.db.CatDatabase + com.dianping.bee.db.cat.CatDatabase + + + com.dianping.bee.db.cat.EventIndexer + com.dianping.bee.db.cat.EventIndexer + + + com.dianping.bee.db.cat.TransactionIndexer + com.dianping.bee.db.cat.TransactionIndexer com.dianping.bee.engine.spi.DatabaseProvider dog - com.dianping.bee.db.DogDatabase + com.dianping.bee.db.dog.DogDatabase