Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
梦中观雨
cat
提交
eb840558
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,发现更多精彩内容 >>
提交
eb840558
编写于
8月 31, 2012
作者:
F
Frankie Wu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
temporary submit to pull change
上级
d46036ef
变更
46
隐藏空白更改
内联
并排
Showing
46 changed file
with
610 addition
and
471 deletion
+610
-471
bee-engine/src/main/java/com/dianping/bee/engine/build/ComponentsConfigurator.java
...com/dianping/bee/engine/build/ComponentsConfigurator.java
+3
-13
bee-engine/src/main/java/com/dianping/bee/engine/spi/MultiTableStatement.java
...java/com/dianping/bee/engine/spi/MultiTableStatement.java
+0
-26
bee-engine/src/main/java/com/dianping/bee/engine/spi/RowFilter.java
.../src/main/java/com/dianping/bee/engine/spi/RowFilter.java
+0
-10
bee-engine/src/main/java/com/dianping/bee/engine/spi/SingleTableStatement.java
...ava/com/dianping/bee/engine/spi/SingleTableStatement.java
+0
-24
bee-engine/src/main/java/com/dianping/bee/engine/spi/Statement.java
.../src/main/java/com/dianping/bee/engine/spi/Statement.java
+0
-4
bee-engine/src/main/java/com/dianping/bee/engine/spi/TableExecutor.java
.../main/java/com/dianping/bee/engine/spi/TableExecutor.java
+0
-8
bee-engine/src/main/java/com/dianping/bee/engine/spi/TableProvider.java
.../main/java/com/dianping/bee/engine/spi/TableProvider.java
+1
-5
bee-engine/src/main/java/com/dianping/bee/engine/spi/index/Index.java
...rc/main/java/com/dianping/bee/engine/spi/index/Index.java
+11
-0
bee-engine/src/main/java/com/dianping/bee/engine/spi/index/Pair.java
...src/main/java/com/dianping/bee/engine/spi/index/Pair.java
+20
-0
bee-engine/src/main/java/com/dianping/bee/engine/spi/index/RangeType.java
...ain/java/com/dianping/bee/engine/spi/index/RangeType.java
+28
-0
bee-engine/src/main/java/com/dianping/bee/engine/spi/internal/DefaultMultiTableStatement.java
...g/bee/engine/spi/internal/DefaultMultiTableStatement.java
+0
-65
bee-engine/src/main/java/com/dianping/bee/engine/spi/internal/DefaultRowFilter.java
...om/dianping/bee/engine/spi/internal/DefaultRowFilter.java
+0
-30
bee-engine/src/main/java/com/dianping/bee/engine/spi/internal/DefaultStatementManager.java
...ping/bee/engine/spi/internal/DefaultStatementManager.java
+1
-5
bee-engine/src/main/java/com/dianping/bee/engine/spi/internal/MultiTableStatementVisitor.java
...g/bee/engine/spi/internal/MultiTableStatementVisitor.java
+0
-36
bee-engine/src/main/java/com/dianping/bee/engine/spi/internal/SingleTableStatement.java
...ianping/bee/engine/spi/internal/SingleTableStatement.java
+21
-31
bee-engine/src/main/java/com/dianping/bee/engine/spi/internal/SingleTableStatementVisitor.java
.../bee/engine/spi/internal/SingleTableStatementVisitor.java
+3
-7
bee-engine/src/main/java/com/dianping/bee/engine/spi/meta/AbstractIndex.java
.../java/com/dianping/bee/engine/spi/meta/AbstractIndex.java
+19
-0
bee-engine/src/main/java/com/dianping/bee/engine/spi/meta/AbstractIndexMeta.java
...a/com/dianping/bee/engine/spi/meta/AbstractIndexMeta.java
+57
-0
bee-engine/src/main/java/com/dianping/bee/engine/spi/meta/Index.java
...src/main/java/com/dianping/bee/engine/spi/meta/Index.java
+4
-2
bee-engine/src/main/java/com/dianping/bee/engine/spi/meta/IndexMeta.java
...main/java/com/dianping/bee/engine/spi/meta/IndexMeta.java
+4
-0
bee-engine/src/main/java/com/dianping/bee/engine/spi/meta/RowSet.java
...rc/main/java/com/dianping/bee/engine/spi/meta/RowSet.java
+0
-8
bee-engine/src/main/java/com/dianping/bee/engine/spi/meta/internal/DefaultRowSet.java
.../dianping/bee/engine/spi/meta/internal/DefaultRowSet.java
+0
-15
bee-engine/src/main/java/com/dianping/bee/engine/spi/row/DefaultRowContext.java
...va/com/dianping/bee/engine/spi/row/DefaultRowContext.java
+51
-0
bee-engine/src/main/java/com/dianping/bee/engine/spi/row/DefaultRowListener.java
...a/com/dianping/bee/engine/spi/row/DefaultRowListener.java
+40
-0
bee-engine/src/main/java/com/dianping/bee/engine/spi/row/RowContext.java
...main/java/com/dianping/bee/engine/spi/row/RowContext.java
+19
-0
bee-engine/src/main/java/com/dianping/bee/engine/spi/row/RowFilter.java
.../main/java/com/dianping/bee/engine/spi/row/RowFilter.java
+5
-0
bee-engine/src/main/java/com/dianping/bee/engine/spi/row/RowListener.java
...ain/java/com/dianping/bee/engine/spi/row/RowListener.java
+5
-0
bee-engine/src/main/resources/META-INF/plexus/components.xml
bee-engine/src/main/resources/META-INF/plexus/components.xml
+21
-75
bee-engine/src/test/java/com/dianping/bee/db/CatDatabase.java
...engine/src/test/java/com/dianping/bee/db/CatDatabase.java
+11
-0
bee-engine/src/test/java/com/dianping/bee/db/DogDatabase.java
...engine/src/test/java/com/dianping/bee/db/DogDatabase.java
+6
-0
cat-data/pom.xml
cat-data/pom.xml
+4
-0
cat-data/src/main/java/com/dianping/cat/data/CatTableProvider.java
...src/main/java/com/dianping/cat/data/CatTableProvider.java
+16
-2
cat-data/src/main/java/com/dianping/cat/data/build/ComponentsConfigurator.java
...a/com/dianping/cat/data/build/ComponentsConfigurator.java
+3
-0
cat-data/src/main/java/com/dianping/cat/data/event/EventIndex.java
...src/main/java/com/dianping/cat/data/event/EventIndex.java
+7
-40
cat-data/src/main/java/com/dianping/cat/data/transaction/TransactionExecutor.java
...om/dianping/cat/data/transaction/TransactionExecutor.java
+0
-21
cat-data/src/main/java/com/dianping/cat/data/transaction/TransactionIndex.java
...a/com/dianping/cat/data/transaction/TransactionIndex.java
+10
-37
cat-data/src/main/java/com/dianping/cat/data/transaction/TransactionIndexer.java
...com/dianping/cat/data/transaction/TransactionIndexer.java
+83
-0
cat-data/src/main/resources/META-INF/plexus/components.xml
cat-data/src/main/resources/META-INF/plexus/components.xml
+4
-0
cat-data/src/test/java/com/dianping/cat/data/BeeTestServer.java
...ta/src/test/java/com/dianping/cat/data/BeeTestServer.java
+26
-0
cat-data/src/test/java/com/dianping/cat/data/TransactionTest.java
.../src/test/java/com/dianping/cat/data/TransactionTest.java
+67
-0
cat-home/src/main/java/com/dianping/cat/report/page/transaction/Handler.java
...ava/com/dianping/cat/report/page/transaction/Handler.java
+13
-6
cat-home/src/main/java/com/dianping/cat/report/page/transaction/Payload.java
...ava/com/dianping/cat/report/page/transaction/Payload.java
+11
-0
cat-home/src/main/java/com/dianping/cat/report/page/transaction/XmlViewer.java
...a/com/dianping/cat/report/page/transaction/XmlViewer.java
+27
-0
cat-home/src/main/resources/META-INF/plexus/components.xml
cat-home/src/main/resources/META-INF/plexus/components.xml
+7
-0
pom.xml
pom.xml
+1
-1
src/main/conf/Cat.sql
src/main/conf/Cat.sql
+1
-0
未找到文件。
bee-engine/src/main/java/com/dianping/bee/engine/build/ComponentsConfigurator.java
浏览文件 @
eb840558
...
...
@@ -6,9 +6,6 @@ import java.util.List;
import
com.dianping.bee.db.CatDatabase
;
import
com.dianping.bee.db.DogDatabase
;
import
com.dianping.bee.engine.spi.DatabaseProvider
;
import
com.dianping.bee.engine.spi.MultiTableStatement
;
import
com.dianping.bee.engine.spi.RowFilter
;
import
com.dianping.bee.engine.spi.SingleTableStatement
;
import
com.dianping.bee.engine.spi.StatementManager
;
import
com.dianping.bee.engine.spi.TableProviderManager
;
import
com.dianping.bee.engine.spi.handler.internal.DescHandler
;
...
...
@@ -16,12 +13,9 @@ import com.dianping.bee.engine.spi.handler.internal.PrepareHandler;
import
com.dianping.bee.engine.spi.handler.internal.SelectHandler
;
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.DefaultMultiTableStatement
;
import
com.dianping.bee.engine.spi.internal.DefaultRowFilter
;
import
com.dianping.bee.engine.spi.internal.DefaultSingleTableStatement
;
import
com.dianping.bee.engine.spi.internal.DefaultStatementManager
;
import
com.dianping.bee.engine.spi.internal.DefaultTableProviderManager
;
import
com.dianping.bee.engine.spi.internal.
MultiTableStatementVisitor
;
import
com.dianping.bee.engine.spi.internal.
SingleTableStatement
;
import
com.dianping.bee.engine.spi.internal.SingleTableStatementVisitor
;
import
com.dianping.bee.engine.spi.internal.TableHelper
;
import
com.dianping.bee.engine.spi.session.DefaultSessionManager
;
...
...
@@ -47,17 +41,13 @@ 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
,
DefaultSingleTableStatement
.
class
).
is
(
PER_LOOKUP
));
all
.
add
(
C
(
MultiTableStatement
.
class
,
DefaultMultiTableStatement
.
class
).
is
(
PER_LOOKUP
));
all
.
add
(
C
(
RowFilter
.
class
,
DefaultRowFilter
.
class
).
is
(
PER_LOOKUP
));
all
.
add
(
C
(
SingleTableStatement
.
class
).
is
(
PER_LOOKUP
));
all
.
add
(
C
(
TableHelper
.
class
)
//
.
req
(
TableProviderManager
.
class
));
all
.
add
(
C
(
SingleTableStatementVisitor
.
class
).
is
(
PER_LOOKUP
)
//
.
req
(
TableHelper
.
class
,
SingleTableStatement
.
class
,
RowFilter
.
class
));
all
.
add
(
C
(
MultiTableStatementVisitor
.
class
).
is
(
PER_LOOKUP
)
//
.
req
(
TableHelper
.
class
,
MultiTableStatement
.
class
,
RowFilter
.
class
));
.
req
(
TableHelper
.
class
,
SingleTableStatement
.
class
));
defineHandlers
(
all
);
...
...
bee-engine/src/main/java/com/dianping/bee/engine/spi/MultiTableStatement.java
已删除
100644 → 0
浏览文件 @
d46036ef
/**
* Project: bee-engine
*
* File Created at 2012-8-23
*
* 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
MultiTableStatement
extends
Statement
{
public
List
<
TableProvider
>
getTables
();
public
void
setTables
(
List
<
TableProvider
>
tables
);
}
bee-engine/src/main/java/com/dianping/bee/engine/spi/RowFilter.java
已删除
100644 → 0
浏览文件 @
d46036ef
package
com.dianping.bee.engine.spi
;
import
com.alibaba.cobar.parser.ast.expression.Expression
;
import
com.dianping.bee.engine.spi.meta.Row
;
public
interface
RowFilter
{
public
boolean
filter
(
Row
row
);
public
void
setExpression
(
Expression
where
);
}
bee-engine/src/main/java/com/dianping/bee/engine/spi/SingleTableStatement.java
已删除
100644 → 0
浏览文件 @
d46036ef
/**
* Project: bee-engine
*
* File Created at 2012-8-23
*
* 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
;
/**
* @author <a href="mailto:yiming.liu@dianping.com">Yiming Liu</a>
*/
public
interface
SingleTableStatement
extends
Statement
{
public
TableProvider
getTable
();
public
void
setTable
(
TableProvider
tableName
);
}
bee-engine/src/main/java/com/dianping/bee/engine/spi/Statement.java
浏览文件 @
eb840558
...
...
@@ -7,14 +7,10 @@ import com.dianping.bee.engine.spi.meta.RowSet;
public
interface
Statement
{
public
IndexMeta
getIndex
();
public
RowFilter
getRowFilter
();
public
ColumnMeta
[]
getSelectColumns
();
public
void
setIndex
(
IndexMeta
index
);
public
void
setRowFilter
(
RowFilter
rowFilter
);
public
void
setSelectColumns
(
ColumnMeta
[]
selectColumns
);
public
RowSet
query
();
...
...
bee-engine/src/main/java/com/dianping/bee/engine/spi/TableExecutor.java
已删除
100644 → 0
浏览文件 @
d46036ef
package
com.dianping.bee.engine.spi
;
import
com.dianping.bee.engine.spi.meta.IndexMeta
;
import
com.dianping.bee.engine.spi.meta.RowSet
;
public
interface
TableExecutor
{
public
void
execute
(
RowSet
rowset
,
IndexMeta
index
,
Object
[]
values
);
}
bee-engine/src/main/java/com/dianping/bee/engine/spi/TableProvider.java
浏览文件 @
eb840558
...
...
@@ -11,9 +11,5 @@ public interface TableProvider {
public
String
getName
();
/**
* @param m_index
* @param m_selectColumns
*/
public
RowSet
queryByIndex
(
IndexMeta
m_index
,
ColumnMeta
[]
m_selectColumns
);
public
RowSet
queryByIndex
(
IndexMeta
m_index
,
ColumnMeta
[]
m_selectColumns
)
throws
Exception
;
}
bee-engine/src/main/java/com/dianping/bee/engine/spi/index/Index.java
0 → 100644
浏览文件 @
eb840558
package
com.dianping.bee.engine.spi.index
;
import
com.dianping.bee.engine.spi.row.RowContext
;
public
interface
Index
<
T
>
{
public
void
queryById
(
RowContext
ctx
,
T
id
)
throws
Exception
;
public
void
queryByIds
(
RowContext
ctx
,
T
[]
ids
)
throws
Exception
;
public
void
queryByRange
(
RowContext
ctx
,
T
start
,
T
end
,
RangeType
rangeType
)
throws
Exception
;
}
bee-engine/src/main/java/com/dianping/bee/engine/spi/index/Pair.java
0 → 100644
浏览文件 @
eb840558
package
com.dianping.bee.engine.spi.index
;
public
class
Pair
<
S
,
T
>
{
private
S
m_key
;
private
T
m_value
;
public
Pair
(
S
key
,
T
value
)
{
m_key
=
key
;
m_value
=
value
;
}
public
S
getKey
()
{
return
m_key
;
}
public
T
getValue
()
{
return
m_value
;
}
}
bee-engine/src/main/java/com/dianping/bee/engine/spi/index/RangeType.java
0 → 100644
浏览文件 @
eb840558
package
com.dianping.bee.engine.spi.index
;
public
enum
RangeType
{
II
(
true
,
true
),
IE
(
true
,
false
),
EI
(
false
,
true
),
EE
(
false
,
false
);
private
boolean
m_startInclusive
;
private
boolean
m_endInclusive
;
private
RangeType
(
boolean
startInclusive
,
boolean
endInclusive
)
{
m_startInclusive
=
startInclusive
;
m_endInclusive
=
endInclusive
;
}
protected
boolean
isStartInclusive
()
{
return
m_startInclusive
;
}
protected
boolean
isEndInclusive
()
{
return
m_endInclusive
;
}
}
\ No newline at end of file
bee-engine/src/main/java/com/dianping/bee/engine/spi/internal/DefaultMultiTableStatement.java
已删除
100644 → 0
浏览文件 @
d46036ef
package
com.dianping.bee.engine.spi.internal
;
import
java.util.List
;
import
com.dianping.bee.engine.spi.MultiTableStatement
;
import
com.dianping.bee.engine.spi.RowFilter
;
import
com.dianping.bee.engine.spi.TableProvider
;
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
class
DefaultMultiTableStatement
implements
MultiTableStatement
{
private
List
<
TableProvider
>
m_tables
;
private
RowFilter
m_rowFilter
;
private
IndexMeta
m_index
;
private
ColumnMeta
[]
m_selectColumns
;
@Override
public
IndexMeta
getIndex
()
{
return
m_index
;
}
@Override
public
RowFilter
getRowFilter
()
{
return
m_rowFilter
;
}
@Override
public
ColumnMeta
[]
getSelectColumns
()
{
return
m_selectColumns
;
}
@Override
public
List
<
TableProvider
>
getTables
()
{
return
m_tables
;
}
@Override
public
void
setIndex
(
IndexMeta
index
)
{
m_index
=
index
;
}
@Override
public
void
setRowFilter
(
RowFilter
rowFilter
)
{
m_rowFilter
=
rowFilter
;
}
@Override
public
void
setSelectColumns
(
ColumnMeta
[]
selectColumns
)
{
m_selectColumns
=
selectColumns
;
}
@Override
public
void
setTables
(
List
<
TableProvider
>
tables
)
{
m_tables
=
tables
;
}
@Override
public
RowSet
query
()
{
return
null
;
}
}
bee-engine/src/main/java/com/dianping/bee/engine/spi/internal/DefaultRowFilter.java
已删除
100644 → 0
浏览文件 @
d46036ef
package
com.dianping.bee.engine.spi.internal
;
import
com.alibaba.cobar.parser.ast.expression.Expression
;
import
com.alibaba.cobar.parser.visitor.MySQLOutputASTVisitor
;
import
com.dianping.bee.engine.spi.RowFilter
;
import
com.dianping.bee.engine.spi.meta.Row
;
public
class
DefaultRowFilter
implements
RowFilter
{
private
Expression
m_expr
;
/**
* Return true if the row passed the filter
*/
@Override
public
boolean
filter
(
Row
row
)
{
return
true
;
}
@Override
public
void
setExpression
(
Expression
expr
)
{
m_expr
=
expr
;
}
public
String
toString
()
{
MySQLOutputASTVisitor
visitor
=
new
MySQLOutputASTVisitor
(
new
StringBuilder
());
m_expr
.
accept
(
visitor
);
return
visitor
.
getSql
();
}
}
bee-engine/src/main/java/com/dianping/bee/engine/spi/internal/DefaultStatementManager.java
浏览文件 @
eb840558
...
...
@@ -39,11 +39,7 @@ public class DefaultStatementManager extends ContainerHolder implements Statemen
DefaultStatementVisitor
defaultVisitor
=
new
DefaultStatementVisitor
();
statement
.
accept
(
defaultVisitor
);
if
(
defaultVisitor
.
getTableAlias
().
size
()
>
1
)
{
MultiTableStatementVisitor
visitor
=
lookup
(
MultiTableStatementVisitor
.
class
);
statement
.
accept
(
visitor
);
return
visitor
.
getStatement
();
}
else
if
(
defaultVisitor
.
getTableAlias
().
size
()
==
1
)
{
if
(
defaultVisitor
.
getTableAlias
().
size
()
==
1
)
{
SingleTableStatementVisitor
visitor
=
lookup
(
SingleTableStatementVisitor
.
class
);
statement
.
accept
(
visitor
);
return
visitor
.
getStatement
();
...
...
bee-engine/src/main/java/com/dianping/bee/engine/spi/internal/MultiTableStatementVisitor.java
已删除
100644 → 0
浏览文件 @
d46036ef
/**
* Project: bee-engine
*
* File Created at 2012-8-23
*
* 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.internal
;
import
com.alibaba.cobar.parser.visitor.EmptySQLASTVisitor
;
import
com.dianping.bee.engine.spi.MultiTableStatement
;
import
com.site.lookup.annotation.Inject
;
/**
* @author <a href="mailto:yiming.liu@dianping.com">Yiming Liu</a>
*/
public
class
MultiTableStatementVisitor
extends
EmptySQLASTVisitor
{
@Inject
private
MultiTableStatement
m_stmt
;
/**
* @return
*/
public
MultiTableStatement
getStatement
()
{
return
m_stmt
;
}
}
bee-engine/src/main/java/com/dianping/bee/engine/spi/internal/
Default
SingleTableStatement.java
→
bee-engine/src/main/java/com/dianping/bee/engine/spi/internal/SingleTableStatement.java
浏览文件 @
eb840558
package
com.dianping.bee.engine.spi.internal
;
import
com.dianping.bee.engine.spi.RowFilter
;
import
com.dianping.bee.engine.spi.SingleTableStatement
;
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
;
import
com.dianping.bee.engine.spi.meta.RowSet
;
import
com.dianping.bee.engine.spi.row.DefaultRowContext
;
import
com.dianping.bee.engine.spi.row.DefaultRowListener
;
import
com.dianping.bee.engine.spi.row.RowContext
;
import
com.dianping.bee.engine.spi.row.RowFilter
;
import
com.site.lookup.ContainerHolder
;
public
class
DefaultSingleTableStatement
implements
SingleTable
Statement
{
public
class
SingleTableStatement
extends
ContainerHolder
implements
Statement
{
private
TableProvider
m_table
;
private
RowFilter
m_rowFilter
;
...
...
@@ -21,27 +26,16 @@ public class DefaultSingleTableStatement implements SingleTableStatement {
return
m_index
;
}
@Override
public
RowFilter
getRowFilter
()
{
return
m_rowFilter
;
}
@Override
public
ColumnMeta
[]
getSelectColumns
()
{
return
m_selectColumns
;
}
@Override
public
TableProvider
getTable
()
{
return
m_table
;
}
@Override
public
void
setIndex
(
IndexMeta
index
)
{
m_index
=
index
;
}
@Override
public
void
setRowFilter
(
RowFilter
rowFilter
)
{
m_rowFilter
=
rowFilter
;
}
...
...
@@ -55,29 +49,25 @@ public class DefaultSingleTableStatement implements SingleTableStatement {
}
}
@Override
public
void
setTable
(
TableProvider
table
)
{
m_table
=
table
;
}
@Override
public
RowSet
query
()
{
// Query By Index
RowSet
providerRowSet
=
m_table
.
queryByIndex
(
m_index
,
m_selectColumns
);
// Filter
if
(
providerRowSet
!=
null
)
{
providerRowSet
.
filter
(
m_rowFilter
);
}
// Build select columns
RowSet
returnRowSet
=
buildReturnRowSet
(
providerRowSet
);
return
returnRowSet
;
}
Index
<?>
index
=
lookup
(
m_index
.
getIndexClass
());
RowContext
ctx
=
new
DefaultRowContext
(
m_selectColumns
);
DefaultRowListener
listener
=
new
DefaultRowListener
(
m_selectColumns
);
/**
* @param providerRowSet
* @return
*/
private
RowSet
buildReturnRowSet
(
RowSet
c
)
{
return
c
;
listener
.
setRowFilter
(
m_rowFilter
);
ctx
.
setRowListener
(
listener
);
try
{
index
.
queryById
(
ctx
,
null
);
return
listener
.
getRowSet
();
}
catch
(
Exception
e
)
{
throw
new
RuntimeException
(
e
);
}
}
}
bee-engine/src/main/java/com/dianping/bee/engine/spi/internal/SingleTableStatementVisitor.java
浏览文件 @
eb840558
...
...
@@ -10,8 +10,6 @@ import com.alibaba.cobar.parser.ast.fragment.tableref.TableReference;
import
com.alibaba.cobar.parser.ast.stmt.dml.DMLSelectStatement
;
import
com.alibaba.cobar.parser.util.Pair
;
import
com.alibaba.cobar.parser.visitor.EmptySQLASTVisitor
;
import
com.dianping.bee.engine.spi.RowFilter
;
import
com.dianping.bee.engine.spi.SingleTableStatement
;
import
com.dianping.bee.engine.spi.TableProvider
;
import
com.dianping.bee.engine.spi.meta.ColumnMeta
;
import
com.site.lookup.annotation.Inject
;
...
...
@@ -37,9 +35,6 @@ public class SingleTableStatementVisitor extends EmptySQLASTVisitor {
@Inject
private
SingleTableStatement
m_stmt
;
@Inject
private
RowFilter
m_rowFilter
;
private
String
m_alias
;
private
String
m_tableName
;
...
...
@@ -132,8 +127,9 @@ public class SingleTableStatementVisitor extends EmptySQLASTVisitor {
where
.
accept
(
this
);
// to evaluate where clause
m_rowFilter
.
setExpression
(
where
);
m_stmt
.
setRowFilter
(
m_rowFilter
);
// m_rowFilter.setExpression(where);
// m_stmt.setRowFilter(m_rowFilter);
if
(
m_databaseName
==
null
)
{
m_stmt
.
setIndex
(
m_helper
.
findIndex
(
m_tableName
,
m_whereColumns
));
}
else
{
...
...
bee-engine/src/main/java/com/dianping/bee/engine/spi/meta/AbstractIndex.java
0 → 100644
浏览文件 @
eb840558
package
com.dianping.bee.engine.spi.meta
;
public
abstract
class
AbstractIndex
implements
Index
{
@Override
public
IndexMeta
getMeta
()
{
return
null
;
}
@Override
public
void
setValue
(
int
index
,
Object
value
)
{
}
@Override
public
void
addValue
(
int
index
,
Object
value
,
PredicateType
type
)
{
}
}
bee-engine/src/main/java/com/dianping/bee/engine/spi/meta/AbstractIndexMeta.java
0 → 100644
浏览文件 @
eb840558
package
com.dianping.bee.engine.spi.meta
;
import
java.util.ArrayList
;
import
java.util.List
;
import
com.dianping.bee.engine.spi.index.Index
;
public
abstract
class
AbstractIndexMeta
<
T
extends
ColumnMeta
>
implements
IndexMeta
{
private
List
<
T
>
m_columns
;
private
boolean
[]
m_orders
;
@SuppressWarnings
(
"unchecked"
)
protected
AbstractIndexMeta
(
Object
...
args
)
{
int
length
=
args
.
length
;
if
(
length
%
2
!=
0
)
{
throw
new
IllegalArgumentException
(
String
.
format
(
"Parameters should be paired for %s!"
,
getClass
()));
}
m_columns
=
new
ArrayList
<
T
>(
length
/
2
);
m_orders
=
new
boolean
[
length
/
2
];
for
(
int
i
=
0
;
i
<
length
/
2
;
i
++)
{
m_columns
.
add
((
T
)
args
[
2
*
i
]);
m_orders
[
i
]
=
(
Boolean
)
args
[
2
*
i
+
1
];
}
}
@Override
public
T
getColumn
(
int
index
)
{
if
(
index
>=
0
&&
index
<
m_columns
.
size
())
{
return
m_columns
.
get
(
index
);
}
else
{
throw
new
IndexOutOfBoundsException
(
"size: "
+
m_columns
.
size
()
+
", index: "
+
index
);
}
}
@Override
public
int
getLength
()
{
return
m_columns
.
size
();
}
@Override
public
boolean
isAscend
(
int
index
)
{
if
(
index
>=
0
&&
index
<
m_orders
.
length
)
{
return
m_orders
[
index
];
}
else
{
throw
new
IndexOutOfBoundsException
(
"size: "
+
m_orders
.
length
+
", index: "
+
index
);
}
}
@Override
public
Class
<?
extends
Index
<?>>
getIndexClass
()
{
throw
new
UnsupportedOperationException
(
"Not implemented yet!"
);
}
}
\ No newline at end of file
bee-engine/src/main/java/com/dianping/bee/engine/spi/meta/Index.java
浏览文件 @
eb840558
package
com.dianping.bee.engine.spi.meta
;
import
com.dianping.bee.engine.spi.
RowFilter
;
import
com.dianping.bee.engine.spi.
row.RowContext
;
public
interface
Index
{
public
IndexMeta
getMeta
();
...
...
@@ -9,7 +9,9 @@ public interface Index {
public
void
addValue
(
int
index
,
Object
value
,
PredicateType
type
);
public
void
scan
(
RowSet
rowset
,
RowFilter
filter
);
public
void
findByKey
(
RowContext
ctx
);
public
void
findByRange
(
RowContext
ctx
);
public
static
enum
PredicateType
{
LT
(
"<"
),
...
...
bee-engine/src/main/java/com/dianping/bee/engine/spi/meta/IndexMeta.java
浏览文件 @
eb840558
package
com.dianping.bee.engine.spi.meta
;
import
com.dianping.bee.engine.spi.index.Index
;
public
interface
IndexMeta
{
public
int
getLength
();
public
ColumnMeta
getColumn
(
int
index
);
public
boolean
isAscend
(
int
index
);
public
Class
<?
extends
Index
<?>>
getIndexClass
();
}
bee-engine/src/main/java/com/dianping/bee/engine/spi/meta/RowSet.java
浏览文件 @
eb840558
package
com.dianping.bee.engine.spi.meta
;
import
com.dianping.bee.engine.spi.RowFilter
;
public
interface
RowSet
{
/**
* @param rowFilter
*/
public
void
filter
(
RowFilter
rowFilter
);
public
ColumnMeta
getColumn
(
int
colIndex
);
public
int
getColumnSize
();
...
...
bee-engine/src/main/java/com/dianping/bee/engine/spi/meta/internal/DefaultRowSet.java
浏览文件 @
eb840558
...
...
@@ -15,10 +15,8 @@
package
com.dianping.bee.engine.spi.meta.internal
;
import
java.util.ArrayList
;
import
java.util.Iterator
;
import
java.util.List
;
import
com.dianping.bee.engine.spi.RowFilter
;
import
com.dianping.bee.engine.spi.meta.ColumnMeta
;
import
com.dianping.bee.engine.spi.meta.Row
;
import
com.dianping.bee.engine.spi.meta.RowSet
;
...
...
@@ -41,19 +39,6 @@ public class DefaultRowSet implements RowSet {
this
.
m_rows
.
add
(
row
);
}
@Override
public
void
filter
(
RowFilter
rowFilter
)
{
if
(
rowFilter
==
null
)
return
;
Iterator
<
Row
>
it
=
m_rows
.
iterator
();
while
(
it
.
hasNext
())
{
Row
row
=
it
.
next
();
if
(!
rowFilter
.
filter
(
row
))
{
it
.
remove
();
}
}
}
@Override
public
ColumnMeta
getColumn
(
int
colIndex
)
{
if
(
colIndex
>=
0
&&
colIndex
<
m_columnMetas
.
length
)
{
...
...
bee-engine/src/main/java/com/dianping/bee/engine/spi/row/DefaultRowContext.java
0 → 100644
浏览文件 @
eb840558
package
com.dianping.bee.engine.spi.row
;
import
java.util.Arrays
;
import
com.dianping.bee.engine.spi.meta.ColumnMeta
;
public
class
DefaultRowContext
implements
RowContext
{
private
ColumnMeta
[]
m_columns
;
private
Object
[]
m_values
;
private
RowListener
m_listener
;
public
DefaultRowContext
(
ColumnMeta
[]
columns
)
{
m_columns
=
columns
;
m_values
=
new
Object
[
columns
.
length
];
}
@Override
public
void
apply
()
{
m_listener
.
onRow
(
this
);
Arrays
.
fill
(
m_values
,
null
);
}
@SuppressWarnings
(
"unchecked"
)
@Override
public
<
T
extends
ColumnMeta
>
T
getColumn
(
int
colIndex
)
{
return
(
T
)
m_columns
[
colIndex
];
}
@Override
public
int
getColumnSize
()
{
return
m_columns
.
length
;
}
@SuppressWarnings
(
"unchecked"
)
@Override
public
<
T
>
T
getValue
(
int
colIndex
)
{
return
(
T
)
m_values
[
colIndex
];
}
@Override
public
void
setColumnValue
(
int
colIndex
,
Object
value
)
{
m_values
[
colIndex
]
=
value
;
}
@Override
public
void
setRowListener
(
RowListener
listener
)
{
m_listener
=
listener
;
}
}
bee-engine/src/main/java/com/dianping/bee/engine/spi/row/DefaultRowListener.java
0 → 100644
浏览文件 @
eb840558
package
com.dianping.bee.engine.spi.row
;
import
com.dianping.bee.engine.spi.meta.Cell
;
import
com.dianping.bee.engine.spi.meta.ColumnMeta
;
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
DefaultRowListener
implements
RowListener
{
private
RowFilter
m_filter
;
private
DefaultRowSet
m_rowset
;
public
DefaultRowListener
(
ColumnMeta
[]
selectColumns
)
{
m_rowset
=
new
DefaultRowSet
(
selectColumns
);
}
@Override
public
void
onRow
(
RowContext
ctx
)
{
if
(
m_filter
==
null
||
m_filter
.
filter
(
ctx
))
{
int
cols
=
m_rowset
.
getColumnSize
();
Cell
[]
cells
=
new
Cell
[
cols
];
for
(
int
i
=
0
;
i
<
cols
;
i
++)
{
cells
[
i
]
=
new
DefaultCell
(
ctx
.
getColumn
(
i
),
ctx
.
getValue
(
i
));
}
m_rowset
.
addRow
(
new
DefaultRow
(
cells
));
}
}
public
void
setRowFilter
(
RowFilter
filter
)
{
m_filter
=
filter
;
}
public
RowSet
getRowSet
()
{
return
m_rowset
;
}
}
bee-engine/src/main/java/com/dianping/bee/engine/spi/row/RowContext.java
0 → 100644
浏览文件 @
eb840558
package
com.dianping.bee.engine.spi.row
;
import
com.dianping.bee.engine.spi.meta.ColumnMeta
;
public
interface
RowContext
{
public
int
getColumnSize
();
public
<
T
extends
ColumnMeta
>
T
getColumn
(
int
colIndex
);
public
<
T
>
T
getValue
(
int
colIndex
);
public
void
apply
();
public
void
setColumnValue
(
int
colIndex
,
Object
value
);
public
void
setRowListener
(
RowListener
listener
);
}
bee-engine/src/main/java/com/dianping/bee/engine/spi/row/RowFilter.java
0 → 100644
浏览文件 @
eb840558
package
com.dianping.bee.engine.spi.row
;
public
interface
RowFilter
{
public
boolean
filter
(
RowContext
ctx
);
}
bee-engine/src/main/java/com/dianping/bee/engine/spi/row/RowListener.java
0 → 100644
浏览文件 @
eb840558
package
com.dianping.bee.engine.spi.row
;
public
interface
RowListener
{
public
void
onRow
(
RowContext
ctx
);
}
bee-engine/src/main/resources/META-INF/plexus/components.xml
浏览文件 @
eb840558
...
...
@@ -7,8 +7,7 @@
<component>
<role>
com.dianping.bee.engine.spi.DatabaseProvider
</role>
<role-hint>
information_schema
</role-hint>
<implementation>
com.dianping.bee.server.InformationSchemaDatabase
</implementation>
<implementation>
com.dianping.bee.server.InformationSchemaDatabase
</implementation>
</component>
<component>
<role>
com.dianping.bee.engine.spi.DatabaseProvider
</role>
...
...
@@ -22,13 +21,11 @@
</component>
<component>
<role>
com.dianping.bee.engine.spi.session.SessionManager
</role>
<implementation>
com.dianping.bee.engine.spi.session.DefaultSessionManager
</implementation>
<implementation>
com.dianping.bee.engine.spi.session.DefaultSessionManager
</implementation>
</component>
<component>
<role>
com.dianping.bee.engine.spi.TableProviderManager
</role>
<implementation>
com.dianping.bee.engine.spi.internal.DefaultTableProviderManager
</implementation>
<implementation>
com.dianping.bee.engine.spi.internal.DefaultTableProviderManager
</implementation>
<requirements>
<requirement>
<role>
com.dianping.bee.engine.spi.session.SessionManager
</role>
...
...
@@ -37,31 +34,16 @@
</component>
<component>
<role>
com.dianping.bee.engine.spi.StatementManager
</role>
<implementation>
com.dianping.bee.engine.spi.internal.DefaultStatementManager
</implementation>
<implementation>
com.dianping.bee.engine.spi.internal.DefaultStatementManager
</implementation>
</component>
<component>
<role>
com.dianping.bee.engine.spi.SingleTableStatement
</role>
<implementation>
com.dianping.bee.engine.spi.internal.DefaultSingleTableStatement
</implementation>
<instantiation-strategy>
per-lookup
</instantiation-strategy>
</component>
<component>
<role>
com.dianping.bee.engine.spi.MultiTableStatement
</role>
<implementation>
com.dianping.bee.engine.spi.internal.DefaultMultiTableStatement
</implementation>
<instantiation-strategy>
per-lookup
</instantiation-strategy>
</component>
<component>
<role>
com.dianping.bee.engine.spi.RowFilter
</role>
<implementation>
com.dianping.bee.engine.spi.internal.DefaultRowFilter
</implementation>
<implementation>
com.dianping.bee.engine.spi.internal.DefaultSingleTableStatement
</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>
<implementation>
com.dianping.bee.engine.spi.internal.TableHelper
</implementation>
<requirements>
<requirement>
<role>
com.dianping.bee.engine.spi.TableProviderManager
</role>
...
...
@@ -69,10 +51,8 @@
</requirements>
</component>
<component>
<role>
com.dianping.bee.engine.spi.internal.SingleTableStatementVisitor
</role>
<implementation>
com.dianping.bee.engine.spi.internal.SingleTableStatementVisitor
</implementation>
<role>
com.dianping.bee.engine.spi.internal.SingleTableStatementVisitor
</role>
<implementation>
com.dianping.bee.engine.spi.internal.SingleTableStatementVisitor
</implementation>
<instantiation-strategy>
per-lookup
</instantiation-strategy>
<requirements>
<requirement>
...
...
@@ -81,71 +61,41 @@
<requirement>
<role>
com.dianping.bee.engine.spi.SingleTableStatement
</role>
</requirement>
<requirement>
<role>
com.dianping.bee.engine.spi.RowFilter
</role>
</requirement>
</requirements>
</component>
<component>
<role>
com.dianping.bee.engine.spi.internal.MultiTableStatementVisitor
</role>
<implementation>
com.dianping.bee.engine.spi.internal.MultiTableStatementVisitor
</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.MultiTableStatement
</role>
</requirement>
<requirement>
<role>
com.dianping.bee.engine.spi.RowFilter
</role>
</requirement>
</requirements>
</component>
<component>
<role>
com.dianping.bee.server.SimpleServerQueryHandler
</role>
<implementation>
com.dianping.bee.server.SimpleServerQueryHandler
</implementation>
<implementation>
com.dianping.bee.server.SimpleServerQueryHandler
</implementation>
<instantiation-strategy>
per-lookup
</instantiation-strategy>
<requirements>
<requirement>
<role>
com.dianping.bee.engine.spi.handler.internal.SelectHandler
</role>
<role>
com.dianping.bee.engine.spi.handler.internal.SelectHandler
</role>
</requirement>
<requirement>
<role>
com.dianping.bee.engine.spi.handler.internal.ShowHandler
</role>
<role>
com.dianping.bee.engine.spi.handler.internal.ShowHandler
</role>
</requirement>
<requirement>
<role>
com.dianping.bee.engine.spi.handler.internal.DescHandler
</role>
<role>
com.dianping.bee.engine.spi.handler.internal.DescHandler
</role>
</requirement>
<requirement>
<role>
com.dianping.bee.engine.spi.handler.internal.UseHandler
</role>
<role>
com.dianping.bee.engine.spi.handler.internal.UseHandler
</role>
</requirement>
<requirement>
<role>
com.dianping.bee.engine.spi.handler.internal.PrepareHandler
</role>
<role>
com.dianping.bee.engine.spi.handler.internal.PrepareHandler
</role>
</requirement>
</requirements>
</component>
<component>
<role>
com.dianping.bee.engine.spi.handler.internal.UseHandler
</role>
<implementation>
com.dianping.bee.engine.spi.handler.internal.UseHandler
</implementation>
<implementation>
com.dianping.bee.engine.spi.handler.internal.UseHandler
</implementation>
</component>
<component>
<role>
com.dianping.bee.engine.spi.handler.internal.ShowHandler
</role>
<implementation>
com.dianping.bee.engine.spi.handler.internal.ShowHandler
</implementation>
<implementation>
com.dianping.bee.engine.spi.handler.internal.ShowHandler
</implementation>
</component>
<component>
<role>
com.dianping.bee.engine.spi.handler.internal.DescHandler
</role>
<implementation>
com.dianping.bee.engine.spi.handler.internal.DescHandler
</implementation>
<implementation>
com.dianping.bee.engine.spi.handler.internal.DescHandler
</implementation>
<requirements>
<requirement>
<role>
com.dianping.bee.engine.spi.TableProviderManager
</role>
...
...
@@ -153,10 +103,8 @@
</requirements>
</component>
<component>
<role>
com.dianping.bee.engine.spi.handler.internal.SelectHandler
</role>
<implementation>
com.dianping.bee.engine.spi.handler.internal.SelectHandler
</implementation>
<role>
com.dianping.bee.engine.spi.handler.internal.SelectHandler
</role>
<implementation>
com.dianping.bee.engine.spi.handler.internal.SelectHandler
</implementation>
<requirements>
<requirement>
<role>
com.dianping.bee.engine.spi.StatementManager
</role>
...
...
@@ -164,10 +112,8 @@
</requirements>
</component>
<component>
<role>
com.dianping.bee.engine.spi.handler.internal.PrepareHandler
</role>
<implementation>
com.dianping.bee.engine.spi.handler.internal.PrepareHandler
</implementation>
<role>
com.dianping.bee.engine.spi.handler.internal.PrepareHandler
</role>
<implementation>
com.dianping.bee.engine.spi.handler.internal.PrepareHandler
</implementation>
<requirements>
<requirement>
<role>
com.dianping.bee.engine.spi.StatementManager
</role>
...
...
bee-engine/src/test/java/com/dianping/bee/db/CatDatabase.java
浏览文件 @
eb840558
...
...
@@ -4,6 +4,7 @@ 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
;
...
...
@@ -194,6 +195,11 @@ public class CatDatabase implements DatabaseProvider {
throw
new
IndexOutOfBoundsException
(
"size: "
+
m_orders
.
length
+
", index: "
+
index
);
}
}
@Override
public
Class
<?
extends
Index
<?>>
getIndexClass
()
{
throw
new
UnsupportedOperationException
(
"Not implemented yet!"
);
}
}
public
static
enum
TransactionColumn
implements
ColumnMeta
{
...
...
@@ -287,6 +293,11 @@ public class CatDatabase implements DatabaseProvider {
throw
new
IndexOutOfBoundsException
(
"size: "
+
m_orders
.
length
+
", index: "
+
index
);
}
}
@Override
public
Class
<?
extends
Index
<?>>
getIndexClass
()
{
throw
new
UnsupportedOperationException
(
"Not implemented yet!"
);
}
}
@Override
...
...
bee-engine/src/test/java/com/dianping/bee/db/DogDatabase.java
浏览文件 @
eb840558
...
...
@@ -4,6 +4,7 @@ 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
;
...
...
@@ -177,6 +178,11 @@ public class DogDatabase implements DatabaseProvider {
throw
new
IndexOutOfBoundsException
(
"size: "
+
m_orders
.
length
+
", index: "
+
index
);
}
}
@Override
public
Class
<?
extends
Index
<?>>
getIndexClass
()
{
throw
new
UnsupportedOperationException
(
"Not implemented yet!"
);
}
}
@Override
...
...
cat-data/pom.xml
浏览文件 @
eb840558
...
...
@@ -15,6 +15,10 @@
<artifactId>
bee-engine
</artifactId>
<version>
0.0.1-SNAPSHOT
</version>
</dependency>
<dependency>
<groupId>
com.dianping.cat
</groupId>
<artifactId>
cat-consumer
</artifactId>
</dependency>
<dependency>
<groupId>
com.site.common
</groupId>
<artifactId>
test-framework
</artifactId>
...
...
cat-data/src/main/java/com/dianping/cat/data/CatTableProvider.java
浏览文件 @
eb840558
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
()),
...
...
@@ -50,7 +56,15 @@ public enum CatTableProvider implements TableProvider {
}
@Override
public
RowSet
queryByIndex
(
IndexMeta
index
,
ColumnMeta
[]
selectColumns
)
{
return
null
;
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/build/ComponentsConfigurator.java
浏览文件 @
eb840558
...
...
@@ -5,6 +5,7 @@ import java.util.List;
import
com.dianping.bee.engine.spi.DatabaseProvider
;
import
com.dianping.cat.data.CatDatabaseProvider
;
import
com.dianping.cat.data.transaction.TransactionIndexer
;
import
com.site.lookup.configuration.AbstractResourceConfigurator
;
import
com.site.lookup.configuration.Component
;
...
...
@@ -15,6 +16,8 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator {
all
.
add
(
C
(
DatabaseProvider
.
class
,
CatDatabaseProvider
.
ID
,
CatDatabaseProvider
.
class
));
all
.
add
(
C
(
TransactionIndexer
.
class
));
return
all
;
}
...
...
cat-data/src/main/java/com/dianping/cat/data/event/EventIndex.java
浏览文件 @
eb840558
package
com.dianping.cat.data.event
;
import
com.dianping.bee.engine.spi.meta.AbstractIndexMeta
;
import
com.dianping.bee.engine.spi.meta.IndexMeta
;
public
enum
EventIndex
implements
IndexMeta
{
IDX_STARTTIME_DOMAIN
(
EventColumn
.
StartTime
,
false
,
EventColumn
.
Domain
,
true
);
private
EventColumn
[]
m_columns
;
private
boolean
[]
m_orders
;
public
class
EventIndex
extends
AbstractIndexMeta
<
EventColumn
>
implements
IndexMeta
{
public
static
final
EventIndex
IDX_STARTTIME_DOMAIN
=
new
EventIndex
(
EventColumn
.
StartTime
,
false
,
EventColumn
.
Domain
,
true
);
private
EventIndex
(
Object
...
args
)
{
int
length
=
args
.
length
;
if
(
length
%
2
!=
0
)
{
throw
new
IllegalArgumentException
(
String
.
format
(
"Parameters should be paired for %s(%s)!"
,
getClass
(),
name
()));
}
m_columns
=
new
EventColumn
[
length
/
2
];
m_orders
=
new
boolean
[
length
/
2
];
for
(
int
i
=
0
;
i
<
length
/
2
;
i
++)
{
m_columns
[
i
]
=
(
EventColumn
)
args
[
2
*
i
];
m_orders
[
i
]
=
(
Boolean
)
args
[
2
*
i
+
1
];
}
}
@Override
public
EventColumn
getColumn
(
int
index
)
{
if
(
index
>=
0
&&
index
<
m_columns
.
length
)
{
return
m_columns
[
index
];
}
else
{
throw
new
IndexOutOfBoundsException
(
"size: "
+
m_columns
.
length
+
", index: "
+
index
);
}
}
@Override
public
int
getLength
()
{
return
m_columns
.
length
;
super
(
args
);
}
@Override
public
boolean
isAscend
(
int
index
)
{
if
(
index
>=
0
&&
index
<
m_orders
.
length
)
{
return
m_orders
[
index
];
}
else
{
throw
new
IndexOutOfBoundsException
(
"size: "
+
m_orders
.
length
+
", index: "
+
index
);
}
public
static
EventIndex
[]
values
()
{
return
new
EventIndex
[]
{
IDX_STARTTIME_DOMAIN
};
}
}
\ No newline at end of file
cat-data/src/main/java/com/dianping/cat/data/transaction/TransactionExecutor.java
已删除
100644 → 0
浏览文件 @
d46036ef
package
com.dianping.cat.data.transaction
;
import
com.dianping.bee.engine.spi.RowFilter
;
import
com.dianping.bee.engine.spi.TableExecutor
;
import
com.dianping.bee.engine.spi.meta.RowSet
;
import
com.dianping.bee.engine.spi.meta.internal.DefaultRowSet
;
public
class
TransactionExecutor
implements
TableExecutor
<
TransactionIndex
,
TransactionColumn
>
{
@Override
public
RowSet
execute
(
TransactionIndex
index
,
TransactionColumn
[]
columns
,
RowFilter
filter
)
{
RowSet
rowset
=
new
DefaultRowSet
(
columns
);
if
(
index
==
TransactionIndex
.
IDX_STARTTIME_DOMAIN
)
{
}
else
{
}
return
rowset
;
}
}
cat-data/src/main/java/com/dianping/cat/data/transaction/TransactionIndex.java
浏览文件 @
eb840558
package
com.dianping.cat.data.transaction
;
import
com.dianping.bee.engine.spi.index.Index
;
import
com.dianping.bee.engine.spi.meta.AbstractIndexMeta
;
import
com.dianping.bee.engine.spi.meta.IndexMeta
;
public
enum
TransactionIndex
implements
IndexMeta
{
IDX_STARTTIME_DOMAIN
(
TransactionColumn
.
StartTime
,
false
,
TransactionColumn
.
Domain
,
true
);
private
TransactionColumn
[]
m_columns
;
private
boolean
[]
m_orders
;
public
class
TransactionIndex
extends
AbstractIndexMeta
<
TransactionColumn
>
implements
IndexMeta
{
public
static
final
TransactionIndex
IDX_STARTTIME_DOMAIN
=
new
TransactionIndex
(
TransactionColumn
.
StartTime
,
false
,
TransactionColumn
.
Domain
,
true
);
private
TransactionIndex
(
Object
...
args
)
{
int
length
=
args
.
length
;
if
(
length
%
2
!=
0
)
{
throw
new
IllegalArgumentException
(
String
.
format
(
"Parameters should be paired for %s(%s)!"
,
getClass
(),
name
()));
}
m_columns
=
new
TransactionColumn
[
length
/
2
];
m_orders
=
new
boolean
[
length
/
2
];
for
(
int
i
=
0
;
i
<
length
/
2
;
i
++)
{
m_columns
[
i
]
=
(
TransactionColumn
)
args
[
2
*
i
];
m_orders
[
i
]
=
(
Boolean
)
args
[
2
*
i
+
1
];
}
super
(
args
);
}
@Override
public
TransactionColumn
getColumn
(
int
index
)
{
if
(
index
>=
0
&&
index
<
m_columns
.
length
)
{
return
m_columns
[
index
];
}
else
{
throw
new
IndexOutOfBoundsException
(
"size: "
+
m_columns
.
length
+
", index: "
+
index
);
}
public
Class
<?
extends
Index
<?>>
getIndexClass
()
{
return
TransactionIndexer
.
class
;
}
@Override
public
int
getLength
()
{
return
m_columns
.
length
;
}
@Override
public
boolean
isAscend
(
int
index
)
{
if
(
index
>=
0
&&
index
<
m_orders
.
length
)
{
return
m_orders
[
index
];
}
else
{
throw
new
IndexOutOfBoundsException
(
"size: "
+
m_orders
.
length
+
", index: "
+
index
);
}
public
static
TransactionIndex
[]
values
()
{
return
new
TransactionIndex
[]
{
IDX_STARTTIME_DOMAIN
};
}
}
\ No newline at end of file
cat-data/src/main/java/com/dianping/cat/data/transaction/TransactionIndexer.java
0 → 100644
浏览文件 @
eb840558
package
com.dianping.cat.data.transaction
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.net.URL
;
import
org.xml.sax.SAXException
;
import
com.dianping.bee.engine.spi.index.Index
;
import
com.dianping.bee.engine.spi.index.Pair
;
import
com.dianping.bee.engine.spi.index.RangeType
;
import
com.dianping.bee.engine.spi.row.RowContext
;
import
com.dianping.cat.consumer.transaction.model.entity.Machine
;
import
com.dianping.cat.consumer.transaction.model.entity.TransactionName
;
import
com.dianping.cat.consumer.transaction.model.entity.TransactionReport
;
import
com.dianping.cat.consumer.transaction.model.entity.TransactionType
;
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"
);
}
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
);
}
else
{
for
(
TransactionName
name
:
type
.
getNames
().
values
())
{
applyRow
(
ctx
,
type
,
name
);
}
}
}
}
private
void
applyRow
(
RowContext
ctx
,
TransactionType
type
,
TransactionName
name
)
{
int
cols
=
ctx
.
getColumnSize
();
for
(
int
i
=
0
;
i
<
cols
;
i
++)
{
TransactionColumn
column
=
ctx
.
getColumn
(
i
);
switch
(
column
)
{
case
Type:
ctx
.
setColumnValue
(
i
,
type
.
getId
());
break
;
case
Name:
ctx
.
setColumnValue
(
i
,
name
==
null
?
null
:
name
.
getId
());
default
:
// TODO more here
}
}
ctx
.
apply
();
}
@Override
public
void
queryByIds
(
RowContext
ctx
,
Pair
<
String
,
String
>[]
pairs
)
throws
Exception
{
throw
new
UnsupportedOperationException
(
"Not implemented yet!"
);
}
@Override
public
void
queryByRange
(
RowContext
ctx
,
Pair
<
String
,
String
>
start
,
Pair
<
String
,
String
>
end
,
RangeType
rangeType
)
throws
Exception
{
throw
new
UnsupportedOperationException
(
"Not implemented yet!"
);
}
private
TransactionReport
getHourlyReport
(
String
domain
,
String
date
)
throws
IOException
,
SAXException
{
URL
url
=
new
URL
(
String
.
format
(
"http://localhost:2281/cat/r/t?domain=%s&date=%s&xml=true"
,
domain
,
date
));
InputStream
in
=
url
.
openStream
();
try
{
TransactionReport
report
=
DefaultSaxParser
.
parse
(
in
);
return
report
;
}
finally
{
in
.
close
();
}
}
}
cat-data/src/main/resources/META-INF/plexus/components.xml
浏览文件 @
eb840558
...
...
@@ -5,5 +5,9 @@
<role-hint>
cat
</role-hint>
<implementation>
com.dianping.cat.data.CatDatabaseProvider
</implementation>
</component>
<component>
<role>
com.dianping.cat.data.transaction.TransactionIndexer
</role>
<implementation>
com.dianping.cat.data.transaction.TransactionIndexer
</implementation>
</component>
</components>
</plexus>
cat-data/src/test/java/com/dianping/cat/data/BeeTestServer.java
0 → 100644
浏览文件 @
eb840558
package
com.dianping.cat.data
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.junit.runners.JUnit4
;
import
com.alibaba.cobar.CobarServer
;
import
com.dianping.bee.server.SimpleServer
;
import
com.site.lookup.ComponentTestCase
;
@RunWith
(
JUnit4
.
class
)
public
class
BeeTestServer
extends
ComponentTestCase
{
@Test
public
void
runServer
()
throws
Exception
{
SimpleServer
server
=
lookup
(
SimpleServer
.
class
);
server
.
startup
();
System
.
out
.
println
(
CobarServer
.
getInstance
().
getConfig
().
getUsers
());
System
.
out
.
println
(
"Press any key to continue ..."
);
System
.
in
.
read
();
}
}
cat-data/src/test/java/com/dianping/cat/data/TransactionTest.java
0 → 100644
浏览文件 @
eb840558
package
com.dianping.cat.data
;
import
java.sql.Connection
;
import
java.sql.DriverManager
;
import
java.sql.ResultSet
;
import
java.sql.ResultSetMetaData
;
import
java.sql.SQLException
;
import
org.junit.Assert
;
import
org.junit.Before
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.junit.runners.JUnit4
;
import
com.site.lookup.ComponentTestCase
;
@RunWith
(
JUnit4
.
class
)
public
class
TransactionTest
extends
ComponentTestCase
{
private
Connection
m_conn
;
@Before
public
void
before
()
throws
InstantiationException
,
IllegalAccessException
,
ClassNotFoundException
,
SQLException
{
String
url
=
"jdbc:mysql://localhost:2330/cat?useServerPrepStmts=true"
;
String
driver
=
"com.mysql.jdbc.Driver"
;
String
userName
=
"test"
;
String
password
=
"test"
;
Class
.
forName
(
driver
).
newInstance
();
DriverManager
.
setLoginTimeout
(
600
);
m_conn
=
DriverManager
.
getConnection
(
url
,
userName
,
password
);
}
@Test
public
void
testQuery1
()
throws
InstantiationException
,
IllegalAccessException
,
ClassNotFoundException
,
SQLException
{
String
sql
=
"select type from transaction where domain='Cat' and starttime is null"
;
ResultSet
rs
=
m_conn
.
createStatement
().
executeQuery
(
sql
);
Assert
.
assertNotNull
(
rs
);
rs
.
last
();
Assert
.
assertTrue
(
rs
.
getRow
()
>
0
);
displayResultSet
(
rs
);
m_conn
.
close
();
}
private
void
displayResultSet
(
ResultSet
rs
)
throws
SQLException
{
ResultSetMetaData
meta
=
rs
.
getMetaData
();
int
columns
=
meta
.
getColumnCount
();
for
(
int
column
=
1
;
column
<=
columns
;
column
++)
{
String
columnName
=
meta
.
getColumnName
(
column
);
System
.
out
.
print
(
columnName
+
"\t"
);
}
System
.
out
.
println
();
rs
.
first
();
while
(
rs
.
next
())
{
for
(
int
column
=
1
;
column
<=
columns
;
column
++)
{
System
.
out
.
print
(
rs
.
getString
(
column
)
+
"\t"
);
}
System
.
out
.
println
();
}
}
}
cat-home/src/main/java/com/dianping/cat/report/page/transaction/Handler.java
浏览文件 @
eb840558
...
...
@@ -57,6 +57,9 @@ public class Handler implements PageHandler<Context> {
@Inject
private
JspViewer
m_jspViewer
;
@Inject
private
XmlViewer
m_xmlViewer
;
@Inject
private
TransactionMerger
m_transactionMerger
;
...
...
@@ -206,10 +209,15 @@ public class Handler implements PageHandler<Context> {
}
break
;
}
m_jspViewer
.
view
(
ctx
,
model
);
if
(
payload
.
isXml
())
{
m_xmlViewer
.
view
(
ctx
,
model
);
}
else
{
m_jspViewer
.
view
(
ctx
,
model
);
}
}
p
ublic
void
normalize
(
Model
model
,
Payload
payload
)
{
p
rivate
void
normalize
(
Model
model
,
Payload
payload
)
{
Action
action
=
payload
.
getAction
();
model
.
setAction
(
action
);
model
.
setPage
(
ReportPage
.
TRANSACTION
);
...
...
@@ -271,8 +279,8 @@ public class Handler implements PageHandler<Context> {
String
graph1
=
m_builder
.
build
(
new
DurationPayload
(
"Duration Distribution"
,
"Duration (ms)"
,
"Count"
,
name
));
String
graph2
=
m_builder
.
build
(
new
HitPayload
(
"Hits Over Time"
,
"Time (min)"
,
"Count"
,
name
));
String
graph3
=
m_builder
.
build
(
new
AverageTimePayload
(
"Average Duration Over Time"
,
"Time (min)"
,
"Average Duration (ms)"
,
name
));
String
graph3
=
m_builder
.
build
(
new
AverageTimePayload
(
"Average Duration Over Time"
,
"Time (min)"
,
"Average Duration (ms)"
,
name
));
String
graph4
=
m_builder
.
build
(
new
FailurePayload
(
"Failures Over Time"
,
"Time (min)"
,
"Count"
,
name
));
model
.
setGraph1
(
graph1
);
...
...
@@ -365,8 +373,7 @@ public class Handler implements PageHandler<Context> {
calculateTps
(
payload
,
transactionReport
);
model
.
setReport
(
transactionReport
);
if
(!
StringUtils
.
isEmpty
(
type
))
{
model
.
setDisplayNameReport
(
new
DisplayNames
().
display
(
sorted
,
type
,
ip
,
transactionReport
,
payload
.
getQueryName
()));
model
.
setDisplayNameReport
(
new
DisplayNames
().
display
(
sorted
,
type
,
ip
,
transactionReport
,
payload
.
getQueryName
()));
}
else
{
model
.
setDisplayTypeReport
(
new
DisplayTypes
().
display
(
sorted
,
ip
,
transactionReport
));
}
...
...
cat-home/src/main/java/com/dianping/cat/report/page/transaction/Payload.java
浏览文件 @
eb840558
...
...
@@ -20,6 +20,9 @@ public class Payload extends AbstractReportPayload<Action> {
@FieldMeta
(
"type"
)
private
String
m_type
;
@FieldMeta
(
"xml"
)
private
boolean
m_xml
;
public
Payload
()
{
super
(
ReportPage
.
TRANSACTION
);
...
...
@@ -46,6 +49,10 @@ public class Payload extends AbstractReportPayload<Action> {
return
m_type
;
}
public
boolean
isXml
()
{
return
m_xml
;
}
public
void
setAction
(
String
action
)
{
m_action
=
Action
.
getByName
(
action
,
Action
.
HOURLY_REPORT
);
}
...
...
@@ -66,6 +73,10 @@ public class Payload extends AbstractReportPayload<Action> {
m_type
=
type
;
}
public
void
setXml
(
boolean
xml
)
{
m_xml
=
xml
;
}
@Override
public
void
validate
(
ActionContext
<?>
ctx
)
{
if
(
m_action
==
null
)
{
...
...
cat-home/src/main/java/com/dianping/cat/report/page/transaction/XmlViewer.java
0 → 100644
浏览文件 @
eb840558
package
com.dianping.cat.report.page.transaction
;
import
java.io.IOException
;
import
javax.servlet.ServletException
;
import
javax.servlet.ServletOutputStream
;
import
javax.servlet.http.HttpServletResponse
;
import
com.dianping.cat.consumer.transaction.model.entity.TransactionReport
;
import
com.dianping.cat.report.ReportPage
;
import
com.site.web.mvc.view.Viewer
;
public
class
XmlViewer
implements
Viewer
<
ReportPage
,
Action
,
Context
,
Model
>
{
public
void
view
(
Context
ctx
,
Model
model
)
throws
ServletException
,
IOException
{
TransactionReport
report
=
model
.
getReport
();
HttpServletResponse
res
=
ctx
.
getHttpServletResponse
();
if
(
report
!=
null
)
{
ServletOutputStream
out
=
res
.
getOutputStream
();
res
.
setContentType
(
"text/xml"
);
out
.
print
(
report
.
toString
());
}
else
{
res
.
sendError
(
404
,
"Not found!"
);
}
}
}
cat-home/src/main/resources/META-INF/plexus/components.xml
浏览文件 @
eb840558
...
...
@@ -845,6 +845,9 @@
<requirement>
<role>
com.dianping.cat.report.page.transaction.JspViewer
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.report.page.transaction.XmlViewer
</role>
</requirement>
<requirement>
<role>
com.dianping.cat.report.task.transaction.TransactionMerger
</role>
</requirement>
...
...
@@ -874,6 +877,10 @@
<role>
com.dianping.cat.report.page.transaction.JspViewer
</role>
<implementation>
com.dianping.cat.report.page.transaction.JspViewer
</implementation>
</component>
<component>
<role>
com.dianping.cat.report.page.transaction.XmlViewer
</role>
<implementation>
com.dianping.cat.report.page.transaction.XmlViewer
</implementation>
</component>
<component>
<role>
com.dianping.cat.report.task.transaction.TransactionMerger
</role>
<implementation>
com.dianping.cat.report.task.transaction.TransactionMerger
</implementation>
...
...
pom.xml
浏览文件 @
eb840558
...
...
@@ -55,7 +55,7 @@
<dependency>
<groupId>
com.site.common
</groupId>
<artifactId>
lookup
</artifactId>
<version>
1.1.
3
</version>
<version>
1.1.
4
</version>
</dependency>
<dependency>
<groupId>
junit
</groupId>
...
...
src/main/conf/Cat.sql
浏览文件 @
eb840558
...
...
@@ -72,6 +72,7 @@ CREATE TABLE `task` (
`report_domain`
varchar
(
20
)
NOT
NULL
COMMENT
'报表处理的Domain信息'
,
`report_period`
datetime
NOT
NULL
COMMENT
'报表时间'
,
`status`
tinyint
(
4
)
NOT
NULL
COMMENT
'执行状态: 1/todo, 2/doing, 3/done 4/failed'
,
`task_type`
tinyint
(
4
)
NOT
NULL
COMMENT
'执行状态: /daily'
,
`creation_date`
datetime
NOT
NULL
COMMENT
'任务创建时间'
,
`start_date`
datetime
NULL
COMMENT
'开始时间, 这次执行开始时间'
,
`end_date`
datetime
NULL
COMMENT
'结束时间, 这次执行结束时间'
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录