yjp 1 жил өмнө
parent
commit
8ffc4e283f
3 өөрчлөгдсөн 57 нэмэгдсэн , 32 устгасан
  1. 38 2
      sql_parser.go
  2. 1 0
      test_sql.go
  3. 18 30
      v1.go

+ 38 - 2
sql_parser.go

@@ -31,6 +31,8 @@ type insertClause struct {
 }
 
 type deleteClause struct {
+	table string
+	where string
 }
 
 type updateClause struct {
@@ -262,8 +264,42 @@ func insertWalk(sql string) (*insertClause, error) {
 	return clause, nil
 }
 
-func deleteWalk(sql string) (*insertClause, error) {
-	return nil, nil
+func deleteWalk(sql string) (*deleteClause, error) {
+	clause := new(deleteClause)
+
+	stmts, err := parser.Parse(sql)
+	if err != nil {
+		return nil, err
+	}
+
+	var walkFuncErr error
+
+	w := &walk.AstWalker{
+		Fn: func(ctx interface{}, node interface{}) (stop bool) {
+			realNode := node.(*tree.Delete)
+
+			// 获取table
+			tableFmtCtx := tree.NewFmtCtx(tree.FmtSimple)
+			realNode.Table.Format(tableFmtCtx)
+			clause.table = tableFmtCtx.String()
+
+			// 获取where
+			clause.where = realNode.Where.Expr.String()
+
+			return false
+		},
+	}
+
+	_, err = w.Walk(stmts, nil)
+	if err != nil {
+		return nil, err
+	}
+
+	if walkFuncErr != nil {
+		return nil, walkFuncErr
+	}
+
+	return clause, nil
 }
 
 func updateWalk(sql string) (*insertClause, error) {

+ 1 - 0
test_sql.go

@@ -7,6 +7,7 @@ import (
 
 const (
 	parseSqlInsert = `insert into students (id, name, age, rate, time, is_right) values ('aaa', 'yjp', 5, 92.5, parse_time('2024-01-01 00:00:00', '2006-01-02 15:04:05'), false)`
+	parseSqlDelete = `delete from students where id = 'aaa' AND name = 'yjp' AND age < 100 AND describe IN ('yjp')`
 )
 
 const (

+ 18 - 30
v1.go

@@ -65,6 +65,11 @@ func ApiV1(binding *http_binding.Binding, dpsAddress string, operatorIDFunc Oper
 		Path:         "/dpsv1/database/operate",
 		ResponseFunc: response.SendMsgResponse,
 		BusinessFunc: func(c *binding_context.Context, inputModel OperateRequest) (any, error) {
+			version := "v1"
+			if utils.IsStringNotEmpty(inputModel.Version) {
+				version = inputModel.Version
+			}
+
 			operatorID, err := operatorIDFunc(c)
 			if err != nil {
 				return nil, err
@@ -84,13 +89,13 @@ func ApiV1(binding *http_binding.Binding, dpsAddress string, operatorIDFunc Oper
 				for _, parsedClause := range parsedClauses {
 					switch clause := parsedClause.(type) {
 					case *insertClause:
-						return doInsert(tx, inputModel, clause, operatorID)
+						return doInsert(tx, version, clause, operatorID)
 					case *deleteClause:
-						return doDelete(tx, inputModel, clause, operatorID)
+						return doDelete(tx, version, clause, operatorID)
 					case *updateClause:
-						return doUpdate(tx, inputModel, clause, operatorID)
+						return doUpdate(tx, version, clause, operatorID)
 					case *selectClause:
-						return doSelect(dpsClient, inputModel, clause)
+						return doSelect(dpsClient, version, clause)
 					default:
 						return errors.New("不支持的SQL语句")
 					}
@@ -121,7 +126,10 @@ func insertMap(clause *insertClause) map[string]any {
 }
 
 func deleteMap(clause *deleteClause) map[string]any {
-	return map[string]any{}
+	return map[string]any{
+		"table": clause.table,
+		"where": clause.where,
+	}
 }
 
 func updateMap(clause *updateClause) map[string]any {
@@ -132,12 +140,7 @@ func selectMap(clause *selectClause) map[string]any {
 	return map[string]any{}
 }
 
-func doInsert(tx client.Transaction, inputModel OperateRequest, clause *insertClause, operatorID string) error {
-	version := inputModel.Version
-	if utils.IsStringEmpty(version) {
-		version = "v1"
-	}
-
+func doInsert(tx client.Transaction, version string, clause *insertClause, operatorID string) error {
 	tableRow := client.NewTableRow()
 	for columnName, value := range clause.tableRows {
 		switch value.kind {
@@ -158,7 +161,7 @@ func doInsert(tx client.Transaction, inputModel OperateRequest, clause *insertCl
 
 	statement, err := tx.InsertTx(&client.InsertRequest{
 		TablePrefixWithSchema: clause.table,
-		Version:               inputModel.Version,
+		Version:               version,
 		KeyColumns:            clause.keyColumns,
 		TableRow:              tableRow,
 		UserID:                operatorID,
@@ -171,29 +174,14 @@ func doInsert(tx client.Transaction, inputModel OperateRequest, clause *insertCl
 	return nil
 }
 
-func doDelete(tx client.Transaction, inputModel OperateRequest, clause *deleteClause, operatorID string) error {
-	version := inputModel.Version
-	if utils.IsStringEmpty(version) {
-		version = "v1"
-	}
-
+func doDelete(tx client.Transaction, version string, clause *deleteClause, operatorID string) error {
 	return nil
 }
 
-func doUpdate(tx client.Transaction, inputModel OperateRequest, clause *updateClause, operatorID string) error {
-	version := inputModel.Version
-	if utils.IsStringEmpty(version) {
-		version = "v1"
-	}
-
+func doUpdate(tx client.Transaction, version string, clause *updateClause, operatorID string) error {
 	return nil
 }
 
-func doSelect(dpsClient client.Client, inputModel OperateRequest, clause *selectClause) error {
-	version := inputModel.Version
-	if utils.IsStringEmpty(version) {
-		version = "v1"
-	}
-
+func doSelect(dpsClient client.Client, version string, clause *selectClause) error {
 	return nil
 }