On Sep 14, 2017, at 9:36 AM, Darko Volaric <[email protected]> wrote:
>
> I don't support automatic CSE, I think it should be done manually.
So…you want a SQL profiler, then? Like EXPLAIN?
I suppose there might be a market for a tool that takes a query string and
spends a ridiculous amount of time analyzing it and rewrites it to run
optimally on SQLite. That sounds like something you’d expect to pay top dollar
for, though, since you’re basically replacing the brain of a SQLite expert.
> is there a way of ensuring that a particular expression (or just function
> call) will be guaranteed to be evaluated before any other in a particular
> statement?
Pseudocode:
INSERT INTO CacheTable.foo VALUES (SELECT FROM…) ;
SELECT FROM ... WHERE CacheTable.foo = ...
Other than that, I doubt it. SQL is a declarative language, which means it
purposely does not define sequence points, in C parlance. Without that
property, SQL’s query planner would not have much of the freedom it does, which
would be a very bad thing from the point of this thread.
Much of the reason a language like C takes so long to compile is that all those
sequence point rules in the ISO C standard tie the compiler’s hands, requiring
very clever analysis to figure out what optimizations are even legal.
Optimization efforts have gotten to the point that there are now C compilers
that generate code that is correct according to the standard but which behaves
in ways the average C programmer does not fully understand through extremely
abstruse language lawyering.
For example:
https://stackoverflow.com/questions/18195715/
http://blog.llvm.org/2011/05/what-every-c-programmer-should-know.html
In the second link, scroll down to how the ISO C rule explained in the first
link impacts the LLVM optimizer. Were you aware of all these ramifications?
SQLite, having even more freedom in some ways than ISO C, probably does plenty
that would surprise you if you knew about it.
_______________________________________________
sqlite-users mailing list
[email protected]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users