I'm jumping into the middle of the conversation, possibly without seeing the beginning, but from what I've seen so far, it seems to me that the key is recognizing there are many tools in a programmer's toolbox. Each tool covers a certain area of functionality really well, then there are areas where it can be applied but with difficulty, and then the rest is off-limits for any serious applications. There is considerable overlap between the applicability of different tools, so you get to pick your favorites. But you have to be willing to incorporate additional tools when you get to the limits of comfort for your favorite tool.
However, instead what I often see is people trying to expand the scope of their favorite. Sometimes this is the right choice, but usually it is not. It takes considerable experience and good taste to be able to wisely judge the difference and to chart a roadmap that legitimately enhances tools in a way that justifies the cost to maintenance, documentation, ease of learning, and so forth. I know I've been on the wrong side of this many times, but I try to learn from my mistakes. SQLite is a special sort of tool in that it expressly acknowledges its limitations, and it lets those limitations be its strength. I mean, "Lite" is right there in the name. The idea of having a larger number of more limited tools, with a stronger focus on interoperability, is a very powerful and transformative engineering mindset and is central to the Unix design philosophy (which, by the way, is often at odds with the Unix design practice). The point of SQLite, in contrast to SQL servers, is that it be embeddable in your application. Thus, SQLite has no need to replicate the capabilities already present in every reasonable programming language. Namely, variables. I do see a valid objection earlier in the thread: the SQLite shell. It indeed lacks variables, though they can be emulated with temporary tables. This is what I was talking about in the first paragraph. It's possible to stretch tools beyond their core competency, but it can be difficult, so you're better off letting other tools fill the gaps. But when you're using the SQLite shell, that's not really a good option. You can let the SQLite shell be the backend to a shell script, but you're not going to want to call it more than once or twice per complete run of a program. So rather than discuss adding variable declarations to SQLite, maybe we should be talking about adding variable declarations to the SQLite shell. Please don't think I'm making a serious proposal. Instead it's just for the sake of argument. Consider what would come of doing that. We'd be taking the SQLite shell in the direction of becoming a programming language unto itself, complementary to yet distinct from SQLite. Once the SQLite shell gets variables, there would also be clamor for loops and conditionals and function declarations and fine-grained I/O and so forth. That would be cool, I suppose. And then, once all that is implemented, why not migrate the new functionality from the shell into SQLite proper? But, umm, don't we already have dozens or hundreds of programming languages to choose from? Does SQLite really need to compete in that arena? Instead, here's what I think. SQLite is extensible by virtue of being embeddable; it can be embedded in a wrapper that expands its capabilities. Furthermore, the sources are maximally open and free, including the Lemon parser. If you want to add new syntax to SQLite to ease its integration with another programming language, start by duplicating and extending its parser to recognize variable declaration and usage. The output of this new parser would be plain-Jane SQLite SQL, augmented with all the necessary variable declarations, statement compiles, parameter bindings, statement steps, column extractions, error checks, and so on needed to make it happen. So, figure out exactly what you want the new syntax to look like, and write a lot of sample queries in the updated language. For each example, write the equivalent C code. Then, it will be your task to make a parser that knows how to translate the former into the latter. Or more realistically, into data structures that can be fed at runtime into the latter, having the same net result but without the need to call a C compiler in the middle. People can then choose to use this wrapper around SQLite wherever it suits them. One good place to do so would be an enhanced shell, which can be forked from the original in order to spin up development quickly. Another would be in new language bindings, though it will be interesting finding ways for the augmented parser to relate the variables in its string input with variables present in its host environment. For languages like Tcl, that will be easy. For languages like C, that will be impossible to do automatically, and a manual association might be more difficult than just using baseline SQLite. So instead, for C, keep the SQL variables inside a dynamic data structure in which the host environment can peek and poke by means of typed accessor functions, much like the current SQLite bind/column API. All this is possible today, right now, with no need for any SQLite developers to get involved. Anyone can start this task, anyone can write and publish this code. ------------------------------------------- CONFIDENTIALITY NOTICE: This email and any attachments are for the sole use of the intended recipient and may contain material that is proprietary, confidential, privileged or otherwise legally protected or restricted under applicable government laws. Any review, disclosure, distributing or other use without expressed permission of the sender is strictly prohibited. If you are not the intended recipient, please contact the sender and delete all copies without reading, printing, or saving.. _______________________________________________ sqlite-users mailing list sqlite-users@mailinglists.sqlite.org http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users