coze-studio/backend/infra/contract/sqlparser/sql_parser.go

81 lines
2.9 KiB
Go

/*
* Copyright 2025 coze-dev Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package sqlparser
// TableColumn represents table and column name mapping
type TableColumn struct {
NewTableName *string // if nil, not replace table name
ColumnMap map[string]string // Column name mapping: key is original column name, value is new column name
}
type ColumnValue struct {
ColName string
Value interface{}
}
type PrimaryKeyValue struct {
ColName string
Values []interface{}
}
// OperationType represents the type of SQL operation
type OperationType string
// SQL operation types
const (
OperationTypeSelect OperationType = "SELECT"
OperationTypeInsert OperationType = "INSERT"
OperationTypeUpdate OperationType = "UPDATE"
OperationTypeDelete OperationType = "DELETE"
OperationTypeCreate OperationType = "CREATE"
OperationTypeAlter OperationType = "ALTER"
OperationTypeDrop OperationType = "DROP"
OperationTypeTruncate OperationType = "TRUNCATE"
OperationTypeUnknown OperationType = "UNKNOWN"
)
type SQLFilterOp string
const (
SQLFilterOpAnd SQLFilterOp = "AND"
SQLFilterOpOr SQLFilterOp = "OR"
)
// SQLParser defines the interface for parsing and modifying SQL statements
type SQLParser interface {
// ParseAndModifySQL parses SQL and replaces table/column names according to the provided message
ParseAndModifySQL(sql string, tableColumns map[string]TableColumn) (string, error) // tableColumns Original table name -> new TableInfo
// GetSQLOperation identifies the operation type in the SQL statement
GetSQLOperation(sql string) (OperationType, error)
// AddColumnsToInsertSQL adds columns to the INSERT SQL statement.
AddColumnsToInsertSQL(origSQL string, addCols []ColumnValue, colVals *PrimaryKeyValue, isParam bool) (string, map[string]bool, error)
// GetTableName extracts the table name from a SQL statement. Only supports single-table select/insert/update/delete. If it has multiple tables, return first table name.
GetTableName(sql string) (string, error)
// GetInsertDataNums extracts the number of rows to be inserted from a SQL statement. Only supports single-table insert.
GetInsertDataNums(sql string) (int, error)
// AppendSQLFilter appends a filter condition to the SQL statement.
AppendSQLFilter(sql string, op SQLFilterOp, filter string) (string, error)
// AddSelectFieldsToSelectSQL add select fields to select sql
AddSelectFieldsToSelectSQL(origSQL string, cols []string) (string, error)
}