Bot releases are visible (Hide)
Published by github-actions[bot] 6 months ago
dolt_history
tables: Issue a warning when types have changeddolt_history
tables can't create a rowConverter
for a row due to a field's type having changed. In these cases, the old value can't always be returned safely as the new type, so we return NULL
and issue a session warning. In the future, we could attempt to convert the old value to the new type.create schema mySchema;
create schema otherSchema;
CREATE TABLE mySchema.test (pk BIGINT PRIMARY KEY, v1 BIGINT);
insert into mySchema.test values (1,1), (2,2);
CREATE TABLE otherSchema.test (pk BIGINT PRIMARY KEY, v1 BIGINT);
insert into otherSchema.test values (3,3), (4,4);
SELECT * FROM mySchema.test;
SELECT * FROM otherSchema.test;
Things I specifically want feedback on:
root_val.go
. In particular it seems likely to cause errors over time as people forget to include schema names in code changes where necessary, silently breaking doltgres. Another option I considered was to introduce some sort of RootReader
interface on top of root value, which you create with a particular schema name, and thereafter all table accesses reference the given schema. There may be places where we have to juggle multiple RootReader
instances at once, rather than just asking for qualified table names from a single root. But this is the pattern I used for the boundary between GMS and Dolt and it worked well, so maybe it could work for root_val.go
as well.2482: don't check schema compatibility for select into
2481: aliasExpr inputExpression case-insensitive check
This PR adds case-insensitive check for aliasExpr.InputExpression
and expr.String()
to determine the expr is referencable.
2473: remove re-parsing select stmt in create view stmt
Depends on https://github.com/dolthub/vitess/pull/339
2466: Schema-qualified table names
This PR also fixes a couple unrelated issues:
alter table
syntaxPublished by github-actions[bot] 6 months ago
varchar
to int
), we assign a new column tag. This prevents us from easily identifying the column across type changes. For example:
dolt_patch()
and dolt diff -r sql
and also prevents us from generating correct DDL statements for binlog replication.AUTO_INCREMENT
columns have NOT NULL
constraintDESCRIBE
columns and auto_increment bugscreate table t (i int not null, j int not null, unique key (j), unique key (i));
describe t;
In MySQL, UNIQUE KEY j
is created before UNIQUE KEY i
, so describe makes j
as PRI
.i
as PRI
.NOT NULL
constraint to columns that are marked AUTO_INCREMENT
.dolt login
works with DoltHub, but not a DoltLab instanceRead Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 2.11 | 3.02 | 1.4 |
groupby_scan | 13.22 | 17.63 | 1.3 |
index_join | 1.34 | 5.18 | 3.9 |
index_join_scan | 1.27 | 2.26 | 1.8 |
index_scan | 33.72 | 53.85 | 1.6 |
oltp_point_select | 0.17 | 0.52 | 3.1 |
oltp_read_only | 3.36 | 8.58 | 2.6 |
select_random_points | 0.33 | 0.83 | 2.5 |
select_random_ranges | 0.39 | 0.99 | 2.5 |
table_scan | 34.33 | 54.83 | 1.6 |
types_table_scan | 75.82 | 161.51 | 2.1 |
reads_mean_multiplier | 2.2 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
oltp_delete_insert | 7.84 | 6.79 | 0.9 |
oltp_insert | 3.75 | 3.36 | 0.9 |
oltp_read_write | 8.28 | 16.41 | 2.0 |
oltp_update_index | 3.82 | 3.49 | 0.9 |
oltp_update_non_index | 3.82 | 3.43 | 0.9 |
oltp_write_only | 5.28 | 7.84 | 1.5 |
types_delete_insert | 7.56 | 7.56 | 1.0 |
writes_mean_multiplier | 1.2 |
TPC-C TPS Tests | MySQL | Dolt | Multiple |
---|---|---|---|
tpcc-scale-factor-1 | 101.85 | 2.36 | 3.7 |
tpcc_tps_multiplier | 3.7 |
Overall Mean Multiple | 2.37 |
---|
Published by github-actions[bot] 6 months ago
traditional
auto-increment lock mode hold the lock for the duration of the insert iter.innodb_autoinc_lock_mode=0
("traditional"). When this system variable is set, the engine will guarantee that every insert statement generates consecutive IDs for AUTO INCREMENT
columns.innodb_autoinc_lock_mode=1
("consecutive"), although the behavior is currently identical to "traditional". This is acceptable because both modes make the same guarantees (that each statement gets consecutive IDs), and the observed behavior is the same in almost all cases.traditional
and consecutive
behave the same.)auto_inc
with errorlast_days()
information_schema.tables
to_days()
and from_days()
TO_DAYS
and FROM_DAYS
MySQL functions.to_days
docs:from_days
docs:gtid_subtract()
functiongtid_subtract()
built-in function:SHOW BINARY LOG STATUS
statementSHOW BINARY LOG STATUS
statement.SHOW VARIABLES LIKE
should be case-insensitiveSHOW VARIABLES LIKE '...'
match MySQL's behavior by matching patterns case-insensitively.binlog_format
system variable that some replication clients need to query, and initializes the server_uuid
system variable.DECLARE
in BEGIN...END BLOCK
in TRIGGER
DECLARE
statements in TRIGGERS
.applyTriggers
was altered to initialize ProcedureReference
for TriggerBeginEndBlock
.TriggerBeingEndBlock
, BeginEndBlock
, ProcedureParam
) all had the same ProcedureReference
and to search in all the nodes.nil
guards are added to all receiver methods for ProcedureReference
to prevent panics.innodb_autoinc_lock_mode
is set to the "consecutive" or "traditional" values. More specifically, it calls a new function in the AutoIncrementSetter
interface which optionally acquires a lock and returns a callback for releasing the lock.AutoIncrementSetter
to handle the locking.gtid_subtract()
built-in function. Also exposes the ParseMysql56GTIDSet
function so that we can parse GTIDSet strings from GMS.FLUSH TABLES
statementFLUSH TABLES <tablename_list> [WITH READ LOCK]
statement.SHOW MASTER STATUS
as an alias for SHOW BINARY LOG STATUS
for compatibility with clients that use the older syntax (e.g. Debezium).INSERT INTO t VALUES (?, ?, ?) AS new ON DUPLICATE KEY v = new.v;
WITH CHECK OPTION
support for CREATE VIEW
ALTER TABLE ... RENAME CONSTRAINT [FOREIGN KEY / CHECK]...
for foreign key constraints.trim(trailing ',' from column)
syntax not supportedselect ... not in ...
returns wrong results for nullsdolt sql
and other commands should connect to running databasedolt sql
dolt conflicts resolve <table> --combine-ours
or --combine-theirs
:=
operator in SELECTBEFORE INSERT
trigger using DECLARE
variabletraditional
and consecutive
behavior for innodb_autoinc_lock_mode
Read Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 2.07 | 3.02 | 1.5 |
groupby_scan | 13.22 | 17.63 | 1.3 |
index_join | 1.37 | 5.18 | 3.8 |
index_join_scan | 1.3 | 2.26 | 1.7 |
index_scan | 34.33 | 55.82 | 1.6 |
oltp_point_select | 0.17 | 0.53 | 3.1 |
oltp_read_only | 3.36 | 8.58 | 2.6 |
select_random_points | 0.33 | 0.84 | 2.5 |
select_random_ranges | 0.39 | 1.01 | 2.6 |
table_scan | 34.33 | 55.82 | 1.6 |
types_table_scan | 73.13 | 161.51 | 2.2 |
reads_mean_multiplier | 2.2 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
oltp_delete_insert | 7.98 | 6.91 | 0.9 |
oltp_insert | 3.75 | 3.43 | 0.9 |
oltp_read_write | 8.43 | 16.41 | 1.9 |
oltp_update_index | 3.82 | 3.55 | 0.9 |
oltp_update_non_index | 3.82 | 3.49 | 0.9 |
oltp_write_only | 5.37 | 7.98 | 1.5 |
types_delete_insert | 7.7 | 7.7 | 1.0 |
writes_mean_multiplier | 1.1 |
TPC-C TPS Tests | MySQL | Dolt | Multiple |
---|---|---|---|
tpcc-scale-factor-1 | 101.79 | 0.16 | 4.5 |
tpcc_tps_multiplier | 4.5 |
Overall Mean Multiple | 2.60 |
---|
Published by github-actions[bot] 6 months ago
"<tbl_name>_ibfk_<num>"
, which matches MySQL behavior.traditional
auto-increment lock mode hold the lock for the duration of the insert iter.innodb_autoinc_lock_mode=0
("traditional"). When this system variable is set, the engine will guarantee that every insert statement generates consecutive IDs for AUTO INCREMENT
columns.innodb_autoinc_lock_mode=1
("consecutive"), although the behavior is currently identical to "traditional". This is acceptable because both modes make the same guarantees (that each statement gets consecutive IDs), and the observed behavior is the same in almost all cases.traditional
and consecutive
behave the same.)dolt sql-server
doesn't currently print a message at all when a bad table file is encountered.ALTER TABLE ... RENAME CONSTRAINT ...
for foreign key constraintsALTER TABLE ... RENAME CONSTRAINT ...
for foreign key constraints.innodb_autoinc_lock_mode
is set to the "consecutive" or "traditional" values. More specifically, it calls a new function in the AutoIncrementSetter
interface which optionally acquires a lock and returns a callback for releasing the lock.AutoIncrementSetter
to handle the locking.ALTER TABLE ... RENAME CONSTRAINT [FOREIGN KEY / CHECK]...
for foreign key constraints.Length()
function in the BinlogEvent interface so calling code can access the event size present in a binlog event's header. Needed for calculating binlog file position.FakeBinlogStream
→ BinlogStream
so calling code can use it when serializing binlog events.traditional
and consecutive
behavior for innodb_autoinc_lock_mode
AUTO_INCREMENT
clause missing in result from SHOW CREATE TABLE
Published by github-actions[bot] 7 months ago
dolt_verify_constraints()
support for all constraint typesdolt_verify_constraints()
stored procedure now supports verifying all constraint types: foreign keys, not null, unique, and check constraints. This new implementation reuses merge logic to calculate the constraint violations.dolt constraints verify
CLI command next needs to be migrated to use this stored procedure so that it can also verify all constraint violation types. Until then, customers can use dolt sql -q "CALL dolt_verify_constraints(...)"
if they want to verify all constraint types from the CLI.@@server_id
default value match MySQLbinlog_checksum
system variablebinlog_checksum
system variable match MySQL's default value (i.e. "CRC32").SHOW FIELDS/COLUMNS FROM <table>
query would return the string "NULL"
for Default
column rather than nil
.NULL
and not "NULL"
.Threads_connected
and Threads_running
status variablesThreads_connected
and Threads_running
status variables.com_delete
, com_insert
, and com_update
anyway.Innodb_buffer_pool_pages_total
to 1, to avoid an issue with Datadog's collectorInnodb_buffer_pool_pages_total
status variable is 0
; changing it to 1
avoids this and allows the agent to collect metrics from Dolt.@@session.collation_server
during create database ...
create database ...
actually reads the @@session.collation_server
variable.@@character_set_server
sets @@collation_server
and vice versa.Length()
function in the BinlogEvent interface so calling code can access the event size present in a binlog event's header. Needed for calculating binlog file position.FakeBinlogStream
→ BinlogStream
so calling code can use it when serializing binlog events.set global character_set_server
not working the same way in MySQL, may lead inconsistencydolt verify-contraints
does not check unique constraintsPublished by github-actions[bot] 7 months ago
system_variables
field in config.yaml for sql-server commandsystem_variables
field available in config.yaml
.ChunkStore
interface to let the nodeStore
access recently accessed chunks. Avoid adding a child ref to the pendingRef
list when already present in nbs.hasCache
. For TPC-C this appears to reduce the pending ref count by another ~80%.Com_delete
, Com_insert
, Com_update
status variables@@session.collation_server
during create database ...
create database ...
actually reads the @@session.collation_server
variable.@@character_set_server
sets @@collation_server
and vice versa.time.Time
typestime.Time
, some tests have to be skipped because we don't support Timespan correctly.Questions
status variableQuestions
.dolt sql
cli.LIKE
for show status/variablesperformance_schema
database, and these tables have a case-insensitive collation on the variable names.ShowStatus
and ShowVariables
nodes.show create database
to actually show charset/collationSHOW CREATE DATABASE ...
statement to actually show the charset/collation that the db is under instead of always default.charset
database option, instead of ignoring it like before.time.Time
and decimal
in bindvarstime.Time
and decimal
type variables bind vars, so they couldn't be used as arguments to prepare statements.vitess.io/vitess
– support for the COM_REGISTER_REPLICA
command.COM_BINLOG_DUMP_GTID
command.String
functions to help with debugging.set global character_set_server
not working the same way in MySQL, may lead inconsistencycalculateMergeConflicts
during dolt pull
if sql-server is runningRead Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 2.07 | 3.07 | 1.5 |
groupby_scan | 13.46 | 17.63 | 1.3 |
index_join | 1.34 | 5.18 | 3.9 |
index_join_scan | 1.27 | 2.26 | 1.8 |
index_scan | 34.33 | 54.83 | 1.6 |
oltp_point_select | 0.17 | 0.49 | 2.9 |
oltp_read_only | 3.36 | 8.13 | 2.4 |
select_random_points | 0.33 | 0.78 | 2.4 |
select_random_ranges | 0.39 | 0.94 | 2.4 |
table_scan | 34.95 | 54.83 | 1.6 |
types_table_scan | 74.46 | 158.63 | 2.1 |
reads_mean_multiplier | 2.2 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
oltp_delete_insert | 8.13 | 6.79 | 0.8 |
oltp_insert | 3.75 | 3.36 | 0.9 |
oltp_read_write | 8.43 | 15.55 | 1.8 |
oltp_update_index | 3.82 | 3.49 | 0.9 |
oltp_update_non_index | 3.82 | 3.36 | 0.9 |
oltp_write_only | 5.37 | 7.7 | 1.4 |
types_delete_insert | 7.7 | 7.43 | 1.0 |
writes_mean_multiplier | 1.1 |
TPC-C TPS Tests | MySQL | Dolt | Multiple |
---|---|---|---|
tpcc-scale-factor-1 | 102.03 | 18.72 | 6.5 |
tpcc_tps_multiplier | 6.5 |
Overall Mean Multiple | 3.27 |
---|
Published by github-actions[bot] 7 months ago
dolt pull
command.dolt/stats
, or an alternative implementation like a lsm that will have easier append only semantics. The implementation for the noms chunkstore isn't particularly efficient, we will not deduplicate common chunks between branches.statspro
has generic interfaces for how a Dolts-specific stats implementation works. statsnoms
is an implementation that uses a second database at .dolt/stats
to store statistic refs. The stats refs are the same, just now they are named by the branch they reference (ex: refs/statistics/main
). So storage is the concern of the concrete implementation. The common interface forces the implementation to handle branches. The branch switching in statsnoms
are just named refs..dolt/stats
or loads existing stats. Update is the same, ANALYZE or auto refresh.dtables
) and deadlock issues for creating a database (dolt provider takes a lock that prevents doing certain operation on the session in the stats provider) that motivated packaging decisions.BinlogPrimaryController
interface. This new interface pretty closely mirrors the existing callback interface for replica callbacks, the BinlogReplicaController
interface.Read Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 2.07 | 3.07 | 1.5 |
groupby_scan | 13.46 | 17.32 | 1.3 |
index_join | 1.37 | 5.18 | 3.8 |
index_join_scan | 1.27 | 2.26 | 1.8 |
index_scan | 34.33 | 63.32 | 1.8 |
oltp_point_select | 0.17 | 0.49 | 2.9 |
oltp_read_only | 3.36 | 8.28 | 2.5 |
select_random_points | 0.33 | 0.78 | 2.4 |
select_random_ranges | 0.39 | 0.95 | 2.4 |
table_scan | 34.33 | 63.32 | 1.8 |
types_table_scan | 74.46 | 176.73 | 2.4 |
reads_mean_multiplier | 2.2 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
oltp_delete_insert | 7.98 | 7.04 | 0.9 |
oltp_insert | 3.75 | 3.49 | 0.9 |
oltp_read_write | 8.43 | 16.12 | 1.9 |
oltp_update_index | 3.82 | 3.62 | 0.9 |
oltp_update_non_index | 3.82 | 3.55 | 0.9 |
oltp_write_only | 5.37 | 8.13 | 1.5 |
types_delete_insert | 7.7 | 7.84 | 1.0 |
writes_mean_multiplier | 1.1 |
TPC-C TPS Tests | MySQL | Dolt | Multiple |
---|---|---|---|
tpcc-scale-factor-1 | 101.15 | 16.93 | 5.7 |
tpcc_tps_multiplier | 5.7 |
Overall Mean Multiple | 3.00 |
---|
Published by github-actions[bot] 7 months ago
innodb_autoinc_lock_mode
testsresetScripts()
in doltHarness
to not drop and recreate all auto_increment tables.AUTO_INCREMENT
table option in show create table statements.BinlogPrimaryController
interface. This new interface pretty closely mirrors the existing callback interface for replica callbacks, the BinlogReplicaController
interface.json_search()
innodb_autoinc_lock_mode
innodb_autoinc_lock_mode = 2
, not 0
or 1
.encodings/json
package to marshall the value to a JSON string and then unmarshall it to a go map. This is not only slow, but it's incorrect for these additional types.dbName
in the example is actually being used, instead of having a hardcoded "mydb" in createTestDatabase
.CREATE TABLE ... LIKE ...
needs to preserve table opts, like commentsalter table add column ... auto_increment
does not work when there are already rowsON
and OFF
values to to true
and false
when setting a system variable, which made it impossible to set system variables to those enum values. For example:
SET @@GLOBAL.gtid_mode='ON';
Variable 'gtid_mode' can't be set to the value of 'true'
SystemVariable
and SystemVariableScope
interfaces.SystemVariable
struct is renamed to MysqlSystemVariable
.SystemVariableScope
byte is renamed to MysqlSVScopeType
.SOURCE_AUTO_POSITION
SOURCE_AUTO_POSITION
is set to 1
. This adds parser support so that it can be explicitly specified. Adding this so that when we're configuring a MySQL replica, we can use the same setup code without having to special case this parameter.vitess.io/vitess
– support for the COM_REGISTER_REPLICA
command.COM_BINLOG_DUMP_GTID
command.String
functions to help with debugging.COM_BINLOG_DUMP_GTID
command.dolt gc
to SQLRead Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 2.07 | 3.02 | 1.5 |
groupby_scan | 13.46 | 17.63 | 1.3 |
index_join | 1.39 | 5.09 | 3.7 |
index_join_scan | 1.32 | 2.22 | 1.7 |
index_scan | 35.59 | 63.32 | 1.8 |
oltp_point_select | 0.18 | 0.48 | 2.7 |
oltp_read_only | 3.43 | 8.13 | 2.4 |
select_random_points | 0.33 | 0.78 | 2.4 |
select_random_ranges | 0.39 | 0.94 | 2.4 |
table_scan | 35.59 | 63.32 | 1.8 |
types_table_scan | 74.46 | 176.73 | 2.4 |
reads_mean_multiplier | 2.2 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
oltp_delete_insert | 7.98 | 7.04 | 0.9 |
oltp_insert | 3.75 | 3.49 | 0.9 |
oltp_read_write | 8.43 | 16.12 | 1.9 |
oltp_update_index | 3.82 | 3.62 | 0.9 |
oltp_update_non_index | 3.82 | 3.55 | 0.9 |
oltp_write_only | 5.37 | 8.13 | 1.5 |
types_delete_insert | 7.7 | 7.84 | 1.0 |
writes_mean_multiplier | 1.1 |
TPC-C TPS Tests | MySQL | Dolt | Multiple |
---|---|---|---|
tpcc-scale-factor-1 | 101.78 | 22.7 | 5.0 |
tpcc_tps_multiplier | 5.0 |
Overall Mean Multiple | 2.77 |
---|
Published by github-actions[bot] 7 months ago
DEBU[0197] preparing query paramsCount=2 query="SELECT column_name, column_default, is_nullable = 'YES', data_type, character_maximum_length, column_type, column_key, extra, column_comment, numeric_precision, numeric_scale , datetime_precision FROM information_schema.columns WHERE table_schema = ? AND table_name = ? ORDER BY ORDINAL_POSITION" statementId=2
ERRO[0197] mysql_server caught panic:
interface conversion: sql.Table is *sqle.WritableDoltTable, not *sqle.AlterableDoltTable
/Users/maxhoffman/go/pkg/mod/github.com/dolthub/[email protected]/sql/planbuilder/parse.go:169 (0x101612ae7)
com/dolthub/go-mysql-server/sql/planbuilder.(*Builder).BindOnly.func1: panic(r)
/usr/local/go/src/runtime/panic.go:914 (0x1000d2187)
gopanic: done = runOpenDeferFrame(d)
/usr/local/go/src/runtime/iface.go:263 (0x1000a516f)
panicdottypeE: panic(&TypeAssertionError{iface, have, want, ""})
/usr/local/go/src/runtime/iface.go:273 (0x1000a5128)
panicdottypeI: panicdottypeE(t, want, iface)
/Users/maxhoffman/go/github.com/dolthub/dolt/go/libraries/doltcore/sqle/database.go:357 (0x101a1f1a7)
com/dolthub/dolt/go/libraries/doltcore/sqle.Database.getTableInsensitive: return NewHistoryTable(baseTable.(*AlterableDoltTable).DoltTable, db.ddb, head), true, nil
diff_table()
function I think. That requires heavier refactoring to support prepared statements.sql_mode = 'NO_AUTO_VALUE_ON_ZERO'
memory.NewSessionBuilder
method, now used in the example code.COM_BINLOG_DUMP_GTID
commandmysql.Handler
methods to support streaming binlog events from a server to a client.COM_BINLOG_DUMP_GTID
command.duplicate primary key given
errorRead Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 2.07 | 2.97 | 1.4 |
groupby_scan | 12.98 | 17.32 | 1.3 |
index_join | 1.32 | 5.09 | 3.9 |
index_join_scan | 1.25 | 2.18 | 1.7 |
index_scan | 33.72 | 63.32 | 1.9 |
oltp_point_select | 0.17 | 0.48 | 2.8 |
oltp_read_only | 3.36 | 7.98 | 2.4 |
select_random_points | 0.32 | 0.77 | 2.4 |
select_random_ranges | 0.38 | 0.94 | 2.5 |
table_scan | 34.33 | 63.32 | 1.8 |
types_table_scan | 74.46 | 176.73 | 2.4 |
reads_mean_multiplier | 2.2 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
oltp_delete_insert | 7.98 | 6.91 | 0.9 |
oltp_insert | 3.75 | 3.43 | 0.9 |
oltp_read_write | 8.28 | 15.83 | 1.9 |
oltp_update_index | 3.82 | 3.55 | 0.9 |
oltp_update_non_index | 3.82 | 3.49 | 0.9 |
oltp_write_only | 5.37 | 7.98 | 1.5 |
types_delete_insert | 7.7 | 7.7 | 1.0 |
writes_mean_multiplier | 1.1 |
TPC-C TPS Tests | MySQL | Dolt | Multiple |
---|---|---|---|
tpcc-scale-factor-1 | 101.1 | 22.45 | 4.6 |
tpcc_tps_multiplier | 4.6 |
Overall Mean Multiple | 2.63 |
---|
Published by github-actions[bot] 7 months ago
IF NOT EXISTS
and table existsCREATE TABLE IF NOT EXISTS ...
queries.IF NOT EXISTS
is specified and the table exists.oos: linux
goarch: amd64
pkg: github.com/dolthub/go-mysql-server/sql
cpu: AMD Ryzen 9 7900 12-Core Processor
│ b1 │ b2 │
│ sec/op │ sec/op vs base │
HashOf-24 79.65n ± 4% 70.86n ± 7% -11.03% (p=0.002 n=6)
ParallelHashOf-24 10.47n ± 4% 11.85n ± 19% ~ (p=0.368 n=6)
geomean 28.88n 28.98n +0.32%
│ b1 │ b2 │
│ B/op │ B/op vs base │
HashOf-24 4.000 ± 0% 0.000 ± 0% -100.00% (p=0.002 n=6)
ParallelHashOf-24 4.000 ± 0% 0.000 ± 0% -100.00% (p=0.002 n=6)
geomean 4.000 ? ¹ ²
¹ summaries must be >0 to compute geomean
² ratios must be >0 to compute geomean
│ b1 │ b2 │
│ allocs/op │ allocs/op vs base │
HashOf-24 2.000 ± 0% 0.000 ± 0% -100.00% (p=0.002 n=6)
ParallelHashOf-24 2.000 ± 0% 0.000 ± 0% -100.00% (p=0.002 n=6)
geomean 2.000 ? ¹ ²
¹ summaries must be >0 to compute geomean
² ratios must be >0 to compute geomean
type.Promote()
for all types.\0
). They are skipped tests for now.json_pretty
binary
as a valid charset option.CHARSET
to expand to synonym CHARACTER SET
for parsing in GMS.Read Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 2.11 | 3.02 | 1.4 |
groupby_scan | 13.46 | 18.28 | 1.4 |
index_join | 1.34 | 5.18 | 3.9 |
index_join_scan | 1.25 | 2.14 | 1.7 |
index_scan | 33.72 | 63.32 | 1.9 |
oltp_point_select | 0.17 | 0.47 | 2.8 |
oltp_read_only | 3.36 | 7.98 | 2.4 |
select_random_points | 0.32 | 0.77 | 2.4 |
select_random_ranges | 0.39 | 0.92 | 2.4 |
table_scan | 33.72 | 63.32 | 1.9 |
types_table_scan | 74.46 | 173.58 | 2.3 |
reads_mean_multiplier | 2.2 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
oltp_delete_insert | 7.98 | 6.91 | 0.9 |
oltp_insert | 3.75 | 3.43 | 0.9 |
oltp_read_write | 8.43 | 15.83 | 1.9 |
oltp_update_index | 3.82 | 3.55 | 0.9 |
oltp_update_non_index | 3.82 | 3.49 | 0.9 |
oltp_write_only | 5.37 | 7.98 | 1.5 |
types_delete_insert | 7.7 | 7.7 | 1.0 |
writes_mean_multiplier | 1.1 |
TPC-C TPS Tests | MySQL | Dolt | Multiple |
---|---|---|---|
tpcc-scale-factor-1 | 100.71 | 23.38 | 5.4 |
tpcc_tps_multiplier | 5.4 |
Overall Mean Multiple | 2.90 |
---|
Published by github-actions[bot] 7 months ago
[]byte
[]byte
s to string before comparing them@@dolt_schema_override_commit
session variable and have all table's data mapped to the schema from that commit, branch, or tag, when queried.
main
branch that has added the new column birthday
to a table, and an olderBranch
branch with a table that has not been updated with that schema change. Customers cannot use the same queries from the main
branch to query the data on the olderBranch
because of the schema difference. Setting a schema override allows the customer to map the table schemas on the olderBranch
branch to the same schema as on the main
branch. This can be useful when you want to run queries on older data, but don't want to rewrite your queries for older schemas.
CALL dolt_checkout(‘olderBranch’);
SELECT name, birthday from people;
column "birthday" could not be found in any table in scope
SET @@dolt_schema_override_commit = ‘main’;
SELECT name, birthday from people;
+-------+----------+
| name | birthday |
+-------+----------+
| Sammy | NULL |
+-------+----------+
NULL
is a planned enhancement.json_pretty
straight join
to inner join
STRAIGHT_JOIN
operator to INNER_JOIN
operator.binary
cast to maintain lengthCAST
node during comparison.BINARY
column types.charset
table option testsCHARACTER SET
and not its synonym CHARSET
.CHARSET
.JSON_QUOTE()
SHOW ENGINES;
vs select * from information_schema.engines;
SHOW ENGINES;
is actually a SELECT ...
under the hood.last_insert_uuid()
functionauto_increment
IDs, but MySQL doesn't provide an easy way to get the last generated UUID that was used in an insert. This change introduces a new function, last_insert_uuid()
that operates similarly to last_insert_id()
. For a column identified as a UUID column, callers can use last_insert_uuid()
to retrieve the last generated UUID value that was inserted into that column. In order to be considered a UUID column, a column must be part of the primary key and it must meet one of the following type signatures:
VARCHAR(36)
or CHAR(36)
with a default value expression of UUID()
VARBINARY(16)
or BINARY(16)
with a default value expression of UUID_to_bin(UUID())
(optionally, the swap_flag
for UUID_to_bin
may also be specified)create table t (pk binary(16) primary key default (UUID_to_bin(UUID())), c1 varchar(100));
insert into t (c1) values ("one"), ("two");
select last_insert_uuid();
select c1 from t where pk = uuid_to_bin(last_insert_id());
Related to https://github.com/dolthub/dolt/issues/7547
binary
as a valid charset option.CHARSET
to expand to synonym CHARACTER SET
for parsing in GMS.SHOW ENGINES
to return first letter uppercase column names like MySQLdefault charset=binary
is messing up in a create table statementRead Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 2.07 | 3.02 | 1.5 |
groupby_scan | 13.46 | 18.61 | 1.4 |
index_join | 1.32 | 5.18 | 3.9 |
index_join_scan | 1.25 | 2.18 | 1.7 |
index_scan | 34.33 | 64.47 | 1.9 |
oltp_point_select | 0.17 | 0.47 | 2.8 |
oltp_read_only | 3.36 | 7.98 | 2.4 |
select_random_points | 0.32 | 0.77 | 2.4 |
select_random_ranges | 0.38 | 0.92 | 2.4 |
table_scan | 34.33 | 64.47 | 1.9 |
types_table_scan | 74.46 | 173.58 | 2.3 |
reads_mean_multiplier | 2.2 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
oltp_delete_insert | 7.98 | 6.91 | 0.9 |
oltp_insert | 3.75 | 3.43 | 0.9 |
oltp_read_write | 8.28 | 15.83 | 1.9 |
oltp_update_index | 3.82 | 3.55 | 0.9 |
oltp_update_non_index | 3.82 | 3.49 | 0.9 |
oltp_write_only | 5.37 | 7.98 | 1.5 |
types_delete_insert | 7.7 | 7.7 | 1.0 |
writes_mean_multiplier | 1.1 |
TPC-C TPS Tests | MySQL | Dolt | Multiple |
---|---|---|---|
tpcc-scale-factor-1 | 102.91 | 23.56 | 4.5 |
tpcc_tps_multiplier | 4.5 |
Overall Mean Multiple | 2.60 |
---|
Published by github-actions[bot] 8 months ago
JSON_MERGE()
and JSON_MERGE_PATCH()
JSON_OVERLAPS()
go-mysql-server
requires a different way of instantiating the database server. Notably, a function that provides sessions must now be provided._example/main.go
.random_bytes()
last_insert_uuid()
functionauto_increment
IDs, but MySQL doesn't provide an easy way to get the last generated UUID that was used in an insert. This change introduces a new function, last_insert_uuid()
that operates similarly to last_insert_id()
. For a column identified as a UUID column, callers can use last_insert_uuid()
to retrieve the last generated UUID value that was inserted into that column. In order to be considered a UUID column, a column must be part of the primary key and it must meet one of the following type signatures:
VARCHAR(36)
or CHAR(36)
with a default value expression of UUID()
VARBINARY(16)
or BINARY(16)
with a default value expression of UUID_to_bin(UUID())
(optionally, the swap_flag
for UUID_to_bin
may also be specified)create table t (pk binary(16) primary key default (UUID_to_bin(UUID())), c1 varchar(100));
insert into t (c1) values ("one"), ("two");
select last_insert_uuid();
select c1 from t where pk = uuid_to_bin(last_insert_id());
Related to https://github.com/dolthub/dolt/issues/7547
ADDDATE()
now()
stringimport-mysqldump.bats
was failing due to a recent string replace case added by https://github.com/dolthub/go-mysql-server/pull/2357.NOW()
would be used with other functions inside a DEFAULT
column expression, and was replacing the "NOW("
with "CURRENT_TIMESTAMP("
. This was causing problems as we reparse ColumnDefaultExprs, resulting in unparenthesized default expressions, which threw an error.ON UPDATE CURRENT_TIMESTAMP
precisionNOW()
(and synonyms) for column DEFAULT
and ON UPDATE
expressions. It turns out MySQL only requires that the column type precision match the expression.DEFAULT
expression, so now we do.JSON_TYPE()
INNER JOIN
Functional Key Parts
index ?Published by github-actions[bot] 8 months ago
This release contains backwards incompatible changes:
Dolt CREATE TABLE
and ALTER TABLE
statements enforce maximum row lengths for schemas. A preexisting schema with columns that sum to a row length greater than the maximum allowable will continue to work in-place, but will need to be migrated to a valid schema before Dolt will accept other schema alterations. A multi-alter statement can change several VARCHAR columns to either (1) shorter VARCHARs or (2) TEXT columns with a serializable maximum length.
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.
json_depth()
1050: ERTableExists
) have zero usages in GMS or Dolt. We're probably returning 1105: ERUnknownError
for these.crosshashjoin
on subqueryaliasesnet.Listener
backed by a real port or socket. In some environments (like testing) we want to avoid the host's networking stack entirely. This changeset adds support for the caller to provide the net.Listener
, which gives them full control over where the sever serves.net.Listener
implementation (which is what happens in the test that I added).FROM s.account
, in which account
is non-reserved keywordSELECT ... INTO OUTFILE ...
optionsSELECT ... INTO OUTFILE
, but were lacking parser support for the variety of OUTFILE
options.Read Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 2.11 | 3.07 | 1.5 |
groupby_scan | 13.22 | 18.61 | 1.4 |
index_join | 1.32 | 5.28 | 4.0 |
index_join_scan | 1.25 | 2.18 | 1.7 |
index_scan | 33.72 | 64.47 | 1.9 |
oltp_point_select | 0.17 | 0.47 | 2.8 |
oltp_read_only | 3.36 | 7.98 | 2.4 |
select_random_points | 0.32 | 0.77 | 2.4 |
select_random_ranges | 0.39 | 0.92 | 2.4 |
table_scan | 33.72 | 64.47 | 1.9 |
types_table_scan | 74.46 | 173.58 | 2.3 |
reads_mean_multiplier | 2.2 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
oltp_delete_insert | 7.98 | 6.91 | 0.9 |
oltp_insert | 3.75 | 3.43 | 0.9 |
oltp_read_write | 8.43 | 15.83 | 1.9 |
oltp_update_index | 3.82 | 3.55 | 0.9 |
oltp_update_non_index | 3.82 | 3.49 | 0.9 |
oltp_write_only | 5.37 | 7.98 | 1.5 |
types_delete_insert | 7.7 | 7.7 | 1.0 |
writes_mean_multiplier | 1.1 |
TPC-C TPS Tests | MySQL | Dolt | Multiple |
---|---|---|---|
tpcc-scale-factor-1 | 101.41 | 22.63 | 5.5 |
tpcc_tps_multiplier | 5.5 |
Overall Mean Multiple | 2.93 |
---|
Published by github-actions[bot] 8 months ago
dolt table import
was previously generating invalid SQL statements for importing these tables.nil
guards in a few conversion methods.NOT
expression in conjunction with WHERE EXISTS(<subquery>)
unnest_exists_subqueries
was accidentally dropping NOT
expressions when hoisting subqueries from WHERE EXISTS...
clauses.conjCollector
was checking for the wrong equivalence column. That spiraled into:
ANALYZE ... UPDATE HISTOGRAM
statementsPublished by github-actions[bot] 8 months ago
NOT
expression in conjunction with WHERE EXISTS(<subquery>)
unnest_exists_subqueries
was accidentally dropping NOT
expressions when hoisting subqueries from WHERE EXISTS...
clauses.DISTINCT
over DECIMALS
hashstructure
package, which does not hash decimal.Decimal
types correctly.xxhash
package, which is what we use everywhere else.expression.Div
Micro BenchmarksType()
method for Arthmetic
and Div
is simpler, and better tested.1 / 3 = 0.333333333
; scale 0 div scale 0 should return scale 9)NOT FOUND
, which explicitly checked for an error when fetching from a cursor io.EOFs. The implementation for that handler would walk the entire BEGIN/END scope stack inside the Fetch call looking for a handler, execute the handler body, and then embed the scope height into a special return error. The error walked back up the callstack looking for the BEGIN/END block embedded in the error message.FetchEOF
, because each scope will explicitly compare its handlers to errors raised during execution within its BEGIN/END bounds. (FetchEOF
is important because we differentiate between 3 different types of io.EOF
in procedure loops).SQLEXCEPTION
signal handling, which will trigger for any error type (other than io.EOF) that bubbles up during a BeginEndIter
's execution.ERROR 1329 (02000): No data - zero rows fetched, selected, or processed
. https://github.com/dolthub/dolt/issues/new
Published by github-actions[bot] 8 months ago
IndexedDoltTable
didn't fully implement DoltTable
's interfaceIndexedDoltTable
wasn't fully compatible with DoltTable
's interface, which was causing some queries to execute incorrectly due to using the wrong field indexes. This only happened with queries where the table was used in a read-only context (such as an AS OF
query), since in a read-write context WritableIndexedDoltTable
is used, which is composed of a WritableDoltTable
, so fully inherits the interface. IndexedDoltTable
is now consistent with that, and is now composed of a DoltTable
instance. This enables the GMS code in assignExecIndexes
to use the correct, limited schema of the secondary index and to apply the correct field indexes.--depth
flag to the dolt_clone stored procedure and the dolt cliPublished by github-actions[bot] 8 months ago
Auto-refresh is now available (off by default). A controller API for statistics stats, stops, and monitors stats threads. More details here.
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.
SELECT ... INTO OUTFILE ...
testsSELECT ... INTO OUTFILE ...
feature we're adding.ExtendedType
interface within GMS. This interface is primarily used by DoltgreSQL to implement PostgreSQL types.NOT FOUND
, which explicitly checked for an error when fetching from a cursor io.EOFs. The implementation for that handler would walk the entire BEGIN/END scope stack inside the Fetch call looking for a handler, execute the handler body, and then embed the scope height into a special return error. The error walked back up the callstack looking for the BEGIN/END block embedded in the error message.FetchEOF
, because each scope will explicitly compare its handlers to errors raised during execution within its BEGIN/END bounds. (FetchEOF
is important because we differentiate between 3 different types of io.EOF
in procedure loops).SQLEXCEPTION
signal handling, which will trigger for any error type (other than io.EOF) that bubbles up during a BeginEndIter
's execution.ERROR 1329 (02000): No data - zero rows fetched, selected, or processed
. https://github.com/dolthub/dolt/issues/new
InjectedExpr
handling to support additional expressions, such as those requiring name resolution.SELECT ... INTO OUTFILE/DUMPFILE ...
SELECT ... INTO OUTFILE/DUMPFILE ...
feature.LOAD DATA
. There is no LOCAL
option, so files created using this feature are on the server.auto_increment
columns to be dropped when an appropriate index existsauto_increment
column to be dropped as long as there is a secondary index that includes the auto_increment
column as the first column in the index. (MySQL Reference)PRIMARY
), in order to match MySQL's behavior, e.g.
DROP INDEX `PRIMARY` ON t;
Related to https://github.com/dolthub/dolt/issues/7456
ExtendedType
interface, which is used within DoltgreSQL to implement PostgreSQL types, as well as in Dolt to properly handle the new type and value serialization.CREATE INDEX foo USING driver table (column)
creates a table scan if driver is not "", "btree" or "hash".- outScope.node = plan.NewCreateIndex(
+ createIndex := plan.NewCreateIndex(
ddl.IndexSpec.ToName.String(),
table,
cols,
ddl.IndexSpec.Using.Lowered(),
config,
)
+ createIndex.Catalog = b.cat
return
InjectedExpr
.SELECT ... INTO OUTFILE ...
optionsSELECT ... INTO OUTFILE
, but were lacking parser support for the variety of OUTFILE
options.Handler.ComResetConnection
to return an errorRead Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 2.11 | 3.02 | 1.4 |
groupby_scan | 13.7 | 18.28 | 1.3 |
index_join | 1.34 | 5.28 | 3.9 |
index_join_scan | 1.25 | 2.22 | 1.8 |
index_scan | 33.72 | 62.19 | 1.8 |
oltp_point_select | 0.17 | 0.47 | 2.8 |
oltp_read_only | 3.36 | 8.13 | 2.4 |
select_random_points | 0.32 | 0.77 | 2.4 |
select_random_ranges | 0.39 | 0.9 | 2.3 |
table_scan | 34.33 | 62.19 | 1.8 |
types_table_scan | 74.46 | 170.48 | 2.3 |
reads_mean_multiplier | 2.2 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
oltp_delete_insert | 5.88 | 5.99 | 1.0 |
oltp_insert | 2.81 | 2.97 | 1.1 |
oltp_read_write | 7.43 | 15.55 | 2.1 |
oltp_update_index | 2.86 | 3.13 | 1.1 |
oltp_update_non_index | 2.97 | 3.07 | 1.0 |
oltp_write_only | 4.03 | 7.43 | 1.8 |
types_delete_insert | 5.47 | 6.67 | 1.2 |
writes_mean_multiplier | 1.3 |
Overall Mean Multiple | 1.9 |
---|
Published by github-actions[bot] 9 months ago
This release contains backwards incompatible changes:
COM_RESET_CONNECTION
command from the MySQL protocol. This command instructs the sql-server to clear all session state (e.g. prepared statements, user variables, session variables) and is most often used for connection pooling, to allow a connection's session to be cleared before it is given to another thread to use. This change makes Dolt's sql-server match MySQL's behavior in connection pooled environments, but we are calling this out as a potential backwards incompatible change in case any customers are relying on the previous behavior, such as relying on prepared statements to persist in the session after it is returned to the connection pool.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.
auto_increment
primary key columnauto_increment
primary key columns to be dropped, so long as there exists a secondary index that covers the auto_increment
column.auto_increment
columns to be dropped when an appropriate index existsauto_increment
column to be dropped as long as there is a secondary index that includes the auto_increment
column as the first column in the index. (MySQL Reference)PRIMARY
), in order to match MySQL's behavior, e.g.
DROP INDEX `PRIMARY` ON t;
Related to https://github.com/dolthub/dolt/issues/7456
group by ... having ...
aliasing once moreGROUP BY
and HAVING
aliasing rules to much more closely match MySQL's weirdness.COM_RESET_CONNECTION
COM_RESET_CONNECTION
command to allow a sql-server to clear session state on a connection so that it can be safely reused, for example, in connection pools.COM_RESET_CONNECTION
command is executed on a connection.divScale
tracks the number of division operators on the leftSubtree. It can be used to determine if the current expression is the outermost Div expression, and doubles as a way to determine how many decimal places of precision we need to add.opScale
tracks the total number of Arithmetic operators in the expression tree in total. It is used to identify the outermost Arithmetic expression.divScale
and opScale
, leading to improper rounding; this PR fixes that.Div
.float64
being incorrectly converted to decimal
.create table
create table
and show create table
.ALTER TABLE
does not support altering a table's comment.stats_auto_recalc
table optionCREATE TABLE
dolt push
may be overly aggressive in its fast-forward check.Read Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 2.07 | 2.86 | 1.4 |
groupby_scan | 13.46 | 17.32 | 1.3 |
index_join | 1.32 | 5.09 | 3.9 |
index_join_scan | 1.25 | 2.18 | 1.7 |
index_scan | 34.33 | 63.32 | 1.8 |
oltp_point_select | 0.17 | 0.46 | 2.7 |
oltp_read_only | 3.3 | 7.98 | 2.4 |
select_random_points | 0.32 | 0.75 | 2.3 |
select_random_ranges | 0.38 | 0.9 | 2.4 |
table_scan | 34.33 | 63.32 | 1.8 |
types_table_scan | 74.46 | 173.58 | 2.3 |
reads_mean_multiplier | 2.2 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
oltp_delete_insert | 5.99 | 5.99 | 1.0 |
oltp_insert | 2.81 | 2.97 | 1.1 |
oltp_read_write | 7.3 | 15.27 | 2.1 |
oltp_update_index | 2.76 | 3.13 | 1.1 |
oltp_update_non_index | 2.81 | 3.02 | 1.1 |
oltp_write_only | 3.96 | 7.43 | 1.9 |
types_delete_insert | 5.88 | 6.79 | 1.2 |
writes_mean_multiplier | 1.4 |
Overall Mean Multiple | 1.9 |
---|
Published by github-actions[bot] 9 months ago
7450: push should ignore tracking branch
7443: add disable version check warning
Adds a message to provide instructions on how to disable the version out-of-date check. This message will print once per version.
Related: https://github.com/dolthub/dolt/issues/7435
7441: Persist table comment from create table
We already parse table comments, but they were not persisted anywhere. This change adds support for persisting table comments so that they can be round-tripped between create table
and show create table
.
In addition to the follow ups in the GMS layer (mentioned in https://github.com/dolthub/go-mysql-server/pull/2307), there is one follow up in the dolt layer to update Dolt's merge logic to merge table comment changes.
Depends on https://github.com/dolthub/go-mysql-server/pull/2307
Related to https://github.com/dolthub/dolt/issues/7416
create view
statementsjson_keys()
functionJSON_KEYS()
.Published by github-actions[bot] 9 months ago
fmt.Sprintf('%.3f')
string, even for decimal types. Meanwhile, the doltharness was using decimal.Round()
. There's evidently a difference in the way these two rounding operations work, so we had some failures due to rounding errors.create view
statementsplan.TableAlias
indexing. Some table alias children have their own expression ids, but sql.TableFunction
implementations don't necessarily extend the plan.TableIdNode
interface and rely on the analyzer to populate column ids. There are a couple ways to simplify this in the future, like adding an intermediate prunable sql.Projector node for table functions, or having pruning clean up after itself by updating node and parent table alias columns.float64
is larger type than decimal for coalesce()
function@@server_uuid
system variable@@server_uuid
system variable.type()
divScale
variable in.opScale
to track if an operation is the outermost operator, for other rounding/precision reasons.DROP
s on a table if that table was referenced in a FOREIGN KEY
did not account for when the table was self referencing. This PR fixes that and closes the gap in our testing for this area.assignExecIndexes
. This should be more reliable for most queries and make it easier to make alias resolving refactors.sql.IdExpression
and absorb unique expression ids. Trigger variables and stored procedure params still lack ids and fallback to string matching behavior.SELECT
"testing" AS s,
(SELECT max(i)
FROM (SELECT * FROM mytable) mytable
RIGHT JOIN
((SELECT i2, s2 FROM othertable ORDER BY i2 ASC)
UNION ALL
SELECT CAST(4 AS SIGNED) AS i2, "not found" AS s2 FROM DUAL) othertable
ON i2 = i) AS rj
FROM DUAL`
This query splits the target projection into two levels to account for the dual table column and alias dependency. One thing that does fix this is inlining the alias reference to avoid computing the rj
subquery a second time in the second alias. But that alias replacement breaks some of the TestOrderByGroupBy
tests that also have alias issues.stats_auto_recalc
table optionUNIQUE
and PRIMARY KEY
to be specified on the same column@@server_uuid
generated by mysqlsh
. Dolt does not support that system variable.@@dolt_transaction_commit = 1
Read Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 2.11 | 2.91 | 1.4 |
groupby_scan | 13.7 | 17.63 | 1.3 |
index_join | 1.32 | 5.09 | 3.9 |
index_join_scan | 1.25 | 2.18 | 1.7 |
index_scan | 34.33 | 63.32 | 1.8 |
oltp_point_select | 0.17 | 0.46 | 2.7 |
oltp_read_only | 3.36 | 8.13 | 2.4 |
select_random_points | 0.32 | 0.75 | 2.3 |
select_random_ranges | 0.39 | 0.92 | 2.4 |
table_scan | 34.33 | 63.32 | 1.8 |
types_table_scan | 74.46 | 173.58 | 2.3 |
reads_mean_multiplier | 2.2 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
oltp_delete_insert | 6.09 | 6.32 | 1.0 |
oltp_insert | 2.86 | 3.07 | 1.1 |
oltp_read_write | 7.43 | 15.55 | 2.1 |
oltp_update_index | 2.97 | 3.25 | 1.1 |
oltp_update_non_index | 2.91 | 3.13 | 1.1 |
oltp_write_only | 4.18 | 7.56 | 1.8 |
types_delete_insert | 5.88 | 6.91 | 1.2 |
writes_mean_multiplier | 1.3 |
Overall Mean Multiple | 1.9 |
---|