'Returns a CQL query that can be used to recreate this table (index
creations are not included).  If `formatted` is set to :const:`True`,
extra whitespace will be added to make the query human readable.'

def as_cql_query(self, formatted=False):

    ret = ('CREATE    TABLE    %s.%s    (%s' % (protect_name(self.keyspace_name), protect_name(self.name), ('\n' if formatted else '')))
    if formatted:
        column_join = ',\n'
        padding = '                '
    else:
        column_join = ',    '
        padding = ''
    columns = []
    for col in self.columns.values():
        columns.append(('%s    %s%s' % (protect_name(col.name), col.cql_type, ('    static' if col.is_static else ''))))
    if ((len(self.partition_key) == 1) and (not self.clustering_key)):
        columns[0] += '    PRIMARY    KEY'
    ret += column_join.join((('%s%s' % (padding, col)) for col in columns))
    if ((len(self.partition_key) > 1) or self.clustering_key):
        ret += ('%s%sPRIMARY    KEY    (' % (column_join, padding))
        if (len(self.partition_key) > 1):
            ret += ('(%s)' % ',    '.join((protect_name(col.name) for col in self.partition_key)))
        else:
            ret += protect_name(self.partition_key[0].name)
        if self.clustering_key:
            ret += (',    %s' % ',    '.join((protect_name(col.name) for col in self.clustering_key)))
        ret += ')'
    ret += ('%s)    WITH    ' % ('\n' if formatted else ''))
    ret += self._property_string(formatted, self.clustering_key, self.options, self.is_compact_storage)
    return ret
