Subversion Repositories DevTools

Rev

Rev 5957 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
5058 dpurdie 1
<%@LANGUAGE="VBSCRIPT"%>
2
<%
3
'=====================================================
4
'       sdk_details_json.asp
5
'       Ajax support for table of SDK Content
6
'       Designed to be driven by the jquery tablescroller
7
'       Uses DataTables 1.10 format data
8
'=====================================================
9
%>
10
<%
11
Option explicit
12
' Essential to get UTF through all the hoops. ie: VÄSTTRAFIK (VTK)
13
Response.ContentType = "text/html"
14
Response.AddHeader "Content-Type", "text/html;charset=UTF-8"
15
Response.CodePage = 65001
16
Response.CharSet = "UTF-8"
17
%>
18
<!--#include file="common/conf.asp"-->
19
<!--#include file="common/globals.asp"-->
20
<!--#include file="common/qstr.asp"-->
21
<!--#include file="common/common_subs.asp"-->
22
<SCRIPT LANGUAGE="VBScript" RUNAT=SERVER SRC="class/classaspJSON.vbs"></SCRIPT> 
23
<%
24
'------------ Variable Definition -------------
25
Dim result : result = -1
26
Dim SqlQry
27
Dim rsQry
28
Dim sdktag_id : sdktag_id = Request("sdktag_id")
29
Dim sdk_reftag_id : sdk_reftag_id = Request("sdk_reftag_id") : if sdk_reftag_id = "" Then sdk_reftag_id = 0
30
Dim sdk_statefilter : sdk_statefilter = Request("sdk_statefilter")
5751 dpurdie 31
Dim sdk_difffilter : sdk_difffilter = Request("sdk_difffilter")
5058 dpurdie 32
 
33
' Init the output JSON class
34
'   Operations can add data
35
'   Default data will be added at the end
36
Dim oJSON :Set oJSON = New aspJSON
37
Dim newitem
38
 
39
'
40
' Determine the size of the record set
5751 dpurdie 41
'   Gives bad results when searching or with diff filter
5058 dpurdie 42
Dim MaxCount : MaxCount = 0
43
 
44
SqlQry = "select count(*) as count from SDK_CONTENT skc where SDKTAG_ID = '" & sdktag_id &"'"
45
If sdk_statefilter Then
46
    SqlQry = SqlQry & " AND skc.sdkpkg_state in ('E')"
47
End If
48
 
49
On Error Resume Next
50
objEH.ErrorRedirect = FALSE
51
objEH.TryORA ( OraSession )
52
Set rsQry = OraDatabase.DbCreateDynaset( SqlQry, ORADYN_DEFAULT )
53
objEH.CatchORA ( OraSession )
54
    If ((NOT rsQry.BOF) AND (NOT rsQry.EOF)) Then
55
        MaxCount = rsQry("COUNT")
56
    End If
57
rsQry.Close
58
Set rsQry = Nothing
59
 
60
' Basic Header
61
'   iTotalRecords = total records without any filtering/limits
62
'   iTotalDisplayRecords = filtered result count
63
 
64
oJSON.data("draw") = CInt(Request.QueryString("draw"))
65
oJSON.data("recordsTotal") = MaxCount
6583 dpurdie 66
'oJSON.data("recordsFiltered") = MaxCount
5058 dpurdie 67
 
68
Dim vName
69
for each vName in Request.QueryString
70
    oJSON.data("sReq_" & vName) = Request.QueryString(vName)
71
next
72
 
73
' Extract selected range
74
result = 0
75
dim firstRow,lastRow
76
firstRow = CInt(Request.QueryString("start"))
77
lastRow = firstRow + CInt(Request.QueryString("length"))
78
 
