Brian Aker wrote:
Hi!

On Sep 26, 2008, at 6:35 AM, Jim Starkey wrote:

Something that I believe warrants reconsideration is prepared statement handling. I am aware that prepared statements were handled badly in MySQL, but that doesn't mean they are a bad idea. Prepared statements enable a compiled statement cache, intrinsically much faster than parsing, compiling, and optimizing the same statements over and over and over -- no matter how fast the parser and optimizer are, not parsing and optimizing is faster.

Agreed. The reason we pulled the current one was that it was just not the place to start from. The major difference is that I want the serialized form stored client side, not server side (and we invalidate as needed to client).

Why? Because then proxies along the way have access as well. I also believe that the parsed bits won't be that large.
I guess I don't understand this at all. What proxies need this information and what would they do with it?


If anyone is at all interested, the Falcon native SQL engine has a very clean reference implementation. In a nutshell, DDL is interpreted from the syntax tree while DML is compiled into a shared CompiledStatement and either Statement or PreparedStatement instance. CompiledStatements with parameters are added to the compiled statement cache, others are deleted after use (no point is caching one-time use statements). When a new statement comes in, it is compared for exact (!) string equality against the set of compiled statements. For each match, a list of unqualified object names must be checked against the current default database/schema. For a hit, it is also necessary to validate access permission (assuming you still have access permissions).


What file is the code under? I'll make a note to look at your class when we get to this work.

Falcon uses a very obscure naming convention for code files. The files CompiledStatement.h and CompiledStatement.cpp, for example, contains the declaration for the CompiledStatement class declarations and implementations, respectively. Each include file contains the declaration of single class and each code file the implementation for a single class.

The classes of interest are:

   CompiledStatement -- shared object representing compiled statement
   (also the root of the compiler)
   Statement -- an instance of a CompiledStatement without parameters
   PreparedStatement -- a subclass of Statement with parameters
   Context -- row context instantiated within a Statement or
   PreparedStatement

Keep in mind that the Falcon native engine is a C++ implementation of JDBC.

Finally, what's your recommendation for a second Neil Stephenson book?

--
Jim Starkey
President, NimbusDB, Inc.
978 526-1376


_______________________________________________
Mailing list: https://launchpad.net/~drizzle-discuss
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~drizzle-discuss
More help   : https://help.launchpad.net/ListHelp

Reply via email to