Bot releases are visible (Hide)
Published by github-actions[bot] about 1 year ago
dolt log
and dolt_log
to avoid supporting unneeded flags.dolt version --verbose
dolt version
displayed the storage format version by default, but this information is less relevant now that almost all Dolt databases have been migrated to the new storage format. This change adds a new --verbose
/ -v
flag that customers can specify if they do want to see the storage format version for a repository.dolt log
to use sql backenddolt log
to use sql backend to generate results.loadEvents
and move event resolving out of execution time.dolt_patch()
table function should consider filters for schema or data only changesdolt version
should not care about format anymoreRead Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 2.07 | 2.97 | 1.4 |
groupby_scan | 13.22 | 17.95 | 1.4 |
index_join | 1.3 | 4.74 | 3.6 |
index_join_scan | 1.23 | 2.26 | 1.8 |
index_scan | 32.53 | 58.92 | 1.8 |
oltp_point_select | 0.14 | 0.4 | 2.9 |
oltp_read_only | 2.71 | 7.3 | 2.7 |
select_random_points | 0.31 | 0.7 | 2.3 |
select_random_ranges | 0.37 | 1.03 | 2.8 |
table_scan | 33.12 | 58.92 | 1.8 |
types_table_scan | 75.82 | 170.48 | 2.2 |
reads_mean_multiplier | 2.2 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
bulk_insert | 0.001 | 0.001 | 1.0 |
oltp_delete_insert | 5.09 | 5.77 | 1.1 |
oltp_insert | 2.48 | 2.86 | 1.2 |
oltp_read_write | 6.09 | 14.21 | 2.3 |
oltp_update_index | 2.48 | 2.91 | 1.2 |
oltp_update_non_index | 2.61 | 2.91 | 1.1 |
oltp_write_only | 3.68 | 7.04 | 1.9 |
types_delete_insert | 5.18 | 6.09 | 1.2 |
writes_mean_multiplier | 1.4 |
Overall Mean Multiple | 1.9 |
---|
Published by github-actions[bot] about 1 year ago
*
wildcard in @@dolt_replicate_heads
*
as a wildcard in the @@dolt_replicate_heads
system variable to match zero or more characters in a branch name. For example, to replicate the main
branch and all branches that start with feature
, the following configuration can now be applied:
dolt config --local --add sqlserver.global.dolt_replicate_heads main,feature*
Documentation: https://github.com/dolthub/docs/pull/1698VARCHAR
fields to TEXT
VARCHAR
→ TINYTEXT
, TEXT
, MEDIUMTEXT
, LONGTEXT
CHAR
→ TINYTEXT
, TEXT
, MEDIUMTEXT
, LONGTEXT
BINARY
→ TINYBLOB
, BLOB
, MEDIUMBLOB
, LONGBLOB
VARBINARY
→ TINYBLOB
, BLOB
, MEDIUMBLOB
, LONGBLOB
VARCHAR
column larger than 255 characters to make it a TINYTEXT
column will still generate a schema conflict, since TINYTEXT
has a maximum size of 255 characters.VARBINARY(N)
or TINYTEXT
to BINARY(N)
. MySQL right-pads all BINARY(N)
values with null bytes, up to N
, which requires us to call Type.Convert
as part of remapping values in a schema merge, and also to rebuild secondary indexes in some cases.convert
cast is moved to a position where it cannot have a type clash with a table relation to the right.LAST_INSERT_ID()
always returns 0
TEXT
columnRead Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 2.07 | 2.86 | 1.4 |
groupby_scan | 12.98 | 17.95 | 1.4 |
index_join | 1.27 | 4.74 | 3.7 |
index_join_scan | 1.21 | 2.26 | 1.9 |
index_scan | 32.53 | 59.99 | 1.8 |
oltp_point_select | 0.14 | 0.4 | 2.9 |
oltp_read_only | 2.71 | 7.3 | 2.7 |
select_random_points | 0.31 | 0.72 | 2.3 |
select_random_ranges | 0.37 | 1.03 | 2.8 |
table_scan | 33.12 | 59.99 | 1.8 |
types_table_scan | 74.46 | 173.58 | 2.3 |
reads_mean_multiplier | 2.3 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
bulk_insert | 0.001 | 0.001 | 1.0 |
oltp_delete_insert | 4.65 | 5.57 | 1.2 |
oltp_insert | 2.18 | 2.71 | 1.2 |
oltp_read_write | 6.09 | 14.21 | 2.3 |
oltp_update_index | 2.3 | 2.81 | 1.2 |
oltp_update_non_index | 2.35 | 2.81 | 1.2 |
oltp_write_only | 3.25 | 7.04 | 2.2 |
types_delete_insert | 4.65 | 5.88 | 1.3 |
writes_mean_multiplier | 1.5 |
Overall Mean Multiple | 1.9 |
---|
Published by github-actions[bot] about 1 year ago
CONVERT(x USING y)
expression allows us to convert between character sets. When a string does not have a representing rune in the target character set, it should be replaced by a question mark. This is consistent with MySQL. Our previous behavior logged an error, which is valid in many scenarios, but not for this particular expression.Read Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 2.11 | 2.97 | 1.4 |
groupby_scan | 12.98 | 17.95 | 1.4 |
index_join | 1.27 | 4.74 | 3.7 |
index_join_scan | 1.21 | 2.26 | 1.9 |
index_scan | 32.53 | 58.92 | 1.8 |
oltp_point_select | 0.14 | 0.41 | 2.9 |
oltp_read_only | 2.71 | 7.43 | 2.7 |
select_random_points | 0.31 | 0.73 | 2.4 |
select_random_ranges | 0.37 | 1.04 | 2.8 |
table_scan | 32.53 | 57.87 | 1.8 |
types_table_scan | 75.82 | 167.44 | 2.2 |
reads_mean_multiplier | 2.3 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
bulk_insert | 0.001 | 0.001 | 1.0 |
oltp_delete_insert | 4.74 | 5.67 | 1.2 |
oltp_insert | 2.3 | 2.76 | 1.2 |
oltp_read_write | 5.99 | 14.46 | 2.4 |
oltp_update_index | 2.35 | 2.81 | 1.2 |
oltp_update_non_index | 2.61 | 2.81 | 1.1 |
oltp_write_only | 3.43 | 7.17 | 2.1 |
types_delete_insert | 4.49 | 5.88 | 1.3 |
writes_mean_multiplier | 1.4 |
Overall Mean Multiple | 1.9 |
---|
Published by github-actions[bot] about 1 year ago
useSelectExpressionLiteral
seems to behave differently.Published by github-actions[bot] about 1 year ago
dolt_pull
when roots have different feature versionsdolt_pull()
can mistakenly interpret the difference in root value hash as being uncommitted changes. This change updates dolt_pull()
to use the existing actions.RootHasUncommittedChanges
function and changes that function to account for differing feature version when determining if roots have uncommitted changes.--branch
parameter to Dolt global arguments on the command line.query-diff
cli commandRead Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 2.07 | 2.97 | 1.4 |
groupby_scan | 12.98 | 17.95 | 1.4 |
index_join | 1.27 | 4.74 | 3.7 |
index_join_scan | 1.21 | 2.26 | 1.9 |
index_scan | 32.53 | 58.92 | 1.8 |
oltp_point_select | 0.14 | 0.42 | 3.0 |
oltp_read_only | 2.66 | 7.43 | 2.8 |
select_random_points | 0.31 | 0.73 | 2.4 |
select_random_ranges | 0.37 | 1.06 | 2.9 |
table_scan | 32.53 | 58.92 | 1.8 |
types_table_scan | 75.82 | 167.44 | 2.2 |
reads_mean_multiplier | 2.3 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
bulk_insert | 0.001 | 0.001 | 1.0 |
oltp_delete_insert | 4.65 | 5.67 | 1.2 |
oltp_insert | 2.39 | 2.81 | 1.2 |
oltp_read_write | 5.88 | 14.46 | 2.5 |
oltp_update_index | 2.22 | 2.81 | 1.3 |
oltp_update_non_index | 2.35 | 2.76 | 1.2 |
oltp_write_only | 3.25 | 7.17 | 2.2 |
types_delete_insert | 4.41 | 5.88 | 1.3 |
writes_mean_multiplier | 1.5 |
Overall Mean Multiple | 2.0 |
---|
Published by github-actions[bot] about 1 year ago
dolt sql
connections without argumentssql-server
will result in creating a .dolt/sql-server.lock file in the --data-dir (CWD by default). This file will be used for two purposes:
dolt sql-server
is not started with the same data dir.dolt sql
command to connect to it. See related issue: https://github.com/dolthub/dolt/issues/6508
dolt_log
table function to support more featuresdolt_log
table function to support more features, e.g. accepting more than 2 revisions and accepting table names. This change is motivated by the ongoing CLI migration (https://github.com/dolthub/dolt/issues/3922) as the updated table function will help migrate the dolt log
command.SELECT * FROM DOLT_PATCH(...) WHERE diff_type = "schema"
Published by github-actions[bot] about 1 year ago
This release contains backwards incompatible changes:
dolt_status
system table. Previously the primary key of this table only included the table_name
column. The primary key now also contains the staged
and status
columns to account for the same table name appearing multiple times in dolt_status
(i.e. a table that was staged and then additional unstaged changes being made).Per Dolt’s versioning policy, this is a minor version bump because of the schema change for the dolt_status
system table.
dolt branch foobar HEAD
would print a statement that HEAD is an invalid branch name. It would succeed though, and return an exit status of 0. So tests passed.dolt_status
system table shows if merge is active when there are no conflictsdolt_status
system table. We originally just had table_name
in the primary key, but a table can already show up more than once in dolt_status
. status
and staged
should also be part of the primary key.dolt_status
system table when a schema conflict has been resolved but that table has not yet been committed, which fixes https://github.com/dolthub/dolt/issues/6473
oltp_point_select
(query with smallest time spent in execution) is 5-15% speedup. Impact on queries with longer-runtime will be smaller, proportional to the fraction of time spent in analysis vs execution.AutoIncrementGetter
was moved from the editor to the table years ago, however the interface remained. I debated deleting this during my Full-Text implementation, however decided to leave it. Now, we've encountered an error with an integrator making use of the interface, so it has been removed here and the interface was moved into the integrator since it's an internal detail now.SHOW CREATE TABLE
when the collation was the default collation. Now, it doesn't display it if it's the same as the table collation, which mimics MySQL's behavior.IndexedTableAccess
sql.IndexAddressable
, which any node or table can implement in order to be a candidate for index-based optimization. But in practice, implementing that interface won't actually do anything because the IndexedTableAccess
struct explicitly requires a ResolvedTable.ResolvedTable
field in IndexedTableAccess
with a new interface tentatively called TableNode
, although a more specific name would probably be better.UnderlyingTable
method must implement sql.IndexAddressable
dolt_status
system table should show if merge is activeRead Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 2.11 | 2.97 | 1.4 |
groupby_scan | 13.22 | 18.28 | 1.4 |
index_join | 1.25 | 4.74 | 3.8 |
index_join_scan | 1.21 | 2.22 | 1.8 |
index_scan | 32.53 | 57.87 | 1.8 |
oltp_point_select | 0.14 | 0.42 | 3.0 |
oltp_read_only | 2.71 | 7.43 | 2.7 |
select_random_points | 0.31 | 0.74 | 2.4 |
select_random_ranges | 0.37 | 1.06 | 2.9 |
table_scan | 33.12 | 57.87 | 1.7 |
types_table_scan | 74.46 | 170.48 | 2.3 |
reads_mean_multiplier | 2.3 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
bulk_insert | 0.001 | 0.001 | 1.0 |
oltp_delete_insert | 4.74 | 5.67 | 1.2 |
oltp_insert | 2.26 | 2.86 | 1.3 |
oltp_read_write | 5.99 | 14.46 | 2.4 |
oltp_update_index | 2.35 | 2.86 | 1.2 |
oltp_update_non_index | 2.3 | 2.76 | 1.2 |
oltp_write_only | 3.3 | 7.17 | 2.2 |
types_delete_insert | 4.74 | 5.99 | 1.3 |
writes_mean_multiplier | 1.5 |
Overall Mean Multiple | 1.9 |
---|
Published by github-actions[bot] about 1 year ago
AutoIncrementGetter
was moved from the editor to the table years ago, however the GMS interface remained. We had an internal reliance on the interface, even though GMS does not use it at all, so the interface has been moved to be an internal interface only. This fixes the panic as seen in the issue.Published by github-actions[bot] about 1 year ago
This release contains backwards incompatible changes:
TIMESTAMP
and DATETIME
columns now honor fractional second precision (FSP), from 0 to 6 decimal places. Previous releases of Dolt ignored FSP for these types and always used 6 decimal places. The column type DATETIME
or TIMESTAMP
both now have an implicit FSP of 0 digits (truncated to nearest second), which matches the MySQL behavior. To get the old default of 6 decimal places of FSP, use the types DATETIME(6)
or TIMESTAMP(6)
. Existing tables with DATETIME
or TIMESTAMP
columns are not affected. They store 6-digit precision times before and after this change.Per Dolt’s versioning policy, this is a minor version bump because the same CREATE TABLE
statement with a DATETIME
or TIMESTAMP
column that specify a fractional second precision other than 6 will now produce a different schema than before.
RootValue
is backed by a flatbuffer, but access to the flatbuffer is hidden behind interfaces. We check if two RootValues
are equal by checking the RootValue's hash. This makes it awkward to check to see if two RootValues
differ only by a single field.dolt version
only prints the dolt version if there is no dolt database in the directory.dolt version
in the case of no dolt database found.expression.Alias
into expression.GetField
with the name replaced in the top-level projection.expression.Alias
.USING
clause during joins.ON
clause.NATURAL LEFT/RIGHT JOIN
s.... JOIN ... USING (...)
... LEFT JOIN ... USING (...)
... RIGHT JOIN ... USING (...)
... NATURAL JOIN ...
... NATURAL LEFT JOIN ...
... NATURAL RIGHT JOIN ...
Read Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 2.07 | 3.07 | 1.5 |
groupby_scan | 12.98 | 18.28 | 1.4 |
index_join | 1.27 | 4.74 | 3.7 |
index_join_scan | 1.21 | 2.3 | 1.9 |
index_scan | 32.53 | 59.99 | 1.8 |
oltp_point_select | 0.14 | 0.46 | 3.3 |
oltp_read_only | 2.71 | 7.98 | 2.9 |
select_random_points | 0.31 | 0.84 | 2.7 |
select_random_ranges | 0.37 | 1.21 | 3.3 |
table_scan | 32.53 | 58.92 | 1.8 |
types_table_scan | 75.82 | 170.48 | 2.2 |
reads_mean_multiplier | 2.4 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
bulk_insert | 0.001 | 0.001 | 1.0 |
oltp_delete_insert | 5.47 | 6.09 | 1.1 |
oltp_insert | 2.66 | 3.19 | 1.2 |
oltp_read_write | 6.55 | 15.27 | 2.3 |
oltp_update_index | 2.71 | 3.07 | 1.1 |
oltp_update_non_index | 2.71 | 3.13 | 1.2 |
oltp_write_only | 4.03 | 7.43 | 1.8 |
types_delete_insert | 5.28 | 6.32 | 1.2 |
writes_mean_multiplier | 1.4 |
Overall Mean Multiple | 2.0 |
---|
Published by github-actions[bot] about 1 year ago
ANSI_QUOTES
support for go-mysql-serverSqlMode
type to make it easier to load SQL_MODE and inspect enabled modes.Read Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 2.07 | 3.02 | 1.5 |
groupby_scan | 12.98 | 18.28 | 1.4 |
index_join | 1.25 | 4.82 | 3.9 |
index_join_scan | 1.21 | 2.39 | 2.0 |
index_scan | 32.53 | 58.92 | 1.8 |
oltp_point_select | 0.14 | 0.45 | 3.2 |
oltp_read_only | 2.71 | 7.98 | 2.9 |
select_random_points | 0.31 | 0.83 | 2.7 |
select_random_ranges | 0.37 | 1.18 | 3.2 |
table_scan | 32.53 | 57.87 | 1.8 |
types_table_scan | 75.82 | 170.48 | 2.2 |
reads_mean_multiplier | 2.4 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
bulk_insert | 0.001 | 0.001 | 1.0 |
oltp_delete_insert | 4.57 | 5.88 | 1.3 |
oltp_insert | 2.26 | 2.86 | 1.3 |
oltp_read_write | 5.88 | 15.27 | 2.6 |
oltp_update_index | 2.26 | 2.91 | 1.3 |
oltp_update_non_index | 2.26 | 2.86 | 1.3 |
oltp_write_only | 3.25 | 7.43 | 2.3 |
types_delete_insert | 4.57 | 6.32 | 1.4 |
writes_mean_multiplier | 1.6 |
Overall Mean Multiple | 2.1 |
---|
Published by github-actions[bot] about 1 year ago
This release contains backwards incompatible changes:
dolt_schemas
and dolt_procedures
system tables to allow @@SQL_MODE
to be stored for schema fragments, as part of support for the ANSI_QUOTES
parsing mode. Existing databases will have their system tables automatically upgraded to the new schema.dolt_clone()
and dolt_remote()
no longer support for the optional flags related to AWS (--aws-region, --aws-creds-type, --aws-creds-file, --aws-creds-profile). There is no longer a mechanism to set these values on a running server.Per Dolt’s versioning policy, this is a minor version bump because of the schema changes for these two system tables. For safety, this release also updates the Dolt feature version to version 4, meaning that once a database is upgraded by using this release, interacting with that database through the dolt
CLI requires version 1.11.0 or higher.
dolt sql
from allowing LOAD_FILE
from directories outside of working directorysecure_file_priv
when the server starts up. That variable is non-dynamic, so it cannot be set with SET @@GLOBAL...
BLOB
/TEXT
types since validation checked that the value stored in those fields was a valid address pointing outside of the table to the real data.dolt_remote()
proceduredolt status
, the status table, merge, and diff outputs. This allows them to match the other index tables, which don't show up in those views anyway. Second, it fixes a bug during merge where the pseudo-index tables are the only ones that have been renamed. The setup is very unlikely, but it's been fixed nonetheless.ANSI_QUOTES
supportANSI_QUOTES
SQL mode. When this SQL mode is enabled, anything in double quotes is assumed to be an identifier, and not a string literal.pushdown.go
IndexedTableAccess
nodes. This analysis pass used to run after these nodes were generated, but now runs before, so this code path will never be hit. Removing this logic makes it easier to make future changes to IndexedTableAccess
withTable
subfunction, which never actually does anything, because the only table it will attempt to assign to a ResolvedTable is the table already on the node. This was likely leftover from a previous cleanup.db> select JSON_OBJECT("a", Now());
unsupported type: time.Time
This change enables the encoding of a time stamp into a string.VARBINARY
, including CHAR
, which makes it look like binary data was sent and not a char string, like the caller indicated.sqltypes.Char
bind var type info into VARBINARY
, which enables go-mysql-server to see that a char string was passed. Without this type information, go-mysql-server doesn't seem able to differentiate between legitimate binary data sent by the client versus a character string. Since these types need to be handled differently, and we can't assume that all VARBINARY
types can be converted into strings, it seems like we need to respect the SQL type the caller indicated for the bind var and pass that up to integrators.sqltypes.Char
to see if this approach causes any other issues.Published by github-actions[bot] about 1 year ago
dolthub/zsh
) for easier installationgh
, op
, and other popular toolsfor
loop in zinit like:zinit wait lucid for \
'https://github.com/iloveitaly/dolt/blob/zsh-plugin/dolt.plugin.zsh'
db> select JSON_OBJECT("a", Now());
unsupported type: time.Time
This change enables the encoding of a time stamp into a string.Published by github-actions[bot] about 1 year ago
This release contains backwards incompatible changes:
@@autocommit
support was not throwing an error when @@autocommit
was enabled and a call to dolt_merge()
returned schema conflicts.Per Dolt’s versioning policy, this is a minor version bump because calls to dolt_merge()
that previously completed without error (and reported schema conflicts), will now return an error when @@autocommit
is enabled (the default setting).
@@autocommit
is enabled@@autocommit
is enabled, then a SQL commit will be created after every SQL statement. If a dolt_merge()
operation results in data conflicts, then we return an error, revert the working set, and prevent the SQL commit. Schema conflicts should have the same behavior when @@autocommit
is enabled, but they were not getting caught by our transaction logic.profile
doc string to reflect correct dolt profile add
behavior.EventType
for the new dolt profile
cli command@@autocommit
ondolt pull
from another remote sometimes downloads something despite no new commits being therePublished by github-actions[bot] about 1 year ago
This release contains backwards incompatible changes:
dolt_diff_<tablename>
system table will log a SQL session warning and truncate historical values that are too large to fit in a modified schema. For example, if a varchar(100)
column is changed to varchar(10)
, historical values larger than 10 characters will not be displayed in the dolt_diff_<tablename>
system table and instead SQL warnings are logged and viewable with SHOW WARNINGS;
. This change reverts a previous change (https://github.com/dolthub/dolt/pull/6399) that changed the types of the dolt_diff_<tablename>
system table, and was incorrectly released as a new patch version, instead of a minor version.Per Dolt’s versioning policy, this is a minor version bump because column types for the dolt_diff_<tablename>
system table have changed.
dolt_diff_<tablename>
's schemadolt_diff_<tablename>
system table to their widest setting (e.g. varchar(10)
→ TEXT
), so that any historical values could still be displayed, even if the table's schema has been changed to a more restrictive/narrow type. This had an unintended side effect of changing data types for customers using the dolt_diff_<tablename>
system table, even if they didn't have any schema changes in their table's history.dolt_diff_<tablename>
tables, since the commit graph has to be traversed an extra time before any results can be returned. It also turns out to be fairly involved to compare types – we don't have any APIs for that (yet) and there are some edge cases such as if a Decimal type is changed multiple times with various precision and scale that aren't all valid together.dolt_diff_<tablename>
system table, which is still an improvement over the previous behavior where they would cause the query to error out and not return any result set. It also means that the column types will be the same types as on the current schema, making it easier for customer to know what type to expect in responses.varchar
columnsdolt fetch --prune
deletes any local remote refs that are not present on the remote being fetched. This is simpler than the equivalent git command, as it only operates on branches, not other kinds of refs.--profile
global arg--profile
global arg which can group and apply a specified set of global args for the current command. Includes a new --profile
flag and a new CLI command dolt profile
to manage and list user profiles.AntiHashJoin
and LeftOuterHashExcludeNullsJoin
should always evaluate at least one secondary row if the secondary table is nonempty. This guarentees the same behavior as MySQL for where x not in (...)
expressions when x is nullable.JSON_ARRAY
correctly handles CHAR
bindvar paramsJSON_ARRAY
function wasn't able to handle a []byte
literal expression in a bind var. I also noticed that although our script tests can specify Bindings
, they weren't getting used by our prepared query runners. I also fixed that, so that I could add a new test for this issue.FULLTEXT
indexes. The ordering bug is fairly major, as it could require a drop/readd of the index, so I want to get this out now rather than waiting until I've gotten more tests/fixes in.VARBINARY
, including CHAR
, which makes it look like binary data was sent and not a char string, like the caller indicated.sqltypes.Char
bind var type info into VARBINARY
, which enables go-mysql-server to see that a char string was passed. Without this type information, go-mysql-server doesn't seem able to differentiate between legitimate binary data sent by the client versus a character string. Since these types need to be handled differently, and we can't assume that all VARBINARY
types can be converted into strings, it seems like we need to respect the SQL type the caller indicated for the bind var and pass that up to integrators.sqltypes.Char
to see if this approach causes any other issues.LATERAL
derived tablesauto_increment
column with a single alter
statementSHOW VARIABLES
should render enum/set valuesgit fetch --prune
to clean old branchesPublished by github-actions[bot] about 1 year ago
FULLTEXT
indexes. The ordering bug is fairly major, as it could require a drop/readd of the index, so I want to get this out now rather than waiting until I've gotten more tests/fixes in.seqIOCostFactor
feels like a bit of a misnomer, but cpuCostFactor is too low to reflect this behavior, and this is what costInnerJoin uses.add column .. unique
, but the same approach should also work with auto_increment and other clauses.[]byte
have been converted to string literals with the default collation (utf8mb4_0900_bin) by types.CreateStringWithDefaults()
.types.CreateBinary()
should be used, which generates literals with binary collation.TODO
s), but this shows the broad strokes of how it's implemented, along with most of the "difficult" design choices being implemented. The major choice that has not yet been finalized is how to deal with FTS_DOC_ID
, as it's an AUTO_INCREMENT
column in MySQL, but that would not play well with Dolt merging. I already have ideas on how to handle that (taking into account remotes, etc.), but that would come from a later PR.MATCH ... AGAINST ...
to a join between the tables, which would work when fetching results, but MATCH ... AGAINST ...
may also be used as a result, which necessitated writing all of the functionality anyway, so the join plan was dropped.sql/fulltext/fulltext.go
file is an expansion of the file you've previously reviewed (all still kept to a single file for now). To complement it and see how it'll be implemented on the Dolt side, you can look at memory/table.go
. Dolt's table editor will be similar, and the merge paths will only use the FulltextEditor
, which special logic to interface with it from those paths.sql/plan/ddl.go
file. You'll probably need to reference sql/fulltext/fulltext.go
as well.cast
function callscast
node back into a SQL string, we were using the form CAST(<arg>, <arg>)
, but that won't roundtrip back to MySQL. It needs to be either CONVERT(<arg>, <arg>)
or CAST(<arg> as <arg)
.AS OF
, FROM .. TO
, BETWEEN
), this PR also implements support for the 2 extensions added by SQLServer, ALL
and CONTAINED IN
.VERSION
is now a synonym for SYSTEM_TIME
, a Dolt pseudo-extension.ANSI_QUOTES
parsing modeANSI_QUOTES
SQL mode changes the behavior of the double quote character. By default in MySQL, ANSI_QUOTES
is not enabled and the double quote character is used to quote string literals. When ANSI_QUOTES
is enabled, the double quote character may only quote identifiers. The ANSI_QUOTES
mode does not change the behavior for backtick quote chars (they always quote identifiers) or single quote chars (they always quote string literals).ANSI_QUOTES
mode in Dolt/GMS)Handler
interface function, but actually using ANSI_QUOTES
mode in Dolt or GMS won't be possible until a few more changes to Dolt/GMS.Read Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 2.07 | 3.02 | 1.5 |
groupby_scan | 13.22 | 17.95 | 1.4 |
index_join | 1.27 | 4.74 | 3.7 |
index_join_scan | 1.21 | 2.3 | 1.9 |
index_scan | 32.53 | 56.84 | 1.7 |
oltp_point_select | 0.14 | 0.48 | 3.4 |
oltp_read_only | 2.71 | 8.28 | 3.1 |
select_random_points | 0.3 | 0.81 | 2.7 |
select_random_ranges | 0.37 | 1.21 | 3.3 |
table_scan | 33.12 | 56.84 | 1.7 |
types_table_scan | 74.46 | 164.45 | 2.2 |
reads_mean_multiplier | 2.4 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
bulk_insert | 0.001 | 0.001 | 1.0 |
oltp_delete_insert | 4.49 | 5.88 | 1.3 |
oltp_insert | 2.14 | 2.86 | 1.3 |
oltp_read_write | 5.99 | 15.55 | 2.6 |
oltp_update_index | 2.22 | 2.91 | 1.3 |
oltp_update_non_index | 2.3 | 2.91 | 1.3 |
oltp_write_only | 3.25 | 7.56 | 2.3 |
types_delete_insert | 4.57 | 6.79 | 1.5 |
writes_mean_multiplier | 1.6 |
Overall Mean Multiple | 2.1 |
---|
Published by github-actions[bot] about 1 year ago
sql-client
which is overly strict since users can provide it in a config.yaml file.Read Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 2.11 | 3.02 | 1.4 |
groupby_scan | 13.22 | 18.28 | 1.4 |
index_join | 1.25 | 4.74 | 3.8 |
index_join_scan | 1.21 | 2.3 | 1.9 |
index_scan | 32.53 | 57.87 | 1.8 |
oltp_point_select | 0.14 | 0.48 | 3.4 |
oltp_read_only | 2.71 | 8.28 | 3.1 |
select_random_points | 0.31 | 0.81 | 2.6 |
select_random_ranges | 0.37 | 1.18 | 3.2 |
table_scan | 33.12 | 57.87 | 1.7 |
types_table_scan | 73.13 | 167.44 | 2.3 |
reads_mean_multiplier | 2.4 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
bulk_insert | 0.001 | 0.001 | 1.0 |
oltp_delete_insert | 4.65 | 5.77 | 1.2 |
oltp_insert | 2.26 | 2.91 | 1.3 |
oltp_read_write | 6.09 | 15.83 | 2.6 |
oltp_update_index | 2.35 | 2.97 | 1.3 |
oltp_update_non_index | 2.43 | 2.91 | 1.2 |
oltp_write_only | 3.43 | 7.56 | 2.2 |
types_delete_insert | 4.74 | 6.67 | 1.4 |
writes_mean_multiplier | 1.5 |
Overall Mean Multiple | 2.0 |
---|
Published by github-actions[bot] about 1 year ago
dolt_diff_<tablename>
correctly shows historical values after narrowing typesdolt_diff_<tablename>
system table uses the schema @ HEAD of the table being diff'ed. If the schema of the table has changed over time and has narrowed column types (e.g. varchar(100)
→ varchar(10)
), then some historical values may not be valid against the table's current schema, which causes an error to be returned and no result set. This PR fixes that by changing the schema of dolt_diff_<tablename>
to widen all of the column types to their widest size in the same family (e.g. varchar(100)
→ TEXT
).VERSIONS BETWEEN '<commit>' and '<commit>'
and other ref formsPublished by github-actions[bot] about 1 year ago
This is the first release that supports Full-Text Indexes.
dolt status
, automatically adding the additional tables when the parent is added via dolt add
, adding a user-facing write barrier on the tables, etc. Also need quite a few more tests, but the basics are in via the engine tests and very, very few bats tests.TODO
s), but this shows the broad strokes of how it's implemented, along with most of the "difficult" design choices being implemented. The major choice that has not yet been finalized is how to deal with FTS_DOC_ID
, as it's an AUTO_INCREMENT
column in MySQL, but that would not play well with Dolt merging. I already have ideas on how to handle that (taking into account remotes, etc.), but that would come from a later PR.MATCH ... AGAINST ...
to a join between the tables, which would work when fetching results, but MATCH ... AGAINST ...
may also be used as a result, which necessitated writing all of the functionality anyway, so the join plan was dropped.sql/fulltext/fulltext.go
file is an expansion of the file you've previously reviewed (all still kept to a single file for now). To complement it and see how it'll be implemented on the Dolt side, you can look at memory/table.go
. Dolt's table editor will be similar, and the merge paths will only use the FulltextEditor
, which special logic to interface with it from those paths.sql/plan/ddl.go
file. You'll probably need to reference sql/fulltext/fulltext.go
as well.Read Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 2.07 | 3.02 | 1.5 |
groupby_scan | 13.22 | 17.95 | 1.4 |
index_join | 1.25 | 4.74 | 3.8 |
index_join_scan | 1.21 | 2.3 | 1.9 |
index_scan | 32.53 | 57.87 | 1.8 |
oltp_point_select | 0.14 | 0.48 | 3.4 |
oltp_read_only | 2.66 | 8.28 | 3.1 |
select_random_points | 0.3 | 0.81 | 2.7 |
select_random_ranges | 0.37 | 1.18 | 3.2 |
table_scan | 32.53 | 56.84 | 1.7 |
types_table_scan | 74.46 | 167.44 | 2.2 |
reads_mean_multiplier | 2.4 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
bulk_insert | 0.001 | 0.001 | 1.0 |
oltp_delete_insert | 4.74 | 5.88 | 1.2 |
oltp_insert | 2.22 | 2.97 | 1.3 |
oltp_read_write | 5.88 | 15.83 | 2.7 |
oltp_update_index | 2.3 | 3.02 | 1.3 |
oltp_update_non_index | 2.3 | 3.02 | 1.3 |
oltp_write_only | 3.36 | 7.56 | 2.2 |
types_delete_insert | 4.91 | 6.55 | 1.3 |
writes_mean_multiplier | 1.5 |
Overall Mean Multiple | 2.1 |
---|
Published by github-actions[bot] about 1 year ago
dolt_history_<table>
dolt_history_...
table derives its schema from the base table + 3 additional columns historyTableSchema().HistoryTable.Schema()
is trimmed to only the columns we look at. This is problematic when we're join planning as we look over all indexes and panic when we find an index over a column that isn't in the schema; in this case, it's the Primary key.HistoryTable
implement PrimaryKeySchema
, we can return a schema with all the columns, and the index picking portion of join planning works.ANSI_QUOTES
SQL modeANSI_QUOTES
SQL mode, where double quotes are used as identifier quotes, and not string literal quotes. This change updates the implementations of mysql.Handler
for the new function needed to parse prepared statement commands with ANSI_QUOTES
mode. A future PR will enable the ability to turn on the ANSI_QUOTES
support in Vitess.WHERE
filter over SHOW VARIABLES
reflect.Value.Int()
on an unsigned typed value will panic.reflect.Value.Uint()
must be used.ANSI_QUOTES
parsing modeANSI_QUOTES
SQL mode changes the behavior of the double quote character. By default in MySQL, ANSI_QUOTES
is not enabled and the double quote character is used to quote string literals. When ANSI_QUOTES
is enabled, the double quote character may only quote identifiers. The ANSI_QUOTES
mode does not change the behavior for backtick quote chars (they always quote identifiers) or single quote chars (they always quote string literals).ANSI_QUOTES
mode in Dolt/GMS)Handler
interface function, but actually using ANSI_QUOTES
mode in Dolt or GMS won't be possible until a few more changes to Dolt/GMS.LATERAL
syntaxPublished by github-actions[bot] about 1 year ago
cherry-pick
should only have one parent commitdolt commit
sees this metadata and incorrectly records the cherry-picked commit as a parent of the new, created commit. This PR fixes this, so that commits created by cherry-pick always have only one parent. To do this, we record an extra flag in MergeState that the current merge is a cherry-pick.db/branch
syntax with --use-db
global argdb/branch
syntax with --use-db
global arg.plan.EmptyTable
implement sql.DeletableTable
Offset
nodes and drop 0 Offsets
LIMIT(OFFSET(SORT()))
.OFFSET
nodes that start at 0, as they don't change the output.plan.EmptyTable
implement sql.Updatable
interfacetable doesn't support UPDATE
error, the EmptyTable
node should implement the Updatable interface.