func validateValue(col *schema.TableColumn, value sqltypes.Value) error { if value.IsNull() { return nil } if sqltypes.IsIntegral(col.Type) { if !value.IsNumeric() { return NewTabletError(ErrFail, vtrpc.ErrorCode_BAD_INPUT, "type mismatch, expecting numeric type for %v for column: %v", value, col) } } else if col.Type == sqltypes.VarBinary { if !value.IsString() { return NewTabletError(ErrFail, vtrpc.ErrorCode_BAD_INPUT, "type mismatch, expecting string type for %v for column: %v", value, col) } } return nil }
func validateValue(col *schema.TableColumn, value sqltypes.Value) { if value.IsNull() { return } switch col.Category { case schema.CAT_NUMBER: if !value.IsNumeric() { panic(NewTabletError(FAIL, "Type mismatch, expecting numeric type for %v", value)) } case schema.CAT_VARBINARY: if !value.IsString() { panic(NewTabletError(FAIL, "Type mismatch, expecting string type for %v", value)) } } }
func validateValue(col *schema.TableColumn, value sqltypes.Value) error { if value.IsNull() { return nil } switch col.Category { case schema.CAT_NUMBER: if !value.IsNumeric() { return NewTabletError(ErrFail, "type mismatch, expecting numeric type for %v for column: %v", value, col) } case schema.CAT_VARBINARY: if !value.IsString() { return NewTabletError(ErrFail, "type mismatch, expecting string type for %v for column: %v", value, col) } } return nil }
// getWhereClause returns a whereClause based on desired upper and lower // bounds for primary key. func (qs *QuerySplitter) getWhereClause(whereClause *sqlparser.Where, bindVars map[string]interface{}, start, end sqltypes.Value) *sqlparser.Where { var startClause *sqlparser.ComparisonExpr var endClause *sqlparser.ComparisonExpr var clauses sqlparser.BoolExpr // No upper or lower bound, just return the where clause of original query if start.IsNull() && end.IsNull() { return whereClause } pk := &sqlparser.ColName{ Name: sqlparser.SQLName(qs.splitColumn), } if !start.IsNull() { startClause = &sqlparser.ComparisonExpr{ Operator: sqlparser.GreaterEqualStr, Left: pk, Right: sqlparser.ValArg([]byte(":" + startBindVarName)), } if start.IsNumeric() { v, _ := start.ParseInt64() bindVars[startBindVarName] = v } else if start.IsString() { bindVars[startBindVarName] = start.Raw() } else if start.IsFractional() { v, _ := start.ParseFloat64() bindVars[startBindVarName] = v } } // splitColumn < end if !end.IsNull() { endClause = &sqlparser.ComparisonExpr{ Operator: sqlparser.LessThanStr, Left: pk, Right: sqlparser.ValArg([]byte(":" + endBindVarName)), } if end.IsNumeric() { v, _ := end.ParseInt64() bindVars[endBindVarName] = v } else if end.IsString() { bindVars[endBindVarName] = end.Raw() } else if end.IsFractional() { v, _ := end.ParseFloat64() bindVars[endBindVarName] = v } } if startClause == nil { clauses = endClause } else { if endClause == nil { clauses = startClause } else { // splitColumn >= start AND splitColumn < end clauses = &sqlparser.AndExpr{ Left: startClause, Right: endClause, } } } if whereClause != nil { clauses = &sqlparser.AndExpr{ Left: &sqlparser.ParenBoolExpr{Expr: whereClause.Expr}, Right: &sqlparser.ParenBoolExpr{Expr: clauses}, } } return &sqlparser.Where{ Type: sqlparser.WhereStr, Expr: clauses, } }