Verschillen tussen twee verzamelingen van SQL-statements

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Topicstarter
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 :P Ik heb bijna O-) 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:
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...


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
CodeCaster schreef op woensdag 01 juli 2009 @ 16:33:
heeft iemand nog interessante SQL-statements voor me?
:Y Ik kwam onlangs deze "interessante" query tegen :X

[ Voor 45% gewijzigd door RobIII op 01-07-2009 16:37 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 08:50

gorgi_19

Kruimeltjes zijn weer op :9

Ik vermoed dat je alleen MySQL wilt ondersteunen, zo niet dan is http://www.apexsql.com/sql_tools_diff.asp een vergelijkbaar project :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • winkbrace
  • Registratie: Augustus 2008
  • Laatst online: 24-08 15:17
Dit gaat dus eigenlijk alleen op voor database objecten en niet zozeer voor interessante queries?

anders zijn geneste case statements met geneste inline views met OR's en AND's altijd wel "interessant" :)

Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
RobIII schreef op woensdag 01 juli 2009 @ 16:36:
[...]


:Y Ik kwam onlangs deze "interessante" query tegen :X
Dat zijn heel simpele SELECT-queries met wat UNIONs. Wel een mooi achterliggend datamodel, lekker veel kolommen dus weinig joins.

@TS: je app zou ik nooit gebruiken omdat ik te bang ben voor bugs. Gaat je script ook goed bij multi-column indices?

Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Topicstarter
GlowMouse schreef op donderdag 02 juli 2009 @ 00:39:
[...]

Dat zijn heel simpele SELECT-queries met wat UNIONs. Wel een mooi achterliggend datamodel, lekker veel kolommen dus weinig joins.

@TS: je app zou ik nooit gebruiken omdat ik te bang ben voor bugs. Gaat je script ook goed bij multi-column indices?
Natuurlijk. Maar hoe langer ik ermee bezig ben hoe hopelozer de situatie wordt, ik denk dat ik het projectje maar laat vallen :p

Neem bijvoorbeeld deze pagina uit de handleiding, dat gaat echt té veel werk worden om te implementeren.

Het was meer een probeerseltje, gebaseerd op meerdere topics, maar op dit moment is het resultaat een half-werkende SQL-parser in combinatie met een half-werkende diff-er.

Naja, kijk hier zelf maar om het te proberen. :) Ik denk dat ik het, zoals in bovenstaande topics staat, wel gewoon zelf met upgradescripts doe. Iedere aan de database uitgevoerde wijziging gewoon opslaan in source control.

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Ik ben voor mijn afstuderen met iets soortgelijks bezig. Alleen begin ik bij een domein specifieke taal om mijn schema's te definieren, wat ik parse en dan via boom transformaties ontdoe van syntactische suiker. Daarna transformeer ik de boom nog wat door alvorens met een syntax safe template based code generator de SQL te bakken van mijn schema's. (Uiteindelijk ga ik ook nog UI code genereren om de data in de DB te editen.)

Ik ben nog bezig met het uitwerken van de semantiek van de verschillen tussen twee parse-trees.

Reverse engineeren van bestaande databases wil ik zeer zeker ook nog naar kijken. Ik kan je iig aanraden zeker te kijken naar bestaande parser-technologieen als je dit interessant vind. Een triviaal probleem is het zeker niet. (Des te meer als je ook nog een theoretische basis probeert te vinden voor je oplossingen, ipv wat ad hoc hacking.)

[ Voor 6% gewijzigd door Grijze Vos op 02-07-2009 15:36 ]

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info

Pagina: 1