aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--build.xml47
m---------maven0
-rw-r--r--releases.moxie414
-rw-r--r--src/site/05_releases.mkd223
-rw-r--r--src/site/building.mkd (renamed from src/site/05_building.mkd)0
-rw-r--r--src/site/custom.less2
-rw-r--r--src/site/examples.mkd (renamed from src/site/04_examples.mkd)0
-rw-r--r--src/site/index.mkd (renamed from src/site/00_index.mkd)0
-rw-r--r--src/site/jaqu_comparison.mkd (renamed from src/site/06_jaqu_comparison.mkd)0
-rw-r--r--src/site/javadoc.mkd (renamed from src/site/05_javadoc.mkd)0
-rw-r--r--src/site/model_classes.mkd (renamed from src/site/01_model_classes.mkd)0
-rw-r--r--src/site/performance.mkd (renamed from src/site/03_performance.mkd)0
-rw-r--r--src/site/table_versioning.mkd (renamed from src/site/02_table_versioning.mkd)0
-rw-r--r--src/site/templates/atom.ftl2
-rw-r--r--src/site/templates/macros.ftl147
-rw-r--r--src/site/templates/releasecurrent.ftl25
-rw-r--r--src/site/templates/releasehistory.ftl21
-rw-r--r--src/site/templates/rss.ftl2
-rw-r--r--src/site/tools.mkd (renamed from src/site/04_tools.mkd)0
-rw-r--r--src/site/usage.mkd (renamed from src/site/02_usage.mkd)0
20 files changed, 636 insertions, 247 deletions
diff --git a/build.xml b/build.xml
index d7dbdde..0832bf1 100644
--- a/build.xml
+++ b/build.xml
@@ -10,7 +10,7 @@
Retrieve Moxie Toolkit
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-->
- <property name="moxie.version" value="0.6.2" />
+ <property name="moxie.version" value="0.7.0-SNAPSHOT" />
<property name="moxie.url" value="http://gitblit.github.com/moxie/maven" />
<property name="moxie.jar" value="moxie-toolkit-${moxie.version}.jar" />
<property name="moxie.dir" value="${user.home}/.moxie" />
@@ -152,9 +152,11 @@
<!-- Download links -->
<property name="gc.url" value="http://code.google.com/p/iciql/downloads/detail?name=" />
-
- <mx:doc googleplusone="true" injectprettify="true" prettifyTheme="hemisu-dark"
- minify="true" customless="custom.less">
+ <property name="releaselog" value="${basedir}/releases.moxie" />
+
+ <mx:doc googleplusone="true" injectprettify="true" prettifyTheme="hemisu-dark" minify="true"
+ templateDir="${project.siteSourceDirectory}/templates"
+ customless="custom.less" rssFeed="rss.xml" atomFeed="atom.xml">
<logo file="iciql_white.png" />
<favicon file="iciql-favicon.png" />
@@ -167,29 +169,28 @@
<structure>
<menu name="about" pager="true" pagerPlacement="bottom" pagerLayout="justified">
- <page name="overview" src="00_index.mkd" out="index.html" />
- <page name="performance" src="03_performance.mkd" out="performance.html" />
- <page name="jaqu comparison" src="06_jaqu_comparison.mkd" out="jaqu_comparison.html" />
+ <page name="overview" src="index.mkd" out="index.html" />
+ <page name="performance" src="performance.mkd" out="performance.html" />
+ <page name="jaqu comparison" src="jaqu_comparison.mkd" out="jaqu_comparison.html" />
</menu>
<menu name="getting started" pager="true" pagerPlacement="bottom" pagerLayout="justified">
- <page name="models" src="01_model_classes.mkd" out="model_classes.html" headerLinks="true" />
- <page name="versioning" src="02_table_versioning.mkd" out="table_versioning.html" headerLinks="true" />
- <page name="usage" src="02_usage.mkd" out="usage.html" headerLinks="true" />
- <page name="examples" src="04_examples.mkd" out="examples.html" headerLinks="true" />
- <page name="tools" src="04_tools.mkd" out="tools.html" headerLinks="true" />
+ <page name="models" src="model_classes.mkd" out="model_classes.html" headerLinks="true" />
+ <page name="versioning" src="table_versioning.mkd" out="table_versioning.html" headerLinks="true" />
+ <page name="usage" src="usage.mkd" out="usage.html" headerLinks="true" />
+ <page name="examples" src="examples.mkd" out="examples.html" headerLinks="true" />
+ <page name="tools" src="tools.mkd" out="tools.html" headerLinks="true" />
</menu>
- <page name="building" src="05_building.mkd" out="building.html" />
- <page name="javadoc" src="05_javadoc.mkd" out="javadoc.html" />
- <page name="releases" src="05_releases.mkd" out="releases.html" />
+ <page name="building" src="building.mkd" out="building.html" />
+ <page name="javadoc" src="javadoc.mkd" out="javadoc.html" />
- <!--<page name="release notes" out="releasenotes.html">
- <template src="releasecurrent.ftl" data="${basedir}/releases.moxie" />
+ <page name="release notes" out="releasenotes.html">
+ <template src="releasecurrent.ftl" data="${releaselog}" />
</page>
<page out="releases.html" navbarlink="false">
- <template src="releasehistory.ftl" data="${basedir}/releases.moxie" />
- </page>-->
+ <template src="releasehistory.ftl" data="${releaselog}" />
+ </page>
<menu name="downloads">
<link name="${project.artifactId}-${project.releaseVersion}"
@@ -207,12 +208,12 @@
</structure>
<!-- Generate RSS and Atom feeds from the release history -->
- <!--<page as="atom.xml">
- <template src="atom.ftl" data="${basedir}/releases.moxie" />
+ <page as="atom.xml">
+ <template src="atom.ftl" data="${releaselog}" />
</page>
<page as="rss.xml">
- <template src="rss.ftl" data="${basedir}/releases.moxie" />
- </page>-->
+ <template src="rss.ftl" data="${releaselog}" />
+ </page>
</mx:doc>
diff --git a/maven b/maven
-Subproject fad8023ebba18365237912c58bca86eb691f236
+Subproject 1f40ae4f2766e4a32dc1e11e7f610bd75da0e98
diff --git a/releases.moxie b/releases.moxie
new file mode 100644
index 0000000..abe9b95
--- /dev/null
+++ b/releases.moxie
@@ -0,0 +1,414 @@
+#
+# ${project.version} release
+#
+r20: {
+ title: ${project.name} ${project.version} released
+ id: ${project.version}
+ date: ${project.buildDate}
+
+ 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)
+}
+
+#
+# 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: &r19
+snapshot: &r20
+releases: &r[1..19]
diff --git a/src/site/05_releases.mkd b/src/site/05_releases.mkd
deleted file mode 100644
index 3e66494..0000000
--- a/src/site/05_releases.mkd
+++ /dev/null
@@ -1,223 +0,0 @@
-## Release History
-
-### Current Release
-
-**${project.version}**
-
-- Fixed case-sensitivity bug on setting a compound primary key from an annotation (issue 12)
-- Implemented readonly view support. (issue 8)<br/>
-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 inheriting columns from super.super class, if super.super is annotated.<br/>This allows for an inheritance hierarchy like:<br/>
-@IQTable class MyTable -> @IQView abstract class MyBaseView -> @IQView class MyConstrainedView
-- Fixed order of DEFAULT value in create table statement (issue 11)
-- Support inheritance of IQVersion for DbUpgrader implementations (issue 10)
-- Fixed password bug in model generator (issue 7)
-
-### Older Releases
-
-**1.1.0** &nbsp; *released 2012-08-20*
-
-- All bulk operations (insert all, update all, delete all) now use JDBC savepoints to ensure atomicity of the transaction
-
-**1.0.0** &nbsp; *released 2012-07-14*
-
-- Issue CREATE TABLE and CREATE INDEX statements once per-db instance/table-mapping
-- Fixed bug in using 0L primitive values in where clauses. These were confused with the COUNT(*) function. (Github/kc5nra,issue 5)
-- 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** &nbsp; *released 2012-01-27*
-
-- Fixed default String value bug where a default empty string threw an IndexOutOfBounds exception
-
-**0.7.9** &nbsp; *released 2012-01-24*
-
-- Added toParameter() option for SET commands and allow generating parameterized UPDATE statements<br/>
-String q = db.from(t).set(t.timestamp).toParameter().where(t.id).is(5).toSQL();<br/>
-db.executeUpdate(q, new Date());
-
-**0.7.8** &nbsp; *released 2012-01-11*
-
-- Replaced non-threadsafe counter used for assigning AS identifiers in JOIN statements with an AtomicInteger
-- Prevent negative rollover of the AS counter
-- 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)
-- 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.
-
-**0.7.7** &nbsp; *released 2012-01-05*
-
-- 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()
-- Disallow **declaring and explicitly referencing** multiple instances of an enum type within a single model.<br/>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.
-
-**0.7.6** &nbsp; *released 2011-12-21*
-
-- 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** &nbsp; *released 2011-12-12*
-
-- 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** &nbsp; *released 2011-12-06*
-
-- Disallow **declaring and explicitly referencing** multiple primitive booleans in a single model.<br/>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.
-- Added list alternatives to the varargs methods because it was too easy to forget list.toArray()<br/>
-*Db.executeQuery(Class&lt;? extends T&gt; modelClass, String sql, List&lt;?&gt; args)*<br/>
-*Db.executeQuery(String sql, List&lt;?&gt; args)*<br/>
-*Query.where(String fragment, List&lt;?&gt; args)*<br/>
-- Fixed inherited JaQu bug related to model classes and wildcard queries (select *).<p/>
-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.<p/>
-Iciql now maps all fields by their column name, not by their position.
-
-**0.7.3** &nbsp; *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** &nbsp; *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** &nbsp; *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** &nbsp; *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** &nbsp; *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** &nbsp; *released 2011-08-12*
-
-- fixed failure of db.delete(PrimitiveModel) and db.update(PrimitiveModel)
-
-**0.6.4** &nbsp; *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** &nbsp; *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** &nbsp; *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** &nbsp; *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&lt;T&gt; com.iciql.Utils.newThreadLocal(final Class&lt;? extends T&gt; 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 =&gt; com.iciql.Iciql
- - org.h2.jaqu.JQSchema =&gt; com.iciql.IQSchema
- - org.h2.jaqu.JQDatabase =&gt; com.iciql.IQDatabase
- - org.h2.jaqu.JQIndex =&gt; com.iciql.IQIndex
- - org.h2.jaqu.JQTable =&gt; com.iciql.IQTable
- - org.h2.jaqu.JQColumn =&gt; com.iciql.IQColumn
-- Changed the following method names:
- - org.h2.jaqu.Table.define() =&gt; com.iciql.Iciql.defineIQ()
- - QueryConditon.bigger =&gt; QueryCondition.exceeds
- - QueryConditon.biggerEqual =&gt; QueryCondition.atLeast
- - QueryConditon.smaller =&gt; QueryCondition.lessThan
- - QueryConditon.smallEqual =&gt; QueryCondition.atMost
diff --git a/src/site/05_building.mkd b/src/site/building.mkd
index b5548bc..b5548bc 100644
--- a/src/site/05_building.mkd
+++ b/src/site/building.mkd
diff --git a/src/site/custom.less b/src/site/custom.less
index 31098f5..f7130d4 100644
--- a/src/site/custom.less
+++ b/src/site/custom.less
@@ -2,7 +2,7 @@
// GLOBAL VALUES
// --------------------------------------------------
@standardGray: #ccc;
-@cornflower: #abd4ff;
+@cornflower: #99cbff;
@white: #fff;
// Dropdown
diff --git a/src/site/04_examples.mkd b/src/site/examples.mkd
index 33cb9c4..33cb9c4 100644
--- a/src/site/04_examples.mkd
+++ b/src/site/examples.mkd
diff --git a/src/site/00_index.mkd b/src/site/index.mkd
index 1c2bbd3..1c2bbd3 100644
--- a/src/site/00_index.mkd
+++ b/src/site/index.mkd
diff --git a/src/site/06_jaqu_comparison.mkd b/src/site/jaqu_comparison.mkd
index 20df5d5..20df5d5 100644
--- a/src/site/06_jaqu_comparison.mkd
+++ b/src/site/jaqu_comparison.mkd
diff --git a/src/site/05_javadoc.mkd b/src/site/javadoc.mkd
index 0d0f161..0d0f161 100644
--- a/src/site/05_javadoc.mkd
+++ b/src/site/javadoc.mkd
diff --git a/src/site/01_model_classes.mkd b/src/site/model_classes.mkd
index 8fedf18..8fedf18 100644
--- a/src/site/01_model_classes.mkd
+++ b/src/site/model_classes.mkd
diff --git a/src/site/03_performance.mkd b/src/site/performance.mkd
index 34e545c..34e545c 100644
--- a/src/site/03_performance.mkd
+++ b/src/site/performance.mkd
diff --git a/src/site/02_table_versioning.mkd b/src/site/table_versioning.mkd
index 2e95aaa..2e95aaa 100644
--- a/src/site/02_table_versioning.mkd
+++ b/src/site/table_versioning.mkd
diff --git a/src/site/templates/atom.ftl b/src/site/templates/atom.ftl
new file mode 100644
index 0000000..06d28da
--- /dev/null
+++ b/src/site/templates/atom.ftl
@@ -0,0 +1,2 @@
+<#include "macros.ftl">
+<@AtomMacro posts=releases posturl="${project.url}/history.html#" /> \ No newline at end of file
diff --git a/src/site/templates/macros.ftl b/src/site/templates/macros.ftl
new file mode 100644
index 0000000..e7c275b
--- /dev/null
+++ b/src/site/templates/macros.ftl
@@ -0,0 +1,147 @@
+<#macro LogMacro title version date description log logTitle="">
+ <#if log??>
+ <h3 id="${version}" class="section"><a href="#${version}" class="sectionlink"><i class="icon-share-alt"> </i></a>${title} (${version}) <small>${description}</small></h3>
+ <table class="table">
+ <tbody>
+ <tr>
+ <td style="background-color:inherit;width:100px">${date}</td>
+ <td style="background-color:inherit;"><@LogDescriptionMacro log=log title=logTitle /></td>
+ </tr>
+ </tbody>
+ </table>
+ </#if>
+</#macro>
+
+<#macro LogDescriptionMacro log title=log.title>
+ <#if (title!?length > 0)>
+ <p class="lead">${title}</p>
+ </#if>
+
+ <#if (log.html!?length > 0)>
+ <p>${log.html}</p>
+ </#if>
+
+ <#if (log.text!?length > 0)>
+ <blockquote><p>${log.text!?html?replace("\n", "<br />")}</p></blockquote>
+ </#if>
+
+ <#if (log.note!?length > 0)>
+ <div class="alert alert-info">
+ <h4>Note</h4>
+ ${log.note?html?replace("\n", "<p />")}
+ </div>
+ </#if>
+
+ <#if (log.security!?size > 0)>
+ <@SecurityListMacro title="security" list=log.security/>
+ </#if>
+ <#if (log.fixes!?size > 0)>
+ <@UnorderedListMacro title="fixes" list=log.fixes />
+ </#if>
+ <#if (log.changes!?size > 0)>
+ <@UnorderedListMacro title="changes" list=log.changes />
+ </#if>
+ <#if (log.additions!?size > 0)>
+ <@UnorderedListMacro title="additions" list=log.additions />
+ </#if>
+ <#if (log.settings!?size > 0)>
+ <@SettingsTableMacro title="new settings" list=log.settings />
+ </#if>
+ <#if (log.dependencyChanges!?size > 0)>
+ <@UnorderedListMacro title="dependency changes" list=log.dependencyChanges />
+ </#if>
+ <#if (log.contributors!?size > 0)>
+ <@UnorderedListMacro title="contributors" list=log.contributors?sort />
+ </#if>
+</#macro>
+
+<#macro SecurityListMacro list title>
+ <h4 style="color:red;">${title}</h4>
+ <ul>
+ <#list list as item>
+ <li>${item?html?replace("\n", "<br/>")}</li>
+ </#list>
+ </ul>
+</#macro>
+
+<#macro UnorderedListMacro list title>
+ <h4>${title}</h4>
+ <ul>
+ <#list list as item>
+ <li>${item?html?replace("\n", "<br/>")}</li>
+ </#list>
+ </ul>
+</#macro>
+
+<#macro SettingsTableMacro list title>
+ <h4>${title}</h4>
+ <table class="table">
+ <#list list as item>
+ <tr>
+ <td><em>${item.name}</em></td><td>${item.defaultValue}</td>
+ </tr>
+ </#list>
+ </table>
+</#macro>
+
+<#macro RssMacro posts posturl>
+<?xml version="1.0" standalone='yes'?>
+<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <channel>
+ <title><![CDATA[${project.name}]]></title>
+ <link>${project.url}</link>
+ <description><![CDATA[${project.description}]]></description>
+ <generator>Moxie Toolkit</generator>
+ <#list posts as post>
+ <item>
+ <title><![CDATA[${post.title}]]></title>
+ <link><![CDATA[${posturl}${post.id}]]></link>
+ <guid isPermaLink="true">${posturl}${post.id}</guid>
+ <#if (post.text!?length > 0)>
+ <description><![CDATA[${post.text}]]></description>
+ </#if>
+ <#if (post.keywords!?size > 0)>
+ <#list post.keywords as keyword>
+ <category><![CDATA[${keyword}]]></category>
+ </#list>
+ </#if>
+ <#if (post.author!?length > 0)>
+ <dc:creator><![CDATA[${post.author}]]></dc:creator>
+ <#else>
+ <dc:creator><![CDATA[${project.name}]]></dc:creator>
+ </#if>
+ <pubDate>${post.date?string("EEE, dd MMM yyyy HH:mm:ss Z")}</pubDate>
+ </item>
+ </#list>
+ </channel>
+</rss>
+</#macro>
+
+<#macro AtomMacro posts posturl>
+<?xml version="1.0" standalone='yes'?>
+<feed xmlns="http://www.w3.org/2005/Atom">
+ <generator uri="${project.url}" version="${project.version}">${project.name}</generator>
+ <title><![CDATA[${project.name}]]></title>
+ <updated>${project.releaseDate}</updated>
+ <#list posts as post>
+ <entry>
+ <content type="text/plain" />
+ <title type="text"><![CDATA[${post.title}]]></title>
+ <#if (post.text!?length > 0)>
+ <summary type="text"><![CDATA[${post.text}]]></summary>
+ </#if>
+ <link href="${posturl}${post.id}" rel="via" />
+ <guid isPermaLink="true">${posturl}${post.id}</guid>
+ <#if (post.text!?length > 0)>
+ <content><![CDATA[${post.text}]]></content>
+ </#if>
+ <#if (post.keywords!?size > 0)>
+ <#list post.keywords as keyword>
+ <category label="<![CDATA[${keyword}]]>" />
+ </#list>
+ </#if>
+ <published>${post.date?string("yyyy-MM-dd'T'HH:mm:ssZ")}</published>
+ </entry>
+ </#list>
+</feed>
+</#macro> \ No newline at end of file
diff --git a/src/site/templates/releasecurrent.ftl b/src/site/templates/releasecurrent.ftl
new file mode 100644
index 0000000..3bfd709
--- /dev/null
+++ b/src/site/templates/releasecurrent.ftl
@@ -0,0 +1,25 @@
+<#include "macros.ftl" >
+
+<!-- CURRENT RELEASE -->
+<@LogMacro
+ title="Current Release"
+ log=release
+ version=project.releaseVersion
+ date=reference.releaseDate?string("yyyy-MM-dd")
+ description="this is the current stable release" />
+
+<!-- NEXT RELEASE -->
+<#if snapshot??>
+<@LogMacro
+ title="Next Release"
+ log=snapshot
+ version=project.version
+ date="PENDING"
+ description="these changes are queued for an upcoming release" />
+</#if>
+
+<div>
+ <ul class="pager">
+ <li class="next"><a href="releases.html">All Releases &rarr;</a></li>
+ </ul>
+</div>
diff --git a/src/site/templates/releasehistory.ftl b/src/site/templates/releasehistory.ftl
new file mode 100644
index 0000000..eaaaad2
--- /dev/null
+++ b/src/site/templates/releasehistory.ftl
@@ -0,0 +1,21 @@
+<#include "macros.ftl" >
+
+<!-- HISTORY -->
+<#if (releases!?size > 0)>
+ <p></p>
+ <h2>All Releases</h2>
+ <table class="table">
+ <tbody>
+ <!-- RELEASE HISTORY -->
+ <#list releases?sort_by("date")?reverse as log>
+ <tr id="${log.id}">
+ <td style="width:100px" id="${log.id}">
+ <b><a href="#${log.id}">${log.id}</a></b><br/>
+ ${log.date?string("yyyy-MM-dd")}
+ </td>
+ <td><@LogDescriptionMacro log=log /></td>
+ </tr>
+ </#list>
+ </tbody>
+ </table>
+</#if> \ No newline at end of file
diff --git a/src/site/templates/rss.ftl b/src/site/templates/rss.ftl
new file mode 100644
index 0000000..90e86eb
--- /dev/null
+++ b/src/site/templates/rss.ftl
@@ -0,0 +1,2 @@
+<#include "macros.ftl">
+<@RssMacro posts=releases posturl="${project.url}/releases.html#" /> \ No newline at end of file
diff --git a/src/site/04_tools.mkd b/src/site/tools.mkd
index 6d8c348..6d8c348 100644
--- a/src/site/04_tools.mkd
+++ b/src/site/tools.mkd
diff --git a/src/site/02_usage.mkd b/src/site/usage.mkd
index 7b9d89d..7b9d89d 100644
--- a/src/site/02_usage.mkd
+++ b/src/site/usage.mkd