Mercurial > sqlpython
diff sqlpyPlus.py @ 121:3dd852ab45c0
fixing terminator stripping
author | catherine@Elli.myhome.westell.com |
---|---|
date | Wed, 23 Jul 2008 14:29:15 -0400 |
parents | e11bbeb3f34c |
children | 61e2a824b66b |
line wrap: on
line diff
--- a/sqlpyPlus.py Wed Jul 23 07:10:49 2008 -0400 +++ b/sqlpyPlus.py Wed Jul 23 14:29:15 2008 -0400 @@ -124,7 +124,7 @@ AND package_name IS NULL AND argument_name IS NOT NULL ORDER BY sequence;""", -descQueries['PROCEDURE']) +descQueries['PROCEDURE'][0]) queries = { 'resolve': """ @@ -567,7 +567,8 @@ def do_pull(self, arg, opts): """Displays source code.""" - object_type, owner, object_name = self.resolve(arg.strip(self.terminator).upper()) + arg = self.parsed(arg).unterminated + object_type, owner, object_name = self.resolve(arg.upper()) if not object_type: return self.stdout.write("%s %s.%s\n" % (object_type, owner, object_name)) @@ -581,22 +582,28 @@ except cx_Oracle.DatabaseError: pass - @options([make_option('-i', '--insensitive', action='store_true', help='case-insensitive search')]) + @options([make_option('-i', '--insensitive', action='store_true', help='case-insensitive search'), + make_option('-c', '--col', action='store_true', help='find column')]) def do_find(self, arg, opts): - """Finds argument in source code.""" + """Finds argument in source code or (with -c) in column definitions.""" - if opts.insensitive: - searchfor = "LOWER(text)" - arg = arg.lower() + arg = self.parsed(arg).unterminated.upper() + if opts.col: + self.do_select("table_name, column_name from all_tab_columns where column_name like '%%%s%%'" % (arg)) else: - searchfor = "text" - self.do_select("* from all_source where %s like '%%%s%%'" % (searchfor, arg)) + if opts.insensitive: + searchfor = "LOWER(text)" + arg = arg.lower() + else: + searchfor = "text" + self.do_select("* from all_source where %s like '%%%s%%'" % (searchfor, arg)) @options([make_option('-a','--all',action='store_true', help='Describe all objects (not just my own)')]) def do_describe(self, arg, opts): "emulates SQL*Plus's DESCRIBE" - + + arg = self.parsed(arg).unterminated.upper() if opts.all: which_view = (', owner', 'all') else: @@ -605,7 +612,7 @@ if not arg: self.do_select("""object_name, object_type%s FROM %s_objects WHERE object_type IN ('TABLE','VIEW','INDEX') ORDER BY object_name""" % which_view) return - object_type, owner, object_name = self.resolve(arg.strip(self.terminator).upper()) + object_type, owner, object_name = self.resolve(arg) if not object_type: self.do_select("""object_name, object_type%s FROM %s_objects WHERE object_type IN ('TABLE','VIEW','INDEX') @@ -627,7 +634,8 @@ do_desc = do_describe def do_deps(self, arg): - object_type, owner, object_name = self.resolve(arg.strip(self.terminator).upper()) + arg = self.parsed(arg).unterminated.upper() + object_type, owner, object_name = self.resolve(arg) if object_type == 'PACKAGE BODY': q = "and (type != 'PACKAGE BODY' or name != :object_name)'" object_type = 'PACKAGE' @@ -645,7 +653,8 @@ def do_comments(self, arg): 'Prints comments on a table and its columns.' - object_type, owner, object_name = self.resolve(arg.strip(self.terminator).upper()) + arg = self.parsed(arg).unterminated.upper() + object_type, owner, object_name = self.resolve(arg) if object_type: self.curs.execute(queries['tabComments'],{'table_name':object_name, 'owner':owner}) self.stdout.write("%s %s.%s: %s\n" % (object_type, owner, object_name, self.curs.fetchone()[0])) @@ -711,6 +720,7 @@ for n in range(len(args2)): query = args2[n] fnames.append('compare%s.txt' % n) + #TODO: update this terminator-stripping if query.rstrip()[-1] != self.terminator: query = '%s%s' % (query, self.terminator) self.onecmd_plus_hooks('%s > %s' % (query, fnames[n])) @@ -821,7 +831,7 @@ print ':%s = %s' % (var, val) def do_setbind(self, arg): - arg = self.parsed(arg).statement # removes terminators? + arg = self.parsed(arg).unterminated args = arg.split(None, 2) if len(args) < 2: self.do_print(arg) @@ -840,11 +850,13 @@ return except ValueError: try: - self.binds[var] = self.curs.callfunc(val, []) + varsUsed = findBinds(arg, self.binds, {}) + self.binds[var] = self.curs.callfunc(val, varsUsed) #TODO: wrong args + # NotSupportedError: Variable_TypeByPythonType(): unhandled data type + # need to warn that it's a date? return except: pass - # TODO: when setting print 'Could not parse ', args @@ -966,7 +978,8 @@ traceback.print_exc(file=sys.stdout) def do_refs(self, arg): - object_type, owner, object_name = self.resolve(arg.strip(self.terminator).upper()) + arg = self.parsed(arg).unterminated.upper() + object_type, owner, object_name = self.resolve(arg) if object_type == 'TABLE': self.do_select(queries['refs'],bindVarsIn={'object_name':object_name, 'owner':owner})