79
'
80
'   Define array of colums to sort by
81
'       Must match user sort column request
82
Dim sortCols: sortCols = Array ( _
83
        "pv_id", _
84
        "UPPER(pkg_name)", _
85
        "UPPER(pkg_version)", _
86
        "UPPER(ref_pkg_version)", _
87
        "UPPER(NVL(ref_sdkpkg_state,'-'))" , _
88
        "UPPER(NVL(sdkpkg_state,'-'))" )
89
 
90
' Dim determine sorting options
91
'   Sort by specified colum
92
'   Then sort by package name
93
'   Default - sort by package name
94
Dim sortString
95
Dim sortJoin : sortJoin = " ORDER BY "
96
If Request.QueryString("order[0][column]") <> "" Then
97
 
98
    Dim sortCol : sortCol = CInt(Request.QueryString("order[0][column]"))
99
    Dim sortDir : sortDir = " " & Request.QueryString("order[0][dir]")
100
 
101
    sortString = sortJoin & sortCols(sortCol)
102
    sortString = sortString & sortDir
103
    sortJoin = ","
104
 
105
    If sortCol <> 1 Then
106
        sortString = sortString &sortJoin & sortCols(CInt(1))& sortDir
107
    End If
108
Else
109
    sortString = sortJoin & sortCols(CInt(1)) & " asc"
110
End If
111
 
112
' Filter (search )
113
'   Filter by search string
114
'   Filter by state
115
Dim searchJoin : searchJoin = " WHERE "
116
Dim searchString : searchString = ""
117
If Request.QueryString("search[value]") <> "" Then
118
    searchString = searchJoin & "upper(pkg_name) || '_' || UPPER(pkg_version) LIKE upper('%" & Request.QueryString("search[value]") & "%')" 
119
    searchJoin = " AND "
120
End If
121
 
122
If sdk_statefilter Then
5765 dpurdie 123
    searchString = searchString & searchJoin & "(sdkpkg_state in ('E') OR REF_SDKPKG_STATE in ('E'))"
5751 dpurdie 124
    searchJoin = " AND "
5058 dpurdie 125
End If
126
 
5751 dpurdie 127
If sdk_difffilter Then
128
    searchString = searchString & searchJoin & "diff != 0"
129
End If
130
 
5058 dpurdie 131
Dim BasicSql
132
BasicSql =  "SELECT * from (" &_
133
            "SELECT  " &_
134
            "A.PV_ID," &_
135
            "NVL(A.PKG_NAME, B.PKG_NAME) as PKG_NAME," &_
136
            "A.PKG_VERSION," &_
137
            "B.PKG_VERSION as REF_PKG_VERSION," &_
138
            "A.sdkpkg_state," &_
5751 dpurdie 139
            "B.sdkpkg_state as REF_SDKPKG_STATE," &_
140
            "CASE " &_
141
            "  WHEN "& sdk_reftag_id &" = 0 THEN 0 " &_
142
            "  WHEN A.PV_ID is null THEN 1 " &_
143
            "  WHEN B.PV_ID is null THEN 2 " &_
144
            "  WHEN A.PKG_VERSION != B.PKG_VERSION THEN 3 " &_
145
            "  WHEN A.sdkpkg_state != B.sdkpkg_state THEN 4 " &_
146
            "  ELSE 0 " &_
147
            " END AS diff " &_
5058 dpurdie 148
            " FROM " &_
149
            "(SELECT p.pkg_name || pv.v_ext as mname," &_
150
            "  sc.pv_id," &_
151
            "  p.pkg_name," &_
152
            "  pv.pkg_version," &_
153
            "  sc.sdkpkg_state" &_
154
            " FROM SDK_CONTENT SC ," &_
155
            "  PACKAGE_VERSIONS pv," &_
156
            "  PACKAGES p" &_
157
            " WHERE sc.sdktag_id = " & sdktag_id  &_
158
            " AND pv.pv_id       = sc.pv_id" &_
159
            " AND p.pkg_id       = pv.pkg_id" &_
160
            ") A" &_
161
            " FULL OUTER JOIN" &_
