Cache query (PREPARE/EXECUTE)

Karel Zak <zakkr@zf.jcu.cz>

From: Karel Zak - Zakkr <zakkr@zf.jcu.cz>
To: pgsql-hackers <pgsql-hackers@postgreSQL.org>
Date: 2000-02-22T15:48:35Z
Lists: pgsql-hackers
  Hi,

 as I said, I tring implement PREPARE / EXECUTE command for user a
controllable query cache (in TODO: Cache most recent query plan(s)).

I have implement first usable version now (I know that it is not
interesting for current feature-freeze state, but I believe that
it is interesting for next release and for major developers). See:


test=# prepare sel as select * from tab where id = $1 and data 
       like $2 using int, text;
PREPARE
test=# execute sel using 1, '%a';
 id | data
----+------
  1 | aaaa
(1 row)

test=# prepare ins as insert into tab (data) values($1) using text;
PREPARE
test=# execute ins_tab using 'cccc';
INSERT 18974 1
 

The queryTree and planTree are save in hash table and in the 
TopMemoryContext (Is it good space for this cache?). All is
without change-schema detection (IMHO is user problem if he
changes DB schema and use old cached plan). In future I try
add any 'change-schema' detection (to alter/drop table,rule..etc).


I'am not sure with syntax, now is:

        PREPARE name AS optimizable-statement [ USING type, ... ]
        EXECUTE name [ USING value, ... ] 	

Comments? Suggestions? (SQL92?)

(Note: I try test speed and speed for cached query plan (select) executed 
       via EXECUTE rise very very up (70% !).)  


						Karel						

					
----------------------------------------------------------------------
Karel Zak <zakkr@zf.jcu.cz>              http://home.zf.jcu.cz/~zakkr/

Docs:        http://docs.linux.cz                    (big docs archive)	
Kim Project: http://home.zf.jcu.cz/~zakkr/kim/        (process manager)
FTP:         ftp://ftp2.zf.jcu.cz/users/zakkr/        (C/ncurses/PgSQL)
-----------------------------------------------------------------------