expression

package
v0.0.0-...-561d2ec Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 11, 2020 License: MIT Imports: 17 Imported by: 0

README

expression 表达式解析模块

使用说明


    import (
        "github.com/redshiftkeying/slowflow-server/expression"
    )
    // db 为已经初始化后的数据库连接
    sql.Reg(db)

    exp := expression.CreateExecer("")
    // sql 表示成当前目录下开始导入 sql/sql.ql脚本,如果
    exp.ScriptImportAlias("sql/sql.ql", "sql")

    // 这样就可以在脚本中使用 sql.Query(query,args...) sql.Count(query,args...) sql.One(query,args...) 三个函数
    // 也可以使用sqlctx.QueryDB(ctx,db,query,args) sqlctx.CountDB(ctx,db,query,args) sqlctx.OneDB(ctx,db,query,args)
    // 也可以使用sqlctx.Query(ctx,query,args) sqlctx.Count(ctx,query,args) sqlctx.One(ctx,query,args)


	exp.PredefinedJson("global", map[string]interface{}{
		"test_1": 1,
		"test_a": "a",
	})
	exp.PredefinedVar("fun1", `fn(a ) {
		return 1==a
	}`)
	exp.PredefinedVar("fun2", `fn(a ) {
		return 1==a
    }`)

    ectx := expression.CreateExpContext(context.Background())

	ectx.AddVar("ctx_10", 10)
	ectx.AddVar("ctx_a", "a")

	out, err :=exp.Exec(ectx, "1+1")
	if err != nil {
        //return 0, err
        // TODO
    }
    // 打印输出2
    fmt.Println(out.Int())

    out, err :=exp.Exec(ectx, "ctx_10*10")
    if err != nil {
        //return 0, err
        // TODO
    }

    // 打印输出10
    fmt.Println(out.Int())

    out, err =exp.Exec(ectx, `sql.Count("select * from table")`)
    if err != nil {
        //return 0, err
        // TODO
    }

    // 打印输出查询到的表记录数量
    fmt.Println(out.Int())

    out, err:=exp.Exec(ectx, `SliceStr(sql.Query("select name from table"),"name")`)
    if err != nil {
        //return 0, err
        // TODO
    }

    // 打印输出查询到的表记录数量
    fmt.Println(out.SliceStr())
    out, err:=exp.Exec(ectx, `sql.querySliceStr("select name from table","name")`)
    if err != nil {
        //return 0, err
        // TODO
    }

    // 打印输出查询到的表记录数量
    fmt.Println(out.SliceStr())

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Bool

func Bool(d *OutData, err ...error) (bool, error)

Bool 返回布尔值

func ExecBool

func ExecBool(ctx ExpContext, exp string) (bool, error)

ExecBool 执行表达式返回布尔值

func ExecParamBool

func ExecParamBool(ctx context.Context, exp string, vars map[string]interface{}) (bool, error)

ExecParamBool 执行表达式 返回布尔型

func ExecParamSliceStr

func ExecParamSliceStr(ctx context.Context, exp string, vars map[string]interface{}) ([]string, error)

ExecParamSliceStr 执行表达式,返回字符串切片

func ExecPredefineVarBool

func ExecPredefineVarBool(ctx context.Context, exp string, key string, predefinestr string) (bool, error)

ExecPredefineVarBool 执行表达式,传入预编译参数 返回布尔值

func ExecPredefineVarSliceStr

func ExecPredefineVarSliceStr(ctx context.Context, exp string, key string, predefinestr string) ([]string, error)

ExecPredefineVarSliceStr 执行表达式,传入预编译参数 返回字符串切片

func FromExpContextForDB

func FromExpContextForDB(ctx context.Context) *sql.DB

FromExpContextForDB 从ctx中获取*sql.DB

func GlobalImport

func GlobalImport(name string, table map[string]interface{})

GlobalImport 全局导入模块扩展 同一模块只能被导入一次,多次导入会导致panic

func ScriptImport

func ScriptImport(model string)

ScriptImport 设置导入脚本模块

func ScriptImportAlias

func ScriptImportAlias(model, alias string)

ScriptImportAlias 设置导入脚本模块 并定义别名

func SetLibs

func SetLibs(libs string)

SetLibs 修改默认脚本库目录

func SliceStr

func SliceStr(d *OutData, err ...error) ([]string, error)

SliceStr 返回字符串切片

Types

type Execer

type Execer interface {
	Predefined
	// 执行表达式
	// ctx 上下文
	// exp 为执行表达式
	Exec(ctx ExpContext, exp string) (*OutData, error)
	// 导入脚本模块并指定别名
	ScriptImportAlias(model, alias string)
	// 导入脚本模块
	ScriptImport(model string)
	// 设置脚本模块库
	SetLibs(libs string)
}

Execer 表达式执行器

func CreateExecer

func CreateExecer(libs string) Execer

CreateExecer 创建表达式执行器

type ExpContext

type ExpContext interface {
	context.Context
	Predefined
	// 获取变量key的当前值
	Var(key string) interface{}
	// 为表达式中的变量赋值
	AddVar(key string, value interface{})
}

ExpContext 表达式上下文 ,实现 context.Context接口

func CreateExpContext

func CreateExpContext(ctx context.Context) ExpContext

CreateExpContext 创建一个ExpContext 实现了context.Context接口

func CreateExpContextByDB

func CreateExpContextByDB(ctx context.Context, db *sql.DB) ExpContext

CreateExpContextByDB 创建含有DB的ctx

type OutData

type OutData struct {
	Result interface{} // 数据结果
}

OutData 输出数据

func Exec

func Exec(ctx ExpContext, exp string) (*OutData, error)

Exec 执行表达式

func ExecParam

func ExecParam(ctx context.Context, exp string, vars map[string]interface{}) (*OutData, error)

ExecParam 执行表达式

func ExecPredefineVar

func ExecPredefineVar(ctx context.Context, exp string, key string, predefinestr string) (*OutData, error)

ExecPredefineVar 执行表达式,传入预编译参数

func (OutData) Bool

func (d OutData) Bool() (bool, error)

Bool 获取布尔类型数据

func (OutData) Float

func (d OutData) Float() (float64, error)

Float 获取浮点数类型数据

func (OutData) Int

func (d OutData) Int() (int, error)

Int 获取整数类型数据

func (*OutData) IsNil

func (d *OutData) IsNil() bool

IsNil 检测返回结果是不是空值

func (*OutData) IsUndefined

func (d *OutData) IsUndefined() bool

IsUndefined 有未定义变量

func (OutData) SliceStr

func (d OutData) SliceStr() ([]string, error)

SliceStr 获取字符串切片类型数据

func (OutData) String

func (d OutData) String() (string, error)

String 获取字符串类型数据

type Predefined

type Predefined interface {
	// 预定义变量
	// 将添加的数据转为脚本中的语句添加到脚本中
	// key为变量名
	// value 为脚本值的原型
	// 		值类型为string 则在脚本中 key=value key类型由值字符串内容决定。
	// 可以使用该方法初始化变量,变量类型可以是各种类型,只要符合脚本规则
	PredefinedVar(key string, value string)

	// 预定义变量
	// key为变量名
	// value 将转为json字符串 在调用 PredefinedVar(key string, value string)
	// 在脚本中是一个map 可以通过key[键]访问 也可以通过key.键访问,和访问json格式方式一样
	PredefinedJson(key string, value interface{}) error
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL