presto-cassandra/src/main/java/io/prestosql/plugin/cassandra/NativeCassandraSession.java/NativeCassandraSession/buildColumnHandle
class NativeCassandraSession:    private Optional<CassandraColumnHandle> buildColumnHandle(AbstractTableMetadata tableMetadata, ColumnMetadata columnMeta, boolean partitionKey, boolean clusteringKey, int ordinalPosition, boolean hidden)
    {
        Optional<CassandraType> cassandraType = toCassandraType(columnMeta.getType().getName());
        if (!cassandraType.isPresent()) {
            log.debug("Unsupported column type: %s", columnMeta.getType().getName());
            return Optional.empty();
        }

        List<DataType> typeArgs = columnMeta.getType().getTypeArguments();
        for (DataType typeArgument : typeArgs) {
            if (!isFullySupported(typeArgument)) {
                log.debug("%s column has unsupported type: %s", columnMeta.getName(), typeArgument);
                return Optional.empty();
            }
        }
        boolean indexed = false;
        SchemaTableName schemaTableName = new SchemaTableName(tableMetadata.getKeyspace().getName(), tableMetadata.getName());
        if (!isMaterializedView(schemaTableName)) {
            TableMetadata table = (TableMetadata) tableMetadata;
            for (IndexMetadata idx : table.getIndexes()) {
                if (idx.getTarget().equals(columnMeta.getName())) {
                    indexed = true;
                    break;
                }
            }
        }
        return Optional.of(new CassandraColumnHandle(columnMeta.getName(), ordinalPosition, cassandraType.get(), partitionKey, clusteringKey, indexed, hidden));
    }