Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
梦中观雨
cat
提交
7f128d5e
C
cat
项目概览
梦中观雨
/
cat
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
cat
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
7f128d5e
编写于
9月 01, 2012
作者:
F
Frankie Wu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
make some basic progress
support SQL like: select * from transaction where domain='Cat'
上级
bc11f94a
变更
26
隐藏空白更改
内联
并排
Showing
26 changed file
with
533 addition
and
225 deletion
+533
-225
bee-engine/src/main/java/com/dianping/bee/engine/build/ComponentsConfigurator.java
...com/dianping/bee/engine/build/ComponentsConfigurator.java
+23
-2
bee-engine/src/main/java/com/dianping/bee/engine/spi/Statement.java
.../src/main/java/com/dianping/bee/engine/spi/Statement.java
+1
-12
bee-engine/src/main/java/com/dianping/bee/engine/spi/TableProvider.java
.../main/java/com/dianping/bee/engine/spi/TableProvider.java
+0
-3
bee-engine/src/main/java/com/dianping/bee/engine/spi/expr/AbstractEvaluator.java
...a/com/dianping/bee/engine/spi/expr/AbstractEvaluator.java
+14
-0
bee-engine/src/main/java/com/dianping/bee/engine/spi/expr/Evaluator.java
...main/java/com/dianping/bee/engine/spi/expr/Evaluator.java
+8
-0
bee-engine/src/main/java/com/dianping/bee/engine/spi/expr/internal/ComparisionEqualsEvaluator.java
.../engine/spi/expr/internal/ComparisionEqualsEvaluator.java
+32
-0
bee-engine/src/main/java/com/dianping/bee/engine/spi/expr/internal/ComparisionIsEvaluator.java
.../bee/engine/spi/expr/internal/ComparisionIsEvaluator.java
+42
-0
bee-engine/src/main/java/com/dianping/bee/engine/spi/expr/internal/IdentifierEvaluator.java
...ing/bee/engine/spi/expr/internal/IdentifierEvaluator.java
+17
-0
bee-engine/src/main/java/com/dianping/bee/engine/spi/expr/internal/LiteralNumberEvaluator.java
.../bee/engine/spi/expr/internal/LiteralNumberEvaluator.java
+16
-0
bee-engine/src/main/java/com/dianping/bee/engine/spi/expr/internal/LiteralStringEvaluator.java
.../bee/engine/spi/expr/internal/LiteralStringEvaluator.java
+16
-0
bee-engine/src/main/java/com/dianping/bee/engine/spi/expr/internal/LogicalAndEvaluator.java
...ing/bee/engine/spi/expr/internal/LogicalAndEvaluator.java
+29
-0
bee-engine/src/main/java/com/dianping/bee/engine/spi/expr/internal/LogicalOrEvaluator.java
...ping/bee/engine/spi/expr/internal/LogicalOrEvaluator.java
+29
-0
bee-engine/src/main/java/com/dianping/bee/engine/spi/handler/AbstractCommandHandler.java
...anping/bee/engine/spi/handler/AbstractCommandHandler.java
+45
-36
bee-engine/src/main/java/com/dianping/bee/engine/spi/handler/internal/PrepareHandler.java
...nping/bee/engine/spi/handler/internal/PrepareHandler.java
+1
-1
bee-engine/src/main/java/com/dianping/bee/engine/spi/internal/SingleTableRowFilter.java
...ianping/bee/engine/spi/internal/SingleTableRowFilter.java
+29
-0
bee-engine/src/main/java/com/dianping/bee/engine/spi/internal/SingleTableStatement.java
...ianping/bee/engine/spi/internal/SingleTableStatement.java
+31
-21
bee-engine/src/main/java/com/dianping/bee/engine/spi/internal/SingleTableStatementBuilder.java
.../bee/engine/spi/internal/SingleTableStatementBuilder.java
+17
-28
bee-engine/src/main/java/com/dianping/bee/engine/spi/row/DefaultRowContext.java
...va/com/dianping/bee/engine/spi/row/DefaultRowContext.java
+15
-0
bee-engine/src/main/java/com/dianping/bee/engine/spi/row/RowContext.java
...main/java/com/dianping/bee/engine/spi/row/RowContext.java
+2
-0
bee-engine/src/main/java/com/dianping/bee/server/InformationSchemaDatabase.java
...va/com/dianping/bee/server/InformationSchemaDatabase.java
+13
-17
bee-engine/src/main/resources/META-INF/plexus/components.xml
bee-engine/src/main/resources/META-INF/plexus/components.xml
+48
-5
bee-engine/src/test/java/com/dianping/bee/db/CatDatabase.java
...engine/src/test/java/com/dianping/bee/db/CatDatabase.java
+26
-34
bee-engine/src/test/java/com/dianping/bee/db/DogDatabase.java
...engine/src/test/java/com/dianping/bee/db/DogDatabase.java
+27
-35
cat-data/src/main/java/com/dianping/cat/data/CatTableProvider.java
...src/main/java/com/dianping/cat/data/CatTableProvider.java
+0
-20
cat-data/src/main/java/com/dianping/cat/data/transaction/TransactionColumn.java
.../com/dianping/cat/data/transaction/TransactionColumn.java
+5
-5
cat-data/src/main/java/com/dianping/cat/data/transaction/TransactionIndexer.java
...com/dianping/cat/data/transaction/TransactionIndexer.java
+47
-6
未找到文件。
bee-engine/src/main/java/com/dianping/bee/engine/build/ComponentsConfigurator.java
浏览文件 @
7f128d5e
...
...
@@ -8,6 +8,14 @@ import com.dianping.bee.db.DogDatabase;
import
com.dianping.bee.engine.spi.DatabaseProvider
;
import
com.dianping.bee.engine.spi.StatementManager
;
import
com.dianping.bee.engine.spi.TableProviderManager
;
import
com.dianping.bee.engine.spi.expr.Evaluator
;
import
com.dianping.bee.engine.spi.expr.internal.ComparisionEqualsEvaluator
;
import
com.dianping.bee.engine.spi.expr.internal.ComparisionIsEvaluator
;
import
com.dianping.bee.engine.spi.expr.internal.IdentifierEvaluator
;
import
com.dianping.bee.engine.spi.expr.internal.LiteralNumberEvaluator
;
import
com.dianping.bee.engine.spi.expr.internal.LiteralStringEvaluator
;
import
com.dianping.bee.engine.spi.expr.internal.LogicalAndEvaluator
;
import
com.dianping.bee.engine.spi.expr.internal.LogicalOrEvaluator
;
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
;
...
...
@@ -15,6 +23,7 @@ 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.SingleTableRowFilter
;
import
com.dianping.bee.engine.spi.internal.SingleTableStatement
;
import
com.dianping.bee.engine.spi.internal.SingleTableStatementBuilder
;
import
com.dianping.bee.engine.spi.internal.TableHelper
;
...
...
@@ -41,19 +50,31 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator {
all
.
add
(
C
(
TableProviderManager
.
class
,
DefaultTableProviderManager
.
class
)
//
.
req
(
SessionManager
.
class
));
all
.
add
(
C
(
StatementManager
.
class
,
DefaultStatementManager
.
class
));
all
.
add
(
C
(
SingleTableStatement
.
class
).
is
(
PER_LOOKUP
));
all
.
add
(
C
(
TableHelper
.
class
)
//
.
req
(
TableProviderManager
.
class
));
all
.
add
(
C
(
SingleTableStatement
.
class
).
is
(
PER_LOOKUP
));
all
.
add
(
C
(
SingleTableRowFilter
.
class
).
is
(
PER_LOOKUP
));
all
.
add
(
C
(
SingleTableStatementBuilder
.
class
).
is
(
PER_LOOKUP
)
//
.
req
(
TableHelper
.
class
,
SingleTableStatement
.
class
));
.
req
(
TableHelper
.
class
,
SingleTableStatement
.
class
,
SingleTableRowFilter
.
class
));
defineHandlers
(
all
);
defineEvaluators
(
all
);
return
all
;
}
private
void
defineEvaluators
(
List
<
Component
>
all
)
{
all
.
add
(
C
(
Evaluator
.
class
,
LogicalAndEvaluator
.
ID
,
LogicalAndEvaluator
.
class
));
all
.
add
(
C
(
Evaluator
.
class
,
LogicalOrEvaluator
.
ID
,
LogicalOrEvaluator
.
class
));
all
.
add
(
C
(
Evaluator
.
class
,
ComparisionEqualsEvaluator
.
ID
,
ComparisionEqualsEvaluator
.
class
));
all
.
add
(
C
(
Evaluator
.
class
,
ComparisionIsEvaluator
.
ID
,
ComparisionIsEvaluator
.
class
));
all
.
add
(
C
(
Evaluator
.
class
,
IdentifierEvaluator
.
ID
,
IdentifierEvaluator
.
class
));
all
.
add
(
C
(
Evaluator
.
class
,
LiteralStringEvaluator
.
ID
,
LiteralStringEvaluator
.
class
));
all
.
add
(
C
(
Evaluator
.
class
,
LiteralNumberEvaluator
.
ID
,
LiteralNumberEvaluator
.
class
));
}
private
void
defineHandlers
(
List
<
Component
>
all
)
{
all
.
add
(
C
(
SimpleServerQueryHandler
.
class
).
is
(
PER_LOOKUP
)
//
.
req
(
SelectHandler
.
class
,
ShowHandler
.
class
,
DescHandler
.
class
,
UseHandler
.
class
,
PrepareHandler
.
class
));
...
...
bee-engine/src/main/java/com/dianping/bee/engine/spi/Statement.java
浏览文件 @
7f128d5e
package
com.dianping.bee.engine.spi
;
import
com.dianping.bee.engine.spi.meta.ColumnMeta
;
import
com.dianping.bee.engine.spi.meta.IndexMeta
;
import
com.dianping.bee.engine.spi.meta.RowSet
;
import
com.dianping.bee.engine.spi.row.RowFilter
;
public
interface
Statement
{
public
int
getParameterSize
();
public
ColumnMeta
[]
getSelectColumns
();
public
int
getColumnSize
();
public
RowSet
query
();
public
void
setIndex
(
IndexMeta
index
);
public
void
setParameterSize
(
int
parameterSize
);
public
void
setRowFilter
(
RowFilter
rowFilter
);
public
void
setSelectColumns
(
ColumnMeta
[]
selectColumns
);
}
bee-engine/src/main/java/com/dianping/bee/engine/spi/TableProvider.java
浏览文件 @
7f128d5e
...
...
@@ -2,7 +2,6 @@ package com.dianping.bee.engine.spi;
import
com.dianping.bee.engine.spi.meta.ColumnMeta
;
import
com.dianping.bee.engine.spi.meta.IndexMeta
;
import
com.dianping.bee.engine.spi.meta.RowSet
;
public
interface
TableProvider
{
public
ColumnMeta
[]
getColumns
();
...
...
@@ -12,6 +11,4 @@ public interface TableProvider {
public
IndexMeta
[]
getIndexes
();
public
String
getName
();
public
RowSet
queryByIndex
(
IndexMeta
m_index
,
ColumnMeta
[]
m_selectColumns
)
throws
Exception
;
}
bee-engine/src/main/java/com/dianping/bee/engine/spi/expr/AbstractEvaluator.java
0 → 100644
浏览文件 @
7f128d5e
package
com.dianping.bee.engine.spi.expr
;
import
com.alibaba.cobar.parser.ast.expression.Expression
;
import
com.dianping.bee.engine.spi.row.RowContext
;
import
com.site.lookup.ContainerHolder
;
public
abstract
class
AbstractEvaluator
<
S
extends
Expression
,
T
>
extends
ContainerHolder
implements
Evaluator
<
S
,
T
>
{
@SuppressWarnings
(
"unchecked"
)
protected
<
V
>
V
eval
(
RowContext
ctx
,
Expression
child
)
{
Evaluator
<
Expression
,
V
>
evaluator
=
lookup
(
Evaluator
.
class
,
child
.
getClass
().
getName
());
return
(
V
)
evaluator
.
evaluate
(
ctx
,
child
);
}
}
bee-engine/src/main/java/com/dianping/bee/engine/spi/expr/Evaluator.java
0 → 100644
浏览文件 @
7f128d5e
package
com.dianping.bee.engine.spi.expr
;
import
com.alibaba.cobar.parser.ast.expression.Expression
;
import
com.dianping.bee.engine.spi.row.RowContext
;
public
interface
Evaluator
<
S
extends
Expression
,
T
>
{
public
T
evaluate
(
RowContext
ctx
,
S
expr
);
}
bee-engine/src/main/java/com/dianping/bee/engine/spi/expr/internal/ComparisionEqualsEvaluator.java
0 → 100644
浏览文件 @
7f128d5e
package
com.dianping.bee.engine.spi.expr.internal
;
import
com.alibaba.cobar.parser.ast.expression.Expression
;
import
com.alibaba.cobar.parser.ast.expression.comparison.ComparisionEqualsExpression
;
import
com.alibaba.cobar.parser.util.ExprEvalUtils
;
import
com.alibaba.cobar.parser.util.Pair
;
import
com.dianping.bee.engine.spi.expr.AbstractEvaluator
;
import
com.dianping.bee.engine.spi.row.RowContext
;
public
class
ComparisionEqualsEvaluator
extends
AbstractEvaluator
<
ComparisionEqualsExpression
,
Boolean
>
{
public
static
final
String
ID
=
ComparisionEqualsExpression
.
class
.
getName
();
@Override
public
Boolean
evaluate
(
RowContext
ctx
,
ComparisionEqualsExpression
expr
)
{
Expression
left
=
expr
.
getLeftOprand
();
Expression
right
=
expr
.
getRightOprand
();
Object
leftValue
=
eval
(
ctx
,
left
);
Object
rightValue
=
eval
(
ctx
,
right
);
if
(
leftValue
==
null
||
rightValue
==
null
)
{
return
null
;
}
if
(
left
instanceof
Number
||
right
instanceof
Number
)
{
Pair
<
Number
,
Number
>
pair
=
ExprEvalUtils
.
convertNum2SameLevel
(
left
,
right
);
leftValue
=
pair
.
getKey
();
rightValue
=
pair
.
getValue
();
}
return
leftValue
.
equals
(
rightValue
);
}
}
bee-engine/src/main/java/com/dianping/bee/engine/spi/expr/internal/ComparisionIsEvaluator.java
0 → 100644
浏览文件 @
7f128d5e
package
com.dianping.bee.engine.spi.expr.internal
;
import
com.alibaba.cobar.parser.ast.expression.Expression
;
import
com.alibaba.cobar.parser.ast.expression.comparison.ComparisionIsExpression
;
import
com.dianping.bee.engine.spi.expr.AbstractEvaluator
;
import
com.dianping.bee.engine.spi.row.RowContext
;
public
class
ComparisionIsEvaluator
extends
AbstractEvaluator
<
ComparisionIsExpression
,
Boolean
>
{
public
static
final
String
ID
=
ComparisionIsExpression
.
class
.
getName
();
@Override
public
Boolean
evaluate
(
RowContext
ctx
,
ComparisionIsExpression
expr
)
{
Expression
operand
=
expr
.
getOperand
();
Object
value
=
eval
(
ctx
,
operand
);
int
mode
=
expr
.
getMode
();
if
(
value
==
null
)
{
if
(
mode
==
ComparisionIsExpression
.
IS_NULL
)
{
return
Boolean
.
TRUE
;
}
else
{
return
Boolean
.
FALSE
;
}
}
switch
(
mode
)
{
case
ComparisionIsExpression
.
IS_NOT_NULL
:
return
Boolean
.
TRUE
;
case
ComparisionIsExpression
.
IS_TRUE
:
return
"true"
.
equalsIgnoreCase
(
value
.
toString
());
case
ComparisionIsExpression
.
IS_NOT_TRUE
:
return
!
"true"
.
equalsIgnoreCase
(
value
.
toString
());
case
ComparisionIsExpression
.
IS_FALSE
:
return
"false"
.
equalsIgnoreCase
(
value
.
toString
());
case
ComparisionIsExpression
.
IS_NOT_FALSE
:
return
!
"false"
.
equalsIgnoreCase
(
value
.
toString
());
case
ComparisionIsExpression
.
IS_UNKNOWN
:
case
ComparisionIsExpression
.
IS_NOT_UNKNOWN
:
}
return
Boolean
.
FALSE
;
}
}
bee-engine/src/main/java/com/dianping/bee/engine/spi/expr/internal/IdentifierEvaluator.java
0 → 100644
浏览文件 @
7f128d5e
package
com.dianping.bee.engine.spi.expr.internal
;
import
com.alibaba.cobar.parser.ast.expression.primary.Identifier
;
import
com.dianping.bee.engine.spi.expr.AbstractEvaluator
;
import
com.dianping.bee.engine.spi.row.RowContext
;
public
class
IdentifierEvaluator
extends
AbstractEvaluator
<
Identifier
,
Object
>
{
public
static
final
String
ID
=
Identifier
.
class
.
getName
();
@Override
public
Object
evaluate
(
RowContext
ctx
,
Identifier
expr
)
{
String
id
=
expr
.
getIdText
();
Object
value
=
ctx
.
getValue
(
id
);
return
value
;
}
}
bee-engine/src/main/java/com/dianping/bee/engine/spi/expr/internal/LiteralNumberEvaluator.java
0 → 100644
浏览文件 @
7f128d5e
package
com.dianping.bee.engine.spi.expr.internal
;
import
com.alibaba.cobar.parser.ast.expression.primary.literal.LiteralNumber
;
import
com.dianping.bee.engine.spi.expr.AbstractEvaluator
;
import
com.dianping.bee.engine.spi.row.RowContext
;
public
class
LiteralNumberEvaluator
extends
AbstractEvaluator
<
LiteralNumber
,
Number
>
{
public
static
final
String
ID
=
LiteralNumber
.
class
.
getName
();
@Override
public
Number
evaluate
(
RowContext
ctx
,
LiteralNumber
expr
)
{
Number
value
=
expr
.
getNumber
();
return
value
;
}
}
bee-engine/src/main/java/com/dianping/bee/engine/spi/expr/internal/LiteralStringEvaluator.java
0 → 100644
浏览文件 @
7f128d5e
package
com.dianping.bee.engine.spi.expr.internal
;
import
com.alibaba.cobar.parser.ast.expression.primary.literal.LiteralString
;
import
com.dianping.bee.engine.spi.expr.AbstractEvaluator
;
import
com.dianping.bee.engine.spi.row.RowContext
;
public
class
LiteralStringEvaluator
extends
AbstractEvaluator
<
LiteralString
,
String
>
{
public
static
final
String
ID
=
LiteralString
.
class
.
getName
();
@Override
public
String
evaluate
(
RowContext
ctx
,
LiteralString
expr
)
{
String
value
=
expr
.
getString
();
return
value
;
}
}
bee-engine/src/main/java/com/dianping/bee/engine/spi/expr/internal/LogicalAndEvaluator.java
0 → 100644
浏览文件 @
7f128d5e
package
com.dianping.bee.engine.spi.expr.internal
;
import
com.alibaba.cobar.parser.ast.expression.Expression
;
import
com.alibaba.cobar.parser.ast.expression.logical.LogicalAndExpression
;
import
com.alibaba.cobar.parser.util.ExprEvalUtils
;
import
com.dianping.bee.engine.spi.expr.AbstractEvaluator
;
import
com.dianping.bee.engine.spi.row.RowContext
;
public
class
LogicalAndEvaluator
extends
AbstractEvaluator
<
LogicalAndExpression
,
Boolean
>
{
public
static
final
String
ID
=
LogicalAndExpression
.
class
.
getName
();
@Override
public
Boolean
evaluate
(
RowContext
ctx
,
LogicalAndExpression
expr
)
{
int
len
=
expr
.
getArity
();
for
(
int
i
=
0
;
i
<
len
;
i
++)
{
Expression
operand
=
expr
.
getOperand
(
i
);
Object
value
=
eval
(
ctx
,
operand
);
if
(
value
==
null
)
{
return
null
;
}
else
if
(!
ExprEvalUtils
.
obj2bool
(
value
))
{
return
Boolean
.
FALSE
;
}
}
return
Boolean
.
TRUE
;
}
}
bee-engine/src/main/java/com/dianping/bee/engine/spi/expr/internal/LogicalOrEvaluator.java
0 → 100644
浏览文件 @
7f128d5e
package
com.dianping.bee.engine.spi.expr.internal
;
import
com.alibaba.cobar.parser.ast.expression.Expression
;
import
com.alibaba.cobar.parser.ast.expression.logical.LogicalOrExpression
;
import
com.alibaba.cobar.parser.util.ExprEvalUtils
;
import
com.dianping.bee.engine.spi.expr.AbstractEvaluator
;
import
com.dianping.bee.engine.spi.row.RowContext
;
public
class
LogicalOrEvaluator
extends
AbstractEvaluator
<
LogicalOrExpression
,
Boolean
>
{
public
static
final
String
ID
=
LogicalOrExpression
.
class
.
getName
();
@Override
public
Boolean
evaluate
(
RowContext
ctx
,
LogicalOrExpression
expr
)
{
int
len
=
expr
.
getArity
();
for
(
int
i
=
0
;
i
<
len
;
i
++)
{
Expression
operand
=
expr
.
getOperand
(
i
);
Object
value
=
eval
(
ctx
,
operand
);
if
(
value
==
null
)
{
return
null
;
}
else
if
(
ExprEvalUtils
.
obj2bool
(
value
))
{
return
Boolean
.
TRUE
;
}
}
return
Boolean
.
FALSE
;
}
}
bee-engine/src/main/java/com/dianping/bee/engine/spi/handler/AbstractCommandHandler.java
浏览文件 @
7f128d5e
...
...
@@ -116,45 +116,54 @@ public abstract class AbstractCommandHandler extends ContainerHolder implements
}
public
void
writeRow
(
Row
row
)
{
RowDataPacket
packet
=
new
RowDataPacket
(
row
.
getColumnSize
());
for
(
int
cellIndex
=
0
;
cellIndex
<
row
.
getColumnSize
();
cellIndex
++)
{
int
len
=
row
.
getColumnSize
();
RowDataPacket
packet
=
new
RowDataPacket
(
len
);
for
(
int
cellIndex
=
0
;
cellIndex
<
len
;
cellIndex
++)
{
Cell
cell
=
row
.
getCell
(
cellIndex
);
ColumnMeta
column
=
cell
.
getMeta
();
String
value
=
cell
.
getValue
()
==
null
?
null
:
String
.
valueOf
(
cell
.
getValue
());
switch
(
TypeUtils
.
convertJavaTypeToFieldType
(
column
.
getType
()))
{
case
Fields
.
FIELD_TYPE_STRING
:
packet
.
add
(
StringUtil
.
encode
(
value
,
m_charset
));
break
;
case
Fields
.
FIELD_TYPE_INT24
:
packet
.
add
(
value
==
null
?
null
:
IntegerUtil
.
toBytes
(
Integer
.
parseInt
(
value
)));
break
;
case
Fields
.
FIELD_TYPE_DECIMAL
:
case
Fields
.
FIELD_TYPE_TINY
:
case
Fields
.
FIELD_TYPE_SHORT
:
case
Fields
.
FIELD_TYPE_LONG
:
case
Fields
.
FIELD_TYPE_FLOAT
:
case
Fields
.
FIELD_TYPE_DOUBLE
:
case
Fields
.
FIELD_TYPE_NULL
:
case
Fields
.
FIELD_TYPE_TIMESTAMP
:
case
Fields
.
FIELD_TYPE_LONGLONG
:
case
Fields
.
FIELD_TYPE_DATE
:
case
Fields
.
FIELD_TYPE_TIME
:
case
Fields
.
FIELD_TYPE_DATETIME
:
case
Fields
.
FIELD_TYPE_YEAR
:
case
Fields
.
FIELD_TYPE_NEWDATE
:
case
Fields
.
FIELD_TYPE_VARCHAR
:
case
Fields
.
FIELD_TYPE_BIT
:
case
Fields
.
FIELD_TYPE_NEW_DECIMAL
:
case
Fields
.
FIELD_TYPE_ENUM
:
case
Fields
.
FIELD_TYPE_SET
:
case
Fields
.
FIELD_TYPE_TINY_BLOB
:
case
Fields
.
FIELD_TYPE_MEDIUM_BLOB
:
case
Fields
.
FIELD_TYPE_LONG_BLOB
:
case
Fields
.
FIELD_TYPE_BLOB
:
case
Fields
.
FIELD_TYPE_VAR_STRING
:
case
Fields
.
FIELD_TYPE_GEOMETRY
:
default
:
packet
.
add
(
StringUtil
.
encode
(
value
,
m_charset
));
try
{
switch
(
TypeUtils
.
convertJavaTypeToFieldType
(
column
.
getType
()))
{
case
Fields
.
FIELD_TYPE_STRING
:
packet
.
add
(
StringUtil
.
encode
(
value
,
m_charset
));
break
;
case
Fields
.
FIELD_TYPE_INT24
:
packet
.
add
(
value
==
null
?
null
:
IntegerUtil
.
toBytes
(
Integer
.
parseInt
(
value
)));
break
;
case
Fields
.
FIELD_TYPE_DECIMAL
:
case
Fields
.
FIELD_TYPE_TINY
:
case
Fields
.
FIELD_TYPE_SHORT
:
case
Fields
.
FIELD_TYPE_LONG
:
case
Fields
.
FIELD_TYPE_FLOAT
:
case
Fields
.
FIELD_TYPE_DOUBLE
:
case
Fields
.
FIELD_TYPE_NULL
:
case
Fields
.
FIELD_TYPE_TIMESTAMP
:
case
Fields
.
FIELD_TYPE_LONGLONG
:
case
Fields
.
FIELD_TYPE_DATE
:
case
Fields
.
FIELD_TYPE_TIME
:
case
Fields
.
FIELD_TYPE_DATETIME
:
case
Fields
.
FIELD_TYPE_YEAR
:
case
Fields
.
FIELD_TYPE_NEWDATE
:
case
Fields
.
FIELD_TYPE_VARCHAR
:
case
Fields
.
FIELD_TYPE_BIT
:
case
Fields
.
FIELD_TYPE_NEW_DECIMAL
:
case
Fields
.
FIELD_TYPE_ENUM
:
case
Fields
.
FIELD_TYPE_SET
:
case
Fields
.
FIELD_TYPE_TINY_BLOB
:
case
Fields
.
FIELD_TYPE_MEDIUM_BLOB
:
case
Fields
.
FIELD_TYPE_LONG_BLOB
:
case
Fields
.
FIELD_TYPE_BLOB
:
case
Fields
.
FIELD_TYPE_VAR_STRING
:
case
Fields
.
FIELD_TYPE_GEOMETRY
:
default
:
packet
.
add
(
StringUtil
.
encode
(
value
,
m_charset
));
break
;
}
}
catch
(
Exception
e
)
{
throw
new
RuntimeException
(
String
.
format
(
"Error when writing row for column(%s) with value(%s)!"
,
column
.
getName
(),
value
),
e
);
}
}
...
...
bee-engine/src/main/java/com/dianping/bee/engine/spi/handler/internal/PrepareHandler.java
浏览文件 @
7f128d5e
...
...
@@ -75,7 +75,7 @@ public class PrepareHandler extends AbstractCommandHandler {
long
stmtId
=
m_manager
.
stmtPrepare
(
stmt
);
CommandContext
ctx
=
new
CommandContext
(
c
);
int
columnSize
=
stmt
.
get
SelectColumns
().
length
;
int
columnSize
=
stmt
.
get
ColumnSize
()
;
int
parameterSize
=
stmt
.
getParameterSize
();
PreparePacket
packet
=
new
PreparePacket
(
stmtId
,
columnSize
,
parameterSize
);
...
...
bee-engine/src/main/java/com/dianping/bee/engine/spi/internal/SingleTableRowFilter.java
0 → 100644
浏览文件 @
7f128d5e
package
com.dianping.bee.engine.spi.internal
;
import
com.alibaba.cobar.parser.ast.expression.Expression
;
import
com.dianping.bee.engine.spi.expr.Evaluator
;
import
com.dianping.bee.engine.spi.row.RowContext
;
import
com.dianping.bee.engine.spi.row.RowFilter
;
import
com.site.lookup.ContainerHolder
;
public
class
SingleTableRowFilter
extends
ContainerHolder
implements
RowFilter
{
private
Expression
m_expr
;
@SuppressWarnings
(
"unchecked"
)
@Override
public
boolean
filter
(
RowContext
ctx
)
{
Evaluator
<
Expression
,
Boolean
>
evaluator
=
lookup
(
Evaluator
.
class
,
m_expr
.
getClass
().
getName
());
Object
value
=
evaluator
.
evaluate
(
ctx
,
m_expr
);
if
(
value
==
null
)
{
return
false
;
}
else
{
return
(
Boolean
)
value
;
}
}
public
SingleTableRowFilter
setExpression
(
Expression
expr
)
{
m_expr
=
expr
;
return
this
;
}
}
bee-engine/src/main/java/com/dianping/bee/engine/spi/internal/SingleTableStatement.java
浏览文件 @
7f128d5e
package
com.dianping.bee.engine.spi.internal
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.TreeMap
;
import
com.dianping.bee.engine.spi.Statement
;
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
;
...
...
@@ -13,30 +17,31 @@ import com.dianping.bee.engine.spi.row.RowFilter;
import
com.site.lookup.ContainerHolder
;
public
class
SingleTableStatement
extends
ContainerHolder
implements
Statement
{
private
TableProvider
m_table
;
private
IndexMeta
m_index
;
private
RowFilter
m_rowFilter
;
private
IndexMeta
m_index
;
private
ColumnMeta
[]
m_selectColumns
;
private
Map
<
ColumnMeta
,
Integer
>
m_allColumns
=
new
TreeMap
<
ColumnMeta
,
Integer
>();
private
int
m_parameterSize
;
@Override
public
int
get
Parameter
Size
()
{
return
m_
parameterSize
;
public
int
get
Column
Size
()
{
return
m_
selectColumns
.
length
;
}
@Override
public
ColumnMeta
[]
getSelectColumns
()
{
return
m_
selectColumns
;
public
int
getParameterSize
()
{
return
m_
parameterSize
;
}
@Override
public
RowSet
query
()
{
Index
<?>
index
=
lookup
(
m_index
.
getIndexClass
());
RowContext
ctx
=
new
DefaultRowContext
(
m_selectColumns
);
List
<
ColumnMeta
>
columns
=
new
ArrayList
<
ColumnMeta
>(
m_allColumns
.
keySet
());
RowContext
ctx
=
new
DefaultRowContext
(
columns
.
toArray
(
new
ColumnMeta
[
0
]));
DefaultRowListener
listener
=
new
DefaultRowListener
(
m_selectColumns
);
listener
.
setRowFilter
(
m_rowFilter
);
...
...
@@ -51,32 +56,37 @@ public class SingleTableStatement extends ContainerHolder implements Statement {
}
}
@Override
public
void
setIndex
(
IndexMeta
index
)
{
m_index
=
index
;
}
@Override
public
void
setParameterSize
(
int
parameterSize
)
{
m_parameterSize
=
parameterSize
;
}
@Override
public
void
setRowFilter
(
RowFilter
rowFilter
)
{
m_rowFilter
=
rowFilter
;
}
@Override
public
void
setSelectColumns
(
ColumnMeta
[]
selectColumns
)
{
if
(
selectColumns
!=
null
&&
selectColumns
.
length
>
0
)
{
m_selectColumns
=
selectColumns
;
}
else
{
m_selectColumns
=
m_table
.
getColumns
();
public
void
setSelectColumns
(
List
<
ColumnMeta
>
selectColumns
)
{
int
len
=
selectColumns
.
size
();
ColumnMeta
[]
columns
=
new
ColumnMeta
[
len
];
for
(
int
i
=
0
;
i
<
len
;
i
++)
{
ColumnMeta
column
=
selectColumns
.
get
(
i
);
columns
[
i
]
=
column
;
m_allColumns
.
put
(
column
,
i
);
}
}
public
void
setTable
(
TableProvider
table
)
{
m_table
=
table
;
m_selectColumns
=
columns
;
}
public
void
setWhereColumns
(
List
<
ColumnMeta
>
whereColumns
)
{
for
(
ColumnMeta
column
:
whereColumns
)
{
if
(!
m_allColumns
.
containsKey
(
column
))
{
m_allColumns
.
put
(
column
,
-
1
);
}
}
}
}
bee-engine/src/main/java/com/dianping/bee/engine/spi/internal/SingleTableStatementBuilder.java
浏览文件 @
7f128d5e
...
...
@@ -17,10 +17,13 @@ import com.site.lookup.annotation.Inject;
public
class
SingleTableStatementBuilder
extends
EmptySQLASTVisitor
{
@Inject
private
TableHelper
m_helper
;
private
SingleTableStatement
m_stmt
;
@Inject
private
SingleTableStatement
m_stmt
;
private
SingleTableRowFilter
m_rowFilter
;
@Inject
private
TableHelper
m_helper
;
private
String
m_alias
;
...
...
@@ -36,21 +39,6 @@ public class SingleTableStatementBuilder extends EmptySQLASTVisitor {
private
List
<
ColumnMeta
>
m_whereColumns
=
new
ArrayList
<
ColumnMeta
>();
private
boolean
checkSelectAll
(
List
<
ColumnMeta
>
columns
,
String
columnName
)
{
if
(
"*"
.
equals
(
columnName
))
{
TableProvider
table
=
m_helper
.
findTable
(
m_tableName
);
ColumnMeta
[]
columnMetas
=
table
.
getColumns
();
for
(
ColumnMeta
meta
:
columnMetas
)
{
columns
.
add
(
meta
);
}
return
true
;
}
else
{
return
false
;
}
}
private
ColumnMeta
findOrCreateColumnFrom
(
List
<
ColumnMeta
>
columns
,
String
columnName
)
{
for
(
ColumnMeta
column
:
columns
)
{
if
(
column
.
getName
().
equals
(
columnName
))
{
...
...
@@ -81,12 +69,6 @@ public class SingleTableStatementBuilder extends EmptySQLASTVisitor {
throw
new
RuntimeException
(
"Not a single table query!"
);
}
if
(
m_databaseName
==
null
)
{
m_stmt
.
setTable
(
m_helper
.
findTable
(
m_tableName
));
}
else
{
m_stmt
.
setTable
(
m_helper
.
findTable
(
m_databaseName
,
m_tableName
));
}
// for select clause
m_clause
=
Clause
.
SELECT
;
...
...
@@ -102,8 +84,7 @@ public class SingleTableStatementBuilder extends EmptySQLASTVisitor {
expr
.
getKey
().
accept
(
this
);
}
ColumnMeta
[]
columnMetas
=
new
ColumnMeta
[
m_selectColumns
.
size
()];
m_stmt
.
setSelectColumns
(
m_selectColumns
.
toArray
(
columnMetas
));
m_stmt
.
setSelectColumns
(
m_selectColumns
);
// for where clause
m_clause
=
Clause
.
WHERE
;
...
...
@@ -115,8 +96,8 @@ public class SingleTableStatementBuilder extends EmptySQLASTVisitor {
where
.
accept
(
this
);
// to evaluate where clause
// m_rowFilter.setExpression(where
);
// m_stmt.setRowFilter(m_rowFilter
);
m_stmt
.
setWhereColumns
(
m_whereColumns
);
m_stmt
.
setRowFilter
(
m_rowFilter
.
setExpression
(
where
)
);
if
(
m_databaseName
==
null
)
{
m_stmt
.
setIndex
(
m_helper
.
findIndex
(
m_tableName
,
m_whereColumns
));
...
...
@@ -134,9 +115,17 @@ public class SingleTableStatementBuilder extends EmptySQLASTVisitor {
case
SELECT:
String
selectColumnName
=
node
.
getIdTextUpUnescape
();
if
(!
checkSelectAll
(
m_selectColumns
,
selectColumnName
))
{
if
(
"*"
.
equals
(
selectColumnName
))
{
// expand it
TableProvider
table
=
m_helper
.
findTable
(
m_databaseName
,
m_tableName
);
ColumnMeta
[]
columnMetas
=
table
.
getColumns
();
for
(
ColumnMeta
meta
:
columnMetas
)
{
m_selectColumns
.
add
(
meta
);
}
}
else
{
findOrCreateColumnFrom
(
m_selectColumns
,
selectColumnName
);
}
break
;
case
WHERE:
String
whereColumnName
=
node
.
getIdTextUpUnescape
();
...
...
bee-engine/src/main/java/com/dianping/bee/engine/spi/row/DefaultRowContext.java
浏览文件 @
7f128d5e
...
...
@@ -48,4 +48,19 @@ public class DefaultRowContext implements RowContext {
public
void
setRowListener
(
RowListener
listener
)
{
m_listener
=
listener
;
}
@Override
public
Object
getValue
(
String
columnName
)
{
int
len
=
m_columns
.
length
;
for
(
int
i
=
0
;
i
<
len
;
i
++)
{
ColumnMeta
column
=
m_columns
[
i
];
if
(
column
.
getName
().
equalsIgnoreCase
(
columnName
))
{
return
m_values
[
i
];
}
}
return
null
;
}
}
bee-engine/src/main/java/com/dianping/bee/engine/spi/row/RowContext.java
浏览文件 @
7f128d5e
...
...
@@ -16,4 +16,6 @@ public interface RowContext {
public
void
setRowListener
(
RowListener
listener
);
public
Object
getValue
(
String
columnName
);
}
bee-engine/src/main/java/com/dianping/bee/server/InformationSchemaDatabase.java
浏览文件 @
7f128d5e
...
...
@@ -16,12 +16,8 @@ package com.dianping.bee.server;
import
com.dianping.bee.engine.spi.DatabaseProvider
;
import
com.dianping.bee.engine.spi.TableProvider
;
import
com.dianping.bee.engine.spi.meta.Cell
;
import
com.dianping.bee.engine.spi.meta.ColumnMeta
;
import
com.dianping.bee.engine.spi.meta.IndexMeta
;
import
com.dianping.bee.engine.spi.meta.RowSet
;
import
com.dianping.bee.engine.spi.meta.internal.DefaultCell
;
import
com.dianping.bee.engine.spi.meta.internal.DefaultRowSet
;
/**
* @author <a href="mailto:yiming.liu@dianping.com">Yiming Liu</a>
...
...
@@ -68,19 +64,19 @@ public class InformationSchemaDatabase implements DatabaseProvider {
return
m_name
;
}
@Override
public
RowSet
queryByIndex
(
IndexMeta
index
,
ColumnMeta
[]
selectColumns
)
{
ColumnMeta
[]
columns
=
selectColumns
;
DefaultRowSet
rowSet
=
new
DefaultRowSet
(
columns
);
Cell
[]
cells
=
new
Cell
[
columns
.
length
];
for
(
int
colIndex
=
0
;
colIndex
<
cells
.
length
;
colIndex
++)
{
ColumnMeta
columnMeta
=
columns
[
colIndex
];
cells
[
colIndex
]
=
new
DefaultCell
(
columnMeta
,
null
);
}
return
rowSet
;
}
//
@Override
//
public RowSet queryByIndex(IndexMeta index, ColumnMeta[] selectColumns) {
//
ColumnMeta[] columns = selectColumns;
//
DefaultRowSet rowSet = new DefaultRowSet(columns);
//
//
Cell[] cells = new Cell[columns.length];
//
for (int colIndex = 0; colIndex < cells.length; colIndex++) {
//
ColumnMeta columnMeta = columns[colIndex];
//
cells[colIndex] = new DefaultCell(columnMeta, null);
//
}
//
//
return rowSet;
//
}
@Override
public
IndexMeta
getDefaultIndex
()
{
...
...
bee-engine/src/main/resources/META-INF/plexus/components.xml
浏览文件 @
7f128d5e
...
...
@@ -36,11 +36,6 @@
<role>
com.dianping.bee.engine.spi.StatementManager
</role>
<implementation>
com.dianping.bee.engine.spi.internal.DefaultStatementManager
</implementation>
</component>
<component>
<role>
com.dianping.bee.engine.spi.internal.SingleTableStatement
</role>
<implementation>
com.dianping.bee.engine.spi.internal.SingleTableStatement
</implementation>
<instantiation-strategy>
per-lookup
</instantiation-strategy>
</component>
<component>
<role>
com.dianping.bee.engine.spi.internal.TableHelper
</role>
<implementation>
com.dianping.bee.engine.spi.internal.TableHelper
</implementation>
...
...
@@ -50,6 +45,16 @@
</requirement>
</requirements>
</component>
<component>
<role>
com.dianping.bee.engine.spi.internal.SingleTableStatement
</role>
<implementation>
com.dianping.bee.engine.spi.internal.SingleTableStatement
</implementation>
<instantiation-strategy>
per-lookup
</instantiation-strategy>
</component>
<component>
<role>
com.dianping.bee.engine.spi.internal.SingleTableRowFilter
</role>
<implementation>
com.dianping.bee.engine.spi.internal.SingleTableRowFilter
</implementation>
<instantiation-strategy>
per-lookup
</instantiation-strategy>
</component>
<component>
<role>
com.dianping.bee.engine.spi.internal.SingleTableStatementBuilder
</role>
<implementation>
com.dianping.bee.engine.spi.internal.SingleTableStatementBuilder
</implementation>
...
...
@@ -61,6 +66,9 @@
<requirement>
<role>
com.dianping.bee.engine.spi.internal.SingleTableStatement
</role>
</requirement>
<requirement>
<role>
com.dianping.bee.engine.spi.internal.SingleTableRowFilter
</role>
</requirement>
</requirements>
</component>
<component>
...
...
@@ -120,5 +128,40 @@
</requirement>
</requirements>
</component>
<component>
<role>
com.dianping.bee.engine.spi.expr.Evaluator
</role>
<role-hint>
com.alibaba.cobar.parser.ast.expression.logical.LogicalAndExpression
</role-hint>
<implementation>
com.dianping.bee.engine.spi.expr.internal.LogicalAndEvaluator
</implementation>
</component>
<component>
<role>
com.dianping.bee.engine.spi.expr.Evaluator
</role>
<role-hint>
com.alibaba.cobar.parser.ast.expression.logical.LogicalOrExpression
</role-hint>
<implementation>
com.dianping.bee.engine.spi.expr.internal.LogicalOrEvaluator
</implementation>
</component>
<component>
<role>
com.dianping.bee.engine.spi.expr.Evaluator
</role>
<role-hint>
com.alibaba.cobar.parser.ast.expression.comparison.ComparisionEqualsExpression
</role-hint>
<implementation>
com.dianping.bee.engine.spi.expr.internal.ComparisionEqualsEvaluator
</implementation>
</component>
<component>
<role>
com.dianping.bee.engine.spi.expr.Evaluator
</role>
<role-hint>
com.alibaba.cobar.parser.ast.expression.comparison.ComparisionIsExpression
</role-hint>
<implementation>
com.dianping.bee.engine.spi.expr.internal.ComparisionIsEvaluator
</implementation>
</component>
<component>
<role>
com.dianping.bee.engine.spi.expr.Evaluator
</role>
<role-hint>
com.alibaba.cobar.parser.ast.expression.primary.Identifier
</role-hint>
<implementation>
com.dianping.bee.engine.spi.expr.internal.IdentifierEvaluator
</implementation>
</component>
<component>
<role>
com.dianping.bee.engine.spi.expr.Evaluator
</role>
<role-hint>
com.alibaba.cobar.parser.ast.expression.primary.literal.LiteralString
</role-hint>
<implementation>
com.dianping.bee.engine.spi.expr.internal.LiteralStringEvaluator
</implementation>
</component>
<component>
<role>
com.dianping.bee.engine.spi.expr.Evaluator
</role>
<role-hint>
com.alibaba.cobar.parser.ast.expression.primary.literal.LiteralNumber
</role-hint>
<implementation>
com.dianping.bee.engine.spi.expr.internal.LiteralNumberEvaluator
</implementation>
</component>
</components>
</plexus>
bee-engine/src/test/java/com/dianping/bee/db/CatDatabase.java
浏览文件 @
7f128d5e
package
com.dianping.bee.db
;
import
org.apache.commons.lang3.RandomStringUtils
;
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.Cell
;
import
com.dianping.bee.engine.spi.meta.ColumnMeta
;
import
com.dianping.bee.engine.spi.meta.IndexMeta
;
import
com.dianping.bee.engine.spi.meta.Row
;
import
com.dianping.bee.engine.spi.meta.RowSet
;
import
com.dianping.bee.engine.spi.meta.internal.DefaultCell
;
import
com.dianping.bee.engine.spi.meta.internal.DefaultRow
;
import
com.dianping.bee.engine.spi.meta.internal.DefaultRowSet
;
public
class
CatDatabase
implements
DatabaseProvider
{
...
...
@@ -76,32 +68,32 @@ public class CatDatabase 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 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
()
{
...
...
bee-engine/src/test/java/com/dianping/bee/db/DogDatabase.java
浏览文件 @
7f128d5e
package
com.dianping.bee.db
;
import
org.apache.commons.lang3.RandomStringUtils
;
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.Cell
;
import
com.dianping.bee.engine.spi.meta.ColumnMeta
;
import
com.dianping.bee.engine.spi.meta.IndexMeta
;
import
com.dianping.bee.engine.spi.meta.Row
;
import
com.dianping.bee.engine.spi.meta.RowSet
;
import
com.dianping.bee.engine.spi.meta.internal.DefaultCell
;
import
com.dianping.bee.engine.spi.meta.internal.DefaultRow
;
import
com.dianping.bee.engine.spi.meta.internal.DefaultRowSet
;
public
class
DogDatabase
implements
DatabaseProvider
{
...
...
@@ -56,33 +48,33 @@ 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 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
()
{
...
...
cat-data/src/main/java/com/dianping/cat/data/CatTableProvider.java
浏览文件 @
7f128d5e
package
com.dianping.cat.data
;
import
org.codehaus.plexus.PlexusContainer
;
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.meta.RowSet
;
import
com.dianping.bee.engine.spi.row.DefaultRowListener
;
import
com.dianping.bee.engine.spi.row.RowContext
;
import
com.dianping.cat.data.event.EventColumn
;
import
com.dianping.cat.data.event.EventIndex
;
import
com.dianping.cat.data.transaction.TransactionColumn
;
import
com.dianping.cat.data.transaction.TransactionIndex
;
import
com.site.lookup.ContainerLoader
;
public
enum
CatTableProvider
implements
TableProvider
{
Transaction
(
"transaction"
,
TransactionColumn
.
values
(),
TransactionIndex
.
values
()),
...
...
@@ -66,17 +59,4 @@ public enum CatTableProvider implements TableProvider {
public
String
getName
()
{
return
m_name
;
}
@Override
public
RowSet
queryByIndex
(
IndexMeta
meta
,
ColumnMeta
[]
selectColumns
)
throws
Exception
{
PlexusContainer
container
=
ContainerLoader
.
getDefaultContainer
();
Index
<?>
index
=
container
.
lookup
(
meta
.
getIndexClass
());
RowContext
ctx
=
container
.
lookup
(
RowContext
.
class
);
DefaultRowListener
listener
=
new
DefaultRowListener
(
selectColumns
);
ctx
.
setRowListener
(
listener
);
index
.
queryById
(
ctx
,
null
);
return
listener
.
getRowSet
();
}
}
\ No newline at end of file
cat-data/src/main/java/com/dianping/cat/data/transaction/TransactionColumn.java
浏览文件 @
7f128d5e
...
...
@@ -17,15 +17,15 @@ public enum TransactionColumn implements ColumnMeta {
SampleMessage
(
String
.
class
),
// MobileApi-0a0101a6-1345600834200-1
MinDuration
(
Integer
.
class
),
// 1
MinDuration
(
Double
.
class
),
// 1
MaxDuration
(
Integer
.
class
),
// 1234
MaxDuration
(
Double
.
class
),
// 1234
SumDuration
(
Long
.
class
),
// 123456
SumDuration
(
Double
.
class
),
// 123456
Sum2Duration
(
Long
.
class
),
// 2364233
Sum2Duration
(
Double
.
class
),
// 2364233
Line95
(
Integer
.
class
);
// 123
Line95
(
Double
.
class
);
// 123
private
String
m_name
;
...
...
cat-data/src/main/java/com/dianping/cat/data/transaction/TransactionIndexer.java
浏览文件 @
7f128d5e
...
...
@@ -19,25 +19,23 @@ import com.dianping.cat.consumer.transaction.model.transform.DefaultSaxParser;
public
class
TransactionIndexer
implements
Index
<
Pair
<
String
,
String
>>
{
@Override
public
void
queryById
(
RowContext
ctx
,
Pair
<
String
,
String
>
pair
)
throws
Exception
{
if
(
pair
==
null
)
{
pair
=
new
Pair
<
String
,
String
>(
""
,
"Cat"
);
}
pair
=
new
Pair
<
String
,
String
>(
""
,
"Cat"
);
TransactionReport
report
=
getHourlyReport
(
pair
.
getValue
(),
pair
.
getKey
());
Machine
machine
=
report
.
getMachines
().
get
(
"All"
);
for
(
TransactionType
type
:
machine
.
getTypes
().
values
())
{
if
(
type
.
getNames
().
isEmpty
())
{
applyRow
(
ctx
,
type
,
null
);
applyRow
(
ctx
,
report
,
type
,
null
);
}
else
{
for
(
TransactionName
name
:
type
.
getNames
().
values
())
{
applyRow
(
ctx
,
type
,
name
);
applyRow
(
ctx
,
report
,
type
,
name
);
}
}
}
}
private
void
applyRow
(
RowContext
ctx
,
TransactionType
type
,
TransactionName
name
)
{
private
void
applyRow
(
RowContext
ctx
,
Transaction
Report
report
,
Transaction
Type
type
,
TransactionName
name
)
{
int
cols
=
ctx
.
getColumnSize
();
for
(
int
i
=
0
;
i
<
cols
;
i
++)
{
...
...
@@ -49,6 +47,49 @@ public class TransactionIndexer implements Index<Pair<String, String>> {
break
;
case
Name:
ctx
.
setColumnValue
(
i
,
name
==
null
?
null
:
name
.
getId
());
break
;
case
Domain:
ctx
.
setColumnValue
(
i
,
report
.
getDomain
());
break
;
case
StartTime:
ctx
.
setColumnValue
(
i
,
report
.
getStartTime
());
break
;
case
MinDuration:
ctx
.
setColumnValue
(
i
,
name
!=
null
?
name
.
getMin
()
:
type
.
getMin
());
break
;
case
MaxDuration:
ctx
.
setColumnValue
(
i
,
name
!=
null
?
name
.
getMax
()
:
type
.
getMax
());
break
;
case
SampleMessage:
String
url
;
if
(
name
!=
null
)
{
if
(
name
.
getFailMessageUrl
()
!=
null
)
{
url
=
name
.
getFailMessageUrl
();
}
else
{
url
=
name
.
getSuccessMessageUrl
();
}
}
else
{
if
(
type
.
getFailMessageUrl
()
!=
null
)
{
url
=
type
.
getFailMessageUrl
();
}
else
{
url
=
type
.
getSuccessMessageUrl
();
}
}
ctx
.
setColumnValue
(
i
,
url
);
break
;
case
TotalCount:
ctx
.
setColumnValue
(
i
,
name
!=
null
?
name
.
getTotalCount
()
:
type
.
getTotalCount
());
break
;
case
Failures:
ctx
.
setColumnValue
(
i
,
name
!=
null
?
name
.
getFailCount
()
:
type
.
getFailCount
());
break
;
case
SumDuration:
ctx
.
setColumnValue
(
i
,
name
!=
null
?
name
.
getSum
()
:
type
.
getSum
());
break
;
case
Line95:
ctx
.
setColumnValue
(
i
,
name
!=
null
?
name
.
getLine95Value
()
:
type
.
getLine95Value
());
break
;
default
:
// TODO more here
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录