presto-main/src/main/java/io/prestosql/connector/informationschema/InformationSchemaTable.java/InformationSchemaTable/InformationSchemaTable
class InformationSchemaTable:    InformationSchemaTable(String tableName)
    {
        schemaTableName = new SchemaTableName(INFORMATION_SCHEMA, tableName);
        if (tableName.equals("columns")) {
            tableMetadata = tableMetadataBuilder(schemaTableName)
                    .column("table_catalog", createUnboundedVarcharType())
                    .column("table_schema", createUnboundedVarcharType())
                    .column("table_name", createUnboundedVarcharType())
                    .column("column_name", createUnboundedVarcharType())
                    .column("ordinal_position", BIGINT)
                    .column("column_default", createUnboundedVarcharType())
                    .column("is_nullable", createUnboundedVarcharType())
                    .column("data_type", createUnboundedVarcharType())
                    .column("comment", createUnboundedVarcharType())
                    .column("extra_info", createUnboundedVarcharType())
                    .hiddenColumn("column_comment", createUnboundedVarcharType()) // MySQL compatible
                    .build();
            return;
        }
        if (tableName.equals("tables")) {
            tableMetadata = tableMetadataBuilder(schemaTableName)
                    .column("table_catalog", createUnboundedVarcharType())
                    .column("table_schema", createUnboundedVarcharType())
                    .column("table_name", createUnboundedVarcharType())
                    .column("table_type", createUnboundedVarcharType())
                    .hiddenColumn("table_comment", createUnboundedVarcharType()) // MySQL compatible
                    .build();
            return;
        }
        if (tableName.equals("views")) {
            tableMetadata = tableMetadataBuilder(schemaTableName)
                    .column("table_catalog", createUnboundedVarcharType())
                    .column("table_schema", createUnboundedVarcharType())
                    .column("table_name", createUnboundedVarcharType())
                    .column("view_definition", createUnboundedVarcharType())
                    .build();
            return;
        }
        if (tableName.equals("schemata")) {
            tableMetadata = tableMetadataBuilder(schemaTableName)
                    .column("catalog_name", createUnboundedVarcharType())
                    .column("schema_name", createUnboundedVarcharType())
                    .build();
            return;
        }
        if (tableName.equals("table_privileges")) {
            tableMetadata = tableMetadataBuilder(schemaTableName)
                    .column("grantor", createUnboundedVarcharType())
                    .column("grantor_type", createUnboundedVarcharType())
                    .column("grantee", createUnboundedVarcharType())
                    .column("grantee_type", createUnboundedVarcharType())
                    .column("table_catalog", createUnboundedVarcharType())
                    .column("table_schema", createUnboundedVarcharType())
                    .column("table_name", createUnboundedVarcharType())
                    .column("privilege_type", createUnboundedVarcharType())
                    .column("is_grantable", createUnboundedVarcharType())
                    .column("with_hierarchy", createUnboundedVarcharType())
                    .build();
            return;
        }
        if (tableName.equals("roles")) {
            tableMetadata = tableMetadataBuilder(schemaTableName)
                    .column("role_name", createUnboundedVarcharType())
                    .build();
            return;
        }
        if (tableName.equals("applicable_roles")) {
            tableMetadata = tableMetadataBuilder(schemaTableName)
                    .column("grantee", createUnboundedVarcharType())
                    .column("grantee_type", createUnboundedVarcharType())
                    .column("role_name", createUnboundedVarcharType())
                    .column("is_grantable", createUnboundedVarcharType())
                    .build();
            return;
        }
        if (tableName.equals("enabled_roles")) {
            tableMetadata = tableMetadataBuilder(schemaTableName)
                    .column("role_name", createUnboundedVarcharType())
                    .build();
            return;
        }
        throw new PrestoException(INVALID_ARGUMENTS, "Invalid table name");
    }