GlisWeb framework
_postgresql.tools.php
Vai alla documentazione di questo file.
1 <?php
2 
45  function postgresqlCachedQuery( $m, $c, $q, $p = false, $t = MEMCACHE_DEFAULT_TTL, &$e = array() ) {
46 
47  // calcolo la chiave della query
48  $k = md5( $q . serialize( $p ) );
49 
50  // cerco il valore in cache
51  $r = memcacheRead( $m, $k );
52 
53  // se il valore non è stato trovato
54  if( empty( $r ) || $t === false ) {
55  $r = postgresqlQuery( $c, $q, $p, $e );
56  memcacheWrite( $m, $k, $r, $t );
57  }
58 
59  // restituisco il risultato
60  return $r;
61 
62  }
63 
64 
70  function postgresqlQuery( $c, $q, $p = false, &$e = array() ) {
71 
72  // verifico se c'è connessione e se la query è preparata o meno
73  if( empty( $c ) ) {
74 
75  // restituisco false
76  return false;
77 
78  } elseif( $p !== false ) {
79 
80  // passo alla funzione con prepared statement
81  return postgresqlPreparedQuery( $c, $q, $p, $e );
82 
83  } else {
84 
85  // in base al tipo di comando eseguo la query
86  switch( current( explode( ' ', $q ) ) ) {
87 
88  case 'SELECT':
89  case 'SHOW':
90  $r = postgresqlFetchResult( @pg_query( $c, $q ) );
91  break;
92 
93  case 'SET':
94  $r = pg_query( $c, $q );
95  break;
96 
97  case 'BEGIN':
98  case 'START':
99  $r = pg_query( $c, $q );
100  break;
101 
102  case 'ROLLBACK':
103  $r = pg_query( $c, $q );
104  break;
105 
106  case 'COMMIT':
107  $r = pg_query( $c, $q );
108  break;
109 
110  case 'LOCK':
111  case 'UNLOCK':
112  $r = pg_query( $c, $q );
113  break;
114 
115  case 'CREATE':
116  $r = pg_query( $c, $q );
117  break;
118 
119  case 'INSERT':
120  $q = $q . ' RETURNING id';
121  $r = @array_shift( @pg_fetch_row( @pg_query( $c, $q ) ) );
122  break;
123 
124  case 'REPLACE':
125  case 'UPDATE':
126  case 'DELETE':
127  case 'TRUNCATE':
128  default:
129  $r = @pg_affected_rows( @pg_query( $c, $q ) );
130  break;
131 
132  }
133 
134  // gestione errore
135  if( pg_last_error( $c ) ) {
136 
137  // log
138  logWrite( 'errore: ' . pg_last_error( $c ) . ' ' . mysqli_error( $c ), 'postgresql', LOG_ERR );
139 
140  // restituisco false per indicare il fallimento della query
141  return false;
142 
143  } else {
144 
145  // restituisco il risultato
146  return $r;
147 
148  }
149 
150  }
151 
152  // restituisco false di default
153  return false;
154 
155  }
156 
162  function postgresqlFetchResult( $r ) {
163 
164  // array del risultato
165  $a = array();
166 
167  // archivio il risultato in un array
168  while( $row = pg_fetch_assoc( $r ) ) {
169  $a[] = $row;
170  }
171 
172  // restituisco il risultato
173  return $a;
174 
175  }
176 
182  function postgresqlPreparedQuery( $c, $q, $p = array(), &$e = array() ) {
183 
184  // verifico se c'è connessione e se la query è preparata o meno
185  if( empty( $c ) ) {
186 
187  // restituisco false
188  return false;
189 
190  } else {
191 
192  // gestisco il caso in cui la funzione sia chiamata con $p = true
193  if( ! is_array( $p ) ) {
194  $p = array();
195  }
196 
197  // modifico la query di inserimento per restituire l'id
198  if( current( explode( ' ', $q ) ) == 'INSERT' ) {
199  $q = $q . ' RETURNING id';
200  }
201 
202  // preparo la query...
203  $key = md5( $q . serialize( $p ) );
204  $rows = pg_num_rows( pg_query( $c, "SELECT * FROM pg_prepared_statements WHERE name = '$key'" ) );
205  if( $rows == 0 ) {
206  $pq = pg_prepare( $c, $key, $q );
207  } else {
208  $pq = true;
209  }
210 
211  // se la preparazione dello statement è andata a buon fine...
212  if( $pq !== false ) {
213 
214  // valore di ritorno a seconda del tipo di query
215  switch( current( explode( ' ', $q ) ) ) {
216 
217  case 'SELECT':
218  $r = postgresqlFetchResult( pg_execute( $c, $key, $p ) );
219  break;
220 
221  case 'INSERT':
222  $r = @array_shift( @pg_fetch_row( @pg_execute( $c, $key, $p ) ) );
223  break;
224 
225  case 'REPLACE':
226  case 'UPDATE':
227  case 'DELETE':
228  case 'TRUNCATE':
229  default:
230  $r = pg_affected_rows( pg_execute( $c, $key, $p ) );
231  break;
232 
233  }
234 
235  // gestione errori
236  if( pg_last_error( $c ) ) {
237 
238  // log
239  logWrite( 'errore: ' . pg_last_error( $c ), 'postgresql' , LOG_ERR );
240 
241  // restituisco false per indicare il fallimento della query
242  return false;
243 
244  } else {
245 
246  // restituisco il risultato
247  return $r;
248 
249  }
250 
251  } else {
252 
253  // restituisco false
254  return false;
255 
256  }
257 
258  }
259 
260  // restituisco false di default
261  return false;
262 
263  }
264 
270  function postgresqlSelectValue( $c, $q, $p = false, &$e = array() ) {
271 
272  // valore di ritorno
273  $v = NULL;
274 
275  // risultato
276  $r = postgresqlSelectRow( $c, $q, $p, $e );
277 
278  // controllo che ci siano righe
279  if( is_array( $r ) && count( $r ) > 0 ) {
280  $v = array_shift( $r );
281  }
282 
283  // ritorno
284  return $v;
285 
286  }
287 
293  function postgresqlSelectRow( $c, $q, $p = false, &$e = array() ) {
294 
295  // valore di ritorno
296  $v = NULL;
297 
298  // risultato
299  $r = postgresqlQuery( $c, $q, $p, $e );
300 
301  // controllo che ci siano righe
302  if( is_array( $r ) && count( $r ) > 0 ) {
303  $v = array_shift( $r );
304  }
305 
306  // ritorno
307  return $v;
308 
309  }
310 
316  function postgresqlSelectCachedValue( $m, $c, $q, $p = false, &$e = array() ) {
317 
318  // valore di ritorno
319  $v = NULL;
320 
321  // risultato
323 
324  // controllo che ci siano righe
325  if( is_array( $r ) && count( $r ) > 0 ) {
326  $v = array_shift( $r );
327  }
328 
329  // ritorno
330  return $v;
331 
332  }
333 
339  function postgresqlSelectCachedRow( $m, $c, $q, $p = false, &$e = array() ) {
340 
341  // valore di ritorno
342  $v = NULL;
343 
344  // risultato
345  $r = postgresqlCachedQuery( $m, $c, $q, $p, $e );
346 
347  // controllo che ci siano righe
348  if( is_array( $r ) && count( $r ) > 0 ) {
349  $v = array_shift( $r );
350  }
351 
352  // ritorno
353  return $v;
354 
355  }
356 
357 ?>
postgresqlSelectCachedValue( $m, $c, $q, $p=false, &$e=array())
postgresqlSelectRow( $c, $q, $p=false, &$e=array())
logWrite( $m, $f='site', $l=LOG_NOTICE, $d=DIRECTORY_LOG, $t=CURRENT_LOG_LEVEL, $s=SITE_STATUS)
scrive un messaggio nei log del sito
Definition: _log.utils.php:48
$p['ricerca']
postgresqlSelectCachedRow( $m, $c, $q, $p=false, &$e=array())
$pq
Definition: _collation.php:44
$a
Definition: _slack.php:21
memcacheRead( $conn, $key)
postgresqlFetchResult( $r)
postgresqlQuery( $c, $q, $p=false, &$e=array())
postgresqlSelectValue( $c, $q, $p=false, &$e=array())
postgresqlCachedQuery( $m, $c, $q, $p=false, $t=MEMCACHE_DEFAULT_TTL, &$e=array())
$r
Definition: _osm.php:25
$e
Definition: _slack.php:121
postgresqlPreparedQuery( $c, $q, $p=array(), &$e=array())
memcacheWrite( $conn, $key, $data, $ttl=MEMCACHE_DEFAULT_TTL, $seed=MEMCACHE_UNIQUE_SEED)
const MEMCACHE_DEFAULT_TTL
Definition: _045.cache.php:16
if(! isset( $_REQUEST['__view__'][ $ct['view']['id']]['__extra__']['assegnato'])|| $_REQUEST['__view__'][ $ct['view']['id']]['__extra__']['assegnato']=='__me__') elseif($_REQUEST[ '__view__'][$ct[ 'view'][ 'id']][ '__extra__'][ 'assegnato']=='__nessuno__')