SQL queries conventions

This commit is contained in:
Alex Golub 2023-01-14 18:09:17 +02:00
parent abaa0ef7cf
commit 85775f930a
1 changed files with 29 additions and 23 deletions

View File

@ -1,28 +1,29 @@
package com.baeldung.groovy.sql package com.baeldung.groovy.sql
import groovy.sql.GroovyResultSet import groovy.sql.GroovyResultSet
import groovy.sql.GroovyRowResult
import groovy.sql.Sql import groovy.sql.Sql
import groovy.transform.CompileStatic
import static org.junit.Assert.*
import org.junit.Test import org.junit.Test
import static org.junit.Assert.*
class SqlTest { class SqlTest {
final Map dbConnParams = [url: 'jdbc:hsqldb:mem:testDB', user: 'sa', password: '', driver: 'org.hsqldb.jdbc.JDBCDriver'] final Map dbConnParams = [url: 'jdbc:hsqldb:mem:testDB',
user: 'sa',
password: '',
driver: 'org.hsqldb.jdbc.JDBCDriver']
@Test @Test
void whenNewSqlInstance_thenDbIsAccessed() { void whenNewSqlInstance_thenDbIsAccessed() {
def sql = Sql.newInstance(dbConnParams) def sql = Sql.newInstance(dbConnParams)
sql.close() sql.close()
sql.close()
} }
@Test @Test
void whenTableDoesNotExist_thenSelectFails() { void whenTableDoesNotExist_thenSelectFails() {
try { try {
Sql.withInstance(dbConnParams) { Sql sql -> Sql.withInstance(dbConnParams) { Sql sql ->
sql.eachRow('select * from PROJECT') {} sql.eachRow('SELECT * FROM PROJECT') {}
} }
fail("An exception should have been thrown") fail("An exception should have been thrown")
@ -34,12 +35,12 @@ class SqlTest {
@Test @Test
void whenTableCreated_thenSelectIsPossible() { void whenTableCreated_thenSelectIsPossible() {
Sql.withInstance(dbConnParams) { Sql sql -> Sql.withInstance(dbConnParams) { Sql sql ->
def result = sql.execute 'create table PROJECT_1 (id integer not null, name varchar(50), url varchar(100))' def result = sql.execute 'CREATE TABLE PROJECT_1 (ID INTEGER NOT NULL, NAME VARCHAR(50), URL VARCHAR(100))'
assertEquals(0, sql.updateCount) assertEquals(0, sql.updateCount)
assertFalse(result) assertFalse(result)
result = sql.execute('select * from PROJECT_1') result = sql.execute('SELECT * FROM PROJECT_1')
assertTrue(result) assertTrue(result)
} }
@ -48,7 +49,7 @@ class SqlTest {
@Test @Test
void whenIdentityColumn_thenInsertReturnsNewId() { void whenIdentityColumn_thenInsertReturnsNewId() {
Sql.withInstance(dbConnParams) { Sql sql -> Sql.withInstance(dbConnParams) { Sql sql ->
sql.execute 'create table PROJECT_2 (ID IDENTITY, NAME VARCHAR (50), URL VARCHAR (100))' sql.execute 'CREATE TABLE PROJECT_2 (ID IDENTITY, NAME VARCHAR (50), URL VARCHAR (100))'
def ids = sql.executeInsert("INSERT INTO PROJECT_2 (NAME, URL) VALUES ('tutorials', 'github.com/eugenp/tutorials')") def ids = sql.executeInsert("INSERT INTO PROJECT_2 (NAME, URL) VALUES ('tutorials', 'github.com/eugenp/tutorials')")
assertEquals(0, ids[0][0]) assertEquals(0, ids[0][0])
@ -62,9 +63,10 @@ class SqlTest {
@Test @Test
void whenUpdate_thenNumberOfAffectedRows() { void whenUpdate_thenNumberOfAffectedRows() {
Sql.withInstance(dbConnParams) { Sql sql -> Sql.withInstance(dbConnParams) { Sql sql ->
sql.execute 'create table PROJECT_3 (ID IDENTITY, NAME VARCHAR (50), URL VARCHAR (100))' sql.execute 'CREATE TABLE PROJECT_3 (ID IDENTITY, NAME VARCHAR (50), URL VARCHAR (100))'
sql.executeInsert("INSERT INTO PROJECT_3 (NAME, URL) VALUES ('tutorials', 'github.com/eugenp/tutorials')") sql.executeInsert("INSERT INTO PROJECT_3 (NAME, URL) VALUES ('tutorials', 'github.com/eugenp/tutorials')")
sql.executeInsert("INSERT INTO PROJECT_3 (NAME, URL) VALUES ('REST with Spring', 'github.com/eugenp/REST-With-Spring')") sql.executeInsert("INSERT INTO PROJECT_3 (NAME, URL) VALUES ('REST with Spring', 'github.com/eugenp/REST-With-Spring')")
def count = sql.executeUpdate("UPDATE PROJECT_3 SET URL = 'https://' + URL") def count = sql.executeUpdate("UPDATE PROJECT_3 SET URL = 'https://' + URL")
assertEquals(2, count) assertEquals(2, count)
@ -74,7 +76,7 @@ class SqlTest {
@Test @Test
void whenEachRow_thenResultSetHasProperties() { void whenEachRow_thenResultSetHasProperties() {
Sql.withInstance(dbConnParams) { Sql sql -> Sql.withInstance(dbConnParams) { Sql sql ->
sql.execute 'create table PROJECT_4 (ID IDENTITY, NAME VARCHAR (50), URL VARCHAR (100))' sql.execute 'CREATE TABLE PROJECT_4 (ID IDENTITY, NAME VARCHAR (50), URL VARCHAR (100))'
sql.executeInsert("INSERT INTO PROJECT_4 (NAME, URL) VALUES ('tutorials', 'https://github.com/eugenp/tutorials')") sql.executeInsert("INSERT INTO PROJECT_4 (NAME, URL) VALUES ('tutorials', 'https://github.com/eugenp/tutorials')")
sql.executeInsert("INSERT INTO PROJECT_4 (NAME, URL) VALUES ('REST with Spring', 'https://github.com/eugenp/REST-With-Spring')") sql.executeInsert("INSERT INTO PROJECT_4 (NAME, URL) VALUES ('REST with Spring', 'https://github.com/eugenp/REST-With-Spring')")
@ -93,7 +95,7 @@ class SqlTest {
@Test @Test
void whenPagination_thenSubsetIsReturned() { void whenPagination_thenSubsetIsReturned() {
Sql.withInstance(dbConnParams) { Sql sql -> Sql.withInstance(dbConnParams) { Sql sql ->
sql.execute 'create table PROJECT_5 (ID IDENTITY, NAME VARCHAR (50), URL VARCHAR (100))' sql.execute 'CREATE TABLE PROJECT_5 (ID IDENTITY, NAME VARCHAR (50), URL VARCHAR (100))'
sql.executeInsert("INSERT INTO PROJECT_5 (NAME, URL) VALUES ('tutorials', 'github.com/eugenp/tutorials')") sql.executeInsert("INSERT INTO PROJECT_5 (NAME, URL) VALUES ('tutorials', 'github.com/eugenp/tutorials')")
sql.executeInsert("INSERT INTO PROJECT_5 (NAME, URL) VALUES ('REST with Spring', 'github.com/eugenp/REST-With-Spring')") sql.executeInsert("INSERT INTO PROJECT_5 (NAME, URL) VALUES ('REST with Spring', 'github.com/eugenp/REST-With-Spring')")
def rows = sql.rows('SELECT * FROM PROJECT_5 ORDER BY NAME', 1, 1) def rows = sql.rows('SELECT * FROM PROJECT_5 ORDER BY NAME', 1, 1)
@ -106,9 +108,11 @@ class SqlTest {
@Test @Test
void whenParameters_thenReplacement() { void whenParameters_thenReplacement() {
Sql.withInstance(dbConnParams) { Sql sql -> Sql.withInstance(dbConnParams) { Sql sql ->
sql.execute 'create table PROJECT_6 (ID IDENTITY, NAME VARCHAR (50), URL VARCHAR (100))' sql.execute 'CREATE TABLE PROJECT_6 (ID IDENTITY, NAME VARCHAR (50), URL VARCHAR (100))'
sql.execute('INSERT INTO PROJECT_6 (NAME, URL) VALUES (?, ?)', 'tutorials', 'github.com/eugenp/tutorials') sql.execute('INSERT INTO PROJECT_6 (NAME, URL) VALUES (?, ?)',
sql.execute("INSERT INTO PROJECT_6 (NAME, URL) VALUES (:name, :url)", [name: 'REST with Spring', url: 'github.com/eugenp/REST-With-Spring']) 'tutorials', 'github.com/eugenp/tutorials')
sql.execute("INSERT INTO PROJECT_6 (NAME, URL) VALUES (:name, :url)",
[name: 'REST with Spring', url: 'github.com/eugenp/REST-With-Spring'])
def rows = sql.rows("SELECT * FROM PROJECT_6 WHERE NAME = 'tutorials'") def rows = sql.rows("SELECT * FROM PROJECT_6 WHERE NAME = 'tutorials'")
@ -123,7 +127,7 @@ class SqlTest {
@Test @Test
void whenParametersInGString_thenReplacement() { void whenParametersInGString_thenReplacement() {
Sql.withInstance(dbConnParams) { Sql sql -> Sql.withInstance(dbConnParams) { Sql sql ->
sql.execute 'create table PROJECT_7 (ID IDENTITY, NAME VARCHAR (50), URL VARCHAR (100))' sql.execute 'CREATE TABLE PROJECT_7 (ID IDENTITY, NAME VARCHAR (50), URL VARCHAR (100))'
sql.execute "INSERT INTO PROJECT_7 (NAME, URL) VALUES (${'tutorials'}, ${'github.com/eugenp/tutorials'})" sql.execute "INSERT INTO PROJECT_7 (NAME, URL) VALUES (${'tutorials'}, ${'github.com/eugenp/tutorials'})"
def name = 'REST with Spring' def name = 'REST with Spring'
def url = 'github.com/eugenp/REST-With-Spring' def url = 'github.com/eugenp/REST-With-Spring'
@ -143,7 +147,7 @@ class SqlTest {
void whenTransactionRollback_thenNoDataInserted() { void whenTransactionRollback_thenNoDataInserted() {
Sql.withInstance(dbConnParams) { Sql sql -> Sql.withInstance(dbConnParams) { Sql sql ->
sql.withTransaction { sql.withTransaction {
sql.execute 'create table PROJECT_8 (ID IDENTITY, NAME VARCHAR (50), URL VARCHAR (100))' sql.execute 'CREATE TABLE PROJECT_8 (ID IDENTITY, NAME VARCHAR (50), URL VARCHAR (100))'
sql.executeInsert("INSERT INTO PROJECT_8 (NAME, URL) VALUES ('tutorials', 'https://github.com/eugenp/tutorials')") sql.executeInsert("INSERT INTO PROJECT_8 (NAME, URL) VALUES ('tutorials', 'https://github.com/eugenp/tutorials')")
sql.executeInsert("INSERT INTO PROJECT_8 (NAME, URL) VALUES ('REST with Spring', 'https://github.com/eugenp/REST-With-Spring')") sql.executeInsert("INSERT INTO PROJECT_8 (NAME, URL) VALUES ('REST with Spring', 'https://github.com/eugenp/REST-With-Spring')")
sql.rollback() sql.rollback()
@ -159,7 +163,7 @@ class SqlTest {
void whenTransactionRollbackThenCommit_thenOnlyLastInserted() { void whenTransactionRollbackThenCommit_thenOnlyLastInserted() {
Sql.withInstance(dbConnParams) { Sql sql -> Sql.withInstance(dbConnParams) { Sql sql ->
sql.withTransaction { sql.withTransaction {
sql.execute 'create table PROJECT_9 (ID IDENTITY, NAME VARCHAR (50), URL VARCHAR (100))' sql.execute 'CREATE TABLE PROJECT_9 (ID IDENTITY, NAME VARCHAR (50), URL VARCHAR (100))'
sql.executeInsert("INSERT INTO PROJECT_9 (NAME, URL) VALUES ('tutorials', 'https://github.com/eugenp/tutorials')") sql.executeInsert("INSERT INTO PROJECT_9 (NAME, URL) VALUES ('tutorials', 'https://github.com/eugenp/tutorials')")
sql.rollback() sql.rollback()
sql.executeInsert("INSERT INTO PROJECT_9 (NAME, URL) VALUES ('REST with Spring', 'https://github.com/eugenp/REST-With-Spring')") sql.executeInsert("INSERT INTO PROJECT_9 (NAME, URL) VALUES ('REST with Spring', 'https://github.com/eugenp/REST-With-Spring')")
@ -179,11 +183,12 @@ class SqlTest {
Sql.withInstance(dbConnParams) { Sql sql -> Sql.withInstance(dbConnParams) { Sql sql ->
try { try {
sql.withTransaction { sql.withTransaction {
sql.execute 'create table PROJECT_10 (ID IDENTITY, NAME VARCHAR (50), URL VARCHAR (100))' sql.execute 'CREATE TABLE PROJECT_10 (ID IDENTITY, NAME VARCHAR (50), URL VARCHAR (100))'
sql.executeInsert("INSERT INTO PROJECT_10 (NAME, URL) VALUES ('tutorials', 'https://github.com/eugenp/tutorials')") sql.executeInsert("INSERT INTO PROJECT_10 (NAME, URL) VALUES ('tutorials', 'https://github.com/eugenp/tutorials')")
throw new Exception('rollback') throw new Exception('rollback')
} }
} catch (ignored) {} } catch (ignored) {
}
def rows = sql.rows("SELECT * FROM PROJECT_10") def rows = sql.rows("SELECT * FROM PROJECT_10")
@ -196,11 +201,12 @@ class SqlTest {
Sql.withInstance(dbConnParams) { Sql sql -> Sql.withInstance(dbConnParams) { Sql sql ->
try { try {
sql.cacheConnection { sql.cacheConnection {
sql.execute 'create table PROJECT_11 (ID IDENTITY, NAME VARCHAR (50), URL VARCHAR (100))' sql.execute 'CREATE TABLE PROJECT_11 (ID IDENTITY, NAME VARCHAR (50), URL VARCHAR (100))'
sql.executeInsert("INSERT INTO PROJECT_11 (NAME, URL) VALUES ('tutorials', 'https://github.com/eugenp/tutorials')") sql.executeInsert("INSERT INTO PROJECT_11 (NAME, URL) VALUES ('tutorials', 'https://github.com/eugenp/tutorials')")
throw new Exception('This does not rollback') throw new Exception('This does not rollback')
} }
} catch (ignored) {} } catch (ignored) {
}
def rows = sql.rows("SELECT * FROM PROJECT_11") def rows = sql.rows("SELECT * FROM PROJECT_11")
@ -211,7 +217,7 @@ class SqlTest {
/*@Test /*@Test
void whenModifyResultSet_thenDataIsChanged() { void whenModifyResultSet_thenDataIsChanged() {
Sql.withInstance(dbConnParams) { Sql sql -> Sql.withInstance(dbConnParams) { Sql sql ->
sql.execute 'create table PROJECT_5 (ID IDENTITY, NAME VARCHAR (50), URL VARCHAR (100))' sql.execute 'CREATE TABLE PROJECT_5 (ID IDENTITY, NAME VARCHAR (50), URL VARCHAR (100))'
sql.executeInsert("INSERT INTO PROJECT_5 (NAME, URL) VALUES ('tutorials', 'github.com/eugenp/tutorials')") sql.executeInsert("INSERT INTO PROJECT_5 (NAME, URL) VALUES ('tutorials', 'github.com/eugenp/tutorials')")
sql.executeInsert("INSERT INTO PROJECT_5 (NAME, URL) VALUES ('REST with Spring', 'github.com/eugenp/REST-With-Spring')") sql.executeInsert("INSERT INTO PROJECT_5 (NAME, URL) VALUES ('REST with Spring', 'github.com/eugenp/REST-With-Spring')")