Bot releases are visible (Hide)
Published by github-actions[bot] over 1 year ago
xml2js
from 0.4.19 to 0.5.0
SEMI_JOIN(scalarSubq0, scalarSubq1)
as a child is the issue.
Project
├─ columns: [SUM(xy.x):0!null as SUM(x)]
└─ GroupBy
├─ select: SUM(xy.x:0!null)
├─ group:
└─ Project
├─ columns: [xy.x:0!null, xy.y:1]
└─ HashJoin
├─ Eq
│ ├─ xy.x:0!null
│ └─ scalarSubq0.u:2!null
├─ Filter
│ ├─ Eq
│ │ ├─ xy.x:0!null
│ │ └─ 2 (tinyint)
│ └─ Table
│ ├─ name: xy
│ └─ columns: [x y]
└─ HashLookup
├─ source: TUPLE(xy.x:0!null)
├─ target: TUPLE(scalarSubq0.u:0!null)
└─ CachedResults
└─ OrderedDistinct
└─ Project
├─ columns: [scalarSubq0.u:0!null]
└─ SemiJoin
├─ Eq
│ ├─ scalarSubq0.u:2!null
│ └─ scalarSubq1.a:4!null
├─ TableAlias(scalarSubq0)
│ └─ Table
│ ├─ name: uv
│ └─ columns: [u v]
└─ Filter
├─ Eq
│ ├─ scalarSubq1.a:0!null
│ └─ 2 (tinyint)
└─ TableAlias(scalarSubq1)
└─ Table
├─ name: ab
└─ columns: [a]
go-mysql-server
with Trino and I have noticed that it does work when I have either timestamp
or datetime
. I have asked them https://github.com/trinodb/trino/issues/16575 whether it's ok for them to implement default column size like they did for Phoenix connector, but they did not want to add it. I still think it should be fine without column size, since most of the clients (except the ones which are written in java) accept date time without column size.0
as column size for timestamp
and datetime
SHOW EVENTS
statement parsingSHOW CREATE EVENT
statement parsingFULL
option from SHOW TRIGGERS
as it's not supported in MySQL.SHOW PROCEDURE STATUS
is always current timedolt_transaction_commit=1
dolt diff --summary
no longer shows how many rows were modifiedOFFSET
sometimesRead Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 1.96 | 2.66 | 1.4 |
groupby_scan | 12.08 | 16.12 | 1.3 |
index_join | 1.16 | 4.03 | 3.5 |
index_join_scan | 1.12 | 2.07 | 1.8 |
index_scan | 30.26 | 52.89 | 1.7 |
oltp_point_select | 0.15 | 0.48 | 3.2 |
oltp_read_only | 2.86 | 8.43 | 2.9 |
select_random_points | 0.3 | 0.74 | 2.5 |
select_random_ranges | 0.35 | 1.12 | 3.2 |
table_scan | 30.26 | 53.85 | 1.8 |
types_table_scan | 69.29 | 170.48 | 2.5 |
reads_mean_multiplier | 2.3 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
bulk_insert | 0.001 | 0.001 | 1.0 |
oltp_delete_insert | 5.67 | 6.21 | 1.1 |
oltp_insert | 2.91 | 3.02 | 1.0 |
oltp_read_write | 6.79 | 15.83 | 2.3 |
oltp_update_index | 2.91 | 3.19 | 1.1 |
oltp_update_non_index | 2.97 | 3.07 | 1.0 |
oltp_write_only | 4.1 | 7.56 | 1.8 |
types_delete_insert | 5.77 | 6.91 | 1.2 |
writes_mean_multiplier | 1.3 |
Overall Mean Multiple | 1.9 |
---|
Published by github-actions[bot] over 1 year ago
dolt assist
command that connects to ChatGPT to assist in various dolt tasks, including running SQL queries. It's experimental and hidden (not included in docs) for now.Separator
struct. This change is needed to allow ''
as a separator.Filter
below Limit
select * from (select * from t limit 1) t where i > 1;
is not equivalent to
select * from (select * from t where i > 1) t limit 1;
Fix for: https://github.com/dolthub/dolt/issues/5568
... ORDER BY <expr> LIMIT 1
and ... ORDER BY <expr> LIMIT 1 OFFSET 1
both use TopN in a way that surprises users expecting stable output orders.-- setup
create table xy (x int primary key, y int);
insert into xy values (1,0),(2,0),(3,0),(4,0);
-- expect first row
select * from xy order by y asc limit 1;
+---+------+
| x | y |
+---+------+
| 0 | 1 |
+---+------+
-- expect second row
select * from xy order by y asc limit 1 offset 1;
+---+------+
| x | y |
+---+------+
| 0 | 1 |
+---+------+
This PR adds ordinals to rows in the TopN heap to differentiate insertion order in sort-groupings.tmp1> explain select /*+ merge_join(xyz,uv) join_order(xy,uv) */ * from xyz join uv on x = u where y = 1;
+--------------------------------+
| plan |
+--------------------------------+
| MergeJoin |
| ├─ cmp: (xyz.x = uv.u) |
| ├─ IndexedTableAccess(xyz) |
| │ ├─ index: [xyz.y] |
| │ ├─ filters: [{[1, 1]}] |
| │ └─ columns: [x y z] |
| └─ IndexedTableAccess(uv) |
| ├─ index: [uv.u] |
| ├─ filters: [{[NULL, ∞)}] |
| └─ columns: [u v] |
+--------------------------------+
In rare cases like above, this pushes an unsafe index into merge join that is not sorted monotonically on the join condition. A merge join index that violates join condition monotonicity will miss matches. In even rarer cases, the out of order value for the join condition included NULLs, causing this error: https://github.com/dolthub/dolt/issues/5633.with recursive a as (select 1) select * from a union select * from a;
Re: https://github.com/dolthub/dolt/issues/5657
dolt
repo for a couple weeks now. This PR rolls it out to go-mysql-server
.st_within()
for Point
vs Geometry
, so this is just adds a bunch of test cases for every other geometry.st_equals()
only in the Point
vs Point
case. There are skipped tests for all other cases.group_concat
to indicate whether the default separator should be used. This change is needed to allow ''
as a separator.CREATE EVENT
and DROP EVENT
statements.dolt_backup()
stored procedureGROUP_CONCAT()
parses separator but does not respect itRead Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 1.96 | 2.71 | 1.4 |
groupby_scan | 12.3 | 16.12 | 1.3 |
index_join | 1.18 | 4.1 | 3.5 |
index_join_scan | 1.12 | 2.22 | 2.0 |
index_scan | 30.81 | 52.89 | 1.7 |
oltp_point_select | 0.14 | 0.48 | 3.4 |
oltp_read_only | 2.86 | 8.43 | 2.9 |
select_random_points | 0.3 | 0.75 | 2.5 |
select_random_ranges | 0.35 | 1.14 | 3.3 |
table_scan | 31.37 | 54.83 | 1.7 |
types_table_scan | 71.83 | 176.73 | 2.5 |
reads_mean_multiplier | 2.4 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
bulk_insert | 0.001 | 0.001 | 1.0 |
oltp_delete_insert | 5.88 | 6.32 | 1.1 |
oltp_insert | 2.91 | 3.13 | 1.1 |
oltp_read_write | 6.79 | 15.83 | 2.3 |
oltp_update_index | 2.97 | 3.36 | 1.1 |
oltp_update_non_index | 3.13 | 3.3 | 1.1 |
oltp_write_only | 4.18 | 7.7 | 1.8 |
types_delete_insert | 5.77 | 7.04 | 1.2 |
writes_mean_multiplier | 1.3 |
Overall Mean Multiple | 1.9 |
---|
Published by github-actions[bot] over 1 year ago
tmp> explain select * from t where i in (1, 1);
+---------------------------------------+
| plan |
+---------------------------------------+
| Filter |
| ├─ (t.i HASH IN (1, 1)) |
| └─ IndexedTableAccess(t) |
| ├─ index: [t.i] |
| ├─ filters: [{[1, 1]}, {[1, 1]}] |
| └─ columns: [i] |
+---------------------------------------+
6 rows in set (0.00 sec)
We just had duplicate Ranges inside the filters, which cause multiple lookups for the same value.SingleSelectRel
Read Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 1.93 | 2.76 | 1.4 |
groupby_scan | 12.52 | 16.41 | 1.3 |
index_join | 1.18 | 4.18 | 3.5 |
index_join_scan | 1.14 | 2.07 | 1.8 |
index_scan | 30.81 | 52.89 | 1.7 |
oltp_point_select | 0.15 | 0.48 | 3.2 |
oltp_read_only | 2.97 | 8.43 | 2.8 |
select_random_points | 0.3 | 0.74 | 2.5 |
select_random_ranges | 0.35 | 1.12 | 3.2 |
table_scan | 31.37 | 53.85 | 1.7 |
types_table_scan | 70.55 | 161.51 | 2.3 |
reads_mean_multiplier | 2.3 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
bulk_insert | 0.001 | 0.001 | 1.0 |
oltp_delete_insert | 5.37 | 5.88 | 1.1 |
oltp_insert | 2.61 | 2.97 | 1.1 |
oltp_read_write | 6.67 | 15.83 | 2.4 |
oltp_update_index | 2.76 | 3.07 | 1.1 |
oltp_update_non_index | 2.86 | 2.97 | 1.0 |
oltp_write_only | 3.82 | 7.56 | 2.0 |
types_delete_insert | 5.28 | 6.79 | 1.3 |
writes_mean_multiplier | 1.4 |
Overall Mean Multiple | 1.9 |
---|
Published by github-actions[bot] over 1 year ago
sql-server.lock
file wasn't getting created when creating the first database for a sql-server (i.e. when running the sql-server from a bare, non-init'ed directory).dolt checkout
on the CLI was exiting too early if it couldn't find its working set and not actually checking anything out, but returning a success error code. This meant customers couldn't use the CLI to recover from a deleted default branch. We did have a test for this, but it wasn't testing thoroughly enough and only looked for a success return code from dolt checkout
.dolt branch -d
(from SQL or CLI) should not allow you to delete the repo's default branch. This is how the customer got their database into a bad state with out a default branch.deleted-branches.bats
were skipped; I removed the skips and confirmed they pass.dolt_checkout()
work in sql-server with the default branch is invalid, but I think that's best handled as a follow up PR.dolt_column_diff
which lists the tables and columns changed in every commit reachable from the active branch’s HEAD.JOIN_ORDER(a,b)
) and operator hints (LOOKUP_JOIN(a,b)
) play nice together when there is a plan that satisfies all hints. If order and operator hints are are incompatible, no hints are applied.> explain
select /*+ JOIN_ORDER(a,b,c,d) LOOKUP_JOIN(d,c) MERGE_JOIN(b,a) HASH_JOIN(c,a)*/ 1
from xy a
join uv b on a.x = b.u
join xy c on a.x = c.x
join uv d on d.u = c.x;
QueryProcess
└─ Project
├─ columns: [1 (tinyint)]
└─ HashJoin
├─ Eq
│ ├─ a.x:0!null
│ └─ c.x:2!null
├─ MergeJoin
│ ├─ cmp: Eq
│ │ ├─ a.x:0!null
│ │ └─ b.u:1!null
│ ├─ TableAlias(a)
│ │ └─ IndexedTableAccess(xy)
│ │ ├─ index: [xy.x]
│ │ ├─ static: [{[NULL, ∞)}]
│ │ └─ columns: [x]
│ └─ TableAlias(b)
│ └─ IndexedTableAccess(uv)
│ ├─ index: [uv.u]
│ ├─ static: [{[NULL, ∞)}]
│ └─ columns: [u]
└─ HashLookup
├─ source: TUPLE(a.x:0!null)
├─ target: TUPLE(c.x:0!null)
└─ CachedResults
└─ LookupJoin
├─ Eq
│ ├─ d.u:3!null
│ └─ c.x:2!null
├─ TableAlias(c)
│ └─ Table
│ ├─ name: xy
│ └─ columns: [x]
└─ TableAlias(d)
└─ IndexedTableAccess(uv)
├─ index: [uv.u]
└─ columns: [u]
dolt_column_diff
system tableRead Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 1.93 | 2.71 | 1.4 |
groupby_scan | 12.3 | 16.12 | 1.3 |
index_join | 1.18 | 4.03 | 3.4 |
index_join_scan | 1.14 | 2.07 | 1.8 |
index_scan | 31.37 | 52.89 | 1.7 |
oltp_point_select | 0.15 | 0.48 | 3.2 |
oltp_read_only | 3.02 | 8.43 | 2.8 |
select_random_points | 0.3 | 0.73 | 2.4 |
select_random_ranges | 0.36 | 1.14 | 3.2 |
table_scan | 31.37 | 53.85 | 1.7 |
types_table_scan | 71.83 | 158.63 | 2.2 |
reads_mean_multiplier | 2.3 |
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.52 | 2.76 | 1.1 |
oltp_read_write | 6.55 | 15.83 | 2.4 |
oltp_update_index | 2.61 | 2.97 | 1.1 |
oltp_update_non_index | 2.57 | 2.86 | 1.1 |
oltp_write_only | 3.68 | 7.43 | 2.0 |
types_delete_insert | 5.0 | 6.67 | 1.3 |
writes_mean_multiplier | 1.4 |
Overall Mean Multiple | 1.9 |
---|
Published by github-actions[bot] over 1 year ago
DOLT_DISABLE_CHUNK_JOURNAL=true
, it does not have a chunk journal. If it then runs dolt in a mode where it uses the chunk journal, the journal will not be bootstrapped until a write is done against the database. In the state where dolt
is using the chunk journal but the chunk journal is not bootstrapped, dolt gc
and call dolt_gc()
were broken. They would fail with the message: concurrent manifest edit during GC, before swapTables. GC failed.
.JOIN_ORDER(a,b)
) and operator hints (LOOKUP_JOIN(a,b)
) play nice together when there is a plan that satisfies all hints. If order and operator hints are are incompatible, no hints are applied.> explain
select /*+ JOIN_ORDER(a,b,c,d) LOOKUP_JOIN(d,c) MERGE_JOIN(b,a) HASH_JOIN(c,a)*/ 1
from xy a
join uv b on a.x = b.u
join xy c on a.x = c.x
join uv d on d.u = c.x;
QueryProcess
└─ Project
├─ columns: [1 (tinyint)]
└─ HashJoin
├─ Eq
│ ├─ a.x:0!null
│ └─ c.x:2!null
├─ MergeJoin
│ ├─ cmp: Eq
│ │ ├─ a.x:0!null
│ │ └─ b.u:1!null
│ ├─ TableAlias(a)
│ │ └─ IndexedTableAccess(xy)
│ │ ├─ index: [xy.x]
│ │ ├─ static: [{[NULL, ∞)}]
│ │ └─ columns: [x]
│ └─ TableAlias(b)
│ └─ IndexedTableAccess(uv)
│ ├─ index: [uv.u]
│ ├─ static: [{[NULL, ∞)}]
│ └─ columns: [u]
└─ HashLookup
├─ source: TUPLE(a.x:0!null)
├─ target: TUPLE(c.x:0!null)
└─ CachedResults
└─ LookupJoin
├─ Eq
│ ├─ d.u:3!null
│ └─ c.x:2!null
├─ TableAlias(c)
│ └─ Table
│ ├─ name: xy
│ └─ columns: [x]
└─ TableAlias(d)
└─ IndexedTableAccess(uv)
├─ index: [uv.u]
└─ columns: [u]
Read Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 2.0 | 2.71 | 1.4 |
groupby_scan | 12.3 | 16.41 | 1.3 |
index_join | 1.16 | 4.03 | 3.5 |
index_join_scan | 1.12 | 2.07 | 1.8 |
index_scan | 30.81 | 53.85 | 1.7 |
oltp_point_select | 0.15 | 0.48 | 3.2 |
oltp_read_only | 3.02 | 8.58 | 2.8 |
select_random_points | 0.3 | 0.73 | 2.4 |
select_random_ranges | 0.36 | 1.14 | 3.2 |
table_scan | 31.37 | 54.83 | 1.7 |
types_table_scan | 69.29 | 161.51 | 2.3 |
reads_mean_multiplier | 2.3 |
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.52 | 2.86 | 1.1 |
oltp_read_write | 6.67 | 15.83 | 2.4 |
oltp_update_index | 2.48 | 2.97 | 1.2 |
oltp_update_non_index | 2.57 | 2.86 | 1.1 |
oltp_write_only | 3.55 | 7.56 | 2.1 |
types_delete_insert | 5.18 | 6.55 | 1.3 |
writes_mean_multiplier | 1.4 |
Overall Mean Multiple | 1.9 |
---|
Published by github-actions[bot] over 1 year ago
dolt show
commanddolt show
command.dolt init
makes an empty initial commit, so unless someone is editing their history this shouldn't matter.)dolt init --fun
Read Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 2.0 | 2.71 | 1.4 |
groupby_scan | 12.3 | 16.41 | 1.3 |
index_join | 1.18 | 4.1 | 3.5 |
index_join_scan | 1.14 | 2.07 | 1.8 |
index_scan | 30.81 | 52.89 | 1.7 |
oltp_point_select | 0.15 | 0.48 | 3.2 |
oltp_read_only | 2.97 | 8.58 | 2.9 |
select_random_points | 0.3 | 0.74 | 2.5 |
select_random_ranges | 0.35 | 1.14 | 3.3 |
table_scan | 30.81 | 54.83 | 1.8 |
types_table_scan | 69.29 | 161.51 | 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.57 | 1.2 |
oltp_insert | 2.35 | 2.71 | 1.2 |
oltp_read_write | 6.21 | 15.55 | 2.5 |
oltp_update_index | 2.3 | 2.91 | 1.3 |
oltp_update_non_index | 2.39 | 2.76 | 1.2 |
oltp_write_only | 3.36 | 7.43 | 2.2 |
types_delete_insert | 4.74 | 6.32 | 1.3 |
writes_mean_multiplier | 1.5 |
Overall Mean Multiple | 2.0 |
---|
Published by github-actions[bot] over 1 year ago
call dolt_gc()
will cause other connections to disconnect and will leave the connection which called it in a perpetual error state.root
userroot
user existed and had the right permissions for this, but that is not always true (e.g. Hosted Dolt does not create a root
user on Dolt DBs). Since we can't rely on an existing account with the right privileges for executing those replicated SQL statements, we now create a custom dolt-binlog-applier
user that has super user privs and is locked, to disable logins.root
user doesn't exist, binlog replication will still work correctly.Read Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 1.96 | 2.71 | 1.4 |
groupby_scan | 12.3 | 16.41 | 1.3 |
index_join | 1.18 | 4.03 | 3.4 |
index_join_scan | 1.14 | 2.03 | 1.8 |
index_scan | 30.81 | 52.89 | 1.7 |
oltp_point_select | 0.16 | 0.48 | 3.0 |
oltp_read_only | 3.07 | 8.58 | 2.8 |
select_random_points | 0.31 | 0.73 | 2.4 |
select_random_ranges | 0.36 | 1.14 | 3.2 |
table_scan | 30.81 | 53.85 | 1.7 |
types_table_scan | 71.83 | 158.63 | 2.2 |
reads_mean_multiplier | 2.3 |
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.35 | 2.81 | 1.2 |
oltp_read_write | 6.55 | 15.55 | 2.4 |
oltp_update_index | 2.43 | 2.91 | 1.2 |
oltp_update_non_index | 2.48 | 2.81 | 1.1 |
oltp_write_only | 3.55 | 7.43 | 2.1 |
types_delete_insert | 4.82 | 6.32 | 1.3 |
writes_mean_multiplier | 1.4 |
Overall Mean Multiple | 1.9 |
---|
Published by github-actions[bot] over 1 year ago
err
variables in the libraries/doltcore/doltdb
.drop database
dbState
member now needs to be accessed concurrently, so I've also added synchronization using the exiting session mutex.select * from xy where not exists (select * from uv where x = 1)
=>
select * from xy where not (exists (select * from uv) and x = 1)
And in the more general case:
select * from xy where not exists (select * from uv where not exists (select * from uv where x = 1))
=>
select * from xy where not (exists (select * from uv) and not (exists (select * from uv) and x = 1))
Further simplification would be helpful.transactionDb
field at the end of the DropDB
iteratorDropDB
node has run its logic, the previous TransactionCommittingNode
would try to run logic that relied on the dropped database state still being there. This change clears the transactionDb
field of a session after we've dropped that db so that the transaction commit logic doesn't try to run.Read Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 1.93 | 2.71 | 1.4 |
groupby_scan | 12.3 | 16.12 | 1.3 |
index_join | 1.18 | 4.03 | 3.4 |
index_join_scan | 1.14 | 2.11 | 1.9 |
index_scan | 30.26 | 52.89 | 1.7 |
oltp_point_select | 0.15 | 0.48 | 3.2 |
oltp_read_only | 2.91 | 8.43 | 2.9 |
select_random_points | 0.3 | 0.73 | 2.4 |
select_random_ranges | 0.35 | 1.12 | 3.2 |
table_scan | 30.81 | 53.85 | 1.7 |
types_table_scan | 69.29 | 158.63 | 2.3 |
reads_mean_multiplier | 2.3 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
bulk_insert | 0.001 | 0.001 | 1.0 |
oltp_delete_insert | 5.47 | 5.77 | 1.1 |
oltp_insert | 2.57 | 2.81 | 1.1 |
oltp_read_write | 6.55 | 15.55 | 2.4 |
oltp_update_index | 2.66 | 2.91 | 1.1 |
oltp_update_non_index | 2.71 | 2.86 | 1.1 |
oltp_write_only | 3.89 | 7.43 | 1.9 |
types_delete_insert | 5.18 | 6.55 | 1.3 |
writes_mean_multiplier | 1.4 |
Overall Mean Multiple | 1.9 |
---|
Published by github-actions[bot] over 1 year ago
dolt_checkout()
select * from xy where not exists (select * from uv where x = 1)
=>
select * from xy where not (exists (select * from uv) and x = 1)
And in the more general case:
select * from xy where not exists (select * from uv where not exists (select * from uv where x = 1))
=>
select * from xy where not (exists (select * from uv) and not (exists (select * from uv) and x = 1))
Further simplification would be helpful.insert ... on duplicate update ...
inserter
and updater
fields for the insert
node, which messes up batched inserts as certain edits are not visible between the two. The fix is two do what dolt does, and share edit accumulators.call dolt_checkout
new branch error after force deleting existing branchRead Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 1.96 | 2.71 | 1.4 |
groupby_scan | 12.3 | 16.12 | 1.3 |
index_join | 1.23 | 3.96 | 3.2 |
index_join_scan | 1.16 | 2.03 | 1.7 |
index_scan | 30.26 | 51.94 | 1.7 |
oltp_point_select | 0.15 | 0.48 | 3.2 |
oltp_read_only | 2.97 | 8.43 | 2.8 |
select_random_points | 0.3 | 0.73 | 2.4 |
select_random_ranges | 0.35 | 1.14 | 3.3 |
table_scan | 30.81 | 53.85 | 1.7 |
types_table_scan | 70.55 | 161.51 | 2.3 |
reads_mean_multiplier | 2.3 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
bulk_insert | 0.001 | 0.001 | 1.0 |
oltp_delete_insert | 5.0 | 5.57 | 1.1 |
oltp_insert | 2.43 | 2.71 | 1.1 |
oltp_read_write | 6.55 | 15.55 | 2.4 |
oltp_update_index | 2.57 | 2.86 | 1.1 |
oltp_update_non_index | 2.52 | 2.76 | 1.1 |
oltp_write_only | 3.55 | 7.3 | 2.1 |
types_delete_insert | 4.82 | 6.32 | 1.3 |
writes_mean_multiplier | 1.4 |
Overall Mean Multiple | 1.9 |
---|
Published by github-actions[bot] over 1 year ago
RPCCreds
audience, use dolthub.com for issuerselect * from xy where exists (select * from uv where x = 1)
-- =>
select * from xy where x = 1 and exists (select * from uv)
SPATIAL
indexes work for our stuff, it seems like it would work just fine for us.KILL [ID]
to kill connections which are currently connecting.on duplicate key update
for keyless tablesadds
and deletes
for Insert()
and Delete()
alter table <table_name> add constraint unique (<column_list>)
alter table <table_name> add constraint <name> unique (<column_list>)
alter table <table_name> add constraint unique <name> (<column_list>)
alter table <table_name> add constraint <name> unique <preferred_name> (<column_list>)
GEOMETRY
typeRead Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 1.93 | 2.76 | 1.4 |
groupby_scan | 12.52 | 16.41 | 1.3 |
index_join | 1.18 | 4.03 | 3.4 |
index_join_scan | 1.16 | 2.03 | 1.7 |
index_scan | 30.26 | 51.94 | 1.7 |
oltp_point_select | 0.15 | 0.48 | 3.2 |
oltp_read_only | 3.02 | 8.43 | 2.8 |
select_random_points | 0.3 | 0.73 | 2.4 |
select_random_ranges | 0.35 | 1.12 | 3.2 |
table_scan | 30.81 | 52.89 | 1.7 |
types_table_scan | 69.29 | 158.63 | 2.3 |
reads_mean_multiplier | 2.3 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
bulk_insert | 0.001 | 0.001 | 1.0 |
oltp_delete_insert | 4.57 | 5.57 | 1.2 |
oltp_insert | 2.26 | 2.66 | 1.2 |
oltp_read_write | 6.32 | 15.27 | 2.4 |
oltp_update_index | 2.35 | 2.76 | 1.2 |
oltp_update_non_index | 2.48 | 2.71 | 1.1 |
oltp_write_only | 3.43 | 7.3 | 2.1 |
types_delete_insert | 4.57 | 6.21 | 1.4 |
writes_mean_multiplier | 1.5 |
Overall Mean Multiple | 1.9 |
---|
Published by github-actions[bot] over 1 year ago
dolt_patch()
stored procedure and adds dolt_patch()
table function.dolt_patch()
table function supports:
WORKING
, STAGED
, HEAD
and any valid commit hash revisions.schema
or data
only statements can be queried with WHERE
clause of diff_type
column.statement_order
auto_increment integer value as primary key.dolt stash
and updated its synopsis and long descriptions.BIGMIN/LITMAX
algorithm to split up large Z-Ranges into multiple more concise Z-Ranges.RESTRICT
. Turns out that all we needed to do is to not add the updater (which is housed inside of the editor) to the chain.Select *
was being converted into get fields without an outer scope offset, preventing certain unnesting transformations.st_within
use spatial indexesSOURCE_HOST
member of SHOW REPLICA STATUS
alter table <table_name> add constraint unique (<column_list>)
alter table <table_name> add constraint <name> unique (<column_list>)
alter table <table_name> add constraint unique <name> (<column_list>)
alter table <table_name> add constraint <name> unique <preferred_name> (<column_list>)
dolt checkout
does not restore dropped foreign key constraintsdolt_patch
features (three dot, --schema
/--data
flags)dolt_patch
prodecure does not work with WORKING
and STAGED
revisionsdolt_push
not found.\
for files in Powershellsql-server
as an old format databaseINSERT INTO ON DUPLICATE KEY UPDATE
duplicate primary key given: [1]
LEFT OUTER JOIN
does not select opposite table's values (in MySQL does)Read Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 1.96 | 2.86 | 1.5 |
groupby_scan | 12.3 | 16.41 | 1.3 |
index_join | 1.21 | 4.33 | 3.6 |
index_join_scan | 1.16 | 2.07 | 1.8 |
index_scan | 30.81 | 51.94 | 1.7 |
oltp_point_select | 0.15 | 0.48 | 3.2 |
oltp_read_only | 2.97 | 8.43 | 2.8 |
select_random_points | 0.3 | 0.74 | 2.5 |
select_random_ranges | 0.36 | 1.14 | 3.2 |
table_scan | 30.81 | 52.89 | 1.7 |
types_table_scan | 70.55 | 158.63 | 2.2 |
reads_mean_multiplier | 2.3 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
bulk_insert | 0.001 | 0.001 | 1.0 |
oltp_delete_insert | 5.09 | 5.88 | 1.2 |
oltp_insert | 2.57 | 2.76 | 1.1 |
oltp_read_write | 6.67 | 15.55 | 2.3 |
oltp_update_index | 2.57 | 2.97 | 1.2 |
oltp_update_non_index | 2.57 | 2.91 | 1.1 |
oltp_write_only | 3.75 | 7.43 | 2.0 |
types_delete_insert | 4.91 | 6.43 | 1.3 |
writes_mean_multiplier | 1.4 |
Overall Mean Multiple | 1.9 |
---|
Published by github-actions[bot] over 1 year ago
This release turns on ACID transactions by default. 0.75.0 is meant to signify the last major release before Dolt 1.0.
dolt stash
dolt stash
.--include-untracked
flag for dolt stash
.filters
is set to nil
after RESET REPLICA ALL
. Adds a test for that case and a test for handling very long hostnames.schema_change
column in dolt_diff_summary
reporting false for foreign key changesgoos: darwin
goarch: amd64
pkg: github.com/dolthub/dolt/go/store/skip
cpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz
│ before │ after │
│ sec/op │ sec/op vs base │
Get/unsorted_keys/n=64-12 182.65n ± 12% 90.91n ± 5% -50.23% (p=0.000 n=10)
Get/unsorted_keys/n=2048-12 334.8n ± 7% 186.5n ± 4% -44.30% (p=0.000 n=10)
Get/unsorted_keys/n=65536-12 670.1n ± 5% 475.7n ± 4% -29.02% (p=0.000 n=10)
Get/ascending_keys/n=64-12 188.75n ± 11% 88.27n ± 7% -53.24% (p=0.000 n=10)
Get/ascending_keys/n=2048-12 318.8n ± 3% 156.1n ± 7% -51.03% (p=0.000 n=10)
Get/ascending_keys/n=65536-12 470.0n ± 8% 218.7n ± 5% -53.47% (p=0.000 n=10)
Get/descending_keys/n=64-12 214.90n ± 11% 90.30n ± 5% -57.98% (p=0.000 n=10)
Get/descending_keys/n=2048-12 305.3n ± 7% 151.1n ± 3% -50.50% (p=0.000 n=10)
Get/descending_keys/n=65536-12 467.3n ± 9% 217.5n ± 6% -53.46% (p=0.000 n=10)
Put/unsorted_keys/n=64-12 263.2n ± 11% 106.6n ± 6% -59.53% (p=0.000 n=10)
Put/unsorted_keys/n=2048-12 397.1n ± 8% 206.0n ± 2% -48.12% (p=0.000 n=10)
Put/unsorted_keys/n=65536-12 686.8n ± 5% 449.4n ± 2% -34.55% (p=0.000 n=10)
Put/asending_keys/n=64-12 232.15n ± 41% 89.07n ± 6% -61.63% (p=0.000 n=10)
Put/asending_keys/n=2048-12 365.2n ± 13% 143.1n ± 9% -60.82% (p=0.000 n=10)
Put/asending_keys/n=65536-12 451.4n ± 9% 206.5n ± 7% -54.27% (p=0.000 n=10)
Put/descending_keys/n=64-12 188.25n ± 14% 71.79n ± 4% -61.86% (p=0.000 n=10)
Put/descending_keys/n=2048-12 209.30n ± 27% 83.79n ± 3% -59.97% (p=0.000 n=10)
Put/descending_keys/n=65536-12 229.2n ± 9% 102.2n ± 1% -55.38% (p=0.000 n=10)
IterAll/unsorted_keys/n=64-12 469.6n ± 10% 166.2n ± 1% -64.61% (p=0.000 n=10)
IterAll/unsorted_keys/n=2048-12 18.622µ ± 8% 9.711µ ± 1% -47.85% (p=0.000 n=10)
IterAll/unsorted_keys/n=65536-12 1214.1µ ± 5% 950.5µ ± 4% -21.71% (p=0.000 n=10)
IterAll/asending_keys/n=64-12 456.8n ± 22% 167.4n ± 1% -63.36% (p=0.000 n=10)
IterAll/asending_keys/n=2048-12 16.380µ ± 10% 7.829µ ± 8% -52.20% (p=0.000 n=10)
IterAll/asending_keys/n=65536-12 598.6µ ± 8% 313.7µ ± 4% -47.60% (p=0.000 n=10)
IterAll/descending_keys/n=64-12 483.3n ± 28% 166.3n ± 1% -65.58% (p=0.000 n=10)
IterAll/descending_keys/n=2048-12 17.414µ ± 16% 7.964µ ± 4% -54.27% (p=0.000 n=10)
IterAll/descending_keys/n=65536-12 621.1µ ± 12% 338.9µ ± 3% -45.45% (p=0.000 n=10)
geomean -52.90%
dolt diff
behavior for dolt_schema table updated show DDL changeslcl:~/Documents/data_dir_1/db1$ dolt diff HEAD~4 HEAD~3 dolt_schemas
diff --dolt a/dolt_schemas b/dolt_schemas
--- a/dolt_schemas @ p4j8pfq3pmub8fmketaes8ek0ghvgg1s
+++ b/dolt_schemas @ bkf872if6l5jd79ue0130c90u8qh5o36
create view males
-as select first_name
+as select first_name,last_name
from people
where gender = "M";
lcl:~/Documents/data_dir_1/db1$ dolt diff HEAD~2 HEAD dolt_schemas
diff --dolt a/dolt_schemas b/dolt_schemas
--- a/dolt_schemas @ m12an7km8tnft6hole0185ds1d91n5is
+++ b/dolt_schemas @ l8sa0c199fmng777t3v6mtjrfs1h5vdp
CREATE TRIGGER avg_age AFTER INSERT ON people
for each row
- update average_age set average = (SELECT AVG(age));
+ update average_age set average = (SELECT AVG(age) FROM people);
lcl:~/Documents/data_dir_1/db1$ dolt diff HEAD~5 HEAD dolt_schemas
diff --dolt a/dolt_schemas b/dolt_schemas
--- a/dolt_schemas @ 8nlac0sjnoetmcv01ps7phe5bp6mf9p3
+++ b/dolt_schemas @ l8sa0c199fmng777t3v6mtjrfs1h5vdp
+CREATE TRIGGER avg_age AFTER INSERT ON people
+for each row
+ update average_age set average = (SELECT AVG(age) FROM people);
+create view males
+as select first_name,last_name
+from people
+where gender = "M";
lcl:~/Documents/data_dir_1/db1$ dolt diff HEAD HEAD~5 dolt_schemas
diff --dolt a/dolt_schemas b/dolt_schemas
--- a/dolt_schemas @ l8sa0c199fmng777t3v6mtjrfs1h5vdp
+++ b/dolt_schemas @ 8nlac0sjnoetmcv01ps7phe5bp6mf9p3
-CREATE TRIGGER avg_age AFTER INSERT ON people
-for each row
- update average_age set average = (SELECT AVG(age) FROM people);
-create view males
-as select first_name,last_name
-from people
-where gender = "M";
START/STOP REPLICA
START REPLICA
and STOP REPLICA
weren't working correctly. There were two major cases where the binlog replication applier routine was blocking and not processing the stopReplication
signal:
conn.ReadBinlogEvent()
call and then feeds the results back to the applier routine through channels.dolt stash
dolt stash
commands include:
dolt stash
dolt stash pop [<stash>]
dolt stash drop [<stash>]
dolt stash clear
dolt stash list
SOURCE_HOST
member of SHOW REPLICA STATUS
EXTRACT
time
library, and the behavior is consistent with our existing DAY()
, MONTH()
and YEAR()
functions.!
and fix NOT
operator not working for UPDATE trigger
!
was not supported for IF
clause in TRIGGER
statementsNOT
clause was not working for UPDATE
TRIGGER
statementsDROP TABLE
to drop view returns errorDROP TABLE IF EXISTS
creates note warning.dolt_schemas
elements should show as equivalent SQL statements during dolt diff
from_
columns when table createddolt stash
<db>/<branch>
) should faildolt sql-server
option to disable dolt write functionsdolt_commit
and dolt_reset
in read-only modedolt_schemas
should be protected from DROP TABLE ...
DROP TABLE
should return an error if a view is givenRead Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 1.93 | 2.66 | 1.4 |
groupby_scan | 12.3 | 16.41 | 1.3 |
index_join | 1.21 | 4.25 | 3.5 |
index_join_scan | 1.16 | 2.07 | 1.8 |
index_scan | 30.81 | 52.89 | 1.7 |
oltp_point_select | 0.15 | 0.48 | 3.2 |
oltp_read_only | 2.97 | 8.58 | 2.9 |
select_random_points | 0.3 | 0.74 | 2.5 |
select_random_ranges | 0.36 | 1.14 | 3.2 |
table_scan | 31.37 | 53.85 | 1.7 |
types_table_scan | 70.55 | 158.63 | 2.2 |
reads_mean_multiplier | 2.3 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
bulk_insert | 0.001 | 0.001 | 1.0 |
oltp_delete_insert | 5.67 | 5.88 | 1.0 |
oltp_insert | 2.66 | 2.86 | 1.1 |
oltp_read_write | 6.79 | 15.55 | 2.3 |
oltp_update_index | 2.81 | 3.02 | 1.1 |
oltp_update_non_index | 2.76 | 2.86 | 1.0 |
oltp_write_only | 3.89 | 7.43 | 1.9 |
types_delete_insert | 5.18 | 6.67 | 1.3 |
writes_mean_multiplier | 1.3 |
Overall Mean Multiple | 1.9 |
---|
Published by github-actions[bot] over 1 year ago
Query
events. This was causing queries to execute against the wrong database when using binlog replication with multiple databases. Our binlog tests didn't catch this because the multi-db tests used fully qualified table names, so it didn't matter what database was currently selected.use
statements and fully qualified table names (and also cleans up some of our query error logging to make log output more helpful for debugging).__LD_1__
to sort NULL
fields last. In NBF __DOLT__
, NULL
fields are ordered first. This change to dolt migrate
sorts migrated tuples on-the-fly to compensate for this mismatch!
and fix NOT
operator not working for UPDATE trigger
!
was not supported for IF
clause in TRIGGER
statementsNOT
clause was not working for UPDATE
TRIGGER
statementsRead Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 1.93 | 2.66 | 1.4 |
groupby_scan | 12.3 | 16.41 | 1.3 |
index_join | 1.16 | 4.18 | 3.6 |
index_join_scan | 1.12 | 2.07 | 1.8 |
index_scan | 30.26 | 51.94 | 1.7 |
oltp_point_select | 0.15 | 0.48 | 3.2 |
oltp_read_only | 3.02 | 8.43 | 2.8 |
select_random_points | 0.3 | 0.74 | 2.5 |
select_random_ranges | 0.35 | 1.12 | 3.2 |
table_scan | 30.81 | 52.89 | 1.7 |
types_table_scan | 69.29 | 158.63 | 2.3 |
reads_mean_multiplier | 2.3 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
bulk_insert | 0.001 | 0.001 | 1.0 |
oltp_delete_insert | 2.61 | 12.3 | 4.7 |
oltp_insert | 1.32 | 2.91 | 2.2 |
oltp_read_write | 5.0 | 17.63 | 3.5 |
oltp_update_index | 1.34 | 6.09 | 4.5 |
oltp_update_non_index | 1.34 | 6.67 | 5.0 |
oltp_write_only | 2.14 | 8.9 | 4.2 |
types_delete_insert | 2.76 | 13.22 | 4.8 |
writes_mean_multiplier | 3.7 |
Overall Mean Multiple | 2.9 |
---|
Published by github-actions[bot] over 1 year ago
connectionDb
field to log the session's current database, but we don't always consistently update that logger field in every place where we set the session's current db. This change moves that logger field update directly into BaseSession.SetCurrentDatabase(string)
to ensure it always stays in sync.memo:
├── G1: (tableAlias: r 11444774.0)*
├── G2: (tableAlias: i 161.0)*
├── G3: (mergeJoin 1 2 114447.7) (mergeJoin 2 1 1.6) (hashJoin 1 2 114930.7) (hashJoin 2 1 34334323.6) (lookupJoin 1 2 23003834.7) (lookupJoin 2 1 -11444450.2)* (innerJoin 2 1 1861034699.1) (innerJoin 1 2 1861034699.1)
├── G4: (tableAlias: c 12293.0)*
├── G5: (hashJoin 3 4 36879.2) (hashJoin 2 12 4058.3) (hashJoin 12 2 496.5) (hashJoin 4 3 176.1) (lookupJoin 3 4 -12257.4)* (lookupJoin 12 2 2557.0) (innerJoin 4 3 219885.1) (innerJoin 12 2 219885.1) (innerJoin 2 12 219885.1) (innerJoin 3 4 219885.1)
├── G6: (tableAlias: pm 646.0)*
├── G7: (hashJoin 5 6 1938.0) (hashJoin 2 15 22.9) (hashJoin 15 2 483.1) (hashJoin 4 14 128.2) (hashJoin 14 4 36879.0) (hashJoin 6 5 11.8) (lookupJoin 5 6 -642.4) (lookupJoin 15 2 -146.7) (lookupJoin 14 4 -12289.4)* (innerJoin 6 5 1154.5) (innerJoin 14 4 21987.6) (innerJoin 4 14 21987.6) (innerJoin 15 2 1154.5) (innerJoin 2 15 1154.5) (innerJoin 5 6 1154.5)
├── G8: (tableAlias: trf 39874374.0)*
├── G9: (hashJoin 7 8 119623122.0) (hashJoin 2 22 3.7) (hashJoin 22 2 483.0) (hashJoin 4 21 123.5) (hashJoin 21 4 36879.0) (hashJoin 6 19 7.0) (hashJoin 19 6 1938.0) (hashJoin 8 7 398744.3) (lookupJoin 7 8 -39874373.6) (lookupJoin 22 2 -159.6) (lookupJoin 21 4 -12292.6) (lookupJoin 19 6 -645.6)* (innerJoin 8 7 7132368.2) (innerJoin 19 6 114.6) (innerJoin 6 19 114.6) (innerJoin 21 4 2197.9) (innerJoin 4 21 2197.9) (innerJoin 22 2 114.6) (innerJoin 2 22 114.6) (innerJoin 7 8 7132368.2)
├── G10: (tableAlias: nt 8735.0)*
├── G11: (hashJoin 9 10 26205.0) (hashJoin 2 30 1.8) (hashJoin 30 2 483.0) (hashJoin 4 29 123.0) (hashJoin 29 4 36879.0) (hashJoin 6 27 6.5) (hashJoin 27 6 1938.0) (hashJoin 7 23 2882.6) (hashJoin 23 7 10.1) (hashJoin 10 9 87.4) (lookupJoin 9 10 -8735.0)* (lookupJoin 30 2 -160.8) (lookupJoin 29 4 -12293.0) (lookupJoin 27 6 -646.0) (innerJoin 10 9 155.2) (innerJoin 23 7 170.9) (innerJoin 7 23 170.9) (innerJoin 27 6 11.7) (innerJoin 6 27 11.7) (innerJoin 29 4 240.9) (innerJoin 4 29 240.9) (innerJoin 30 2 11.7) (innerJoin 2 30 11.7) (innerJoin 9 10 155.2)
├── G12: (mergeJoin 1 4 114447.7) (mergeJoin 4 1 122.9) (hashJoin 1 4 151326.7) (hashJoin 4 1 34334444.9) (lookupJoin 1 4 22991702.7) (lookupJoin 4 1 -11420052.8)* (innerJoin 4 1 142097512848.8) (innerJoin 1 4 142097512848.8)
├── G13: (mergeJoin 1 6 114447.7) (mergeJoin 6 1 6.5) (hashJoin 1 6 116385.7) (hashJoin 6 1 34334328.5) (lookupJoin 1 6 23003349.7) (lookupJoin 6 1 -11443474.9)* (innerJoin 6 1 7467257243.0) (innerJoin 1 6 7467257243.0)
├── G14: (hashJoin 2 13 214.8) (hashJoin 13 2 483.7) (hashJoin 3 6 1938.2) (hashJoin 6 3 59.6) (lookupJoin 13 2 -18.2) (lookupJoin 3 6 -610.4)* (innerJoin 6 3 11554.1) (innerJoin 3 6 11554.1) (innerJoin 13 2 11554.1) (innerJoin 2 13 11554.1)
├── G15: (hashJoin 4 13 336.1) (hashJoin 13 4 36879.7) (hashJoin 12 6 1951.5) (hashJoin 6 12 4063.2) (lookupJoin 13 4 -12150.2)* (lookupJoin 12 6 2072.0) (innerJoin 6 12 882275.0) (innerJoin 12 6 882275.0) (innerJoin 13 4 882275.0) (innerJoin 4 13 882275.0)
├── G16: (mergeJoin 1 8 114447.7) (mergeJoin 8 1 398743.7) (hashJoin 1 8 119737569.7) (hashJoin 8 1 34733065.7) (lookupJoin 1 8 -16870378.3)* (lookupJoin 8 1 68702717.7) (innerJoin 8 1 460916730809689.8) (innerJoin 1 8 460916730809689.8)
├── G17: (hashJoin 2 16 3433433.8) (hashJoin 16 2 11927.8) (hashJoin 3 8 119623122.2) (hashJoin 8 3 398796.9) (lookupJoin 16 2 2300238.6) (lookupJoin 3 8 -39874338.4)* (innerJoin 8 3 713236914.2) (innerJoin 3 8 713236914.2) (innerJoin 16 2 186103469.0) (innerJoin 2 16 186103469.0)
├── G18: (hashJoin 4 16 3433555.1) (hashJoin 16 4 48323.8) (hashJoin 12 8 119623135.5) (hashJoin 8 12 402800.4) (lookupJoin 16 4 2288106.6) (lookupJoin 12 8 -39871656.0)* (innerJoin 8 12 54458518000.6) (innerJoin 12 8 54458518000.6) (innerJoin 16 4 14209751284.0) (innerJoin 4 16 14209751284.0)
├── G19: (hashJoin 2 18 407.3) (hashJoin 18 2 484.4) (hashJoin 4 17 128.2) (hashJoin 17 4 36879.0) (hashJoin 5 8 119623122.0) (hashJoin 8 5 398749.1) (lookupJoin 18 2 110.8) (lookupJoin 17 4 -12289.4)* (lookupJoin 5 8 -39874370.4) (innerJoin 8 5 71323690.5) (innerJoin 5 8 71323690.5) (innerJoin 17 4 21987.6) (innerJoin 4 17 21987.6) (innerJoin 18 2 21987.6) (innerJoin 2 18 21987.6)
├── G20: (hashJoin 6 16 3433438.7) (hashJoin 16 6 13382.8) (hashJoin 13 8 119623122.7) (hashJoin 8 13 398956.9) (lookupJoin 16 6 2299753.6) (lookupJoin 13 8 -39874231.2)* (innerJoin 8 13 2861807745.6) (innerJoin 13 8 2861807745.6) (innerJoin 16 6 746725723.4) (innerJoin 6 16 746725723.4)
├── G21: (hashJoin 2 20 22.9) (hashJoin 20 2 483.1) (hashJoin 6 17 11.8) (hashJoin 17 6 1938.0) (hashJoin 14 8 119623122.0) (hashJoin 8 14 398749.1) (lookupJoin 20 2 -146.7) (lookupJoin 17 6 -642.4)* (lookupJoin 14 8 -39874370.4) (innerJoin 8 14 71323690.5) (innerJoin 14 8 71323690.5) (innerJoin 17 6 1154.5) (innerJoin 6 17 1154.5) (innerJoin 20 2 1154.5) (innerJoin 2 20 1154.5)
├── G22: (hashJoin 4 20 144.2) (hashJoin 20 4 36879.1) (hashJoin 6 18 412.1) (hashJoin 18 6 1939.4) (hashJoin 15 8 119623122.1) (hashJoin 8 15 398765.1) (lookupJoin 20 4 -12278.7) (lookupJoin 18 6 -374.2) (lookupJoin 15 8 -39874359.7)* (innerJoin 8 15 286180773.7) (innerJoin 15 8 286180773.7) (innerJoin 18 6 88226.6) (innerJoin 6 18 88226.6) (innerJoin 20 4 88226.6) (innerJoin 4 20 88226.6)
├── G23: (mergeJoin 8 10 398743.7) (mergeJoin 10 8 87.4) (hashJoin 8 10 424948.7) (hashJoin 10 8 119623209.3) (lookupJoin 8 10 80178631.1) (lookupJoin 10 8 -39856807.9)* (innerJoin 10 8 351785683457.9) (innerJoin 8 10 351785683457.9)
├── G24: (hashJoin 1 23 117330.3) (hashJoin 23 1 34334331.6) (hashJoin 16 10 37649.8) (hashJoin 10 16 3433519.6) (lookupJoin 23 1 -11442842.7)* (lookupJoin 16 10 2292809.1) (innerJoin 10 16 10096980188.9) (innerJoin 16 10 10096980188.9) (innerJoin 23 1 11106678207.9) (innerJoin 1 23 11106678207.9)
├── G25: (hashJoin 2 24 289.9) (hashJoin 24 2 484.0) (hashJoin 3 23 2882.7) (hashJoin 23 3 62.7) (hashJoin 17 10 26205.0) (hashJoin 10 17 92.7) (lookupJoin 24 2 32.1) (lookupJoin 17 10 -8731.4)* (innerJoin 10 17 15623.4) (innerJoin 17 10 15623.4) (innerJoin 23 3 17185.8) (innerJoin 3 23 17185.8) (innerJoin 24 2 15623.4) (innerJoin 2 24 15623.4)
├── G26: (hashJoin 4 24 411.2) (hashJoin 24 4 36880.0) (hashJoin 12 23 2896.1) (hashJoin 23 12 4066.3) (hashJoin 18 10 26206.4) (hashJoin 10 18 493.0) (lookupJoin 24 4 -12099.9)* (lookupJoin 18 10 -8463.1) (innerJoin 10 18 1192983.6) (innerJoin 18 10 1192983.6) (innerJoin 23 12 1312282.1) (innerJoin 12 23 1312282.1) (innerJoin 24 4 1192983.6) (innerJoin 4 24 1192983.6)
├── G27: (hashJoin 2 26 30.4) (hashJoin 26 2 483.1) (hashJoin 4 25 123.5) (hashJoin 25 4 36879.0) (hashJoin 5 23 2882.6) (hashJoin 23 5 14.9) (hashJoin 19 10 26205.0) (hashJoin 10 19 87.9) (lookupJoin 26 2 -141.7) (lookupJoin 25 4 -12292.6) (lookupJoin 19 10 -8734.6)* (innerJoin 10 19 1561.4) (innerJoin 19 10 1561.4) (innerJoin 23 5 1717.7) (innerJoin 5 23 1717.7) (innerJoin 25 4 2417.7) (innerJoin 4 25 2417.7) (innerJoin 26 2 1561.4) (innerJoin 2 26 1561.4)
├── G28: (hashJoin 6 24 294.7) (hashJoin 24 6 1939.0) (hashJoin 13 23 2883.3) (hashJoin 23 13 222.8) (hashJoin 20 10 26205.1) (hashJoin 10 20 108.7) (lookupJoin 24 6 -452.9) (lookupJoin 20 10 -8720.7)* (innerJoin 10 20 62690.6) (innerJoin 20 10 62690.6) (innerJoin 23 13 68959.8) (innerJoin 13 23 68959.8) (innerJoin 24 6 62690.6) (innerJoin 6 24 62690.6)
├── G29: (hashJoin 2 28 4.0) (hashJoin 28 2 483.0) (hashJoin 6 25 7.0) (hashJoin 25 6 1938.0) (hashJoin 14 23 2882.6) (hashJoin 23 14 14.9) (hashJoin 21 10 26205.0) (hashJoin 10 21 87.9) (lookupJoin 28 2 -159.4) (lookupJoin 25 6 -645.6) (lookupJoin 21 10 -8734.6)* (innerJoin 10 21 1561.4) (innerJoin 21 10 1561.4) (innerJoin 23 14 1717.7) (innerJoin 14 23 1717.7) (innerJoin 25 6 126.1) (innerJoin 6 25 126.1) (innerJoin 28 2 126.1) (innerJoin 2 28 126.1)
└── G30: (hashJoin 4 28 125.3) (hashJoin 28 4 36879.0) (hashJoin 6 26 35.3) (hashJoin 26 6 1938.1) (hashJoin 15 23 2882.6) (hashJoin 23 15 30.9) (hashJoin 22 10 26205.0) (hashJoin 10 22 89.5) (lookupJoin 28 4 -12291.4) (lookupJoin 26 6 -626.7) (lookupJoin 22 10 -8733.6)* (innerJoin 10 22 6268.2) (innerJoin 22 10 6268.2) (innerJoin 23 15 6895.1) (innerJoin 15 23 6895.1) (innerJoin 26 6 6268.2) (innerJoin 6 26 6268.2) (innerJoin 28 4 9704.0) (innerJoin 4 28 9704.0)
sql/analyzer/aliases_disambiguate.go
has a header with documentation on how the new rule works.STRING
rule to work without running into shift/reduce errors proved too time consuming, so I just added all known dynamic privileges according to MySQL's documentation (except SUPER_USER
, which is also giving errors).Published by github-actions[bot] over 1 year ago
from_table_name
and to_table_name
columns to dolt_diff_summary
table function
dolt_status
system table output for renamed tablesdolt diff --summary
CLI command for renamed table uses arrow syntax (i.e. from_table -> to_table
)dolt_patch()
stored procedure is equivalent to dolt diff -r sql
.dolt_patch()
stored procedure is dolt_patch(<from_revision>, <to_revision>, [<tablename>])
, which are optional 2 revisions and optional table names.--cached
flag is supported for now./
and div
operations on value of decimal type columnDECIMAL(25,10)
and the value stored is 4990
. This value is evaluated with 0 scale, whereas this should be evaluated as value with scale of 10.IntPart()
function of decimal package returns 0 as undefined value for out of range values. This causes it hard to differentiate between cases where the final result is valid value of 0 and the final result is out of range value.Published by github-actions[bot] over 1 year ago
dolt_diff_summary
table functiondolt_diff_summary
table function was renamed to dolt_diff_stat
dolt_diff_summary
returns a summary of changed tables between two refs
us_jails> select * from dolt_diff_summary("WORKING", "taylor/test");
+-----------------------------+-----------+-------------+---------------+
| table_name | diff_type | data_change | schema_change |
+-----------------------------+-----------+-------------+---------------+
| jails | modified | true | false |
| test | dropped | false | true |
| inmate_population_snapshots | added | true | true |
+-----------------------------+-----------+-------------+---------------+
3 rows in set (0.01 sec)
--summary
option to dolt diff
dolt diff --summary
was renamed to dolt diff --stat
dolt diff --summary
returns a summary of what tables changed/how between two refs
us-jails % dolt diff --summary
+-----------------------------+-----------+-------------+---------------+
| Table name | Diff type | Data change | Schema change |
+-----------------------------+-----------+-------------+---------------+
| inmate_population_snapshots | dropped | true | true |
| jails | modified | true | false |
| test | added | false | true |
+-----------------------------+-----------+-------------+---------------+
dolt diff --summary
-> dolt diff --stat
dolt_diff_summary
-> dolt_diff_stat
Query
flagsQuery
flagsQuery
binlog event (https://github.com/dolthub/vitess/pull/220), this PR adds handling for those flags.
binlog_checksums
are enabled, the replica now sends a handshake signal to the primary and strips off any received checksum on binlog events. This lets us remove the requirement to disable checksums on the primary in order to use Dolt's binlog replication.
dolt migrate
to write a special branch called migrated_commits
containing a single table mapping
with the schema:
CREATE TABLE `mapping` (
`old_commit_hash` varchar(16383) NOT NULL,
`new_commit_hash` varchar(16383),
PRIMARY KEY (`old_commit_hash`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_bin
+
and -
prepended to each line. The second requires the flag --proc-in-place
, and shows the changes in-place with the color signifying the change.SPATIAL KEY
for SHOW CREATE TABLE
.IndexedTableAccess
for in-memory tables that have spatial indexesSTRING
rule to work without running into shift/reduce errors proved too time consuming, so I just added all known dynamic privileges according to MySQL's documentation (except SUPER_USER
, which is also giving errors).Query
binlog events are sent from the primary when the replica needs to execute a SQL statement directly. This is only for DDL operations, since DML operations are handled with a structured data message that indicates exactly which rows changed.Query
binlog messages that wasn't getting exposed by Vitess that we need to execute the statements correctly (e.g. foreign_key_checks disabled). This PR exposes the SQL Options and SQL Mode metadata so that we can access them from Dolt.Read Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 1.96 | 2.76 | 1.4 |
groupby_scan | 12.08 | 16.41 | 1.4 |
index_join | 1.16 | 4.18 | 3.6 |
index_join_scan | 1.12 | 2.07 | 1.8 |
index_scan | 30.81 | 52.89 | 1.7 |
oltp_point_select | 0.15 | 0.48 | 3.2 |
oltp_read_only | 3.02 | 8.58 | 2.8 |
select_random_points | 0.3 | 0.74 | 2.5 |
select_random_ranges | 0.35 | 1.12 | 3.2 |
table_scan | 31.37 | 54.83 | 1.7 |
types_table_scan | 69.29 | 161.51 | 2.3 |
reads_mean_multiplier | 2.3 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
bulk_insert | 0.001 | 0.001 | 1.0 |
oltp_delete_insert | 3.02 | 11.87 | 3.9 |
oltp_insert | 1.55 | 2.97 | 1.9 |
oltp_read_write | 5.37 | 17.95 | 3.3 |
oltp_update_index | 1.7 | 5.67 | 3.3 |
oltp_update_non_index | 1.58 | 5.77 | 3.7 |
oltp_write_only | 2.48 | 8.9 | 3.6 |
types_delete_insert | 3.19 | 11.87 | 3.7 |
writes_mean_multiplier | 3.1 |
Overall Mean Multiple | 2.6 |
---|
Published by github-actions[bot] over 1 year ago
dolt dump
dolt_diff
respects qualified databasedolt_diff
system table to use the qualified database if provided instead of always defaulting to the session's current database.SELECT
over 5000 rows with two text columns containing all multiline strings for every row, and I averaged around 10% faster than the old implementation. We now sample every 100 rows rather than only the first 100, and this makes each local chunk of 100 rows visually consistent. In addition, I've cut down on the amount of formatting that is done to the columns, which is what I believe is the source of the speed increase.dolt sql-client
uses the same tabular output logic, so now our SQL client will handle multiline strings from any compatible database, not just Dolt. The default MySQL client behaves like our old implementation, so I think this is another cool win.schema import
when table has rowsDOLT_ENABLE_SPATIAL_INDEX
commit
, which got confused with to_commit
in the diff https://github.com/dolthub/dolt/issues/5188semiJoin(xy ab) => project(ab) -> innerJoin(xy, distinct(ab))
.SPATIAL KEY
for SHOW CREATE TABLE
.IndexedTableAccess
for in-memory tables that have spatial indexesQuery
binlog events are sent from the primary when the replica needs to execute a SQL statement directly. This is only for DDL operations, since DML operations are handled with a structured data message that indicates exactly which rows changed.Query
binlog messages that wasn't getting exposed by Vitess that we need to execute the statements correctly (e.g. foreign_key_checks disabled). This PR exposes the SQL Options and SQL Mode metadata so that we can access them from Dolt.caching_sha2_password
authmysql_native_password
auth plugin, but the default auth plugin as of MySQL 8.0 is caching_sha2_password
. This means that to use Dolt binlog replication, customers either have to change the default auth plugin in MySQL or they have to create a user that is identified with the older mysql_native_password
auth plugin. This additional configuration step adds friction for customers wanting to try out Dolt binlog replication.vitessio/vitess
to pick up client support for connecting to MySQL servers that default to caching_sha2_password
auth plugin (and will still fall back to mysql_native_password
). All of these changes are pulled directly from vitessio/vitess
, without any other changes mixed in.dolt sql
creates an unexpected new database instead of using cwddolt_schemas
table not compatible with MySQL. Maybe need a views
option with dolt
, none
, or mysql
as options?dolt_diff
system table doesn't respect qualified database--user
and --password
sql-server
args even if their is a config.yaml
dolt diff
runtime error: index out of range [1] with length 1
Read Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 1.93 | 2.66 | 1.4 |
groupby_scan | 12.3 | 16.12 | 1.3 |
index_join | 1.18 | 4.33 | 3.7 |
index_join_scan | 1.14 | 2.03 | 1.8 |
index_scan | 30.26 | 51.94 | 1.7 |
oltp_point_select | 0.15 | 0.48 | 3.2 |
oltp_read_only | 2.91 | 8.43 | 2.9 |
select_random_points | 0.3 | 0.74 | 2.5 |
select_random_ranges | 0.35 | 1.14 | 3.3 |
table_scan | 30.81 | 53.85 | 1.7 |
types_table_scan | 69.29 | 158.63 | 2.3 |
reads_mean_multiplier | 2.3 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
bulk_insert | 0.001 | 0.001 | 1.0 |
oltp_delete_insert | 2.91 | 12.52 | 4.3 |
oltp_insert | 1.47 | 2.97 | 2.0 |
oltp_read_write | 5.18 | 17.63 | 3.4 |
oltp_update_index | 1.52 | 6.09 | 4.0 |
oltp_update_non_index | 1.5 | 6.79 | 4.5 |
oltp_write_only | 2.39 | 8.9 | 3.7 |
types_delete_insert | 3.13 | 12.98 | 4.1 |
writes_mean_multiplier | 3.4 |
Overall Mean Multiple | 2.8 |
---|
Published by github-actions[bot] over 1 year ago
--track
is not working with call dolt_checkout
as expected. This change updates dolt_checkout
to mirror the before of dolt checkout
in the CLI.err
variables in the store/datas
package.findPrefix
when looking through table indexes that avoids a make()
call and bytes.Compare
--track
flag for dolt_branch()
procedure--track
flag of CLI dolt branch
command.dolt fetch
and removes the -f
force flag to prevent errors when fetching after a force push.dolt_branches
tablecharacter_set_results
system variable to utf8
, which raw binary strings cannot be encoded into. MySQL returns binary type strings in hex format.$ GOARCH=386 GOOS=linux go build ./...
# github.com/dolthub/dolt/go/store/skip
store/skip/list.go:152:21: maxCount (untyped int constant 4294967294) overflows int
See also https://github.com/dolthub/vitess/pull/216
CHANGE REPLICATION SOURCE TO ...
CHANGE REPLICATION FILTER ...
SHOW REPLICA STATUS;
START REPLICA;
, STOP REPLICA;
RESET REPLICA [ALL];
REPLICATE_DO_TABLE
, REPLICATE_IGNORE_TABLE
); more can be added upon customer requestforeign_key_checks=0
FOREIGN_KEY_CHECKS
is disabled, we should still create the underlying secondary index or assign the primary key indexes.FOREIGN_KEY_CHECKS
enabled, we create the indexes and assign any index references.ProjectedTable
interface as it relates to an empty projection (nil v. empty slice). Then made changes to printing of ResolvedTable
and IndexedTableAccess
. This revealed problems in the prune columns rule when all columns were being pruned. Fixed those, which had been masking other bugs, where we hadn't been pruning when we could have been. This was in turn caused by other bugs in the prune rule dealing with case sensitivity.utf8mb3
charsetÿ
last character in the charset utf8mb4
, which does not work for utf8mb3
charset values.literal.String()
returns hex string for binary type datacharacter_set_results
system variable to utf8
, which raw binary strings cannot be encoded into. MySQL returns binary type strings in hex format.caching_sha2_password
authmysql_native_password
auth plugin, but the default auth plugin as of MySQL 8.0 is caching_sha2_password
. This means that to use Dolt binlog replication, customers either have to change the default auth plugin in MySQL or they have to create a user that is identified with the older mysql_native_password
auth plugin. This additional configuration step adds friction for customers wanting to try out Dolt binlog replication.vitessio/vitess
to pick up client support for connecting to MySQL servers that default to caching_sha2_password
auth plugin (and will still fall back to mysql_native_password
). All of these changes are pulled directly from vitessio/vitess
, without any other changes mixed in.mysqldump
is taken for a database tracking GTIDs, it outputs GTID tracking information via a line like:
SET @@GLOBAL.GTID_PURGED= /*!80000 '+'*/ 'beabe64c-9dc6-11ed-8021-a0f9021e8e70:1-126';
In MySQL 8.0+, the MySQL comment inserts a '+'
between the =
and the assignment value, which gets implicitly concatenated with the adjacent quoted string in MySQL.--track
does not work in call dolt_checkout
USE db/branch
works differently than call dolt_checkout('branch')
call procedure as of <commit>
dolt branch -va
-f
the default behavior for dolt fetch
Read Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 1.93 | 2.71 | 1.4 |
groupby_scan | 12.3 | 16.41 | 1.3 |
index_join | 1.18 | 4.57 | 3.9 |
index_join_scan | 1.14 | 3.96 | 3.5 |
index_scan | 30.26 | 52.89 | 1.7 |
oltp_point_select | 0.15 | 0.48 | 3.2 |
oltp_read_only | 2.97 | 8.43 | 2.8 |
select_random_points | 0.3 | 0.75 | 2.5 |
select_random_ranges | 0.35 | 1.14 | 3.3 |
table_scan | 30.81 | 62.19 | 2.0 |
types_table_scan | 70.55 | 183.21 | 2.6 |
reads_mean_multiplier | 2.6 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
bulk_insert | 0.001 | 0.001 | 1.0 |
oltp_delete_insert | 2.76 | 12.52 | 4.5 |
oltp_insert | 1.47 | 2.97 | 2.0 |
oltp_read_write | 5.09 | 17.63 | 3.5 |
oltp_update_index | 1.44 | 6.09 | 4.2 |
oltp_update_non_index | 1.44 | 6.79 | 4.7 |
oltp_write_only | 2.26 | 8.9 | 3.9 |
types_delete_insert | 2.91 | 12.3 | 4.2 |
writes_mean_multiplier | 3.5 |
Overall Mean Multiple | 3.0 |
---|
Published by github-actions[bot] over 1 year ago
git branch feature --track origin/feature
git branch --track request origin/feature
git branch feature --track=direct origin/feature
git branch --track=direct feature origin/feature
git branch feature --track direct origin/feature
, but Dolt allows it as --track direct
and --track=direct
are considered the samecall dolt_gc()
.dolt branch --track
does not create a new branchdolt sql
creates an unexpected new database instead of using cwdRead Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 1.96 | 2.81 | 1.4 |
groupby_scan | 12.3 | 16.41 | 1.3 |
index_join | 1.16 | 4.57 | 3.9 |
index_join_scan | 1.12 | 3.96 | 3.5 |
index_scan | 30.26 | 52.89 | 1.7 |
oltp_point_select | 0.15 | 0.48 | 3.2 |
oltp_read_only | 2.97 | 8.58 | 2.9 |
select_random_points | 0.3 | 0.75 | 2.5 |
select_random_ranges | 0.35 | 1.14 | 3.3 |
table_scan | 30.81 | 61.08 | 2.0 |
types_table_scan | 70.55 | 186.54 | 2.6 |
reads_mean_multiplier | 2.6 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
bulk_insert | 0.001 | 0.001 | 1.0 |
oltp_delete_insert | 2.76 | 11.87 | 4.3 |
oltp_insert | 1.44 | 2.97 | 2.1 |
oltp_read_write | 5.09 | 17.95 | 3.5 |
oltp_update_index | 1.42 | 5.47 | 3.9 |
oltp_update_non_index | 1.37 | 5.99 | 4.4 |
oltp_write_only | 2.22 | 9.06 | 4.1 |
types_delete_insert | 2.97 | 11.87 | 4.0 |
writes_mean_multiplier | 3.4 |
Overall Mean Multiple | 2.9 |
---|
Published by github-actions[bot] over 1 year ago
from
keys to be ordered relative to the to
index. When this is not the case, the to
lookup will be random access and read a chunk from disk. Millions of random access lookups that all IO chunks from disk adds a ~1000x perf hit for validating a single FK relative to sorted lookups.SHOW GLOBAL VARIABLES
mysqldump
is taken for a database tracking GTIDs, it outputs GTID tracking information via a line like:
SET @@GLOBAL.GTID_PURGED= /*!80000 '+'*/ 'beabe64c-9dc6-11ed-8021-a0f9021e8e70:1-126';
In MySQL 8.0+, the MySQL comment inserts a '+'
between the =
and the assignment value, which gets implicitly concatenated with the adjacent quoted string in MySQL.$ GOARCH=386 GOOS=linux go build ./...
# github.com/dolthub/vitess/go/bucketpool
go/bucketpool/bucketpool.go:57:15: math.MaxUint32 (untyped int constant 4294967295) overflows int
RESET REPLICA
and CHANGE REPLICATION FILTERS
information_schema
read with table names containing -
can put the client in a bad state.rows
Read Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 2.0 | 2.81 | 1.4 |
groupby_scan | 12.75 | 16.71 | 1.3 |
index_join | 1.16 | 4.57 | 3.9 |
index_join_scan | 1.14 | 3.96 | 3.5 |
index_scan | 30.26 | 53.85 | 1.8 |
oltp_point_select | 0.15 | 0.49 | 3.3 |
oltp_read_only | 2.97 | 8.58 | 2.9 |
select_random_points | 0.3 | 0.75 | 2.5 |
select_random_ranges | 0.35 | 1.14 | 3.3 |
table_scan | 30.81 | 63.32 | 2.1 |
types_table_scan | 70.55 | 189.93 | 2.7 |
reads_mean_multiplier | 2.6 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
bulk_insert | 0.001 | 0.001 | 1.0 |
oltp_delete_insert | 3.02 | 13.22 | 4.4 |
oltp_insert | 1.5 | 3.13 | 2.1 |
oltp_read_write | 5.18 | 18.28 | 3.5 |
oltp_update_index | 1.55 | 6.09 | 3.9 |
oltp_update_non_index | 1.47 | 6.67 | 4.5 |
oltp_write_only | 2.35 | 9.39 | 4.0 |
types_delete_insert | 3.02 | 13.22 | 4.4 |
writes_mean_multiplier | 3.5 |
Overall Mean Multiple | 3.0 |
---|