query_set_components.go 3.2 KB
package domain

var (
	SchemaTable     TableType = "Schema"
	SubProcessTable TableType = "SubProcess"
)

var (
	FlagGroup = "Group"
	FlagSet   = "Set"
)

var (
	TableSplit   SelectExprType = "TableSplit"   //拆分
	SplitAssign  SelectExprType = "SplitAssign"  //拆分赋值
	NormalAssign SelectExprType = "NormalAssign" //正常赋值
)

type SelectExprType string

type QueryComponent struct {
	Id               string                `json:"id"`
	MasterTable      QueryComponentTable   `json:"masterTable"`
	Conditions       []ConditionExpr       `json:"conditions"`
	JoinTables       []QueryComponentTable `json:"-"` //joinTables
	Selects          []SelectExprGroup     `json:"selects"`
	SelectFromTables []QueryComponentTable `json:"-"` //selectTables
	Description      string                `json:"description"`
}
type ConditionExpr struct { // 条件表达式
	Id             string    `json:"id"`
	FieldLeft      FieldExpr `json:"fieldLeft"`
	FieldRight     FieldExpr `json:"fieldRight"`
	OperatorSymbol string    `json:"operatorSymbol"`
	AndOr          string    `json:"andOr"` // and or
}

type SelectExpr struct { // 查询表达式
	Id         string    `json:"id"`
	FieldLeft  FieldExpr `json:"fieldLeft"`
	FieldRight FieldExpr `json:"fieldRight"` // has value when type is equal to 1
	Type       string    `json:"type"`       // 1.拆分 2.拆方赋值 3.正常赋值
	//SubGroup    []SelectExpr `json:"subGroup,omitempty"`
}
type SelectExprGroup struct { // 查询表达式
	SelectExpr
	SubSelects []SelectExpr `json:"subSelects,omitempty"`
}

type FieldExpr struct {
	//LabelColumns []LabelColumn `json:"labelColumns"`
	TableFields []TableField `json:"tableFields"`
	//ExprHuman    string        `json:"exprHuman"`
	ExprSql string `json:"exprSql"`
}

type LabelColumn struct {
	Column    TableField `json:"column,omitempty"`
	LabelExpr string     `json:"labelExpr"`
}

type TableField struct {
	TableId      int    `json:"tableId"`
	TableName    string `json:"tableName"`
	TableSqlName string `json:"tableSqlName"`
	FieldName    string `json:"fieldName"`
	FieldSqlName string `json:"fieldSqlName"`
}

type QueryComponentTable struct {
	// 表Id
	TableId int `json:"tableId"`
	// 表类型 MainTable:主表 SideTable:副表 SubTable:分表  ExcelTable:Excel表
	TableType string `json:"tableType"`
	// 名称
	Name string `json:"name"`
	// 对应数据库名称
	SQLName string `json:"sqlName"`
	// 父级ID
	ParentId int `json:"parentId"`
	// 所有列
	Fields []*Field `json:"fields"`
}

type Join struct {
	TableId      int
	TableName    string
	TableSqlName string
	Conditions   []ConditionExpr
	On           SelectExpr
}

func NewQueryComponentTable(t *Table) QueryComponentTable {
	return QueryComponentTable{
		TableId:   t.TableId,
		TableType: t.TableType,
		Name:      t.Name,
		SQLName:   t.SQLName,
		ParentId:  t.ParentId,
		Fields:    t.Fields(false),
	}
}

func ConditionsToMapById(items []*ConditionExpr) map[string]*ConditionExpr {
	var res = make(map[string]*ConditionExpr)
	for i := range items {
		res[items[i].Id] = items[i]
	}
	return res
}

func SelectsToMapById(items []*SelectExprGroup) map[string]*SelectExprGroup {
	var res = make(map[string]*SelectExprGroup)
	for i := range items {
		res[items[i].Id] = items[i]
	}
	return res
}