/* * #! * Ontopia Engine * #- * Copyright (C) 2001 - 2013 The Ontopia Project * #- * 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 net.ontopia.persistence.query.sql; import java.util.Map; /** * INTERNAL: MySQL SQL statement generator. */ public class MySQLGenerator extends GenericSQLGenerator { MySQLGenerator(Map properties) { super(properties); } // TODO: string = operations are case-insensitive. they should not // be. cast expression to 'binary L = R'. public void fromSubSelectAlias(StringBuilder sql, BuildInfo info) { // sub-SELECT in FROM must have an alias. // For example, FROM (SELECT ...) [AS] foo sql.append(" as FOOBAR"); } protected StringBuilder createOffsetLimitClause(int offset, int limit, BuildInfo info) { // NOTE: offset supported in versions > 4.0 // LIMIT x OFFSET y clause if (limit > 0 && offset > 0) { StringBuilder sb = new StringBuilder(); sb.append(" limit ").append(offset).append(", ").append(limit); return sb; } else if (limit > 0) { StringBuilder sb = new StringBuilder(); sb.append(" limit ").append(limit); return sb; // else if (offset > 0) // NOTE: does not work with MySQL // sql_order_by.append(" limit ").append(limit); } else { return null; } } }