'Construct a new ``DefaultCompiler`` object.
dialect
Dialect to be used
statement
ClauseElement to be compiled
column_keys
a list of column names to be compiled into an INSERT or UPDATE
statement.'

def __init__(self, dialect, statement, column_keys=None, inline=False, **kwargs):

    self.column_keys = column_keys
    self.inline = (inline or getattr(statement, 'inline', False))
    self.binds = {}
    self.bind_names = util.column_dict()
    self.stack = []
    self.result_map = {}
    self.positional = dialect.positional
    if self.positional:
        self.positiontup = []
    self.bindtemplate = BIND_TEMPLATES[dialect.paramstyle]
    self.ctes = None
    self.preparer = dialect.identifier_preparer
    self.label_length = (dialect.label_length or dialect.max_identifier_length)
    self.anon_map = util.PopulateDict(self._process_anon)
    self.truncated_names = {}
    Compiled.__init__(self, dialect, statement, **kwargs)
    if (self.positional and (dialect.paramstyle == 'numeric')):
        self._apply_numbered_params()
