SQL queries conventions
This commit is contained in:
parent
abaa0ef7cf
commit
85775f930a
|
@ -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')")
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue