annotate sqlpyPlus.py @ 7:d44784122203

more history tweaks
author devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
date Wed, 05 Dec 2007 16:27:43 -0500
parents f9ec5c20beb4
children 8e909570e7de
rev   line source
0
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
1 """sqlpyPlus - extra features (inspired by Oracle SQL*Plus) for Luca Canali's sqlpython.py
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
2
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
3 Features include:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
4 - SQL*Plus-style bind variables
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
5 - Query result stored in special bind variable ":_" if one row, one item
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
6 - SQL buffer with list, run, ed, get, etc.; unlike SQL*Plus, buffer stores session's full history
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
7 - @script.sql loads and runs (like SQL*Plus)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
8 - ! runs operating-system command
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
9 - show and set to control sqlpython parameters
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
10 - SQL*Plus-style describe, spool
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
11 - write sends query result directly to file
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
12 - comments shows table and column comments
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
13 - compare ... to ... graphically compares results of two queries
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
14 - commands are case-insensitive
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
15
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
16 Use 'help' within sqlpython for details.
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
17
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
18 Compatible with sqlpython v1.3
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
19
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
20 Set bind variables the hard (SQL*Plus) way
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
21 exec :b = 3
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
22 or with a python-like shorthand
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
23 :b = 3
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
24
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
25 - catherinedevlin.blogspot.com May 31, 2006
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
26 """
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
27 # note in cmd.cmd about supporting emacs commands?
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
28
5
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
29 pullQueries = {
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
30 'PROCEDURE':("""
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
31 text
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
32 FROM all_source
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
33 WHERE owner = :owner
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
34 AND name = :object_name
6
f9ec5c20beb4 working on resolving more objects
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 5
diff changeset
35 """,),
f9ec5c20beb4 working on resolving more objects
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 5
diff changeset
36 'PACKAGE':("""
f9ec5c20beb4 working on resolving more objects
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 5
diff changeset
37 text
f9ec5c20beb4 working on resolving more objects
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 5
diff changeset
38 FROM all_source
f9ec5c20beb4 working on resolving more objects
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 5
diff changeset
39 WHERE owner = :owner
f9ec5c20beb4 working on resolving more objects
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 5
diff changeset
40 AND name = :object_name
f9ec5c20beb4 working on resolving more objects
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 5
diff changeset
41 AND type = 'PACKAGE_BODY'
f9ec5c20beb4 working on resolving more objects
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 5
diff changeset
42 """,),
f9ec5c20beb4 working on resolving more objects
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 5
diff changeset
43 'TYPE':("""
f9ec5c20beb4 working on resolving more objects
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 5
diff changeset
44 text
f9ec5c20beb4 working on resolving more objects
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 5
diff changeset
45 FROM all_source
f9ec5c20beb4 working on resolving more objects
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 5
diff changeset
46 WHERE owner = :owner
f9ec5c20beb4 working on resolving more objects
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 5
diff changeset
47 AND name = :object_name
f9ec5c20beb4 working on resolving more objects
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 5
diff changeset
48 AND type = 'TYPE'
f9ec5c20beb4 working on resolving more objects
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 5
diff changeset
49 """,
f9ec5c20beb4 working on resolving more objects
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 5
diff changeset
50 """
f9ec5c20beb4 working on resolving more objects
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 5
diff changeset
51 text
f9ec5c20beb4 working on resolving more objects
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 5
diff changeset
52 FROM all_source
f9ec5c20beb4 working on resolving more objects
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 5
diff changeset
53 WHERE owner = :owner
f9ec5c20beb4 working on resolving more objects
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 5
diff changeset
54 AND name = :object_name
f9ec5c20beb4 working on resolving more objects
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 5
diff changeset
55 AND type = 'TYPE_BODY'
5
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
56 """,)
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
57 }
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
58 pullQueries['TRIGGER'] = pullQueries['PROCEDURE']
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
59 pullQueries['FUNCTION'] = pullQueries['PROCEDURE']
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
60
4
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
61 descQueries = {
5
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
62 'TABLE': ("""
4
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
63 atc.column_name,
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
64 CASE atc.nullable WHEN 'Y' THEN 'NULL' ELSE 'NOT NULL' END "Null?",
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
65 atc.data_type ||
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
66 CASE atc.data_type WHEN 'DATE' THEN ''
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
67 ELSE '(' ||
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
68 CASE atc.data_type WHEN 'NUMBER' THEN TO_CHAR(atc.data_precision) ||
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
69 CASE atc.data_scale WHEN 0 THEN ''
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
70 ELSE ',' || TO_CHAR(atc.data_scale) END
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
71 ELSE TO_CHAR(atc.data_length) END
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
72 END ||
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
73 CASE atc.data_type WHEN 'DATE' THEN '' ELSE ')' END
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
74 data_type
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
75 FROM all_tab_columns atc
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
76 WHERE atc.table_name = :object_name
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
77 AND atc.owner = :owner
5
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
78 ORDER BY atc.column_id;""",),
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
79 'PROCEDURE': ("""
4
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
80 argument_name,
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
81 data_type,
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
82 in_out,
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
83 default_value
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
84 FROM all_arguments
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
85 WHERE object_name = :object_name
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
86 AND owner = :owner
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
87 AND package_name IS NULL
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
88 AND argument_name IS NOT NULL
5
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
89 ORDER BY sequence;""",),
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
90 'PackageObjects':("""
4
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
91 SELECT DISTINCT object_name
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
92 FROM all_arguments
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
93 WHERE package_name = :package_name
5
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
94 AND owner = :owner""",),
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
95 'PackageObjArgs':("""
4
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
96 object_name,
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
97 argument_name,
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
98 data_type,
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
99 in_out,
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
100 default_value
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
101 FROM all_arguments
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
102 WHERE package_name = :package_name
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
103 AND object_name = :object_name
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
104 AND owner = :owner
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
105 AND argument_name IS NOT NULL
5
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
106 ORDER BY sequence""",),
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
107 'TRIGGER':("""
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
108 description
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
109 FROM all_triggers
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
110 WHERE owner = :owner
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
111 AND trigger_name = :object_name
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
112 """,
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
113 """
4
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
114 table_owner,
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
115 base_object_type,
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
116 table_name,
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
117 column_name,
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
118 when_clause,
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
119 status,
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
120 action_type,
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
121 crossedition
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
122 FROM all_triggers
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
123 WHERE owner = :owner
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
124 AND trigger_name = :object_name
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
125 \\t
5
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
126 """,
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
127 ),
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
128 'INDEX':("""
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
129 index_type,
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
130 table_owner,
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
131 table_name,
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
132 table_type,
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
133 uniqueness,
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
134 compression,
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
135 partitioned,
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
136 temporary,
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
137 generated,
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
138 secondary,
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
139 dropped,
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
140 visibility
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
141 FROM all_indexes
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
142 WHERE owner = :owner
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
143 AND index_name = :object_name
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
144 \\t
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
145 """,)
4
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
146 }
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
147 descQueries['VIEW'] = descQueries['TABLE']
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
148 descQueries['FUNCTION'] = descQueries['PROCEDURE']
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
149
0
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
150 queries = {
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
151 'resolve': """
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
152 SELECT object_type, object_name, owner FROM (
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
153 SELECT object_type, object_name, user owner, 1 priority
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
154 FROM user_objects
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
155 WHERE object_name = :objName
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
156 UNION ALL
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
157 SELECT ao.object_type, ao.object_name, ao.owner, 2 priority
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
158 FROM all_objects ao
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
159 JOIN user_synonyms us ON (us.table_owner = ao.owner AND us.table_name = ao.object_name)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
160 WHERE us.synonym_name = :objName
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
161 AND ao.object_type != 'SYNONYM'
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
162 UNION ALL
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
163 SELECT ao.object_type, ao.object_name, ao.owner, 3 priority
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
164 FROM all_objects ao
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
165 JOIN all_synonyms asyn ON (asyn.table_owner = ao.owner AND asyn.table_name = ao.object_name)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
166 WHERE asyn.synonym_name = :objName
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
167 AND ao.object_type != 'SYNONYM'
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
168 AND asyn.owner = 'PUBLIC'
6
f9ec5c20beb4 working on resolving more objects
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 5
diff changeset
169 UNION ALL
f9ec5c20beb4 working on resolving more objects
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 5
diff changeset
170 SELECT 'DIRECTORY' object_type, dir.directory_name, dir.owner, 6 priority
f9ec5c20beb4 working on resolving more objects
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 5
diff changeset
171 FROM all_directories dir
f9ec5c20beb4 working on resolving more objects
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 5
diff changeset
172 WHERE dir.directory_name = :objName
f9ec5c20beb4 working on resolving more objects
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 5
diff changeset
173 UNION ALL
f9ec5c20beb4 working on resolving more objects
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 5
diff changeset
174 SELECT 'DATABASE LINK' object_type, db_link, owner, 7 priority
f9ec5c20beb4 working on resolving more objects
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 5
diff changeset
175 FROM all_db_links dbl
f9ec5c20beb4 working on resolving more objects
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 5
diff changeset
176 WHERE dbl.db_link = :objName
0
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
177 ) ORDER BY priority ASC""",
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
178 'tabComments': """
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
179 SELECT comments
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
180 FROM all_tab_comments
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
181 WHERE owner = :owner
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
182 AND table_name = :table_name""",
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
183 'colComments': """
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
184 atc.column_name,
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
185 acc.comments
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
186 FROM all_tab_columns atc
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
187 JOIN all_col_comments acc ON (atc.owner = acc.owner and atc.table_name = acc.table_name and atc.column_name = acc.column_name)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
188 WHERE atc.table_name = :object_name
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
189 AND atc.owner = :owner
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
190 ORDER BY atc.column_id;""",
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
191 }
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
192
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
193 import sys, os, re, sqlpython, cx_Oracle, pyparsing
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
194
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
195 if float(sys.version[:3]) < 2.3:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
196 def enumerate(lst):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
197 return zip(range(len(lst)), lst)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
198
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
199 class SoftwareSearcher(object):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
200 def __init__(self, softwareList, purpose):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
201 self.softwareList = softwareList
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
202 self.purpose = purpose
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
203 self.software = None
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
204 def invoke(self, *args):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
205 if not self.software:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
206 (self.software, self.invokeString) = self.find()
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
207 argTuple = tuple([self.software] + list(args))
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
208 os.system(self.invokeString % argTuple)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
209 def find(self):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
210 if self.purpose == 'text editor':
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
211 software = os.environ.get('EDITOR')
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
212 if software:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
213 return (software, '%s %s')
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
214 for (n, (software, invokeString)) in enumerate(self.softwareList):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
215 if os.path.exists(software):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
216 if n > (len(self.softwareList) * 0.7):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
217 print """
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
218
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
219 Using %s. Note that there are better options available for %s,
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
220 but %s couldn't find a better one in your PATH.
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
221 Feel free to open up %s
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
222 and customize it to find your favorite %s program.
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
223
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
224 """ % (software, self.purpose, __file__, __file__, self.purpose)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
225 return (software, invokeString)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
226 stem = os.path.split(software)[1]
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
227 for p in os.environ['PATH'].split(os.pathsep):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
228 if os.path.exists(os.sep.join([p, stem])):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
229 return (stem, invokeString)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
230 raise (OSError, """Could not find any %s programs. You will need to install one,
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
231 or customize %s to make it aware of yours.
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
232 Looked for these programs:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
233 %s""" % (self.purpose, __file__, "\n".join([s[0] for s in self.softwareList])))
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
234 #v2.4: %s""" % (self.purpose, __file__, "\n".join(s[0] for s in self.softwareList)))
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
235
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
236 softwareLists = {
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
237 'diff/merge': [
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
238 ('/usr/bin/meld',"%s %s %s"),
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
239 ('/usr/bin/kdiff3',"%s %s %s"),
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
240 (r'C:\Program Files\Araxis\Araxis Merge v6.5\Merge.exe','"%s" %s %s'),
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
241 (r'C:\Program Files\TortoiseSVN\bin\TortoiseMerge.exe', '"%s" /base:"%s" /mine:"%s"'),
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
242 ('FileMerge','%s %s %s'),
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
243 ('kompare','%s %s %s'),
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
244 ('WinMerge','%s %s %s'),
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
245 ('xxdiff','%s %s %s'),
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
246 ('fldiff','%s %s %s'),
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
247 ('gtkdiff','%s %s %s'),
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
248 ('tkdiff','%s %s %s'),
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
249 ('gvimdiff','%s %s %s'),
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
250 ('diff',"%s %s %s"),
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
251 (r'c:\windows\system32\comp.exe',"%s %s %s")],
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
252 'text editor': [
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
253 ('gedit', '%s %s'),
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
254 ('textpad', '%s %s'),
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
255 ('notepad.exe', '%s %s'),
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
256 ('pico', '%s %s'),
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
257 ('emacs', '%s %s'),
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
258 ('vim', '%s %s'),
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
259 ('vi', '%s %s'),
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
260 ('ed', '%s %s'),
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
261 ('edlin', '%s %s')
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
262 ]
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
263 }
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
264
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
265 diffMergeSearcher = SoftwareSearcher(softwareLists['diff/merge'],'diff/merge')
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
266 editSearcher = SoftwareSearcher(softwareLists['text editor'], 'text editor')
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
267 editor = os.environ.get('EDITOR')
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
268 if editor:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
269 editSearcher.find = lambda: (editor, "%s %s")
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
270
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
271 class CaselessDict(dict):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
272 """dict with case-insensitive keys.
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
273
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
274 Posted to ASPN Python Cookbook by Jeff Donner - http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/66315"""
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
275 def __init__(self, other=None):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
276 if other:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
277 # Doesn't do keyword args
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
278 if isinstance(other, dict):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
279 for k,v in other.items():
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
280 dict.__setitem__(self, k.lower(), v)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
281 else:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
282 for k,v in other:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
283 dict.__setitem__(self, k.lower(), v)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
284 def __getitem__(self, key):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
285 return dict.__getitem__(self, key.lower())
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
286 def __setitem__(self, key, value):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
287 dict.__setitem__(self, key.lower(), value)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
288 def __contains__(self, key):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
289 return dict.__contains__(self, key.lower())
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
290 def has_key(self, key):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
291 return dict.has_key(self, key.lower())
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
292 def get(self, key, def_val=None):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
293 return dict.get(self, key.lower(), def_val)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
294 def setdefault(self, key, def_val=None):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
295 return dict.setdefault(self, key.lower(), def_val)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
296 def update(self, other):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
297 for k,v in other.items():
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
298 dict.__setitem__(self, k.lower(), v)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
299 def fromkeys(self, iterable, value=None):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
300 d = CaselessDict()
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
301 for k in iterable:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
302 dict.__setitem__(d, k.lower(), value)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
303 return d
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
304 def pop(self, key, def_val=None):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
305 return dict.pop(self, key.lower(), def_val)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
306
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
307 class NotSettableError(Exception):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
308 None
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
309
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
310 class Parser(object):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
311 comment_def = "--" + pyparsing.ZeroOrMore(pyparsing.CharsNotIn("\n"))
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
312 def __init__(self, scanner, retainSeparator=True):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
313 self.scanner = scanner
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
314 self.scanner.ignore(pyparsing.sglQuotedString)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
315 self.scanner.ignore(pyparsing.dblQuotedString)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
316 self.scanner.ignore(self.comment_def)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
317 self.scanner.ignore(pyparsing.cStyleComment)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
318 self.retainSeparator = retainSeparator
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
319 def separate(self, txt):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
320 itms = []
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
321 for (sqlcommand, start, end) in self.scanner.scanString(txt):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
322 if sqlcommand:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
323 if type(sqlcommand[0]) == pyparsing.ParseResults:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
324 if self.retainSeparator:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
325 itms.append("".join(sqlcommand[0]))
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
326 else:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
327 itms.append(sqlcommand[0][0])
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
328 else:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
329 if sqlcommand[0]:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
330 itms.append(sqlcommand[0])
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
331 return itms
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
332
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
333 pipeSeparator = Parser(pyparsing.SkipTo((pyparsing.Literal('|') ^ pyparsing.StringEnd()), include=True), retainSeparator=False)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
334 bindScanner = Parser(pyparsing.Literal(':') + pyparsing.Word( pyparsing.alphanums + "_$#" ))
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
335 commandSeparator = Parser(pyparsing.SkipTo((pyparsing.Literal(';') ^ pyparsing.StringEnd()), include=True))
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
336
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
337 def findBinds(target, existingBinds, givenBindVars = {}):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
338 result = givenBindVars
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
339 for finding, startat, endat in bindScanner.scanner.scanString(target):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
340 varname = finding[1]
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
341 try:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
342 result[varname] = existingBinds[varname]
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
343 except KeyError:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
344 if not givenBindVars.has_key(varname):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
345 print 'Bind variable %s not defined.' % (varname)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
346 return result
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
347
3
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
348 class HistoryItem(str):
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
349 def __init__(self, instr):
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
350 str.__init__(self, instr)
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
351 self.lowercase = self.lower()
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
352 self.idx = None
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
353 def pr(self):
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
354 print '-------------------------[%d]' % (self.idx)
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
355 print self
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
356
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
357 class History(list):
7
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
358 digitsOnly = re.compile('^[\d]+$')
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
359 rangeTo = re.compile(r'^\-\s*([-d])+$')
3
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
360 def append(self, new):
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
361 new = HistoryItem(new)
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
362 list.append(self, new)
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
363 new.idx = len(self)
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
364 def extend(self, new):
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
365 for n in new:
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
366 self.append(n)
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
367 def get(self, getme):
7
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
368 getme = getme.strip()
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
369 if not getme:
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
370 return []
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
371 if self.digitsOnly.search(getme):
3
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
372 try:
7
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
373 idx = int(getme)
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
374 try:
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
375 return [self[idx-1]]
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
376 except IndexError:
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
377 return []
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
378 m = self.rangeTo.search(getme)
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
379 if m:
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
380 return self[int(:m.group(1))]
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
381
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
382 excep
3
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
383 except ValueError: # search for a string
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
384 try:
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
385 getme = getme.strip()
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
386 except:
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
387 print "Don't know how to handle %s." % (str(getme))
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
388 return
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
389 if getme.startswith(r'/') and getme.endswith(r'/'):
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
390 finder = re.compile(getme[1:-1], re.DOTALL | re.MULTILINE | re.IGNORECASE)
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
391 def isin(hi):
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
392 return finder.search(hi)
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
393 else:
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
394 def isin(hi):
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
395 return (getme.lower() in hi.lowercase)
7
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
396 return [itm for itm in self if isin(itm)]
3
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
397
0
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
398 class sqlpyPlus(sqlpython.sqlpython):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
399 def __init__(self):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
400 sqlpython.sqlpython.__init__(self)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
401 self.binds = CaselessDict()
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
402 self.sqlBuffer = []
3
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
403 self.history = History()
0
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
404 self.settable = ['maxtselctrows', 'maxfetch', 'autobind', 'failover', 'timeout'] # settables must be lowercase
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
405 self.stdoutBeforeSpool = sys.stdout
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
406 self.spoolFile = None
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
407 self.autobind = False
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
408 self.failover = False
4
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
409 self.multiline = '''select insert update delete tselect
2
59903dcaf327 working on history
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 1
diff changeset
410 create drop alter'''.split()
4
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
411 self.excludeFromHistory = '''run r list l history hi ed'''.split()
0
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
412
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
413 def default(self, arg, do_everywhere=False):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
414 sqlpython.sqlpython.default(self, arg, do_everywhere)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
415 self.sqlBuffer.append(self.query)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
416
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
417 # overrides cmd's parseline
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
418 shortcuts = {'?': 'help', '@': 'getrun', '!': 'shell', ':': 'setbind', '\\': 'psql'}
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
419 def parseline(self, line):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
420 """Parse the line into a command name and a string containing
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
421 the arguments. Returns a tuple containing (command, args, line).
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
422 'command' and 'args' may be None if the line couldn't be parsed.
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
423 Overrides cmd.cmd.parseline to accept variety of shortcuts.."""
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
424 line = line.strip()
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
425 if not line:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
426 return None, None, line
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
427 shortcut = self.shortcuts.get(line[0])
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
428 if shortcut:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
429 cmd, arg = shortcut, line[1:].strip()
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
430 else:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
431 i, n = 0, len(line)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
432 while i < n and line[i] in self.identchars: i = i+1
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
433 cmd, arg = line[:i], line[i:].strip()
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
434 if cmd.lower() in ('select', 'sleect', 'insert', 'update', 'delete', 'describe',
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
435 'desc', 'comments') \
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
436 and not hasattr(self, 'curs'):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
437 print 'Not connected.'
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
438 return '', '', ''
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
439 return cmd, arg, line
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
440
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
441 def precmd(self, line):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
442 """Hook method executed just before the command line is
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
443 interpreted, but after the input prompt is generated and issued.
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
444 Makes commands case-insensitive (but unfortunately does not alter command completion).
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
445 """
4
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
446
1
8fa146b9a2d7 reworking multiline
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 0
diff changeset
447 '''
0
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
448 pipedCommands = pipeSeparator.separate(line)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
449 if len(pipedCommands) > 1:
4
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
450 pipefilename = 'sqlpython.pipe.tmp'
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
451 for (idx, pipedCommand) in enumerate(pipedCommands[:-1]):
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
452 savestdout = sys.stdout
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
453 f = open(pipefilename,'w')
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
454 sys.stdout = f
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
455 self.precmd(pipedCommand)
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
456 self.onecmd(pipedCommand)
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
457 self.postcmd(False, pipedCommands[0])
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
458 f.close()
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
459 sys.stdout = savestdout
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
460 f = os.popen('%s < %s' % (pipedCommands[idx+1], pipefilename))
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
461 f.read()
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
462
1
8fa146b9a2d7 reworking multiline
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 0
diff changeset
463 '''
0
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
464 try:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
465 args = line.split(None,1)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
466 args[0] = args[0].lower()
2
59903dcaf327 working on history
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 1
diff changeset
467 statement = ' '.join(args)
4
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
468 if args[0] in self.multiline:
2
59903dcaf327 working on history
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 1
diff changeset
469 statement = sqlpython.finishStatement(statement)
1
8fa146b9a2d7 reworking multiline
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 0
diff changeset
470 return statement
0
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
471 except Exception:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
472 return line
1
8fa146b9a2d7 reworking multiline
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 0
diff changeset
473
7
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
474 def postcmd(self, stop, line):
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
475 """Hook method executed just after a command dispatch is finished."""
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
476 command = line.split(None,1)[0].lower()
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
477 if command not in self.excludeFromHistory:
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
478 self.history.append(line)
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
479 return stop
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
480
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
481 def onecmd_plus_hooks(self, line):
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
482 line = self.precmd(line)
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
483 stop = self.onecmd(line)
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
484 stop = self.postcmd(stop, line)
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
485
0
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
486 def do_shortcuts(self,arg):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
487 """Lists available first-character shortcuts
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
488 (i.e. '!dir' is equivalent to 'shell dir')"""
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
489 for (scchar, scto) in self.shortcuts.items():
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
490 print '%s: %s' % (scchar, scto)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
491
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
492
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
493 def colnames(self):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
494 return [d[0] for d in curs.description]
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
495
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
496 def sql_format_itm(self, itm, needsquotes):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
497 if itm is None:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
498 return 'NULL'
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
499 if needsquotes:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
500 return "'%s'" % str(itm)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
501 return str(itm)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
502 def output_as_insert_statements(self):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
503 usequotes = [d[1] != cx_Oracle.NUMBER for d in self.curs.description]
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
504 def formatRow(row):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
505 return ','.join(self.sql_format_itm(itm, useq)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
506 for (itm, useq) in zip(row, usequotes))
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
507 result = ['INSERT INTO %s (%s) VALUES (%s);' %
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
508 (self.tblname, ','.join(self.colnames), formatRow(row))
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
509 for row in self.rows]
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
510 return '\n'.join(result)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
511
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
512 def output_row_as_xml(self, row):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
513 result = [' <%s>\n %s\n </%s>' %
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
514 (colname.lower(), str('' if (itm is None) else itm), colname.lower())
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
515 for (itm, colname) in zip(row, self.colnames)]
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
516 return '\n'.join(result)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
517 def output_as_xml(self):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
518 result = ['<%s>\n%s\n</%s>' %
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
519 (self.tblname, self.output_row_as_xml(row), self.tblname)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
520 for row in self.rows]
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
521 return '\n'.join(result)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
522
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
523 def output_as_html_table(self):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
524 result = ''.join('<th>%s</th>' % c for c in self.colnames)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
525 result = [' <tr>\n %s\n </tr>' % result]
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
526 for row in self.rows:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
527 result.append(' <tr>\n %s\n </tr>' %
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
528 (''.join('<td>%s</td>' %
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
529 str('' if (itm is None) else itm)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
530 for itm in row)))
1
8fa146b9a2d7 reworking multiline
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 0
diff changeset
531 result = '''<table id="%s">
0
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
532 %s
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
533 </table>''' % (self.tblname, '\n'.join(result))
1
8fa146b9a2d7 reworking multiline
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 0
diff changeset
534 return result
0
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
535
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
536 def output_as_list(self, align):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
537 result = []
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
538 colnamelen = max(len(colname) for colname in self.colnames) + 1
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
539 for (idx, row) in enumerate(self.rows):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
540 result.append('\n**** Row: %d' % (idx+1))
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
541 for (itm, colname) in zip(row, self.colnames):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
542 if align:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
543 colname = colname.ljust(colnamelen)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
544 result.append('%s: %s' % (colname, itm))
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
545 return '\n'.join(result)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
546
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
547 tableNameFinder = re.compile(r'from\s+([\w$#_"]+)', re.IGNORECASE | re.MULTILINE | re.DOTALL)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
548 def output(self, outformat, rowlimit):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
549 self.tblname = self.tableNameFinder.search(self.curs.statement).group(1)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
550 self.colnames = [d[0] for d in self.curs.description]
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
551 if outformat == '\\i':
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
552 result = self.output_as_insert_statements()
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
553 elif outformat == '\\x':
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
554 result = self.output_as_xml()
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
555 elif outformat == '\\g':
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
556 result = self.output_as_list(align=False)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
557 elif outformat == '\\G':
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
558 result = self.output_as_list(align=True)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
559 elif outformat in ('\\s', '\\S', '\\c', '\\C'): #csv
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
560 result = []
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
561 if outformat in ('\\s', '\\c'):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
562 result.append(','.join('"%s"' % colname for colname in self.colnames))
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
563 for row in self.rows:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
564 result.append(','.join('"%s"' % ('' if itm is None else itm) for itm in row))
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
565 result = '\n'.join(result)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
566 elif outformat == '\\h':
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
567 result = self.output_as_html_table()
4
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
568 elif outformat == '\\t':
5
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
569 rows = [self.colnames]
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
570 rows.extend(list(self.rows))
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
571 transpr = [[rows[y][x] for y in range(len(rows))]for x in range(len(rows[0]))] # matrix transpose
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
572 newdesc = [['ROW N.'+str(y),10] for y in range(len(rows))]
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
573 for x in range(len(self.curs.description)):
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
574 if str(self.curs.description[x][1]) == "<type 'cx_Oracle.BINARY'>": # handles RAW columns
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
575 rname = transpr[x][0]
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
576 transpr[x] = map(binascii.b2a_hex, transpr[x])
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
577 transpr[x][0] = rname
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
578 self.debg=transpr
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
579 newdesc[0][0] = 'COLUMN NAME'
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
580 result = '\n' + sqlpython.pmatrix(transpr,newdesc)
0
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
581 else:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
582 result = sqlpython.pmatrix(self.rows, self.curs.description, self.maxfetch)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
583 return result
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
584
5
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
585 def do_select(self, arg, bindVarsIn=None, override_terminator=None):
0
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
586 """Fetch rows from a table.
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
587
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
588 Limit the number of rows retrieved by appending
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
589 an integer after the terminator
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
590 (example: SELECT * FROM mytable;10 )
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
591
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
592 Output may be formatted by choosing an alternative terminator
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
593 ("help terminators" for details)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
594 """
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
595 bindVarsIn = bindVarsIn or {}
1
8fa146b9a2d7 reworking multiline
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 0
diff changeset
596 self.query = 'select ' + arg
8fa146b9a2d7 reworking multiline
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 0
diff changeset
597 (self.query, terminator, rowlimit) = sqlpython.findTerminator(self.query)
5
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
598 if override_terminator:
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
599 terminator = override_terminator
1
8fa146b9a2d7 reworking multiline
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 0
diff changeset
600 rowlimit = int(rowlimit or 0)
5
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
601 try:
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
602 self.varsUsed = findBinds(self.query, self.binds, bindVarsIn)
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
603 self.curs.execute(self.query, self.varsUsed)
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
604 self.rows = self.curs.fetchmany(min(self.maxfetch, (rowlimit or self.maxfetch)))
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
605 self.desc = self.curs.description
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
606 self.rc = self.curs.rowcount
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
607 if self.rc > 0:
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
608 print '\n' + self.output(terminator, rowlimit)
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
609 if self.rc == 0:
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
610 print '\nNo rows Selected.\n'
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
611 elif self.rc == 1:
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
612 print '\n1 row selected.\n'
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
613 if self.autobind:
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
614 self.binds.update(dict(zip([d[0] for d in self.desc], self.rows[0])))
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
615 elif self.rc < self.maxfetch:
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
616 print '\n%d rows selected.\n' % self.rc
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
617 else:
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
618 print '\nSelected Max Num rows (%d)' % self.rc
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
619 except Exception, e:
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
620 print e
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
621 import traceback
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
622 traceback.print_exc(file=sys.stdout)
0
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
623 self.sqlBuffer.append(self.query)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
624
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
625 def showParam(self, param):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
626 param = param.strip().lower()
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
627 if param in self.settable:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
628 val = getattr(self, param)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
629 print '%s: %s' % (param, str(getattr(self, param)))
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
630
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
631 def do_show(self, arg):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
632 'Shows value of a (sqlpython, not ORACLE) parameter'
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
633 arg = arg.strip().lower()
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
634 if arg:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
635 self.showParam(arg)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
636 else:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
637 for param in self.settable:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
638 self.showParam(param)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
639
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
640 def cast(self, current, new):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
641 typ = type(current)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
642 if typ == bool:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
643 new = new.lower()
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
644 try:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
645 if (new=='on') or (new[0] in ('y','t')):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
646 return True
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
647 return False
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
648 except TypeError:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
649 None
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
650 try:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
651 return typ(new)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
652 except:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
653 print "Problem setting parameter (now %s) to %s; incorrect type?" % (current, new)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
654 return current
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
655
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
656 def do_set(self, arg):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
657 'Sets a (sqlpython, not ORACLE) parameter'
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
658 try:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
659 paramName, val = arg.split(None, 1)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
660 except Exception:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
661 self.do_show(arg)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
662 return
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
663 paramName = paramName.lower()
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
664 try:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
665 current = getattr(self, paramName)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
666 if callable(current):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
667 raise NotSettableError
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
668 except (AttributeError, NotSettableError):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
669 self.fail('set %s' % arg)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
670 return
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
671 val = self.cast(current, val.strip(';'))
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
672 print paramName, ' - was: ', current
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
673 setattr(self, paramName.lower(), val)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
674 print 'now: ', val
6
f9ec5c20beb4 working on resolving more objects
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 5
diff changeset
675
f9ec5c20beb4 working on resolving more objects
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 5
diff changeset
676 def do_pull(self, arg):
f9ec5c20beb4 working on resolving more objects
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 5
diff changeset
677 "Displays source code."
f9ec5c20beb4 working on resolving more objects
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 5
diff changeset
678
f9ec5c20beb4 working on resolving more objects
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 5
diff changeset
679 object_type, owner, object_name = self.resolve(arg.strip(self.terminator).upper())
f9ec5c20beb4 working on resolving more objects
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 5
diff changeset
680 print "%s %s.%s" % (object_type, owner, object_name)
f9ec5c20beb4 working on resolving more objects
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 5
diff changeset
681 pullQ = pullQueries.get(object_type)
f9ec5c20beb4 working on resolving more objects
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 5
diff changeset
682 if pullQ:
f9ec5c20beb4 working on resolving more objects
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 5
diff changeset
683 for q in pullQ:
f9ec5c20beb4 working on resolving more objects
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 5
diff changeset
684 self.do_select(q,bindVarsIn={'object_name':object_name, 'owner':owner})
0
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
685
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
686 def do_describe(self, arg):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
687 "emulates SQL*Plus's DESCRIBE"
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
688 object_type, owner, object_name = self.resolve(arg.strip(self.terminator).upper())
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
689 print "%s %s.%s" % (object_type, owner, object_name)
5
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
690 descQ = descQueries.get(object_type)
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
691 if descQ:
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
692 for q in descQ:
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
693 self.do_select(q,bindVarsIn={'object_name':object_name, 'owner':owner})
0
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
694 elif object_type == 'PACKAGE':
4
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
695 self.curs.execute(descQueries['PackageObjects'], {'package_name':object_name, 'owner':owner})
0
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
696 for (packageObj_name,) in self.curs:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
697 print packageObj_name
5
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
698 self.do_select(descQueries['PackageObjArgs'],bindVarsIn={'package_name':object_name, 'owner':owner, 'object_name':packageObj_name})
0
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
699 do_desc = do_describe
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
700
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
701 def do_comments(self, arg):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
702 'Prints comments on a table and its columns.'
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
703 object_type, owner, object_name = self.resolve(arg.strip(self.terminator).upper())
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
704 if object_type:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
705 self.curs.execute(queries['tabComments'],{'table_name':object_name, 'owner':owner})
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
706 print "%s %s.%s: %s" % (object_type, owner, object_name, self.curs.fetchone()[0])
5
65ae6cec71c6 expanded desc good so far
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 4
diff changeset
707 self.do_select(queries['colComments'],bindVarsIn={'owner':owner, 'object_name': object_name})
0
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
708
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
709 def resolve(self, identifier):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
710 """Checks (my objects).name, (my synonyms).name, (public synonyms).name
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
711 to resolve a database object's name. """
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
712 parts = identifier.split('.')
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
713 try:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
714 if len(parts) == 2:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
715 owner, object_name = parts
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
716 self.curs.execute('SELECT object_type FROM all_objects WHERE owner = :owner AND object_name = :object_name',
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
717 {'owner': owner, 'object_name': object_name})
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
718 object_type = self.curs.fetchone()[0]
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
719 elif len(parts) == 1:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
720 object_name = parts[0]
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
721 self.curs.execute(queries['resolve'], {'objName':object_name})
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
722 object_type, object_name, owner = self.curs.fetchone()
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
723 except TypeError:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
724 print 'Could not resolve object %s.' % identifier
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
725 object_type, owner, object_name = '', '', ''
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
726 return object_type, owner, object_name
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
727
4
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
728 def do_resolve(self, arg):
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
729 print self.resolve(arg)
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
730
0
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
731 def do_shell(self, arg):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
732 'execute a command as if at the OS prompt.'
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
733 os.system(arg)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
734
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
735 def spoolstop(self):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
736 if self.spoolFile:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
737 sys.stdout = self.stdoutBeforeSpool
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
738 print 'Finished spooling to ', self.spoolFile.name
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
739 self.spoolFile.close()
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
740 self.spoolFile = None
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
741
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
742 def do_spool(self, arg):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
743 """spool [filename] - begins redirecting output to FILENAME."""
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
744 self.spoolstop()
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
745 arg = arg.strip()
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
746 if not arg:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
747 arg = 'output.lst'
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
748 if arg.lower() != 'off':
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
749 if '.' not in arg:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
750 arg = '%s.lst' % arg
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
751 print 'Sending output to %s (until SPOOL OFF received)' % (arg)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
752 self.spoolFile = open(arg, 'w')
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
753 sys.stdout = self.spoolFile
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
754
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
755 def write(self, arg, fname):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
756 originalOut = sys.stdout
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
757 f = open(fname, 'w')
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
758 sys.stdout = f
7
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
759 self.onecmd_plus_hooks(arg)
0
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
760 f.close()
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
761 sys.stdout = originalOut
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
762
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
763 def do_write(self, args):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
764 'write [filename.extension] query - writes result to a file'
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
765 words = args.split(None, 1)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
766 if len(words) > 1 and '.' in words[0]:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
767 fname, command = words
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
768 else:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
769 fname, command = 'output.txt', args
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
770 self.write(command, fname)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
771 print 'Results written to %s' % os.path.join(os.getcwd(), fname)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
772
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
773 def do_compare(self, args):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
774 """COMPARE query1 TO query2 - uses external tool to display differences.
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
775
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
776 Sorting is recommended to avoid false hits."""
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
777 fnames = []
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
778 args2 = args.split(' to ')
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
779 for n in range(len(args2)):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
780 query = args2[n]
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
781 fnames.append('compare%s.txt' % n)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
782 if query.rstrip()[-1] != self.terminator:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
783 query = '%s%s' % (query, self.terminator)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
784 self.write(query, fnames[n])
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
785 diffMergeSearcher.invoke(fnames[0], fnames[1])
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
786
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
787 bufferPosPattern = re.compile('\d+')
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
788 rangeIndicators = ('-',':')
3
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
789
0
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
790 def do_run(self, arg):
3
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
791 """run [arg]: re-runs an earlier command
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
792
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
793 no arg -> run most recent command
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
794 arg is integer -> run one history item, by index
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
795 arg is string -> run most recent command by string search
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
796 arg is /enclosed in forward-slashes/ -> run most recent by regex
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
797 """
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
798 'run [N]: runs the SQL that was run N commands ago'
7
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
799 runme = self.last_matching(arg)
3
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
800 print runme
7
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
801 self.onecmd_plus_hooks(runme)
3
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
802 do_r = do_run
1
8fa146b9a2d7 reworking multiline
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 0
diff changeset
803 def do_history(self, arg):
3
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
804 """history [arg]: lists past commands issued
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
805
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
806 no arg -> list all
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
807 arg is integer -> list one history item, by index
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
808 arg is string -> string search
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
809 arg is /enclosed in forward-slashes/ -> regular expression search
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
810 """
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
811 if arg:
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
812 history = self.history.get(arg)
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
813 else:
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
814 history = self.history
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
815 for hi in history:
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
816 hi.pr()
7
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
817 def last_matching(self, arg):
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
818 try:
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
819 if arg:
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
820 return self.history.get(arg)[-1]
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
821 else:
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
822 return self.history[-1]
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
823 except:
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
824 return None
0
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
825 def do_list(self, arg):
7
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
826 """list [arg]: lists last command issued
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
827
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
828 no arg -> list absolute last
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
829 arg is integer -> list one history item, by index
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
830 - arg, arg - (integer) -> list up to or after #arg
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
831 arg is string -> list last command matching string search
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
832 arg is /enclosed in forward-slashes/ -> regular expression search
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
833 """
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
834 try:
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
835 self.last_matching(arg).pr()
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
836 except:
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
837 pass
3
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
838 do_hi = do_history
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
839 do_l = do_list
7
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
840 do_li = do_list
0
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
841 def load(self, fname):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
842 """Pulls command(s) into sql buffer. Returns number of commands loaded."""
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
843 try:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
844 f = open(fname, 'r')
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
845 except IOError, e:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
846 try:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
847 f = open('%s.sql' % fname, 'r')
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
848 except:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
849 print 'Problem opening file %s: \n%s' % (fname, e)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
850 return 0
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
851 txt = f.read()
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
852 f.close()
3
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
853 result = commandSeparator.separate(txt)
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
854 self.history.extend(result)
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
855 return len(result)
0
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
856 def do_ed(self, arg):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
857 'ed [N]: brings up SQL from N commands ago in text editor, and puts result in SQL buffer.'
3
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
858 fname = 'sqlpython_temp.sql'
7
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
859 buffer = self.last_matching(arg)
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
860 if not buffer:
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
861 print 'Nothing appropriate in buffer to edit.'
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
862 return
0
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
863 f = open(fname, 'w')
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
864 f.write(buffer)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
865 f.close()
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
866 editSearcher.invoke(fname)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
867 self.load(fname)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
868 do_edit = do_ed
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
869 def do_get(self, fname):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
870 'Brings SQL commands from a file to the in-memory SQL buffer.'
7
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
871 numCommandsLoaded = self.load(fname)
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
872 if numCommandsLoaded:
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
873 self.do_list('%d -' % (len(self.history) - numCommandsLoaded))
0
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
874 def do_getrun(self, fname):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
875 'Brings SQL commands from a file to the in-memory SQL buffer, and executes them.'
7
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
876 numCommandsLoaded = self.load(fname) * -1
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
877 if numCommandsLoaded:
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
878 for command in self.history[numCommandsLoaded:]:
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
879 self.onecmd_plus_hooks(command)
0
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
880 def do_psql(self, arg):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
881 '''Shortcut commands emulating psql's backslash commands.
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
882
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
883 \c connect
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
884 \d desc
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
885 \e edit
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
886 \g run
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
887 \h help
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
888 \i getrun
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
889 \o spool
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
890 \p list
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
891 \w save
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
892 \? help psql'''
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
893 commands = {}
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
894 for c in self.do_psql.__doc__.splitlines()[2:]:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
895 (abbrev, command) = c.split(None, 1)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
896 commands[abbrev[1:]] = command
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
897 words = arg.split(None,1)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
898 abbrev = words[0]
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
899 try:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
900 args = words[1]
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
901 except IndexError:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
902 args = ''
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
903 try:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
904 self.onecmd('%s %s' % (commands[abbrev], args))
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
905 self.onecmd('q')
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
906 except KeyError:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
907 print 'psql command \%s not yet supported.' % abbrev
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
908 def do_save(self, fname):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
909 'save FILENAME: Saves most recent SQL command to disk.'
3
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
910 try:
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
911 f = open(fname, 'w')
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
912 f.write(self.sqlBuffer[-1])
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
913 f.close()
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
914 except Exception, e:
cd23cd62de3c history working pretty well
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 2
diff changeset
915 print 'Error saving %s: %s' % (fname, str(e))
0
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
916
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
917 def do_print(self, arg):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
918 'print VARNAME: Show current value of bind variable VARNAME.'
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
919 if arg:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
920 if arg[0] == ':':
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
921 arg = arg[1:]
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
922 try:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
923 print self.binds[arg]
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
924 except KeyError:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
925 print 'No bind variable ', arg
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
926 else:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
927 self.do_setbind('')
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
928 def do_setbind(self, arg):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
929 args = arg.split(None, 2)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
930 if len(args) == 0:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
931 for (var, val) in self.binds.items():
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
932 print ':%s = %s' % (var, val)
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
933 elif len(args) == 1:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
934 try:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
935 print ':%s = %s' % (args[0], self.binds[args[0]])
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
936 except KeyError, e:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
937 print noSuchBindMsg % args[0]
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
938 elif len(args) > 2 and args[1] in ('=',':='):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
939 var, val = args[0], args[2]
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
940 if val[0] == val[-1] == "'" and len(val) > 1:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
941 val = val[1:-1]
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
942 self.binds[var] = val
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
943 else:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
944 print 'Could not parse ', args
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
945 def do_exec(self, arg):
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
946 if arg[0] == ':':
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
947 self.do_setbind(arg[1:])
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
948 else:
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
949 self.default('exec %s' % arg)
4
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
950
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
951 def do_cat(self, arg):
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
952 targets = arg.split()
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
953 for target in targets:
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
954 self.do_select('* from %s' % target)
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
955
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
956 def do_grep(self, arg):
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
957 """grep PATTERN TABLE - search for term in any of TABLE's fields"""
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
958 targets = arg.split()
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
959 pattern = targets.pop(0)
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
960 for target in targets:
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
961 sql = []
7
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
962 print 'select * from %s where 1=0' % target
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
963 try:
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
964 self.curs.execute('select * from %s where 1=0' % target)
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
965 sql = ' or '.join("%s LIKE '%%%s%%'" % (d[0], pattern) for d in self.curs.description)
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
966 sql = '* FROM %s WHERE %s' % (target, sql)
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
967 self.do_select(sql)
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
968 except Exception, e:
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
969 print e
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
970 import traceback
d44784122203 more history tweaks
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 6
diff changeset
971 traceback.print_exc(file=sys.stdout)
4
23c3a58d7804 about to strip out tselect
devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
parents: 3
diff changeset
972
0
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
973 def _test():
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
974 import doctest
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
975 doctest.testmod()
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
976
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
977 if __name__ == "__main__":
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
978 "Silent return implies that all unit tests succeeded. Use -v to see details."
9c87fa772ec1 before big refactor
catherine@serenity.wpafb.af.mil
parents:
diff changeset
979 _test()