@@ -408,102 +408,22 @@ private ServiceResponse list(Class c, ServiceRequest request, Database database)
408408 }
409409
410410
411- //Build sql string
412- StringBuilder sql = new StringBuilder ("select " );
413- Field [] fields = request .getFields ();
414- if (fields ==null || fields .length ==0 ) sql .append ("*" );
415- else {
416- for (int i =0 ; i <fields .length ; i ++){
417- if (i >0 ) sql .append ("," );
418- Field field = fields [i ];
419- String fieldName = field .toString ();
420- if (field .isFunction ()){
421- sql .append (fieldName );
422- }
423- else {
424- fieldName = StringUtils .camelCaseToUnderScore (fieldName );
425- sql .append (tableName + "." + fieldName );
426- }
427- }
428- }
429-
411+ //Compile SQL statement
412+ StringBuilder sql = new StringBuilder ();
413+ sql .append (request .getSelectStatement (tableName ));
430414 sql .append (" from " );
431415 sql .append (tableName );
432-
433-
434416 String where = getWhere (request , tablesAndFields );
435417 if (where !=null ){
436418 sql .append (" where " );
437419 sql .append (where );
438420 }
421+ sql .append (request .getOrderByStatement ());
422+ sql .append (request .getOffsetLimitStatement (database .getDriver ()));
423+ //console.log(sql);
439424
440425
441- //Add order by clause
442- Sort sort = request .getSort ();
443- if (!sort .isEmpty ()){
444- sql .append (" order by " );
445- java .util .Iterator <String > it = sort .getKeySet ().iterator ();
446- while (it .hasNext ()){
447- String colName = it .next ();
448- String direction = sort .get (colName );
449- sql .append (colName );
450- sql .append (" " );
451- sql .append (direction );
452- if (it .hasNext ()) sql .append ("," );
453- }
454- }
455-
456-
457- //Get offset
458- Object offset = request .getOffset ();
459- if (offset !=null ){
460- StringBuilder str = new StringBuilder ();
461- str .append (" offset " );
462- str .append (offset );
463-
464- if (database .getDriver ().equals ("Oracle" )){
465- str .append (" rows" ); //OFFSET 20 ROWS
466- }
467-
468- offset = str .toString ();
469- }
470- else {
471- offset = "" ;
472- }
473-
474-
475- //Get limit
476- Object limit = request .getLimit ();
477- if (limit !=null ){
478- StringBuilder str = new StringBuilder ();
479- if (database .getDriver ().equals ("Oracle" )){
480- str .append (" fetch next " );
481- str .append (limit );
482- str .append (" only" );
483- }
484- else { //PostgreSQL and H2
485- str .append (" limit " );
486- str .append (limit );
487- }
488-
489- limit = str .toString ();
490- }
491- else {
492- limit = "" ;
493- }
494-
495-
496- //Append offset and limit
497- if (database .getDriver ().equals ("H2" )){
498- sql .append (limit );
499- sql .append (offset );
500- }
501- else {
502- sql .append (offset );
503- sql .append (limit );
504- }
505-
506-
426+ //Get output format
507427 String format = request .getParameter ("format" ).toString ();
508428 if (format ==null ) format = "" ; else format = format .toLowerCase ();
509429
0 commit comments