'''

    Formatter special pour les requetes SQL

    usage:

        Sql = SqlFormatter()

        my_query = Sql.format("SELECT {} FROM {}", "my_field", "tblname")

@author: olivier.massot
'''
import string


class SqlFormatter(string.Formatter):

    def format_field(self, value, format_spec):

        if value is None:
            return "Null"

        if format_spec == "date":
            return "#{:%Y-%m-%d %H:%M:%S}#".format(value)
        elif format_spec == "text":
            return "'{}'".format(SqlFormatter._escape(str(value)))
        elif format_spec == "float":
            return str(value).replace(",", ".")
        else:
            return SqlFormatter._escape(value.__format__(format_spec))

    @staticmethod
    def _escape(instr):
            return instr.replace("'", "''").replace("\"", "''").replace("\t", " ")
