'kw arguments can be:
oracle_resolve_synonyms
dblink'

@reflection.cache
def get_columns(self, connection, table_name, schema=None, **kw):

    resolve_synonyms = kw.get('oracle_resolve_synonyms', False)
    dblink = kw.get('dblink', '')
    info_cache = kw.get('info_cache')
    (table_name, schema, dblink, synonym) = self._prepare_reflection_args(connection, table_name, schema, resolve_synonyms, dblink, info_cache=info_cache)
    columns = []
    if self._supports_char_length:
        char_length_col = 'char_length'
    else:
        char_length_col = 'data_length'
    params = {'table_name': table_name}
    text = 'SELECT    column_name,    data_type,    %(char_length_col)s,    data_precision,    data_scale,    nullable,    data_default    FROM    ALL_TAB_COLUMNS%(dblink)s    WHERE    table_name    =    :table_name'
    if (schema is not None):
        params['owner'] = schema
        text += '    AND    owner    =    :owner    '
    text += '    ORDER    BY    column_id'
    text = (text % {'dblink': dblink, 'char_length_col': char_length_col})
    c = connection.execute(sql.text(text), **params)
    for row in c:
        (colname, orig_colname, coltype, length, precision, scale, nullable, default) = (self.normalize_name(row[0]), row[0], row[1], row[2], row[3], row[4], (row[5] == 'Y'), row[6])
        if (coltype == 'NUMBER'):
            coltype = NUMBER(precision, scale)
        elif (coltype in ('VARCHAR2', 'NVARCHAR2', 'CHAR')):
            coltype = self.ischema_names.get(coltype)(length)
        elif ('WITH    TIME    ZONE' in coltype):
            coltype = TIMESTAMP(timezone=True)
        else:
            coltype = re.sub('\\(\\d+\\)', '', coltype)
            try:
                coltype = self.ischema_names[coltype]
            except KeyError:
                util.warn(("Did    not    recognize    type    '%s'    of    column    '%s'" % (coltype, colname)))
                coltype = sqltypes.NULLTYPE
        cdict = {'name': colname, 'type': coltype, 'nullable': nullable, 'default': default, 'autoincrement': (default is None)}
        if (orig_colname.lower() == orig_colname):
            cdict['quote'] = True
        columns.append(cdict)
    return columns
