Om maar met de deur in huis te vallen: heeft iemand nog interessante SQL-statements voor me? Ik ben voor een projectje bezig met een soort van diff berekenen, ik kan dus twee SQL-statements vergelijken en daar een ALTER / DROP / CREATE script voor maakt om het eerste statement te upgraden naar het tweede.
Hij werkt al aardig (momenteel alleen nog met CREATE DATABASE en TABLE, maar uitbreiding is onderweg), maar ik ben dus een beetje op zoek naar interessante test cases
Ik heb bijna
de hele MySQL-handleiding er al in verwerkt (en nee, ik weet dat ik dan nog lang niet alles heb, PostgreSQL heeft bijvoorbeeld zo ook weer z'n dingen), maar soms kom je toch nog half of niet gedocumenteerde eigenaardigheden tegen.
Voor het project heb ik een SQL parser geschreven, ik kan nu ieder willekeurig SQL statement in een PHP-object stoppen en bewerken:
Hieruit komt mooi de volgende code:
Gooi ik vervolgens die twee statements door de vergelijker, dan komt er het volgende uit:
Loopt er iemand warm voor dit projectje, heeft iemand zoiets van "jeej doe mij die als die af is", of is het bij voorbaat al ten dode opgeschreven?
Ik heb heel even onderzoek gedaan, maar de pest met PHP is dat er zoveel troep is te vinden dat het niet leuk meer is. Ik kon dus geen vergelijkbaar bestaand project vinden, dus ik dacht: "hé, dat ga ik zelf schrijven". Baat het niet dan schaadt het niet, ik heb er in ieder geval wat van geleerd
Hij werkt al aardig (momenteel alleen nog met CREATE DATABASE en TABLE, maar uitbreiding is onderweg), maar ik ben dus een beetje op zoek naar interessante test cases

Voor het project heb ik een SQL parser geschreven, ik kan nu ieder willekeurig SQL statement in een PHP-object stoppen en bewerken:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| $rawsql = "CREATE TABLE IF NOT EXISTS `schedule` ( `s_id` int(11) NOT NULL AUTO_INCREMENT, `creator` varchar(21) NOT NULL, `created` int(11) NOT NULL, `runtime` int(11) NOT NULL, `finished` int(11) NOT NULL, `s_type` set('I','U') NOT NULL, `v_id` int(11) NOT NULL, `clients` varchar(32) NOT NULL, PRIMARY KEY (`s_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=23;"; $schedule = new Table($rawsql); $schedule->getColumn("creator")->changeOption("length", 25); $schedule->changeOption("auto_increment", 1); print $schedule->getSQL(); |
Hieruit komt mooi de volgende code:
code:
1
2
3
4
5
6
7
8
9
10
11
| CREATE TABLE IF NOT EXISTS `schedule` ( `s_id` int (11) NOT NULL AUTO_INCREMENT, `creator` varchar (25) NOT NULL, `created` int (11) NOT NULL, `runtime` int (11) NOT NULL, `finished` int (11) NOT NULL, `s_type` set ('I','U') NOT NULL, `v_id` int (11) NOT NULL, `clients` varchar (32) NOT NULL, PRIMARY KEY (`s_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1; |
Gooi ik vervolgens die twee statements door de vergelijker, dan komt er het volgende uit:
code:
1
| ALTER TABLE `schedule2` CHANGE COLUMN `creator` `creator` varchar (25) NOT NULL; |
Loopt er iemand warm voor dit projectje, heeft iemand zoiets van "jeej doe mij die als die af is", of is het bij voorbaat al ten dode opgeschreven?
Ik heb heel even onderzoek gedaan, maar de pest met PHP is dat er zoveel troep is te vinden dat het niet leuk meer is. Ik kon dus geen vergelijkbaar bestaand project vinden, dus ik dacht: "hé, dat ga ik zelf schrijven". Baat het niet dan schaadt het niet, ik heb er in ieder geval wat van geleerd
https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...