| Home | Trees | Index | Help |
|
|---|
| Package lemon :: Package db :: Package builder |
|
DBBuilder - Typed SQL Abstraction Layer.
Still to do:
Forms Code -> pass the form object a Row class.
(Transaction Support.) In the documentation.
##### Problem with default values in defaults???
Driver/Interface model for implementing anydb, other drivers etc...
BUGS
- Dates don't work properly from the table(rowid).dict() method.
- Should be able to choose to use the Lemon date classes with a function.
Developer Documentation:
Rough guide in case I forget!!
Table Class
User constructs a class derived from table -> In the initialisation of the Table base class a list of column
objects is created based on the names and types of the columns specified in the derived class. Any custom
methods are applied to the objects by assigning the methods to currently existing methods. The column names
are error checked
Row Class
The row class contains the values from one row of the table. It holds the data as a list of column values
the same as in the table class. It has a load of overloaded methods to allow dictionary access etc.
We now have:
row.middleInitial # - The value of the column middleInitial for the row row.
row.var.middleInitial # - A Query Builder object for middleInitial to create WHERE clauses.
row.column.middleInitial # - The middleInitial form field, containing the column value middleInitial for
# use as a form field.
row.column.middleInitial can be used in an html.form.Form setup() function exactly as if it was an html.field
object. This means that you can easily create correctly validating html forms which makes life much much easier
if you are wrting a web application as it means you don't have to do any work yourself! Just create your own
middleInitial_valid() funciton in the class constructor, setting any errors and this will be used to validate
your field.
ColType Class
All column type classes are dervided from ColType and have a number of different methods to be overloaded in
the creation of new column types. Each ColType object contains the data from one table field for one row as
well as containing methods to validate and manipulate that value. The validation methods etc, are used from
all over the module to make sure values are correct.
ColType classes are effectively a derivitive of both an html field and an imaginary db field. The class
achieves this by having methods, identical to the html field whilst also implementing its own methods.
An ideal solution would be to have one class Type that acted both as a db field, an html field and a data
type. We cannot do things this way though because we want data types such as strings to be used and we
cannot add our own methods to a string. So to save having to use classes for string and int we do it this
complicated way instead!
DataType Classes
These are classes used to store the data for a particular ColType field. For example Date stores information
for DateCol classes. DataType classes should have the __cmp__() method defined for comparison and should do
bsaic error checking for the data type in the constructor. ColType fields should only take the corresponding
DataType object as the value of the field and the validation methods should be written with this in respect.
The exceptions are the string and number based classes already written which take the corresponding Python
type as the data object.
Query Builder
This class holds the names of all the columns. A QueryBuilder object is obtained from the Table().query. The
class allows attribute access to columns returning a Query class for that column.
Query Class
This is a class with a load of overloaded operators to allow the construction of SQL queries in natural python
syntax. Values are stored in a list, SQL is stored as the name. As the expression is built, '%s's are placed
where the SQL values should be and the new SQL is passed as the name of the next Query object which is
returned. In this way the query gets longer as does the attribute list. When the __str__() method is called
the values are all error checked against their type using the ColType.checkType() method and if successful
encoded using ColType.encodeAsQuery() and full SQL query is returned as SQL for use in the WHERE clause.
Column Class
This is simply a class to act like a list but be able to access ColType objects by name via an attribute
access system so that adding them to a form looks pretty in code.
#Mappings
Foreign Key and Mapping implementations are just a matter of doing a seond query.
Maybe map the result to a mapping object accessable as an array.
Deleting an object with a foreighn key deletes them too.. so do something with them first!
Implement slicing, contains for rows and mapping objects.
All datatypes must implment their own validation and the __str__ method to convert them to SQL.
They must also implemnt the comparison operaotrs, as must the rows column.
They should all have the .sql() method.
Constructing Objects/Data Types
-------------------------------
If the object is not an integer it is assumed that str(object) will generate the SQL together with necessary
quoting.
Still to implement:
(Timestamp), Pickle???
Auto generation of currentCols
Code for unique.
rename name() etc to sql_name()
Simple structure for inheriting
Re-implemnt col-override.
Adding a field:
- Derive from ColType
- Add name to currentCols
- Add to Query.checkTypes() method for validation.
- Add a new DateType to hold the value.
Warnings:
- Uniqueness checking is done by the database. This option just sets the UNIQUE when creating
the table so make sure your table has it specified so that it works!
QueryBuilder - Code to generate SQL for the WHERE statements.
Still To Do:
Error check the Func arguments.
# XXX Remove autoincrement.. do it manually.
Note.. implemented asList() for Column class as a hack rather than writing an iterator.
| Submodules | |
|---|---|
| Exceptions | |
|---|---|
SQLError |
|
| Variable Summary | |
|---|---|
QueryFunctions |
func = <lemon.db.builder.QueryFunctions instance at 0x01...
|
list |
reservedWords = ['ID', 'ADD', 'ALL', 'ALTER', 'AND', 'AN...
|
| Variable Details |
|---|
func
|
reservedWords
|
| Home | Trees | Index | Help |
|
|---|
| Generated by Epydoc 2.0 on Mon Nov 10 15:08:19 2003 | http://epydoc.sf.net |