/usr/lib/python/astrometry/util/sqlcl.py is in astrometry.net 0.46-0ubuntu2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | #!/usr/bin/python2
""">> sqlcl << command line query tool by Tamas Budavari <budavari@jhu.edu>
Usage: sqlcl [options] sqlfile(s)
Options:
-s url : URL with the ASP interface (default: pha)
-f fmt : set output format (html,xml,csv - default: csv)
-q query : specify query on the command line
-l : skip first line of output with column names
-v : verbose mode dumps settings in header
-h : show this message"""
formats = ['csv','xml','html']
astro_url='http://cas.sdss.org/astro/en/tools/search/x_sql.asp'
public_url='http://cas.sdss.org/public/en/tools/search/x_sql.asp'
default_url=public_url
default_fmt='csv'
def usage(status, msg=''):
"Error message and usage"
print __doc__
if msg:
print '-- ERROR: %s' % msg
sys.exit(status)
def filtercomment(sql):
"Get rid of comments starting with --"
import os
fsql = ''
for line in sql.split('\n'):
fsql += line.split('--')[0] + ' ' + os.linesep;
return fsql
def query(sql,url=default_url,fmt=default_fmt):
"Run query and return file object"
import urllib
fsql = filtercomment(sql)
params = urllib.urlencode({'cmd': fsql, 'format': fmt})
return urllib.urlopen(url+'?%s' % params)
def write_header(ofp,pre,url,qry):
import time
ofp.write('%s SOURCE: %s\n' % (pre,url))
ofp.write('%s TIME: %s\n' % (pre,time.asctime()))
ofp.write('%s QUERY:\n' % pre)
for l in qry.split('\n'):
ofp.write('%s %s\n' % (pre,l))
def main(argv):
"Parse command line and do it..."
import os, getopt, string
queries = []
url = os.getenv("SQLCLURL",default_url)
fmt = default_fmt
writefirst = 1
verbose = 0
# Parse command line
try:
optlist, args = getopt.getopt(argv[1:],'s:f:q:vlh?')
except getopt.error, e:
usage(1,e)
for o,a in optlist:
if o=='-s': url = a
elif o=='-f': fmt = a
elif o=='-q': queries.append(a)
elif o=='-l': writefirst = 0
elif o=='-v': verbose += 1
else: usage(0)
if fmt not in formats:
usage(1,'Wrong format!')
# Enqueue queries in files
for fname in args:
try:
queries.append(open(fname).read())
except IOError, e:
usage(1,e)
# Run all queries sequentially
for qry in queries:
ofp = sys.stdout
if verbose:
write_header(ofp,'#',url,qry)
file = query(qry,url,fmt)
# Output line by line (in case it's big)
line = file.readline()
if line.startswith("ERROR"): # SQL Statement Error -> stderr
ofp = sys.stderr
if writefirst:
ofp.write(string.rstrip(line)+os.linesep)
line = file.readline()
while line:
ofp.write(string.rstrip(line)+os.linesep)
line = file.readline()
if __name__=='__main__':
import sys
main(sys.argv)
|