func NewEvaluableExpressionWithFunctions(expression string, functions map[string]ExpressionFunction) (*EvaluableExpression, error) {

	var ret *EvaluableExpression
	var err error

	ret = new(EvaluableExpression)
	ret.QueryDateFormat = isoDateFormat
	ret.inputExpression = expression

	ret.tokens, err = parseTokens(expression, functions)
	if err != nil {
		return nil, err
	}

	err = checkBalance(ret.tokens)
	if err != nil {
		return nil, err
	}

	err = checkExpressionSyntax(ret.tokens)
	if err != nil {
		return nil, err
	}

	ret.tokens, err = optimizeTokens(ret.tokens)
	if err != nil {
		return nil, err
	}

	ret.evaluationStages, err = planStages(ret.tokens)
	if err != nil {
		return nil, err
	}

	ret.ChecksTypes = true
	return ret, nil
}
func NewEvaluableExpressionWithFunctions(expression string, functions map[string]ExpressionFunction) (*EvaluableExpression, error) {

	var ret *EvaluableExpression
	var err error

	ret = new(EvaluableExpression)
	ret.QueryDateFormat = isoDateFormat
	ret.inputExpression = expression

	ret.tokens, err = parseTokens(expression, functions)
	if err != nil {
		return nil, err
	}

	err = checkBalance(ret.tokens)
	if err != nil {
		return nil, err
	}

	err = checkExpressionSyntax(ret.tokens)
	if err != nil {
		return nil, err
	}

	ret.tokens, err = optimizeTokens(ret.tokens)
	if err != nil {
		return nil, err
	}

	ret.evaluationStages, err = planStages(ret.tokens)
	if err != nil {
		return nil, err
	}

	ret.ChecksTypes = true
	return ret, nil
}
func NewEvaluableExpressionWithFunctions ( expression string , functions map [ string ] ExpressionFunction ) ( * EvaluableExpression , error ) { var ret * EvaluableExpression var err error ret = new ( EvaluableExpression ) ret . QueryDateFormat = isoDateFormat ret . inputExpression = expression ret . tokens , err = parseTokens ( expression , functions ) if err != nil { return nil , err } err = checkBalance ( ret . tokens ) if err != nil { return nil , err } err = checkExpressionSyntax ( ret . tokens ) if err != nil { return nil , err } ret . tokens , err = optimizeTokens ( ret . tokens ) if err != nil { return nil , err } ret . evaluationStages , err = planStages ( ret . tokens ) if err != nil { return nil , err } ret . ChecksTypes = true return ret , nil }
/*
	Similar to [NewEvaluableExpression], except enables the use of user-defined functions.
	Functions passed into this will be available to the expression.
*/
/ * Similar to [ NewEvaluableExpression ] except enables the use of user - defined functions . Functions passed into this will be available to the expression .