Releases: dolthub/dolt
Releases · dolthub/dolt
1.43.9
Merged PRs
dolt
- 8494: Fix bounds check in import scanner
fixes: #8495
The before code checks whethers.i
is valid after doing the buffer access:The after code inverts the check to make surefor ; unicode.IsSpace(rune(s.buf[s.i])); s.i++ { if s.i >= s.fill { s.read() } }
s.i
is valid before indexing into the buffer.for { if s.i >= s.fill { s.read() } if !unicode.IsSpace(rune(s.buf[s.i])) { break } s.i++ }
- 8479: cross-schema foreign key support for doltgres tables
Depends on dolthub/go-mysql-server#2713
go-mysql-server
- 2717: push
Distinct
nodes belowSort
nodes
This PR optimized queries like:When there are many duplicate values in columnselect distinct i from t order by i;
i
, it is much more efficient to eliminate duplicates first, then sort the results.
There are somewhat unrelated optimizations left as TODOs.
Optimize query: #8488 - 2716: Update Parser interface documentation
Updates documentation for theParser
interface to document the requirement that implementations must returnvitess.ErrEmpty
for empty queries. Without this, GMS will not handle empty queries correctly.
Related to: dolthub/doltgresql#884 - 2715: remove exchange node
These aren't used anywhere, so it's getting removed.
Partition still exists if we ever want to reimplement some version of this. - 2713: Support for schema names in foreign key definitions
Adds schema names in many places required for foreign key operation in databases with schemas (doltgres)
Closed Issues
- 8495: Import scanner performs bound check after buffer access
Performance
Read Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 2.11 | 0.62 | 0.3 |
groupby_scan | 13.7 | 17.01 | 1.2 |
index_join | 1.37 | 2.3 | 1.7 |
index_join_scan | 1.27 | 1.86 | 1.5 |
index_scan | 34.95 | 54.83 | 1.6 |
oltp_point_select | 0.18 | 0.26 | 1.4 |
oltp_read_only | 3.49 | 5.37 | 1.5 |
select_random_points | 0.34 | 0.61 | 1.8 |
select_random_ranges | 0.39 | 0.62 | 1.6 |
table_scan | 34.95 | 55.82 | 1.6 |
types_table_scan | 75.82 | 144.97 | 1.9 |
reads_mean_multiplier | 1.5 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
oltp_delete_insert | 8.13 | 5.88 | 0.7 |
oltp_insert | 3.82 | 2.91 | 0.8 |
oltp_read_write | 8.58 | 11.24 | 1.3 |
oltp_update_index | 3.89 | 2.97 | 0.8 |
oltp_update_non_index | 3.89 | 2.91 | 0.7 |
oltp_write_only | 5.47 | 5.99 | 1.1 |
types_delete_insert | 7.7 | 6.32 | 0.8 |
writes_mean_multiplier | 0.9 |
TPC-C TPS Tests | MySQL | Dolt | Multiple |
---|---|---|---|
tpcc-scale-factor-1 | 99.08 | 40.84 | 2.4 |
tpcc_tps_multiplier | 2.4 |
Overall Mean Multiple | 1.60 |
---|
1.43.8
Merged PRs
dolt
- 8487: Fix server init race
Fixes a race between setting the debug log output onDoltDb
and running statistics configuration. - 8465: go/libraries/doltcore/doltdb: root_val.go: Restore ForeignKey TableNames noms serialization as just strings.
- 8453: turn on stats collect by default
- 8451: Stats purge and prune
call dolt_stats_prune()
should wipe the stats database disk contents, and replace with the currently tracked statistics. This is GC-like behavior.
call dolt_stats_purge()
should clear the stats database folder and reinitialize it empty. It's equivalent torm -rf .dolt/stats
and thendolt init
ing a new stats directory.
TODO: more testing and docs
go-mysql-server
- 2715: remove exchange node
These aren't used anywhere, so it's getting removed.
Partition still exists if we ever want to reimplement some version of this. - 2714: remove
plan.QueryProcess
and move logic tofinalizeIters
This PR removes the use ofplan.QueryProcess
and part of thetrackProcess
rule that adds/removes this node.
Instead theTrackedRowIter
is created directly infinalizeIters
. - 2710: Changing
selectExprNeedsAlias
to consider string literal quotes
When fixing a string literal quoting issue in Doltgres (dolthub/doltgresql#868), table functions stopped working, because theselectExprNeedsAlias
started returningtrue
to indicate that an alias was needed (even though it wasn't) and thebuildTableFunc
function would fail.
This started happening because the quoted string literals no longer matchedInputExpression
, sinceInputExpression
always trims off quotes when it is assigned. Another solution could be to expose thetrimQuotes
function from Vitess and use it to trimexpr.String()
before matching againstInputExpression
. - 2709: fix
LOAD DATA
64K buffer limit
This PR increase the buffer size forbufio.Scanner
toLongTextMax
, so hopefully nobody attempts to load a single row larger than 4GB.
Other changes: - 2708: removing transaction committing node
doltgres fix: dolthub/doltgresql#872 - 2702: fix: make SET system type case-insensitive
Resolves #2701 - 2697: expose planbuilder methods for domain support in Doltgres
Closed Issues
1.43.7
Merged PRs
dolt
- 8462: dolt gc --full: Implement a flag for GC which will collect everything, including the old gen.
Dolt GC is generational. By default, it moves all chunks reachable from commits into the old gen, and it leaves uncommitted data in the new gen. By default, it never revisits the chunks in the old gen. This means that if a branch with a lot of unique data exists during a GC, and then gets deleted, the storage taken up by that branch is never reclaimed by future garbage collection.
This PR implementsdolt gc --full
, which performs a collection on the entire database, ignoring the generational aspects of previous collections and visiting the entire set of live data. At the end of a successfuldolt gc --full
, only data which was reachable at the start of the run and data which has been written during the run will be present in the database.
Note:dolt gc --full
visits every reachable chunk in the database and can be resource intensive. As a consequence of runningdolt gc --full
, any previously archived table files will be unarchived, and storage savings from the archiving will be lost.dolt gc --full
involves copying chunks into new storage files, and fully materializing the new files before the old files are deleted; as a consequence, peak disk utilisation while runningdolt gc --full
can be up to 2x the existing size of the database. - 8461: Serialize schema names in foreign key constraints
- 8459: Fix merge bugs for doltgres
Closed Issues
- 7873: Running sql-server from an empty state make inconsistent repository
Performance
Read Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 2.11 | 0.62 | 0.3 |
groupby_scan | 13.46 | 16.71 | 1.2 |
index_join | 1.37 | 2.3 | 1.7 |
index_join_scan | 1.27 | 1.86 | 1.5 |
index_scan | 34.33 | 54.83 | 1.6 |
oltp_point_select | 0.18 | 0.27 | 1.5 |
oltp_read_only | 3.49 | 5.47 | 1.6 |
select_random_points | 0.34 | 0.61 | 1.8 |
select_random_ranges | 0.39 | 0.62 | 1.6 |
table_scan | 34.33 | 55.82 | 1.6 |
types_table_scan | 74.46 | 147.61 | 2.0 |
reads_mean_multiplier | 1.5 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
oltp_delete_insert | 8.13 | 5.88 | 0.7 |
oltp_insert | 3.82 | 2.91 | 0.8 |
oltp_read_write | 8.58 | 11.24 | 1.3 |
oltp_update_index | 3.89 | 2.97 | 0.8 |
oltp_update_non_index | 3.89 | 2.91 | 0.7 |
oltp_write_only | 5.47 | 5.88 | 1.1 |
types_delete_insert | 7.7 | 6.32 | 0.8 |
writes_mean_multiplier | 0.9 |
TPC-C TPS Tests | MySQL | Dolt | Multiple |
---|---|---|---|
tpcc-scale-factor-1 | 98.02 | 40.45 | 2.4 |
tpcc_tps_multiplier | 2.4 |
Overall Mean Multiple | 1.60 |
---|
1.43.6
Merged PRs
dolt
go-mysql-server
- 2704: fix cascade for foreign keys with multiple references
This PR fixes an issue where foreign keys referencing the same column would fail to update the parent table (only on GMS).
Turns out we were adding the updater in the chain under the parent table's name instead of the child's name.
Additionally, has some small refactoring to tidy up the foreign key chain code.
fixes: dolthub/go-mysql-server#2671 - 2703: Minor changes for implicit prefix lengths in Doltgres
Minor changes to support dolthub/doltgresql#829 - 2700: compare and convert system types properly
Changes: - 2699: resolve column defaults for views
Properly display defaults for views.
Also fixes defaults for views with filters.
fixes: #8447 - 2696: clear warnings better and separate warning count from actual warnings
This PR cleans up the logic surrounding warnings and clearing them.
The important part was separating the number of "new" warnings from the list of warnings themselves.
Every query should clear out the warnings from the previous query. The exception isshow warnings
, which only clears the "count" of warnings.
When a server runs a query that produces a warning, it immediately callsshow warnings
. Since theshow warnings
query itself should NOT clear the warnings, the warning count would always be > 0, and incorrectly indicate thatshow warnings
produced a warning. This causes an infinite loop in.NET
. Now, we always clear the warning count, and only clear the warnings themselves when the query is notshow warnings
.
We've also had this weird problem of having to double clear warnings, which this should address.
fixes:
vitess
- 371: support quoted character set values
This PR adds syntax support for quoted character set values.
fix: #8455 - 370: Collapse union types
Replace union type with one interface type. Static type access in reducer stack become runt-time interface conversions. The compiler builder loses the ability to do type checking at build time, so type safety has to be checked with testing.
Additional type enforcements are needed for nil-safety. Nil return values have to be typed correctly in the interface variable for casts up the stack to pass. Interface types do not have default nil values, so I've addedtryCastXXX
helper functions to accommodate untyped nils.
Closed Issues
- 8455: quoted character set value is not supported
- 8447: ERROR: 1105 (HY000): handler caught panic: UnresolvedColumnDefault is a placeholder node, but Type() was called
- 8448: Incorrect type inference for
COALESCE
of system variables - 8443: Log metrics calls to
eventsapi.dolthub.com
in the Dolt server logs at appropriate log levels - 8440: Connector/NET: A warning causes stack overflow
- 2671: setting two foreign keys to associate with the same field, deleting data is normal but does not take effect
Performance
Read Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 2.11 | 0.62 | 0.3 |
groupby_scan | 13.22 | 16.71 | 1.3 |
index_join | 1.34 | 2.3 | 1.7 |
index_join_scan | 1.25 | 1.89 | 1.5 |
index_scan | 34.33 | 56.84 | 1.7 |
oltp_point_select | 0.18 | 0.27 | 1.5 |
oltp_read_only | 3.49 | 5.47 | 1.6 |
select_random_points | 0.34 | 0.61 | 1.8 |
select_random_ranges | 0.39 | 0.62 | 1.6 |
table_scan | 34.33 | 56.84 | 1.7 |
types_table_scan | 74.46 | 144.97 | 1.9 |
reads_mean_multiplier | 1.5 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
oltp_delete_insert | 8.13 | 5.88 | 0.7 |
oltp_insert | 3.82 | 2.91 | 0.8 |
oltp_read_write | 8.58 | 11.24 | 1.3 |
oltp_update_index | 3.89 | 2.97 | 0.8 |
oltp_update_non_index | 3.89 | 2.91 | 0.7 |
oltp_write_only | 5.37 | 5.99 | 1.1 |
types_delete_insert | 7.84 | 6.43 | 0.8 |
writes_mean_multiplier | 0.9 |
TPC-C TPS Tests | MySQL | Dolt | Multiple |
---|---|---|---|
tpcc-scale-factor-1 | 98.91 | 40.71 | 2.4 |
tpcc_tps_multiplier | 2.4 |
Overall Mean Multiple | 1.60 |
---|
1.43.5
Merged PRs
dolt
- 8446: Implemented checking out a table or tables from another commit
Fixes #8442
e.g.dolt checkout HEAD~ -- table1 table2
Closed Issues
- 8442: dolt can restore individual or specified files up to the specified commit record
Performance
Read Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 2.07 | 0.63 | 0.3 |
groupby_scan | 13.22 | 16.71 | 1.3 |
index_join | 1.37 | 2.3 | 1.7 |
index_join_scan | 1.3 | 1.89 | 1.5 |
index_scan | 34.33 | 56.84 | 1.7 |
oltp_point_select | 0.18 | 0.27 | 1.5 |
oltp_read_only | 3.49 | 5.47 | 1.6 |
select_random_points | 0.34 | 0.61 | 1.8 |
select_random_ranges | 0.39 | 0.62 | 1.6 |
table_scan | 34.95 | 57.87 | 1.7 |
types_table_scan | 74.46 | 147.61 | 2.0 |
reads_mean_multiplier | 1.5 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
oltp_delete_insert | 8.13 | 5.99 | 0.7 |
oltp_insert | 3.75 | 2.91 | 0.8 |
oltp_read_write | 8.58 | 11.45 | 1.3 |
oltp_update_index | 3.89 | 2.97 | 0.8 |
oltp_update_non_index | 3.89 | 2.91 | 0.7 |
oltp_write_only | 5.28 | 5.99 | 1.1 |
types_delete_insert | 7.84 | 6.43 | 0.8 |
writes_mean_multiplier | 0.9 |
TPC-C TPS Tests | MySQL | Dolt | Multiple |
---|---|---|---|
tpcc-scale-factor-1 | 99.29 | 40.5 | 2.5 |
tpcc_tps_multiplier | 2.5 |
Overall Mean Multiple | 1.63 |
---|
1.43.4
Merged PRs
dolt
- 8432: support partial foreign key updates
companion pr: dolthub/go-mysql-server#2690
go-mysql-server
- 2696: clear warnings better and separate warning count from actual warnings
This PR cleans up the logic surrounding warnings and clearing them.
The important part was separating the number of "new" warnings from the list of warnings themselves.
Every query should clear out the warnings from the previous query. The exception isshow warnings
, which only clears the "count" of warnings.
When a server runs a query that produces a warning, it immediately callsshow warnings
. Since theshow warnings
query itself should NOT clear the warnings, the warning count would always be > 0, and incorrectly indicate thatshow warnings
produced a warning. This causes an infinite loop in.NET
. Now, we always clear the warning count, and only clear the warnings themselves when the query is notshow warnings
.
We've also had this weird problem of having to double clear warnings, which this should address.
fixes: - 2695: add view column information to
information_schema.columns
This PR has information_schema reparse create view statements to fill in missing information for theinformation_schema.columns
table. There maybe small differences in column type for more complex views, but should be fine.
Implementing usingview.TextDefinition
would be slightly easier/cleaner, but for some reason its sometimes empty? Seems like something to do with fragments on dolt side.
fixes: #3168 - 2692: alter underlying enum values to preserve enum strings
fixes: #7472 - 2691: Bug fix for DESCRIBE with a schema name
- 2690: only check references for updated columns
fixes: #2690 - 2689: Support for schema name in SHOW TABLE statements
This provides support forshow tables from public
andshow table from mydb.public
in postgres dialects.
Closed Issues
- 8440: Connector/NET: A warning causes stack overflow
- 6921: warnings are not clearing from running the same queries multiple times
- 2690: When updating rows, Dolt requires all values in the row to satisfy constraints, not just the values changed
- 3168:
information_schema.columns
does not contain all associated view information - 7472: Dolt doesn't update enum/set values when the type is changed
1.43.3
Merged PRs
dolt
- 8434: Fix GetSchema for detached head
- 8430: Database returns tables in all schemas when schema is not set
- 8425: testing benchmarks
go-mysql-server
- 2689: Support for schema name in SHOW TABLE statements
This provides support forshow tables from public
andshow table from mydb.public
in postgres dialects. - 2685: unbump protobuf
- 2676: Optimization: Defer Projections for Server Queries
This PR speeds up spooling queries from the server to client when there is a top level projection.
Changes include:- remove unnecessary double allocation of NewROw
- defer projections until RowToSQL to avoid one extra allocation of
sql.Row
Additionally, this PR cleans up and refactors some code surrounding projections.
- 2451: Bump google.golang.org/protobuf from 1.28.1 to 1.33.0
Bumps google.golang.org/protobuf from 1.28.1 to 1.33.0.
vitess
- 370: Collapse union types
Replace union type with one interface type. Static type access in reducer stack become runt-time interface conversions. The compiler builder loses the ability to do type checking at build time, so type safety has to be checked with testing.
Additional type enforcements are needed for nil-safety. Nil return values have to be typed correctly in the interface variable for casts up the stack to pass. Interface types do not have default nil values, so I've addedtryCastXXX
helper functions to accommodate untyped nils. - 369: Added schema name to show table opts
No way to populate this field from the parser directly, must be set manually when generating the AST via other means. - 367: Adding AST support for setting/dropping column attributes
AST support for altering type and not null constraint, without having to respecify the full column definition. Needed to support Postgres' more modularALTER TABLE
syntax.
Closed Issues
- 3886: Implement
dolt fsck
Performance
Read Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 2.11 | 0.62 | 0.3 |
groupby_scan | 13.46 | 16.71 | 1.2 |
index_join | 1.37 | 2.3 | 1.7 |
index_join_scan | 1.27 | 1.89 | 1.5 |
index_scan | 34.33 | 54.83 | 1.6 |
oltp_point_select | 0.18 | 0.27 | 1.5 |
oltp_read_only | 3.49 | 5.47 | 1.6 |
select_random_points | 0.34 | 0.61 | 1.8 |
select_random_ranges | 0.39 | 0.62 | 1.6 |
table_scan | 34.95 | 55.82 | 1.6 |
types_table_scan | 75.82 | 144.97 | 1.9 |
reads_mean_multiplier | 1.5 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
oltp_delete_insert | 8.13 | 5.88 | 0.7 |
oltp_insert | 3.82 | 2.91 | 0.8 |
oltp_read_write | 8.58 | 11.24 | 1.3 |
oltp_update_index | 3.89 | 2.97 | 0.8 |
oltp_update_non_index | 3.89 | 2.91 | 0.7 |
oltp_write_only | 5.37 | 5.99 | 1.1 |
types_delete_insert | 7.7 | 6.32 | 0.8 |
writes_mean_multiplier | 0.9 |
TPC-C TPS Tests | MySQL | Dolt | Multiple |
---|---|---|---|
tpcc-scale-factor-1 | 98.69 | 40.5 | 2.4 |
tpcc_tps_multiplier | 2.4 |
Overall Mean Multiple | 1.60 |
---|
1.43.2
Merged PRs
dolt
- 8427: Fix AllSchemas for detached head
- 8424: Add information_schema test for detached head
- 8420: Check for
StringType
support before casting
Check forStringType
support before casting, now that Doltgres extended types can support query types without implementingStringType
. - 8418: Properly Read and Write DECIMAL types with Parquet
Turns out Parquet has a thing called convertedType in the schema encoding, which we weren't using.
This PR adds that option to Decimals
fixes: #8384 - 8415: Clean up table functions, fix
dolt_patch
for doltgres
Can unskip this Doltgres test - 8411: Return
schema.table
for table name columns in dolt diff/status tables and functions for doltgres - 8409: dolt fsck
Full object scan implementation ofdolt fsck
This implementation does not support walking the commit history or internal references. - 8404: use global variable for default unix socket file path
Related: dolthub/doltgresql#779 - 8403: Fix dolt_docs for doltgres
- 8402: More TableName fixes for system tables / related methods
- 8401: Fix dolt_schemas for doltgres
- 8400: perf test for proj refactor
- 8399: Use the a type comparator for merge, not the generic comparator
- 8393: Pass
nil
sql.QueryFlags
toplanbuilder.Binder
and bump
companion pr: dolthub/go-mysql-server#2676
go-mysql-server
- 2683: use global parser for engine
- 2681: Add support for setting/dropping column type and nullability
Allows altering column type and a column's not null constraint without having to respecify the full column definition. Needed for Postgres' more modularALTER TABLE
syntax.
Dependent on: dolthub/vitess#367 - 2679: sql/rowexec: merge_join.go: Fix dropped error in incLeft and incRight.
This fixes a bug where certain joins were not able to be canceled in a timely manner by canceling their Context. - 2678: Support information_schema views/tables hooks for doltgres
- 2676: Optimization: Defer Projections for Server Queries
This PR speeds up spooling queries from the server to client when there is a top level projection.
Changes include:- remove unnecessary double allocation of NewROw
- defer projections until RowToSQL to avoid one extra allocation of
sql.Row
Additionally, this PR cleans up and refactors some code surrounding projections.
- 2674: refactor
resultForDefaultIter
Reorganizes some code, and removes one unnecessary sql.Row allocation.
Tiny performance improvement.
vitess
- 367: Adding AST support for setting/dropping column attributes
AST support for altering type and not null constraint, without having to respecify the full column definition. Needed to support Postgres' more modularALTER TABLE
syntax. - 366: allow validate password variables
Closed Issues
- 8384: Parquet dump type for decimal is binary, not decimal
1.43.1
Merged PRs
dolt
- 8398: Add pointer for dolt_docs schema so it can be replaced by doltgres
- 8397: [statsnoms] MCV encoding needs to be delimiter safe
The PR from earlier in the week encoded stats bucket bound rows with prolly formatting. I neglected to encode MCVs in the same way, which are also rows and are subject to the same bugs. - 8391: Return information_schema schema for doltgres
GMS PR: dolthub/go-mysql-server#2678 - 8390: doltgres fixes for constraint violation tables
- 8382: Improve Error Handling for Tags
Changes:- Prevent cloning from a tag through
--branch
option - Return detached head error for checking out branch through cli
Fixes: #8377
- Prevent cloning from a tag through
- 8381: Fix diff related table functions for doltgres
- 8380: Fix
dolt_clean
anddolt_checkout
for doltgres - 8379: Stats safer encode
We previously used commas as serialization boundaries for multi-field stats tuples (bucket bounds). That worked well for numeric values, and doesn't work well for strings with commas. This uses the prolly serialization code to more safely round trip tuples.
We still use commas to separate MCV counts, which are integers, and newlines (\n
) for index types. If types can have newlines at some point we would want to switch that to prolly encoding as well. - 8378: go: doltcore/remotestorage: reliable: Fix leaked goroutines when the context is canceled while reading the HTTP response.
io.Copy into an io.PipeWriter will block until all the bytes have been delivered or the reader is closed. reliable/http StreamingResponse was constructed to only cancel the request context on Close(), not also clear the Reader. The Reader should also be closed to ensure all finalization can still happen if the Write to the PipeWriter is currently blocked when the context is canceled. - 8376: Bug fixes for dolt_reset('table') in doltgres, plus dolt_constaint_vi…
…olation table output for same - 8372: Passing through schema name to fix index creation bug in Doltgres
Bug fix for schema name being lost when adding a unique index to a table through Doltgres.
Fixes: dolthub/doltgresql#725 - 8315: update bind variable type
go-mysql-server
- 2678: Support information_schema views/tables hooks for doltgres
- 2673: Small Refactor to
pruneTables
- 2672: More flexible error checking in enginetests
- 2669: implement
validate_password_strength()
MySQL Docs: https://dev.mysql.com/doc/refman/8.4/en/encryption-functions.html#function_validate-password-strength - 2668: implement
compress()
,uncompress()
, anduncompressed_length()
MySQL Docs:- https://dev.mysql.com/doc/refman/8.4/en/encryption-functions.html#function_compress
- https://dev.mysql.com/doc/refman/8.4/en/encryption-functions.html#function_uncompress
- https://dev.mysql.com/doc/refman/8.4/en/encryption-functions.html#function_uncompressed-length
The library we are using iscompress/zlib
, which is slightly different than the MySQLzlib
implementation. As a result, the actually compressed data is similar but not equivalent. However, this library is still able to uncompress any MySQL compressed data.
There isczlib
, but it is not actively maintained and might requirecgo
.
- 2667: Fix str_to_date function
STR_TO_DATE
function cannot parse "%Y%m%d".
I mentioned it in the issue #2666 - 2665: Fix FunctionalDependencies for NonUnique, NonNull indexes on Server
When using the server engine, we return an error for indexes defined over non-unique not null columns.
This meant that filters over these columns would incorrectly return error when there were duplicate entries.
Oddly, this only happens on server engine and not using dolt sql-shell directly.
The bug stems from a missing check when gathering functional dependencies for equalities.
Related: #8365 - 2661: Example in-memory Vector index using the existing index APIs.
This expands the index interfaces to make it possible to have vector indexes, and demonstrates it with a proof-of-concept in-memory index. It's a rough implementation with some shortcomings: for instance, it doesn't currently handle tables that consist of multiple partitions.
However, this showcases how to use the GMS interfaces to add a vector index. - 2648: use sqlparser.Expr rather than querypb.BindVariabl
vitess
- 366: allow validate password variables
- 365: parse vector index syntax
Supports the following syntax:create table t (v blob, vector index(v))
create vector index vec on t(v)
alter table t add vector index vec on t(v)
Closed Issues
- 628: Implement Signed Commits
- 8377: Dolt clone on tag name results in multiple issues
- 8386: Dolt export/import warts
- 8383: Wrong results from group by query with date types
- 2666: STR_TO_DATE cannot parse "%Y%m%d" format
Performance
Read Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 2.11 | 0.67 | 0.3 |
groupby_scan | 12.98 | 16.71 | 1.3 |
index_join | 1.34 | 2.66 | 2.0 |
index_join_scan | 1.27 | 2.11 | 1.7 |
index_scan | 34.33 | 54.83 | 1.6 |
oltp_point_select | 0.18 | 0.3 | 1.7 |
oltp_read_only | 3.49 | 5.77 | 1.7 |
select_random_points | 0.34 | 0.65 | 1.9 |
select_random_ranges | 0.39 | 0.7 | 1.8 |
table_scan | 34.33 | 55.82 | 1.6 |
types_table_scan | 75.82 | 144.97 | 1.9 |
reads_mean_multiplier | 1.6 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
oltp_delete_insert | 8.13 | 5.99 | 0.7 |
oltp_insert | 3.82 | 3.02 | 0.8 |
oltp_read_write | 8.58 | 12.08 | 1.4 |
oltp_update_index | 3.89 | 3.02 | 0.8 |
oltp_update_non_index | 3.89 | 2.97 | 0.8 |
oltp_write_only | 5.47 | 6.21 | 1.1 |
types_delete_insert | 7.84 | 6.55 | 0.8 |
writes_mean_multiplier | 0.9 |
TPC-C TPS Tests | MySQL | Dolt | Multiple |
---|---|---|---|
tpcc-scale-factor-1 | 99.38 | 39.5 | 2.5 |
tpcc_tps_multiplier | 2.5 |
Overall Mean Multiple | 1.67 |
---|
1.43.0
Merged PRs
dolt
- 8367: mark unscoped commit index as not unique
The index defined over thecommit_hash
column was marked as unique, when it definitely is not.
Along with fix from dolthub/go-mysql-server#2665
fixes #8365 - 8363: \edit support in
dolt sql
shell
Enable users to edit multiline queries in their EDITOR of choice. This is awkward to test, so punting on that for the time being. - 8359: More flexible
diff
printing when schema changes type of column
This partially addresses an old bug described in the fixed issue. There are certainly more complete solutions, but this seems like the right amount of effort for something pretty edge casey.
Fixes: #8133 - 8356: Compare strings with
strings.EqualFold
This PR fixes a Staticcheck warning (https://staticcheck.dev/docs/checks/#SA6005). Comparing two strings to the same case withstrings.ToLower
andstrings.ToUpper
is more computational expensive thanstrings.EqualFold
.
Sample benchmark:Result:func BenchmarkToUpperSingle(b *testing.B) { for i := 0; i < b.N; i++ { if strings.ToUpper("foobar") != "FOOBAR" { b.Fail() } } } func BenchmarkToUpperDouble(b *testing.B) { for i := 0; i < b.N; i++ { if strings.ToUpper("foobar") != strings.ToUpper("FOOBAR") { b.Fail() } } } func BenchmarkToLowerSingle(b *testing.B) { for i := 0; i < b.N; i++ { if strings.ToLower("FOOBAR") != "foobar" { b.Fail() } } } func BenchmarkToLowerDouble(b *testing.B) { for i := 0; i < b.N; i++ { if strings.ToLower("FOOBAR") != strings.ToLower("foobar") { b.Fail() } } } func BenchmarkEqualFold(b *testing.B) { for i := 0; i < b.N; i++ { if !strings.EqualFold("FOOBAR", "foobar") { b.Fail() } } }
goos: linux goarch: amd64 pkg: github.com/dolthub/dolt/go cpu: AMD Ryzen 7 PRO 4750U with Radeon Graphics BenchmarkToUpperSingle-16 9589896 113.8 ns/op 8 B/op 1 allocs/op BenchmarkToUpperDouble-16 7097330 155.9 ns/op 8 B/op 1 allocs/op BenchmarkToLowerSingle-16 12346219 106.5 ns/op 8 B/op 1 allocs/op BenchmarkToLowerDouble-16 8084006 143.6 ns/op 8 B/op 1 allocs/op BenchmarkEqualFold-16 63650023 18.76 ns/op 0 B/op 0 allocs/op PASS ok github.com/dolthub/dolt/go 6.456s
- 8347: Bug fixes for schema names in reset operation
Also factored some methods into the procedure to make it readable - 8305: Support for signed commits.
go-mysql-server
- 2665: Fix FunctionalDependencies for NonUnique, NonNull indexes on Server
When using the server engine, we return an error for indexes defined over non-unique not null columns.
This meant that filters over these columns would incorrectly return error when there were duplicate entries.
Oddly, this only happens on server engine and not using dolt sql-shell directly.
The bug stems from a missing check when gathering functional dependencies for equalities.
Related: #8365 - 2664: Updated go-icu-regex
- 2663: [stats] convert binary to string for stats bound rows
tests on Dolt side for round-trip serialization: #8361 - 2662: implement
charset()
function
MySQL Docs: https://dev.mysql.com/doc/refman/8.4/en/information-functions.html#function_charset
vitess
- 365: parse vector index syntax
Supports the following syntax:create table t (v blob, vector index(v))
create vector index vec on t(v)
alter table t add vector index vec on t(v)
- 363: support syntax for get_format
MySQL Docs: https://dev.mysql.com/doc/refman/8.4/en/date-and-time-functions.html#function_get-format
Closed Issues
- 8365:
dolt_diff
withcommit_hash
filter errors withresult max1Row iterator returned more than one row
- 8133:
\diff
doesn't handle decimal diffs. It just prints integers.
Performance
Read Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 2.07 | 0.65 | 0.3 |
groupby_scan | 13.22 | 16.71 | 1.3 |
index_join | 1.34 | 2.71 | 2.0 |
index_join_scan | 1.27 | 2.11 | 1.7 |
index_scan | 34.95 | 54.83 | 1.6 |
oltp_point_select | 0.18 | 0.3 | 1.7 |
oltp_read_only | 3.55 | 5.77 | 1.6 |
select_random_points | 0.34 | 0.65 | 1.9 |
select_random_ranges | 0.39 | 0.7 | 1.8 |
table_scan | 34.95 | 55.82 | 1.6 |
types_table_scan | 77.19 | 144.97 | 1.9 |
reads_mean_multiplier | 1.6 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
oltp_delete_insert | 8.28 | 5.99 | 0.7 |
oltp_insert | 3.82 | 2.97 | 0.8 |
oltp_read_write | 8.74 | 11.87 | 1.4 |
oltp_update_index | 3.89 | 3.02 | 0.8 |
oltp_update_non_index | 3.89 | 2.97 | 0.8 |
oltp_write_only | 5.47 | 6.21 | 1.1 |
types_delete_insert | 7.84 | 6.43 | 0.8 |
writes_mean_multiplier | 0.9 |
TPC-C TPS Tests | MySQL | Dolt | Multiple |
---|---|---|---|
tpcc-scale-factor-1 | 98.86 | 38.91 | 2.5 |
tpcc_tps_multiplier | 2.5 |
Overall Mean Multiple | 1.67 |
---|