How to use getH2EnumTypes method of org.evomaster.client.java.controller.internal.db.SchemaExtractor class

Best EvoMaster code snippet using org.evomaster.client.java.controller.internal.db.SchemaExtractor.getH2EnumTypes

Source:SchemaExtractor.java Github

copy

Full Screen

...167 if (dt.equals(DatabaseType.POSTGRES)) {168 List<ColumnAttributes> columnAttributes = getPostgresColumnAttributes(connection);169 addColumnAttributes(schemaDto, columnAttributes);170 } else if (dt.equals(DatabaseType.H2)) {171 List<DbTableConstraint> h2EnumConstraints = getH2EnumTypes(schemaDto.name, md);172 addConstraints(schemaDto, h2EnumConstraints);173 }174 assert validate(schemaDto);175 return schemaDto;176 }177 private static void addColumnAttributes(DbSchemaDto schemaDto, List<ColumnAttributes> listOfColumnAttributes) {178 for (ColumnAttributes columnAttributes : listOfColumnAttributes) {179 String tableName = columnAttributes.tableName;180 String columnName = columnAttributes.columnName;181 ColumnDto columnDto = getColumnDto(schemaDto, tableName, columnName);182 columnDto.numberOfDimensions = columnAttributes.numberOfDimensions;183 }184 }185 private static ColumnDto getColumnDto(DbSchemaDto schemaDto, String tableName, String columnName) {186 TableDto tableDto = schemaDto.tables.stream()187 .filter(t -> t.name.equals(tableName.toLowerCase()))188 .findFirst()189 .orElse(null);190 return tableDto.columns.stream()191 .filter(c -> c.name.equals(columnName.toLowerCase()))192 .findFirst()193 .orElse(null);194 }195 private static String getSchemaName(Connection connection, DatabaseType dt) throws SQLException {196 String schemaName;197 if (dt.equals(DatabaseType.MYSQL)) {198 // schema is database name in mysql199 schemaName = connection.getCatalog();200 } else {201 try {202 schemaName = connection.getSchema();203 } catch (Exception | AbstractMethodError e) {204 /*205 In remote sessions, getSchema might fail.206 We do not do much with it anyway (at least for207 now), so not a big deal...208 Furthermore, some drivers might be compiled to Java 6,209 whereas getSchema was introduced in Java 7210 */211 schemaName = "public";212 }213 //see https://www.progress.com/blogs/jdbc-tutorial-extracting-database-metadata-via-jdbc-driver214 schemaName = schemaName.toUpperCase();215 }216 return schemaName;217 }218 private static class ColumnAttributes {219 public String tableName;220 public String columnName;221 public int numberOfDimensions;222 }223 private static List<ColumnAttributes> getPostgresColumnAttributes(Connection connection) throws SQLException {224 String query = "SELECT pg_namespace.nspname as TABLE_NAMESPACE, pg_class.relname as TABLE_NAME, pg_attribute.attname as COLUMN_NAME, pg_attribute.attndims as NUMBER_OF_DIMENSIONS \n" +225 "FROM pg_attribute \n" +226 "INNER JOIN pg_class ON pg_class.oid = pg_attribute.attrelid " +227 "INNER JOIN pg_namespace ON pg_namespace.oid = pg_class.relnamespace " +228 "WHERE pg_namespace.nspname != 'pg_catalog' ";229 List<ColumnAttributes> listOfColumnAttributes = new LinkedList<>();230 try (Statement stmt = connection.createStatement()) {231 ResultSet columnAttributesResultSet = stmt.executeQuery(query);232 while (columnAttributesResultSet.next()) {233 String tableNamesapce = columnAttributesResultSet.getString("TABLE_NAMESPACE");234 String tableName = columnAttributesResultSet.getString("TABLE_NAME");235 String columnName = columnAttributesResultSet.getString("COLUMN_NAME");236 int numberOfDimensions = columnAttributesResultSet.getInt("NUMBER_OF_DIMENSIONS");237 if (numberOfDimensions == 0) {238 // skip attribute rows when data types are not arrays, matrixes, etc.239 continue;240 }241 ColumnAttributes columnAttributes = new ColumnAttributes();242 columnAttributes.tableName = tableName;243 columnAttributes.columnName = columnName;244 columnAttributes.numberOfDimensions = numberOfDimensions;245 listOfColumnAttributes.add(columnAttributes);246 }247 }248 return listOfColumnAttributes;249 }250 private static List<String> getAllCompositeTypeNames(Connection connection) throws SQLException {251 // Source: https://stackoverflow.com/questions/3660787/how-to-list-custom-types-using-postgres-information-schema252 String listAllCompositeTypesQuery = "SELECT n.nspname as schema, t.typname as typename \n" +253 "FROM pg_type t \n" +254 "LEFT JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace \n" +255 "WHERE (t.typrelid = 0 OR (SELECT c.relkind = 'c' FROM pg_catalog.pg_class c WHERE c.oid = t.typrelid)) \n" +256 "AND NOT EXISTS(SELECT 1 FROM pg_catalog.pg_type el WHERE el.oid = t.typelem AND el.typarray = t.oid)\n" +257 "AND n.nspname NOT IN ('pg_catalog', 'information_schema')" +258 "AND t.typtype ='c';";259 List<String> compositeTypeNames = new ArrayList<>();260 try (Statement listAllCompositeTypesStmt = connection.createStatement()) {261 ResultSet listAllCompositeTypesResultSet = listAllCompositeTypesStmt.executeQuery(listAllCompositeTypesQuery);262 while (listAllCompositeTypesResultSet.next()) {263 compositeTypeNames.add(listAllCompositeTypesResultSet.getString("typename"));264 }265 }266 return compositeTypeNames;267 }268 private static List<CompositeTypeDto> getPostgresCompositeTypes(Connection connection) throws SQLException {269 List<CompositeTypeDto> compositeTypeDtos = new ArrayList<>();270 List<String> compositeTypeNames = getAllCompositeTypeNames(connection);271 for (String compositeTypeName : compositeTypeNames) {272 List<CompositeTypeColumnDto> columnDtos = getAllCompositeTypeColumns(connection, compositeTypeName, compositeTypeNames);273 CompositeTypeDto compositeTypeDto = new CompositeTypeDto();274 compositeTypeDto.name = compositeTypeName;275 compositeTypeDto.columns = columnDtos;276 compositeTypeDtos.add(compositeTypeDto);277 }278 return compositeTypeDtos;279 }280 private static final String TEXT_DATA_TYPE = "text";281 private static final String BIT_DATA_TYPE = "bit";282 private static final String VAR_BIT_DATA_TYPE = "varbit";283 private static final String CHAR_DATA_TYPE = "char";284 private static final String VAR_CHAR_DATA_TYPE = "varchar";285 private static final String BLANK_PADDED_CHAR_DATA_TYPE = "bpchar";286 private static final String NUMERIC_DATA_TYPE = "numeric";287 private static List<CompositeTypeColumnDto> getAllCompositeTypeColumns(Connection connection, String compositeTypeName, List<String> allCompositeTypeNames) throws SQLException {288 // Source: https://stackoverflow.com/questions/6979282/postgresql-find-information-about-user-defined-types289 String listAttributesQuery = String.format(290 "SELECT pg_attribute.attname AS attname, pg_attribute.attlen as attlen, pg_type.typname AS typename " +291 " FROM pg_attribute " +292 " JOIN pg_type ON pg_attribute.atttypid=pg_type.oid " +293 " WHERE pg_attribute.attrelid =\n" +294 " (SELECT typrelid FROM pg_type WHERE typname = '%s') " +295 " ORDER BY pg_attribute.attnum ", compositeTypeName);296 List<CompositeTypeColumnDto> columnDtos = new ArrayList<>();297 try (Statement listAttributesStmt = connection.createStatement()) {298 ResultSet listAttributesResultSet = listAttributesStmt.executeQuery(listAttributesQuery);299 while (listAttributesResultSet.next()) {300 CompositeTypeColumnDto columnDto = new CompositeTypeColumnDto();301 columnDto.name = listAttributesResultSet.getString("attname");302 columnDto.type = listAttributesResultSet.getString("typename");303 int attlen = listAttributesResultSet.getInt("attlen");304 /*305 * Composite type columns can not include constraints (such as NOT NULL).306 * Therefore, all columns in composite types are nullable.307 */308 columnDto.nullable = true;309 columnDto.columnTypeIsComposite = allCompositeTypeNames.stream().anyMatch(t -> t.equalsIgnoreCase(columnDto.type));310 if (columnDto.columnTypeIsComposite) {311 columnDto.size = 0;312 } else {313 switch (columnDto.type) {314 case TEXT_DATA_TYPE: {315 columnDto.size = Integer.MAX_VALUE;316 }317 break;318 case NUMERIC_DATA_TYPE:319 case CHAR_DATA_TYPE:320 case VAR_CHAR_DATA_TYPE:321 case BIT_DATA_TYPE:322 case VAR_BIT_DATA_TYPE:323 case BLANK_PADDED_CHAR_DATA_TYPE: {324 throw new UnsupportedOperationException("cannot get variable length size of type (varchar, char, varbit, bit, numeric) currently not supported for postgres composite types: " + columnDto.name + " with type " + columnDto.type);325 }326 default: {327 columnDto.size = attlen;328 }329 }330 }331 columnDtos.add(columnDto);332 }333 }334 return columnDtos;335 }336 /**337 * In H2, the ENUM columns are stored as the column type.338 * We return the definition of each enum column using TABLE_COLUMN -> [ENUM VALUES]339 *340 * @param md the database metadata341 * @return a list of enum constraints342 * @throws SQLException if any column name is incorrect343 */344 private static List<DbTableConstraint> getH2EnumTypes(String schemaName, DatabaseMetaData md) throws SQLException {345 List<DbTableConstraint> enumTypesConstraints = new LinkedList<>();346 ResultSet tables = md.getTables(null, schemaName, null, new String[]{"TABLE"});347 while (tables.next()) {348 String tableName = tables.getString("TABLE_NAME");349 ResultSet columns = md.getColumns(null, schemaName, tableName, null);350 while (columns.next()) {351 String columnName = columns.getString("COLUMN_NAME");352 String typeName = columns.getString("TYPE_NAME");353 if (typeName.startsWith("ENUM")) {354 String sqlExpression = String.format("(\"%s\" IN %s)", columnName, typeName.substring("ENUM".length()));355 DbTableCheckExpression constraint = new DbTableCheckExpression(tableName, sqlExpression);356 enumTypesConstraints.add(constraint);357 }358 }...

Full Screen

Full Screen

getH2EnumTypes

Using AI Code Generation

copy

Full Screen

1import org.evomaster.client.java.controller.internal.db.SchemaExtractor;2import org.evomaster.client.java.controller.internal.db.schema.Table;3import org.evomaster.client.java.controller.internal.db.schema.TableColumn;4import org.evomaster.client.java.controller.internal.db.schema.TableIndex;5import org.evomaster.client.java.controller.internal.db.schema.TableForeignKey;6import java.sql.Connection;7import java.sql.DatabaseMetaData;8import java.sql.DriverManager;9import java.sql.ResultSet;10import java.sql.SQLException;11import java.util.Arrays;12import java.util.Collections;13import java.util.List;14import java.util.Map;15import java.util.stream.Collectors;16public class Main {17 public static void main(String[] args) throws ClassNotFoundException, SQLException {18 Class.forName("org.h2.Driver");19 Connection connection = DriverManager.getConnection("jdbc:h2:mem:~/test", "sa", "");20 connection.createStatement().execute("CREATE TABLE IF NOT EXISTS my_table (id INT PRIMARY KEY, my_enum ENUM('A', 'B', 'C'))");21 connection.createStatement().execute("INSERT INTO my_table(id, my_enum) VALUES (1, 'A')");22 connection.createStatement().execute("INSERT INTO my_table(id, my_enum) VALUES (2, 'B')");23 connection.createStatement().execute("INSERT INTO my_table(id, my_enum) VALUES (3, 'C')");24 DatabaseMetaData metadata = connection.getMetaData();25 ResultSet tables = metadata.getTables(null, null, null, null);26 List<Table> tableList = SchemaExtractor.getTables(tables);27 ResultSet columns = metadata.getColumns(null, null, null, null);28 Map<String, List<TableColumn>> columnMap = SchemaExtractor.getColumns(columns);29 ResultSet indexes = metadata.getIndexInfo(null, null, null, false, false);30 Map<String, List<TableIndex>> indexMap = SchemaExtractor.getIndexes(indexes);31 ResultSet foreignKeys = metadata.getImportedKeys(null, null, null);32 Map<String, List<TableForeignKey>> foreignKeyMap = SchemaExtractor.getForeignKeys(foreignKeys);

Full Screen

Full Screen

getH2EnumTypes

Using AI Code Generation

copy

Full Screen

1package org.evomaster.client.java.controller.internal;2import org.evomaster.client.java.controller.api.dto.database.schema.DatabaseType;3import org.evomaster.client.java.controller.api.dto.database.schema.DbSchemaDto;4import org.evomaster.client.java.controller.api.dto.database.schema.TableDto;5import org.evomaster.client.java.controller.api.dto.database.schema.TableIndexDto;6import org.evomaster.client.java.controller.api.dto.database.schema.TableIndexType;7import org.evomaster.client.java.controller.api.dto.database.schema.TableType;8import org.evomaster.client.java.controller.api.dto.database.schema.ViewDto;9import org.evomaster.client.java.controller.internal.db.SqlScriptRunner;10import org.evomaster.client.java.controller.internal.db.TableColumn;11import org.evomaster.client.java.controller.internal.db.TableRow;12import org.evomaster.client.java.controller.internal.db.h2.H2SchemaExtractor;13import org.evomaster.client.java.controller.internal.db.h2.H2TableIndexDto;14import org.evomaster.client.java.controller.internal.db.h2.H2TableIndexType;15import org.evomaster.client.java.controller.internal.db.h2.H2TableType;16import org.evomaster.client.java.controller.internal.db.h2.H2ViewDto;17import org.evomaster.client.java.controller.internal.db.h2.H2ViewType;18import org.evomaster.client.java.controller.internal.db.schema.SqlScript;19import org.evomaster.client.java.controller.internal.db.schema.SqlScriptType;20import org.evomaster.client.java.controller.internal.db.schema.Table;21import org.evomaster.client.java.controller.internal.db.schema.View;22import org.junit.jupiter.api.AfterAll;23import org.junit.jupiter.api.BeforeAll;24import org.junit.jupiter.api.Disabled;25import org.junit.jupiter.api.Test;26import java.sql.*;27import java.util.*;28import java.util.stream.Collectors;29import static org.junit

Full Screen

Full Screen

getH2EnumTypes

Using AI Code Generation

copy

Full Screen

1public class EnumTypes {2 public static List<EnumType> getEnumTypes() {3 List<EnumType> enumTypes = new ArrayList<>();4 List<String> enumTypeNames = SchemaExtractor.getH2EnumTypes("testdb");5 for (String enumTypeName : enumTypeNames) {6 enumTypes.add(new EnumType(enumTypeName));7 }8 return enumTypes;9 }10}

Full Screen

Full Screen

getH2EnumTypes

Using AI Code Generation

copy

Full Screen

1import org.evomaster.client.java.controller.internal.db.SchemaExtractor;2import org.evomaster.client.java.controller.internal.db.schema.Column;3import org.evomaster.client.java.controller.internal.db.schema.Table;4import org.evomaster.client.java.controller.internal.db.schema.Schema;5Schema schema = SchemaExtractor.extract(connection);6List<Column> enumTypes = schema.getH2EnumTypes();7schema.addEnumTypes(enumTypes);

Full Screen

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful