(t *testing.T)
| 47 | ) |
| 48 | |
| 49 | func TestBuildSelectAllQuery(t *testing.T) { |
| 50 | db, mock, err := sqlmock.New() |
| 51 | require.NoError(t, err) |
| 52 | defer func() { |
| 53 | require.NoError(t, db.Close()) |
| 54 | }() |
| 55 | |
| 56 | conn, err := db.Conn(context.Background()) |
| 57 | require.NoError(t, err) |
| 58 | |
| 59 | mockConf := defaultConfigForTest(t) |
| 60 | mockConf.SortByPk = true |
| 61 | |
| 62 | // Test TiDB server. |
| 63 | mockConf.ServerInfo.ServerType = version.ServerTypeTiDB |
| 64 | tctx := tcontext.Background().WithLogger(appLogger) |
| 65 | baseConn := newBaseConn(conn, true, nil) |
| 66 | |
| 67 | orderByClause, err := buildOrderByClause(tctx, mockConf, baseConn, database, table, true) |
| 68 | require.NoError(t, err) |
| 69 | |
| 70 | mock.ExpectQuery("SHOW COLUMNS FROM"). |
| 71 | WillReturnRows(sqlmock.NewRows([]string{"Field", "Type", "Null", "Key", "Default", "Extra"}). |
| 72 | AddRow("id", "int(11)", "NO", "PRI", nil, "")) |
| 73 | |
| 74 | selectedField, _, err := buildSelectField(tctx, baseConn, database, table, false) |
| 75 | require.NoError(t, err) |
| 76 | |
| 77 | q := buildSelectQuery(database, table, selectedField, "", "", orderByClause) |
| 78 | require.Equal(t, fmt.Sprintf("SELECT * FROM `%s`.`%s` ORDER BY `_tidb_rowid`", database, table), q) |
| 79 | |
| 80 | mock.ExpectQuery(fmt.Sprintf("SHOW INDEX FROM `%s`.`%s`", database, table)). |
| 81 | WillReturnRows(sqlmock.NewRows(showIndexHeaders). |
| 82 | AddRow(table, 0, "PRIMARY", 1, "id", "A", 0, nil, nil, "", "BTREE", "", "")) |
| 83 | |
| 84 | orderByClause, err = buildOrderByClause(tctx, mockConf, baseConn, database, table, false) |
| 85 | require.NoError(t, err) |
| 86 | |
| 87 | mock.ExpectQuery("SHOW COLUMNS FROM"). |
| 88 | WillReturnRows(sqlmock.NewRows([]string{"Field", "Type", "Null", "Key", "Default", "Extra"}). |
| 89 | AddRow("id", "int(11)", "NO", "PRI", nil, "")) |
| 90 | |
| 91 | selectedField, _, err = buildSelectField(tctx, baseConn, database, table, false) |
| 92 | require.NoError(t, err) |
| 93 | |
| 94 | q = buildSelectQuery(database, table, selectedField, "", "", orderByClause) |
| 95 | require.Equal(t, fmt.Sprintf("SELECT * FROM `%s`.`%s` ORDER BY `id`", database, table), q) |
| 96 | require.NoError(t, mock.ExpectationsWereMet()) |
| 97 | |
| 98 | // Test other servers. |
| 99 | otherServers := []version.ServerType{version.ServerTypeUnknown, version.ServerTypeMySQL, version.ServerTypeMariaDB} |
| 100 | |
| 101 | // Test table with primary key. |
| 102 | for _, serverTp := range otherServers { |
| 103 | mockConf.ServerInfo.ServerType = serverTp |
| 104 | comment := fmt.Sprintf("server type: %s", serverTp) |
| 105 | |
| 106 | mock.ExpectQuery(fmt.Sprintf("SHOW INDEX FROM `%s`.`%s`", database, table)). |
nothing calls this directly
no test coverage detected
searching dependent graphs…