Skip to content
This repository has been archived by the owner on Aug 21, 2023. It is now read-only.

Fix: dump all generated column table #166

Merged
merged 10 commits into from
Oct 22, 2020
42 changes: 42 additions & 0 deletions tests/all_generate_column/conf/diff_config.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# diff Configuration.

log-level = "info"

chunk-size = 1000

check-thread-count = 4

sample-percent = 100

use-rowid = false

use-checksum = true

fix-sql-file = "fix.sql"

# tables need to check.
[[check-tables]]
schema = "all_generate_column"
tables = ["~t.*"]

[[table-config]]
schema = "all_generate_column"
table = "t"

[[table-config.source-tables]]
instance-id = "source-1"
schema = "all_generate_column"
table = "t"

[[source-db]]
host = "127.0.0.1"
port = 3306
user = "root"
password = ""
instance-id = "source-1"

[target-db]
host = "127.0.0.1"
port = 4000
user = "root"
password = ""
20 changes: 20 additions & 0 deletions tests/all_generate_column/conf/lightning.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
### tidb-lightning config

[lightning]
server-mode = false
level = "error"
check-requirements = false

[tikv-importer]
backend="tidb"
on-duplicate = "error"

[mydumper]
data-source-dir = "/tmp/dumpling_test_result/sql_res.all_generate_column"

[tidb]
host = "127.0.0.1"
port = 4000
user = "root"
password = ""
status-port = 10080
37 changes: 37 additions & 0 deletions tests/all_generate_column/run.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
#!/bin/sh

set -eu
cur=$(cd `dirname $0`; pwd)

DB_NAME="all_generate_column"
TABLE_NAME="t"

# drop database on tidb
export DUMPLING_TEST_PORT=4000
run_sql "drop database if exists $DB_NAME;"

# drop database on mysql
export DUMPLING_TEST_PORT=3306
run_sql "drop database if exists $DB_NAME;"

# build data on mysql
run_sql "create database $DB_NAME;"

# build data with generate column full_name
run_sql "create table $DB_NAME.$TABLE_NAME(a int as (1), b int as (2)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;"

# insert 100 records
run_sql "insert into $DB_NAME.$TABLE_NAME values $(seq -s, 100 | sed 's/,*$//g' | sed "s/[0-9]*/()/g");"

# dumping
export DUMPLING_TEST_DATABASE=$DB_NAME
run_dumpling

cat "$cur/conf/lightning.toml"
# use lightning import data to tidb
run_lightning $cur/conf/lightning.toml

# check mysql and tidb data
check_sync_diff $cur/conf/diff_config.toml


4 changes: 2 additions & 2 deletions v4/export/ir_impl.go
Original file line number Diff line number Diff line change
Expand Up @@ -138,8 +138,8 @@ func (td *tableData) Rows() SQLRowIter {
}

func (td *tableData) SelectedField() string {
if td.selectedField == "*" {
return ""
if td.selectedField == "*" || td.selectedField == "" {
return td.selectedField
}
return fmt.Sprintf("(%s)", td.selectedField)
}
Expand Down
16 changes: 14 additions & 2 deletions v4/export/sql.go
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,13 @@ func SelectAllFromTable(conf *Config, db *sql.Conn, database, table string) (Tab
return nil, err
}

colTypes, err := GetColumnTypes(db, selectedField, database, table)
var colTypes []*sql.ColumnType
// If all columns are generated
if selectedField == "" {
colTypes, err = GetColumnTypes(db, "*", database, table)
} else {
colTypes, err = GetColumnTypes(db, selectedField, database, table)
}
if err != nil {
return nil, err
}
Expand All @@ -204,7 +210,13 @@ func SelectAllFromTable(conf *Config, db *sql.Conn, database, table string) (Tab
return nil, err
}

query := buildSelectQuery(database, table, selectedField, buildWhereCondition(conf, ""), orderByClause)
var query string
// If all columns are generated
if selectedField == "" {
query = fmt.Sprintf("SELECT '' FROM `%s`.`%s`", database, table)
} else {
query = buildSelectQuery(database, table, selectedField, buildWhereCondition(conf, ""), orderByClause)
}
kennytm marked this conversation as resolved.
Show resolved Hide resolved

return &tableData{
database: database,
Expand Down
4 changes: 2 additions & 2 deletions v4/export/test_util.go
Original file line number Diff line number Diff line change
Expand Up @@ -115,8 +115,8 @@ func (m *mockTableIR) ColumnNames() []string {
}

func (m *mockTableIR) SelectedField() string {
if m.selectedField == "*" {
return ""
if m.selectedField == "*" || m.selectedField == ""{
return m.selectedField
}
return m.selectedField
kennytm marked this conversation as resolved.
Show resolved Hide resolved
}
Expand Down
17 changes: 11 additions & 6 deletions v4/export/writer_util.go
Original file line number Diff line number Diff line change
Expand Up @@ -159,8 +159,9 @@ func WriteInsert(pCtx context.Context, tblIR TableDataIR, w storage.Writer, file
)

selectedField := tblIR.SelectedField()

// if has generated column
if selectedField != "" {
if selectedField != "" && selectedField != "*" {
insertStatementPrefix = fmt.Sprintf("INSERT INTO %s %s VALUES\n",
wrapBackTicks(escapeString(tblIR.TableName())), selectedField)
} else {
Expand All @@ -175,13 +176,17 @@ func WriteInsert(pCtx context.Context, tblIR TableDataIR, w storage.Writer, file
wp.AddFileSize(insertStatementPrefixLen)

for fileRowIter.HasNext() {
if err = fileRowIter.Decode(row); err != nil {
log.Error("scanning from sql.Row failed", zap.Error(err))
return err
}

lastBfSize := bf.Len()
row.WriteToBuffer(bf, escapeBackSlash)
if selectedField != "" {
if err = fileRowIter.Decode(row); err != nil {
log.Error("scanning from sql.Row failed", zap.Error(err))
return err
}
row.WriteToBuffer(bf, escapeBackSlash)
} else {
bf.WriteString("()")
}
kennytm marked this conversation as resolved.
Show resolved Hide resolved
counter += 1
wp.AddFileSize(uint64(bf.Len()-lastBfSize) + 2) // 2 is for ",\n" and ";\n"

Expand Down