Skip to content

Commit

Permalink
Merge branch 'main' into completed
Browse files Browse the repository at this point in the history
# Conflicts:
#	2-0-jdbc-api/pom.xml
#	3-0-jpa-and-hibernate/3-0-3-account-dao/src/main/java/com/bobocode/dao/AccountDaoImpl.java
#	3-0-jpa-and-hibernate/3-1-2-company-products/src/main/java/com/bobocode/dao/CompanyDaoImpl.java
#	3-0-jpa-and-hibernate/3-1-3-author-book/src/main/java/com/bobocode/model/Author.java
#	3-0-jpa-and-hibernate/3-1-3-author-book/src/main/java/com/bobocode/model/Book.java
  • Loading branch information
tboychuk committed Oct 17, 2023
2 parents f6d15de + ca300dc commit c029984
Show file tree
Hide file tree
Showing 6 changed files with 237 additions and 158 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -49,10 +49,10 @@ void userIdTypeIsBigint() throws SQLException {
try (Connection connection = dataSource.getConnection()) {
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT * FROM INFORMATION_SCHEMA.COLUMNS" +
" WHERE table_name = 'users' AND column_name = 'id';");
" WHERE TABLE_NAME = 'users' AND COLUMN_NAME = 'id';");

resultSet.next();
String idTypeName = resultSet.getString("type_name");
String idTypeName = resultSet.getString("DATA_TYPE");

assertThat(idTypeName).isEqualTo("BIGINT");
}
Expand All @@ -65,9 +65,9 @@ void usersTableHasAllRequiredColumns() throws SQLException {
try (Connection connection = dataSource.getConnection()) {
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT * FROM INFORMATION_SCHEMA.COLUMNS" +
" WHERE table_name = 'users';");
" WHERE TABLE_NAME = 'users';");

List<String> columns = fetchColumnValues(resultSet, "column_name");
List<String> columns = fetchColumnValues(resultSet, "COLUMN_NAME");

