Bot releases are visible (Hide)
Published by github-actions[bot] 12 months ago
dolt_diff_<tablename>
queries has increased.SELECT * from `db/main`.table join `db/dev`.table using (pk)
Published by github-actions[bot] 12 months ago
dolt_diff_<tablename>
reports most-specific commit that changed a rowRead Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 2.14 | 2.76 | 1.3 |
groupby_scan | 13.22 | 17.32 | 1.3 |
index_join | 1.37 | 4.41 | 3.2 |
index_join_scan | 1.27 | 2.14 | 1.7 |
index_scan | 34.33 | 55.82 | 1.6 |
oltp_point_select | 0.17 | 0.41 | 2.4 |
oltp_read_only | 3.3 | 7.3 | 2.2 |
select_random_points | 0.33 | 0.67 | 2.0 |
select_random_ranges | 0.39 | 0.92 | 2.4 |
table_scan | 34.33 | 55.82 | 1.6 |
types_table_scan | 74.46 | 158.63 | 2.1 |
reads_mean_multiplier | 2.0 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
bulk_insert | 0.001 | 0.001 | 1.0 |
oltp_delete_insert | 5.28 | 5.88 | 1.1 |
oltp_insert | 2.61 | 2.81 | 1.1 |
oltp_read_write | 7.04 | 13.95 | 2.0 |
oltp_update_index | 2.52 | 2.86 | 1.1 |
oltp_update_non_index | 2.71 | 2.81 | 1.0 |
oltp_write_only | 3.75 | 6.91 | 1.8 |
types_delete_insert | 4.91 | 6.32 | 1.3 |
writes_mean_multiplier | 1.3 |
Overall Mean Multiple | 1.7 |
---|
Published by github-actions[bot] 12 months ago
dolt version
in folders without full permissionsdolt version
to run in folders without write permissions.dolt table import
to be more readable and useful. Notably, this change adds the column names, table name, and file line number to the error output.dolt version
errors out if run in a folder without permissionsdolt_diff_$table
doesn't return the original commit that changed a roworder by
clause on the triggers table.Published by github-actions[bot] about 1 year ago
select from_x, to_x, to_commit, tag_name as version from dolt_diff_xy,
LATERAL (
select tag_name
from dolt_tags
where has_ancestor(to_commit, tag_hash)
order by date desc
limit 1
) tag
"Get the latest tag for a commit", which we solve by reading the tags table backwards, and returning the first that is an ancestor of our target commit.--silent
option for push
, pull
, fetch
to suppress output of progress information.dolt ls
to use the appropriate sql engine to generate results. This change also creates a system variable that, when enabled, shows dolt system tables in show tables
and information_schema.tables
.found_rows
when limit > count(*)
sql
package to avoid circular dependencies (catalog depends on stats, stats depends on sql.Row, etc). So stats
package can depend on sql
for row and types, and most of GMS can use the generic sql interfaces without having to take a dependency on the stats
package.memory
and enginetests
are the two main places where we depend on the stats
concrete implementations. Rather than putting the statistic objects in memory
, I chose to put them into a separate package. The two main reasons are 1) the Dolt side has a conversion to the memory implementation as a presentation layer, and it made more sense in my head for the "presentation layer" to be in the stats
package rather than memory
; 2) I'm going to add logic that operates on histograms, and it seemed convenient to have that in its own package with a concrete implementation there for testing. If this is wrong I can always reverse course.ToInterface{}
method, which converts a generic JSONWrapper
interface (newly changed from JSONValue
to avoid overloading the term) into a map of strings->interface{}. I mostly did this because I was having to go from Statistic->[]byte->map[string]interface{}
to use our json serialization primitives. ToInterface{}
might be less performant than inlining search, extract, etc on structs (for example, we don't need to convert Statistic
an interface to extract the row_count
value), but the generic intermediate makes it pretty easy to plug new json types. Again this may be misguided, happy to reverse course if I'm overcomplicating something.With
clause for select statements, which caused us to not find any bind vars in use there.select distinct sql_calc_found_rows distinct * from t;
Fixes https://github.com/dolthub/dolt/issues/6829$ dolt push
generates lots of Uploading...
text in cronPublished by github-actions[bot] about 1 year ago
This release contains backwards incompatible changes:
dolt_docs
system table was updated so that it is created on SQL writes and returns an empty index on reads. Previously reading or writing to the dolt_docs
table in a SQL context would error if no docs existed and users needed to manually create the table. Now reading and writing to dolt_docs
will no longer error due to the table not existing, and trying to create a dolt_docs
table will error.Per Dolt’s versioning policy, this is a minor version bump because these changes may impact existing applications. Please reach out to us on GitHub or Discord if you have questions or need help with any of these changes.
dolt_docs
tabledolt_docs
system table to use it. This changes that functionality to be the same as the dolt_ignore
system table, which is created on writes and returns an empty index on reads. The table will always exist as far as the mysql engine is concerned.AS OF
with dolt_ignore
table.VersionedTable
, which is implemented by DoltTable and classes that wrap it (Like WriteableDoltTable
and IgnoreTable
.)sql.StatisticsTable
and return row count values high enough that we use HASH_JOIN instead of INNER_JOIN.ANALYZE TABLE
support for Prolly trees:
--all
flag for dolt push--all
flag to dolt push
command and update some error messages as well as success push messages to be returned.dolt-push.bats
remotes.bats
into remotes-push-pull.bats
found_rows
when limit > count(*)
< 1
.
ORDER BY 0
= errorORDER BY -1
= noopmin(pk)
and max(pk)
MIN
or MAX
aggregation over a PRIMARY KEY
column.replaceAgg
, converts queries of the format select max(pk) ... from ...
to the equivalent select pk ... from ... order by pk limit 1
. Then, we depend on an replacePkSort
to apply IndexedTableAccess
replacePkSort
optimization apply to queries that have filters (specifically those that were pushed down to IndexedTableAccess)json_value
and json_length
addedjson_table
edited to support json document inputs.json.Marshaller
interfacejson_value
notation is different than mysql's. I accept the type as a third parameter, rather than expecting a RETURNING clause.select distinct sql_calc_found_rows distinct * from t;
Fixes https://github.com/dolthub/dolt/issues/68298.0.33
5.7.9-Vitess
and some clients were using that info and trying and speak MySQL-5.7 to Dolt (example issue)8.0.33-Dolt
.FOUND_ROWS()
returns incorrect resultsAS OF
with dolt_ignore
system tabledolt push --all
Read Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 2.07 | 2.71 | 1.3 |
groupby_scan | 12.98 | 17.32 | 1.3 |
index_join | 1.32 | 4.49 | 3.4 |
index_join_scan | 1.25 | 2.14 | 1.7 |
index_scan | 33.72 | 55.82 | 1.7 |
oltp_point_select | 0.17 | 0.4 | 2.4 |
oltp_read_only | 3.25 | 7.17 | 2.2 |
select_random_points | 0.32 | 0.67 | 2.1 |
select_random_ranges | 0.38 | 0.92 | 2.4 |
table_scan | 33.72 | 55.82 | 1.7 |
types_table_scan | 74.46 | 158.63 | 2.1 |
reads_mean_multiplier | 2.0 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
bulk_insert | 0.001 | 0.001 | 1.0 |
oltp_delete_insert | 4.57 | 5.37 | 1.2 |
oltp_insert | 2.22 | 2.66 | 1.2 |
oltp_read_write | 6.67 | 13.46 | 2.0 |
oltp_update_index | 2.39 | 2.66 | 1.1 |
oltp_update_non_index | 2.3 | 2.61 | 1.1 |
oltp_write_only | 3.3 | 6.67 | 2.0 |
types_delete_insert | 4.82 | 5.77 | 1.2 |
writes_mean_multiplier | 1.4 |
Overall Mean Multiple | 1.7 |
---|
Published by github-actions[bot] about 1 year ago
This release contains backwards incompatible changes:
dolt merge
command line tool's exit status has changed for conflicts in merges. Perviously merges which resulted in conflicts returned an exit status of 0, indicating success. This release changes the behavior to return a 1 in the event of a failed merge.Per Dolt’s versioning policy, this is a minor version bump because these changes may impact existing applications. Please reach out to us on GitHub or Discord if you have questions or need help with any of these changes.
dolt_checkout
from creating new branches in read-only databasesdolt pull
to use the appropriate sql engine to generate results.min(pk)
and max(pk)
MIN
or MAX
aggregation over a PRIMARY KEY
column.replaceAgg
, converts queries of the format select max(pk) ... from ...
to the equivalent select pk ... from ... order by pk limit 1
. Then, we depend on an replacePkSort
to apply IndexedTableAccess
replacePkSort
optimization apply to queries that have filters (specifically those that were pushed down to IndexedTableAccess)DEFAULT
values in INSERT statementsjson_valid()
functionJSON_VALID(val)
functioninformation_schema
is duplicated.factory.Resolve()
.diff --git a/driver/_example/main.go b/driver/_example/main.go
index 34e0580ed..adbc1a249 100644
--- a/driver/_example/main.go
+++ b/driver/_example/main.go
@@ -35,6 +35,14 @@ func main() {
rows, err := db.Query("SELECT * FROM mytable")
must(err)
dump(rows)
+
+ rows, err = db.Query("SHOW DATABASES")
+ must(err)
+ for rows.Next() {
+ var db string
+ must(rows.Scan(&db))
+ fmt.Println("db:", db)
+ }
}
func must(err error) {
select max(date) ...
DEFAULT
keywordDOLT_CHECKOUT()
JSON_VALID()
uuid
primary keys function more like auto_increment
Read Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 2.11 | 2.71 | 1.3 |
groupby_scan | 12.98 | 17.01 | 1.3 |
index_join | 1.32 | 4.57 | 3.5 |
index_join_scan | 1.25 | 2.14 | 1.7 |
index_scan | 34.33 | 54.83 | 1.6 |
oltp_point_select | 0.17 | 0.4 | 2.4 |
oltp_read_only | 3.25 | 7.17 | 2.2 |
select_random_points | 0.32 | 0.68 | 2.1 |
select_random_ranges | 0.38 | 0.9 | 2.4 |
table_scan | 34.33 | 54.83 | 1.6 |
types_table_scan | 74.46 | 155.8 | 2.1 |
reads_mean_multiplier | 2.0 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
bulk_insert | 0.001 | 0.001 | 1.0 |
oltp_delete_insert | 4.41 | 5.37 | 1.2 |
oltp_insert | 2.18 | 2.66 | 1.2 |
oltp_read_write | 6.55 | 13.46 | 2.1 |
oltp_update_index | 2.22 | 2.66 | 1.2 |
oltp_update_non_index | 2.22 | 2.61 | 1.2 |
oltp_write_only | 3.25 | 6.55 | 2.0 |
types_delete_insert | 4.49 | 5.77 | 1.3 |
writes_mean_multiplier | 1.4 |
Overall Mean Multiple | 1.8 |
---|
Published by github-actions[bot] about 1 year ago
This release contains backwards incompatible changes:
sql-server
, Dolt now advertises that it is a MySQL 8.0 server, instead of a MySQL 5.7 server as in previous Dolt versions. This is a backwards incompatible change, because some clients (e.g. Laravel) use this metadata to determine which SQL features and syntax to use.dolt_undrop()
stored procedure. This is a backwards incompatible change, because disk drive space is no longer automatically reclaimed after dropping a database; instead, it can be manually purged with the new dolt_purge_dropped_databases();
procedure.Per Dolt’s versioning policy, this is a minor version bump because these changes may impact existing applications. Please reach out to us on GitHub or Discord if you have questions or need help with any of these changes.
dolt_cluster_ack_writes_timeout_secs
.dolt_cluster_ack_writes_timeout_secs
dolt_undrop()
to restore dropped databasesdolt_undrop(<database name>)
that can be used to restore a dropped database. Dropped databases are now moved to a new dolt_dropped_databases
directory until they are either restored or permanently purged with the new dolt_purge_dropped_databases
stored procedure.# Use dolt_undrop() with the database name to restore a dropped database
drop database mydb;
call dolt_undrop('mydb');
...
# Use dolt_purge_dropped_databases() with no arguments to permanently delete all dropped databases
drop database mydb;
call dolt_purge_dropped_databases;
Required Privileges: Calling dolt_undrop()
does not require any special privileges. Calling dolt_purge_dropped_databases()
requires SUPER
privileges.InMemoryBlobStore
instead of writing db data to a filesystem, so there isn't currently a good way to undrop databases in enginetests. If the noms data files were stored through the InMemFS
, then the same code would work in our tests to undrop databases. Currently the repo state files are able to be undropped, but not the actual database data, since it disappears with the InMemoryBlobStore
reference when we drop the database.information_schema
is duplicated.factory.Resolve()
.diff --git a/driver/_example/main.go b/driver/_example/main.go
index 34e0580ed..adbc1a249 100644
--- a/driver/_example/main.go
+++ b/driver/_example/main.go
@@ -35,6 +35,14 @@ func main() {
rows, err := db.Query("SELECT * FROM mytable")
must(err)
dump(rows)
+
+ rows, err = db.Query("SHOW DATABASES")
+ must(err)
+ for rows.Next() {
+ var db string
+ must(rows.Scan(&db))
+ fmt.Println("db:", db)
+ }
}
func must(err error) {
sqllogictests
sqllogictests
, and won't currently be used outside of large joins. But there's no reason that this can't be used for other joins. In fact, in some cases I observed this generate correct join plans that our current brute-force reordering misses. (edge.applicable
claims that these ordering violate a conflict rule even though they should be correct. We may be overly conservative in some places.)simplifyCols
method in FDS to use partial keys in order to improve analysis.database not found: mydb
:
diff --git a/driver/_example/main.go b/driver/_example/main.go
index 34e0580ed..64fe11a2b 100644
--- a/driver/_example/main.go
+++ b/driver/_example/main.go
@@ -35,6 +35,9 @@ func main() {
rows, err := db.Query("SELECT * FROM mytable")
must(err)
dump(rows)
+
+ _, err = db.Exec("CREATE TABLE table2 (id integer, primary key (id))")
+ must(err)
}
func must(err error) {
output:
John Doe [email protected] ["555-555-555"] 2023-10-09 21:29:48.750044594 +0900 JST m=+0.016306123
John Doe [email protected] [] 2023-10-09 21:29:48.750060666 +0900 JST m=+0.016322195
Jane Doe [email protected] [] 2023-10-09 21:29:48.750067418 +0900 JST m=+0.016328947
Evil Bob [email protected] ["555-666-555", "666-666-666"] 2023-10-09 21:29:48.750073628 +0900 JST m=+0.016335158
2023/10/09 21:29:48 database not found: mydb
exit status 1
This is because the DefaultSessionBuilder of the driver is initialized with an empty DBProvider.factory.Resolve()
to the SessionBuilder.ANALYZE TABLE <table> [UPDATE/DROP] HISTOGRAM ON <column,...> USING <json blob>
support and a few testsupdate information schema
cardinality updates with histogram updatesLAST_INSERT_ID()
and the INSERT_ID
field in the ok response for updates.8.0.33
5.7.9-Vitess
and some clients were using that info and trying and speak MySQL-5.7 to Dolt (example issue)8.0.33-Dolt
.CREATE TABLE t AS (...) UNION (...)
CREATE TABLE AS
statements when the expression being used to create the table is a set operation like UNION, INTERSECT, or EXCEPT.CREATE TABLE t (
, where what follows could be a set op or a table definition. Fully matching MySQL's spec here would require rewriting our grammar to avoid this ambiguity, which is outside the scope of the PR. However, this PR makes us strictly more correct than we were before.CREATE TABLE {name} SELECT ... UNION SELECT ...
fails to parse.Published by github-actions[bot] about 1 year ago
fetch
context handling to properly exit with an error if force cancelled.dolt push
to use the appropriate sql engine to generate results.base
(of type A), a branch right
which alters the column to have type B, and a branch left
which modifies the cell (but is still type A):base
to type B in order to detect whether the branch right
also modified the cell.left
to type B in order to detect whether a conflict exists with the value on right
.Convert
method doesn't support every type yet, but the design is ready for feedback.LAST_INSERT_ID()
and the INSERT_ID
field in the ok response for updates.pruneTables
will pushdown projections as low as possible to avoid passing around columns that won't make it to the final result.type time.Time not supported as bind var: 2023-10-01 17:37:49.382855116 +0900 JST m=+0.017340108
This issue did not occur in v0.16.0.ORDER BY
Read Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 2.14 | 2.76 | 1.3 |
groupby_scan | 13.22 | 17.32 | 1.3 |
index_join | 1.32 | 4.49 | 3.4 |
index_join_scan | 1.25 | 2.14 | 1.7 |
index_scan | 34.33 | 55.82 | 1.6 |
oltp_point_select | 0.17 | 0.4 | 2.4 |
oltp_read_only | 3.3 | 7.17 | 2.2 |
select_random_points | 0.32 | 0.68 | 2.1 |
select_random_ranges | 0.38 | 0.92 | 2.4 |
table_scan | 34.33 | 55.82 | 1.6 |
types_table_scan | 74.46 | 158.63 | 2.1 |
reads_mean_multiplier | 2.0 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
bulk_insert | 0.001 | 0.001 | 1.0 |
oltp_delete_insert | 4.57 | 5.37 | 1.2 |
oltp_insert | 2.26 | 2.71 | 1.2 |
oltp_read_write | 6.67 | 13.7 | 2.1 |
oltp_update_index | 2.3 | 2.76 | 1.2 |
oltp_update_non_index | 2.35 | 2.66 | 1.1 |
oltp_write_only | 3.3 | 6.79 | 2.1 |
types_delete_insert | 4.74 | 5.77 | 1.2 |
writes_mean_multiplier | 1.4 |
Overall Mean Multiple | 1.7 |
---|
Published by github-actions[bot] about 1 year ago
DROP DATABASE
statements so that a dropped database is also dropped on replicas.message
column to the output of dolt_push()
to provide additional information.SELECT x63,x53,x62,x52,x11,x5,x40,x64,x27,x28,x21,x41,x22,x30,x16,x14,x56,x32,x46,x50,x1,x34 FROM t46,t34,t1,t32,t53,t21,t63,t11,t30,t62,t27,t50,t16,t64,t40,t56,t22,t28,t52,t5,t41,t14 WHERE a21=b5 AND b30=a52 AND a62=b46 AND a14=3 AND b52=a28 AND b53=a14 AND a63=b28 AND b40=a56 AND a11=b64 AND a53=b22 AND b1=a34 AND b32=a41 AND a50=b63 AND a64=b62 AND b11=a30 AND b27=a40 AND a22=b56 AND b21=a46 AND a1=b50 AND b34=a16 AND a27=b16 AND a5=b41;
takes 30 minutes to reorder, and 15 seconds to run when reordering is disabled.SHOW
queriesRead Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 2.07 | 3.02 | 1.5 |
groupby_scan | 12.98 | 17.95 | 1.4 |
index_join | 1.27 | 4.74 | 3.7 |
index_join_scan | 1.23 | 2.22 | 1.8 |
index_scan | 32.53 | 58.92 | 1.8 |
oltp_point_select | 0.14 | 0.39 | 2.8 |
oltp_read_only | 2.71 | 7.3 | 2.7 |
select_random_points | 0.31 | 0.72 | 2.3 |
select_random_ranges | 0.37 | 0.97 | 2.6 |
table_scan | 32.53 | 58.92 | 1.8 |
types_table_scan | 74.46 | 170.48 | 2.3 |
reads_mean_multiplier | 2.2 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
bulk_insert | 0.001 | 0.001 | 1.0 |
oltp_delete_insert | 4.82 | 5.57 | 1.2 |
oltp_insert | 2.43 | 2.71 | 1.1 |
oltp_read_write | 5.99 | 13.95 | 2.3 |
oltp_update_index | 2.35 | 2.71 | 1.2 |
oltp_update_non_index | 2.43 | 2.76 | 1.1 |
oltp_write_only | 3.36 | 6.79 | 2.0 |
types_delete_insert | 4.74 | 5.99 | 1.3 |
writes_mean_multiplier | 1.4 |
Overall Mean Multiple | 1.9 |
---|
Published by github-actions[bot] about 1 year ago
DOLT_COMMITTER_DATE
and DOLT_AUTHOR_DATE
environment varsGIT_COMMITTER_DATE
and GIT_AUTHOR_DATE
, respectively. They set the two timestamps associated with newly created commits on dolt commit
and dolt merge
.Star.IsNullable()
SELECT
queries on a view that references table or column that was removed or renamed.SELECT
queries.order by
on unioned schemasSELECT
statements that have different column types, we would get -1 during assignExecIndexes
, resulting in a panic.plangen
to auto-update the tests.DISABLE ON SLAVE
status is not supported. It will be set to DISABLE
by default.COM_STMT_EXECUTE
when new_params_bind_flag
is setCOM_STMT_EXECUTE
. The difference lies specifically in the flags that come after the field type.enum_field_type
followed by a 2 byte wide Column Definition Flag.COM_STMT_EXECUTE
payload (that specifies parameters through new_params_bind_flag
), MySQL indicates parameter_types
with the same 1 byte wide enum_field_type
followed by a 1 byte wide flag that indicates signedness.0x80
for COM_STMT_EXECUTE parameters, but read/write 0x20
for field_types
/column definitions.COM_STMT_EXECUTE
with new_params_bind_flag
.CREATE TABLE t AS (...) UNION (...)
CREATE TABLE AS
statements when the expression being used to create the table is a set operation like UNION, INTERSECT, or EXCEPT.CREATE TABLE t (
, where what follows could be a set op or a table definition. Fully matching MySQL's spec here would require rewriting our grammar to avoid this ambiguity, which is outside the scope of the PR. However, this PR makes us strictly more correct than we were before.SECONDARY_ENGINE = NULL
FOUND_ROWS()
returns incorrect resultsRead Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 2.07 | 2.97 | 1.4 |
groupby_scan | 12.98 | 18.28 | 1.4 |
index_join | 1.3 | 4.82 | 3.7 |
index_join_scan | 1.25 | 2.26 | 1.8 |
index_scan | 33.12 | 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 | 0.97 | 2.6 |
table_scan | 33.12 | 58.92 | 1.8 |
types_table_scan | 75.82 | 173.58 | 2.3 |
reads_mean_multiplier | 2.2 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
bulk_insert | 0.001 | 0.001 | 1.0 |
oltp_delete_insert | 5.18 | 5.88 | 1.1 |
oltp_insert | 2.71 | 2.86 | 1.1 |
oltp_read_write | 6.32 | 14.21 | 2.2 |
oltp_update_index | 2.61 | 2.91 | 1.1 |
oltp_update_non_index | 2.76 | 2.86 | 1.0 |
oltp_write_only | 3.75 | 7.04 | 1.9 |
types_delete_insert | 5.28 | 6.21 | 1.2 |
writes_mean_multiplier | 1.3 |
Overall Mean Multiple | 1.9 |
---|
Published by github-actions[bot] about 1 year ago
This release contains backwards incompatible changes:
Per Dolt’s versioning policy, this is a minor version bump because applications using previous versions of Dolt were able to create events, but they would not be executed. This release changes that behavior – when a dolt sql-server
is running, created events are now executed on their defined schedule. This behavior can be disabled by starting the dolt sql-server
with the --event-scheduler=OFF
parameter.
Published by github-actions[bot] about 1 year ago
dolt_checkout()
and dolt status
when running in read-only modedolt_checkout
and dolt_count_commits
weren't marked as being read-only, so when run against a read-only sql-server, they resulted in an error about the database being read-only.dolt sql-server
UNIX_TIMESTAMP()
function, it converts the time value to be in the current session TZ instead of UTC TZ before returning the final value because the initial value is parsed as in UTC TZ, which is incorrect.system_time_zone
global variable will be set to the system TZ instead of UTC
.DISABLE ON SLAVE
status is not supported. It will be set to DISABLE
by default.dolt_checkout()
unix_timestamp(date)
doesn't respect a session time zoneinnodb_lock_wait_timeout
be defined to connect to a Dolt database through MySQL connector-r
optiondolt patch
and dolt apply
information_schema.columns AS OF
in parserPublished by github-actions[bot] about 1 year ago
SECONDARY_ENGINE = NULL
VISIBLE
and INVISIBLE
modifiers for indexesRead Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 2.07 | 2.91 | 1.4 |
groupby_scan | 12.98 | 17.95 | 1.4 |
index_join | 1.27 | 4.74 | 3.7 |
index_join_scan | 1.21 | 2.22 | 1.8 |
index_scan | 33.12 | 57.87 | 1.7 |
oltp_point_select | 0.14 | 0.39 | 2.8 |
oltp_read_only | 2.66 | 7.17 | 2.7 |
select_random_points | 0.3 | 0.72 | 2.4 |
select_random_ranges | 0.37 | 0.95 | 2.6 |
table_scan | 33.12 | 57.87 | 1.7 |
types_table_scan | 74.46 | 170.48 | 2.3 |
reads_mean_multiplier | 2.2 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
bulk_insert | 0.001 | 0.001 | 1.0 |
oltp_delete_insert | 5.77 | 5.88 | 1.0 |
oltp_insert | 2.76 | 3.02 | 1.1 |
oltp_read_write | 6.43 | 14.21 | 2.2 |
oltp_update_index | 2.81 | 2.97 | 1.1 |
oltp_update_non_index | 2.91 | 2.91 | 1.0 |
oltp_write_only | 3.82 | 7.17 | 1.9 |
types_delete_insert | 5.47 | 6.32 | 1.2 |
writes_mean_multiplier | 1.3 |
Overall Mean Multiple | 1.8 |
---|
Published by github-actions[bot] about 1 year ago
lcl:~/Documents/data_dir_1/db3$ dolt init
Successfully initialized dolt data repository.
lcl:~/Documents/data_dir_1/db3$ dolt sql
# Welcome to the DoltSQL shell.
# Statements must be terminated with ';'.
# "exit" or "quit" (or Ctrl-D) to exit.
db3> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.00 sec)
db3> CREATE DATABASE foo;
db3> GRANT INSERT ON foo.* TO 'testuser'@'localhost';
Query OK, 0 rows affected (0.00 sec)
db3> REVOKE INSERT ON foo.* FROM 'testuser'@'localhost';
Query OK, 0 rows affected (0.00 sec)
db3> SHOW GRANTS FOR testuser@localhost;
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x2 addr=0x40 pc=0x101940894]
Published by github-actions[bot] about 1 year ago
TINYINT(1)
TINYINT(1)
TINYINT(1)
). go-mysql-server
currently parses that information, but doesn't retain it anywhere. This PR changes that behavior to match MySQL and retain the display width setting so that it can be passed back to callers.TINYINT
fields and ONLY when the display width is set to 1.INTERSECT
and EXCEPT
clauseINTERSECT
and EXCEPT
.UNION
in that they combine to two sets of rows.INTERSECT
is the set of rows that are in both left and right.EXCEPT
is the set of rows that are in the left that are not in the right.VISIBLE
and INVISIBLE
modifiers for indexesCREATE TABLE
and ALTER TABLE
to accept hexnum and float values when integers are expected.intersect
and except
INTERSECT
and EXCEPT
.UNION
and work with DISTINCT
and ALL
keywords.INTERSECT
has a higher precedence than UNION
and EXCEPT
.Read 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.22 | 1.8 |
index_scan | 33.12 | 58.92 | 1.8 |
oltp_point_select | 0.14 | 0.4 | 2.9 |
oltp_read_only | 2.66 | 7.17 | 2.7 |
select_random_points | 0.31 | 0.72 | 2.3 |
select_random_ranges | 0.37 | 0.95 | 2.6 |
table_scan | 33.12 | 57.87 | 1.7 |
types_table_scan | 75.82 | 167.44 | 2.2 |
reads_mean_multiplier | 2.2 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
bulk_insert | 0.001 | 0.001 | 1.0 |
oltp_delete_insert | 5.47 | 5.67 | 1.0 |
oltp_insert | 2.52 | 3.02 | 1.2 |
oltp_read_write | 6.09 | 14.21 | 2.3 |
oltp_update_index | 2.52 | 3.02 | 1.2 |
oltp_update_non_index | 2.66 | 2.91 | 1.1 |
oltp_write_only | 3.62 | 7.17 | 2.0 |
types_delete_insert | 5.47 | 6.21 | 1.1 |
writes_mean_multiplier | 1.4 |
Overall Mean Multiple | 1.9 |
---|
Published by github-actions[bot] about 1 year ago
on duplicate update
expressions:
create table xy (x int primary key, y datetime);
insert into xy (y,x)
select * from (select cast('2019-12-31T12:00:00Z' as date), 0) dt(a,b)
on duplicate key update x=dt.b+1, y=dt.a;
The way we resolve inserts is still a bit weird. We resolve the source, and then afterwards add a projection to rearrange columns to match the target schema. I ran into a lot of problems trying to rearrange that ordering (first add projection, then analyze), mostly due to our inability to fix indexes on the source node's projection (VALUE nodes don't have a schema, and it isn't obvious when walking a tree that a given projection is going to be special). When we add the projection afterwards, however, it avoids the indexing rule so we can inline the values safely.SUM
and AVG
Read Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 2.11 | 2.91 | 1.4 |
groupby_scan | 12.98 | 17.95 | 1.4 |
index_join | 1.27 | 4.74 | 3.7 |
index_join_scan | 1.21 | 2.22 | 1.8 |
index_scan | 32.53 | 57.87 | 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 | 0.95 | 2.6 |
table_scan | 33.12 | 57.87 | 1.7 |
types_table_scan | 74.46 | 167.44 | 2.2 |
reads_mean_multiplier | 2.2 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
bulk_insert | 0.001 | 0.001 | 1.0 |
oltp_delete_insert | 4.74 | 5.57 | 1.2 |
oltp_insert | 2.35 | 2.76 | 1.2 |
oltp_read_write | 5.99 | 13.95 | 2.3 |
oltp_update_index | 2.3 | 2.81 | 1.2 |
oltp_update_non_index | 2.3 | 2.71 | 1.2 |
oltp_write_only | 3.3 | 7.04 | 2.1 |
types_delete_insert | 4.65 | 6.09 | 1.3 |
writes_mean_multiplier | 1.4 |
Overall Mean Multiple | 1.9 |
---|
Published by github-actions[bot] about 1 year ago
This release contains backwards incompatible changes:
dolt fetch
to use the appropriate sql engine to generate results.-0
when the user expects a decimal.on duplicate update
expressions:
create table xy (x int primary key, y datetime);
insert into xy (y,x)
select * from (select cast('2019-12-31T12:00:00Z' as date), 0) dt(a,b)
on duplicate key update x=dt.b+1, y=dt.a;
The way we resolve inserts is still a bit weird. We resolve the source, and then afterwards add a projection to rearrange columns to match the target schema. I ran into a lot of problems trying to rearrange that ordering (first add projection, then analyze), mostly due to our inability to fix indexes on the source node's projection (VALUE nodes don't have a schema, and it isn't obvious when walking a tree that a given projection is going to be special). When we add the projection afterwards, however, it avoids the indexing rule so we can inline the values safely.CharacterSetID
mentions that the ID may change, and should not be persisted. Dolt, the largest integrator, abides by this rule.panic: runtime error: hash of unhashable type []uint8
All FusionAuth IDs are binary(16), and join on those values in a HashLookup was resulting in using two []uint8
being used as a key to a hashtable. Nested arrays in tuples were tripping on an optimization made for short arrays. We've verified that optimization doesn't actually made a difference, so this change simplifies the code and makes it more generic.VARCHAR
fixupIndexes
replaces all of the other default indexing codeFixFieldIndexes
still exists for insert source projection wrapping and LOAD DATA, but both of these can be easily rewritten to removeCheckConstraintTable
interface for Checks()
and WithChecks()
helpersnewIndexAnalyzerForNode
by avoiding visiting Filter nodes.generateIndexScans
select for update skip locked
. This change allows us to parse these queries, but they don't impact query execution because row level locks are not supported by Dolt currently.VARCHAR
VARCHAR
, specifically including the keyword VARYING
.UNION
table option and parse LAST
keywordUNION
table option and parsing LAST
.TABLE_CHECKSUM
as an alias for CHECKSUM
as a valid table option.CHECKSUM
and TABLE_CHECKSUM
are added as valid keywords in alter statements as well.TABLE <table_name>
statementsTABLE <table_name>
syntax.SELECT * FROM <table_name>
statement.SECONDARY_ENGINE
, but does not store it with the table.SECONDARY_ENGINE
is not listed as a valid table option, but it works.Published by github-actions[bot] about 1 year ago
This release contains backwards incompatible changes:
dolt push -f
) by default. This setting is controlled by the server variable @@dolt_read_replica_force_pull
. This variable previously had a default of 0
, and now defaults to 1
. To restore the previous behavior on remote replicas, run set @@persist.dolt_read_replica_force_pull = 0
and restart the server.dolt_gc
and dolt_backup
previously returned 1
for success and 0
for failure, and this has been reversed. Additionally, dolt_backup
, dolt_fetch
, dolt_gc
, and dolt_push
have changed the name of the column in their result schema, from success
to status
.Per Dolt’s versioning policy, this is a minor version bump because applications written for older versions of dolt may need changes to continue functioning the same.
Status
of 0
on success and Status
of 1
on failure. Changes from the old output of printing Success
of 1
on success and Success
of 0
on failure.dolt status
when up to date with remote@@dolt_read_replica_force_pull
from 0
to 1
. By default, read replicas will now always pull from the remote, even when the current head has diverged (such as in the case of a commit --amend
or push -f
to the remote).dolt pull
to automatically perform merges on the remote tracking branch as needed -- previously we required that this be a fast-forward merge only, which means that you couldn't pull down a force-pushed commit without a lot of other commands and headache.on
or off
.TABLE_CHECKSUM
as an alias for CHECKSUM
TABLE
statement.Read Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 2.07 | 2.91 | 1.4 |
groupby_scan | 13.22 | 18.28 | 1.4 |
index_join | 1.27 | 4.74 | 3.7 |
index_join_scan | 1.21 | 2.22 | 1.8 |
index_scan | 33.12 | 58.92 | 1.8 |
oltp_point_select | 0.14 | 0.39 | 2.8 |
oltp_read_only | 2.71 | 7.17 | 2.6 |
select_random_points | 0.31 | 0.7 | 2.3 |
select_random_ranges | 0.37 | 0.95 | 2.6 |
table_scan | 33.12 | 58.92 | 1.8 |
types_table_scan | 74.46 | 167.44 | 2.2 |
reads_mean_multiplier | 2.2 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
bulk_insert | 0.001 | 0.001 | 1.0 |
oltp_delete_insert | 5.77 | 5.99 | 1.0 |
oltp_insert | 2.71 | 3.13 | 1.2 |
oltp_read_write | 6.43 | 14.21 | 2.2 |
oltp_update_index | 2.66 | 3.07 | 1.2 |
oltp_update_non_index | 2.97 | 2.97 | 1.0 |
oltp_write_only | 3.82 | 7.17 | 1.9 |
types_delete_insert | 6.43 | 6.32 | 1.0 |
writes_mean_multiplier | 1.3 |
Overall Mean Multiple | 1.8 |
---|
Published by github-actions[bot] about 1 year ago
dolt log
to be called outside of dolt reposfixidx
usages in pushdownFilters
and generateIndexScans
fixidx
refactor. I was hoping to make it more piecemeal. Hopefully this gets us ~50% of the way towards removing those dependencies.fixidx
is mostly contained to reorderJoins
and fixAuxiliaryExpressions
now, both near the end of analysis. If we move the indexing in reorderJoins
into fixAuxiliaryExpressions
, all indexing will happen at the end of analysis. That would let us index complicated joins with subqueries correctly and all queries more reliably.moveFiltersOutOfJoinConditions
to put filters below join when appropriatefixAuxiliaryExpresssions
at end of analysisjoin_planning_tests
that demonstrates the potential of this new algorithm, allowing us to select a better index that otherwise allowed.SHOW FULL PROCESSLIST;
causes panicRead Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 2.07 | 2.97 | 1.4 |
groupby_scan | 13.22 | 17.95 | 1.4 |
index_join | 1.27 | 4.65 | 3.7 |
index_join_scan | 1.21 | 2.22 | 1.8 |
index_scan | 33.12 | 57.87 | 1.7 |
oltp_point_select | 0.14 | 0.39 | 2.8 |
oltp_read_only | 2.71 | 7.17 | 2.6 |
select_random_points | 0.31 | 0.7 | 2.3 |
select_random_ranges | 0.37 | 0.95 | 2.6 |
table_scan | 33.12 | 57.87 | 1.7 |
types_table_scan | 75.82 | 167.44 | 2.2 |
reads_mean_multiplier | 2.2 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
bulk_insert | 0.001 | 0.001 | 1.0 |
oltp_delete_insert | 4.82 | 5.67 | 1.2 |
oltp_insert | 2.3 | 2.81 | 1.2 |
oltp_read_write | 5.99 | 13.95 | 2.3 |
oltp_update_index | 2.43 | 2.86 | 1.2 |
oltp_update_non_index | 2.52 | 2.81 | 1.1 |
oltp_write_only | 3.36 | 6.91 | 2.1 |
types_delete_insert | 4.65 | 5.88 | 1.3 |
writes_mean_multiplier | 1.4 |
Overall Mean Multiple | 1.9 |
---|
Published by github-actions[bot] about 1 year ago
This release contains backwards incompatible changes:
dolt conflicts resolve
and dolt_conflicts_resolve()
have been temporarily changed to disallow automatically resolving schema conflicts until a new merge workflow is released that ensures all data is properly merged after schema conflicts are resolved. Until then, when there are schema conflicts, the merge can be aborted, schemas manually brought into sync, and then re-merged. For more details, see tracking issue: https://github.com/dolthub/dolt/issues/6616
Per Dolt’s versioning policy, this is a minor version bump because previous versions of the dolt conflicts resolve
CLI comm and the dolt_conflicts_resolve()
stored procedure would allow merging schema changes without merging data changes.
dolt_conflicts_resolve()
from resolving schema conflictsdolt_conflicts_resolve()
when there are schema changes, so putting this block in out of extra caution.Read Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 2.07 | 2.97 | 1.4 |
groupby_scan | 12.98 | 17.95 | 1.4 |
index_join | 1.3 | 4.74 | 3.6 |
index_join_scan | 1.23 | 2.26 | 1.8 |
index_scan | 33.12 | 58.92 | 1.8 |
oltp_point_select | 0.14 | 0.4 | 2.9 |
oltp_read_only | 2.66 | 7.3 | 2.7 |
select_random_points | 0.3 | 0.7 | 2.3 |
select_random_ranges | 0.37 | 1.03 | 2.8 |
table_scan | 33.12 | 58.92 | 1.8 |
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 | 5.28 | 5.77 | 1.1 |
oltp_insert | 2.76 | 2.86 | 1.0 |
oltp_read_write | 6.55 | 14.21 | 2.2 |
oltp_update_index | 2.86 | 3.02 | 1.1 |
oltp_update_non_index | 2.86 | 2.97 | 1.0 |
oltp_write_only | 3.96 | 7.17 | 1.8 |
types_delete_insert | 5.18 | 6.09 | 1.2 |
writes_mean_multiplier | 1.3 |
Overall Mean Multiple | 1.9 |
---|