roskakori / cutplace

validate data stored in CSV, PRN, ODS or Excel files
http://cutplace.readthedocs.org/
GNU Lesser General Public License v3.0
18 stars 20 forks source link

Convert CID to SQL statements #73

Open roskakori opened 9 years ago

roskakori commented 9 years ago

Goal: a CID can act as base for interaction with SQL databases. In particular, it can be converted to:

def sql_ansi_type(self):
    return ('varchar', None if self.length is None else self.length.upper)
class AnsiSqlDialect(object):
    def __init__(self):
        self._keyword = set([...])

    def sql_type(self, sql_ansi_type):
        """Same kind of tuple as with py:meth`fields.AbstractFieldFormat.sql_ansi_type().`"""
        return sql_ansi_type

    def sql_escaped(self, text):
        # TODO: Escape characters < 32.
        return "'" + text.replace("'", "''") + "'"

    @property
    def keywords(self):
        return self._keywords

    def is_keyword(self, word):
        assert word is not None
        return word in self.keywords

ANSI_SQL_DIALECT = AnsiSqlDialect()

class SqlFactory(object):
    def __init__(self, cid, table, dialect=ANSI_SQL_DIALECT):
        self._cid = cid
        self... = ...
    @property
    def cid(self):
        return self._cid
    def sql_fields(self):
        """
        Tuples `(field_name, field_type, length, precision, is_not_null, default_value)`
        """

98: Add option to build SQL create table statement

def createTableStatement(self):
    pass
def createIndexStatements(self):
    pass
def constraintStatements(self):
    pass

99: Add option to build bcp import script

def bcpStatment(self, data_path):
    pass

100: Add option to build the contents for an SQL*Loader control file

def sqlldrControl(self, data_path):
    pass
def insertStatement(self, data_path):
    pass

101: Add option to build T/SQL bulk insert statements

def bulkInsertStatement(self, data_path):
    pass

Data type conversion

IntegerFieldFormat

Decimal

Choice

Pattern, RegEx, Text:

DateTime

Integer

roskakori commented 9 years ago

Simplified inheritance hierarchy according to Skype conference.