162
            "(" &_
163
            "SELECT p.pkg_name || pv.v_ext as mname," &_
164
            "  sc.pv_id," &_
165
            "  p.pkg_name," &_
166
            "  pv.pkg_version," &_
167
            "  sc.sdkpkg_state" &_
168
            " FROM SDK_CONTENT SC ," &_
169
            "  PACKAGE_VERSIONS pv," &_
170
            "  PACKAGES p" &_
171
            " WHERE sc.sdktag_id = " & sdk_reftag_id &_
172
            " AND pv.pv_id       = sc.pv_id" &_
173
            " AND p.pkg_id       = pv.pkg_id" &_
174
            " ) B" &_
175
            " ON A.mname = B.mname)" &_
176
            searchString &_
177
            sortString
178
 
179
SqlQry = "select * from ( "&_
180
            "select a.*, ROWNUM rnum from (" & BasicSql &_
181
                ") a where ROWNUM <= " & lastRow &_
182
            ") where rnum >= " & firstRow
6583 dpurdie 183
'
184
'   Perform a query without pagination
185
'   Assume the record set is small enough that it won't impact speed
186
'
187
'
188
' Determine the size of the record set
189
'   Gives bad results when searching
190
Dim SqlCount: SqlCount = "select count(*) as count from (" & BasicSql & ")"
191
On Error Resume Next
192
objEH.ErrorRedirect = FALSE
193
objEH.TryORA ( OraSession )
194
Set rsQry = OraDatabase.DbCreateDynaset( SqlCount, ORADYN_DEFAULT )
195
objEH.CatchORA ( OraSession )
196
    If ((NOT rsQry.BOF) AND (NOT rsQry.EOF)) Then
197
        MaxCount = rsQry("COUNT")
198
    End If
199
rsQry.Close
200
Set rsQry = Nothing
201
' Basic Header
202
'   iTotalRecords = total records without any filtering/limits
203
'   iTotalDisplayRecords = filtered result count
204
'oJSON.data("recordsTotal") = MaxCount
205
oJSON.data("recordsFiltered") = MaxCount
5058 dpurdie 206
 
207
' Assist in debug
208
oJSON.data("BasicSql") = BasicSql
209
'oJSON.data("SqlQry") = SqlQry
210
 
211
' Perform the database query
212
Set oJSON.data("aaData") = oJSON.Collection()
213
On Error Resume Next
214
objEH.ErrorRedirect = FALSE
215
objEH.TryORA ( OraSession )
216
Set rsQry = OraDatabase.DbCreateDynaset( SqlQry, ORADYN_DEFAULT )
217
objEH.CatchORA ( OraSession )
218
' Process each row and return required fields to the user
219
If objEH.Finally Then
220
On Error goto 0
221
 
222
    While (NOT rsQry.BOF) AND (NOT rsQry.EOF)
223
        Set newitem = oJSON.AddToCollection(oJSON.data("aaData"))
224
        Dim ii
225
        for ii = 0 to rsQry.Fields.Count - 2
226
            newitem (rsQry.FieldName(ii)) = rsQry.Fields(ii)
227
            'newitem (ii) = rsQry.Fields(ii)
228
        Next
229
       rsQry.MoveNext
230
    Wend
231
End IF
232
 
233
rsQry.Close
234
Set rsQry = Nothing
235
 
236
'
237
' SQL error detection and reporting
238
'   The content of 'error' will be dsplayed to the user.
239
If objEH.LastOraFailed Then
240
    oJSON.data("error") = objEH.MessageSummary
241
    oJSON.data("emsgDetails") = objEH.MessageDetails
242
    oJSON.data("SqlQry") = SqlQry
243
End If
244
 
245
'Return the object
246
Response.Write oJSON.JSONoutput()
5957 dpurdie 247
Set oJSON = Nothing
248
Call Destroy_All_Objects
5058 dpurdie 249
%>