Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   *  Copyright 2009-2014 Pavel Ponec
   *
   *  Licensed under the Apache License, Version 2.0 (the "License");
   *  you may not use this file except in compliance with the License.
   *  You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
  *  Unless required by applicable law or agreed to in writing, software
  *  distributed under the License is distributed on an "AS IS" BASIS,
  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
 
 package org.ujorm.orm.metaModel;
 
 import org.ujorm.Key;
Contains a SQL statement for a UJO view user SELECT.

Author(s):
Ponec
 
 final public class MetaSelect extends AbstractMetaModel {
     private static final Class<MetaSelectCLASS = MetaSelect.class;

    
Schema variable is replaced for a real schema name.
 
     public static final String SCHEMA = "${SCHEMA}";

    
Logger
 
     private static final UjoLogger LOGGER = UjoLoggerFactory.getLogger(MetaSelect.class);

    
Property Factory
 
     private static final KeyFactory<MetaSelectfa = KeyFactory.CamelBuilder.get();
     public static final Key<MetaSelect,StringSELECT = .newKey("SELECT "   , "");
     public static final Key<MetaSelect,StringFROM   = .newKey(" FROM "    , "");
     public static final Key<MetaSelect,StringWHERE  = .newKey(" WHERE "   , "");
     public static final Key<MetaSelect,StringGROUP  = .newKey(" GROUP BY """);
     public static final Key<MetaSelect,StringORDER  = .newKey(" ORDER BY """);
     public static final Key<MetaSelect,StringLIMIT  = .newKey(" LIMIT "   , "");
     public static final Key<MetaSelect,StringOFFSET = .newKey(" OFFSET "  , "");

    
The key initialization
 
     static{.lock();}
 
     private static String END_CHAR = ";";

    
Constructor.

Parameters:
select SQL SELECT, the sample of the parameter
SELECT DISTINCT size(*) as itemCount, ord.id as id FROM order ord, item itm WHERE ord.id=itm.orderId GROUP BY ord.id ;
 
     public MetaSelect(String selectString schema) {
         parse(modifySchema(selectschema));
     }
 
     public MetaSelect(MetaTable view) {
         this..of(view)
             , ..of(view)
             ) ;
     }

    
Replace Schema for value
 
     private String modifySchema(String selectString schema) {
         int j=0, i=select.indexOf();
         if (i<0) {
             return select;
         }
         final boolean emptySchema = ..getDefault().equals(schema);
         final StringBuilder sb = new StringBuilder(select.length()+3);
 
         while (i>=0) {
             final boolean constant = i>0 && select.charAt(i-1)=='\\';
             if (constant) {
                 sb.append(select.substring(ji-1));
                 sb.append();
             } else {
                 sb.append(select.substring(ji));
                 sb.append(schema);
             }
 
             j = i + .length();
             if (emptySchema && select.charAt(j)=='.' && !constant) {
                 ++j;
             }
             i = select.indexOf(j);
         }
         sb.append(select.substring(j));
         return sb.toString();
    }

    
Parse the SQL SELECT.
    private void parse(String select) {
        String orig = select.trim();
        select = orig.toUpperCase();
        int i = select.length();
        int xi = -1;
        if (select.endsWith()) {
            i -= .length();
            select = select.substring(i);
        }
        KeyList props = readKeys();
        Key px = props.get(0); // SELECT
        for (int j=0, max=props.size()-1; j<=max; ++j) {
            final Key p = props.get(j);
            final boolean fromLeft = p.getIndex() <= .getIndex();
            i = fromLeft
              ? select.indexOf(p.getName(), xi)
              : select.lastIndexOf(p.getName())
              ;
            if (xi < i) {
                if (j>.getIndex()) {
                    final String value = orig.substring(xii).trim();
                    writeValue(pxvalue);
                    px = p;
                }
                xi = i + p.getName().length();
            }
            if (j==max) {
                final String value = orig.substring(xi).trim();
                writeValue(pxvalue);
            }
        }
        if (.isLoggable(.)) {
            final String msg = getClass().getSimpleName() + ": " + toString();
            .log(.msg);
        }
    }

    
Returns a select.
    @Override
    @SuppressWarnings("unchecked")
    public String toString() {
        final StringBuilder r = new StringBuilder(128);
        for (Key p : readKeys()) {
            String value = (Stringp.of(this);
            if (value.length()>0) {
                r.append(p);
                r.append(value);
            }
        }
        return r.toString();
    }
New to GrepCode? Check out our FAQ X