本文整理汇总了Golang中github.com/flike/kingshard/sqlparser.GetTableName函数的典型用法代码示例。如果您正苦于以下问题:Golang GetTableName函数的具体用法?Golang GetTableName怎么用?Golang GetTableName使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了GetTableName函数的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: getDeleteExecDB
//get the execute database for delete sql
func (c *ClientConn) getDeleteExecDB(tokens []string, tokensLen int) (*ExecuteDB, error) {
executeDB := new(ExecuteDB)
schema := c.proxy.schema
rules := schema.rule.Rules
if len(rules) != 0 {
for i := 1; i < tokensLen; i++ {
if strings.ToLower(tokens[i]) == mysql.TK_STR_FROM {
if i+1 < tokensLen {
tableName := sqlparser.GetTableName(tokens[i+1])
if _, ok := rules[tableName]; ok {
return nil, nil
}
}
}
}
}
err := c.setExecuteNode(tokens, tokensLen, executeDB)
if err != nil {
return nil, err
}
return executeDB, nil
}
开发者ID:CrocdileChan,项目名称:kingshard,代码行数:26,代码来源:conn_preshard.go
示例2: getSelectExecDB
//get the execute database for select sql
func (c *ClientConn) getSelectExecDB(tokens []string, tokensLen int) (*ExecuteDB, error) {
executeDB := new(ExecuteDB)
schema := c.proxy.schema
rules := schema.rule.Rules
executeDB.IsSlave = true
if len(rules) != 0 {
for i := 1; i < tokensLen; i++ {
if strings.ToLower(tokens[i]) == mysql.TK_STR_FROM {
if i+1 < tokensLen {
tableName := sqlparser.GetTableName(tokens[i+1])
if _, ok := rules[tableName]; ok {
return nil, nil
} else {
//if the table is not shard table,send the sql
//to default db
break
}
}
}
if strings.ToLower(tokens[i]) == mysql.TK_STR_LAST_INSERT_ID {
return nil, nil
}
}
}
err := c.setExecuteNode(tokens, tokensLen, executeDB)
if err != nil {
return nil, err
}
return executeDB, nil
}
开发者ID:snower,项目名称:kingshard,代码行数:36,代码来源:conn_preshard.go
示例3: GetExecNode
func (c *ClientConn) GetExecNode(tokens []string,
sql string) (*backend.Node, bool, error) {
var execNode *backend.Node
var fromSlave bool
schema := c.proxy.schemas[c.proxy.db]
rules := schema.rule.Rules
if 0 < len(rules) {
tokensLen := len(tokens)
if 0 < tokensLen {
tokenId, ok := mysql.WHITE_TOKEN_MAP[strings.ToLower(tokens[0])]
if ok == true {
switch tokenId {
case mysql.TK_ID_SELECT, mysql.TK_ID_DELETE:
for i := 1; i < tokensLen; i++ {
if strings.ToLower(tokens[i]) == mysql.TK_STR_FROM {
if i+1 < tokensLen {
tableName := sqlparser.GetTableName(tokens[i+1])
if _, ok := rules[tableName]; ok {
return nil, false, nil
}
}
}
}
case mysql.TK_ID_INSERT, mysql.TK_ID_REPLACE:
for i := 0; i < tokensLen; i++ {
if strings.ToLower(tokens[i]) == mysql.TK_STR_INTO {
if i+1 < tokensLen {
tableName := sqlparser.GetTableName(tokens[i+1])
if _, ok := rules[tableName]; ok {
return nil, false, nil
}
}
}
}
case mysql.TK_ID_UPDATE:
for i := 0; i < tokensLen; i++ {
if strings.ToLower(tokens[i]) == mysql.TK_STR_SET {
tableName := sqlparser.GetTableName(tokens[i-1])
if _, ok := rules[tableName]; ok {
return nil, false, nil
}
}
}
default:
return nil, false, nil
}
}
}
//get node
if 2 <= tokensLen {
if tokens[0][0] == mysql.COMMENT_PREFIX {
nodeName := strings.Trim(tokens[0], mysql.COMMENT_STRING)
if c.schema.nodes[nodeName] != nil {
execNode = c.schema.nodes[nodeName]
}
//select
if mysql.WHITE_TOKEN_MAP[tokens[1]] == mysql.TK_ID_SELECT {
fromSlave = true
}
}
}
}
if execNode == nil {
defaultRule := c.schema.rule.DefaultRule
if len(defaultRule.Nodes) == 0 {
return nil, false, errors.ErrNoDefaultNode
}
execNode = c.proxy.GetNode(defaultRule.Nodes[0])
}
return execNode, fromSlave, nil
}
开发者ID:velsai,项目名称:kingshard,代码行数:74,代码来源:conn_query.go
示例4: GetExecNode
func (c *ClientConn) GetExecNode(tokens []string,
sql string) (*backend.Node, bool, error) {
var execNode *backend.Node
var fromSlave bool
schema := c.proxy.schema
rules := schema.rule.Rules
tokensLen := len(tokens)
if 0 < tokensLen {
tokenId, ok := mysql.PARSE_TOKEN_MAP[strings.ToLower(tokens[0])]
if ok == true {
switch tokenId {
case mysql.TK_ID_SELECT, mysql.TK_ID_DELETE:
if len(rules) == 0 {
if tokenId == mysql.TK_ID_SELECT {
fromSlave = true
}
break
}
for i := 1; i < tokensLen; i++ {
if strings.ToLower(tokens[i]) == mysql.TK_STR_FROM {
if i+1 < tokensLen {
tableName := sqlparser.GetTableName(tokens[i+1])
if _, ok := rules[tableName]; ok {
return nil, false, nil
} else {
if tokenId == mysql.TK_ID_SELECT {
fromSlave = true
}
}
}
}
}
case mysql.TK_ID_INSERT, mysql.TK_ID_REPLACE:
if len(rules) == 0 {
break
}
for i := 0; i < tokensLen; i++ {
if strings.ToLower(tokens[i]) == mysql.TK_STR_INTO {
if i+1 < tokensLen {
tableName := sqlparser.GetInsertTableName(tokens[i+1])
if _, ok := rules[tableName]; ok {
return nil, false, nil
}
}
}
}
case mysql.TK_ID_UPDATE:
if len(rules) == 0 {
break
}
for i := 0; i < tokensLen; i++ {
if strings.ToLower(tokens[i]) == mysql.TK_STR_SET {
tableName := sqlparser.GetTableName(tokens[i-1])
if _, ok := rules[tableName]; ok {
return nil, false, nil
}
}
}
case mysql.TK_ID_SET:
if len(tokens) < 2 {
break
}
tmp1 := strings.Split(sql, "=")
tmp2 := strings.Split(tmp1[0], " ")
secondWord := strings.ToLower(tmp2[1])
if secondWord == mysql.TK_STR_NAMES ||
secondWord == mysql.TK_STR_RESULTS ||
secondWord == mysql.TK_STR_CLIENT ||
secondWord == mysql.TK_STR_CONNECTION ||
secondWord == mysql.TK_STR_AUTOCOMMIT {
return nil, false, nil
}
default:
return nil, false, nil
}
}
}
//get node
if 2 <= tokensLen {
if tokens[0][0] == mysql.COMMENT_PREFIX {
nodeName := strings.Trim(tokens[0], mysql.COMMENT_STRING)
if c.schema.nodes[nodeName] != nil {
execNode = c.schema.nodes[nodeName]
}
//select
if mysql.PARSE_TOKEN_MAP[tokens[1]] == mysql.TK_ID_SELECT {
fromSlave = true
}
}
}
if execNode == nil {
defaultRule := c.schema.rule.DefaultRule
if len(defaultRule.Nodes) == 0 {
return nil, false, errors.ErrNoDefaultNode
}
execNode = c.proxy.GetNode(defaultRule.Nodes[0])
//.........这里部分代码省略.........
开发者ID:zhaoweikid,项目名称:kingshard,代码行数:101,代码来源:conn_query.go
注:本文中的github.com/flike/kingshard/sqlparser.GetTableName函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论