diff --git a/lib/modules/Sql.pmod/sql.pike b/lib/modules/Sql.pmod/sql.pike index 47d4c19142529b06c87862dee1724f7a92c7e445..a10d56c1a87e4fd3d450dc1c3a3a00eff6787a80 100644 --- a/lib/modules/Sql.pmod/sql.pike +++ b/lib/modules/Sql.pmod/sql.pike @@ -1,5 +1,5 @@ /* - * $Id: sql.pike,v 1.25 1998/07/03 20:03:51 mast Exp $ + * $Id: sql.pike,v 1.26 1998/07/08 21:05:20 mast Exp $ * * Implements the generic parts of the SQL-interface * @@ -8,7 +8,7 @@ //. //. File: sql.pike -//. RCSID: $Id: sql.pike,v 1.25 1998/07/03 20:03:51 mast Exp $ +//. RCSID: $Id: sql.pike,v 1.26 1998/07/08 21:05:20 mast Exp $ //. Author: Henrik Grubbstr�m (grubba@idonex.se) //. //. Synopsis: Implements the generic parts of the SQL-interface. @@ -35,87 +35,49 @@ int case_convert; //. - quote //. Quote a string so that it can safely be put in a query. //. > s - String to quote. -string quote(string s) +function(string:string) quote = lambda (string s) { - if (master_sql && master_sql->quote) { - return(master_sql->quote(s)); - } + // This lambda is overridden from master_sql in create(). return(replace(s, "\'", "\'\'")); -} +}; //. - encode_time //. Converts a system time value to an appropriately formatted time //. spec for the database. -//. > time - Time to encode. -//. > date - If nonzero then time is taken as a "full" unix time spec +//. > arg 1 - Time to encode. +//. > arg 2 - If nonzero then time is taken as a "full" unix time spec //. (where the date part is ignored), otherwise it's converted as a //. seconds-since-midnight value. -string encode_time (int time, void|int date) -{ - if (functionp (master_sql->encode_time)) - return master_sql->encode_time (time, date); - else - throw_error ("sql->encode_time(): Not supported by this database\n"); -} +function(int,void|int:string) encode_time; //. - decode_time //. Converts a database time spec to a system time value. -//. > timestr - Time spec to decode. -//. > date - Take the date part from this system time value. If zero, a +//. > arg 1 - Time spec to decode. +//. > arg 2 - Take the date part from this system time value. If zero, a //. seconds-since-midnight value is returned. -int decode_time (string timestr, void|int date) -{ - if (functionp (master_sql->decode_time)) - return master_sql->decode_time (timestr, date); - else - throw_error ("sql->decode_time(): Not supported by this database\n"); -} +function(string,void|int:int) decode_time; //. - encode_date //. Converts a system time value to an appropriately formatted //. date-only spec for the database. -//. > time - Time to encode. -string encode_date (int time) -{ - if (functionp (master_sql->encode_date)) - return master_sql->encode_date (time); - else - throw_error ("sql->encode_date(): Not supported by this database\n"); -} +//. > arg 1 - Time to encode. +function(int:string) encode_date; //. - decode_date //. Converts a database date-only spec to a system time value. -//. > datestr - Date spec to decode. -int decode_date (string datestr) -{ - if (functionp (master_sql->decode_date)) - return master_sql->decode_date (datestr); - else - throw_error ("sql->decode_date(): Not supported by this database\n"); -} +//. > arg 1 - Date spec to decode. +function(string:int) decode_date; //. - encode_datetime //. Converts a system time value to an appropriately formatted //. date and time spec for the database. -//. > time - Time to encode. -string encode_datetime (int time) -{ - if (functionp (master_sql->encode_datetime)) - return master_sql->encode_datetime (time); - else - throw_error ("sql->encode_datetime(): Not supported by this database\n"); -} +//. > arg 1 - Time to encode. +function(int:string) encode_datetime; //. - decode_datetime //. Converts a database date and time spec to a system time value. -//. > datestr - Date and time spec to decode. -int decode_datetime (string timestr) -{ - if (functionp (master_sql->decode_datetime)) - return master_sql->decode_datetime (timestr); - else - throw_error ("sql->decode_datetime(): Not supported by this database\n"); -} +//. > arg 1 - Date and time spec to decode. +function(string:int) decode_datetime; //. - create //. Create a new generic SQL object. @@ -284,6 +246,16 @@ void create(void|string|object host, void|string db, throw_error("Sql.sql(): Couldn't connect using the " + (program_names[0]/".pike")[0] + " database\n"); } + + function fallback = + lambda () {throw_error ("Function not supported in this database.");}; + if (master_sql->quote) quote = master_sql->quote; + encode_time = master_sql->encode_time || fallback; + decode_time = master_sql->decode_time || fallback; + encode_date = master_sql->encode_date || fallback; + decode_date = master_sql->decode_date || fallback; + encode_datetime = master_sql->encode_datetime || fallback; + decode_datetime = master_sql->decode_datetime || fallback; } static private array(mapping(string:mixed)) res_obj_to_array(object res_obj)