/[cvs]/nfo/site/htdocs/inc/cms/cms.php.inc
ViewVC logotype

Diff of /nfo/site/htdocs/inc/cms/cms.php.inc

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.6 by rabit, Fri Sep 10 21:40:59 2004 UTC revision 1.7 by rabit, Sat Sep 18 19:20:29 2004 UTC
# Line 129  $operations = array( Line 129  $operations = array(
129    
130    cms_preparsenqlquery($nqlquery, $preparseresponse);    cms_preparsenqlquery($nqlquery, $preparseresponse);
131    
132    $subsegcount = $preparseresponse[0]['subsegmentcount'];    $subsegcount = count($preparseresponse[1]);//['subsegmentcount'];
133    
134    $querydata = array(    $querydata = array(
135     'query' => $preparseresponse[0]['formattednql'],     'count' => '',
136       'fieldlist' => array(),
137       'first' => '',
138       'get_what' => '',
139       'locked' => '',
140     'operation' => '',     'operation' => '',
141     'getwhat' => '',     'orderby' => '',
142     'source' => ''     'query' => $preparseresponse[0]['formattednql'],
143       'source' => '',
144       'with' => array(),
145    );    );
146    
147    if(!$querydata['query']) {    if(!$querydata['query']) {
# Line 146  $operations = array( Line 152  $operations = array(
152    }    }
153    
154    $subseg = 0;    $subseg = 0;
155    $querydata['operation'] = $preparseresponse[1][$subseg++][0];    $querydata['operation'] = $preparseresponse[1][$subseg][0];
156      $pcount = count($preparseresponse[1][$subseg++]);
157    
158      if($pcount != 1) {
159    
160        $response = cms_create_response('syntax', null, null, $querydata);
161        return false;
162    
163      }
164    
165    if(isset($operations[$querydata['operation']])) {    if(isset($operations[$querydata['operation']])) {
166    
# Line 171  $operations = array( Line 185  $operations = array(
185      case 0: // "GET"      case 0: // "GET"
186    
187        $fieldlist = $preparseresponse[1][$subseg++];        $fieldlist = $preparseresponse[1][$subseg++];
188          $pcount = count($fieldlist);
189    
190        if($subseg == $subsegcount) {        if($subseg == $subsegcount) {
191    
# Line 179  $operations = array( Line 194  $operations = array(
194    
195        }        }
196    
197        $querydata['getwhat'] = $fieldlist[0];        $querydata['get_what'] = $fieldlist[0];
198        $querydata['fieldlist'] = array();        $querydata['fieldlist'] = array();
199    
200        switch($querydata['getwhat']) {        switch($querydata['get_what']) {
201    
202          case 'COUNT':          case 'COUNT':
203          case 'FIELDNAMES':          case 'FIELDNAMES':
204          case '*':          case '*':
205    
206              if($pcount != 1) {
207    
208                $response = cms_create_response('syntax', null, null, $querydata);
209                return false;
210    
211              }
212    
213            break;            break;
214    
215          case 'FROM':          case 'FROM':
# Line 197  $operations = array( Line 219  $operations = array(
219    
220          default:          default:
221    
222            $querydata['fieldlist'] = $fieldlist;//$querydata['getwhat'];            $querydata['fieldlist'] = $fieldlist;
223            $querydata['getwhat'] = 'FIELD';            $querydata['get_what'] = 'FIELD';
 //          $querydata['fieldlist'] = $preparseresponse[1][$subseg++];  
224    
225        }        }
 //else $querydata['getwhat'] = 'FIELD';  
226    
227        $from = $preparseresponse[1][$subseg++][0];        $from = $preparseresponse[1][$subseg][0];
228          $pcount = count($preparseresponse[1][$subseg++]);
229    
230        if($from != 'FROM') {        if($from != 'FROM') {
231    
# Line 213  $operations = array( Line 234  $operations = array(
234    
235        }        }
236    
237          if($pcount != 1) {
238    
239            $response = cms_create_response('syntax', null, null, $querydata);
240            return false;
241    
242          }
243    
244        if($subseg == $subsegcount) {        if($subseg == $subsegcount) {
245    
246          $response = cms_create_response('no_source', null, null, $querydata);          $response = cms_create_response('no_source', null, null, $querydata);
# Line 220  $operations = array( Line 248  $operations = array(
248    
249        }        }
250    
251        $querydata['source'] = $preparseresponse[1][$subseg++][0];        $querydata['source'] = $preparseresponse[1][$subseg][0];
252          $pcount = count($preparseresponse[1][$subseg++]);
253    
254          if($pcount != 1) {
255    
256            $response = cms_create_response('syntax', null, null, $querydata);
257            return false;
258    
259          }
260    
261        if(isset($cms_sources[$querydata['source']])) {        if(isset($cms_sources[$querydata['source']])) {
262    
263          $sourcedata = $cms_sources[$querydata['source']];          $sourcedata = $cms_sources[$querydata['source']];
264          $sourceindex = $sourcedata['index'];  //        $sourceindex = $sourcedata['index'];
265            $sourcefields = $sourcedata['fields'];
266    
267        } else {        } else {
268    
# Line 234  $operations = array( Line 271  $operations = array(
271    
272        }        }
273    
274        if($querydata['getwhat'] == 'FIELDNAMES' || $querydata['getwhat'] == '*') {        if($querydata['get_what'] == 'FIELDNAMES' || $querydata['get_what'] == '*') {
275    
276          $querydata['fieldlist'] = array_keys($sourcedata['fields']);          $querydata['fieldlist'] = array_keys($sourcedata['fields']);
277    
278        }        }
279    
280    $getparamdata = array(
281     'WITH' => '',
282     'FIRST' => '',
283     'COUNT' => '',
284     'ORDERBY' => '',
285     'LOCKED' => '',
286    );
287    //$getparams = array_keys($getparamdata);
288    
289          $currentparam = 0;
290          $paramdata = $getparamdata;
291    
292          while($subseg < $subsegcount) {
293    
294            $segment = $preparseresponse[1][$subseg++];
295            $pcount = count($segment);
296            $param = $segment[0];
297    
298            if($pcount != 1) {
299    
300              $response = cms_create_response('syntax', null, null, $querydata);
301              return false;
302    
303            }
304    
305            if(!isset($paramdata[$param])) {
306    
307              $response = cms_create_response('illegal_param', null, null, $querydata);
308              return false;
309    
310            } else if($paramdata[$param]) {
311    
312              $response = cms_create_response('double_param', null, null, $querydata);
313              return false;
314    
315            }
316    
317            $paramdata[$param] = true;
318    
319            switch($param) {
320    
321              case 'COUNT':
322    
323                if($subseg == $subsegcount) {
324    
325                  $response = cms_create_response('param_value', null, null, $querydata);
326                  return false;
327    
328                }
329    
330                if($subseg == $subsegcount) {
331    
332                  $response = cms_create_response('param_value', null, null, $querydata);
333                  return false;
334    
335                }
336    
337                $segment = $preparseresponse[1][$subseg++];
338                $pcount = count($segment);
339                $count = $segment[0];
340    
341                if($pcount != 1 || !is_numeric($count)) {
342    
343                  $response = cms_create_response('syntax', null, null, $querydata);
344                  return false;
345    
346                }
347    
348                $querydata['count'] = $count;
349    
350                break;
351    
352              case 'FIRST':
353    
354                if($subseg == $subsegcount) {
355    
356                  $response = cms_create_response('param_value', null, null, $querydata);
357                  return false;
358    
359                }
360    
361                if($subseg == $subsegcount) {
362    
363                  $response = cms_create_response('param_value', null, null, $querydata);
364                  return false;
365    
366                }
367    
368                $segment = $preparseresponse[1][$subseg++];
369                $pcount = count($segment);
370                $first = $segment[0];
371    
372                if($pcount != 1 || !is_numeric($first)) {
373    
374                  $response = cms_create_response('syntax', null, null, $querydata);
375                  return false;
376    
377                }
378    
379                $querydata['first'] = $first;
380    
381                break;
382    
383              case 'LOCKED':
384    
385                $querydata['locked'] = true;
386    
387                if($querydata['get_what'] == 'COUNT' || $querydata['get_what'] == 'FIELDNAMES') {
388    
389                  $response = cms_create_response('locked', null, null, $querydata);
390                  return false;
391    
392                }
393    
394                break;
395    
396              case 'ORDERBY':
397    
398                if($subseg == $subsegcount) {
399    
400                  $response = cms_create_response('param_value', null, null, $querydata);
401                  return false;
402    
403                }
404    
405                $segment = $preparseresponse[1][$subseg++];
406                $pcount = count($segment);
407                $fieldname = $segment[0];
408    
409                if($pcount != 1) {
410    
411                  $response = cms_create_response('syntax', null, null, $querydata);
412                  return false;
413    
414                }
415    
416                if(!isset($sourcefields[$fieldname])) {
417    
418                  $response = cms_create_response('illegal_field', null, null, $querydata);
419                  return false;
420    
421                }
422    
423                $querydata['orderby'] = $fieldname;
424    
425                break;
426    
427              case 'WITH':
428    
429                if($subseg == $subsegcount) {
430    
431                  $response = cms_create_response('param_value', null, null, $querydata);
432                  return false;
433    
434                }
435    
436                $segment = $preparseresponse[1][$subseg++];
437                $pcount = count($segment);
438                $fieldname = $segment[0];
439    
440                if($pcount != 1) {
441    
442                  $response = cms_create_response('syntax', null, null, $querydata);
443                  return false;
444    
445                }
446    
447                if(!isset($sourcefields[$fieldname])) {
448    
449                  $response = cms_create_response('illegal_field', null, null, $querydata);
450                  return false;
451    
452                }
453    
454                if($subseg == $subsegcount) {
455    
456                  $response = cms_create_response('param_value', null, null, $querydata);
457                  return false;
458    
459                }
460    
461                $fieldvalues = $preparseresponse[1][$subseg++];
462                array_push($querydata['with'], array($fieldname, $fieldvalues));
463    
464                break;
465    
466            }
467    
468          }
469    
470        return cms_perform_get($querydata, $response);        return cms_perform_get($querydata, $response);
471    
472    }    }
# Line 271  global $cms_sources; Line 498  global $cms_sources;
498    
499    $resultlist = array();    $resultlist = array();
500    
501    if($querydata['getwhat'] == 'COUNT') {    if($querydata['get_what'] == 'COUNT') {
502    
503      $fieldnamelist = array('COUNT');      $fieldnamelist = array('COUNT');
504    
505    }    }
506    
507    if($querydata['getwhat'] == 'FIELDNAMES') {    if($querydata['get_what'] == 'FIELDNAMES') {
508    
509      $resultlist = null;      $resultlist = null;
510    
# Line 285  global $cms_sources; Line 512  global $cms_sources;
512    
513      case 'SOURCES':      case 'SOURCES':
514    
515        if($querydata['getwhat'] == 'COUNT') {        if($querydata['get_what'] == 'COUNT') {
516    
517          $resultlist[0][0] = count($cms_sources);          $resultlist[0][0] = count($cms_sources);
518          break;          break;
# Line 315  global $cms_sources; Line 542  global $cms_sources;
542      // By default the db is used as data source:      // By default the db is used as data source:
543      default:      default:
544    
545        if($querydata['getwhat'] == 'COUNT') {        if($querydata['get_what'] == 'COUNT') {
546    
547          $fieldnames = 'COUNT(id)';          $fieldnames = 'COUNT(id)';
548    
549        }        }
550    
551        $sql = 'SELECT ' . $fieldnames . ' FROM ' . $querydata['source'] . ';';        $limit = (
552           (($querydata['count'] > 0) || ($querydata['first'] != '')) ?
553           ' LIMIT ' . ($querydata['first'] > 0 ? $querydata['first'] - 1 : 0) . ',' .
554           ($querydata['count'] > 0 ? $querydata['count'] : -1) : '');
555    
556          $order = (
557           $querydata['orderby'] != '' ? ' ORDER BY ' . $querydata['orderby'] . ' DESC' : '');
558    
559          $where = '';
560    
561          while(list($i, $item) = each($querydata['with'])) {
562    
563            $values = $item[1];
564    
565            while(list($j, $value) = each($values))
566             $where .= ($j ? ' OR' : '') . ' ' . $item[0] . '=\'' . $value . '\'';
567    
568          }
569    
570          if($where) $where = ' WHERE' . $where;
571    
572          $sql = 'SELECT ' . $fieldnames . ' FROM ' . $querydata['source'] .
573           $where . $order . $limit . ';';
574    
575          #echo $sql;
576    
577        $res = common_dbc_query($sql);        $res = common_dbc_query($sql);
578    
579        //if(!$res) ...        //if(!$res) ...
# Line 399  function cms_preparsenqlquery($nqlquery, Line 651  function cms_preparsenqlquery($nqlquery,
651    
652     array(     array(
653      'formattednql' => $formattednql,      'formattednql' => $formattednql,
654      'subsegmentcount' => $i,  //    'subsegmentcount' => $i,
655      'sublistcount' => $listcount      'sublistcount' => $listcount
656     ),     ),
657    
# Line 411  function cms_preparsenqlquery($nqlquery, Line 663  function cms_preparsenqlquery($nqlquery,
663    
664  //----------------------------------------------------------  //----------------------------------------------------------
665    
666  function cms_create_response($errorkey, $resultlist, $columnnames, $querydata) {  function cms_create_response(
667     $errorkey, $resultlist, $columnnames, $querydata) {
668    
669  //------------------  //------------------
670    
# Line 424  $errors = array( Line 677  $errors = array(
677   'no_query' => array(   'no_query' => array(
678    $i++, 'Empty query',    $i++, 'Empty query',
679   ),   ),
680     'syntax' => array(
681      $i++, 'Query syntax error',
682     ),
683   'illegal_op' => array(   'illegal_op' => array(
684    $i++, 'Illegal base operation',    $i++, 'Illegal base operation',
685   ),   ),
# Line 448  $errors = array( Line 704  $errors = array(
704   'illegal_field' => array(   'illegal_field' => array(
705    $i++, 'Illegal field name for data source',    $i++, 'Illegal field name for data source',
706   ),   ),
707     'illegal_param' => array(
708      $i++, 'Illegal parameter name',
709     ),
710     'double_param' => array(
711      $i++, 'Illegal double parameter',
712     ),
713     'locked' => array(
714      $i++, 'Illegal use of LOCKED parameter',
715     ),
716     'param_value' => array(
717      $i++, 'Parameter value missing',
718     ),
719  );  );
720    
721  //------------------  //------------------
# Line 456  $errors = array( Line 724  $errors = array(
724    
725     // Result information:     // Result information:
726     0 => array(     0 => array(
727        'columncount' => count($columnnames),
728      'error' => $errors[$errorkey][0],      'error' => $errors[$errorkey][0],
729      'errortext' => $errors[$errorkey][1],      'errortext' => $errors[$errorkey][1],
730      'columncount' => count($columnnames),      'firstrow' => $querydata['first'],
731  //    'firstrow' => $firstrow,      'get_what' => $querydata['get_what'],
     'rowcount' => count($resultlist),  
     'query' => $querydata['query'],  
732      'operation' => $querydata['operation'],      'operation' => $querydata['operation'],
733      'get_what' => $querydata['getwhat'],      'query' => $querydata['query'],
734        'rowcount' => count($resultlist),
735      'source' => $querydata['source'],      'source' => $querydata['source'],
736  //    'all' => $querydata      'all' => $querydata
737     ),     ),
738    
739     // Result list:     // Result list:

Legend:
Removed from v.1.6  
changed lines
  Added in v.1.7

MailToCvsAdmin">MailToCvsAdmin
ViewVC Help
Powered by ViewVC 1.1.26 RSS 2.0 feed