The Drizzle database engine, an in-depth refactor of the MySQL engine, is the next big thing in the relational database engine, especially on the cloud.

Let's make sure it is on our radar.

CommentFileSizeAuthor
#6 809810.patch7.92 KBDamien Tournoud
#1 809810.patch7.04 KBDamien Tournoud
Support from Acquia helps fund testing for Drupal Acquia logo

Comments

Damien Tournoud’s picture

FileSize
7.04 KB

This allows Drupal 7 to install on recent versions of Drizzle (those non affected by bug #310344), and pass 99% of the database tests.

Two obvious things we need to fix:

Damien Tournoud’s picture

Title: Support Drizzle database engine » Support the Drizzle database engine
stewartsmith’s picture

We don't do SHORT/MEDIUM/LONG TEXT we just have TEXT. Same for BLOB, so the type map in the patch will need that fixed (I'm 99% sure we don't have the aliases in the parser...)

We are also utf8 and the same index size limits apply for innodb as on mysql (I've seen Drupal bugs fixed for this in the past year).

Awesome to see progress on this too!

--
Stewart (Drizzle hacker)

stewartsmith’s picture

The index length was fixed in the latest tarball (see https://bugs.launchpad.net/drizzle/+bug/578842).

In Drizzle we can have up to 4byte utf8, I've fixed things in Drizzle so that as of now you can have pretty much the same limits as MySQL's 3byte UTF8. You may still run into the 3500byte limit in indexes for really big indexes, but if you're hitting that, you're probably doing something wrong :)

Damien Tournoud’s picture

Stewart: nice of you to show around like this :)

The TEXT and BLOB types obviously wrong. I guess we simply don't use them, because I haven't bumped into that during cursory testing.

I saw the fix to the index length limit, that was a pretty much needed one.

What about the concatenation operator? Are there plans to restore the double pipe?

Damien Tournoud’s picture

FileSize
7.92 KB

New patch. Here are the tests that currently fail:

Extra Types tests 6 passes, 1 fail, and 0 exceptions
Schema API 5 passes, 4 fails, and 1 exception
Field SQL storage tests 82 passes, 0 fails, and 1 exception
Field CRUD tests 48 passes, 0 fails, and 1 exception
File space used tests 0 passes, 0 fails, and 3 exceptions
File validator tests 25 passes, 0 fails, and 1 exception
Enable/disable modules 53 passes, 2 fails, and 0 exceptions
Module dependencies 60 passes, 2 fails, and 0 exceptions
Update functionality 66 passes, 3 fails, and 0 exceptions
Basic upgrade path 4 passes, 0 fails, and 2 exceptions

(the file fails are probably due to my crude fix in system_cron())

stewartsmith’s picture

There's the CONCAT() function. IIRC the double pipe causes a bunch of shift/reduce conflicts in the parser (which isn't good for general performance)... may want to ask on the mailing list though, somebody else may remember better than me.

andypost’s picture

Concat() considered to be implemented as function, so for now it's not possible. see #809698: Refrain from using the || operator for concatenation

Damien Tournoud’s picture

@andypost: not sure what you mean. CONCAT() is built-in in both MySQL and Drizzle. All other core engines have implemented it as UDF (both PostgreSQL and SQLite).

Damien Tournoud’s picture

As of today, here is what fails:

Extra Types tests 6 passes, 1 fail, and 0 exceptions
Schema API 5 passes, 4 fails, and 1 exception
Field CRUD tests 48 passes, 0 fails, and 1 exception
Field SQL storage tests 82 passes, 0 fails, and 1 exception
Enable/disable modules 53 passes, 2 fails, and 0 exceptions
Module dependencies 60 passes, 2 fails, and 0 exceptions
Update functionality 66 passes, 3 fails, and 0 exceptions
Basic upgrade path 4 passes, 0 fails, and 2 exceptions
Damien Tournoud’s picture

Ok, so:

Extra Types tests 6 passes, 1 fail, and 0 exceptions

