当前位置: 首页>>代码示例>>Golang>>正文


Golang sqlparser.GetTableName函数代码示例

本文整理汇总了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;未经允许,请勿转载。