Newer
Older
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
<?php
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2007 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
\***************************************************************************/
/*
* Des fonctions pour les requetes SQL
*
*/
function _sqlite_init_functions(&$sqlite){
if (!$sqlite) return false;
$fonctions = array(
'CONCAT' => array( '_sqlite_func_concat' ,2),
'DAYOFMONTH' => array( '_sqlite_func_dayofmonth' ,1),
'FIND_IN_SET' => array( '_sqlite_func_find_in_set' ,2),
'IF' => array( '_sqlite_func_if' ,3),
'INSERT' => array( '_sqlite_func_insert' ,4),
'INSTR' => array( '_sqlite_func_instr' ,2),
'LEAST' => array( '_sqlite_func_least' ,3), // nb d'arguments ?
'LEFT' => array( '_sqlite_func_left' ,2),
# 'LENGTH' => array( 'strlen' ,1), // present v1.0.4
# 'LOWER' => array( 'strtolower' ,1), // present v2.4
# 'LTRIM' => array( 'ltrim' ,1), // present en theorie
'NOW' => array( '_sqlite_func_now' ,0),
'MD5' => array( 'md5' ,1),
'MONTH' => array( '_sqlite_func_month' ,1),
'RAND' => array( '_sqlite_func_rand' ,0), // sinon random() v2.4
'REGEXP_MATCH' => array( '_sqlite_func_regexp_match' ,2), // critere REGEXP supporte a partir de v3.3.2
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
'REGEXP_REPLACE'=> array( '_sqlite_func_regexp_replace' ,3),
'RIGHT' => array( '_sqlite_func_right' ,2),
# 'RTRIM' => array( 'rtrim' ,1), // present en theorie
'SETTYPE' => array( 'settype' ,2), // CAST present en v3.2.3
'TO_DAYS' => array( '_sqlite_func_to_days' ,1),
# 'TRIM' => array( 'trim' ,1), // present en theorie
'UNIX_TIMESTAMP'=> array( '_sqlite_func_unix_timestamp' ,1),
# 'UPPER' => array( 'strtoupper' ,1), // present v2.4
'VIDE' => array( '_sqlite_func_vide' ,0), // du vide pour SELECT 0 as x ... ORDER BY x -> ORDER BY vide()
'YEAR' => array( '_sqlite_func_year' ,1)
);
foreach ($fonctions as $f=>$r){
_sqlite_add_function($sqlite, $f, $r);
}
#spip_log('functions sqlite chargees ');
}
// permet au besoin de charger des fonctions ailleurs par _sqlite_init_functions();
function _sqlite_add_function(&$sqlite, &$f, &$r){
if (_sqlite_is_version(3, $sqlite)){
isset($r[1])
?$sqlite->sqliteCreateFunction($f, $r[0], $r[1])
:$sqlite->sqliteCreateFunction($f, $r[0]);
} else {
isset($r[1])
?sqlite_create_function($sqlite, $f, $r[0], $r[1])
:sqlite_create_function($sqlite, $f, $r[0]);
}
}
//
// SQLite : fonctions sqlite -> php
// entre autre auteurs : mlebas
//
function _sqlite_func_concat ($a, $b) {
return $a.$b;
}
function _sqlite_func_dayofmonth ($d) {
if (!$d){
$result = date("j");
} else {
preg_match(";^([0-9]{4})-([0-9]+)-([0-9]+) .*$;", $d, $f);
$result = $f[3];
}
#spip_log("Passage avec DAYOFMONTH : $d, $result",'debug');
return $result;
}
function _sqlite_func_find_in_set($num, $set) {
$rank=0;
foreach (explode(",",$set) as $v) {
if ($v == $num) return (++$rank);
$rank++;
}
return 0;
}
function _sqlite_func_if ($bool, $oui, $non) {
return ($bool)?$oui:$non;
}
/*
* INSERT(chaine, index, longueur, chaine) MySQL
* Retourne une chaine de caracteres a partir d'une chaine dans laquelle "sschaine"
* a ete inseree a la position "index" en remplacant "longueur" caracteres.
*/
function _sqlite_func_insert ($s, $index, $longueur, $chaine) {
return
substr($s,0, $index)
. $chaine
. substr(substr($s, $index), $longueur);
}
function _sqlite_func_instr ($s, $search) {
return strpos($s,$search);
}
function _sqlite_func_least () {
$numargs = func_num_args();
$arg_list = func_get_args();
$least=$arg_list[0];
for ($i = 0; $i < $numargs; $i++) {
if ($arg_list[$i] < $least) $least=$arg_list[$i];
}
#spip_log("Passage avec LEAST : $least",'debug');
return $least;
}
function _sqlite_func_left ($s, $lenght) {
return substr($s,$lenght);
}
function _sqlite_func_now(){
$result = date("Y-m-d H:i:s", strtotime("now"));
#spip_log("Passage avec NOW : $result",'debug');
return $result;
}
function _sqlite_func_month ($d) {
#spip_log("Passage avec MONTH : $d",'debug');
if (!$d) return date("n");
preg_match(";^([0-9]{4})-([0-9]+).*$;", $d, $f);
return $f[2];
}
function _sqlite_func_rand() {
return rand();
}
function _sqlite_func_right ($s, $lenght) {
return substr($s,0 - $lenght);
}
function _sqlite_func_regexp_match($quoi, $cherche) {
$return = preg_match('%'.$cherche.'%', $quoi);
#spip_log("regexp_replace : $quoi, $cherche, $remplace, $return",'debug');
return $return;
}
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
function _sqlite_func_regexp_replace($quoi, $cherche, $remplace) {
$return = preg_replace('%'.$cherche.'%', $remplace, $quoi);
#spip_log("regexp_replace : $quoi, $cherche, $remplace, $return",'debug');
return $return;
}
function _sqlite_func_to_days ($d) {
$result = date("z", _sqlite_func_unix_timestamp($d));
#spip_log("Passage avec TO_DAYS : $d, $result",'debug');
return $result;
}
function _sqlite_func_unix_timestamp($d) {
//2005-12-02 20:53:53
#spip_log("Passage avec UNIX_TIMESTAMP : $d",'debug');
// mktime ( [int hour [, int minute [, int second [, int month [, int day [, int year [, int is_dst]]]]]]] )
if (!$d) return mktime();
preg_match(";^([0-9]{4})-([0-9]+)-([0-9]+) ([0-9]+):([0-9]+):([0-9]+).*$;", $d, $f);
return mktime($f[4],$f[5],$f[6],$f[2],$f[3],$f[1]);
}
function _sqlite_func_year ($d) {
if (!$d){
$result = date("Y");
} else {
preg_match(";^([0-9]{4}).*$;", $d, $f);
$result = $f[1];
}
spip_log("Passage avec YEAR : $d, $result",'debug');
return $result;
}
function _sqlite_func_vide(){
return;
}
?>