summaryrefslogtreecommitdiff
path: root/sqlplain/doc/sql_repl.py
diff options
context:
space:
mode:
Diffstat (limited to 'sqlplain/doc/sql_repl.py')
-rw-r--r--sqlplain/doc/sql_repl.py72
1 files changed, 0 insertions, 72 deletions
diff --git a/sqlplain/doc/sql_repl.py b/sqlplain/doc/sql_repl.py
deleted file mode 100644
index b81096a..0000000
--- a/sqlplain/doc/sql_repl.py
+++ /dev/null
@@ -1,72 +0,0 @@
-"""
-usage: sql_repl <dbname>
-"""
-# alias sql_repl="rlwrap -m python ~/gcode/sqlplain/doc/sql_repl.py"
-
-import os, sys, subprocess
-from sqlplain import connect
-
-def less(text):
- "Send a text to less via a pipe"
- # -c clear the screen before starting less
- po = subprocess.Popen(['less', '-c'], stdin=subprocess.PIPE)
- try:
- po.stdin.write(text)
- po.stdin.flush()
- except IOError:
- pass
- po.stdin.close()
- po.wait()
-
-class Console(object):
- "A textual console to interact with a database"
-
- def __init__(self, dbname, input_src=sys.stdin):
- self.db = connect(dbname)
- self.input_src = input_src
- self.prompt = '%s> ' % self.db.name
-
- def sql_eval(self, code):
- rows = self.db.execute(code)
- if isinstance(rows, int):
- if rows != -1:
- return '%s rows were affected' % rows
- else:
- return ''
- out = ['%d rows were returned' % len(rows), '\t'.join(rows.header)]
- for row in rows:
- out.append('\t'.join(map(str, row)))
- return out
-
- def readcode(self):
- sys.stdout.write(self.prompt)
- sys.stdout.flush()
- lines = []
- while True:
- line = self.input_src.readline()
- if not line:
- raise EOFError
- lines.append(line)
- if line.endswith(';\n'):
- return '\n'.join(lines)
-
- def repl(self):
- while True:
- try:
- code = self.readcode()
- result = self.sql_eval(code)
- if isinstance(result, list):
- less('\n'.join(result))
- else:
- print result
- except EOFError:
- break
- except Exception, e:
- print e.__class__.__name__, str(e)
-
-if __name__ == '__main__':
- try:
- alias = sys.argv[1]
- except IndexError:
- sys.exit(__doc__)
- Console(alias).repl()