github.com/team-ide/go-dialect@v1.9.20/worker/convert.go (about) 1 package worker 2 3 //func NewConvertParser(srcSql string, dest dialect.Dialect) *ConvertParser { 4 // 5 // return &ConvertParser{ 6 // srcSql: srcSql, 7 // dest: dest, 8 // } 9 //} 10 // 11 //type ConvertParser struct { 12 // srcSql string 13 // dest dialect.Dialect 14 // sqlList []string 15 // destSql string 16 // Param *dialect.ParamModel 17 //} 18 // 19 //func (this_ *ConvertParser) GetSrcSql() (srcSql string) { 20 // srcSql = this_.srcSql 21 // return 22 //} 23 // 24 //func (this_ *ConvertParser) GetSqlList() (sqlList []string) { 25 // sqlList = this_.sqlList 26 // return 27 //} 28 // 29 //func (this_ *ConvertParser) GetDestSql() (destSql string) { 30 // destSql = this_.destSql 31 // return 32 //} 33 // 34 //func GetStatements(sqlInfo string) (stmts []sqlparser.Statement, err error) { 35 // tokens := sqlparser.NewStringTokenizer(sqlInfo) 36 // for { 37 // var stmt sqlparser.Statement 38 // stmt, err = sqlparser.ParseNext(tokens) 39 // 40 // if err != nil { 41 // if err != io.EOF { 42 // return 43 // } 44 // err = nil 45 // } 46 // if stmt == nil { 47 // break 48 // } 49 // stmts = append(stmts, stmt) 50 // } 51 // return 52 //} 53 // 54 //func (this_ *ConvertParser) Parse() (err error) { 55 // stmts, err := GetStatements(this_.srcSql) 56 // if err != nil { 57 // return 58 // } 59 // 60 // for _, stmt := range stmts { 61 // err = this_.parse(stmt) 62 // if err != nil { 63 // return 64 // } 65 // } 66 // destSql := "" 67 // for _, sqlOne := range this_.sqlList { 68 // destSql += sqlOne + ";\n" 69 // } 70 // this_.destSql = destSql 71 // return 72 //} 73 //func (this_ *ConvertParser) parse(stmt_ sqlparser.Statement) (err error) { 74 // switch stmt := stmt_.(type) { 75 // case *sqlparser.Select: 76 // return parseSelect(stmt) 77 // case *sqlparser.Insert: 78 // insert, err := parseInsert(stmt) 79 // if err != nil { 80 // return err 81 // } 82 // sqlList, err := this_.dest.InsertSql(this_.Param, insert) 83 // if err != nil { 84 // return err 85 // } 86 // this_.sqlList = append(this_.sqlList, sqlList...) 87 // case *sqlparser.Update: 88 // return parseUpdate(stmt) 89 // case *sqlparser.Delete: 90 // return parseDelete(stmt) 91 // case *sqlparser.CreateTable: 92 // databaseName, table, err := parseCreateTable(stmt) 93 // if err != nil { 94 // return err 95 // } 96 // sqlList, err := this_.dest.TableCreateSql(this_.Param, databaseName, table) 97 // if err != nil { 98 // return err 99 // } 100 // this_.sqlList = append(this_.sqlList, sqlList...) 101 // } 102 // return 103 //} 104 //func parseCreateTable(stmt *sqlparser.CreateTable) (databaseName string, table *dialect.TableModel, err error) { 105 // table = &dialect.TableModel{} 106 // databaseName = stmt.GetTable().Qualifier.String() 107 // table.TableName = stmt.GetTable().Name.String() 108 // 109 // tableSpec := stmt.GetTableSpec() 110 // if tableSpec == nil { 111 // return 112 // } 113 // for _, tableSpecColumn := range tableSpec.Columns { 114 // if tableSpecColumn == nil { 115 // continue 116 // } 117 // column := &dialect.ColumnModel{} 118 // column.ColumnName = tableSpecColumn.Name.String() 119 // column.ColumnDataType = tableSpecColumn.Type.Type 120 // if tableSpecColumn.Type.Length != nil { 121 // column.ColumnLength, _ = dialect.StringToInt(tableSpecColumn.Type.Length.Val) 122 // } 123 // if tableSpecColumn.Type.Scale != nil { 124 // column.ColumnDecimal, _ = dialect.StringToInt(tableSpecColumn.Type.Scale.Val) 125 // } 126 // if tableSpecColumn.Type.Options != nil { 127 // if tableSpecColumn.Type.Options.Comment != nil { 128 // column.ColumnComment = tableSpecColumn.Type.Options.Comment.Val 129 // } 130 // if tableSpecColumn.Type.Options.Null != nil { 131 // column.ColumnNotNull = true 132 // } 133 // if tableSpecColumn.Type.Options.Default != nil { 134 // buf := sqlparser.NewTrackedBuffer(nil) 135 // tableSpecColumn.Type.Options.Default.Format(buf) 136 // column.ColumnDefault = buf.String() 137 // column.ColumnDefault = strings.TrimLeft(column.ColumnDefault, "'") 138 // column.ColumnDefault = strings.TrimRight(column.ColumnDefault, "'") 139 // column.ColumnDefault = strings.TrimLeft(column.ColumnDefault, "\"") 140 // column.ColumnDefault = strings.TrimRight(column.ColumnDefault, "\"") 141 // } 142 // } 143 // table.AddColumn(column) 144 // } 145 // 146 // for _, tableSpecIndex := range tableSpec.Indexes { 147 // if tableSpecIndex == nil || tableSpecIndex.Info == nil { 148 // continue 149 // } 150 // if tableSpecIndex.Info.Primary { 151 // for _, indexColumn := range tableSpecIndex.Columns { 152 // table.AddPrimaryKey(&dialect.PrimaryKeyModel{ColumnName: indexColumn.Column.String()}) 153 // } 154 // continue 155 // } 156 // 157 // for _, indexColumn := range tableSpecIndex.Columns { 158 // index := &dialect.IndexModel{} 159 // index.IndexName = tableSpecIndex.Info.Name.String() 160 // index.ColumnName = indexColumn.Column.String() 161 // for _, option := range tableSpecIndex.Options { 162 // if option == nil || option.Value == nil { 163 // continue 164 // } 165 // if option.Name == "COMMENT" { 166 // index.IndexComment = option.Value.Val 167 // } 168 // } 169 // if tableSpecIndex.Info.Unique { 170 // index.IndexType = "unique" 171 // } 172 // 173 // table.AddIndex(index) 174 // } 175 // } 176 // for _, option := range tableSpec.Options { 177 // if option == nil || option.Value == nil { 178 // continue 179 // } 180 // if option.Name == "COMMENT" { 181 // table.TableComment = option.Value.Val 182 // } 183 // } 184 // 185 // //var bs []byte 186 // //bs, _ = json.MarshalIndent(stmt, "", " ") 187 // //fmt.Println(string(bs)) 188 // // 189 // //buf := sqlparser.NewTrackedBuffer(nil) 190 // //stmt.Format(buf) 191 // //sqlInfo := buf.String() 192 // //bs, _ = json.MarshalIndent(table, "", " ") 193 // //fmt.Println("createTable sql:") 194 // //fmt.Println(sqlInfo) 195 // //fmt.Println("createTable table:") 196 // //fmt.Println(string(bs)) 197 // return 198 //} 199 // 200 //func parseSelect(stmt *sqlparser.Select) (err error) { 201 // 202 // return 203 //} 204 //func parseInsert(stmt *sqlparser.Insert) (insert *dialect.InsertModel, err error) { 205 // insert = &dialect.InsertModel{} 206 // insert.OwnerName = stmt.Table.Qualifier.String() 207 // insert.TableName = stmt.Table.Name.String() 208 // for _, c := range stmt.Columns { 209 // name := c.CompliantName() 210 // insert.Columns = append(insert.Columns, name) 211 // } 212 // switch rows := stmt.Rows.(type) { 213 // case sqlparser.Values: 214 // for _, row := range rows { 215 // var insertRow []*dialect.ValueModel 216 // for _, rowV := range row { 217 // //fmt.Println("row v:", reflect.TypeOf(rowV).String()) 218 // value := &dialect.ValueModel{} 219 // insertRow = append(insertRow, value) 220 // switch v := rowV.(type) { 221 // case *sqlparser.Literal: 222 // value.Value = v.Val 223 // if v.Type == sqlparser.StrVal { 224 // value.Type = dialect.ValueTypeString 225 // } else if v.Type == sqlparser.IntVal { 226 // value.Type = dialect.ValueTypeNumber 227 // } else { 228 // panic("parseInsert not support value type [" + value.Type + "]") 229 // } 230 // break 231 // case *sqlparser.FuncExpr: 232 // value.Type = dialect.ValueTypeFunc 233 // buf := sqlparser.NewTrackedBuffer(nil) 234 // v.Format(buf) 235 // value.Value = buf.String() 236 // break 237 // } 238 // 239 // } 240 // insert.Rows = append(insert.Rows, insertRow) 241 // } 242 // 243 // } 244 // 245 // //var bs []byte 246 // //bs, _ = json.MarshalIndent(stmt, "", " ") 247 // //fmt.Println(string(bs)) 248 // return 249 //} 250 //func parseUpdate(stmt *sqlparser.Update) (err error) { 251 // 252 // return 253 //} 254 //func parseDelete(stmt *sqlparser.Delete) (err error) { 255 // 256 // return 257 //} 258 // 259 //func parseCreateDatabase(stmt *sqlparser.CreateDatabase) (err error) { 260 // 261 // return 262 //} 263 //func parseDropTable(stmt *sqlparser.DropTable) (err error) { 264 // 265 // return 266 //} 267 //func parseDropDatabase(stmt *sqlparser.DropDatabase) (err error) { 268 // 269 // return 270 //} 271 //func parseDropColumn(stmt *sqlparser.DropColumn) (err error) { 272 // 273 // return 274 //} 275 //func parseDropKey(stmt *sqlparser.DropKey) (err error) { 276 // 277 // return 278 //} 279 //func parseAddColumns(stmt *sqlparser.AddColumns) (err error) { 280 // 281 // return 282 //} 283 //func parseAlterColumn(stmt *sqlparser.AlterColumn) (err error) { 284 // 285 // return 286 //} 287 //func parseRenameIndex(stmt *sqlparser.RenameIndex) (err error) { 288 // 289 // return 290 //} 291 //func parseAddIndexDefinition(stmt *sqlparser.AddIndexDefinition) (err error) { 292 // 293 // return 294 //}