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
75
76
77
78
79
80
81
82
83
84
85
86
// 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 SQLProductSpecificHelperMicrosoft_SQL_Server extends SQLProductSpecificAbstractHelper
{
    private int extractMajorVersion( String pProductVersion )
    {
        if ( pProductVersion.startsWith( "9." ) )
        {
            return 9;
        }
        int at = pProductVersion.indexOf( '.' );
        switch ( at )
        {
            case -1:
                break;
            case 0:
                return -1;
            default:
                pProductVersion = pProductVersion.substring( at );
                break;
        }
        try
        {
            return Integer.parseInt( pProductVersion );
        }
        catch ( NumberFormatException e )
        {
            return -1;
        }
    }

    /**
     * @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 )
    {
        if ( extractMajorVersion( pProductVersion ) < 9 )
        {
            throw new UnsupportedOperationException( "Microsoft SQL Server version " + pProductVersion + " does NOT support OFFSET &/ LIMIT or the ROW_NUMBER() function.  You must use a stored procedure!" );
        }
        return "SELECT" + //
               " " + pSelectColumns + //
               " FROM " + //                                                    ROWNUM is 1 based
               "   (SELECT ROW_NUMBER() OVER(" + pOrderBy + ") AS zOurTempRowNum, * FROM " + pTableName + " " + pSelectionWhereClause + ") a" + //
               "      WHERE zOurTempRowNum > " + pOffset + " AND zOurTempRowNum <= " + (pOffset + pLimit) + //
               "      ORDER BY zOurTempRowNum";
    }

    @Override
    public boolean validateConnection( Connection pConnection, DBinfo pDBinfo )
            throws SQLException
    {
        return LLvalidateConWith( pConnection, //
                                  "SELECT TOP 1 1 AS Yup FROM sysobjects WHERE xtype='S'" );
    }

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

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

Commits for litesoft/trunk/Java/core/Server/src/org/litesoft/sql/SQLProductSpecificHelperMicrosoft_SQL_Server.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