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
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
|
#
# ${project.version} release
#
r29: {
title: ${project.name} ${project.version} released
id: ${project.version}
date: ${project.buildDate}
note: ~
html: ~
text: ~
security: ~
fixes:
- Strip column identifiers from specified column names when mapping JDBC ResultSets to fields
changes: ~
additions: ~
dependencyChanges: ~
contributors:
- James Moger
}
#
# 1.6.4 release
#
r28: {
title: Iciql 1.6.4 released
id: 1.6.4
date: 2015-06-30
note: ~
html: ~
text: ~
security: ~
fixes: ~
changes: ~
additions:
- Support Set, List, and Map types for columns when used with DataTypeAdapter
dependencyChanges: ~
contributors:
- James Moger
}
#
# 1.6.3 release
#
r27: {
title: Iciql 1.6.3 released
id: 1.6.3
date: 2015-06-29
note: ~
html: ~
text: ~
security: ~
fixes:
- Fix column mapping on wildcard select JOIN statements
changes:
- Add support for PostgreSQL 9.5 UPSERT syntax
additions: ~
dependencyChanges: ~
contributors:
- James Moger
}
#
# 1.6.2 release
#
r26: {
title: Iciql 1.6.2 released
id: 1.6.2
date: 2015-05-11
note: ~
html: ~
text: ~
security: ~
fixes:
- Reverted change which keyed DataTypeAdapters by the target Java type
changes: ~
additions: ~
dependencyChanges: ~
contributors:
- James Moger
}
#
# 1.6.1 release
#
r25: {
title: Iciql 1.6.1 released
id: 1.6.1
date: 2015-05-11
note: Re-spin of 1.6.0
html: ~
text: ~
security: ~
fixes:
- Fix column inheritance from superclasses (pr-14)
- Use webapp classloader rather than global classloader (pr-12)
- Fix deserialization of null values
changes:
- Improve SQLite dialect based on upstream JDBC improvements
- Key DataTypeAdapters by target Java type
- Drop precision and length from SQL->Java type determination
- Improve readability of the generated performance benchmark table
- Added Derby TCP benchmark test
additions: ~
dependencyChanges:
- SQLite 3.8.10
contributors:
- James Moger
- Pierre Templier
- Maaartinus
- Constantin Nickel
}
#
# 1.6.0 release
#
r24: {
title: Iciql 1.6.0 released
id: 1.6.0
date: 2015-05-11
note: ~
html: ~
text: ~
security: ~
fixes:
- Fix column inheritance from superclasses (pr-14)
- Use webapp classloader rather than global classloader (pr-12)
- Fix deserialization of null values
changes:
- Improve SQLite dialect based on upstream JDBC improvements
- Key DataTypeAdapters by target Java type
- Drop precision and length from SQL->Java type determination
- Improve readability of the generated performance benchmark table
- Added Derby TCP benchmark test
additions: ~
dependencyChanges:
- SQLite 3.8.10
contributors:
- James Moger
- Pierre Templier
- Maaartinus
- Constantin Nickel
}
#
# 1.5.0 release
#
r23: {
title: Iciql 1.5.0 released
id: 1.5.0
date: 2014-11-10
note: ~
html: ~
text: ~
security: ~
fixes:
- Fix SQLite INTEGER PRIMARY KEY AUTOINCREMENT mapping
changes:
- Improved automatic date conversions
- Revised data type adapters to be specified separately with the @TypeAdapter annotation
additions:
- Add runtime mode support (DEV, TEST, & PROD)
- Add a DAO feature similar to JDBI
- Added Gson, XStream, and SnakeYaml type adapters
dependencyChanges: ~
contributors:
- James Moger
}
#
# 1.4.0 release
#
r22: {
title: Iciql 1.4.0 released
id: 1.4.0
date: 2014-11-05
note: ~
html: ~
text: ~
security: ~
fixes: ~
changes:
- Table constraints are now defined as part of CREATE TABLE instead of afterwards with indivudual ALTER TABLE statements. This is more portable across database backends.
additions:
- Support for specifying custom data type adapters in @IQColumn and Define.typeAdapter()
- Added com.iciql.SQLDialectPostgreSQL.JsonStringAdapter
- Added com.iciql.SQLDialectPostgreSQL.XmlStringAdapter
- Added com.iciql.JavaSerializationTypeAdapter to (de)serialize objects into a BLOB column
- Added an SQLite dialect
dependencyChanges:
- SQLite 3.8.7
contributors:
- James Moger
}
#
# 1.3.0 release
#
r21: {
title: Iciql 1.3.0 released
id: 1.3.0
date: 2014-10-22
note: ''
If you are upgrading and using EnumId mapping you will have to update your enums to define the target class for the EnumId interface since it is now generified.
Switching to using generic types with the EnumId interface allows you to implement alternative enum-type mappings which may make more sense for your business logic.
''
html: ~
text: ~
security: ~
fixes:
- Return null NPE in selectFirst() if list is empty (pr-5)
- Fix Moxie toolkit download URL (pr-6)
- Be more careful with primitive numeric type rollovers (pr-6)
changes:
- Revised EnumId interface to support generic types (pr-6)
additions:
- Add syntax oneOf/noneOf for IN and NOT IN (pr-7)
- Add support for compound nested AND/OR conditions (pr-8)
- Add support for mapping SQL BOOLEAN to primitive numeric types, not just object numeric types
- Add support for customizing EnumId mapping, you can now map enum constants to values of your choice as long as they are a standard type
dependencyChanges:
- H2 1.4
- HSQLDB 2.3
- Derby 10.11
- MySQL 5.6
- PostgreSQL 9.3
contributors:
- James Moger
- Kazunobu Raita
- Sotaro Suzuki
}
#
# 1.2.0 release
#
r20: {
title: Iciql 1.2.0 released
id: 1.2.0
date: 2013-03-25
html: '''
<span class="alert alert-success">
Iciql artifacts may now be retrieved by your favorite Maven 2-compatible build tool from <a href="http://gitblit.github.com/iciql/maven">here</a>.
</span>
'''
fixes:
- Fixed case-sensitivity bug on setting a compound primary key from an annotation (issue 12)
- Fixed order of DEFAULT value in create table statement (issue 11)
- Fixed password bug in model generator (issue 7)
changes:
- ''
Support inheriting columns from super.super class, if super.super is annotated.
This allows for an inheritance hierarchy like:
@IQTable class MyTable -> @IQView abstract class MyBaseView -> @IQView class MyConstrainedView
''
additions:
- ''
Implemented readonly view support. (issue 8)
View models may be specified using the IQView annotation or Iciql.define(). Views can either be created automatically as part of a query of the view OR views may be constructed from a fluent statement.
''
- Support inheritance of IQVersion for DbUpgrader implementations (issue 10)
- Added @IQConstraintForeignKey annotation (issue 13)
- Added MS SQL Server dialect (issue 14)
}
#
# 1.1.0 release
#
r19: {
title: Iciql 1.1.0 released
id: 1.1.0
date: 2012-08-20
changes:
- All bulk operations (insert all, update all, delete all) now use JDBC savepoints to ensure atomicity of the transaction
}
#
# 1.0.0 release
#
r18: {
title: Iciql 1.0.0 released
id: 1.0.0
date: 2012-07-14
fixes:
- Fixed bug in using 0L primitive values in where clauses. These were confused with the COUNT(*) function. (Github/kc5nra,issue 5)
changes:
- Issue CREATE TABLE and CREATE INDEX statements once per-db instance/table-mapping
additions:
- ''
Added support for single column subquery
select name, address from user_table where user_id in (select user_id from invoice table where paid = false)
''
- Added support for left outer join (Github/backpaper0)
}
#
# 0.7.10 release
#
r17: {
title: Iciql 0.7.10 released
id: 0.7.10
date: 2012-01-27
fixes:
- Fixed default String value bug where a default empty string threw an IndexOutOfBounds exception
}
#
# 0.7.9 release
#
r16: {
title: Iciql 0.7.9 released
id: 0.7.9
date: 2012-01-24
additions:
- ''
Added toParameter() option for SET commands and allow generating parameterized UPDATE statements
String q = db.from(t).set(t.timestamp).toParameter().where(t.id).is(5).toSQL();
db.executeUpdate(q, new Date());
''
}
#
# 0.7.8 release
#
r15: {
title: Iciql 0.7.8 released
id: 0.7.8
date: 2012-01-11
fixes:
- Replaced non-threadsafe counter used for assigning AS identifiers in JOIN statements with an AtomicInteger
- Prevent negative rollover of the AS counter
- Fixed bug in Query.select(Z z) which assumed that Z must always be an anonymous inner class which may not always be true. This allows for specifying an existing alias to force table or identifier usage in the generated select list. This is very useful for DISTINCT JOIN statements where only the columns of the primary table are of interest.
additions:
- Added optional alias parameter to Query.toSQL and QueryWhere.toSQL to force generated statement to prefix an AS identifier or, alternatively, the tablename.
- Query.toSQL(boolean distinct, K alias)
- QueryWhere.toSQL(boolean distinct, K alias)
}
#
# 0.7.7 release
#
r14: {
title: Iciql 0.7.7 released
id: 0.7.7
date: 2012-01-05
changes:
- ''
Disallow declaring and explicitly referencing multiple instances of an enum type within a single model.
A runtime exception will be thrown if an attempt to use where/set/on/and/or/groupBy/orderBy(enum) and your model has multiple fields of a single enum type.
''
additions:
- added Query.toSQL() and QueryWhere.toSQL() methods which, when combined with the following new methods, allows for generation of a parameterized, static sql string to be reused with a dynamic query or a PreparedStatement.
- QueryCondition.isParameter()
- QueryCondition.atLeastParameter()
- QueryCondition.atMostParameter()
- QueryCondition.exceedsParameter()
- QueryCondition.lessThanParameter()
- QueryCondition.likeParameter()
- QueryCondition.isNotParameter()
}
#
# 0.7.6 release
#
r13: {
title: Iciql 0.7.6 released
id: 0.7.6
date: 2011-12-21
changes:
- Iciql now tries to instantiate a default value from an annotated default value IFF the field object is null, it is specified nullable = false, and a defaultValue exists. This only applies to db.insert or db.update.
}
#
# 0.7.5 release
#
r12: {
title: Iciql 0.7.5 released
id: 0.7.5
date: 2011-12-12
fixes:
- Iciql now identifies wildcard queries and builds a dynamic column lookup. Otherwise, the original field-position-based approach is used. This corrects the performance regression released in 0.7.4 while still fixing the wildcard statement column mapping problem.
}
#
# 0.7.4 release
#
r11: {
title: Iciql 0.7.4 released
id: 0.7.4
date: 2011-12-06
fixes:
- Fixed JOIN ON primitives
- Fixed GROUP BY primitives
- Fixed primitive references when selecting into a custom type with primitives
- ''
Fixed inherited JaQu bug related to model classes and wildcard queries (select *).
Iciql maps resultset columns by the index of the model class field from a list. This assumes that all columns in the resultset have a corresponding model field definition. This works fine for most queries because iciql explicitly selects columns from the table (select alpha, beta...) when you execute select().
The problem is when iciql issues a dynamic wildcard query and your model does not represent all columns in the resultset: columns and fields may fail to correctly line-up.
Iciql now maps all fields by their column name, not by their position.
''
changes:
- Disallow declaring and explicitly referencing multiple primitive booleans in a single model. A runtime exception will be thrown if an attempt to use where/set/on/and/or/groupBy/orderBy(boolean) and your model has multiple mapped primitive boolean fields.
additions:
- Added list alternatives to the varargs methods because it was too easy to forget list.toArray()
- Db.executeQuery(Class<? extends T> modelClass, String sql, List<?> args)
- Db.executeQuery(String sql, List<?> args)
- Query.where(String fragment, List<?> args)
}
#
# 0.7.3 release
#
r10: {
title: Iciql 0.7.3 released
id: 0.7.3
date: 2011-12-06
fixes:
- Fixed JOIN ON primitives
- Fixed GROUP BY primitives
- Fixed primitive references when selecting into a custom type with primitives
changes:
- Improved fluent/type-safety of joins
}
#
# 0.7.2 release
#
r9: {
title: Iciql 0.7.2 released
id: 0.7.2
date: 2011-11-30
changes:
- generated models are now serializable with a default serial version id of 1
dependencyChanges:
- H2 1.3.162
- HSQLDB 2.2.6 (100% of unit tests pass)
}
#
# 0.7.1 release
#
r8: {
title: Iciql 0.7.1 released
id: 0.7.1
date: 2011-08-31
fixes:
- Fix to PostgreSQL dialect when creating autoincrement columns
- Fix to default dialect when creating autoincrement columns
changes:
- Undeprecated interface configuration
- Interface configuration now maps ALL fields, not just public fields
- Overhauled test suite and included more database configurations
- Documented POJO configuration option (limited subset of interface configuration)
additions:
- 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
- Added Db.open(url) method
}
#
# 0.7.0 release
#
r7: {
title: Iciql 0.7.0 released
id: 0.7.0
date: 2011-08-17
changes:
- Finished MySQL dialect implementation. MySQL 5.0.51b passes 100% of tests.
- Renamed StatementLogger to IciqlLogger
- Overhauled test suite and included more database configurations
additions:
- Added PostgreSQL dialect. PostgreSQL 9.0 passes all but the boolean-as-int tests.
- Added Db.dropTable(T) method
- Added IciqlLogger.warn method
- Added IciqlLogger.drop method
}
#
# 0.6.6 release
#
r6: {
title: Iciql 0.6.6 released
id: 0.6.6
date: 2011-08-15
changes:
- Disabled two concurrency unit tests since I believe they are flawed and do not yield reproducible results
additions:
- Implemented HSQLDB MERGE syntax. HSQL 2.2.4 fails 1 test which is bug-3390047 in HSQLDB.
- Added Derby database dialect. Derby 10.7.1.1 and 10.8.1.2 pass 100% of tests.
dependencyChanges:
- H2 1.3.159
}
#
# 0.6.5 release
#
r5: {
title: Iciql 0.6.5 released
id: 0.6.5
date: 2011-08-12
fixes:
- fixed failure of db.delete(PrimitiveModel) and db.update(PrimitiveModel)
}
#
# 0.6.4 release
#
r4: {
title: Iciql 0.6.4 released
id: 0.6.4
date: 2011-08-12
fixes:
- do not INSERT primitive autoIncrement fields, let database assign value
changes:
- @IQTable.createIfRequired -> @IQTable.create
- 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
- moved dialects back to main package
- moved create table and create index statement generation into dialects
- renamed _iq_versions 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)
- changed @IQTable.primaryKey definition to use array of column names (@IQTable( primaryKey = {"name", "nickname"}) )
additions:
- full support for primitives in all clauses
- DECIMAL(length, scale) support
- improved exception reporting by including generated statement, if available
- improved automatic dialect determination on pooled connections
- added HSQL dialect. HSQL fails 4 out of 50 unit tests. (2 failures are unimplemented merge, 1 is a bug-3390047 in HSQLDB, 1 is a concurreny issue)
- added untested MySQL dialect
- allow defining table create DEFAULT values from default object values (Date myDate = new Date(100, 1, 1); => CREATE TABLE ... myDate DATETIME DEFAULT '2000-02-01 00:00:00')
}
#
# 0.6.3 release
#
r3: {
title: Iciql 0.6.3 Released
id: 0.6.3
date: 2011-08-08
changes:
- Moved dialects into separate package
- finished enum support (issue 4)
additions:
- 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
}
#
# 0.6.2 release
#
r2: {
title: Iciql 0.6.2 Released
id: 0.6.2
date: 2011-08-05
fixes:
- fix to versioning to support H2 1.3.158+
changes:
- @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
- @IQColumn(maxLength=20) => @IQColumn(length=20)
- @IQColumn(trimString=true) => @IQColumn(trim=true)}
additions:
- 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
- added @IQIndexes annotation to specify multiple IQIndex annotations
}
#
# 0.5.0 release
#
r1: {
title: Iciql 0.5.0 Released
id: 0.5.0
date: 2011-08-03
note: ~
text: Initial release of blessed JaQu fork
changes:
- 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 _iq_versions table, the _ jq_versions 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
''
}
#
# Release log data
#
release: &r28
snapshot: &r29
releases: &r[1..28]
|