Skip to content
Snippets Groups Projects
Unverified Commit 48f78b6a authored by dongdongyang's avatar dongdongyang Committed by GitHub
Browse files

Migration for sinh/tan (#2754)

parent 25fd0798
No related branches found
No related tags found
No related merge requests found
// Copyright 2022 Matrix Origin
//
// 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,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package unary
import (
"github.com/matrixorigin/matrixone/pkg/container/nulls"
"github.com/matrixorigin/matrixone/pkg/container/types"
"github.com/matrixorigin/matrixone/pkg/container/vector"
"github.com/matrixorigin/matrixone/pkg/encoding"
"github.com/matrixorigin/matrixone/pkg/vectorize/sinh"
"github.com/matrixorigin/matrixone/pkg/vm/process"
)
// sinh function's evaluation for arguments: [uint64]
func SinhUint64(vs []*vector.Vector, proc *process.Process) (*vector.Vector, error) {
origVec := vs[0]
origVecCol := origVec.Col.([]uint64)
if origVec.IsScalar() {
if origVec.IsScalarNull() {
return proc.AllocScalarNullVector(types.Type{Oid: types.T_float64, Size: 8}), nil
}
resultVector := proc.AllocScalarVector(types.Type{Oid: types.T_float64, Size: 8})
results := make([]float64, 1)
nulls.Set(resultVector.Nsp, origVec.Nsp)
vector.SetCol(resultVector, sinh.SinhUint64(origVecCol, results))
return resultVector, nil
} else {
resultVector, err := proc.AllocVector(types.Type{Oid: types.T_float64, Size: 8}, 8*int64(len(origVecCol)))
if err != nil {
return nil, err
}
results := encoding.DecodeFloat64Slice(resultVector.Data)
results = results[:len(origVecCol)]
resultVector.Col = results
nulls.Set(resultVector.Nsp, origVec.Nsp)
vector.SetCol(resultVector, sinh.SinhUint64(origVecCol, results))
return resultVector, nil
}
}
// sinh function's evaluation for arguments: [int64]
func SinhInt64(vs []*vector.Vector, proc *process.Process) (*vector.Vector, error) {
origVec := vs[0]
origVecCol := origVec.Col.([]int64)
if origVec.IsScalar() {
if origVec.IsScalarNull() {
return proc.AllocScalarNullVector(types.Type{Oid: types.T_float64, Size: 8}), nil
}
resultVector := proc.AllocScalarVector(types.Type{Oid: types.T_float64, Size: 8})
results := make([]float64, 1)
nulls.Set(resultVector.Nsp, origVec.Nsp)
vector.SetCol(resultVector, sinh.SinhInt64(origVecCol, results))
return resultVector, nil
} else {
resultVector, err := proc.AllocVector(types.Type{Oid: types.T_float64, Size: 8}, 8*int64(len(origVecCol)))
if err != nil {
return nil, err
}
results := encoding.DecodeFloat64Slice(resultVector.Data)
results = results[:len(origVecCol)]
resultVector.Col = results
nulls.Set(resultVector.Nsp, origVec.Nsp)
vector.SetCol(resultVector, sinh.SinhInt64(origVecCol, results))
return resultVector, nil
}
}
// sinh function's evaluation for arguments: [float64]
func SinhFloat64(vs []*vector.Vector, proc *process.Process) (*vector.Vector, error) {
origVec := vs[0]
origVecCol := origVec.Col.([]float64)
if origVec.IsScalar() {
if origVec.IsScalarNull() {
return proc.AllocScalarNullVector(types.Type{Oid: types.T_float64, Size: 8}), nil
}
resultVector := proc.AllocScalarVector(types.Type{Oid: types.T_float64, Size: 8})
results := make([]float64, 1)
nulls.Set(resultVector.Nsp, origVec.Nsp)
vector.SetCol(resultVector, sinh.SinhFloat64(origVecCol, results))
return resultVector, nil
} else {
resultVector, err := proc.AllocVector(types.Type{Oid: types.T_float64, Size: 8}, 8*int64(len(origVecCol)))
if err != nil {
return nil, err
}
results := encoding.DecodeFloat64Slice(resultVector.Data)
results = results[:len(origVecCol)]
resultVector.Col = results
nulls.Set(resultVector.Nsp, origVec.Nsp)
vector.SetCol(resultVector, sinh.SinhFloat64(origVecCol, results))
return resultVector, nil
}
}
// Copyright 2022 Matrix Origin
//
// 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,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package unary
import (
"github.com/matrixorigin/matrixone/pkg/container/nulls"
"github.com/matrixorigin/matrixone/pkg/container/types"
"github.com/matrixorigin/matrixone/pkg/container/vector"
"github.com/matrixorigin/matrixone/pkg/encoding"
"github.com/matrixorigin/matrixone/pkg/vectorize/tan"
"github.com/matrixorigin/matrixone/pkg/vm/process"
)
// tan function's evaluation for arguments: [uint64]
func TanUint64(vs []*vector.Vector, proc *process.Process) (*vector.Vector, error) {
origVec := vs[0]
origVecCol := origVec.Col.([]uint64)
if origVec.IsScalar() {
if origVec.IsScalarNull() {
return proc.AllocScalarNullVector(types.Type{Oid: types.T_float64, Size: 8}), nil
}
resultVector := proc.AllocScalarVector(types.Type{Oid: types.T_float64, Size: 8})
results := make([]float64, 1)
nulls.Set(resultVector.Nsp, origVec.Nsp)
vector.SetCol(resultVector, tan.TanUint64(origVecCol, results))
return resultVector, nil
} else {
resultVector, err := proc.AllocVector(types.Type{Oid: types.T_float64, Size: 8}, 8*int64(len(origVecCol)))
if err != nil {
return nil, err
}
results := encoding.DecodeFloat64Slice(resultVector.Data)
results = results[:len(origVecCol)]
resultVector.Col = results
nulls.Set(resultVector.Nsp, origVec.Nsp)
vector.SetCol(resultVector, tan.TanUint64(origVecCol, results))
return resultVector, nil
}
}
// tan function's evaluation for arguments: [int64]
func TanInt64(vs []*vector.Vector, proc *process.Process) (*vector.Vector, error) {
origVec := vs[0]
origVecCol := origVec.Col.([]int64)
if origVec.IsScalar() {
if origVec.IsScalarNull() {
return proc.AllocScalarNullVector(types.Type{Oid: types.T_float64, Size: 8}), nil
}
resultVector := proc.AllocScalarVector(types.Type{Oid: types.T_float64, Size: 8})
results := make([]float64, 1)
nulls.Set(resultVector.Nsp, origVec.Nsp)
vector.SetCol(resultVector, tan.TanInt64(origVecCol, results))
return resultVector, nil
} else {
resultVector, err := proc.AllocVector(types.Type{Oid: types.T_float64, Size: 8}, 8*int64(len(origVecCol)))
if err != nil {
return nil, err
}
results := encoding.DecodeFloat64Slice(resultVector.Data)
results = results[:len(origVecCol)]
resultVector.Col = results
nulls.Set(resultVector.Nsp, origVec.Nsp)
vector.SetCol(resultVector, tan.TanInt64(origVecCol, results))
return resultVector, nil
}
}
// tan function's evaluation for arguments: [float64]
func TanFloat64(vs []*vector.Vector, proc *process.Process) (*vector.Vector, error) {
origVec := vs[0]
origVecCol := origVec.Col.([]float64)
if origVec.IsScalar() {
if origVec.IsScalarNull() {
return proc.AllocScalarNullVector(types.Type{Oid: types.T_float64, Size: 8}), nil
}
resultVector := proc.AllocScalarVector(types.Type{Oid: types.T_float64, Size: 8})
results := make([]float64, 1)
nulls.Set(resultVector.Nsp, origVec.Nsp)
vector.SetCol(resultVector, tan.TanFloat64(origVecCol, results))
return resultVector, nil
} else {
resultVector, err := proc.AllocVector(types.Type{Oid: types.T_float64, Size: 8}, 8*int64(len(origVecCol)))
if err != nil {
return nil, err
}
results := encoding.DecodeFloat64Slice(resultVector.Data)
results = results[:len(origVecCol)]
resultVector.Col = results
nulls.Set(resultVector.Nsp, origVec.Nsp)
vector.SetCol(resultVector, tan.TanFloat64(origVecCol, results))
return resultVector, nil
}
}
...@@ -1596,4 +1596,62 @@ var builtins = map[int][]Function{ ...@@ -1596,4 +1596,62 @@ var builtins = map[int][]Function{
Fn: nil, Fn: nil,
}, },
}, },
TAN: {
{
Index: 0,
Flag: plan.Function_STRICT,
Layout: STANDARD_FUNCTION,
Args: []types.T{types.T_uint64},
ReturnTyp: types.T_float64,
TypeCheckFn: strictTypeCheck,
Fn: unary.TanUint64,
},
{
Index: 1,
Flag: plan.Function_STRICT,
Layout: STANDARD_FUNCTION,
Args: []types.T{types.T_int64},
ReturnTyp: types.T_float64,
TypeCheckFn: strictTypeCheck,
Fn: unary.TanInt64,
},
{
Index: 2,
Flag: plan.Function_STRICT,
Layout: STANDARD_FUNCTION,
Args: []types.T{types.T_float64},
ReturnTyp: types.T_float64,
TypeCheckFn: strictTypeCheck,
Fn: unary.TanFloat64,
},
},
SINH: {
{
Index: 0,
Flag: plan.Function_STRICT,
Layout: STANDARD_FUNCTION,
Args: []types.T{types.T_uint64},
ReturnTyp: types.T_float64,
TypeCheckFn: strictTypeCheck,
Fn: unary.SinhUint64,
},
{
Index: 1,
Flag: plan.Function_STRICT,
Layout: STANDARD_FUNCTION,
Args: []types.T{types.T_int64},
ReturnTyp: types.T_float64,
TypeCheckFn: strictTypeCheck,
Fn: unary.SinhInt64,
},
{
Index: 2,
Flag: plan.Function_STRICT,
Layout: STANDARD_FUNCTION,
Args: []types.T{types.T_float64},
ReturnTyp: types.T_float64,
TypeCheckFn: strictTypeCheck,
Fn: unary.SinhFloat64,
},
},
} }
...@@ -151,6 +151,7 @@ const ( ...@@ -151,6 +151,7 @@ const (
RTRIM // RTRIM RTRIM // RTRIM
SIGN // SIGN SIGN // SIGN
SIN // SIN SIN // SIN
SINH //SINH
SPACE SPACE
SPLIT // SPLIT SPLIT // SPLIT
STARCOUNT // STARTCOUNT STARCOUNT // STARTCOUNT
...@@ -267,7 +268,9 @@ var functionIdRegister = map[string]int32{ ...@@ -267,7 +268,9 @@ var functionIdRegister = map[string]int32{
"reverse": REVERSE, "reverse": REVERSE,
"rtrim": RTRIM, "rtrim": RTRIM,
"sin": SIN, "sin": SIN,
"sinh": SINH,
"space": SPACE, "space": SPACE,
"tan": TAN,
"weekday": WEEKDAY, "weekday": WEEKDAY,
"year": YEAR, "year": YEAR,
"extract": EXTRACT, "extract": EXTRACT,
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment