1 | | |
2 | | |
3 | | |
4 | | |
5 | | |
6 | | |
7 | | |
8 | | |
9 | | |
10 | | |
11 | | |
12 | | |
13 | | |
14 | | |
15 | | |
16 | | |
17 | | |
18 | | |
19 | | |
20 | | |
21 | | |
22 | | |
23 | | |
24 | | |
25 | | |
26 | | |
27 | | |
28 | | |
29 | | |
30 | | |
31 | | |
32 | | |
33 | | |
34 | | |
35 | | |
36 | | |
37 | | |
38 | | |
39 | | |
40 | | |
41 | | |
42 | | |
43 | | |
44 | | |
45 | | |
46 | | |
47 | | |
48 | | |
49 | | |
50 | | |
51 | | |
52 | | |
53 | | |
54 | | |
55 | | |
56 | | |
57 | | |
58 | | |
59 | | |
60 | | |
61 | | |
62 | | |
63 | | |
64 | | |
65 | | |
66 | | |
67 | | |
68 | | |
69 | | |
70 | | |
71 | | |
72 | | |
73 | | |
74 | | |
75 | | |
76 | | |
77 | | |
78 | | |
79 | | |
80 | | |
81 | | |
82 | | |
83 | | |
84 | | |
85 | | |
86 | | |
87 | | |
88 | | |
89 | | |
90 | | |
91 | | |
92 | | |
93 | | |
94 | | |
95 | | |
96 | | |
97 | | |
98 | | |
99 | | |
100 | | |
101 | | |
102 | | |
103 | | |
104 | | |
105 | | |
106 | | |
107 | | |
108 | | |
109 | | |
110 | | |
111 | | |
112 | | |
113 | | |
114 | | |
115 | | |
116 | | |
117 | | |
118 | | |
119 | | |
120 | | |
121 | | |
122 | | |
123 | | |
124 | | |
125 | | |
126 | | |
127 | | |
128 | | |
129 | | |
130 | | |
131 | | |
132 | | |
133 | | |
134 | | |
135 | | |
136 | | |
137 | | |
138 | | |
139 | | |
140 | | |
141 | | |
142 | | |
143 | | |
144 | | |
145 | | |
146 | | |
147 | | |
148 | | |
149 | | |
150 | | |
151 | | |
152 | | |
153 | | |
154 | | |
155 | | |
156 | | |
157 | | |
158 | | |
159 | | |
160 | | |
161 | | |
162 | | |
163 | | |
164 | | |
165 | | |
166 | | |
167 | | |
168 | | |
169 | | |
170 | | |
171 | | |
172 | | |
173 | | |
174 | | |
175 | | |
176 | | |
177 | | |
178 | | |
179 | | |
180 | | |
181 | | |
182 | | |
183 | | |
184 | | |
185 | | |
186 | | |
187 | | |
188 | | |
189 | | |
190 | | |
191 | | |
192 | | |
193 | | |
194 | | |
195 | | |
196 | | |
197 | | |
198 | | |
199 | | |
200 | | |
201 | | |
202 | | |
203 | | |
| | | | | | | | | | #pike __REAL_VERSION__ | | #if constant(Mysql.mysql) | | inherit Mysql.mysql; | | #if constant( Mysql.mysql.MYSQL_NO_ADD_DROP_DB ) | | void create_db( string db ) | { | ::big_query( "CREATE DATABASE "+db ); | } | | void drop_db( string db ) | { | ::big_query( "DROP DATABASE "+db ); | } | #endif | | | | | | string quote(string s) | { | return(replace(s, | ({ "\\", "\"", "\0", "\'", "\n", "\r" }), | ({ "\\\\", "\\\"", "\\0", "\\\'", "\\n", "\\r" }))); | } | | | | | | private constant timezone = localtime (0)->timezone; | | | | | | | | | | | | 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); | } | | | | | | | 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); | } | | | | | | | 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); | } | | | | | | | | | | 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; | } | | | | | | | 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; | } | | | | | | | 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); | } | } | | | int|object big_query(string q, mapping(string|int:mixed)|void bindings) | { | if (!bindings) | return ::big_query(q); | return ::big_query(.sql_util.emulate_bindings(q,bindings,this_object())); | } | | int(0..1) is_keyword( string name ) | | { | return (< | "action", "add", "aggregate", "all", "alter", "after", "and", "as", | "asc", "avg", "avg_row_length", "auto_increment", "between", "bigint", | "bit", "binary", "blob", "bool", "both", "by", "cascade", "case", | "char", "character", "change", "check", "checksum", "column", | "columns", "comment", "constraint", "create", "cross", "current_date", | "current_time", "current_timestamp", "data", "database", "databases", | "date", "datetime", "day", "day_hour", "day_minute", "day_second", | "dayofmonth", "dayofweek", "dayofyear", "dec", "decimal", "default", | "delayed", "delay_key_write", "delete", "desc", "describe", "distinct", | "distinctrow", "double", "drop", "end", "else", "escape", "escaped", | "enclosed", "enum", "explain", "exists", "fields", "file", "first", | "float", "float4", "float8", "flush", "foreign", "from", "for", "full", | "function", "global", "grant", "grants", "group", "having", "heap", | "high_priority", "hour", "hour_minute", "hour_second", "hosts", | "identified", "ignore", "in", "index", "infile", "inner", "insert", | "insert_id", "int", "integer", "interval", "int1", "int2", "int3", | "int4", "int8", "into", "if", "is", "isam", "join", "key", "keys", | "kill", "last_insert_id", "leading", "left", "length", "like", | "lines", "limit", "load", "local", "lock", "logs", "long", "longblob", | "longtext", "low_priority", "max", "max_rows", "match", "mediumblob", | "mediumtext", "mediumint", "middleint", "min_rows", "minute", | "minute_second", "modify", "month", "monthname", "myisam", "natural", | "numeric", "no", "not", "null", "on", "optimize", "option", | "optionally", "or", "order", "outer", "outfile", "pack_keys", | "partial", "password", "precision", "primary", "procedure", "process", | "processlist", "privileges", "read", "real", "references", "reload", | "regexp", "rename", "replace", "restrict", "returns", "revoke", | "rlike", "row", "rows", "second", "select", "set", "show", "shutdown", | "smallint", "soname", "sql_big_tables", "sql_big_selects", | "sql_low_priority_updates", "sql_log_off", "sql_log_update", | "sql_select_limit", "sql_small_result", "sql_big_result", | "sql_warnings", "straight_join", "starting", "status", "string", | "table", "tables", "temporary", "terminated", "text", "then", "time", | "timestamp", "tinyblob", "tinytext", "tinyint", "trailing", "to", | "type", "use", "using", "unique", "unlock", "unsigned", "update", | "usage", "values", "varchar", "variables", "varying", "varbinary", | "with", "write", "when", "where", "year", "year_month", "zerofill", | >)[ lower_case(name) ]; | } | | #else /* !constant(Mysql.mysql) */ | #error "Mysql support not available.\n" | #endif /* constant(Mysql.mysql) */ | | |
|