Skip to content
Snippets Groups Projects
Select Git revision
  • ab727af49fd068cd97c3bf5ce4f6e55f23f9b34f
  • master default protected
  • 9.0
  • 8.0
  • 7.8
  • 7.6
  • 7.4
  • 7.2
  • 7.0
  • 0.6
  • rosuav/latex-markdown-renderer
  • rxnpatch/rxnpatch
  • marcus/gobject-introspection
  • rxnpatch/8.0
  • rosuav/pre-listening-ports
  • nt-tools
  • rosuav/async-annotations
  • rosuav/pgsql-ssl
  • rxnpatch/rxnpatch-broken/2023-10-06T094250
  • grubba/fdlib
  • grubba/wip/sakura/8.0
  • v8.0.2000
  • v8.0.1998
  • v8.0.1996
  • v8.0.1994
  • v8.0.1992
  • v8.0.1990
  • v8.0.1988
  • v8.0.1986
  • rxnpatch/clusters/8.0/2025-04-29T124414
  • rxnpatch/2025-04-29T124414
  • v8.0.1984
  • v8.0.1982
  • v8.0.1980
  • v8.0.1978
  • v8.0.1976
  • v8.0.1974
  • v8.0.1972
  • v8.0.1970
  • v8.0.1968
  • v8.0.1966
41 results

interpret_functions.h

Blame
  • mysql.pike 4.02 KiB
    /*
     * $Id: mysql.pike,v 1.7 1999/06/14 23:08:37 grubba Exp $
     *
     * Glue for the Mysql-module
     */
    
    //.
    //. File:	mysql.pike
    //. RCSID:	$Id: mysql.pike,v 1.7 1999/06/14 23:08:37 grubba Exp $
    //. Author:	Henrik Grubbstrm (grubba@idonex.se)
    //.
    //. Synopsis:	Implements the glue to the Mysql-module.
    //.
    //. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    //.
    //. Implements the glue needed to access the Mysql-module from the generic
    //. SQL module.
    //.
    
    #if constant(Mysql.mysql)
    
    inherit Mysql.mysql;
    
    //. - quote
    //.   Quote a string so that it can safely be put in a query.
    //. > s - String to quote.
    string quote(string s)
    {
      return(replace(s,
    		 ({ "\\", "\"", "\0", "\'", "\n", "\r" }),
    		 ({ "\\\\", "\\\"", "\\0", "\\\'", "\\n", "\\r" })));
    }
    
    // The following time conversion functions assumes the SQL server
    // handles time in this local timezone. They map the special zero
    // time/date spec to 0.
    
    private constant timezone = localtime (0)->timezone;
    
    //. - 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
    //.   (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 (date) {
        if (!time) return "000000";
        mapping(string:int) ct = localtime (time);
        return sprintf ("%02d%02d%02d", ct->hour, ct->min, ct->sec);
      }
      else return sprintf ("%02d%02d%02d", time / 3600 % 24, time / 60 % 60, time % 60);
    }
    
    //. - 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 (!time) return "00000000";
      mapping(string:int) ct = localtime (time);
      return sprintf ("%04d%02d%02d", ct->year + 1900, ct->mon + 1, ct->mday);
    }
    
    //. - 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 (!time) return "00000000000000";
      mapping(string:int) ct = localtime (time);
      return sprintf ("%04d%02d%02d%02d%02d%02d",
    		  ct->year + 1900, ct->mon + 1, ct->mday,
    		  ct->hour, ct->min, ct->sec);
    }
    
    //. - 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
    //.   seconds-since-midnight value is returned.
    int decode_time (string timestr, void|int date)
    {
      int hour = 0, min = 0, sec = 0;
      if (sscanf (timestr, "%d:%d:%d", hour, min, sec) <= 1)
        sscanf (timestr, "%2d%2d%2d", hour, min, sec);
      if (date && (hour || min || sec)) {
        mapping(string:int) ct = localtime (date);
        return mktime (sec, min, hour, ct->mday, ct->mon, ct->year, ct->isdst, ct->timezone);
      }
      else return (hour * 60 + min) * 60 + sec;
    }
    
    //. - decode_date
    //.   Converts a database date-only spec to a system time value.
    //.   Assumes 4-digit years.
    //. > datestr - Date spec to decode.
    int decode_date (string datestr)
    {
      int year = 0, mon = 0, mday = 0, n;
      n = sscanf (datestr, "%d-%d-%d", year, mon, mday);
      if (n <= 1) n = sscanf (datestr, "%4d%2d%2d", year, mon, mday);
      if (year || mon || mday)
        return mktime (0, 0, 0, n == 3 ? mday : 1, n >= 2 && mon - 1, year - 1900,
    		   -1, timezone);
      else return 0;
    }
    
    //. - decode_datetime
    //.   Converts a database date and time spec to a system time value.
    //.   Can decode strings missing the time part.
    //. > datestr - Date and time spec to decode.
    int decode_datetime (string timestr)
    {
      array(string) a = timestr / " ";
      if (sizeof (a) == 2)
        return decode_date (a[0]) + decode_time (a[1]);
      else {
        int n = sizeof (timestr);
        if (n >= 12)
          return decode_date (timestr[..n-7]) + decode_time (timestr[n-6..n-1]);
        else
          return decode_date (timestr);
      }
    }
    
    #else /* !constant(Mysql.mysql) */
    #error "Mysql support not available.\n"
    #endif /* constant(Mysql.mysql) */