2222 3) QXMLSERV -- IBM PTF library (DG1 PTFs)
2323
2424"""
25- import sys
2625import os
27- import re
28- import urllib
29- if sys .version_info >= (3 ,0 ):
30- """
31- urllib has been split up in Python 3.
32- The urllib.urlencode() function is now urllib.parse.urlencode(),
33- and the urllib.urlopen() function is now urllib.request.urlopen().
34- """
35- import urllib .request
36- import urllib .parse
37- import xml .dom .minidom
38- # import inspect
26+
3927try :
4028 import ibm_db
29+ import ibm_db_dbi
4130except ImportError :
4231 pass
4332
@@ -66,38 +55,23 @@ class iDB2Call(object):
6655 Returns:
6756 (obj)
6857 """
69- def __init__ (self , iuid , ipwd = 0 , idb2 = 0 , ictl = 0 , ipc = 0 , isiz = 0 , ilib = 0 ):
70- # manditory
71- self .uid = iuid
72- if not isinstance (self .uid , str ):
73- if ipwd == 0 :
74- ipwd = "*NONE"
75- # optional
76- if ipwd == 0 :
77- self .pwd = os .environ ['PASSWORD' ]
78- else :
79- self .pwd = ipwd
80- if idb2 == 0 :
81- self .db2 = '*LOCAL'
82- else :
83- self .db2 = idb2
84- if ictl == 0 :
85- self .ctl = '*here *cdata'
86- else :
87- self .ctl = ictl
88- if ipc == 0 :
89- self .ipc = '*na'
90- else :
91- self .ipc = ipc
92- if isiz == 0 :
93- self .siz = 512000
94- else :
95- self .siz = isiz
96- if ilib == 0 :
97- self .lib = os .getenv ('XMLSERVICE' ,'QXMLSERV' );
58+ def __init__ (self , iuid = None , ipwd = None , idb2 = '*LOCAL' , ictl = '*here *cdata' , ipc = '*na' , isiz = 512000 , ilib = None ):
59+ if hasattr (iuid , 'cursor' ):
60+ # iuid is a PEP-249 connection object, just store it
61+ self .conn = iuid
62+ elif isinstance (iuid , ibm_db .IBM_DBConnection ):
63+ # iuid is a ibm_db connection object, wrap it in a ibm_db_dbi connection object
64+ self .conn = ibm_db_dbi .Connection (iuid )
9865 else :
99- self .lib = ilib
100-
66+ # user id and password passed, connect using ibm_db_dbi
67+ ipwd = ipwd if ipwd else os .getenv ('PASSWORD' , None )
68+ self .conn = ibm_db_dbi .connect (database = idb2 , user = iuid , password = ipwd )
69+
70+ self .ctl = ictl
71+ self .ipc = ipc
72+ self .siz = isiz
73+ self .lib = ilib if ilib else os .getenv ('XMLSERVICE' , 'QXMLSERV' )
74+
10175 def trace_data (self ):
10276 """Return trace driver data.
10377
@@ -110,12 +84,10 @@ def trace_data(self):
11084 data = ""
11185 data += " ctl (" + str (self .ctl ) + ")"
11286 data += " ipc (" + str (self .ipc ) + ")"
113- data += " uid (" + str (self .uid ) + ")"
114- data += " db2 (" + str (self .db2 ) + ")"
115- data += " siz (" + str (self .siz ) + ")"
87+ data += " siz (" + str (self .siz ) + ") (unused)"
11688 data += " lib (" + str (self .lib ) + ")"
11789 return data
118-
90+
11991 def call (self , itool ):
12092 """Call xmlservice with accumulated input XML.
12193
@@ -125,29 +97,19 @@ def call(self, itool):
12597 Returns:
12698 xml
12799 """
128- if isinstance (self .uid , str ):
129- conn = ibm_db .connect (self .db2 , self .uid , self .pwd )
100+ cursor = self .conn .cursor ()
101+
102+ parms = (self .ipc , self .ctl , itool .xml_in ())
103+
104+ if hasattr (cursor , 'callproc' ):
105+ cursor .callproc (self .lib + ".iPLUGR512K" , parms )
130106 else :
131- conn = self .uid
132- # sql = "call " + self.lib + ".iPLUG512K(?,?,?,?)"
133- sql = "call " + self .lib + ".iPLUGR512K(?,?,?)"
134- stmt = ibm_db .prepare (conn , sql )
135- ipc = self .ipc
136- ctl = self .ctl
137- xml_in = itool .xml_in ()
107+ cursor .execute ("call {}.iPLUGR512K(?,?,?)" .format (self .lib ), parms )
108+
138109 xml_out = ""
139- ibm_db .bind_param (stmt , 1 , ipc , ibm_db .SQL_PARAM_INPUT )
140- ibm_db .bind_param (stmt , 2 , ctl , ibm_db .SQL_PARAM_INPUT )
141- ibm_db .bind_param (stmt , 3 , xml_in , ibm_db .SQL_PARAM_INPUT )
142- # ibm_db.bind_param(stmt, 4, xml_out, ibm_db.SQL_PARAM_OUTPUT)
143- result = ibm_db .execute (stmt )
144- if ( result ):
145- row = ibm_db .fetch_tuple (stmt )
146- while ( row ):
147- for i in row :
148- xml_out += i
149- row = ibm_db .fetch_tuple (stmt )
150- ibm_db .close (conn )
151- return xml_out
152-
153-
110+ for row in cursor :
111+ xml_out += row [0 ]
112+
113+ print (xml_out )
114+ return xml_out .rstrip ('\0 ' )
115+
0 commit comments