diff --git a/go/go.mod b/go/go.mod index 711549bad1..1af21e281b 100644 --- a/go/go.mod +++ b/go/go.mod @@ -59,7 +59,7 @@ require ( github.com/cespare/xxhash v1.1.0 github.com/creasty/defaults v1.6.0 github.com/dolthub/flatbuffers/v23 v23.3.3-dh.2 - github.com/dolthub/go-mysql-server v0.16.1-0.20230728172236-623d669ca320 + github.com/dolthub/go-mysql-server v0.16.1-0.20230801110053-12b176a3b487 github.com/dolthub/swiss v0.1.0 github.com/goccy/go-json v0.10.2 github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 diff --git a/go/go.sum b/go/go.sum index a48afc5ea8..57b01f38ec 100644 --- a/go/go.sum +++ b/go/go.sum @@ -180,8 +180,8 @@ github.com/dolthub/fslock v0.0.3 h1:iLMpUIvJKMKm92+N1fmHVdxJP5NdyDK5bK7z7Ba2s2U= github.com/dolthub/fslock v0.0.3/go.mod h1:QWql+P17oAAMLnL4HGB5tiovtDuAjdDTPbuqx7bYfa0= github.com/dolthub/go-icu-regex v0.0.0-20230524105445-af7e7991c97e h1:kPsT4a47cw1+y/N5SSCkma7FhAPw7KeGmD6c9PBZW9Y= github.com/dolthub/go-icu-regex v0.0.0-20230524105445-af7e7991c97e/go.mod h1:KPUcpx070QOfJK1gNe0zx4pA5sicIK1GMikIGLKC168= -github.com/dolthub/go-mysql-server v0.16.1-0.20230728172236-623d669ca320 h1:125yZgAbBPKl9fyMZ5WU4+LsVx6ofjFUFWosz8YDRUc= -github.com/dolthub/go-mysql-server v0.16.1-0.20230728172236-623d669ca320/go.mod h1:griaEnTRvvP/VCxvNmCidpKuDu5T8z8D17fiqwAFh60= +github.com/dolthub/go-mysql-server v0.16.1-0.20230801110053-12b176a3b487 h1:mKW8UD8eG8QRAnYorcq2lgM4scPSSZbFYJ7Jzd9lXe0= +github.com/dolthub/go-mysql-server v0.16.1-0.20230801110053-12b176a3b487/go.mod h1:griaEnTRvvP/VCxvNmCidpKuDu5T8z8D17fiqwAFh60= github.com/dolthub/ishell v0.0.0-20221214210346-d7db0b066488 h1:0HHu0GWJH0N6a6keStrHhUAK5/o9LVfkh44pvsV4514= github.com/dolthub/ishell v0.0.0-20221214210346-d7db0b066488/go.mod h1:ehexgi1mPxRTk0Mok/pADALuHbvATulTh6gzr7NzZto= github.com/dolthub/jsonpath v0.0.2-0.20230525180605-8dc13778fd72 h1:NfWmngMi1CYUWU4Ix8wM+USEhjc+mhPlT9JUR/anvbQ= diff --git a/go/libraries/doltcore/sqle/database.go b/go/libraries/doltcore/sqle/database.go index 4a4b3b6c54..05687a8b08 100644 --- a/go/libraries/doltcore/sqle/database.go +++ b/go/libraries/doltcore/sqle/database.go @@ -884,13 +884,28 @@ func (db Database) CreateIndexedTable(ctx *sql.Context, tableName string, sch sq } // CreateFulltextTableNames returns a set of names that will be used to create Full-Text pseudo-index tables. -func (db Database) CreateFulltextTableNames(ctx *sql.Context, parentTable string, parentIndexName string) (fulltext.IndexTableNames, error) { +func (db Database) CreateFulltextTableNames(ctx *sql.Context, parentTableName string, parentIndexName string) (fulltext.IndexTableNames, error) { + allTableNames, err := db.GetAllTableNames(ctx) + if err != nil { + return fulltext.IndexTableNames{}, err + } + var tablePrefix string +OuterLoop: + for i := uint64(0); true; i++ { + tablePrefix = strings.ToLower(fmt.Sprintf("dolt_%s_%s_%d", parentTableName, parentIndexName, i)) + for _, tableName := range allTableNames { + if strings.HasPrefix(strings.ToLower(tableName), tablePrefix) { + continue OuterLoop + } + } + break + } return fulltext.IndexTableNames{ - Config: fmt.Sprintf("dolt_%s_fts_config", parentTable), - Position: fmt.Sprintf("dolt_%s_%s_fts_position", parentTable, parentIndexName), - DocCount: fmt.Sprintf("dolt_%s_%s_fts_doc_count", parentTable, parentIndexName), - GlobalCount: fmt.Sprintf("dolt_%s_%s_fts_global_count", parentTable, parentIndexName), - RowCount: fmt.Sprintf("dolt_%s_%s_fts_row_count", parentTable, parentIndexName), + Config: fmt.Sprintf("dolt_%s_fts_config", parentTableName), + Position: fmt.Sprintf("%s_fts_position", tablePrefix), + DocCount: fmt.Sprintf("%s_fts_doc_count", tablePrefix), + GlobalCount: fmt.Sprintf("%s_fts_global_count", tablePrefix), + RowCount: fmt.Sprintf("%s_fts_row_count", tablePrefix), }, nil } diff --git a/go/libraries/doltcore/sqle/sqlfmt/schema_fmt.go b/go/libraries/doltcore/sqle/sqlfmt/schema_fmt.go index 99a0105a46..d4c560e7d0 100644 --- a/go/libraries/doltcore/sqle/sqlfmt/schema_fmt.go +++ b/go/libraries/doltcore/sqle/sqlfmt/schema_fmt.go @@ -36,7 +36,8 @@ func GenerateCreateTableIndentedColumnDefinition(col schema.Column) string { // GenerateCreateTableIndexDefinition returns index definition for CREATE TABLE statement with indentation of 2 spaces func GenerateCreateTableIndexDefinition(index schema.Index) string { - return sql.GenerateCreateTableIndexDefinition(index.IsUnique(), index.IsSpatial(), index.Name(), sql.QuoteIdentifiers(index.ColumnNames()), index.Comment()) + return sql.GenerateCreateTableIndexDefinition(index.IsUnique(), index.IsSpatial(), index.IsFullText(), index.Name(), + sql.QuoteIdentifiers(index.ColumnNames()), index.Comment()) } // GenerateCreateTableForeignKeyDefinition returns foreign key definition for CREATE TABLE statement with indentation of 2 spaces diff --git a/integration-tests/bats/fulltext.bats b/integration-tests/bats/fulltext.bats index 291f024282..8cc39b6bc4 100644 --- a/integration-tests/bats/fulltext.bats +++ b/integration-tests/bats/fulltext.bats @@ -24,7 +24,7 @@ teardown() { dolt sql -q "CREATE TABLE test (pk BIGINT UNSIGNED PRIMARY KEY, v1 VARCHAR(200), v2 VARCHAR(200), FULLTEXT idx (v1, v2));" dolt sql -q "INSERT INTO test VALUES (1, 'abc', 'def pqr'), (2, 'ghi', 'jkl'), (3, 'mno', 'mno'), (4, 'stu vwx', 'xyz zyx yzx'), (5, 'ghs', 'mno shg');" - run dolt sql -q "SELECT * FROM dolt_test_idx_fts_global_count;" + run dolt sql -q "SELECT * FROM dolt_test_idx_0_fts_global_count;" [[ "$output" =~ "| word | global_count |" ]] || false [[ "$output" =~ "| abc | 1 |" ]] || false [[ "$output" =~ "| def | 1 |" ]] || false @@ -55,7 +55,7 @@ teardown() { dolt checkout main dolt merge other - run dolt sql -q "SELECT * FROM dolt_test_idx_fts_global_count;" + run dolt sql -q "SELECT * FROM dolt_test_idx_0_fts_global_count;" [[ "$output" =~ "| word | global_count |" ]] || false [[ "$output" =~ "| abc | 1 |" ]] || false [[ "$output" =~ "| bot | 1 |" ]] || false @@ -79,29 +79,29 @@ teardown() { dolt sql -q "INSERT INTO test VALUES (1, 'abc');" run dolt sql -q "SELECT * FROM dolt_test_fts_config;" [ "$status" -eq 0 ] - run dolt sql -q "SELECT * FROM dolt_test_idx_fts_position;" + run dolt sql -q "SELECT * FROM dolt_test_idx_0_fts_position;" [[ "$output" =~ "| word | C0 | position |" ]] || false [[ "$output" =~ "| abc | 1 | 0 |" ]] || false - run dolt sql -q "SELECT * FROM dolt_test_idx_fts_doc_count;" + run dolt sql -q "SELECT * FROM dolt_test_idx_0_fts_doc_count;" [[ "$output" =~ "| word | C0 | doc_count |" ]] || false [[ "$output" =~ "| abc | 1 | 1 |" ]] || false - run dolt sql -q "SELECT * FROM dolt_test_idx_fts_global_count;" + run dolt sql -q "SELECT * FROM dolt_test_idx_0_fts_global_count;" [[ "$output" =~ "| word | global_count |" ]] || false [[ "$output" =~ "| abc | 1 |" ]] || false - run dolt sql -q "SELECT * FROM dolt_test_idx_fts_row_count;" + run dolt sql -q "SELECT * FROM dolt_test_idx_0_fts_row_count;" [[ "$output" =~ "| row_hash | row_count | unique_words |" ]] || false [[ "$output" =~ "| c38b3e71346a4847af87d87153e01eae2d83d905df14cc09ec1ac30516ec44ed | 1 | 1 |" ]] || false dolt sql -q "DROP INDEX idx ON test;" run dolt sql -q "SELECT * FROM dolt_test_fts_config;" [ "$status" -eq 1 ] - run dolt sql -q "SELECT * FROM dolt_test_idx_fts_position;" + run dolt sql -q "SELECT * FROM dolt_test_idx_0_fts_position;" [ "$status" -eq 1 ] - run dolt sql -q "SELECT * FROM dolt_test_idx_fts_doc_count;" + run dolt sql -q "SELECT * FROM dolt_test_idx_0_fts_doc_count;" [ "$status" -eq 1 ] - run dolt sql -q "SELECT * FROM dolt_test_idx_fts_global_count;" + run dolt sql -q "SELECT * FROM dolt_test_idx_0_fts_global_count;" [ "$status" -eq 1 ] - run dolt sql -q "SELECT * FROM dolt_test_idx_fts_row_count;" + run dolt sql -q "SELECT * FROM dolt_test_idx_0_fts_row_count;" [ "$status" -eq 1 ] } @@ -121,13 +121,13 @@ teardown() { dolt merge other run dolt sql -q "SELECT * FROM dolt_test_fts_config;" [ "$status" -eq 1 ] - run dolt sql -q "SELECT * FROM dolt_test_idx_fts_position;" + run dolt sql -q "SELECT * FROM dolt_test_idx_0_fts_position;" [ "$status" -eq 1 ] - run dolt sql -q "SELECT * FROM dolt_test_idx_fts_doc_count;" + run dolt sql -q "SELECT * FROM dolt_test_idx_0_fts_doc_count;" [ "$status" -eq 1 ] - run dolt sql -q "SELECT * FROM dolt_test_idx_fts_global_count;" + run dolt sql -q "SELECT * FROM dolt_test_idx_0_fts_global_count;" [ "$status" -eq 1 ] - run dolt sql -q "SELECT * FROM dolt_test_idx_fts_row_count;" + run dolt sql -q "SELECT * FROM dolt_test_idx_0_fts_row_count;" [ "$status" -eq 1 ] } @@ -153,13 +153,13 @@ teardown() { dolt merge other run dolt sql -q "SELECT * FROM dolt_test_fts_config;" [ "$status" -eq 1 ] - run dolt sql -q "SELECT * FROM dolt_test_idx_fts_position;" + run dolt sql -q "SELECT * FROM dolt_test_idx_0_fts_position;" [ "$status" -eq 1 ] - run dolt sql -q "SELECT * FROM dolt_test_idx_fts_doc_count;" + run dolt sql -q "SELECT * FROM dolt_test_idx_0_fts_doc_count;" [ "$status" -eq 1 ] - run dolt sql -q "SELECT * FROM dolt_test_idx_fts_global_count;" + run dolt sql -q "SELECT * FROM dolt_test_idx_0_fts_global_count;" [ "$status" -eq 1 ] - run dolt sql -q "SELECT * FROM dolt_test_idx_fts_row_count;" + run dolt sql -q "SELECT * FROM dolt_test_idx_0_fts_row_count;" [ "$status" -eq 1 ] } @@ -181,13 +181,13 @@ teardown() { dolt merge other run dolt sql -q "SELECT * FROM dolt_test_fts_config;" [ "$status" -eq 0 ] - run dolt sql -q "SELECT * FROM dolt_test_idx_fts_position;" + run dolt sql -q "SELECT * FROM dolt_test_idx_0_fts_position;" [ "$status" -eq 0 ] - run dolt sql -q "SELECT * FROM dolt_test_idx_fts_doc_count;" + run dolt sql -q "SELECT * FROM dolt_test_idx_0_fts_doc_count;" [ "$status" -eq 0 ] - run dolt sql -q "SELECT * FROM dolt_test_idx_fts_global_count;" + run dolt sql -q "SELECT * FROM dolt_test_idx_0_fts_global_count;" [ "$status" -eq 0 ] - run dolt sql -q "SELECT * FROM dolt_test_idx_fts_row_count;" + run dolt sql -q "SELECT * FROM dolt_test_idx_0_fts_row_count;" [ "$status" -eq 0 ] } @@ -213,12 +213,12 @@ teardown() { dolt merge other run dolt sql -q "SELECT * FROM dolt_test_fts_config;" [ "$status" -eq 0 ] - run dolt sql -q "SELECT * FROM dolt_test_idx_fts_position;" + run dolt sql -q "SELECT * FROM dolt_test_idx_0_fts_position;" [ "$status" -eq 0 ] - run dolt sql -q "SELECT * FROM dolt_test_idx_fts_doc_count;" + run dolt sql -q "SELECT * FROM dolt_test_idx_0_fts_doc_count;" [ "$status" -eq 0 ] - run dolt sql -q "SELECT * FROM dolt_test_idx_fts_global_count;" + run dolt sql -q "SELECT * FROM dolt_test_idx_0_fts_global_count;" [ "$status" -eq 0 ] - run dolt sql -q "SELECT * FROM dolt_test_idx_fts_row_count;" + run dolt sql -q "SELECT * FROM dolt_test_idx_0_fts_row_count;" [ "$status" -eq 0 ] } diff --git a/integration-tests/data-dump-loading-tests/sakila_dump.sql b/integration-tests/data-dump-loading-tests/sakila_dump.sql index 6c01636a03..aaa4007b42 100755 --- a/integration-tests/data-dump-loading-tests/sakila_dump.sql +++ b/integration-tests/data-dump-loading-tests/sakila_dump.sql @@ -84,7 +84,7 @@ CREATE TABLE `address` ( `last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`address_id`), KEY `idx_fk_city_id` (`city_id`), - /* UNSUPPORTED SYNTAX (https://github.com/dolthub/dolt/issues/3204): SPATIAL KEY `idx_location` (`location`), */ + SPATIAL KEY `idx_location` (`location`), CONSTRAINT `fk_address_city` FOREIGN KEY (`city_id`) REFERENCES `city` (`city_id`) ON DELETE RESTRICT ON UPDATE CASCADE ) ENGINE=InnoDB AUTO_INCREMENT=606 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; /*!40101 SET character_set_client = @saved_cs_client */; @@ -433,8 +433,8 @@ CREATE TABLE `film_text` ( `film_id` smallint NOT NULL, `title` varchar(255) NOT NULL, `description` text, - PRIMARY KEY (`film_id`)/*, UNSUPPORTED SYNTAX (https://github.com/dolthub/dolt/issues/2987): - FULLTEXT KEY `idx_title_description` (`title`,`description`)*/ + PRIMARY KEY (`film_id`), + FULLTEXT KEY `idx_title_description` (`title`,`description`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; /*!40101 SET character_set_client = @saved_cs_client */;