MCPcopy Create free account
hub / github.com/sql-machine-learning/sqlflow / GenerateOptimizeCode

Function GenerateOptimizeCode

go/codegen/optimize/codegen.go:80–158  ·  view source on GitHub ↗

GenerateOptimizeCode generates optimize codes for execution

(optimStmt *ir.OptimizeStmt, session *pb.Session, tableName string, useOptFlow bool)

Source from the content-addressed store, hash-verified

78
79// GenerateOptimizeCode generates optimize codes for execution
80func GenerateOptimizeCode(optimStmt *ir.OptimizeStmt, session *pb.Session, tableName string, useOptFlow bool) (string, error) {
81 const (
82 optimizeTemplateName = "optimize"
83 )
84
85 dbName, err := database.GetDatabaseName(session.DbConnStr)
86 if err != nil {
87 return "", err
88 }
89
90 resultTable := optimStmt.ResultTable
91 if !strings.Contains(resultTable, ".") {
92 resultTable = fmt.Sprintf("%s.%s", dbName, resultTable)
93 }
94
95 attrJSON, err := generateOptimizeAttributeJSONString(optimStmt.Attributes)
96 if err != nil {
97 return "", err
98 }
99
100 if !useOptFlow {
101 filler := pyomoNativeOptimizeFiller{
102 DataSource: session.DbConnStr,
103 Select: optimStmt.Select,
104 Variables: optimStmt.Variables,
105 ResultValueName: optimStmt.ResultValueName,
106 VariableType: optimStmt.VariableType,
107 Objective: optimStmt.Objective,
108 Direction: optimStmt.Direction,
109 Constraints: optimStmt.Constraints,
110 Solver: optimStmt.Solver,
111 AttributeJSON: attrJSON,
112 ResultTable: resultTable,
113 }
114 tpl := template.Must(template.New(optimizeTemplateName).Parse(pyomoNativeOptimizeText))
115 var program bytes.Buffer
116 if err := tpl.Execute(&program, filler); err != nil {
117 return "", err
118 }
119 return program.String(), nil
120 }
121
122 if !strings.Contains(tableName, ".") {
123 tableName = fmt.Sprintf("%s.%s", dbName, tableName)
124 }
125
126 db, err := database.OpenAndConnectDB(session.DbConnStr)
127 if err != nil {
128 return "", err
129 }
130 defer db.Close()
131
132 columns, _, err := verifier.GetSQLFieldType(fmt.Sprintf("SELECT * FROM %s", tableName), db)
133 if err != nil {
134 return "", err
135 }
136
137 filler := &optFlowOptimizeFiller{

Callers 2

ExecuteOptimizeMethod · 0.92

Calls 7

GetDatabaseNameFunction · 0.92
OpenAndConnectDBFunction · 0.92
GetSQLFieldTypeFunction · 0.92
ParseMethod · 0.65
StringMethod · 0.45
CloseMethod · 0.45

Tested by

no test coverage detected