# HG changeset patch
# User devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
# Date 1196459066 18000
# Node ID 8fa146b9a2d7abb4b849aa74392d830d93cf123d
# Parent 9c87fa772ec19a51b5037ea14e908c1c28d7cba1
reworking multiline
diff -r 9c87fa772ec1 -r 8fa146b9a2d7 mysqlpy.py
--- a/mysqlpy.py Fri Nov 30 13:04:51 2007 -0500
+++ b/mysqlpy.py Fri Nov 30 16:44:26 2007 -0500
@@ -138,6 +138,7 @@
print '\nSelected Max Num rows (%d)' % self.rc
except Exception, e:
print e
+
def do_sql(self,args):
'''prints sql statement give the sql_id (Oracle 10gR2)'''
diff -r 9c87fa772ec1 -r 8fa146b9a2d7 sqlpyPlus.py
--- a/sqlpyPlus.py Fri Nov 30 13:04:51 2007 -0500
+++ b/sqlpyPlus.py Fri Nov 30 16:44:26 2007 -0500
@@ -266,11 +266,13 @@
sqlpython.sqlpython.__init__(self)
self.binds = CaselessDict()
self.sqlBuffer = []
+ self.history = []
self.settable = ['maxtselctrows', 'maxfetch', 'autobind', 'failover', 'timeout'] # settables must be lowercase
self.stdoutBeforeSpool = sys.stdout
self.spoolFile = None
self.autobind = False
self.failover = False
+ self.singleline = '''desc describe'''.split()
def default(self, arg, do_everywhere=False):
sqlpython.sqlpython.default(self, arg, do_everywhere)
@@ -305,6 +307,7 @@
interpreted, but after the input prompt is generated and issued.
Makes commands case-insensitive (but unfortunately does not alter command completion).
"""
+ '''
savestdout = sys.stdout
pipefilename = 'sqlpython.pipeline.tmp'
pipedCommands = pipeSeparator.separate(line)
@@ -317,13 +320,17 @@
f.close()
sys.stdout = savestdout
os.system('%s < %s' % (pipedCommands[1], pipefilename))
+ '''
try:
args = line.split(None,1)
args[0] = args[0].lower()
- return ' '.join(args)
+ statement = ' '.join(args)
+ if args[0] not in self.singleline:
+ statement = finishStatement(statement)
+ return statement
except Exception:
return line
-
+
def do_shortcuts(self,arg):
"""Lists available first-character shortcuts
(i.e. '!dir' is equivalent to 'shell dir')"""
@@ -364,15 +371,17 @@
def output_as_html_table(self):
result = ''.join('
%s | ' % c for c in self.colnames)
result = [' \n %s\n
' % result]
+ print result
+ print type(result)
for row in self.rows:
result.append(' \n %s\n
' %
(''.join('%s | ' %
str('' if (itm is None) else itm)
for itm in row)))
- result = '''
+ result = '''''' % (self.tblname, '\n'.join(result))
- return '\n'.join(result)
+ return result
def output_as_list(self, align):
result = []
@@ -421,10 +430,12 @@
("help terminators" for details)
"""
bindVarsIn = bindVarsIn or {}
- stmt = sqlpython.Statement('select '+arg)
- self.query = stmt.query
- if stmt.outformat == '\\t':
- self.do_tselect(' '.join(self.query.split()[1:]) + ';', stmt.rowlimit)
+ self.query = 'select ' + arg
+ (self.query, terminator, rowlimit) = sqlpython.findTerminator(self.query)
+ rowlimit = int(rowlimit or 0)
+ if terminator == '\\t':
+ self.do_tselect(' '.join(self.query.split()[1:]) + ';', rowlimit)
+ return
else:
try:
self.varsUsed = findBinds(self.query, self.binds, bindVarsIn)
@@ -433,7 +444,7 @@
self.desc = self.curs.description
self.rc = self.curs.rowcount
if self.rc > 0:
- print '\n' + self.output(stmt.outformat, stmt.rowlimit)
+ print '\n' + self.output(outformat, rowlimit)
if self.rc == 0:
print '\nNo rows Selected.\n'
elif self.rc == 1:
@@ -627,6 +638,10 @@
'run [N]: runs the SQL that was run N commands ago'
for pos in self.bufferPositions(arg):
self.onecmd(self.sqlBuffer[-1-pos])
+ def do_history(self, arg):
+ for (i, itm) in enumerate(self.history):
+ print '-------------------------[%d]' % (i+1)
+ print itm
def do_list(self, arg):
'list [N]: lists the SQL that was run N commands ago'
for pos in self.bufferPositions(arg):
diff -r 9c87fa772ec1 -r 8fa146b9a2d7 sqlpython.py
--- a/sqlpython.py Fri Nov 30 13:04:51 2007 -0500
+++ b/sqlpython.py Fri Nov 30 16:44:26 2007 -0500
@@ -120,24 +120,21 @@
do_q = do_quit
do_exit = do_quit
-class Statement(object):
- prompt2 = ' > '
- stmtEndSearchString = r'(.*)(%s)\s*(\d+)?\s*$' % sqlpython.terminatorSearchString
- stmtEnd = re.compile(stmtEndSearchString, re.MULTILINE | re.DOTALL)
- def __init__(self, firstline):
- v_Lines = []
- v_Line = firstline
- while 1:
- m = self.stmtEnd.search(v_Line)
- if m:
- v_Line, self.outformat, suffix = m.groups()
- v_Lines.append(v_Line)
- self.query = '\n'.join(v_Lines)
- self.rowlimit = int(suffix or 0)
- return
- v_Lines.append(v_Line)
- v_Line = raw_input(self.prompt2)
- self.query = '\n'.join(v_Lines)
+stmtEndSearchString = r'(.*)(%s)\s*(\d+)?\s*$' % terminatorSearchString
+stmtEndFinder = re.compile(stmtEndSearchString, re.MULTILINE | re.DOTALL)
+prompt2 = ' > '
+
+def finishStatement(firstline):
+ lines = [firstline]
+ while 1:
+ m = stmtEndFinder.search(lines[-1])
+ if m:
+ return '\n'.join(lines)
+ lines.append(raw_input(prompt2))
+
+def findTerminator(statement):
+ m = stmtEndFinder.search(statement)
+ return m.groups()
def pmatrix(rows,desc,maxlen=30):
'''prints a matrix, used by sqlpython to print queries' result sets'''