Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
梦中观雨
cat
提交
660b089f
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,发现更多精彩内容 >>
提交
660b089f
编写于
8月 27, 2012
作者:
F
Frankie Wu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
remove the old handlers
上级
102af371
变更
11
隐藏空白更改
内联
并排
Showing
11 changed file
with
40 addition
and
1160 deletion
+40
-1160
bee-engine/src/main/java/com/dianping/bee/engine/build/ComponentsConfigurator.java
...com/dianping/bee/engine/build/ComponentsConfigurator.java
+4
-13
bee-engine/src/main/java/com/dianping/bee/engine/spi/handler/internal/SelectHandler.java
...anping/bee/engine/spi/handler/internal/SelectHandler.java
+0
-1
bee-engine/src/main/java/com/dianping/bee/server/SimpleServerConnectionFactory.java
...om/dianping/bee/server/SimpleServerConnectionFactory.java
+2
-17
bee-engine/src/main/java/com/dianping/bee/server/SimpleServerQueryHandler.java
...ava/com/dianping/bee/server/SimpleServerQueryHandler.java
+6
-3
bee-engine/src/main/java/com/dianping/bee/server/handler/SimpleDescHandler.java
...va/com/dianping/bee/server/handler/SimpleDescHandler.java
+0
-149
bee-engine/src/main/java/com/dianping/bee/server/handler/SimpleSelectHandler.java
.../com/dianping/bee/server/handler/SimpleSelectHandler.java
+0
-268
bee-engine/src/main/java/com/dianping/bee/server/handler/SimpleServerQueryHandler.java
...dianping/bee/server/handler/SimpleServerQueryHandler.java
+0
-108
bee-engine/src/main/java/com/dianping/bee/server/handler/SimpleShowHandler.java
...va/com/dianping/bee/server/handler/SimpleShowHandler.java
+0
-460
bee-engine/src/main/java/com/dianping/bee/server/handler/SimpleUseHandler.java
...ava/com/dianping/bee/server/handler/SimpleUseHandler.java
+0
-71
bee-engine/src/main/resources/META-INF/plexus/components.xml
bee-engine/src/main/resources/META-INF/plexus/components.xml
+12
-53
bee-engine/src/test/java/com/dianping/bee/jdbc/JDBCTest.java
bee-engine/src/test/java/com/dianping/bee/jdbc/JDBCTest.java
+16
-17
未找到文件。
bee-engine/src/main/java/com/dianping/bee/engine/build/ComponentsConfigurator.java
浏览文件 @
660b089f
...
@@ -11,7 +11,6 @@ import com.dianping.bee.engine.spi.RowFilter;
...
@@ -11,7 +11,6 @@ import com.dianping.bee.engine.spi.RowFilter;
import
com.dianping.bee.engine.spi.SingleTableStatement
;
import
com.dianping.bee.engine.spi.SingleTableStatement
;
import
com.dianping.bee.engine.spi.StatementManager
;
import
com.dianping.bee.engine.spi.StatementManager
;
import
com.dianping.bee.engine.spi.TableProviderManager
;
import
com.dianping.bee.engine.spi.TableProviderManager
;
import
com.dianping.bee.engine.spi.handler.internal.DefaultServerQueryHandler
;
import
com.dianping.bee.engine.spi.handler.internal.DescHandler
;
import
com.dianping.bee.engine.spi.handler.internal.DescHandler
;
import
com.dianping.bee.engine.spi.handler.internal.SelectHandler
;
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.ShowHandler
;
...
@@ -28,6 +27,7 @@ import com.dianping.bee.engine.spi.session.DefaultSessionManager;
...
@@ -28,6 +27,7 @@ import com.dianping.bee.engine.spi.session.DefaultSessionManager;
import
com.dianping.bee.engine.spi.session.SessionManager
;
import
com.dianping.bee.engine.spi.session.SessionManager
;
import
com.dianping.bee.server.InformationSchemaDatabase
;
import
com.dianping.bee.server.InformationSchemaDatabase
;
import
com.dianping.bee.server.SimpleServer
;
import
com.dianping.bee.server.SimpleServer
;
import
com.dianping.bee.server.SimpleServerQueryHandler
;
import
com.site.lookup.configuration.AbstractResourceConfigurator
;
import
com.site.lookup.configuration.AbstractResourceConfigurator
;
import
com.site.lookup.configuration.Component
;
import
com.site.lookup.configuration.Component
;
...
@@ -58,30 +58,21 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator {
...
@@ -58,30 +58,21 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator {
all
.
add
(
C
(
MultiTableStatementVisitor
.
class
).
is
(
PER_LOOKUP
)
//
all
.
add
(
C
(
MultiTableStatementVisitor
.
class
).
is
(
PER_LOOKUP
)
//
.
req
(
TableHelper
.
class
,
MultiTableStatement
.
class
,
RowFilter
.
class
));
.
req
(
TableHelper
.
class
,
MultiTableStatement
.
class
,
RowFilter
.
class
));
// all.add(C(SimpleShowHandler.class)//
// .req(TableProviderManager.class));
// all.add(C(SimpleUseHandler.class));
// all.add(C(SimpleDescHandler.class)//
// .req(TableProviderManager.class));
// all.add(C(SimpleSelectHandler.class) //
// .req(StatementManager.class));
// all.add(C(SimpleServerQueryHandler.class).is(PER_LOOKUP) //
// .req(SimpleSelectHandler.class, SimpleShowHandler.class,
// SimpleDescHandler.class, SimpleUseHandler.class));
defineHandlers
(
all
);
defineHandlers
(
all
);
return
all
;
return
all
;
}
}
private
void
defineHandlers
(
List
<
Component
>
all
)
{
private
void
defineHandlers
(
List
<
Component
>
all
)
{
all
.
add
(
C
(
Default
ServerQueryHandler
.
class
).
is
(
PER_LOOKUP
)
//
all
.
add
(
C
(
Simple
ServerQueryHandler
.
class
).
is
(
PER_LOOKUP
)
//
.
req
(
SelectHandler
.
class
,
ShowHandler
.
class
,
DescHandler
.
class
,
UseHandler
.
class
));
.
req
(
SelectHandler
.
class
,
ShowHandler
.
class
,
DescHandler
.
class
,
UseHandler
.
class
));
all
.
add
(
C
(
UseHandler
.
class
));
all
.
add
(
C
(
UseHandler
.
class
));
all
.
add
(
C
(
ShowHandler
.
class
));
all
.
add
(
C
(
ShowHandler
.
class
));
all
.
add
(
C
(
DescHandler
.
class
)
//
all
.
add
(
C
(
DescHandler
.
class
)
//
.
req
(
TableProviderManager
.
class
));
.
req
(
TableProviderManager
.
class
));
all
.
add
(
C
(
SelectHandler
.
class
)
//
.
req
(
StatementManager
.
class
));
}
}
public
static
void
main
(
String
[]
args
)
{
public
static
void
main
(
String
[]
args
)
{
...
...
bee-engine/src/main/java/com/dianping/bee/engine/spi/handler/internal/SelectHandler.java
浏览文件 @
660b089f
...
@@ -41,7 +41,6 @@ import com.site.lookup.annotation.Inject;
...
@@ -41,7 +41,6 @@ import com.site.lookup.annotation.Inject;
* @author <a href="mailto:yiming.liu@dianping.com">Yiming Liu</a>
* @author <a href="mailto:yiming.liu@dianping.com">Yiming Liu</a>
*/
*/
public
class
SelectHandler
extends
AbstractCommandHandler
{
public
class
SelectHandler
extends
AbstractCommandHandler
{
@Inject
@Inject
private
StatementManager
m_manager
;
private
StatementManager
m_manager
;
...
...
bee-engine/src/main/java/com/dianping/bee/server/SimpleServerConnectionFactory.java
浏览文件 @
660b089f
...
@@ -13,9 +13,7 @@ import com.alibaba.cobar.net.handler.FrontendQueryHandler;
...
@@ -13,9 +13,7 @@ import com.alibaba.cobar.net.handler.FrontendQueryHandler;
import
com.alibaba.cobar.server.ServerConnection
;
import
com.alibaba.cobar.server.ServerConnection
;
import
com.alibaba.cobar.server.session.BlockingSession
;
import
com.alibaba.cobar.server.session.BlockingSession
;
import
com.alibaba.cobar.server.session.NonBlockingSession
;
import
com.alibaba.cobar.server.session.NonBlockingSession
;
import
com.dianping.bee.engine.spi.handler.internal.DefaultServerQueryHandler
;
import
com.dianping.bee.engine.spi.session.SessionManager
;
import
com.dianping.bee.engine.spi.session.SessionManager
;
import
com.dianping.bee.server.handler.SimpleServerQueryHandler
;
/**
/**
* @author <a href="mailto:yiming.liu@dianping.com">Yiming Liu</a>
* @author <a href="mailto:yiming.liu@dianping.com">Yiming Liu</a>
...
@@ -26,7 +24,7 @@ public class SimpleServerConnectionFactory extends FrontendConnectionFactory {
...
@@ -26,7 +24,7 @@ public class SimpleServerConnectionFactory extends FrontendConnectionFactory {
@Override
@Override
protected
FrontendConnection
getConnection
(
SocketChannel
channel
)
{
protected
FrontendConnection
getConnection
(
SocketChannel
channel
)
{
SimpleServerConnection
c
=
new
SimpleServerConnection
(
channel
);
SimpleServerConnection
c
=
new
SimpleServerConnection
(
channel
);
FrontendQueryHandler
queryHandler
=
get
Default
QueryHandler
(
c
);
// TODO use another one for test
FrontendQueryHandler
queryHandler
=
getQueryHandler
(
c
);
// TODO use another one for test
c
.
setSessionManager
(
getSessionManager
());
c
.
setSessionManager
(
getSessionManager
());
c
.
setQueryHandler
(
queryHandler
);
c
.
setQueryHandler
(
queryHandler
);
...
@@ -37,19 +35,7 @@ public class SimpleServerConnectionFactory extends FrontendConnectionFactory {
...
@@ -37,19 +35,7 @@ public class SimpleServerConnectionFactory extends FrontendConnectionFactory {
return
c
;
return
c
;
}
}
protected
DefaultServerQueryHandler
getDefaultQueryHandler
(
ServerConnection
c
)
{
protected
SimpleServerQueryHandler
getQueryHandler
(
ServerConnection
c
)
{
try
{
DefaultServerQueryHandler
queryHandler
=
m_container
.
lookup
(
DefaultServerQueryHandler
.
class
);
queryHandler
.
setServerConnection
(
c
);
return
queryHandler
;
}
catch
(
ComponentLookupException
e
)
{
throw
new
RuntimeException
(
"Unable to get DefaultServerQueryHandler instance, please check if the environment is setup correctly!"
,
e
);
}
}
protected
SimpleServerQueryHandler
getSimpleQueryHandler
(
ServerConnection
c
)
{
try
{
try
{
SimpleServerQueryHandler
queryHandler
=
m_container
.
lookup
(
SimpleServerQueryHandler
.
class
);
SimpleServerQueryHandler
queryHandler
=
m_container
.
lookup
(
SimpleServerQueryHandler
.
class
);
...
@@ -74,5 +60,4 @@ public class SimpleServerConnectionFactory extends FrontendConnectionFactory {
...
@@ -74,5 +60,4 @@ public class SimpleServerConnectionFactory extends FrontendConnectionFactory {
public
void
setContainer
(
PlexusContainer
container
)
{
public
void
setContainer
(
PlexusContainer
container
)
{
m_container
=
container
;
m_container
=
container
;
}
}
}
}
bee-engine/src/main/java/com/dianping/bee/
engine/spi/handler/internal/Default
ServerQueryHandler.java
→
bee-engine/src/main/java/com/dianping/bee/
server/Simple
ServerQueryHandler.java
浏览文件 @
660b089f
package
com.dianping.bee.
engine.spi.handler.internal
;
package
com.dianping.bee.
server
;
import
com.alibaba.cobar.ErrorCode
;
import
com.alibaba.cobar.ErrorCode
;
import
com.alibaba.cobar.net.handler.FrontendQueryHandler
;
import
com.alibaba.cobar.net.handler.FrontendQueryHandler
;
...
@@ -9,11 +9,14 @@ import com.alibaba.cobar.server.handler.KillHandler;
...
@@ -9,11 +9,14 @@ import com.alibaba.cobar.server.handler.KillHandler;
import
com.alibaba.cobar.server.handler.SavepointHandler
;
import
com.alibaba.cobar.server.handler.SavepointHandler
;
import
com.alibaba.cobar.server.handler.SetHandler
;
import
com.alibaba.cobar.server.handler.SetHandler
;
import
com.alibaba.cobar.server.handler.StartHandler
;
import
com.alibaba.cobar.server.handler.StartHandler
;
import
com.dianping.bee.server.handler.SimpleSelectHandler
;
import
com.dianping.bee.engine.spi.handler.internal.DescHandler
;
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.server.parse.SimpleServerParse
;
import
com.dianping.bee.server.parse.SimpleServerParse
;
import
com.site.lookup.annotation.Inject
;
import
com.site.lookup.annotation.Inject
;
public
class
Default
ServerQueryHandler
implements
FrontendQueryHandler
{
public
class
Simple
ServerQueryHandler
implements
FrontendQueryHandler
{
@Inject
@Inject
private
SelectHandler
m_selectHandler
;
private
SelectHandler
m_selectHandler
;
...
...
bee-engine/src/main/java/com/dianping/bee/server/handler/SimpleDescHandler.java
已删除
100644 → 0
浏览文件 @
102af371
/**
* 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.server.handler
;
import
java.nio.ByteBuffer
;
import
com.alibaba.cobar.CobarServer
;
import
com.alibaba.cobar.ErrorCode
;
import
com.alibaba.cobar.Fields
;
import
com.alibaba.cobar.config.model.SchemaConfig
;
import
com.alibaba.cobar.net.util.PacketUtil
;
import
com.alibaba.cobar.protocol.mysql.EOFPacket
;
import
com.alibaba.cobar.protocol.mysql.FieldPacket
;
import
com.alibaba.cobar.protocol.mysql.ResultSetHeaderPacket
;
import
com.alibaba.cobar.protocol.mysql.RowDataPacket
;
import
com.alibaba.cobar.server.ServerConnection
;
import
com.alibaba.cobar.util.StringUtil
;
import
com.dianping.bee.engine.spi.TableProvider
;
import
com.dianping.bee.engine.spi.TableProviderManager
;
import
com.dianping.bee.engine.spi.meta.ColumnMeta
;
import
com.dianping.bee.engine.spi.meta.internal.TypeUtils
;
import
com.site.lookup.annotation.Inject
;
/**
* @author <a href="mailto:yiming.liu@dianping.com">Yiming Liu</a>
*/
public
class
SimpleDescHandler
{
@Inject
private
TableProviderManager
m_manager
;
/**
* @param stmt
* @param c
* @param offset
*/
public
void
handle
(
String
stmt
,
ServerConnection
c
,
int
offset
)
{
String
tableName
=
stmt
.
substring
(
offset
).
trim
();
int
length
=
tableName
.
length
();
if
(
length
>
0
)
{
if
(
tableName
.
charAt
(
0
)
==
'`'
&&
tableName
.
charAt
(
length
-
1
)
==
'`'
)
{
tableName
=
tableName
.
substring
(
1
,
length
-
1
);
}
}
// 检查当前使用的DB
String
db
=
c
.
getSchema
();
if
(
db
==
null
)
{
c
.
writeErrMessage
(
ErrorCode
.
ER_NO_DB_ERROR
,
"No database selected"
);
return
;
}
SchemaConfig
schema
=
CobarServer
.
getInstance
().
getConfig
().
getSchemas
().
get
(
db
);
if
(
schema
==
null
)
{
c
.
writeErrMessage
(
ErrorCode
.
ER_BAD_DB_ERROR
,
"Unknown database '"
+
db
+
"'"
);
return
;
}
TableProvider
table
=
m_manager
.
getTableProvider
(
tableName
);
if
(
table
==
null
)
{
c
.
writeErrMessage
(
ErrorCode
.
ER_BAD_TABLE_ERROR
,
"Unknown table '"
+
tableName
+
"'"
);
return
;
}
ColumnMeta
[]
columns
=
table
.
getColumns
();
int
FIELD_COUNT
=
6
;
ResultSetHeaderPacket
header
=
PacketUtil
.
getHeader
(
FIELD_COUNT
);
FieldPacket
[]
fields
=
new
FieldPacket
[
FIELD_COUNT
];
EOFPacket
eof
=
new
EOFPacket
();
int
i
=
0
;
byte
packetId
=
0
;
header
.
packetId
=
++
packetId
;
fields
[
i
]
=
PacketUtil
.
getField
(
"Field"
,
Fields
.
FIELD_TYPE_VAR_STRING
);
fields
[
i
++].
packetId
=
++
packetId
;
fields
[
i
]
=
PacketUtil
.
getField
(
"Type"
,
Fields
.
FIELD_TYPE_VAR_STRING
);
fields
[
i
++].
packetId
=
++
packetId
;
fields
[
i
]
=
PacketUtil
.
getField
(
"Null"
,
Fields
.
FIELD_TYPE_VAR_STRING
);
fields
[
i
++].
packetId
=
++
packetId
;
fields
[
i
]
=
PacketUtil
.
getField
(
"Key"
,
Fields
.
FIELD_TYPE_VAR_STRING
);
fields
[
i
++].
packetId
=
++
packetId
;
fields
[
i
]
=
PacketUtil
.
getField
(
"Default"
,
Fields
.
FIELD_TYPE_VAR_STRING
);
fields
[
i
++].
packetId
=
++
packetId
;
fields
[
i
]
=
PacketUtil
.
getField
(
"Extra"
,
Fields
.
FIELD_TYPE_VAR_STRING
);
fields
[
i
++].
packetId
=
++
packetId
;
eof
.
packetId
=
++
packetId
;
ByteBuffer
buffer
=
c
.
allocate
();
// write header
buffer
=
header
.
write
(
buffer
,
c
);
// write fields
for
(
FieldPacket
field
:
fields
)
{
buffer
=
field
.
write
(
buffer
,
c
);
}
// write eof
buffer
=
eof
.
write
(
buffer
,
c
);
// write rows
packetId
=
eof
.
packetId
;
if
(
columns
!=
null
)
{
for
(
ColumnMeta
column
:
columns
)
{
RowDataPacket
row
=
new
RowDataPacket
(
FIELD_COUNT
);
row
.
add
(
StringUtil
.
encode
(
column
.
getName
(),
c
.
getCharset
()));
row
.
add
(
StringUtil
.
encode
(
TypeUtils
.
convertFieldTypeToString
(
TypeUtils
.
convertJavaTypeToFieldType
(
column
.
getType
())),
c
.
getCharset
()));
row
.
add
(
null
);
row
.
add
(
null
);
row
.
add
(
null
);
row
.
add
(
null
);
row
.
packetId
=
++
packetId
;
buffer
=
row
.
write
(
buffer
,
c
);
}
}
else
{
RowDataPacket
row
=
new
RowDataPacket
(
FIELD_COUNT
);
row
.
add
(
null
);
row
.
add
(
null
);
row
.
add
(
null
);
row
.
add
(
null
);
row
.
add
(
null
);
row
.
add
(
null
);
row
.
packetId
=
++
packetId
;
buffer
=
row
.
write
(
buffer
,
c
);
}
// write last eof
EOFPacket
lastEof
=
new
EOFPacket
();
lastEof
.
packetId
=
++
packetId
;
buffer
=
lastEof
.
write
(
buffer
,
c
);
// post write
c
.
write
(
buffer
);
}
}
bee-engine/src/main/java/com/dianping/bee/server/handler/SimpleSelectHandler.java
已删除
100644 → 0
浏览文件 @
102af371
/**
* Project: bee-engine
*
* File Created at 2012-8-14
*
* 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.server.handler
;
import
java.nio.ByteBuffer
;
import
java.sql.SQLSyntaxErrorException
;
import
com.alibaba.cobar.ErrorCode
;
import
com.alibaba.cobar.Fields
;
import
com.alibaba.cobar.net.util.PacketUtil
;
import
com.alibaba.cobar.parser.util.ParseUtil
;
import
com.alibaba.cobar.protocol.mysql.EOFPacket
;
import
com.alibaba.cobar.protocol.mysql.FieldPacket
;
import
com.alibaba.cobar.protocol.mysql.ResultSetHeaderPacket
;
import
com.alibaba.cobar.protocol.mysql.RowDataPacket
;
import
com.alibaba.cobar.server.ServerConnection
;
import
com.alibaba.cobar.server.response.SelectDatabase
;
import
com.alibaba.cobar.server.response.SelectIdentity
;
import
com.alibaba.cobar.server.response.SelectLastInsertId
;
import
com.alibaba.cobar.server.response.SelectUser
;
import
com.alibaba.cobar.server.response.SelectVersion
;
import
com.alibaba.cobar.server.response.SelectVersionComment
;
import
com.alibaba.cobar.util.IntegerUtil
;
import
com.alibaba.cobar.util.StringUtil
;
import
com.dianping.bee.engine.spi.Statement
;
import
com.dianping.bee.engine.spi.StatementManager
;
import
com.dianping.bee.engine.spi.meta.Cell
;
import
com.dianping.bee.engine.spi.meta.ColumnMeta
;
import
com.dianping.bee.engine.spi.meta.Row
;
import
com.dianping.bee.engine.spi.meta.RowSet
;
import
com.dianping.bee.engine.spi.meta.internal.TypeUtils
;
import
com.dianping.bee.server.parse.SimpleServerParseSelect
;
import
com.site.lookup.annotation.Inject
;
/**
* @author <a href="mailto:yiming.liu@dianping.com">Yiming Liu</a>
*/
public
class
SimpleSelectHandler
{
@Inject
private
StatementManager
m_manager
;
private
RowDataPacket
getRow
(
RowSet
rowset
,
int
rowIndex
,
String
charset
)
{
int
cols
=
rowset
.
getColumns
();
RowDataPacket
packet
=
new
RowDataPacket
(
cols
);
Row
row
=
rowset
.
getRow
(
rowIndex
);
for
(
int
i
=
0
;
i
<
cols
;
i
++)
{
ColumnMeta
column
=
rowset
.
getColumn
(
i
);
Cell
cell
=
row
.
getCell
(
i
);
String
value
=
cell
.
getValue
().
toString
();
switch
(
TypeUtils
.
convertJavaTypeToFieldType
(
column
.
getType
()))
{
case
Fields
.
FIELD_TYPE_STRING
:
packet
.
add
(
StringUtil
.
encode
(
value
,
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
,
charset
));
}
}
return
packet
;
}
public
void
handle
(
String
stmt
,
ServerConnection
c
,
int
offs
)
{
int
offset
=
offs
;
switch
(
SimpleServerParseSelect
.
parse
(
stmt
,
offs
))
{
case
SimpleServerParseSelect
.
VERSION_COMMENT
:
SelectVersionComment
.
response
(
c
);
break
;
case
SimpleServerParseSelect
.
DATABASE
:
SelectDatabase
.
response
(
c
);
break
;
case
SimpleServerParseSelect
.
USER
:
SelectUser
.
response
(
c
);
break
;
case
SimpleServerParseSelect
.
VERSION
:
SelectVersion
.
response
(
c
);
break
;
case
SimpleServerParseSelect
.
SESSION
:
selectSession
(
c
,
stmt
);
break
;
case
SimpleServerParseSelect
.
LAST_INSERT_ID
:
// offset = ParseUtil.move(stmt, 0, "select".length());
loop:
for
(;
offset
<
stmt
.
length
();
++
offset
)
{
switch
(
stmt
.
charAt
(
offset
))
{
case
' '
:
continue
;
case
'/'
:
case
'#'
:
offset
=
ParseUtil
.
comment
(
stmt
,
offset
);
continue
;
case
'L'
:
case
'l'
:
break
loop
;
}
}
offset
=
SimpleServerParseSelect
.
indexAfterLastInsertIdFunc
(
stmt
,
offset
);
offset
=
SimpleServerParseSelect
.
skipAs
(
stmt
,
offset
);
SelectLastInsertId
.
response
(
c
,
stmt
,
offset
);
break
;
case
SimpleServerParseSelect
.
IDENTITY
:
// offset = ParseUtil.move(stmt, 0, "select".length());
loop:
for
(;
offset
<
stmt
.
length
();
++
offset
)
{
switch
(
stmt
.
charAt
(
offset
))
{
case
' '
:
continue
;
case
'/'
:
case
'#'
:
offset
=
ParseUtil
.
comment
(
stmt
,
offset
);
continue
;
case
'@'
:
break
loop
;
}
}
int
indexOfAtAt
=
offset
;
offset
+=
2
;
offset
=
SimpleServerParseSelect
.
indexAfterIdentity
(
stmt
,
offset
);
String
orgName
=
stmt
.
substring
(
indexOfAtAt
,
offset
);
offset
=
SimpleServerParseSelect
.
skipAs
(
stmt
,
offset
);
SelectIdentity
.
response
(
c
,
stmt
,
offset
,
orgName
);
break
;
default
:
try
{
response
(
c
,
stmt
);
}
catch
(
SQLSyntaxErrorException
e
)
{
c
.
writeErrMessage
(
ErrorCode
.
ER_SYNTAX_ERROR
,
e
.
getMessage
());
}
}
}
/**
* @param c
* @param stmt
*/
private
void
selectSession
(
ServerConnection
c
,
String
stmt
)
{
String
sessionVariable
=
stmt
.
substring
(
stmt
.
indexOf
(
"@@session"
));
int
FIELD_COUNT
=
1
;
ResultSetHeaderPacket
header
=
PacketUtil
.
getHeader
(
FIELD_COUNT
);
FieldPacket
[]
fields
=
new
FieldPacket
[
FIELD_COUNT
];
EOFPacket
eof
=
new
EOFPacket
();
int
i
=
0
;
byte
packetId
=
0
;
header
.
packetId
=
++
packetId
;
fields
[
i
]
=
PacketUtil
.
getField
(
sessionVariable
,
Fields
.
FIELD_TYPE_VAR_STRING
);
fields
[
i
++].
packetId
=
++
packetId
;
eof
.
packetId
=
++
packetId
;
ByteBuffer
buffer
=
c
.
allocate
();
// write header
buffer
=
header
.
write
(
buffer
,
c
);
// write fields
for
(
FieldPacket
field
:
fields
)
{
buffer
=
field
.
write
(
buffer
,
c
);
}
// write eof
buffer
=
eof
.
write
(
buffer
,
c
);
// write rows
packetId
=
eof
.
packetId
;
// TODO: sample result currently
RowDataPacket
row
=
new
RowDataPacket
(
FIELD_COUNT
);
row
.
add
(
StringUtil
.
encode
(
"1"
,
c
.
getCharset
()));
row
.
packetId
=
++
packetId
;
buffer
=
row
.
write
(
buffer
,
c
);
// write last eof
EOFPacket
lastEof
=
new
EOFPacket
();
lastEof
.
packetId
=
++
packetId
;
buffer
=
lastEof
.
write
(
buffer
,
c
);
// post write
c
.
write
(
buffer
);
}
/**
*
* @param c
* @param stmt
* @throws SQLSyntaxErrorException
*/
public
void
response
(
ServerConnection
c
,
String
sql
)
throws
SQLSyntaxErrorException
{
Statement
stmt
=
m_manager
.
build
(
sql
);
RowSet
rowset
=
stmt
.
query
();
byte
packetId
=
0
;
EOFPacket
eof
=
new
EOFPacket
();
ByteBuffer
buffer
=
c
.
allocate
();
// write header
int
fieldCount
=
rowset
.
getColumns
();
ResultSetHeaderPacket
header
=
PacketUtil
.
getHeader
(
fieldCount
);
header
.
packetId
=
++
packetId
;
buffer
=
header
.
write
(
buffer
,
c
);
// write fields
int
columnIndex
=
0
;
FieldPacket
[]
fields
=
new
FieldPacket
[
fieldCount
];
for
(
int
i
=
0
;
i
<
fieldCount
;
i
++)
{
fields
[
columnIndex
]
=
PacketUtil
.
getField
(
rowset
.
getColumn
(
i
).
getName
(),
TypeUtils
.
convertJavaTypeToFieldType
(
rowset
.
getColumn
(
i
).
getType
()));
fields
[
columnIndex
++].
packetId
=
++
packetId
;
}
eof
.
packetId
=
++
packetId
;
for
(
FieldPacket
field
:
fields
)
{
buffer
=
field
.
write
(
buffer
,
c
);
}
buffer
=
eof
.
write
(
buffer
,
c
);
// write rows
for
(
int
rowIndex
=
0
;
rowIndex
<
rowset
.
getRows
();
rowIndex
++)
{
RowDataPacket
row
=
getRow
(
rowset
,
rowIndex
,
c
.
getCharset
());
row
.
packetId
=
++
packetId
;
buffer
=
row
.
write
(
buffer
,
c
);
}
EOFPacket
lastEof
=
new
EOFPacket
();
lastEof
.
packetId
=
++
packetId
;
buffer
=
lastEof
.
write
(
buffer
,
c
);
c
.
write
(
buffer
);
}
}
bee-engine/src/main/java/com/dianping/bee/server/handler/SimpleServerQueryHandler.java
已删除
100644 → 0
浏览文件 @
102af371
/**
* Project: bee-engine
*
* File Created at 2012-8-15
*
* 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.server.handler
;
import
org.apache.log4j.Logger
;
import
com.alibaba.cobar.ErrorCode
;
import
com.alibaba.cobar.net.handler.FrontendQueryHandler
;
import
com.alibaba.cobar.server.ServerConnection
;
import
com.alibaba.cobar.server.handler.BeginHandler
;
import
com.alibaba.cobar.server.handler.ExplainHandler
;
import
com.alibaba.cobar.server.handler.KillHandler
;
import
com.alibaba.cobar.server.handler.SavepointHandler
;
import
com.alibaba.cobar.server.handler.SetHandler
;
import
com.alibaba.cobar.server.handler.StartHandler
;
import
com.dianping.bee.server.parse.SimpleServerParse
;
import
com.site.lookup.annotation.Inject
;
/**
* @author <a href="mailto:yiming.liu@dianping.com">Yiming Liu</a>
*/
public
class
SimpleServerQueryHandler
implements
FrontendQueryHandler
{
@Inject
private
SimpleSelectHandler
m_selectHandler
;
@Inject
private
SimpleShowHandler
m_showHandler
;
@Inject
private
SimpleDescHandler
m_descHandler
;
@Inject
private
SimpleUseHandler
m_useHandler
;
private
static
final
Logger
LOGGER
=
Logger
.
getLogger
(
SimpleServerQueryHandler
.
class
);
private
ServerConnection
m_conn
;
@Override
public
void
query
(
String
sql
)
{
ServerConnection
c
=
this
.
m_conn
;
if
(
LOGGER
.
isDebugEnabled
())
{
LOGGER
.
debug
(
new
StringBuilder
().
append
(
c
).
append
(
sql
).
toString
());
}
int
rs
=
SimpleServerParse
.
parse
(
sql
);
switch
(
rs
&
0xff
)
{
case
SimpleServerParse
.
EXPLAIN
:
ExplainHandler
.
handle
(
sql
,
c
,
rs
>>>
8
);
break
;
case
SimpleServerParse
.
SET
:
SetHandler
.
handle
(
sql
,
c
,
rs
>>>
8
);
break
;
case
SimpleServerParse
.
DESC
:
m_descHandler
.
handle
(
sql
,
c
,
rs
>>>
8
);
break
;
case
SimpleServerParse
.
SHOW
:
m_showHandler
.
handle
(
sql
,
c
,
rs
>>>
8
);
break
;
case
SimpleServerParse
.
SELECT
:
m_selectHandler
.
handle
(
sql
,
c
,
rs
>>>
8
);
break
;
case
SimpleServerParse
.
START
:
StartHandler
.
handle
(
sql
,
c
,
rs
>>>
8
);
break
;
case
SimpleServerParse
.
BEGIN
:
BeginHandler
.
handle
(
sql
,
c
);
break
;
case
SimpleServerParse
.
SAVEPOINT
:
SavepointHandler
.
handle
(
sql
,
c
);
break
;
case
SimpleServerParse
.
KILL
:
KillHandler
.
handle
(
sql
,
rs
>>>
8
,
c
);
break
;
case
SimpleServerParse
.
KILL_QUERY
:
c
.
writeErrMessage
(
ErrorCode
.
ER_UNKNOWN_COM_ERROR
,
"Unsupported command"
);
break
;
case
SimpleServerParse
.
USE
:
m_useHandler
.
handle
(
sql
,
c
,
rs
>>>
8
);
break
;
case
SimpleServerParse
.
COMMIT
:
c
.
commit
();
break
;
case
SimpleServerParse
.
ROLLBACK
:
c
.
rollback
();
break
;
default
:
c
.
execute
(
sql
,
rs
);
}
}
public
void
setServerConnection
(
ServerConnection
c
)
{
m_conn
=
c
;
}
}
bee-engine/src/main/java/com/dianping/bee/server/handler/SimpleShowHandler.java
已删除
100644 → 0
浏览文件 @
102af371
/**
* 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.server.handler
;
import
java.nio.ByteBuffer
;
import
java.util.HashMap
;
import
java.util.Map
;
import
org.codehaus.plexus.component.repository.exception.ComponentLookupException
;
import
com.alibaba.cobar.CobarServer
;
import
com.alibaba.cobar.ErrorCode
;
import
com.alibaba.cobar.Fields
;
import
com.alibaba.cobar.config.model.SchemaConfig
;
import
com.alibaba.cobar.net.util.PacketUtil
;
import
com.alibaba.cobar.protocol.mysql.EOFPacket
;
import
com.alibaba.cobar.protocol.mysql.FieldPacket
;
import
com.alibaba.cobar.protocol.mysql.ResultSetHeaderPacket
;
import
com.alibaba.cobar.protocol.mysql.RowDataPacket
;
import
com.alibaba.cobar.server.ServerConnection
;
import
com.alibaba.cobar.server.response.ShowDatabases
;
import
com.alibaba.cobar.util.StringUtil
;
import
com.dianping.bee.engine.spi.DatabaseProvider
;
import
com.dianping.bee.engine.spi.TableProvider
;
import
com.dianping.bee.engine.spi.TableProviderManager
;
import
com.dianping.bee.server.parse.SimpleServerParseShow
;
import
com.site.lookup.ContainerLoader
;
import
com.site.lookup.annotation.Inject
;
/**
* @author <a href="mailto:yiming.liu@dianping.com">Yiming Liu</a>
*/
public
class
SimpleShowHandler
{
@Inject
private
TableProviderManager
m_manager
;
/**
* @param stmt
* @param c
* @param offset
*/
public
void
handle
(
String
stmt
,
ServerConnection
c
,
int
offset
)
{
switch
(
SimpleServerParseShow
.
parse
(
stmt
,
offset
))
{
case
SimpleServerParseShow
.
DATABASES
:
ShowDatabases
.
response
(
c
);
break
;
case
SimpleServerParseShow
.
TABLES
:
showTables
(
c
,
stmt
);
break
;
case
SimpleServerParseShow
.
TABLESTATUS
:
showTableStatus
(
c
,
stmt
);
break
;
case
SimpleServerParseShow
.
STATUS
:
showStatus
(
c
,
stmt
);
break
;
case
SimpleServerParseShow
.
VARIABLES
:
showVariables
(
c
,
stmt
);
break
;
case
SimpleServerParseShow
.
COLLATION
:
showCollation
(
c
,
stmt
);
break
;
default
:
c
.
writeErrMessage
(
ErrorCode
.
ER_UNKNOWN_COM_ERROR
,
"Unsupported show command"
);
}
}
/**
* @param c
* @param stmt
*/
private
void
showCollation
(
ServerConnection
c
,
String
stmt
)
{
int
FIELD_COUNT
=
6
;
ResultSetHeaderPacket
header
=
PacketUtil
.
getHeader
(
FIELD_COUNT
);
FieldPacket
[]
fields
=
new
FieldPacket
[
FIELD_COUNT
];
EOFPacket
eof
=
new
EOFPacket
();
int
i
=
0
;
byte
packetId
=
0
;
header
.
packetId
=
++
packetId
;
fields
[
i
]
=
PacketUtil
.
getField
(
"Collation"
,
Fields
.
FIELD_TYPE_VAR_STRING
);
fields
[
i
++].
packetId
=
++
packetId
;
fields
[
i
]
=
PacketUtil
.
getField
(
"Charset"
,
Fields
.
FIELD_TYPE_VAR_STRING
);
fields
[
i
++].
packetId
=
++
packetId
;
fields
[
i
]
=
PacketUtil
.
getField
(
"Id"
,
Fields
.
FIELD_TYPE_LONG
);
fields
[
i
++].
packetId
=
++
packetId
;
fields
[
i
]
=
PacketUtil
.
getField
(
"Default"
,
Fields
.
FIELD_TYPE_VAR_STRING
);
fields
[
i
++].
packetId
=
++
packetId
;
fields
[
i
]
=
PacketUtil
.
getField
(
"Compiled"
,
Fields
.
FIELD_TYPE_VAR_STRING
);
fields
[
i
++].
packetId
=
++
packetId
;
fields
[
i
]
=
PacketUtil
.
getField
(
"Sortlen"
,
Fields
.
FIELD_TYPE_LONG
);
fields
[
i
++].
packetId
=
++
packetId
;
eof
.
packetId
=
++
packetId
;
ByteBuffer
buffer
=
c
.
allocate
();
// write header
buffer
=
header
.
write
(
buffer
,
c
);
// write fields
for
(
FieldPacket
field
:
fields
)
{
buffer
=
field
.
write
(
buffer
,
c
);
}
// write eof
buffer
=
eof
.
write
(
buffer
,
c
);
// write rows
packetId
=
eof
.
packetId
;
// TODO: sample result currently
// RowDataPacket row = new RowDataPacket(FIELD_COUNT);
// row.add(StringUtil.encode("utf8_general_ci", c.getCharset()));
// row.add(StringUtil.encode("utf8", c.getCharset()));
// row.add(LongUtil.toBytes(33L));
// row.add(StringUtil.encode("Yes", c.getCharset()));
// row.add(StringUtil.encode("Yes", c.getCharset()));
// row.add(LongUtil.toBytes(1));
// row.packetId = ++packetId;
// buffer = row.write(buffer, c);
//
// row = new RowDataPacket(FIELD_COUNT);
// row.add(StringUtil.encode("utf8_bin", c.getCharset()));
// row.add(StringUtil.encode("utf8", c.getCharset()));
// row.add(LongUtil.toBytes(83L));
// row.add(StringUtil.encode("", c.getCharset()));
// row.add(StringUtil.encode("Yes", c.getCharset()));
// row.add(LongUtil.toBytes(1));
// row.packetId = ++packetId;
// buffer = row.write(buffer, c);
// write last eof
EOFPacket
lastEof
=
new
EOFPacket
();
lastEof
.
packetId
=
++
packetId
;
buffer
=
lastEof
.
write
(
buffer
,
c
);
// post write
c
.
write
(
buffer
);
}
/**
* @param c
* @param stmt
*/
private
void
showTableStatus
(
ServerConnection
c
,
String
stmt
)
{
String
dbName
=
stmt
.
substring
(
"show table status from "
.
length
()).
trim
();
int
length
=
dbName
.
length
();
if
(
length
>
0
)
{
if
(
dbName
.
charAt
(
0
)
==
'`'
&&
dbName
.
charAt
(
length
-
1
)
==
'`'
)
{
dbName
=
dbName
.
substring
(
1
,
length
-
1
);
}
}
DatabaseProvider
provider
=
null
;
try
{
provider
=
ContainerLoader
.
getDefaultContainer
().
lookup
(
DatabaseProvider
.
class
,
dbName
);
}
catch
(
ComponentLookupException
e
)
{
c
.
writeErrMessage
(
ErrorCode
.
ER_BAD_DB_ERROR
,
"Can not load database '"
+
dbName
+
"'"
);
return
;
}
int
FIELD_COUNT
=
18
;
ResultSetHeaderPacket
header
=
PacketUtil
.
getHeader
(
FIELD_COUNT
);
FieldPacket
[]
fields
=
new
FieldPacket
[
FIELD_COUNT
];
EOFPacket
eof
=
new
EOFPacket
();
int
i
=
0
;
byte
packetId
=
0
;
header
.
packetId
=
++
packetId
;
// FIXME field type need to be updated
fields
[
i
]
=
PacketUtil
.
getField
(
"Name"
,
Fields
.
FIELD_TYPE_VAR_STRING
);
fields
[
i
++].
packetId
=
++
packetId
;
fields
[
i
]
=
PacketUtil
.
getField
(
"Engine"
,
Fields
.
FIELD_TYPE_VAR_STRING
);
fields
[
i
++].
packetId
=
++
packetId
;
fields
[
i
]
=
PacketUtil
.
getField
(
"Version"
,
Fields
.
FIELD_TYPE_VAR_STRING
);
fields
[
i
++].
packetId
=
++
packetId
;
fields
[
i
]
=
PacketUtil
.
getField
(
"Row_format"
,
Fields
.
FIELD_TYPE_VAR_STRING
);
fields
[
i
++].
packetId
=
++
packetId
;
fields
[
i
]
=
PacketUtil
.
getField
(
"Rows"
,
Fields
.
FIELD_TYPE_VAR_STRING
);
fields
[
i
++].
packetId
=
++
packetId
;
fields
[
i
]
=
PacketUtil
.
getField
(
"Avg_row_length"
,
Fields
.
FIELD_TYPE_VAR_STRING
);
fields
[
i
++].
packetId
=
++
packetId
;
fields
[
i
]
=
PacketUtil
.
getField
(
"Data_length"
,
Fields
.
FIELD_TYPE_VAR_STRING
);
fields
[
i
++].
packetId
=
++
packetId
;
fields
[
i
]
=
PacketUtil
.
getField
(
"Max_data_length"
,
Fields
.
FIELD_TYPE_VAR_STRING
);
fields
[
i
++].
packetId
=
++
packetId
;
fields
[
i
]
=
PacketUtil
.
getField
(
"Index_length"
,
Fields
.
FIELD_TYPE_VAR_STRING
);
fields
[
i
++].
packetId
=
++
packetId
;
fields
[
i
]
=
PacketUtil
.
getField
(
"Data_free"
,
Fields
.
FIELD_TYPE_VAR_STRING
);
fields
[
i
++].
packetId
=
++
packetId
;
fields
[
i
]
=
PacketUtil
.
getField
(
"Auto_increment"
,
Fields
.
FIELD_TYPE_VAR_STRING
);
fields
[
i
++].
packetId
=
++
packetId
;
fields
[
i
]
=
PacketUtil
.
getField
(
"Create_time"
,
Fields
.
FIELD_TYPE_VAR_STRING
);
fields
[
i
++].
packetId
=
++
packetId
;
fields
[
i
]
=
PacketUtil
.
getField
(
"Update_time"
,
Fields
.
FIELD_TYPE_VAR_STRING
);
fields
[
i
++].
packetId
=
++
packetId
;
fields
[
i
]
=
PacketUtil
.
getField
(
"Check_time"
,
Fields
.
FIELD_TYPE_VAR_STRING
);
fields
[
i
++].
packetId
=
++
packetId
;
fields
[
i
]
=
PacketUtil
.
getField
(
"Collation"
,
Fields
.
FIELD_TYPE_VAR_STRING
);
fields
[
i
++].
packetId
=
++
packetId
;
fields
[
i
]
=
PacketUtil
.
getField
(
"Checksum"
,
Fields
.
FIELD_TYPE_VAR_STRING
);
fields
[
i
++].
packetId
=
++
packetId
;
fields
[
i
]
=
PacketUtil
.
getField
(
"Create_options"
,
Fields
.
FIELD_TYPE_VAR_STRING
);
fields
[
i
++].
packetId
=
++
packetId
;
fields
[
i
]
=
PacketUtil
.
getField
(
"Comment"
,
Fields
.
FIELD_TYPE_VAR_STRING
);
fields
[
i
++].
packetId
=
++
packetId
;
eof
.
packetId
=
++
packetId
;
ByteBuffer
buffer
=
c
.
allocate
();
// write header
buffer
=
header
.
write
(
buffer
,
c
);
// write fields
for
(
FieldPacket
field
:
fields
)
{
buffer
=
field
.
write
(
buffer
,
c
);
}
// write eof
buffer
=
eof
.
write
(
buffer
,
c
);
// write rows
packetId
=
eof
.
packetId
;
// TODO: sample result currently
TableProvider
[]
tables
=
provider
.
getTables
();
if
(
tables
!=
null
)
{
for
(
TableProvider
table
:
tables
)
{
RowDataPacket
row
=
new
RowDataPacket
(
FIELD_COUNT
);
row
.
add
(
StringUtil
.
encode
(
table
.
getName
(),
c
.
getCharset
()));
row
.
add
(
StringUtil
.
encode
(
"Bee"
,
c
.
getCharset
()));
row
.
add
(
null
);
row
.
add
(
null
);
row
.
add
(
null
);
row
.
add
(
null
);
row
.
add
(
null
);
row
.
add
(
null
);
row
.
add
(
null
);
row
.
add
(
null
);
row
.
add
(
null
);
row
.
add
(
null
);
row
.
add
(
null
);
row
.
add
(
null
);
row
.
add
(
null
);
row
.
add
(
null
);
row
.
add
(
null
);
row
.
add
(
null
);
row
.
packetId
=
++
packetId
;
buffer
=
row
.
write
(
buffer
,
c
);
}
}
// write last eof
EOFPacket
lastEof
=
new
EOFPacket
();
lastEof
.
packetId
=
++
packetId
;
buffer
=
lastEof
.
write
(
buffer
,
c
);
// post write
c
.
write
(
buffer
);
}
/**
* @param c
* @param stmt
*/
private
void
showStatus
(
ServerConnection
c
,
String
stmt
)
{
int
FIELD_COUNT
=
2
;
ResultSetHeaderPacket
header
=
PacketUtil
.
getHeader
(
FIELD_COUNT
);
FieldPacket
[]
fields
=
new
FieldPacket
[
FIELD_COUNT
];
EOFPacket
eof
=
new
EOFPacket
();
int
i
=
0
;
byte
packetId
=
0
;
header
.
packetId
=
++
packetId
;
fields
[
i
]
=
PacketUtil
.
getField
(
"Variable_name"
,
Fields
.
FIELD_TYPE_VAR_STRING
);
fields
[
i
++].
packetId
=
++
packetId
;
fields
[
i
]
=
PacketUtil
.
getField
(
"Value"
,
Fields
.
FIELD_TYPE_VAR_STRING
);
fields
[
i
++].
packetId
=
++
packetId
;
eof
.
packetId
=
++
packetId
;
ByteBuffer
buffer
=
c
.
allocate
();
// write header
buffer
=
header
.
write
(
buffer
,
c
);
// write fields
for
(
FieldPacket
field
:
fields
)
{
buffer
=
field
.
write
(
buffer
,
c
);
}
// write eof
buffer
=
eof
.
write
(
buffer
,
c
);
// write rows
packetId
=
eof
.
packetId
;
// TODO: sample result currently
Map
<
String
,
String
>
sampleStatus
=
new
HashMap
<
String
,
String
>();
sampleStatus
.
put
(
"bee_status"
,
"good"
);
for
(
Map
.
Entry
<
String
,
String
>
variable
:
sampleStatus
.
entrySet
())
{
RowDataPacket
row
=
new
RowDataPacket
(
FIELD_COUNT
);
row
.
add
(
StringUtil
.
encode
(
variable
.
getKey
(),
c
.
getCharset
()));
row
.
add
(
StringUtil
.
encode
(
variable
.
getValue
(),
c
.
getCharset
()));
row
.
packetId
=
++
packetId
;
buffer
=
row
.
write
(
buffer
,
c
);
}
// write last eof
EOFPacket
lastEof
=
new
EOFPacket
();
lastEof
.
packetId
=
++
packetId
;
buffer
=
lastEof
.
write
(
buffer
,
c
);
// post write
c
.
write
(
buffer
);
}
/**
*
* @param c
* @param stmt
*/
private
void
showTables
(
ServerConnection
c
,
String
stmt
)
{
// 检查当前使用的DB
String
db
=
c
.
getSchema
();
if
(
db
==
null
)
{
c
.
writeErrMessage
(
ErrorCode
.
ER_NO_DB_ERROR
,
"No database selected"
);
return
;
}
SchemaConfig
schema
=
CobarServer
.
getInstance
().
getConfig
().
getSchemas
().
get
(
db
);
if
(
schema
==
null
)
{
c
.
writeErrMessage
(
ErrorCode
.
ER_BAD_DB_ERROR
,
"Unknown database '"
+
db
+
"'"
);
return
;
}
DatabaseProvider
provider
=
null
;
try
{
provider
=
ContainerLoader
.
getDefaultContainer
().
lookup
(
DatabaseProvider
.
class
,
db
);
}
catch
(
ComponentLookupException
e
)
{
c
.
writeErrMessage
(
ErrorCode
.
ER_BAD_DB_ERROR
,
"Can not load database '"
+
db
+
"'"
);
return
;
}
if
(
provider
==
null
)
{
c
.
writeErrMessage
(
ErrorCode
.
ER_BAD_DB_ERROR
,
"Can not load database '"
+
db
+
"'"
);
return
;
}
TableProvider
[]
tables
=
provider
.
getTables
();
int
FIELD_COUNT
=
1
;
ResultSetHeaderPacket
header
=
PacketUtil
.
getHeader
(
FIELD_COUNT
);
FieldPacket
[]
fields
=
new
FieldPacket
[
FIELD_COUNT
];
EOFPacket
eof
=
new
EOFPacket
();
int
i
=
0
;
byte
packetId
=
0
;
header
.
packetId
=
++
packetId
;
fields
[
i
]
=
PacketUtil
.
getField
(
"TABLE"
,
Fields
.
FIELD_TYPE_VAR_STRING
);
fields
[
i
++].
packetId
=
++
packetId
;
eof
.
packetId
=
++
packetId
;
ByteBuffer
buffer
=
c
.
allocate
();
// write header
buffer
=
header
.
write
(
buffer
,
c
);
// write fields
for
(
FieldPacket
field
:
fields
)
{
buffer
=
field
.
write
(
buffer
,
c
);
}
// write eof
buffer
=
eof
.
write
(
buffer
,
c
);
// write rows
packetId
=
eof
.
packetId
;
if
(
tables
!=
null
)
{
for
(
TableProvider
table
:
tables
)
{
RowDataPacket
row
=
new
RowDataPacket
(
FIELD_COUNT
);
row
.
add
(
StringUtil
.
encode
(
table
.
getName
(),
c
.
getCharset
()));
row
.
packetId
=
++
packetId
;
buffer
=
row
.
write
(
buffer
,
c
);
}
}
else
{
RowDataPacket
row
=
new
RowDataPacket
(
FIELD_COUNT
);
row
.
add
(
null
);
row
.
packetId
=
++
packetId
;
buffer
=
row
.
write
(
buffer
,
c
);
}
// write last eof
EOFPacket
lastEof
=
new
EOFPacket
();
lastEof
.
packetId
=
++
packetId
;
buffer
=
lastEof
.
write
(
buffer
,
c
);
// post write
c
.
write
(
buffer
);
}
/**
* @param c
* @param stmt
*/
private
void
showVariables
(
ServerConnection
c
,
String
stmt
)
{
int
FIELD_COUNT
=
2
;
ResultSetHeaderPacket
header
=
PacketUtil
.
getHeader
(
FIELD_COUNT
);
FieldPacket
[]
fields
=
new
FieldPacket
[
FIELD_COUNT
];
EOFPacket
eof
=
new
EOFPacket
();
int
i
=
0
;
byte
packetId
=
0
;
header
.
packetId
=
++
packetId
;
fields
[
i
]
=
PacketUtil
.
getField
(
"Variable_name"
,
Fields
.
FIELD_TYPE_VAR_STRING
);
fields
[
i
++].
packetId
=
++
packetId
;
fields
[
i
]
=
PacketUtil
.
getField
(
"Value"
,
Fields
.
FIELD_TYPE_VAR_STRING
);
fields
[
i
++].
packetId
=
++
packetId
;
eof
.
packetId
=
++
packetId
;
ByteBuffer
buffer
=
c
.
allocate
();
// write header
buffer
=
header
.
write
(
buffer
,
c
);
// write fields
for
(
FieldPacket
field
:
fields
)
{
buffer
=
field
.
write
(
buffer
,
c
);
}
// write eof
buffer
=
eof
.
write
(
buffer
,
c
);
// write rows
packetId
=
eof
.
packetId
;
// TODO: sample result currently
Map
<
String
,
String
>
sampleVariables
=
new
HashMap
<
String
,
String
>();
sampleVariables
.
put
(
"bee_status"
,
"good"
);
for
(
Map
.
Entry
<
String
,
String
>
variable
:
sampleVariables
.
entrySet
())
{
RowDataPacket
row
=
new
RowDataPacket
(
FIELD_COUNT
);
row
.
add
(
StringUtil
.
encode
(
variable
.
getKey
(),
c
.
getCharset
()));
row
.
add
(
StringUtil
.
encode
(
variable
.
getValue
(),
c
.
getCharset
()));
row
.
packetId
=
++
packetId
;
buffer
=
row
.
write
(
buffer
,
c
);
}
// write last eof
EOFPacket
lastEof
=
new
EOFPacket
();
lastEof
.
packetId
=
++
packetId
;
buffer
=
lastEof
.
write
(
buffer
,
c
);
// post write
c
.
write
(
buffer
);
}
}
bee-engine/src/main/java/com/dianping/bee/server/handler/SimpleUseHandler.java
已删除
100644 → 0
浏览文件 @
102af371
/**
* Project: bee-engine
*
* File Created at 2012-8-24
*
* 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.server.handler
;
import
java.nio.ByteBuffer
;
import
java.util.Set
;
import
com.alibaba.cobar.ErrorCode
;
import
com.alibaba.cobar.net.handler.FrontendPrivileges
;
import
com.alibaba.cobar.protocol.mysql.OkPacket
;
import
com.alibaba.cobar.server.ServerConnection
;
/**
* @author <a href="mailto:yiming.liu@dianping.com">Yiming Liu</a>
*/
public
class
SimpleUseHandler
{
public
void
handle
(
String
sql
,
ServerConnection
c
,
int
offset
)
{
String
schema
=
sql
.
substring
(
offset
).
trim
();
int
length
=
schema
.
length
();
if
(
length
>
0
)
{
if
(
schema
.
charAt
(
0
)
==
'`'
&&
schema
.
charAt
(
length
-
1
)
==
'`'
)
{
schema
=
schema
.
substring
(
1
,
length
-
1
);
}
}
// 表示当前连接已经指定了schema
// if (c.getSchema() != null) {
// if (c.getSchema().equals(schema)) {
// ByteBuffer buffer = c.allocate();
// c.write(c.writeToBuffer(OkPacket.OK, buffer));
// } else {
// c.writeErrMessage(ErrorCode.ER_DBACCESS_DENIED_ERROR,
// "Not allowed to change the database!");
// }
// return;
// }
// 检查schema的有效性
FrontendPrivileges
privileges
=
c
.
getPrivileges
();
if
(
schema
==
null
||
!
privileges
.
schemaExists
(
schema
))
{
c
.
writeErrMessage
(
ErrorCode
.
ER_BAD_DB_ERROR
,
"Unknown database '"
+
schema
+
"'"
);
return
;
}
String
user
=
c
.
getUser
();
if
(!
privileges
.
userExists
(
user
,
c
.
getHost
()))
{
c
.
writeErrMessage
(
ErrorCode
.
ER_ACCESS_DENIED_ERROR
,
"Access denied for user '"
+
c
.
getUser
()
+
"'"
);
return
;
}
Set
<
String
>
schemas
=
privileges
.
getUserSchemas
(
user
);
if
(
schemas
==
null
||
schemas
.
size
()
==
0
||
schemas
.
contains
(
schema
))
{
c
.
setSchema
(
schema
);
ByteBuffer
buffer
=
c
.
allocate
();
c
.
write
(
c
.
writeToBuffer
(
OkPacket
.
OK
,
buffer
));
}
else
{
String
msg
=
"Access denied for user '"
+
c
.
getUser
()
+
"' to database '"
+
schema
+
"'"
;
c
.
writeErrMessage
(
ErrorCode
.
ER_DBACCESS_DENIED_ERROR
,
msg
);
}
}
}
bee-engine/src/main/resources/META-INF/plexus/components.xml
浏览文件 @
660b089f
...
@@ -93,62 +93,12 @@
...
@@ -93,62 +93,12 @@
</requirements>
</requirements>
</component>
</component>
<component>
<component>
<role>
com.dianping.bee.server.handler.SimpleShowHandler
</role>
<role>
com.dianping.bee.server.SimpleServerQueryHandler
</role>
<implementation>
com.dianping.bee.server.handler.SimpleShowHandler
</implementation>
<implementation>
com.dianping.bee.server.SimpleServerQueryHandler
</implementation>
<requirements>
<requirement>
<role>
com.dianping.bee.engine.spi.TableProviderManager
</role>
</requirement>
</requirements>
</component>
<component>
<role>
com.dianping.bee.server.handler.SimpleUseHandler
</role>
<implementation>
com.dianping.bee.server.handler.SimpleUseHandler
</implementation>
</component>
<component>
<role>
com.dianping.bee.server.handler.SimpleDescHandler
</role>
<implementation>
com.dianping.bee.server.handler.SimpleDescHandler
</implementation>
<requirements>
<requirement>
<role>
com.dianping.bee.engine.spi.TableProviderManager
</role>
</requirement>
</requirements>
</component>
<component>
<role>
com.dianping.bee.server.handler.SimpleSelectHandler
</role>
<implementation>
com.dianping.bee.server.handler.SimpleSelectHandler
</implementation>
<requirements>
<requirement>
<role>
com.dianping.bee.engine.spi.StatementManager
</role>
</requirement>
</requirements>
</component>
<component>
<role>
com.dianping.bee.server.handler.SimpleServerQueryHandler
</role>
<implementation>
com.dianping.bee.server.handler.SimpleServerQueryHandler
</implementation>
<instantiation-strategy>
per-lookup
</instantiation-strategy>
<instantiation-strategy>
per-lookup
</instantiation-strategy>
<requirements>
<requirements>
<requirement>
<requirement>
<role>
com.dianping.bee.server.handler.SimpleSelectHandler
</role>
<role>
com.dianping.bee.engine.spi.handler.internal.SelectHandler
</role>
</requirement>
<requirement>
<role>
com.dianping.bee.server.handler.SimpleShowHandler
</role>
</requirement>
<requirement>
<role>
com.dianping.bee.server.handler.SimpleDescHandler
</role>
</requirement>
<requirement>
<role>
com.dianping.bee.server.handler.SimpleUseHandler
</role>
</requirement>
</requirements>
</component>
<component>
<role>
com.dianping.bee.engine.spi.handler.internal.DefaultServerQueryHandler
</role>
<implementation>
com.dianping.bee.engine.spi.handler.internal.DefaultServerQueryHandler
</implementation>
<instantiation-strategy>
per-lookup
</instantiation-strategy>
<requirements>
<requirement>
<role>
com.dianping.bee.server.handler.SimpleSelectHandler
</role>
</requirement>
</requirement>
<requirement>
<requirement>
<role>
com.dianping.bee.engine.spi.handler.internal.ShowHandler
</role>
<role>
com.dianping.bee.engine.spi.handler.internal.ShowHandler
</role>
...
@@ -178,5 +128,14 @@
...
@@ -178,5 +128,14 @@
</requirement>
</requirement>
</requirements>
</requirements>
</component>
</component>
<component>
<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>
</requirement>
</requirements>
</component>
</components>
</components>
</plexus>
</plexus>
bee-engine/src/test/java/com/dianping/bee/jdbc/JDBCTest.java
浏览文件 @
660b089f
...
@@ -34,7 +34,7 @@ public class JDBCTest extends ComponentTestCase {
...
@@ -34,7 +34,7 @@ public class JDBCTest extends ComponentTestCase {
// @Test
// @Test
public
void
testConnection
()
{
public
void
testConnection
()
{
Connection
conn
=
null
;
Connection
conn
=
null
;
String
url
=
"jdbc:mysql://
localhost
:2330/"
;
String
url
=
"jdbc:mysql://
127.0.0.1
:2330/"
;
String
dbName
=
"cat"
;
String
dbName
=
"cat"
;
String
driver
=
"com.mysql.jdbc.Driver"
;
String
driver
=
"com.mysql.jdbc.Driver"
;
String
userName
=
"test"
;
String
userName
=
"test"
;
...
@@ -53,28 +53,27 @@ public class JDBCTest extends ComponentTestCase {
...
@@ -53,28 +53,27 @@ public class JDBCTest extends ComponentTestCase {
}
}
@Test
@Test
public
void
testQuery
()
{
public
void
testQuery
()
throws
Exception
{
Connection
conn
=
null
;
Connection
conn
=
null
;
String
url
=
"jdbc:mysql://localhost:2330/"
;
String
url
=
"jdbc:mysql://localhost:2330/"
;
String
dbName
=
"cat"
;
String
dbName
=
"cat"
;
String
driver
=
"com.mysql.jdbc.Driver"
;
String
driver
=
"com.mysql.jdbc.Driver"
;
String
userName
=
"test"
;
String
userName
=
"test"
;
String
password
=
"test"
;
String
password
=
"test"
;
try
{
Class
.
forName
(
driver
).
newInstance
();
Class
.
forName
(
driver
).
newInstance
();
System
.
out
.
println
(
"Driver loaded"
);
System
.
out
.
println
(
"Driver loaded"
);
DriverManager
.
setLoginTimeout
(
600
);
DriverManager
.
setLoginTimeout
(
600
);
conn
=
DriverManager
.
getConnection
(
url
+
dbName
,
userName
,
password
);
conn
=
DriverManager
.
getConnection
(
url
+
dbName
,
userName
,
password
);
System
.
out
.
println
(
"Connected to the database"
);
System
.
out
.
println
(
"Connected to the database"
);
Statement
stmt
=
conn
.
createStatement
();
Statement
stmt
=
conn
.
createStatement
();
ResultSet
rs
=
stmt
.
executeQuery
(
"select type, sum(failures) from transaction where domain=? and starttime=?"
);
ResultSet
rs
=
stmt
.
executeQuery
(
"select type, sum(failures) from transaction where domain=? and starttime=?"
);
while
(
rs
.
next
())
{
System
.
out
.
println
(
rs
.
getString
(
1
));
while
(
rs
.
next
())
{
}
System
.
out
.
println
(
rs
.
getString
(
1
));
conn
.
close
();
System
.
out
.
println
(
"Disconnected from database"
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
conn
.
close
();
System
.
out
.
println
(
"Disconnected from database"
);
}
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录