]> source.dussan.org Git - vaadin-framework.git/blob
661045ddefc2d358683d9b0762b7bbf289e719ca
[vaadin-framework.git] /
1 /*
2  * Copyright 2000-2018 Vaadin Ltd.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5  * use this file except in compliance with the License. You may obtain a copy of
6  * the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13  * License for the specific language governing permissions and limitations under
14  * the License.
15  */
16 package com.vaadin.v7.data.util.sqlcontainer.query.generator;
17
18 import java.util.List;
19
20 import com.vaadin.v7.data.Container.Filter;
21 import com.vaadin.v7.data.util.sqlcontainer.query.OrderBy;
22 import com.vaadin.v7.data.util.sqlcontainer.query.generator.filter.QueryBuilder;
23
24 /**
25  * @deprecated As of 8.0, no replacement available.
26  */
27 @SuppressWarnings("serial")
28 @Deprecated
29 public class OracleGenerator extends DefaultSQLGenerator {
30
31     public OracleGenerator() {
32
33     }
34
35     public OracleGenerator(
36             Class<? extends StatementHelper> statementHelperClazz) {
37         super(statementHelperClazz);
38     }
39
40     /**
41      * Construct an OracleSQLGenerator with the specified identifiers for start
42      * and end of quoted strings. The identifiers may be different depending on
43      * the database engine and it's settings.
44      *
45      * @param quoteStart
46      *            the identifier (character) denoting the start of a quoted
47      *            string
48      * @param quoteEnd
49      *            the identifier (character) denoting the end of a quoted string
50      */
51     public OracleGenerator(String quoteStart, String quoteEnd) {
52         super(quoteStart, quoteEnd);
53     }
54
55     public OracleGenerator(String quoteStart, String quoteEnd,
56             Class<? extends StatementHelper> statementHelperClazz) {
57         super(quoteStart, quoteEnd, statementHelperClazz);
58     }
59
60     /*
61      * (non-Javadoc)
62      *
63      * @see com.vaadin.addon.sqlcontainer.query.generator.DefaultSQLGenerator#
64      * generateSelectQuery(java.lang.String, java.util.List,
65      * com.vaadin.addon.sqlcontainer.query.FilteringMode, java.util.List, int,
66      * int, java.lang.String)
67      */
68     @Override
69     public StatementHelper generateSelectQuery(String tableName,
70             List<Filter> filters, List<OrderBy> orderBys, int offset,
71             int pagelength, String toSelect) {
72         if (tableName == null || tableName.trim().equals("")) {
73             throw new IllegalArgumentException("Table name must be given.");
74         }
75         /* Adjust offset and page length parameters to match "row numbers" */
76         offset = pagelength > 1 ? ++offset : offset;
77         pagelength = pagelength > 1 ? --pagelength : pagelength;
78         toSelect = toSelect == null ? "*" : toSelect;
79         StatementHelper sh = getStatementHelper();
80         StringBuffer query = new StringBuffer();
81
82         /* Row count request is handled here */
83         if ("COUNT(*)".equalsIgnoreCase(toSelect)) {
84             query.append(String.format(
85                     "SELECT COUNT(*) AS %s FROM (SELECT * FROM %s",
86                     QueryBuilder.quote("rowcount"), tableName));
87             if (filters != null && !filters.isEmpty()) {
88                 query.append(
89                         QueryBuilder.getWhereStringForFilters(filters, sh));
90             }
91             query.append(')');
92             sh.setQueryString(query.toString());
93             return sh;
94         }
95
96         /* SELECT without row number constraints */
97         if (offset == 0 && pagelength == 0) {
98             query.append("SELECT ").append(toSelect).append(" FROM ")
99                     .append(tableName);
100             if (filters != null) {
101                 query.append(
102                         QueryBuilder.getWhereStringForFilters(filters, sh));
103             }
104             if (orderBys != null) {
105                 for (OrderBy o : orderBys) {
106                     generateOrderBy(query, o, orderBys.indexOf(o) == 0);
107                 }
108             }
109             sh.setQueryString(query.toString());
110             return sh;
111         }
112
113         /* Remaining SELECT cases are handled here */
114         query.append(String.format(
115                 "SELECT * FROM (SELECT x.*, ROWNUM AS %s FROM (SELECT %s FROM %s",
116                 QueryBuilder.quote("rownum"), toSelect, tableName));
117         if (filters != null) {
118             query.append(QueryBuilder.getWhereStringForFilters(filters, sh));
119         }
120         if (orderBys != null) {
121             for (OrderBy o : orderBys) {
122                 generateOrderBy(query, o, orderBys.indexOf(o) == 0);
123             }
124         }
125         query.append(String.format(") x) WHERE %s BETWEEN %d AND %d",
126                 QueryBuilder.quote("rownum"), offset, offset + pagelength));
127         sh.setQueryString(query.toString());
128         return sh;
129     }
130
131 }