27
27
import org .exist .dom .memtree .*;
28
28
import org .exist .util .XMLReaderPool ;
29
29
import org .apache .commons .io .output .UnsynchronizedByteArrayOutputStream ;
30
+ import org .exist .xquery .*;
31
+ import org .exist .xquery .value .*;
30
32
import org .w3c .dom .Element ;
31
33
import org .w3c .dom .Node ;
32
34
import org .w3c .dom .NodeList ;
33
35
34
36
import org .exist .Namespaces ;
35
37
import org .exist .dom .QName ;
36
- import org .exist .xquery .BasicFunction ;
37
- import org .exist .xquery .ErrorCodes ;
38
- import org .exist .xquery .FunctionSignature ;
39
- import org .exist .xquery .XPathException ;
40
- import org .exist .xquery .XQueryContext ;
41
- import org .exist .xquery .value .BooleanValue ;
42
- import org .exist .xquery .value .FunctionParameterSequenceType ;
43
- import org .exist .xquery .value .IntegerValue ;
44
- import org .exist .xquery .value .Sequence ;
45
- import org .exist .xquery .value .Type ;
46
38
47
39
import java .io .IOException ;
48
40
import java .io .PrintStream ;
59
51
import java .sql .Timestamp ;
60
52
import java .sql .Types ;
61
53
62
- import org .exist .xquery .value .DateTimeValue ;
63
54
import org .xml .sax .InputSource ;
64
55
import org .xml .sax .XMLReader ;
65
56
66
57
import javax .annotation .Nullable ;
67
58
68
59
import static java .nio .charset .StandardCharsets .UTF_8 ;
69
60
import static org .exist .xquery .FunctionDSL .*;
70
- import static org .exist .xquery .modules .sql .SQLModule .functionSignatures ;
61
+ import static org .exist .xquery .modules .sql .SQLModule .NAMESPACE_URI ;
62
+ import static org .exist .xquery .modules .sql .SQLModule .PREFIX ;
71
63
72
64
73
65
/**
@@ -215,15 +207,15 @@ public Sequence eval(final Sequence[] args, final Sequence contextSequence) thro
215
207
216
208
private void setParametersOnPreparedStatement (final Statement stmt , final Element parametersElement ) throws SQLException , XPathException {
217
209
final String ns = parametersElement .getNamespaceURI ();
218
- if (ns != null && ns .equals (SQLModule . NAMESPACE_URI ) && parametersElement .getLocalName ().equals (PARAMETERS_ELEMENT_NAME )) {
219
- final NodeList paramElements = parametersElement .getElementsByTagNameNS (SQLModule . NAMESPACE_URI , PARAM_ELEMENT_NAME );
210
+ if (ns != null && ns .equals (NAMESPACE_URI ) && parametersElement .getLocalName ().equals (PARAMETERS_ELEMENT_NAME )) {
211
+ final NodeList paramElements = parametersElement .getElementsByTagNameNS (NAMESPACE_URI , PARAM_ELEMENT_NAME );
220
212
221
213
for (int i = 0 ; i < paramElements .getLength (); i ++) {
222
214
final Element param = ((Element ) paramElements .item (i ));
223
215
Node child = param .getFirstChild ();
224
216
225
217
final int sqlType ;
226
- final String type = param .getAttributeNS (SQLModule . NAMESPACE_URI , TYPE_ATTRIBUTE_NAME );
218
+ final String type = param .getAttributeNS (NAMESPACE_URI , TYPE_ATTRIBUTE_NAME );
227
219
if (type != null ) {
228
220
sqlType = SQLUtils .sqlTypeFromString (type );
229
221
} else {
@@ -239,7 +231,7 @@ private void setParametersOnPreparedStatement(final Statement stmt, final Elemen
239
231
if (child instanceof Element ) {
240
232
// check for <sql:null/>
241
233
final Element elem = (Element )child ;
242
- if ("null" .equals (elem .getLocalName ()) && SQLModule . NAMESPACE_URI .equals (elem .getNamespaceURI ())) {
234
+ if ("null" .equals (elem .getLocalName ()) && NAMESPACE_URI .equals (elem .getNamespaceURI ())) {
243
235
value = null ;
244
236
} else {
245
237
value = child .getNodeValue ();
@@ -280,7 +272,7 @@ private ElementImpl resultAsElement(final boolean makeNodeFromColumnName,
280
272
281
273
builder .startDocument ();
282
274
283
- builder .startElement (new QName ("result" , SQLModule . NAMESPACE_URI , SQLModule . PREFIX ), null );
275
+ builder .startElement (new QName ("result" , NAMESPACE_URI , PREFIX ), null );
284
276
builder .addAttribute (new QName ("count" , null , null ), "-1" );
285
277
builder .addAttribute (new QName ("updateCount" , null , null ), String .valueOf (stmt .getUpdateCount ()));
286
278
@@ -309,7 +301,7 @@ private ElementImpl resultAsElement(final boolean makeNodeFromColumnName,
309
301
final int iColumns = rsmd .getColumnCount ();
310
302
311
303
while (rs .next ()) {
312
- builder .startElement (new QName ("row" , SQLModule . NAMESPACE_URI , SQLModule . PREFIX ), null );
304
+ builder .startElement (new QName ("row" , NAMESPACE_URI , PREFIX ), null );
313
305
builder .addAttribute (new QName ("index" , null , null ), String .valueOf (rs .getRow ()));
314
306
315
307
// get each tuple in the row
@@ -330,7 +322,7 @@ private ElementImpl resultAsElement(final boolean makeNodeFromColumnName,
330
322
colElement = SQLUtils .escapeXmlAttr (columnName .replace (' ' , '_' ));
331
323
}
332
324
333
- builder .startElement (new QName (colElement , SQLModule . NAMESPACE_URI , SQLModule . PREFIX ), null );
325
+ builder .startElement (new QName (colElement , NAMESPACE_URI , PREFIX ), null );
334
326
335
327
if (!makeNodeFromColumnName || columnName .length () <= 0 ) {
336
328
final String name ;
@@ -343,7 +335,7 @@ private ElementImpl resultAsElement(final boolean makeNodeFromColumnName,
343
335
builder .addAttribute (new QName ("name" , null , null ), name );
344
336
}
345
337
346
- builder .addAttribute (new QName (TYPE_ATTRIBUTE_NAME , SQLModule . NAMESPACE_URI , SQLModule . PREFIX ), rsmd .getColumnTypeName (i + 1 ));
338
+ builder .addAttribute (new QName (TYPE_ATTRIBUTE_NAME , NAMESPACE_URI , PREFIX ), rsmd .getColumnTypeName (i + 1 ));
347
339
builder .addAttribute (new QName (TYPE_ATTRIBUTE_NAME , Namespaces .SCHEMA_NS , "xs" ), Type .getTypeName (SQLUtils .sqlTypeToXMLType (rsmd .getColumnType (i + 1 ))));
348
340
349
341
//get the content
@@ -354,7 +346,7 @@ private ElementImpl resultAsElement(final boolean makeNodeFromColumnName,
354
346
355
347
if (rs .wasNull ()) {
356
348
// Add a null indicator attribute if the value was SQL Null
357
- builder .addAttribute (new QName ("null" , SQLModule . NAMESPACE_URI , SQLModule . PREFIX ), "true" );
349
+ builder .addAttribute (new QName ("null" , NAMESPACE_URI , PREFIX ), "true" );
358
350
} else {
359
351
try (final Reader charStream = sqlXml .getCharacterStream ()) {
360
352
final InputSource src = new InputSource (charStream );
@@ -383,7 +375,7 @@ private ElementImpl resultAsElement(final boolean makeNodeFromColumnName,
383
375
384
376
if (rs .wasNull ()) {
385
377
// Add a null indicator attribute if the value was SQL Null
386
- builder .addAttribute (new QName ("null" , SQLModule . NAMESPACE_URI , SQLModule . PREFIX ), "true" );
378
+ builder .addAttribute (new QName ("null" , NAMESPACE_URI , PREFIX ), "true" );
387
379
} else {
388
380
if (colValue != null ) {
389
381
builder .characters (colValue );
@@ -435,23 +427,23 @@ private ElementImpl sqlExceptionAsElement(final SQLException sqle, final String
435
427
final MemTreeBuilder builder = context .getDocumentBuilder ();
436
428
437
429
builder .startDocument ();
438
- builder .startElement (new QName ("exception" , SQLModule . NAMESPACE_URI , SQLModule . PREFIX ), null );
430
+ builder .startElement (new QName ("exception" , NAMESPACE_URI , PREFIX ), null );
439
431
440
432
final boolean recoverable = sqle instanceof SQLRecoverableException ;
441
433
builder .addAttribute (new QName ("recoverable" , null , null ), String .valueOf (recoverable ));
442
434
443
- builder .startElement (new QName ("state" , SQLModule . NAMESPACE_URI , SQLModule . PREFIX ), null );
435
+ builder .startElement (new QName ("state" , NAMESPACE_URI , PREFIX ), null );
444
436
builder .characters (sqle .getSQLState ());
445
437
builder .endElement ();
446
438
447
- builder .startElement (new QName ("message" , SQLModule . NAMESPACE_URI , SQLModule . PREFIX ), null );
439
+ builder .startElement (new QName ("message" , NAMESPACE_URI , PREFIX ), null );
448
440
final String state = sqle .getMessage ();
449
441
if (state != null ) {
450
442
builder .characters (state );
451
443
}
452
444
builder .endElement ();
453
445
454
- builder .startElement (new QName ("stack-trace" , SQLModule . NAMESPACE_URI , SQLModule . PREFIX ), null );
446
+ builder .startElement (new QName ("stack-trace" , NAMESPACE_URI , PREFIX ), null );
455
447
try (final UnsynchronizedByteArrayOutputStream bufStackTrace = new UnsynchronizedByteArrayOutputStream ();
456
448
final PrintStream ps = new PrintStream (bufStackTrace )) {
457
449
sqle .printStackTrace (ps );
@@ -461,25 +453,25 @@ private ElementImpl sqlExceptionAsElement(final SQLException sqle, final String
461
453
}
462
454
builder .endElement ();
463
455
464
- builder .startElement (new QName ("sql" , SQLModule . NAMESPACE_URI , SQLModule . PREFIX ), null );
456
+ builder .startElement (new QName ("sql" , NAMESPACE_URI , PREFIX ), null );
465
457
builder .characters (sql );
466
458
builder .endElement ();
467
459
468
460
if (parametersElement != null ) {
469
461
final String ns = parametersElement .getNamespaceURI ();
470
- if (ns != null && ns .equals (SQLModule . NAMESPACE_URI ) && parametersElement .getLocalName ().equals (PARAMETERS_ELEMENT_NAME )) {
471
- final NodeList paramElements = parametersElement .getElementsByTagNameNS (SQLModule . NAMESPACE_URI , PARAM_ELEMENT_NAME );
462
+ if (ns != null && ns .equals (NAMESPACE_URI ) && parametersElement .getLocalName ().equals (PARAMETERS_ELEMENT_NAME )) {
463
+ final NodeList paramElements = parametersElement .getElementsByTagNameNS (NAMESPACE_URI , PARAM_ELEMENT_NAME );
472
464
473
- builder .startElement (new QName (PARAMETERS_ELEMENT_NAME , SQLModule . NAMESPACE_URI , SQLModule . PREFIX ), null );
465
+ builder .startElement (new QName (PARAMETERS_ELEMENT_NAME , NAMESPACE_URI , PREFIX ), null );
474
466
475
467
for (int i = 0 ; i < paramElements .getLength (); i ++) {
476
468
final Element param = ((Element ) paramElements .item (i ));
477
469
final Node valueNode = param .getFirstChild ();
478
470
final String value = valueNode != null ? valueNode .getNodeValue () : null ;
479
- final String type = param .getAttributeNS (SQLModule . NAMESPACE_URI , TYPE_ATTRIBUTE_NAME );
471
+ final String type = param .getAttributeNS (NAMESPACE_URI , TYPE_ATTRIBUTE_NAME );
480
472
481
- builder .startElement (new QName (PARAM_ELEMENT_NAME , SQLModule . NAMESPACE_URI , SQLModule . PREFIX ), null );
482
- builder .addAttribute (new QName (TYPE_ATTRIBUTE_NAME , SQLModule . NAMESPACE_URI , SQLModule . PREFIX ), type );
473
+ builder .startElement (new QName (PARAM_ELEMENT_NAME , NAMESPACE_URI , PREFIX ), null );
474
+ builder .addAttribute (new QName (TYPE_ATTRIBUTE_NAME , NAMESPACE_URI , PREFIX ), type );
483
475
builder .characters (value );
484
476
builder .endElement ();
485
477
}
@@ -488,7 +480,7 @@ private ElementImpl sqlExceptionAsElement(final SQLException sqle, final String
488
480
}
489
481
}
490
482
491
- builder .startElement (new QName ("xquery" , SQLModule . NAMESPACE_URI , SQLModule . PREFIX ), null );
483
+ builder .startElement (new QName ("xquery" , NAMESPACE_URI , PREFIX ), null );
492
484
builder .addAttribute (new QName ("line" , null , null ), String .valueOf (getLine ()));
493
485
builder .addAttribute (new QName ("column" , null , null ), String .valueOf (getColumn ()));
494
486
builder .endElement ();
@@ -501,4 +493,8 @@ private ElementImpl sqlExceptionAsElement(final SQLException sqle, final String
501
493
context .popDocumentContext ();
502
494
}
503
495
}
496
+
497
+ private static FunctionSignature [] functionSignatures (final String name , final String description , final FunctionReturnSequenceType returnType , final FunctionParameterSequenceType [][] variableParamTypes ) {
498
+ return FunctionDSL .functionSignatures (new QName (name , NAMESPACE_URI , PREFIX ), description , returnType , variableParamTypes );
499
+ }
504
500
}
0 commit comments