@@ -1576,6 +1576,73 @@ func (cli *testServerClient) runTestLoadData(t *testing.T, server *Server) {
15761576 require .NoError (t , rows .Close ())
15771577 dbt .MustExec ("drop table if exists pn" )
15781578 })
1579+
1580+ err = fp .Close ()
1581+ require .NoError (t , err )
1582+ err = os .Remove (path )
1583+ require .NoError (t , err )
1584+
1585+ fp , err = os .Create (path )
1586+ require .NoError (t , err )
1587+ require .NotNil (t , fp )
1588+
1589+ _ , err = fp .WriteString (
1590+ `1,2` + "\n " +
1591+ `1,2,,4` + "\n " +
1592+ `1,2,3` + "\n " +
1593+ `,,,` + "\n " +
1594+ `,,3` + "\n " +
1595+ `1,,,4` + "\n " )
1596+ require .NoError (t , err )
1597+
1598+ nullInt32 := func (val int32 , valid bool ) sql.NullInt32 {
1599+ return sql.NullInt32 {Int32 : val , Valid : valid }
1600+ }
1601+ expects := []struct {
1602+ col1 sql.NullInt32
1603+ col2 sql.NullInt32
1604+ col3 sql.NullInt32
1605+ col4 sql.NullInt32
1606+ }{
1607+ {nullInt32 (1 , true ), nullInt32 (2 , true ), nullInt32 (0 , false ), nullInt32 (0 , false )},
1608+ {nullInt32 (1 , true ), nullInt32 (2 , true ), nullInt32 (0 , false ), nullInt32 (4 , true )},
1609+ {nullInt32 (1 , true ), nullInt32 (2 , true ), nullInt32 (3 , true ), nullInt32 (0 , false )},
1610+ {nullInt32 (0 , true ), nullInt32 (0 , false ), nullInt32 (0 , false ), nullInt32 (0 , false )},
1611+ {nullInt32 (0 , true ), nullInt32 (0 , false ), nullInt32 (3 , true ), nullInt32 (0 , false )},
1612+ {nullInt32 (1 , true ), nullInt32 (0 , false ), nullInt32 (0 , false ), nullInt32 (4 , true )},
1613+ }
1614+
1615+ cli .runTestsOnNewDB (t , func (config * mysql.Config ) {
1616+ config .AllowAllFiles = true
1617+ config .Params ["sql_mode" ] = "''"
1618+ }, "LoadData" , func (dbt * testkit.DBTestKit ) {
1619+ dbt .MustExec ("drop table if exists pn" )
1620+ dbt .MustExec ("create table pn (c1 int, c2 int, c3 int, c4 int)" )
1621+ dbt .MustExec ("set @@tidb_dml_batch_size = 1" )
1622+ _ , err1 := dbt .GetDB ().Exec (fmt .Sprintf (`load data local infile %q into table pn FIELDS TERMINATED BY ',' (c1, @val2, @val3, @val4)
1623+ SET c2 = NULLIF(@val2, ''), c3 = NULLIF(@val3, ''), c4 = NULLIF(@val4, '')` , path ))
1624+ require .NoError (t , err1 )
1625+ var (
1626+ a sql.NullInt32
1627+ b sql.NullInt32
1628+ c sql.NullInt32
1629+ d sql.NullInt32
1630+ )
1631+ rows := dbt .MustQuery ("select * from pn" )
1632+ for _ , expect := range expects {
1633+ require .Truef (t , rows .Next (), "unexpected data" )
1634+ err = rows .Scan (& a , & b , & c , & d )
1635+ require .NoError (t , err )
1636+ require .Equal (t , expect .col1 , a )
1637+ require .Equal (t , expect .col2 , b )
1638+ require .Equal (t , expect .col3 , c )
1639+ require .Equal (t , expect .col4 , d )
1640+ }
1641+
1642+ require .Falsef (t , rows .Next (), "unexpected data" )
1643+ require .NoError (t , rows .Close ())
1644+ dbt .MustExec ("drop table if exists pn" )
1645+ })
15791646}
15801647
15811648func (cli * testServerClient ) runTestConcurrentUpdate (t * testing.T ) {
0 commit comments