Skip to content

Releases: dolthub/dolt

1.43.9

25 Oct 22:35
Compare
Choose a tag to compare

Merged PRs

dolt

  • 8494: Fix bounds check in import scanner
    fixes: #8495
    The before code checks whether s.i is valid after doing the buffer access:
    for ; unicode.IsSpace(rune(s.buf[s.i])); s.i++ {
    if s.i >= s.fill {
    s.read()
    }
    }
    The after code inverts the check to make sure 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 below Sort nodes
    This PR optimized queries like:
    select distinct i from t order by i;
    When there are many duplicate values in column 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 the Parser interface to document the requirement that implementations must return vitess.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

24 Oct 18:25
Compare
Choose a tag to compare

Merged PRs

dolt

  • 8487: Fix server init race
    Fixes a race between setting the debug log output on DoltDb 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 to rm -rf .dolt/stats and then dolt initing 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 to finalizeIters
    This PR removes the use of plan.QueryProcess and part of the trackProcess rule that adds/removes this node.
    Instead the TrackedRowIter is created directly in finalizeIters.
  • 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 the selectExprNeedsAlias started returning true to indicate that an alias was needed (even though it wasn't) and the buildTableFunc function would fail.
    This started happening because the quoted string literals no longer matched InputExpression, since InputExpression always trims off quotes when it is assigned. Another solution could be to expose the trimQuotes function from Vitess and use it to trim expr.String() before matching against InputExpression.
  • 2709: fix LOAD DATA 64K buffer limit
    This PR increase the buffer size for bufio.Scanner to LongTextMax, so hopefully nobody attempts to load a single row larger than 4GB.
    Other changes:
    • moves ignore lines logic to within the loadDataIter
    • drops extra scanner.Text() logic
    • use byte comparison instead of string cast and string comparison
      benchmark: #8467
      fixes: #8469
  • 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

  • 8469: LOAD DATA LOCAL INFILE fails when row size exceeds 64K (65535 bytes) limit
  • 2701: lowercase sql mode values are not supported
  • 2671: setting two foreign keys to associate with the same field, deleting data is normal but does not take effect

1.43.7

17 Oct 20:23
Compare
Choose a tag to compare

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 implements dolt 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 successful dolt 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 running dolt 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 running dolt 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

16 Oct 21:49
Compare
Choose a tag to compare

Merged PRs

dolt

  • 8450: log server metrics heartbeat
    fixes: #8443

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:
    • IsType() methods now account for system variable types,
    • coalesce type comparison accounts for system variable types
    • create table from select ... statements account for system variable types
      Note: MySQL lists @@admin_port as Integer in their docs, but shows up as UInteger in the CLI
      fixes: #8448
  • 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 is show warnings, which only clears the "count" of warnings.
    When a server runs a query that produces a warning, it immediately calls show warnings. Since the show warnings query itself should NOT clear the warnings, the warning count would always be > 0, and incorrectly indicate that show 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 not show 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 added tryCastXXX 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

12 Oct 03:56
Compare
Choose a tag to compare

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

11 Oct 23:35
Compare
Choose a tag to compare

Merged PRs

dolt

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 is show warnings, which only clears the "count" of warnings.
    When a server runs a query that produces a warning, it immediately calls show warnings. Since the show warnings query itself should NOT clear the warnings, the warning count would always be > 0, and incorrectly indicate that show 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 not show 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 the information_schema.columns table. There maybe small differences in column type for more complex views, but should be fine.
    Implementing using view.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 for show tables from public and show 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

10 Oct 21:40
Compare
Choose a tag to compare

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 for show tables from public and show 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 added tryCastXXX 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 modular ALTER 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

08 Oct 21:27
Compare
Choose a tag to compare

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 for StringType support before casting, now that Doltgres extended types can support query types without implementing StringType.
  • 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 of dolt 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 to planbuilder.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 modular ALTER 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 modular ALTER TABLE syntax.
  • 366: allow validate password variables

Closed Issues

  • 8384: Parquet dump type for decimal is binary, not decimal

1.43.1

26 Sep 23:41
Compare
Choose a tag to compare

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
  • 8381: Fix diff related table functions for doltgres
  • 8380: Fix dolt_clean and dolt_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

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

18 Sep 19:29
Compare
Choose a tag to compare

Merged PRs

dolt

  • 8367: mark unscoped commit index as not unique
    The index defined over the commit_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
    2024-09-13_23-00
    This PR fixes a Staticcheck warning (https://staticcheck.dev/docs/checks/#SA6005). Comparing two strings to the same case with strings.ToLower and strings.ToUpper is more computational expensive than strings.EqualFold.
    Sample benchmark:
    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()
        }
      }
    }
    Result:
    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

Closed Issues

  • 8365: dolt_diff with commit_hash filter errors with result 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