|
- /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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 at
-
- import (
- "database/sql/driver"
- "testing"
-
- "github.com/stretchr/testify/assert"
-
- "seata.apache.org/seata-go/pkg/datasource/sql/exec"
- "seata.apache.org/seata-go/pkg/datasource/sql/parser"
- "seata.apache.org/seata-go/pkg/datasource/sql/types"
- "seata.apache.org/seata-go/pkg/datasource/sql/util"
- )
-
- func TestNewDeleteExecutor(t *testing.T) {
- executor := NewDeleteExecutor(nil, nil, nil)
- _, ok := executor.(*deleteExecutor)
- assert.Equalf(t, true, ok, "should be *deleteExecutor")
- }
-
- func Test_deleteExecutor_buildBeforeImageSQL(t *testing.T) {
- tests := []struct {
- name string
- sourceQuery string
- sourceQueryArgs []driver.Value
- expectQuery string
- expectQueryArgs []driver.Value
- }{
- {
- sourceQuery: "delete from t_user where id = ?",
- sourceQueryArgs: []driver.Value{100},
- expectQuery: "SELECT SQL_NO_CACHE * FROM t_user WHERE id=? FOR UPDATE",
- expectQueryArgs: []driver.Value{100},
- },
- {
- sourceQuery: "delete from t_user where id = ? and name = 'Jack' and age between ? and ?",
- sourceQueryArgs: []driver.Value{100, 18, 28},
- expectQuery: "SELECT SQL_NO_CACHE * FROM t_user WHERE id=? AND name=_UTF8MB4Jack AND age BETWEEN ? AND ? FOR UPDATE",
- expectQueryArgs: []driver.Value{100, 18, 28},
- },
- {
- sourceQuery: "delete from t_user where id = ? and name = 'Jack' and age in (?,?)",
- sourceQueryArgs: []driver.Value{100, 18, 28},
- expectQuery: "SELECT SQL_NO_CACHE * FROM t_user WHERE id=? AND name=_UTF8MB4Jack AND age IN (?,?) FOR UPDATE",
- expectQueryArgs: []driver.Value{100, 18, 28},
- },
- {
- sourceQuery: "delete from t_user where kk between ? and ? and id = ? and addr in(?,?) and age > ? order by name desc limit ?",
- sourceQueryArgs: []driver.Value{10, 20, 17, "Beijing", "Guangzhou", 18, 2},
- expectQuery: "SELECT SQL_NO_CACHE * FROM t_user WHERE kk BETWEEN ? AND ? AND id=? AND addr IN (?,?) AND age>? ORDER BY name DESC LIMIT ? FOR UPDATE",
- expectQueryArgs: []driver.Value{10, 20, 17, "Beijing", "Guangzhou", 18, 2},
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- c, err := parser.DoParser(tt.sourceQuery)
- assert.Nil(t, err)
- executor := NewDeleteExecutor(c, &types.ExecContext{Values: tt.sourceQueryArgs, NamedValues: util.ValueToNamedValue(tt.sourceQueryArgs)}, []exec.SQLHook{})
- query, args, err := executor.(*deleteExecutor).buildBeforeImageSQL(tt.sourceQuery, util.ValueToNamedValue(tt.sourceQueryArgs))
- assert.Nil(t, err)
- assert.Equal(t, tt.expectQuery, query)
- assert.Equal(t, tt.expectQueryArgs, util.NamedValueToValue(args))
- })
- }
- }
|