I started writing this component while I worked for Gaiasoft. I needed a way to automatically change the SQL text already written: We wanted to make our product work with different SQL backends. For that we needed to add some prefix to all tables used in SELECT query, for example. As simple string search and replace methods failed, this component was born. It was very simple at the beginning, and has evolved a lot since...
My current goal with the component is:
Also, I will think about to rewriting the component for .Net environment. It will be done either under Delphi 8 or as complete rewrite in C#. I will lean towards the second options. But this all depends how much spare time I will have, and how much help I’ll get.
This component is released under GPL. Generally it means that You can use it for free, but You must release Your own product also under GPL license.
If this is not suitable for You (You want to use it inside some commercial product, for example), contact me. I would not ask too much for the permission. Generally, I would like to get some information about the product, a permission to list Your product in this documentation (and in web site), a copy of it (if possible) and my name mentioned somewhere in Your documentation/about box. But all this depends on situation - If You can’t do something, I would not be too strict.
Well, I’m currently developing this component alone. If this changes, I will need to reconsider some of the points above. The copy of product should be for ”‘gaSQLParser developers team”’ or something equivalent. And also, other persons involved should get mentioned somehow. But I will deal with the problem when someone joins me...
For the ones who want to join the team: You have to give the project administrators permission to re-license Your code for non-GPL usage. You should get appropriate publicity (Your name mentioned in some documentation), if You wish.
The version number of product is quite important. It should give an information how mature the product is, whether the version is stable or not and so on.
While I developed version 1, I did not have any matrix defined for version numbers. I thought that I will invent one if I go to stable phase... Well, probably there there will never be version 1.0 of gaSQLParser. Sad.
But I intend start the development of version 2 of the parser. And I think it is latest time to think about the numbers.
The version number will be made up from three parts (as they usually do): major and minor version number plus revision number. Maybe I will also introduce the build number..
I’m not sure when the major version number is incremented. But You may expect it to be constant for several years....
The minor revision number shows what kind of release it is. If it is even number (0, 2, 4), the release is intended to be stable. Odd numbers are unstable, or development releases (alpha and beta releases). When the next development cycle is finished, the minor revision number is incremented (to the even number) and the stable version is released. Then the minor version number is incremented again, to odd number, and next development cycle is started. There will be one ”special” minor revision number, 99. It marks the development cycle before the next major version. So, the alpha and beta versions for version 2.0.0 will have version numbers like ”1.99.xxx”.
The release number is counter inside the minor version. For stable version, I intend to make only bug-fix releases, so that the 0 as release number means initial release, 1 means first bug-fix release and so on. For unstable, it just means that the next release is made.
So, in brief, explanation for some hypothetical version numbers:
and so on.
Hope You did get the picture..
I think that couple words about the CVS structure are in place here.
Currently, there are two modules under the gasqlparser CVS repository:
The first one of them contains the development tree of the first (soon-to-be-obsolete) version of gaSQLParser. Under the second one I intent to gather all other versions. This way it seems like I should rename the modules. Maybe I will ask SourceForge staff to do it... (AFAIK, I can’t do it for myself).
Currently there is only a ”Doc” folder under the gaSQLParser_v2 module. This folder contains the documentation You are reading right now. Although I think that documentation of every version should be under the CVS subtree of the version itself, I do not have any of those present yet. Or maybe I will make the gaSQLParser_v2 to be the CVS subtree of the version.. I don’t know. The time will tell.
I think I should establish some rules how the code should be written. First of all, the code formatting: I believe that the simplest (and also best) would be overtake some widely used rule-set. I haven’t decided which one, yet.
Beside of the code formatting, I would like to have fully automatically tested code base of the component. This means that the writing should be performed using TTD rules (Test Driven Development). At the minimum, et least every bug should have associated test case to avoid regressions... For Delphi, I have used DUnit for testing, at I’m happy with that right now.
Here is the list of developers and contributors of the project:
If You are interested in getting involved, You should first join the developers mailing list. To do so, visit ”http://lists.sourceforge.net/lists/listinfo/gasqlparser-devel” If You contribute some code, You are implicitly accepting the terms stated in Licensing sub-section (1.2)
Also, several persons have reported many bugs. I would like to thank all of them for their interest:
In addition, the SQL parser is used in some non-open projects. This list is not complete at the moment, but I’m trying to make it up to date. If You are using this component in project not released under GPL, please contact me - I would love to grant a non-GPL license for You. For details, see the Licensing sub-section (1.2). Also, if You do not use this component anymore or do not want to be publicly listed here, let me know - I will remove You from list.
There are two things that have been helping me to develop this component: