mirror of
https://github.com/featurebasedb/featurebase.git
synced 2026-08-28 10:54:59 +00:00
* create function, create/drop model; re-introduced limit; added COPY; var(); corr() * review feedback
71 lines
2.2 KiB
Go
71 lines
2.2 KiB
Go
package planner
|
|
|
|
import (
|
|
"github.com/featurebasedb/featurebase/v3/sql3"
|
|
"github.com/featurebasedb/featurebase/v3/sql3/parser"
|
|
)
|
|
|
|
func (p *ExecutionPlanner) analyzeUserDefinedFunction(call *parser.Call, scope parser.Statement, function *functionSystemObject) (parser.Expr, error) {
|
|
// TODO(pok) removing user defined functions for now
|
|
// // hard code to 1 string parameter
|
|
// if len(call.Args) != 1 {
|
|
// return nil, sql3.NewErrCallParameterCountMismatch(call.Rparen.Line, call.Rparen.Column, call.Name.Name, 2, len(call.Args))
|
|
// }
|
|
|
|
// // arg 1
|
|
// argType := parser.NewDataTypeString()
|
|
// if !typesAreAssignmentCompatible(argType, call.Args[0].DataType()) {
|
|
// return nil, sql3.NewErrParameterTypeMistmatch(call.Args[0].Pos().Line, call.Args[0].Pos().Column, call.Args[0].DataType().TypeDescription(), argType.TypeDescription())
|
|
// }
|
|
|
|
// //return string
|
|
// call.ResultDataType = parser.NewDataTypeString()
|
|
|
|
// return call, nil
|
|
return nil, sql3.NewErrUnsupported(0, 0, false, "user defined functions")
|
|
}
|
|
|
|
func (n *callPlanExpression) evaluateUserDefinedFunction(currentRow []interface{}) (interface{}, error) {
|
|
// TODO(pok) removing what effectively is a remote code exploit
|
|
// we will come back to this to add sql udfs and external code later
|
|
|
|
// argEval, err := n.args[0].Evaluate(currentRow)
|
|
// if err != nil {
|
|
// return nil, err
|
|
// }
|
|
// // nil if anything is nil
|
|
// if argEval == nil {
|
|
// return nil, nil
|
|
// }
|
|
|
|
// //get the value
|
|
// coercedArg, err := coerceValue(n.args[0].Type(), parser.NewDataTypeString(), argEval, parser.Pos{Line: 0, Column: 0})
|
|
// if err != nil {
|
|
// return nil, err
|
|
// }
|
|
|
|
// arg, argOk := coercedArg.(string)
|
|
// if !argOk {
|
|
// return nil, sql3.NewErrInternalf("unable to convert value")
|
|
// }
|
|
|
|
// // save the body to a temp file
|
|
// file, err := os.CreateTemp("", "py-body")
|
|
// if err != nil {
|
|
// return nil, err
|
|
// }
|
|
// defer os.Remove(file.Name())
|
|
|
|
// file.Write([]byte(n.udfReference.body))
|
|
|
|
// cmd := exec.Command("python3", file.Name(), arg)
|
|
// stdout, err := cmd.Output()
|
|
|
|
// if err != nil {
|
|
// return nil, err
|
|
// }
|
|
|
|
// retVal := string(stdout)
|
|
// return retVal, nil
|
|
return nil, sql3.NewErrUnsupported(0, 0, false, "user defined functions")
|
|
}
|