Subversion Repository Public Repository

litesoft

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
// This Source Code is in the Public Domain per: http://litesoft.org/License.txt
package org.litesoft.sql;

import java.sql.*;

import org.litesoft.db.*;

public class SQLProductSpecificHelperOracle extends SQLProductSpecificAbstractHelper
{
    /**
     * @param pProductVersion       - Of The DataBase
     * @param pTableName            - Of the Schema's Table Name
     * @param pSelectColumns        - Of the Table (comma separated)
     * @param pSelectionWhereClause - null means all
     * @param pOrderBy              - null means order immaterial
     * @param pOffset               - Rows to Skip (>= 0 verified)
     * @param pLimit                - Max Rows to return (>= 1 verified) @return !Null
     */
    @Override
    public String buildQuery( String pProductVersion, String pTableName, //
                              String pSelectColumns, String pSelectionWhereClause, String pOrderBy, //
                              long pOffset, int pLimit )
    {
        String innerSelect = "SELECT * FROM " + pTableName + //
                             " " + pSelectionWhereClause + //
                             " " + pOrderBy;
        if ( pOffset == 0 )
        {
            return "SELECT" + //
                   " " + pSelectColumns + //
                   " FROM (" + innerSelect + ") WHERE ROWNUM <= " + pLimit; //   ROWNUM is 1 based
        }
        return "SELECT" + //
               " " + pSelectColumns + //
               " FROM " + //                                                    ROWNUM is 1 based
               "    (SELECT ROWNUM zOurTempRowNum, a.* FROM (" + innerSelect + ") a" + //
               "        WHERE ROWNUM <= " + (pOffset + pLimit) + ")" + //
               " WHERE zOurTempRowNum > " + pOffset;

        //SELECT * FROM
        //    (SELECT a.*, ROWNUM RNUM FROM
        //        (SELECT * FROM table WHERE blah = 2 ORDER BY thing1, thing2) a
        //      WHERE ROWNUM <= 150)
        //    WHERE RNUM >= 101

        // also suggested:

        //Select * from mytable where rownum<=15 minus select * from mytable where rownum<=10
    }

    @Override
    public boolean validateConnection( Connection pConnection, DBinfo pDBinfo )
            throws SQLException
    {
        return LLvalidateConWith( pConnection, //
                                  "SELECT count(0) FROM DUAL" );
    }

    @Override
    public boolean tableExists( Connection pConnection, DBinfo pDBinfo, String pTableName )
            throws SQLException, MultipleTablesException
    {
        return LLtableExists( pConnection, pDBinfo, pTableName, //
                              "SELECT count(0) FROM " + pTableName );
    }

    @Override
    public boolean columnExists( Connection pConnection, DBinfo pDBinfo, String pTableName, String pColumnName )
            throws SQLException, MultipleTablesException
    {
        return LLcolumnExists( pConnection, pDBinfo, pTableName, pColumnName,  //
                               "SELECT count(" + pColumnName + ") FROM " + pTableName );
    }
}

Commits for litesoft/trunk/Java/core/Server/src/org/litesoft/sql/SQLProductSpecificHelperOracle.java

Diff revisions: vs.
Revision Author Commited Message
151 Diff Diff GeorgeS picture GeorgeS Thu 17 Mar, 2011 04:16:22 +0000
49 Diff Diff GeorgeS picture GeorgeS Mon 12 Apr, 2010 02:59:10 +0000

License Text

24 Diff Diff GeorgeS picture GeorgeS Wed 24 Feb, 2010 01:51:38 +0000
2 GeorgeS picture GeorgeS Sun 07 Feb, 2010 12:50:58 +0000