That's because Drizzle doesn't support the TIME type anymore. This test just cannot pass (I told you this test wasn't a good idea!).

Schema API 5 passes, 4 fails, and 1 exception

That's because:

  • Drizzle doesn't support unsigned types at all. Not sure how to possibly fix this.
  • Drizzle doesn't apparently have a information_schema.tables.table_comment column anymore. Not sure if that's intentional or not, because the information_schema is completely broken on my current version of Drizzle.
Field CRUD tests 48 passes, 0 fails, and 1 exception
Field SQL storage tests 82 passes, 0 fails, and 1 exception

That's because the test is dumb, and assumes that the database engine will silently truncate numeric fields. Drizzle doesn't silently truncate *anything*. I guess we can fix that in #851602: FieldCrudTestCase::testUpdateField() does not test changing the schema.

Enable/disable modules 53 passes, 2 fails, and 0 exceptions
Module dependencies 60 passes, 2 fails, and 0 exceptions

That's because the information_schema.tables doesn't work at all on my version of Drizzle.

Update functionality 66 passes, 3 fails, and 0 exceptions
Basic upgrade path 4 passes, 0 fails, and 2 exceptions

Not sure why those fail, I guess that's related to the information_schema.tables failure.

brianaker’s picture

Have you tried since we restored the Information Schema? It was removed while we reworked it to follow the ANSI SQL standard.

Thanks!

stewartsmith’s picture

It's not in INFORMATION_SCHEMA in Drizzle as TABLE_COMMENT is not in the standard. It was a MySQL extension (see http://dev.mysql.com/doc/refman/5.0/en/tables-table.html). It is accessible through the DATA_DICTIONARY.TABLES table though:

drizzle> create table t1 (a int) comment="hello world";
Query OK, 0 rows affected (0 sec)

drizzle> select * from data_dictionary.tables where table_name="t1";
+--------------+------------+------------+--------+------------+-----------------+--------------------------+--------------------------+---------------+
| TABLE_SCHEMA | TABLE_NAME | TABLE_TYPE | ENGINE | ROW_FORMAT | TABLE_COLLATION | TABLE_CREATION_TIME | TABLE_UPDATE_TIME | TABLE_COMMENT |
+--------------+------------+------------+--------+------------+-----------------+--------------------------+--------------------------+---------------+
| test | t1 | STANDARD | InnoDB | DEFAULT | utf8_general_ci | Tue Sep 28 08:14:42 2010 | Tue Sep 28 08:14:42 2010 | hello world |
+--------------+------------+------------+--------+------------+-----------------+--------------------------+--------------------------+---------------+
1 row in set (0.02 sec)

Why is getting the table comment important? Perhaps there is a better way?

pwolanin’s picture

Anyone tried this with the GA release? Should this be made a contrib project for 7, or something we can backport to core?

renat’s picture

Subscribe.

Status: Needs review » Needs work

The last submitted patch, 809810.patch, failed testing.

RobLoach’s picture

I'm with pwolanin here. This might live better as a contrib project for both 7 and 8.

basic’s picture

I believe it is important for this support to be part of 8.x core. I can understand a contrib for 7.x, but not for 8.x.

judahtanthony’s picture

Version: 8.x-dev » 7.10

I tried the drizzle patch installing Drupal 7. It is failed to insert records because batch (and other tables) use the field name timestamp (which I think is a reserved word in Drizzle). I overwrite the __toString magic method in the drizzle query class to wrap the field name with "`", which got all the data in there, but then the first select statement the requested the 'timestamp' field fails.

Seeing as select queries are passed in as a strings (instead of generated by a class) I'm not sure how to quote the field names. I played around with regex, but it seems fragile, inefficient and hacky.

I can't convince all "table owners" to rename your timestamp fields something other than "timestamp", can I? ;)

judahtanthony’s picture

Confirmed. Drizzle is a fork of MySQL 6.
http://dev.mysql.com/doc/mysqld-version-reference/en/mysqld-version-refe...
. . . indicates that "timestamp" is a reserved word as of MySQL 5.6. We should REALLY consider changing the db table field names if it will conflict with the latest MySQL.

marcingy’s picture

Version: 7.10 » 8.x-dev

This should still be against d8 as that is where things are done first

pwolanin’s picture

timestamp has long been on this list:

http://drupal.org/node/141051

So really that should not have been used as a column name for a long time.

A good 1st step might also be to add this list to coder?

Version: 8.0.x-dev » 8.1.x-dev

Drupal 8.0.6 was released on April 6 and is the final bugfix release for the Drupal 8.0.x series. Drupal 8.0.x will not receive any further development aside from security fixes. Drupal 8.1.0-rc1 is now available and sites should prepare to update to 8.1.0.

Bug reports should be targeted against the 8.1.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.2.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.1.x-dev » 8.2.x-dev

Drupal 8.1.9 was released on September 7 and is the final bugfix release for the Drupal 8.1.x series. Drupal 8.1.x will not receive any further development aside from security fixes. Drupal 8.2.0-rc1 is now available and sites should prepare to upgrade to 8.2.0.

Bug reports should be targeted against the 8.2.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.3.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.2.x-dev » 8.3.x-dev

Drupal 8.2.6 was released on February 1, 2017 and is the final full bugfix release for the Drupal 8.2.x series. Drupal 8.2.x will not receive any further development aside from critical and security fixes. Sites should prepare to update to 8.3.0 on April 5, 2017. (Drupal 8.3.0-alpha1 is available for testing.)

Bug reports should be targeted against the 8.3.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.4.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.3.x-dev » 8.4.x-dev

Drupal 8.3.6 was released on August 2, 2017 and is the final full bugfix release for the Drupal 8.3.x series. Drupal 8.3.x will not receive any further development aside from critical and security fixes. Sites should prepare to update to 8.4.0 on October 4, 2017. (Drupal 8.4.0-alpha1 is available for testing.)

Bug reports should be targeted against the 8.4.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.5.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.4.x-dev » 8.5.x-dev

Drupal 8.4.4 was released on January 3, 2018 and is the final full bugfix release for the Drupal 8.4.x series. Drupal 8.4.x will not receive any further development aside from critical and security fixes. Sites should prepare to update to 8.5.0 on March 7, 2018. (Drupal 8.5.0-alpha1 is available for testing.)

Bug reports should be targeted against the 8.5.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.6.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.5.x-dev » 8.6.x-dev

Drupal 8.5.6 was released on August 1, 2018 and is the final bugfix release for the Drupal 8.5.x series. Drupal 8.5.x will not receive any further development aside from security fixes. Sites should prepare to update to 8.6.0 on September 5, 2018. (Drupal 8.6.0-rc1 is available for testing.)

Bug reports should be targeted against the 8.6.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.7.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.6.x-dev » 8.8.x-dev

Drupal 8.6.x will not receive any further development aside from security fixes. Bug reports should be targeted against the 8.8.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.9.x-dev branch. For more information see the Drupal 8 and 9 minor version schedule and the Allowed changes during the Drupal 8 and 9 release cycles.

Version: 8.8.x-dev » 8.9.x-dev

Drupal 8.8.7 was released on June 3, 2020 and is the final full bugfix release for the Drupal 8.8.x series. Drupal 8.8.x will not receive any further development aside from security fixes. Sites should prepare to update to Drupal 8.9.0 or Drupal 9.0.0 for ongoing support.

Bug reports should be targeted against the 8.9.x-dev branch from now on, and new development or disruptive changes should be targeted against the 9.1.x-dev branch. For more information see the Drupal 8 and 9 minor version schedule and the Allowed changes during the Drupal 8 and 9 release cycles.

longwave’s picture

Issue summary: View changes
Status: Needs work » Closed (won't fix)

Drizzle's last release was 2012 and the project was abandoned in 2016: https://en.wikipedia.org/wiki/Drizzle_(database_server)