Hi, Yes, someday, hopefully, MariaDB can get transactional DDL. I want to make a good case for a pluggable parser, so I am going to briefly describe the tools I write and how they could benefit from one. I need a pluggable parser or at the least, table functions(which can return more than one column) for Shard-Query, which provides transparent sharding, parallel query, and window functions. Shard-Query puts a lot of work into rewriting a query. I does things like semijoin materialization, after all how else could a semijoin work on a sharded data set? Shard-Query is much more powerful than Spider for reads, though spider is probably better for writes. There is no reason they couldn't work together. Shard-Query can be called from a stored procedure wrapping gearman UDF, but I would MUCH prefer if I could implement the logic in the server for parallel query. This is something that MariaDB really needs and it would set it apart from MySQL in a major way. Much of the work on Shard-Query was done in cooperation with an employee of the Ericsson corporation, which was (and still is to my knowledge) used for analysis and billing of cell phone charges. One of the changes for ericsson was pluggable aggregate functions like percentile. Another prerequisite for putting parallel query in the database is the unified interface for running SQL in the server (there is an MDEV for it). Basically I envision a parser plugin which would rewrite the query internally to each partition, each query being an insert into one temporary table. Once all inserts complete the query will be rewritten to use the temp table and sent through the normal query pipeline where the results will be sent to the end user, and a deinit function will happen to drop the temporary table and free up any memory that was allocated, etc. I also need the pluggable parser for Flexviews, which implements incrementally refreshable materialized views. It includes FlexCDC, a complete change data capture tool that supports ALTER TABLE and that supports plugins, so you can replicate to other systems or send rows to a message queue. FlexCDC processes the binary log and inserts data into log tables. The log tables are then used to refresh the views. Joins and all major aggregate functions are supported and it is in use in production in major internet properties. Flexviews needs a pluggable parser to rewrite queries to access the views transparent. FlexCDC could be rewritten as a daemon plugin which acts as a replication slave inside the database. The pluggable parser could support CREATE MATERIALIZED VIEW. I think these are good cases for a pluggable parser. Let me know if you have any questions or ideas. Btw, there are KB articles on both of the tools. I'm going to work up a tutorial for both soon. Let me know if you have questions. You can find my tools here: http://github.com/greenlion/swanhart-tools Also, you might find this UDF useful, or a comical abuse of a plugin, or both: http://github.com/greenlion/FastBit_UDF --Justin On Tue, Mar 3, 2015 at 7:16 AM, Federico Razzoli <federico_raz@yahoo.it> wrote:
I totally agree, it's an important feature. As a side note, when changing the logic of a database we may need to modify more than one object (tables, procedures, views, triggers...). In those cases, it would be great to be able to make all the changes atomically. But I suppose that this would require a lot of work...
Federico
-------------------------------------------- Mar 3/3/15, Justin Swanhart <greenlion@gmail.com> ha scritto:
Oggetto: Re: [Maria-discuss] stored programs A: "Peter Laursen" <peter_laursen@webyog.com> Cc: "maria-discuss@lists.launchpad.net" < maria-discuss@lists.launchpad.net> Data: Martedì 3 marzo 2015, 14:30
After you debug you proc you kinda have to replace the non buggy one. In production. While people are using it. Unless you version your whole code base and push out a new version to use a new name.
Sent from my iPhone On Mar 3, 2015, at 6:22 AM, Peter Laursen <peter_laursen@webyog.com> wrote:
If this "You can't drop a busy proc in production to replace it" was for me, then note the passage from my blog: "you can add a IN-parameter (debug: integer) to a Stored Procedure paramer-list and CALL mysp(….,0|1) what would then control if the stored program should enter or bypass debugging code when executing". This is the best workaround I've found. On Tue, Mar 3, 2015 at 2:17 PM, Justin Swanhart <greenlion@gmail.com> wrote: You can't drop a busy proc in production to replace it. Many users would get an error. This is the same reason views have had CoR for so long. So yes it is a big deal!
Anyway, what I want most are Antony Curtis' stored proc / parser changes (mdev 820 if I'm not mistaken). I am especially interested in table functions and external stored routines.
I'd also like to discuss window functions too. I've implemented them in shard-query and have ideas about how to implement them in the server, but pluggable parser would be really useful here.
--Justin
Sent from my iPhone
On Mar 3, 2015, at 2:48 AM, Sergei Golubchik <serg@mariadb.org> wrote:
Hi, Federico!
On Mar 03, Federico Razzoli wrote:
Reading 10.0.3 release notes:
https://mariadb.com/kb/en/mariadb/mariadb-1013-release-notes/
I see that IF EXISTS, IF NOT EXISTS and OR REPLACE are now almost
consistent. "Almost" means that... OR REPLACE still doesn't apply to
stored procedures, functions, triggers, events.
Support for events is already pushed (albeit after 10.1.3).
Support for triggers will be pushed any day now (already reviewed and
approved, so there's no more work left on it). I suppose that stored
procedures and functions will follow soon.
This was a GSoC 2014 project that added support for these clauses to
*all* objects. It's just being pushed piecewise, object by object.
Recently, during a public session, a PostgreSQL user asked me if
MariaDB supports stored procedures - in his opinion, MySQL doesn't, no
matter what the manual says. Unfortunately my answer was that MariaDB
support for stored procedure is the same as MySQL ("so the answer is
no", he said).
I don't understand what exactly missing feature that user had in mind.
It couldn't have been "CREATE OR REPLACE", this seems so minor.
Or was it?
Regards,
Sergei
_______________________________________________
Mailing list: https://launchpad.net/~maria-discuss
Post to : maria-discuss@lists.launchpad.net
Unsubscribe : https://launchpad.net/~maria-discuss
More help : https://help.launchpad.net/ListHelp
_______________________________________________
Mailing list: https://launchpad.net/~maria-discuss
Post to : maria-discuss@lists.launchpad.net
Unsubscribe : https://launchpad.net/~maria-discuss
More help : https://help.launchpad.net/ListHelp
-----Segue allegato-----
_______________________________________________ Mailing list: https://launchpad.net/~maria-discuss Post to : maria-discuss@lists.launchpad.net Unsubscribe : https://launchpad.net/~maria-discuss More help : https://help.launchpad.net/ListHelp
_______________________________________________ Mailing list: https://launchpad.net/~maria-discuss Post to : maria-discuss@lists.launchpad.net Unsubscribe : https://launchpad.net/~maria-discuss More help : https://help.launchpad.net/ListHelp