root/livinglogic.python.xist/src/ll/orasql/scripts/oradelete.py @ 4422:fe09ca906d4e

Revision 4422:fe09ca906d4e, 3.8 KB (checked in by Walter Doerwald <walter@…>, 8 years ago)

Bump copyright year. Change encoding of remaining files to UTF-8. Remove trailing whitespace.

Line 
1#!/usr/bin/env python
2# -*- coding: utf-8 -*-
3
4## Copyright 2005-2011 by LivingLogic AG, Bayreuth/Germany.
5## Copyright 2005-2011 by Walter Dörwald
6##
7## All Rights Reserved
8##
9## See orasql/__init__.py for the license
10
11
12import sys, os, argparse
13
14from ll import misc, astyle, orasql
15
16
17s4warning = astyle.Style.fromenv("LL_ORASQL_REPRANSI_WARNING", "red:black")
18s4error = astyle.Style.fromenv("LL_ORASQL_REPRANSI_ERROR", "red:black")
19s4connectstring = astyle.Style.fromenv("LL_ORASQL_REPRANSI_CONNECTSTRING", "yellow:black")
20s4object = astyle.Style.fromenv("LL_ORASQL_REPRANSI_OBJECT", "green:black")
21
22
23def main(args=None):
24    p = argparse.ArgumentParser(description="Print (or execute) SQL for deleting all records from all tables in an Oracle database schema")
25    p.add_argument("connectstring", help="Oracle connect string")
26    p.add_argument("-v", "--verbose", dest="verbose", help="Give a progress report? (default %(default)s)", default=False, action=misc.FlagAction)
27    p.add_argument("-c", "--color", dest="color", help="Color output (default %(default)s)", default="auto", choices=("yes", "no", "auto"))
28    p.add_argument("-s", "--sequences", dest="sequences", help="Reset sequences? (default %(default)s)", default=False, action=misc.FlagAction)
29    p.add_argument("-x", "--execute", dest="execute", action=misc.FlagAction, help="immediately execute the commands instead of printing them? (default %(default)s)")
30    p.add_argument("-i", "--ignore", dest="ignore", help="Ignore errors? (default %(default)s)", default=False, action=misc.FlagAction)
31    p.add_argument("-e", "--encoding", dest="encoding", help="Encoding for output (default %(default)s)", default="utf-8")
32    p.add_argument("-t", "--truncate", dest="truncate", help="Truncate tables (instead of deleting)? (default %(default)s)", default=False, action=misc.FlagAction)
33
34    args = p.parse_args(args)
35
36    if args.color == "yes":
37        color = True
38    elif args.color == "no":
39        color = False
40    else:
41        color = None
42
43    stdout = astyle.Stream(sys.stdout, color)
44    stderr = astyle.Stream(sys.stderr, color)
45
46    connection = orasql.connect(args.connectstring)
47    cursor = connection.cursor()
48
49    cs = s4connectstring(connection.connectstring())
50
51    for (i, obj) in enumerate(connection.itertables(schema="user", mode="drop")):
52        # Progress report
53        if args.verbose:
54            msg = "truncating" if args.truncate else "deleting from"
55            msg = astyle.style_default("oradelete.py: ", cs, ": {} #{} ".format(msg, i+1), s4object(str(obj)))
56            stderr.writeln(msg)
57
58        # Print or execute SQL
59        if args.execute:
60            try:
61                fmt = u"truncate table {}" if args.truncate else u"delete from {}"
62                cursor.execute(fmt.format(obj.name))
63            except orasql.DatabaseError, exc:
64                if not args.ignore or "ORA-01013" in str(exc):
65                    raise
66                stderr.writeln("oradelete.py: ", s4error("{}: {}".format(exc.__class__, str(exc).strip())))
67        else:
68            if args.truncate:
69                sql = u"truncate table {};\n".format(obj.name)
70            else:
71                sql = u"delete from {};\n".format(obj.name)
72            stdout.write(sql.encode(args.encoding))
73    if not args.truncate:
74        connection.commit()
75
76    if args.sequences:
77        for (i, obj) in enumerate(connection.itersequences(schema="user")):
78            # Progress report
79            if args.verbose:
80                msg = astyle.style_default("oradelete.py: ", cs, ": recreating #{} ".format(i+1), s4object(str(obj)))
81                stderr.writeln(msg)
82
83            # Print or execute SQL
84            if args.execute:
85                try:
86                    sql = obj.createddl(term=False)
87                    cursor.execute(obj.dropddl(term=False))
88                    cursor.execute(sql)
89                except orasql.DatabaseError, exc:
90                    if not args.ignore or "ORA-01013" in str(exc):
91                        raise
92                    stderr.writeln("oradelete.py: ", s4error("{}: {}".format(exc.__class__, str(exc).strip())))
93            else:
94                sql = obj.dropddl(term=True) + obj.createddl(term=True)
95                stdout.write(sql.encode(args.encoding))
96
97if __name__ == "__main__":
98    sys.exit(main())
Note: See TracBrowser for help on using the browser.