1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
|
## Release History
### Current Release
<span class="warning">iciql is undergoing rapid development so api and configuration are subject to change from release to release</span>
**%VERSION%** ([zip](http://code.google.com/p/iciql/downloads/detail?name=%ZIP%)|[jar](http://code.google.com/p/iciql/downloads/detail?name=%JAR%)) *released %BUILDDATE%*
- Added list alternatives to the varargs methods because it was too easy to forget list.toArray() for the varargs methods
List<T> Db.executeQuery(Class<? extends T> modelClass, String sql, List<?> args)
ResultSet executeQuery(String sql, List<?> args)
### Older Releases
**0.7.3** *released 2011-12-06*
- api change release (API v8)
- Fixed JOIN ON primitives
- Fixed GROUP BY primitives
- Fixed primitive references when selecting into a custom type with primitives
- Improved fluent/type-safety of joins
**0.7.2** *released 2011-11-30*
- generated models are now serializable with a default serial version id of 1
- Updated to H2 1.3.162
- Updated to HSQL 2.2.6 (100% unit test pass now that [this bug](https://sourceforge.net/tracker/?func=detail&aid=3390047&group_id=23316&atid=378131) was fixed)
**0.7.1** *released 2011-08-31*
- api change release (API v7)
- Undeprecated interface configuration
- Interface configuration now maps ALL fields, not just public fields
- Added @IQIgnore annotation to explicitly skip fields for interface configuration
- Created additional Define static methods to bring interface configuration to near-parity with annotation configuration
- Documented POJO configuration option (limited subset of interface configuration)
- Fix to PostgreSQL dialect when creating autoincrement columns
- Fix to default dialect when creating autoincrement columns
- Added Db.open(url) method
**0.7.0** *released 2011-08-17*
- api change release (API v6)
- Finished MySQL dialect implementation. MySQL 5.0.51b passes 100% of tests.
- Added PostgreSQL dialect. PostgreSQL 9.0 passes all but the boolean-as-int tests.
- Added Db.dropTable(T) method
- Overhauled test suite and included more database configurations.
- Renamed StatementLogger to IciqlLogger
- Added IciqlLogger.warn method
- Added IciqlLogger.drop method
**0.6.6** *released 2011-08-15*
- api change release (API v5)
- Disabled two concurrency unit tests since I believe they are flawed and do not yield reproducible results
- Added Derby database dialect. Derby 10.7.1.1 and 10.8.1.2 pass 100% of tests.
- Implemented HSQL MERGE syntax. HSQL 2.2.4 fails 1 test which is a known [bug in HSQL](https://sourceforge.net/tracker/?func=detail&aid=3390047&group_id=23316&atid=378131)
- Updated to H2 1.3.159
**0.6.5** *released 2011-08-12*
- fixed failure of db.delete(PrimitiveModel) and db.update(PrimitiveModel)
**0.6.4** *released 2011-08-12*
- api change release (API v4)
- @IQTable.createIfRequired -> @IQTable.create
- don't INSERT primitive autoIncrement fields, let database assign value
- full support for primitives in all clauses
- DECIMAL(length, scale) support
- unspecified length String fields are now CLOB instead of TEXT. dialects can intercept this and convert to another type. e.g. MySQL dialect can change CLOB to TEXT.
- java.lang.Boolean now maps to BOOLEAN instead of BIT
- expressions on unmapped fields will throw an IciqlException
- expressions on unsupported types will throw an IciqlException
- improved exception reporting by including generated statement, if available
- moved dialects back to main package
- improved automatic dialect determination on pooled connections
- moved create table and create index statement generation into dialects
- added HSQL dialect. HSQL fails 4 out of 50 unit tests.
- 2 failures are unimplemented merge
- 1 has been filed and accepted as a [bug in HSQL](https://sourceforge.net/tracker/?func=detail&aid=3390047&group_id=23316&atid=378131)
- 1 is a concurrency issue, but the test may be flawed
- added untested MySQL dialect
- renamed <b>_ iq_versions</b> table to *iq_versions* since leading _ character is troublesome for some databases.
- @IQColumn(allowNull=true) -> @IQColumn(nullable=true)
- All **Object** columns are assumed NULLABLE unless explicitly set *@IQColumn(nullable = false)*
- All **Primitive** columns are assumed NOT NULLABLE unless explicitly set *@IQColumn(nullable = true)*
- allow using objects to assign default values<br/>
%BEGINCODE%
// CREATE TABLE ... myDate DATETIME DEFAULT '2000-02-01 00:00:00'
@IQColumn
Date myDate = new Date(100, 1, 1);
%ENDCODE%
- changed @IQTable.primaryKey definition to use array of column names<br/>
%BEGINCODE%
@IQTable( primaryKey = {"name", "nickname"})
%ENDCODE%
**0.6.3** *released 2011-08-08*
- api change release (API v3)
- finished enum support (issue 4)
- added UUID type support (H2 databases only)
- added partial primitives support *(primitives may not be used for compile-time condition clauses)*
- added *between(A y).and(A z)* condition syntax
- moved dialects into separate package
**0.6.2** *released 2011-08-05*
- api change release (API v2)
- fix to versioning to support H2 1.3.158+
- added BLOB support (issue 1)
- added java.lang.Enum support (issue 2)
- allow runtime flexible mapping of BOOL columns to Integer fields
- allow runtime flexible mapping of INT columns to Boolean fields
- annotations overhaul to reduce verbosity
- @IQSchema(name="public") -> @IQSchema("public")
- @IQDatabase(version=2) -> @IQVersion(2)
- @IQTable(version=2) -> @IQVersion(2)
- @IQIndex annotation simplified to be used for one index definition and expanded to specify index name
- added @IQIndexes annotation to specify multiple IQIndex annotations<br/>
%BEGINCODE%
@IQIndexes({ @IQIndex("name"), @IQIndex(name="myindexname" value={"name", "nickname"}) })
%ENDCODE%
- @IQColumn(maxLength=20) -> @IQColumn(length=20)
- @IQColumn(trimString=true) -> @IQColumn(trim=true)
**0.5.0** *released 2011-08-03*
- initial release (API v1)
*API changes compared to JaQu from H2 1.3.157 sources*
- deprecated model class interface configuration
- added *Db.open(Connection conn)* method, changed constructor to default scope
- added *Db.registerDialect* static methods to register custom dialects
- added *Query.where(String fragment, Object... args)* method to build a runtime query fragment when compile-time queries are too strict
- added *Db.executeQuery(String query, Object... args)* to execute a complete sql query with optional arguments
- added *Db.executeQuery(Class modelClass, String query, Object... args)* to execute a complete sql query, with optional arguments, and build objects from the result
- added *Db.buildObjects(Class modelClass, ResultSet rs)* method to build objects from the ResultSet of a plain sql query
- added *ThreadLocal<T> com.iciql.Utils.newThreadLocal(final Class<? extends T> clazz)* method
- added optional console statement logger and SLF4J statement logger
- refactored dialect support
- throw *IciqlException* (which is a RuntimeException) instead of RuntimeException
- synchronized *Db.classMap* for concurrent sharing of a Db instance
- Database/table versioning uses the <b>_iq_versions </b> table, the <b>_ jq_versions</b> table, if present, is ignored
- Changed the following class names:
- org.h2.jaqu.Table => com.iciql.Iciql
- org.h2.jaqu.JQSchema => com.iciql.IQSchema
- org.h2.jaqu.JQDatabase => com.iciql.IQDatabase
- org.h2.jaqu.JQIndex => com.iciql.IQIndex
- org.h2.jaqu.JQTable => com.iciql.IQTable
- org.h2.jaqu.JQColumn => com.iciql.IQColumn
- Changed the following method names:
- org.h2.jaqu.Table.define() => com.iciql.Iciql.defineIQ()
- QueryConditon.bigger => QueryCondition.exceeds
- QueryConditon.biggerEqual => QueryCondition.atLeast
- QueryConditon.smaller => QueryCondition.lessThan
- QueryConditon.smallEqual => QueryCondition.atMost
|