提交 57906a52 编写于 作者: Y yanchun.yang

Merge branch 'master' of ssh://192.168.8.22:58422/cat

......@@ -3,10 +3,6 @@ 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;
......@@ -34,6 +30,8 @@ import com.dianping.bee.engine.spi.handler.internal.ShowHandler;
import com.dianping.bee.engine.spi.handler.internal.UseHandler;
import com.dianping.bee.engine.spi.internal.DefaultStatementManager;
import com.dianping.bee.engine.spi.internal.DefaultTableProviderManager;
import com.dianping.bee.engine.spi.internal.SingleTablePreparedStatement;
import com.dianping.bee.engine.spi.internal.SingleTablePreparedStatementBuilder;
import com.dianping.bee.engine.spi.internal.SingleTableRowFilter;
import com.dianping.bee.engine.spi.internal.SingleTableStatement;
import com.dianping.bee.engine.spi.internal.SingleTableStatementBuilder;
......@@ -74,22 +72,17 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator {
all.add(C(SingleTableStatementBuilder.class).is(PER_LOOKUP) //
.req(TableHelper.class, SingleTableStatement.class, SingleTableRowFilter.class));
all.add(C(SingleTablePreparedStatement.class).is(PER_LOOKUP));
all.add(C(SingleTablePreparedStatementBuilder.class).is(PER_LOOKUP)//
.req(TableHelper.class, SingleTablePreparedStatement.class, SingleTableRowFilter.class));
defineHandlers(all);
defineLogicalEvaluators(all);
defineFunctionEvaluators(all);
defineDatabaseProvider(all);
return all;
}
// FIXME: need dependency reverse
private void defineDatabaseProvider(List<Component> 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<Component> all) {
all.add(C(Evaluator.class, ConcatEvaluator.ID, ConcatEvaluator.class));
}
......@@ -125,7 +118,7 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator {
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));
......
/**
* Project: bee-engine
*
* File Created at 2012-9-4
*
* 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.engine.spi;
import java.util.List;
/**
* @author <a href="mailto:yiming.liu@dianping.com">Yiming Liu</a>
*/
public interface PreparedStatement extends Statement {
public int getParameterSize();
public void setParameterSize(int size);
public void setParameters(List<Object> params);
}
......@@ -3,7 +3,6 @@ package com.dianping.bee.engine.spi;
import com.dianping.bee.engine.spi.meta.RowSet;
public interface Statement {
public int getParameterSize();
public int getColumnSize();
......
......@@ -7,9 +7,9 @@ public interface StatementManager {
public Statement build(String sql) throws SQLSyntaxErrorException;
public long stmtPrepare(Statement stmt);
public Statement stmtExecute(long stmtId);
public long stmtPrepare(PreparedStatement stmt);
public void stmtClose(long stmtId);
public PreparedStatement getStatement(Long stmtId);
}
......@@ -19,10 +19,15 @@ import java.util.List;
import com.alibaba.cobar.ErrorCode;
import com.alibaba.cobar.Fields;
import com.alibaba.cobar.protocol.mysql.FieldPacket;
import com.alibaba.cobar.server.ServerConnection;
import com.dianping.bee.engine.spi.PreparedStatement;
import com.dianping.bee.engine.spi.Statement;
import com.dianping.bee.engine.spi.StatementManager;
import com.dianping.bee.engine.spi.handler.AbstractCommandHandler;
import com.dianping.bee.engine.spi.meta.Row;
import com.dianping.bee.engine.spi.meta.RowSet;
import com.dianping.bee.engine.spi.meta.internal.TypeUtils;
import com.site.lookup.annotation.Inject;
/**
......@@ -34,38 +39,59 @@ public class PrepareHandler extends AbstractCommandHandler {
@Override
protected void handle(ServerConnection c, List<String> parts) {
// String stmt = Joiners.by(' ').join(parts);
// try {
// m_manager.stmtPrepare(stmt);
// } catch (SQLSyntaxErrorException e) {
// error(c, ErrorCode.ER_SYNTAX_ERROR, e.getMessage());
// }
}
/**
* @param sql
* @param stmtId
* @param c
* @param offset
*/
public void close(String sql, ServerConnection c, int offset) {
public void close(Long stmtId, ServerConnection c) {
}
/**
* @param sql
* @param stmtId
* @param parameters
* @param c
* @param offset
*/
public void execute(String sql, ServerConnection c, int offset) {
public void execute(Long stmtId, List<Object> parameters, ServerConnection c) {
PreparedStatement stmt = m_manager.getStatement(stmtId);
stmt.setParameters(parameters);
RowSet rowset = stmt.query();
CommandContext ctx = new CommandContext(c);
String[] names = new String[rowset.getColumnSize()];
for (int colIndex = 0; colIndex < names.length; colIndex++) {
names[colIndex] = rowset.getColumn(colIndex).getName();
}
ctx.writeHeader(names.length);
for (int colIndex = 0; colIndex < names.length; colIndex++) {
ctx.writeField(names[colIndex], TypeUtils.convertJavaTypeToFieldType(rowset.getColumn(colIndex).getType()));
}
ctx.writeEOF();
for (int rowIndex = 0; rowIndex < rowset.getRowSize(); rowIndex++) {
Row row = rowset.getRow(rowIndex);
ctx.writeRow(row);
}
ctx.writeEOF();
ctx.complete();
}
public PreparedStatement getStatement(Long stmtId) {
return m_manager.getStatement(stmtId);
}
/**
* @param sql
* @param c
* @param offset
*/
public void prepare(String sql, ServerConnection c, int offset) {
public void prepare(String sql, ServerConnection c) {
Statement stmt = null;
try {
stmt = m_manager.parseSQL(sql);
......@@ -73,21 +99,29 @@ public class PrepareHandler extends AbstractCommandHandler {
error(c, ErrorCode.ER_SYNTAX_ERROR, e.getMessage());
}
long stmtId = m_manager.stmtPrepare(stmt);
long stmtId = m_manager.stmtPrepare((PreparedStatement) stmt);
CommandContext ctx = new CommandContext(c);
int columnSize = stmt.getColumnSize();
int parameterSize = stmt.getParameterSize();
int parameterSize = ((PreparedStatement) stmt).getParameterSize();
PreparePacket packet = new PreparePacket(stmtId, columnSize, parameterSize);
ctx.write(packet);
// FIXME: just some sample code here
for (int i = 0; i < parameterSize; i++) {
PrepareParameterPacket parameterPacket = new PrepareParameterPacket(Fields.FIELD_TYPE_STRING,
Fields.NOT_NULL_FLAG, (byte) 0, 50);
ctx.write(parameterPacket);
// PrepareParameterPacket parameterPacket = new
// PrepareParameterPacket(Fields.FIELD_TYPE_STRING,
// Fields.NOT_NULL_FLAG, (byte) 0, 50);
FieldPacket field = new FieldPacket();
field.type = Fields.FIELD_TYPE_STRING;
field.flags = Fields.NOT_NULL_FLAG;
field.decimals = (byte) 0;
field.length = 50;
// ctx.write(parameterPacket);
ctx.write(field);
}
ctx.writeEOF();
ctx.complete();
}
}
\ No newline at end of file
......@@ -40,7 +40,22 @@ public class PreparePacket extends MySQLPacket {
this.m_columnSize = columnSize;
this.m_parameterSize = parameterSize;
}
/**
* Bytes Name
----- ----
1 field_count
4 statement_handler_id
2 columns
2 parameters
field_count: Always = 0, as with OK Packet.
statement_handler_id: ID of statement handler.
columns: Number of columns in result set.
parameters: Number of parameters in query.
*/
@Override
public ByteBuffer write(ByteBuffer buffer, FrontendConnection c) {
int size = calcPacketSize();
......@@ -49,7 +64,9 @@ public class PreparePacket extends MySQLPacket {
buffer.put(packetId);
buffer.put(m_fieldCount);
BufferUtil.writeUB4(buffer, m_statementId);
BufferUtil.writeUB2(buffer, m_columnSize);
//FIXME: not compatible with document
// BufferUtil.writeUB2(buffer, m_columnSize);
BufferUtil.writeUB2(buffer, m_fieldCount);
BufferUtil.writeUB2(buffer, m_parameterSize);
return buffer;
}
......
......@@ -25,6 +25,10 @@ import com.alibaba.cobar.protocol.MySQLPacket;
*/
public class PrepareParameterPacket extends MySQLPacket {
public static final byte FIELD_COUNT = 0x04;
private byte m_fieldCount = FIELD_COUNT;
private int m_fieldType;
private int m_columnFlag;
......@@ -46,6 +50,7 @@ public class PrepareParameterPacket extends MySQLPacket {
buffer = c.checkWriteBuffer(buffer, c.getPacketHeaderSize() + size);
BufferUtil.writeUB3(buffer, size);
buffer.put(packetId);
buffer.put(m_fieldCount);
BufferUtil.writeUB2(buffer, m_fieldType);
BufferUtil.writeUB2(buffer, m_columnFlag);
buffer.put(m_decimal);
......
......@@ -6,6 +6,7 @@ import java.util.Map;
import com.alibaba.cobar.parser.ast.stmt.SQLStatement;
import com.alibaba.cobar.parser.recognizer.SQLParserDelegate;
import com.dianping.bee.engine.spi.PreparedStatement;
import com.dianping.bee.engine.spi.Statement;
import com.dianping.bee.engine.spi.StatementManager;
import com.site.lookup.ContainerHolder;
......@@ -13,7 +14,7 @@ import com.site.lookup.ContainerHolder;
public class DefaultStatementManager extends ContainerHolder implements StatementManager {
private Map<String, Statement> m_statements = new HashMap<String, Statement>();
private Map<Long, Statement> m_prepares = new HashMap<Long, Statement>();
private Map<Long, PreparedStatement> m_prepares = new HashMap<Long, PreparedStatement>();
private static long stmtId = 0;
......@@ -42,7 +43,12 @@ public class DefaultStatementManager extends ContainerHolder implements Statemen
statement.accept(detector);
if (detector.isSingleTable()) {
SingleTableStatementBuilder builder = lookup(SingleTableStatementBuilder.class);
SingleTableStatementBuilder builder = null;
if (detector.isPrepared()) {
builder = lookup(SingleTablePreparedStatementBuilder.class);
} else {
builder = lookup(SingleTableStatementBuilder.class);
}
try {
statement.accept(builder);
......@@ -56,17 +62,12 @@ public class DefaultStatementManager extends ContainerHolder implements Statemen
}
@Override
public long stmtPrepare(Statement stmt) {
public long stmtPrepare(PreparedStatement stmt) {
synchronized (m_prepares) {
m_prepares.put(stmtId++ % Long.MAX_VALUE, stmt);
}
return stmtId;
}
@Override
public Statement stmtExecute(long stmtId) {
return m_prepares.get(stmtId);
return stmtId - 1;
}
@Override
......@@ -75,4 +76,9 @@ public class DefaultStatementManager extends ContainerHolder implements Statemen
m_prepares.remove(stmtId);
}
}
@Override
public PreparedStatement getStatement(Long stmtId) {
return m_prepares.get(stmtId);
}
}
package com.dianping.bee.engine.spi.internal;
import com.alibaba.cobar.parser.ast.expression.Expression;
import com.alibaba.cobar.parser.ast.expression.comparison.ComparisionEqualsExpression;
import com.alibaba.cobar.parser.ast.expression.primary.Identifier;
import com.alibaba.cobar.parser.ast.expression.primary.ParamMarker;
import com.alibaba.cobar.parser.ast.fragment.tableref.TableReferences;
import com.alibaba.cobar.parser.ast.stmt.dml.DMLSelectStatement;
import com.alibaba.cobar.parser.visitor.EmptySQLASTVisitor;
......@@ -7,6 +11,12 @@ import com.alibaba.cobar.parser.visitor.EmptySQLASTVisitor;
public class QueryDetector extends EmptySQLASTVisitor {
private boolean m_singleTable;
private boolean m_isPrepared;
public boolean isPrepared() {
return m_isPrepared;
}
public boolean isSingleTable() {
return m_singleTable;
}
......@@ -16,5 +26,26 @@ public class QueryDetector extends EmptySQLASTVisitor {
TableReferences tables = node.getTables();
m_singleTable = tables.isSingleTable();
Expression where = node.getWhere();
if (where != null) {
where.accept(this);
}
}
@Override
public void visit(ComparisionEqualsExpression node) {
Expression left = node.getLeftOprand();
if (left instanceof Identifier) {
Expression right = node.getRightOprand();
if (right instanceof ParamMarker) {
m_isPrepared = true;
}
}
super.visit(node);
}
}
package com.dianping.bee.engine.spi.internal;
import java.util.List;
import com.dianping.bee.engine.spi.PreparedStatement;
public class SingleTablePreparedStatement extends SingleTableStatement implements PreparedStatement {
private int m_parameterSize;
@Override
public int getParameterSize() {
return m_parameterSize;
}
public void setParameterSize(int parameterSize) {
m_parameterSize = parameterSize;
}
@Override
public void setParameters(List<Object> params) {
}
}
package com.dianping.bee.engine.spi.internal;
import com.alibaba.cobar.parser.ast.expression.Expression;
import com.alibaba.cobar.parser.ast.expression.comparison.ComparisionEqualsExpression;
import com.alibaba.cobar.parser.ast.expression.primary.Identifier;
import com.alibaba.cobar.parser.ast.expression.primary.ParamMarker;
import com.alibaba.cobar.parser.ast.stmt.dml.DMLSelectStatement;
public class SingleTablePreparedStatementBuilder extends SingleTableStatementBuilder {
private int m_parameterSize;
public SingleTablePreparedStatement getStatement() {
return (SingleTablePreparedStatement) super.getStatement();
}
@Override
public void visit(DMLSelectStatement node) {
super.visit(node);
Expression where = node.getWhere();
if (where != null) {
getStatement().setParameterSize(m_parameterSize);
}
}
@Override
public void visit(ParamMarker node) {
m_parameterSize++;
}
@Override
public void visit(ComparisionEqualsExpression node) {
Expression left = node.getLeftOprand();
if (left instanceof Identifier) {
Expression right = node.getRightOprand();
if (right instanceof ParamMarker) {
// FIXME
String name = ((Identifier) left).getIdText();
String value = "?";
getStatement().addAttribute(name, value);
}
}
super.visit(node);
}
}
......@@ -23,8 +23,6 @@ public class SingleTableStatement extends ContainerHolder implements Statement {
private ColumnMeta[] m_selectColumns;
private int m_parameterSize;
private Map<ColumnMeta, Integer> m_allColumns = new LinkedHashMap<ColumnMeta, Integer>();
private Map<String, List<Object>> m_attributes = new HashMap<String, List<Object>>();
......@@ -34,11 +32,6 @@ public class SingleTableStatement extends ContainerHolder implements Statement {
return m_selectColumns.length;
}
@Override
public int getParameterSize() {
return m_parameterSize;
}
@Override
public RowSet query() {
Index index = lookup(m_index.getIndexClass());
......@@ -65,10 +58,6 @@ public class SingleTableStatement extends ContainerHolder implements Statement {
m_index = index;
}
public void setParameterSize(int parameterSize) {
m_parameterSize = parameterSize;
}
public void setRowFilter(RowFilter rowFilter) {
m_rowFilter = rowFilter;
}
......
......@@ -6,7 +6,6 @@ import java.util.List;
import com.alibaba.cobar.parser.ast.expression.Expression;
import com.alibaba.cobar.parser.ast.expression.comparison.ComparisionEqualsExpression;
import com.alibaba.cobar.parser.ast.expression.primary.Identifier;
import com.alibaba.cobar.parser.ast.expression.primary.ParamMarker;
import com.alibaba.cobar.parser.ast.expression.primary.literal.LiteralNumber;
import com.alibaba.cobar.parser.ast.expression.primary.literal.LiteralString;
import com.alibaba.cobar.parser.ast.fragment.tableref.TableRefFactor;
......@@ -34,8 +33,6 @@ public class SingleTableStatementBuilder extends EmptySQLASTVisitor {
private String m_databaseName;
private int m_parameterSize;
private Clause m_clause;
private List<ColumnMeta> m_selectColumns = new ArrayList<ColumnMeta>();
......@@ -102,7 +99,6 @@ public class SingleTableStatementBuilder extends EmptySQLASTVisitor {
m_stmt.setWhereColumns(m_whereColumns);
m_stmt.setRowFilter(m_rowFilter.setExpression(where));
m_stmt.setIndex(m_helper.findIndex(m_databaseName, m_tableName, m_whereColumns));
m_stmt.setParameterSize(m_parameterSize);
} else {
m_stmt.setIndex(m_helper.findDefaultIndex(m_databaseName, m_tableName));
}
......@@ -144,11 +140,6 @@ public class SingleTableStatementBuilder extends EmptySQLASTVisitor {
}
}
@Override
public void visit(ParamMarker node) {
m_parameterSize++;
}
@Override
public void visit(ComparisionEqualsExpression node) {
Expression left = node.getLeftOprand();
......@@ -166,13 +157,7 @@ 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);
......
......@@ -16,12 +16,15 @@ package com.dianping.bee.server;
import java.io.UnsupportedEncodingException;
import java.nio.channels.SocketChannel;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import com.alibaba.cobar.ErrorCode;
import com.alibaba.cobar.net.util.MySQLMessage;
import com.alibaba.cobar.protocol.mysql.OkPacket;
import com.alibaba.cobar.server.ServerConnection;
import com.dianping.bee.engine.spi.PreparedStatement;
import com.dianping.bee.engine.spi.session.SessionManager;
/**
......@@ -108,22 +111,40 @@ public class SimpleServerConnection extends ServerConnection {
try {
// 取得查询语句
MySQLMessage mm = new MySQLMessage(data);
Long stmtId;
mm.position(5);
String sql = null;
try {
sql = mm.readString(charset);
} catch (UnsupportedEncodingException e) {
writeErrMessage(ErrorCode.ER_UNKNOWN_CHARACTER_SET, "Unknown charset '" + charset + "'");
return;
}
if (sql == null || sql.length() == 0) {
writeErrMessage(ErrorCode.ER_NOT_ALLOWED_COMMAND, "Empty Prepared SQL");
return;
}
stmtId = (long) mm.readInt();
byte flag = mm.read();
int iterationCount = mm.readInt();
// 执行查询
if (queryHandler != null) {
((SimpleServerQueryHandler) queryHandler).stmtExecute(sql);
PreparedStatement stmt = ((SimpleServerQueryHandler) queryHandler).getStatement(stmtId);
if (stmt == null) {
writeErrMessage(ErrorCode.ER_YES, "Invalid Statement Identifier");
}
int parameterSize = stmt.getParameterSize();
List<Object> parameters = new ArrayList<Object>(parameterSize);
int nullBitMapSize = (parameterSize + 7) / 8;
for (int i = 0; i < nullBitMapSize; i++) {
// TODO
byte null_bits_map = mm.read();
}
byte new_bound = mm.read();
for (int i = 0; i < parameterSize; i++) {
byte[] typeArray = mm.readBytes(2);
// TODO determine type
}
for (int i = 0; i < parameterSize; i++) {
byte length = mm.read();
byte[] value = mm.readBytes(length);
parameters.add(new String(value));
}
((SimpleServerQueryHandler) queryHandler).stmtExecute(stmtId, parameters);
} else {
writeErrMessage(ErrorCode.ER_YES, "Empty QueryHandler");
}
......@@ -138,22 +159,13 @@ public class SimpleServerConnection extends ServerConnection {
try {
// 取得查询语句
MySQLMessage mm = new MySQLMessage(data);
mm.position(5);
String sql = null;
try {
sql = mm.readString(charset);
} catch (UnsupportedEncodingException e) {
writeErrMessage(ErrorCode.ER_UNKNOWN_CHARACTER_SET, "Unknown charset '" + charset + "'");
return;
}
if (sql == null || sql.length() == 0) {
writeErrMessage(ErrorCode.ER_NOT_ALLOWED_COMMAND, "Empty Prepared SQL");
return;
}
Long stmtId;
mm.position(1);
stmtId = mm.readLong();
// 执行查询
if (queryHandler != null) {
((SimpleServerQueryHandler) queryHandler).stmtClose(sql);
((SimpleServerQueryHandler) queryHandler).stmtClose(stmtId);
} else {
writeErrMessage(ErrorCode.ER_YES, "Empty QueryHandler");
}
......
package com.dianping.bee.server;
import java.util.List;
import com.alibaba.cobar.ErrorCode;
import com.alibaba.cobar.net.handler.FrontendQueryHandler;
import com.alibaba.cobar.server.ServerConnection;
......@@ -9,6 +11,7 @@ import com.alibaba.cobar.server.handler.KillHandler;
import com.alibaba.cobar.server.handler.SavepointHandler;
import com.alibaba.cobar.server.handler.SetHandler;
import com.alibaba.cobar.server.handler.StartHandler;
import com.dianping.bee.engine.spi.PreparedStatement;
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;
......@@ -91,21 +94,26 @@ public class SimpleServerQueryHandler implements FrontendQueryHandler {
/**
* @param sql
*/
public void stmtClose(String sql) {
public void stmtClose(Long stmtId) {
ServerConnection c = m_conn;
m_prepareHandler.close(sql, c, -1);
m_prepareHandler.close(stmtId, c);
}
/**
* @param sql
* @param parameters
*/
public void stmtExecute(String sql) {
public void stmtExecute(Long stmtId, List<Object> parameters) {
ServerConnection c = m_conn;
m_prepareHandler.execute(sql, c, -1);
m_prepareHandler.execute(stmtId, parameters, c);
}
public void stmtPrepare(String sql) {
ServerConnection c = m_conn;
m_prepareHandler.prepare(sql, c, -1);
m_prepareHandler.prepare(sql, c);
}
public PreparedStatement getStatement(Long stmtId) {
return m_prepareHandler.getStatement(stmtId);
}
}
......@@ -65,6 +65,27 @@
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.bee.engine.spi.internal.SingleTablePreparedStatement</role>
<implementation>com.dianping.bee.engine.spi.internal.SingleTablePreparedStatement</implementation>
<instantiation-strategy>per-lookup</instantiation-strategy>
</component>
<component>
<role>com.dianping.bee.engine.spi.internal.SingleTablePreparedStatementBuilder</role>
<implementation>com.dianping.bee.engine.spi.internal.SingleTablePreparedStatementBuilder</implementation>
<instantiation-strategy>per-lookup</instantiation-strategy>
<requirements>
<requirement>
<role>com.dianping.bee.engine.spi.internal.TableHelper</role>
</requirement>
<requirement>
<role>com.dianping.bee.engine.spi.internal.SingleTablePreparedStatement</role>
</requirement>
<requirement>
<role>com.dianping.bee.engine.spi.internal.SingleTableRowFilter</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.bee.server.SimpleServerQueryHandler</role>
<implementation>com.dianping.bee.server.SimpleServerQueryHandler</implementation>
......@@ -202,23 +223,5 @@
<role-hint>com.alibaba.cobar.parser.ast.expression.primary.function.string.Concat</role-hint>
<implementation>com.dianping.bee.engine.spi.evaluator.function.ConcatEvaluator</implementation>
</component>
<component>
<role>com.dianping.bee.engine.spi.DatabaseProvider</role>
<role-hint>cat</role-hint>
<implementation>com.dianping.bee.db.cat.CatDatabase</implementation>
</component>
<component>
<role>com.dianping.bee.db.cat.TransactionIndexer</role>
<implementation>com.dianping.bee.db.cat.TransactionIndexer</implementation>
</component>
<component>
<role>com.dianping.bee.db.cat.EventIndexer</role>
<implementation>com.dianping.bee.db.cat.EventIndexer</implementation>
</component>
<component>
<role>com.dianping.bee.engine.spi.DatabaseProvider</role>
<role-hint>dog</role-hint>
<implementation>com.dianping.bee.db.dog.DogDatabase</implementation>
</component>
</components>
</plexus>
......@@ -66,6 +66,12 @@ public class EventIndexer implements Index {
case TotalCount:
ctx.setColumnValue(i, row[4]);
break;
case SumDuration:
ctx.setColumnValue(i, row[9]);
break;
case Sum2Duration:
ctx.setColumnValue(i, row[10]);
break;
case Line95:
ctx.setColumnValue(i, row[11]);
break;
......@@ -100,9 +106,10 @@ public class EventIndexer implements Index {
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")) {
} else if (EventColumn.values()[j].getType().getSimpleName().equals("Integer")) {
sampleData[i][j] = RandomStringUtils.randomNumeric(3);
} else if (EventColumn.values()[j].getType().getSimpleName().equals("Long")) {
sampleData[i][j] = RandomStringUtils.randomNumeric(6);
} else {
sampleData[i][j] = RandomStringUtils.randomAlphanumeric(5);
}
......
......@@ -66,6 +66,12 @@ public class TransactionIndexer implements Index {
case TotalCount:
ctx.setColumnValue(i, row[4]);
break;
case SumDuration:
ctx.setColumnValue(i, row[9]);
break;
case Sum2Duration:
ctx.setColumnValue(i, row[10]);
break;
case Line95:
ctx.setColumnValue(i, row[11]);
break;
......@@ -100,9 +106,10 @@ public class TransactionIndexer implements Index {
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")) {
} else if (TransactionColumn.values()[j].getType().getSimpleName().equals("Integer")) {
sampleData[i][j] = RandomStringUtils.randomNumeric(3);
} else if (TransactionColumn.values()[j].getType().getSimpleName().equals("Long")) {
sampleData[i][j] = RandomStringUtils.randomNumeric(6);
} else {
sampleData[i][j] = RandomStringUtils.randomAlphanumeric(5);
}
......
package com.dianping.bee.jdbc;
package com.dianping.bee.engine.spi;
import java.io.File;
import java.util.ArrayList;
......@@ -8,13 +8,12 @@ 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;
public class JDBCTestConfigurator extends AbstractResourceConfigurator {
public class ServerTestConfigurator extends AbstractResourceConfigurator {
public static void main(String[] args) {
generatePlexusComponentsXmlFile(new JDBCTestConfigurator());
generatePlexusComponentsXmlFile(new ServerTestConfigurator());
}
@Override
......@@ -31,6 +30,6 @@ public class JDBCTestConfigurator extends AbstractResourceConfigurator {
@Override
protected File getConfigurationFile() {
return new File("src/test/resources/" + JDBCTest.class.getName().replace('.', '/') + ".xml");
return new File("src/test/resources/" + ServerTest.class.getName().replace('.', '/') + ".xml");
}
}
<plexus>
<components>
<component>
<role>com.dianping.bee.engine.spi.DatabaseProvider</role>
<role-hint>cat</role-hint>
<implementation>com.dianping.bee.db.cat.CatDatabase</implementation>
</component>
<component>
<role>com.dianping.bee.db.cat.EventIndexer</role>
<implementation>com.dianping.bee.db.cat.EventIndexer</implementation>
</component>
<component>
<role>com.dianping.bee.db.cat.TransactionIndexer</role>
<implementation>com.dianping.bee.db.cat.TransactionIndexer</implementation>
</component>
<component>
<role>com.dianping.bee.engine.spi.DatabaseProvider</role>
<role-hint>dog</role-hint>
<implementation>com.dianping.bee.db.dog.DogDatabase</implementation>
</component>
</components>
</plexus>
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册