diff options
Diffstat (limited to 'core')
-rw-r--r-- | core/vm/sqlvm/ast/ast.go | 20 | ||||
-rw-r--r-- | core/vm/sqlvm/ast/types.go | 10 | ||||
-rw-r--r-- | core/vm/sqlvm/ast/types_test.go | 3 |
3 files changed, 19 insertions, 14 deletions
diff --git a/core/vm/sqlvm/ast/ast.go b/core/vm/sqlvm/ast/ast.go index 672770b84..80daacfe1 100644 --- a/core/vm/sqlvm/ast/ast.go +++ b/core/vm/sqlvm/ast/ast.go @@ -341,15 +341,15 @@ func (n *IntTypeNode) GetType() (DataType, errors.ErrorCode, string) { code = errors.ErrorCodeInvalidUintSize } if !isMultiple { - return DataTypeUnknown, code, fmt.Sprintf( + return DataTypeBad, code, fmt.Sprintf( "%s size %d is not a multiple of 8", name, n.Size) } if !isNotZero { - return DataTypeUnknown, code, fmt.Sprintf( + return DataTypeBad, code, fmt.Sprintf( "%s size cannot be zero", name) } if !isInRange { - return DataTypeUnknown, code, fmt.Sprintf( + return DataTypeBad, code, fmt.Sprintf( "%s size %d cannot be larger than 256", name, n.Size) } panic("unreachable") @@ -395,15 +395,15 @@ func (n *FixedTypeNode) GetType() (DataType, errors.ErrorCode, string) { code = errors.ErrorCodeInvalidFixedSize } if !sizeIsMultiple { - return DataTypeUnknown, code, fmt.Sprintf( + return DataTypeBad, code, fmt.Sprintf( "%s size %d is not a multiple of 8", name, n.Size) } if !sizeIsNotZero { - return DataTypeUnknown, code, fmt.Sprintf( + return DataTypeBad, code, fmt.Sprintf( "%s size cannot be zero", name) } if !sizeIsInRange { - return DataTypeUnknown, code, fmt.Sprintf( + return DataTypeBad, code, fmt.Sprintf( "%s size %d cannot be larger than 256", name, n.Size) } code = errors.ErrorCodeInvalidFixedFractionalDigits @@ -411,7 +411,7 @@ func (n *FixedTypeNode) GetType() (DataType, errors.ErrorCode, string) { code = errors.ErrorCodeInvalidUfixedFractionalDigits } if !fractionalDigitsInRange { - return DataTypeUnknown, code, fmt.Sprintf( + return DataTypeBad, code, fmt.Sprintf( "%s fractional digits %d cannot be larger than 80", name, n.FractionalDigits) } @@ -467,10 +467,10 @@ func (n *FixedBytesTypeNode) GetType() (DataType, errors.ErrorCode, string) { if !isNotZero || !isInRange { code := errors.ErrorCodeInvalidBytesSize if !isNotZero { - return DataTypeUnknown, code, "bytes size cannot be zero" + return DataTypeBad, code, "bytes size cannot be zero" } if !isInRange { - return DataTypeUnknown, code, fmt.Sprintf( + return DataTypeBad, code, fmt.Sprintf( "bytes size %d cannot be larger than 32", n.Size) } panic("unreachable") @@ -881,7 +881,7 @@ func (n *CastOperatorNode) GetType() DataType { if dt, code, _ := n.TargetType.GetType(); code == errors.ErrorCodeNil { return dt } - return DataTypeUnknown + return DataTypeBad } // --------------------------------------------------------------------------- diff --git a/core/vm/sqlvm/ast/types.go b/core/vm/sqlvm/ast/types.go index 41c35ac78..9d7efc430 100644 --- a/core/vm/sqlvm/ast/types.go +++ b/core/vm/sqlvm/ast/types.go @@ -2,6 +2,7 @@ package ast import ( "fmt" + "math" "math/big" "github.com/shopspring/decimal" @@ -27,7 +28,7 @@ type DataType uint16 // DataTypeMajor enums. const ( - DataTypeMajorUnknown DataTypeMajor = iota + DataTypeMajorPending DataTypeMajor = iota DataTypeMajorSpecial DataTypeMajorBool DataTypeMajorAddress @@ -47,8 +48,11 @@ const ( DataTypeMinorSpecialDefault DataTypeMinor = 0x02 ) -// DataTypeUnknown for unknown data type. -const DataTypeUnknown DataType = 0 +// Special data types which are commonly used. +const ( + DataTypePending DataType = (DataType(DataTypeMajorPending) << 8) | DataType(DataTypeMinorDontCare) + DataTypeBad DataType = math.MaxUint16 +) // DecomposeDataType to major and minor part with given data type. func DecomposeDataType(t DataType) (DataTypeMajor, DataTypeMinor) { diff --git a/core/vm/sqlvm/ast/types_test.go b/core/vm/sqlvm/ast/types_test.go index b44f818cb..89a000251 100644 --- a/core/vm/sqlvm/ast/types_test.go +++ b/core/vm/sqlvm/ast/types_test.go @@ -82,7 +82,8 @@ func (s *TypesTestSuite) TestEncodeDataTypeError() { } func (s *TypesTestSuite) TestDecodeDataTypeError() { - s.requireDecodeDataTypeError(DataTypeUnknown) + s.requireDecodeDataTypeError(DataTypePending) + s.requireDecodeDataTypeError(DataTypeBad) s.requireDecodeDataTypeError(ComposeDataType(DataTypeMajorInt, 0x20)) s.requireDecodeDataTypeError(ComposeDataType(DataTypeMajorUint, 0x20)) s.requireDecodeDataTypeError(ComposeDataType(DataTypeMajorFixedBytes, 0x20)) |