assertThat(columns.size()).isEqualTo(5);
assertThat(columns).containsExactlyInAnyOrder("id", "email", "first_name", "last_name", "birthday");
Expand All @@ -80,10 +80,10 @@ void usersTableHasAllRequiredColumns() throws SQLException {
void testUsersTableStringColumnsHaveCorrectTypeAndLength() throws SQLException {
try (Connection connection = dataSource.getConnection()) {
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT column_name FROM INFORMATION_SCHEMA.COLUMNS" +
" WHERE table_name = 'users' AND type_name = 'VARCHAR' AND character_maximum_length = 255;");
ResultSet resultSet = statement.executeQuery("SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS" +
" WHERE TABLE_NAME = 'users' AND DATA_TYPE = 'CHARACTER VARYING' AND CHARACTER_MAXIMUM_LENGTH = 255;");

List<String> stringColumns = fetchColumnValues(resultSet, "column_name");
List<String> stringColumns = fetchColumnValues(resultSet, "COLUMN_NAME");

assertThat(stringColumns.size()).isEqualTo(3);
assertThat(stringColumns).containsExactlyInAnyOrder("email", "first_name", "last_name");
Expand All @@ -97,10 +97,10 @@ void userBirthdayTypeIsDate() throws SQLException {
try (Connection connection = dataSource.getConnection()) {
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT * FROM INFORMATION_SCHEMA.COLUMNS" +
" WHERE table_name = 'users' AND column_name = 'birthday';");
" WHERE TABLE_NAME = 'users' AND COLUMN_NAME = 'birthday';");

resultSet.next();
String idTypeName = resultSet.getString("type_name");
String idTypeName = resultSet.getString("DATA_TYPE");

assertThat(idTypeName).isEqualTo("DATE");
}
Expand All @@ -113,9 +113,9 @@ void usersTableRequiredColumnsHaveHaveNotNullConstraint() throws SQLException {
try (Connection connection = dataSource.getConnection()) {
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT * FROM INFORMATION_SCHEMA.COLUMNS" +
" WHERE table_name = 'users' AND nullable = false;");
" WHERE TABLE_NAME = 'users' AND IS_NULLABLE = 'NO';");

List<String> notNullColumns = fetchColumnValues(resultSet, "column_name");
List<String> notNullColumns = fetchColumnValues(resultSet, "COLUMN_NAME");

assertThat(notNullColumns).contains("email", "first_name", "last_name", "birthday");
}
Expand All @@ -127,8 +127,8 @@ void usersTableRequiredColumnsHaveHaveNotNullConstraint() throws SQLException {
void usersTableHasPrimaryKey() throws SQLException {
try (Connection connection = dataSource.getConnection()) {
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT * FROM INFORMATION_SCHEMA.CONSTRAINTS" +
" WHERE table_name = 'users' AND constraint_type = 'PRIMARY_KEY';");
ResultSet resultSet = statement.executeQuery("SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS" +
" WHERE TABLE_NAME = 'users' AND CONSTRAINT_TYPE = 'PRIMARY KEY';");

boolean resultIsNotEmpty = resultSet.next();

Expand All @@ -143,11 +143,11 @@ void usersTableHasPrimaryKey() throws SQLException {
void usersTablePrimaryKeyHasCorrectName() throws SQLException {
try (Connection connection = dataSource.getConnection()) {
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT * FROM INFORMATION_SCHEMA.CONSTRAINTS" +
" WHERE table_name = 'users' AND constraint_type = 'PRIMARY_KEY';");
ResultSet resultSet = statement.executeQuery("SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS" +
" WHERE TABLE_NAME = 'users' AND CONSTRAINT_TYPE = 'PRIMARY KEY';");

resultSet.next();
String pkConstraintName = resultSet.getString("constraint_name");
String pkConstraintName = resultSet.getString(1);

assertThat(pkConstraintName).isEqualTo("users_PK");
}
Expand All @@ -159,11 +159,15 @@ void usersTablePrimaryKeyHasCorrectName() throws SQLException {
void usersTablePrimaryKeyBasedOnIdField() throws SQLException {
try (Connection connection = dataSource.getConnection()) {
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT * FROM INFORMATION_SCHEMA.CONSTRAINTS" +
" WHERE table_name = 'users' AND constraint_type = 'PRIMARY_KEY';");
ResultSet resultSet = statement.executeQuery("""
SELECT ccu.COLUMN_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
INNER JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE ccu
ON tc.CONSTRAINT_NAME = ccu.CONSTRAINT_NAME
WHERE tc.TABLE_NAME = 'users' AND tc.CONSTRAINT_TYPE = 'PRIMARY KEY';
""");

resultSet.next();
String pkColumn = resultSet.getString("column_list");
String pkColumn = resultSet.getString(1);

assertThat("id").isEqualTo(pkColumn);
}
Expand All @@ -175,12 +179,16 @@ void usersTablePrimaryKeyBasedOnIdField() throws SQLException {
void testUsersTableHasCorrectAlternativeKey() throws SQLException {
try (Connection connection = dataSource.getConnection()) {
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT * FROM INFORMATION_SCHEMA.CONSTRAINTS" +
" WHERE table_name = 'users' AND constraint_type = 'UNIQUE';");
ResultSet resultSet = statement.executeQuery("""
SELECT tc.CONSTRAINT_NAME, ccu.COLUMN_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
INNER JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE ccu
ON tc.CONSTRAINT_NAME = ccu.CONSTRAINT_NAME
WHERE tc.TABLE_NAME = 'users' AND tc.CONSTRAINT_TYPE = 'UNIQUE';
""");

resultSet.next();
String uniqueConstraintName = resultSet.getString("constraint_name");
String uniqueConstraintColumn = resultSet.getString("column_list");
String uniqueConstraintName = resultSet.getString(1);
String uniqueConstraintColumn = resultSet.getString(2);

assertThat(uniqueConstraintName).isEqualTo("users_email_AK");
assertThat(uniqueConstraintColumn).isEqualTo("email");
Expand Down Expand Up @@ -208,10 +216,10 @@ void testProfilesGroupIdTypeIsBigint() throws SQLException {
try (Connection connection = dataSource.getConnection()) {
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT * FROM INFORMATION_SCHEMA.COLUMNS" +
" WHERE table_name = 'profiles' AND column_name = 'user_id';");
" WHERE TABLE_NAME = 'profiles' AND COLUMN_NAME = 'user_id';");

resultSet.next();
String idTypeName = resultSet.getString("type_name");
String idTypeName = resultSet.getString("DATA_TYPE");

assertThat(idTypeName).isEqualTo("BIGINT");
}
Expand All @@ -224,9 +232,9 @@ void testProfilesTableHasAllRequiredColumns() throws SQLException {
try (Connection connection = dataSource.getConnection()) {
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT * FROM INFORMATION_SCHEMA.COLUMNS" +
" WHERE table_name = 'profiles';");
" WHERE TABLE_NAME = 'profiles';");

List<String> columns = fetchColumnValues(resultSet, "column_name");
List<String> columns = fetchColumnValues(resultSet, "COLUMN_NAME");

assertThat(columns.size()).isEqualTo(5);
assertThat(columns).containsExactlyInAnyOrder("user_id", "job_position", "company", "education", "city");
Expand All @@ -239,10 +247,10 @@ void testProfilesTableHasAllRequiredColumns() throws SQLException {
void profilesTableStringColumnsHaveCorrectTypeAndLength() throws SQLException {
try (Connection connection = dataSource.getConnection()) {
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT column_name FROM INFORMATION_SCHEMA.COLUMNS" +
" WHERE table_name = 'profiles' AND type_name = 'VARCHAR' AND character_maximum_length = 255;");
ResultSet resultSet = statement.executeQuery("SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS" +
" WHERE TABLE_NAME = 'profiles' AND DATA_TYPE = 'CHARACTER VARYING' AND CHARACTER_MAXIMUM_LENGTH = 255;");

List<String> stringColumns = fetchColumnValues(resultSet, "column_name");
List<String> stringColumns = fetchColumnValues(resultSet, "COLUMN_NAME");

assertThat(stringColumns.size()).isEqualTo(4);
assertThat(stringColumns).containsExactlyInAnyOrder("job_position", "company", "education", "city");
Expand All @@ -255,8 +263,8 @@ void profilesTableStringColumnsHaveCorrectTypeAndLength() throws SQLException {
void profilesTablesHasPrimaryKey() throws SQLException {
try (Connection connection = dataSource.getConnection()) {
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT * FROM INFORMATION_SCHEMA.CONSTRAINTS" +
" WHERE table_name = 'profiles' AND constraint_type = 'PRIMARY_KEY';");
ResultSet resultSet = statement.executeQuery("SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS" +
" WHERE TABLE_NAME = 'profiles' AND CONSTRAINT_TYPE = 'PRIMARY KEY';");

boolean resultIsNotEmpty = resultSet.next();

Expand All @@ -270,11 +278,11 @@ void profilesTablesHasPrimaryKey() throws SQLException {
void profilesTablePrimaryKeyHasCorrectName() throws SQLException {
try (Connection connection = dataSource.getConnection()) {
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT * FROM INFORMATION_SCHEMA.CONSTRAINTS" +
" WHERE table_name = 'profiles' AND constraint_type = 'PRIMARY_KEY';");
ResultSet resultSet = statement.executeQuery("SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS" +
" WHERE TABLE_NAME = 'profiles' AND CONSTRAINT_TYPE = 'PRIMARY KEY';");

resultSet.next();
String pkConstraintName = resultSet.getString("constraint_name");
String pkConstraintName = resultSet.getString("CONSTRAINT_NAME");

assertThat(pkConstraintName).isEqualTo("profiles_PK");
}
Expand All @@ -286,11 +294,15 @@ void profilesTablePrimaryKeyHasCorrectName() throws SQLException {
void profilesTablePrimaryKeyBasedOnForeignKeyColumn() throws SQLException {
try (Connection connection = dataSource.getConnection()) {
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT * FROM INFORMATION_SCHEMA.CONSTRAINTS" +
" WHERE table_name = 'profiles' AND constraint_type = 'PRIMARY_KEY';");
ResultSet resultSet = statement.executeQuery("""
SELECT ccu.COLUMN_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
INNER JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE ccu
ON tc.CONSTRAINT_NAME = ccu.CONSTRAINT_NAME
WHERE tc.TABLE_NAME = 'profiles' AND tc.CONSTRAINT_TYPE = 'PRIMARY KEY';
""");

resultSet.next();
String pkColumn = resultSet.getString("column_list");
String pkColumn = resultSet.getString(1);

assertThat("user_id", equalTo(pkColumn));
}
Expand All @@ -302,8 +314,12 @@ void profilesTablePrimaryKeyBasedOnForeignKeyColumn() throws SQLException {
void testProfilesHasForeignKeyToUsers() throws SQLException {
try (Connection connection = dataSource.getConnection()) {
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT * FROM INFORMATION_SCHEMA.CONSTRAINTS" +
" WHERE table_name = 'profiles' AND constraint_type = 'REFERENTIAL' AND column_list = 'user_id';");
ResultSet resultSet = statement.executeQuery("""
SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
INNER JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE ccu
ON tc.CONSTRAINT_NAME = ccu.CONSTRAINT_NAME
WHERE tc.TABLE_NAME = 'profiles' AND tc.CONSTRAINT_TYPE = 'FOREIGN KEY' AND ccu.COLUMN_NAME = 'user_id';
""");

boolean resultIsNotEmpty = resultSet.next();

Expand All @@ -317,11 +333,15 @@ void testProfilesHasForeignKeyToUsers() throws SQLException {
void profilesForeignKeyToUsersHasCorrectName() throws SQLException {
try (Connection connection = dataSource.getConnection()) {
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT * FROM INFORMATION_SCHEMA.CONSTRAINTS" +
" WHERE table_name = 'profiles' AND constraint_type = 'REFERENTIAL' AND column_list = 'user_id';");
ResultSet resultSet = statement.executeQuery("""
SELECT tc.CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
INNER JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE ccu
ON tc.CONSTRAINT_NAME = ccu.CONSTRAINT_NAME
WHERE tc.TABLE_NAME = 'profiles' AND tc.CONSTRAINT_TYPE = 'FOREIGN KEY' AND ccu.COLUMN_NAME = 'user_id';
""");

resultSet.next();
String fkConstraintName = resultSet.getString("constraint_name");
String fkConstraintName = resultSet.getString(1);

assertThat(fkConstraintName).isEqualTo("profiles_users_FK");
}
Expand Down
Loading

0 comments on commit c029984

Please sign in to comment.