forked from pingcap/tidb
-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
*: make parser package dependency as small as possible (pingcap#7989)
- Loading branch information
1 parent
24c0419
commit b06a5d4
Showing
18 changed files
with
472 additions
and
313 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,112 @@ | ||
// Copyright 2014 The ql Authors. All rights reserved. | ||
// Use of this source code is governed by a BSD-style | ||
// license that can be found in the LICENSES/QL-LICENSE file. | ||
|
||
// Copyright 2015 PingCAP, Inc. | ||
// | ||
// Licensed under the Apache License, Version 2.0 (the "License"); | ||
// you may not use this file except in compliance with the License. | ||
// You may obtain a copy of the License at | ||
// | ||
// http://www.apache.org/licenses/LICENSE-2.0 | ||
// | ||
// Unless required by applicable law or agreed to in writing, software | ||
// distributed under the License is distributed on an "AS IS" BASIS, | ||
// See the License for the specific language governing permissions and | ||
// limitations under the License. | ||
|
||
package types | ||
|
||
import ( | ||
"strings" | ||
|
||
"github.com/pingcap/tidb/mysql" | ||
"github.com/pingcap/tidb/terror" | ||
) | ||
|
||
// IsTypeBlob returns a boolean indicating whether the tp is a blob type. | ||
func IsTypeBlob(tp byte) bool { | ||
switch tp { | ||
case mysql.TypeTinyBlob, mysql.TypeMediumBlob, mysql.TypeBlob, mysql.TypeLongBlob: | ||
return true | ||
default: | ||
return false | ||
} | ||
} | ||
|
||
// IsTypeChar returns a boolean indicating | ||
// whether the tp is the char type like a string type or a varchar type. | ||
func IsTypeChar(tp byte) bool { | ||
return tp == mysql.TypeString || tp == mysql.TypeVarchar | ||
} | ||
|
||
var type2Str = map[byte]string{ | ||
mysql.TypeBit: "bit", | ||
mysql.TypeBlob: "text", | ||
mysql.TypeDate: "date", | ||
mysql.TypeDatetime: "datetime", | ||
mysql.TypeDecimal: "unspecified", | ||
mysql.TypeNewDecimal: "decimal", | ||
mysql.TypeDouble: "double", | ||
mysql.TypeEnum: "enum", | ||
mysql.TypeFloat: "float", | ||
mysql.TypeGeometry: "geometry", | ||
mysql.TypeInt24: "mediumint", | ||
mysql.TypeJSON: "json", | ||
mysql.TypeLong: "int", | ||
mysql.TypeLonglong: "bigint", | ||
mysql.TypeLongBlob: "longtext", | ||
mysql.TypeMediumBlob: "mediumtext", | ||
mysql.TypeNull: "null", | ||
mysql.TypeSet: "set", | ||
mysql.TypeShort: "smallint", | ||
mysql.TypeString: "char", | ||
mysql.TypeDuration: "time", | ||
mysql.TypeTimestamp: "timestamp", | ||
mysql.TypeTiny: "tinyint", | ||
mysql.TypeTinyBlob: "tinytext", | ||
mysql.TypeVarchar: "varchar", | ||
mysql.TypeVarString: "var_string", | ||
mysql.TypeYear: "year", | ||
} | ||
|
||
// TypeStr converts tp to a string. | ||
func TypeStr(tp byte) (r string) { | ||
return type2Str[tp] | ||
} | ||
|
||
// TypeToStr converts a field to a string. | ||
// It is used for converting Text to Blob, | ||
// or converting Char to Binary. | ||
// Args: | ||
// tp: type enum | ||
// cs: charset | ||
func TypeToStr(tp byte, cs string) (r string) { | ||
ts := type2Str[tp] | ||
if cs != "binary" { | ||
return ts | ||
} | ||
if IsTypeBlob(tp) { | ||
ts = strings.Replace(ts, "text", "blob", 1) | ||
} else if IsTypeChar(tp) { | ||
ts = strings.Replace(ts, "char", "binary", 1) | ||
} | ||
return ts | ||
} | ||
|
||
var ( | ||
dig2bytes = [10]int{0, 1, 1, 2, 2, 3, 3, 4, 4, 4} | ||
) | ||
|
||
// constant values. | ||
const ( | ||
digitsPerWord = 9 // A word holds 9 digits. | ||
wordSize = 4 // A word is 4 bytes int32. | ||
) | ||
|
||
const ( | ||
codeInvalidDefault = terror.ErrCode(mysql.ErrInvalidDefault) | ||
) | ||
|
||
// ErrInvalidDefault is returned when meet a invalid default value. | ||
var ErrInvalidDefault = terror.ClassTypes.New(codeInvalidDefault, "Invalid default value for '%s'") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
// Copyright 2017 PingCAP, Inc. | ||
// | ||
// Licensed under the Apache License, Version 2.0 (the "License"); | ||
// you may not use this file except in compliance with the License. | ||
// You may obtain a copy of the License at | ||
// | ||
// http://www.apache.org/licenses/LICENSE-2.0 | ||
// | ||
// Unless required by applicable law or agreed to in writing, software | ||
// distributed under the License is distributed on an "AS IS" BASIS, | ||
// See the License for the specific language governing permissions and | ||
// limitations under the License. | ||
|
||
package types | ||
|
||
// EvalType indicates the specified types that arguments and result of a built-in function should be. | ||
type EvalType byte | ||
|
||
const ( | ||
// ETInt represents type INT in evaluation. | ||
ETInt EvalType = iota | ||
// ETReal represents type REAL in evaluation. | ||
ETReal | ||
// ETDecimal represents type DECIMAL in evaluation. | ||
ETDecimal | ||
// ETString represents type STRING in evaluation. | ||
ETString | ||
// ETDatetime represents type DATETIME in evaluation. | ||
ETDatetime | ||
// ETTimestamp represents type TIMESTAMP in evaluation. | ||
ETTimestamp | ||
// ETDuration represents type DURATION in evaluation. | ||
ETDuration | ||
// ETJson represents type JSON in evaluation. | ||
ETJson | ||
) | ||
|
||
// IsStringKind returns true for ETString, ETDatetime, ETTimestamp, ETDuration, ETJson EvalTypes. | ||
func (et EvalType) IsStringKind() bool { | ||
return et == ETString || et == ETDatetime || | ||
et == ETTimestamp || et == ETDuration || et == ETJson | ||
} |
Oops, something went wrong.