"""Demonstration of the Remote View protocol for adding
specially implemented Views in an application."""
from gadfly import gadfly
# create the database
g = gadfly()
g.startup("dbtest", "dbtest") # assume directory "dbtest" exists
# define a remote view class
import gfintrospect
class myTable(gfintrospect.RemoteView):
"""A remote view must define self.column_names
to return a (fixed) list of string column names and
self.listing() to return a possibly varying
list of row values. If there is a single column
the listing() list must return a list of values,
but for multiple columns it must return a list
of tuples with one entry for each column.
The remote view implementation may optionally
redefine __init__ also, please see gfintrospect.py
"""
# static: don't reconstruct internal structure for each query
# for more interesting views static will generally be 0
static = 1
def __init__(self, column_names=None, rowlist=None):
"""do whatever needed for initialization"""
if column_names is None:
column_names = ['a', 'b', 'c']
if rowlist is None:
rowlist = [(1,2,3), (4,5,6), (7,8,9)]
self.column_names = column_names
self.rowlist = rowlist
def listing(self):
"""return list of tuples of right sizes to match column_names.
for more interesting views this will do something more
complex ;).
"""
return self.rowlist
# create a table using default cols and rows
### Python code adding ANY remote views must be EXECUTED
### EACH TIME THE DATABASE LOADS!
g.add_remote_view("test", myTable())
# create a table using specified cols and rows
# NOTE: for single column give list of values
# NOT list of tuples of values!
g.add_remote_view("test2", myTable(["x"], [1,6,7]))
print g.database
c = g.cursor()
c.execute("select * from test")
print "test::"
print c.pp()
print
c.execute("select * from test2")
print "test2::"
print c.pp()
print
c.execute("select * from test, test2 where x=a")
print "join"
print c.pp()
print
g.add_remote_view("test3", myTable(["z", "w"], [(2,3), (7,8), (4,6)]))
c.execute("select * from test3")
print "test3::"
print c.pp()
print
c.execute(
"select * from test, test2, test3 where x=a and z=b and w=c")
print "join 2::"
print c.pp()
print
|