Difference between revisions of "NexJ-SQLite: User Stories 1, 3"
(Created page with '<pre> Collapsed revision * User story 1: end of day commit * Fixes #1 Database configuration files: new directory setup * ref #4 User story 3: create test initialization data. c…') |
|||
Line 1: | Line 1: | ||
+ | {{Admon/obsolete}} | ||
+ | |||
<pre> | <pre> | ||
Latest revision as of 21:44, 26 January 2014
Collapsed revision * User story 1: end of day commit * Fixes #1 Database configuration files: new directory setup * ref #4 User story 3: create test initialization data. create sqlite_drop.sql * Fixes #2 User story 3: Implement appendColumnType and appendColumnSuffix * Fixes #5 User Story 3: Indexes, Fixes #6 User Story 3: Indexes * Fixes #7 User Story 3: SQLite truncate table not supported * ref #4: User story 3: create test initialization data upconverted sqlite_insert.sql and sqlite_drop.sql to sqlite standards. they should be ready for use. * Moved SQLiteDataSourceWrapper to nexj.core.persistence.sql from meta.persistence.sql * Ref #4: User story 3: create test initialization data. Create sqlite setup script. * Fixed driver name for sqlite database * Fixes #10 User Story 3: Unit test - Primary Key autoincrement * Code style fix * Refs #9 User Story 3: Add full-text search * Fixes #4: User story 3: create test initialization data upconverted sqlite_setup.sql sqlite_upd_addr.sql sqlite_upd_const.sql. covers nexj.core.persistence.sql.script * Fixes #9 User Story 3: Add full-text search * Fixes #20 User Story 3: drop virtual tables * Refs #21 User Story 3: implemenation support references * Refs #15 SQLiteSQLSchemaManager:Date manipulation, Direct copy of PostgreSQL * Fixes #15 SQLiteSQLSchemaManager:Date manipulation * Fixes #15 SQLiteSQLSchemaManager:Date manipulation, Microsecond support and SQL concat operator * Modified comments. Code style changes. * Fixes #22 appendColumnType style fix * Refs #23 User story 3: fix create view, An inner class is definitely the correct approach to overriding existing functionality. Cleanly intercepting the create view call is the hard part. * Updated default to branch and rebased sqlite branch. Implemented SQLite datasource using PseudoXADataSourceWrapper. * Fixes #23: User story 3: fix create view. Who Grace Batumbya When 25 October 2011 File Lines added Lines removed src/nexj/core/admin/etl/DataLoader.java 1 1 src/nexj/core/meta/persistence/sql/RelationalDatabase.java 11 5 src/nexj/core/meta/persistence/sql/RelationalDatabaseFragment.java 17 – src/nexj/core/meta/persistence/sql/SQLiteDataSourceWrapper.java 176 – src/nexj/core/meta/persistence/sql/XMLRelationalMetadataLoader.java 12 12 src/nexj/core/meta/sys/system.dstypes 1 – src/nexj/core/persistence/sql/SQLRAConnectionFactory.java 15 – src/nexj/core/persistence/sql/SQLSchemaManager.java 120 88 src/nexj/core/persistence/sql/SQLSchemaManagerFactory.java 4 – src/nexj/core/persistence/sql/SQLiteAdapter.java 365 – src/nexj/core/persistence/sql/SQLiteDataSourceWrapper.java 200 – src/nexj/core/persistence/sql/SQLiteDataSourceWrapper1.java 180 – src/nexj/core/persistence/sql/SQLiteSQLSchemaManager.java 622 – src/nexj/core/persistence/sql/pseudoxa/PseudoXADataSourceWrapper.java 5 2 src/nexj/core/util/JDBCInfo.java 32 1 test/nexj/core/persistence/sql/AllTests.java 1 1 test/nexj/core/persistence/sql/SQLiteAdapterTest.java 49 – test/nexj/core/persistence/sql/SQLiteSchemaManagerTest.java 40 – test/nexj/core/persistence/sql/script/sqlite_drop.sql 8 – ### test/nexj/core/persistence/sql/script/sqlite_insert.sql 364 – ### test/nexj/core/persistence/sql/script/sqlite_setup.sql 13 – ### test/nexj/core/persistence/sql/script/sqlite_upd_addr.sql 2 – ### test/nexj/core/persistence/sql/script/sqlite_upd_cont.sql 1 – ### test/nexj/default.config 7 6 ### test/nexj/filestorage.connections 2 2 ### test/nexj/filestoragefragment.connections 2 2 ### test/nexj/sqlite.connections ### src/nexj/core/admin/etl/DataLoader.java » @@ -476,7 +476,7 @@ 476 476 */ 477 477 public List exportData(Iterator specItr) 478 478 { 479 Lookup identityMap = new IdentityHashTab(128); 479 Lookup identityMap = new IdentityHashTab(128); ** (BLUE-ADDED) 480 480 481 481 while (specItr.hasNext()) 482 482 { src/nexj/core/meta/persistence/sql/RelationalDatabase.java » @@ -250,26 +250,32 @@ 250 250 251 251 if (m_sDriver == null && m_adapter != null) 252 252 { 253 if (m_adapter.getName().equals("MSSQL")) 253 String sName = m_adapter.getName(); ** 254 255 if (sName.equals("MSSQL")) 256 254 { 257 255 m_sDriver = "net.sourceforge.jtds.jdbcx.JtdsDataSource"; 258 256 } 257 else if (m_adapter.getName().startsWith("Oracle")) 259 else if (sName.startsWith("Oracle")) 260 258 { 261 259 m_sDriver = "oracle.jdbc.xa.client.OracleXADataSource"; 262 260 } 261 else if (m_adapter.getName().equals("Sybase")) 263 else if (sName.equals("Sybase")) ** 264 262 { 265 263 m_sDriver = "com.sybase.jdbc3.jdbc.SybXADataSource"; 266 264 } 265 else if (m_adapter.getName().equals("MySQL")) 267 else if (sName.equals("MySQL")) ** 268 266 { 269 267 m_sDriver = "com.mysql.jdbc.jdbc2.optional.MysqlXADataSource"; 270 268 } 269 else if (m_adapter.getName().startsWith("DB2")) 271 else if (sName.startsWith("DB2")) ** 272 270 { 273 271 m_sDriver = "com.ibm.db2.jcc.DB2XADataSource"; 274 272 } 275 else if (sName.equals("SQLite")) ** 276 { 277 m_sDriver = "nexj.core.persistence.sql.SQLiteDataSourceWrapper"; 278 } 279 273 else if (m_adapter.getName().equals("Teradata")) 280 274 { 281 275 m_sDriver = "nexj.core.persistence.sql.TeradataDataSourceWrapper"; src/nexj/core/meta/persistence/sql/RelationalDatabaseFragment.java » @@ -622,6 +622,23 @@ 622 622 m_props.addDefaultProperty("databaseName", m_sDatabase); 623 623 } 624 624 } 625 else if (sDriver.equals("nexj.core.persistence.sql.SQLiteDataSourceWrapper")) 626 { 627 Properties props = new Properties(); 628 629 if (m_sHost != null) 630 { 631 props.setProperty("serverName", m_sHost); 632 } 633 634 if (m_sDatabase != null) 635 { 636 props.setProperty("databaseName", m_sDatabase); 637 } 638 639 m_props.addDefaultProperty("DataSource", "org.sqlite.SQLiteDataSource"); 640 m_props.addDefaultProperty("Properties", PropertyUtil.toString(props)); 641 } 642 625 } 643 626 } 644 627 src/nexj/core/meta/persistence/sql/SQLiteDataSourceWrapper.java » src/nexj/core/persistence/sql/SQLSchemaManager.java » 4404 return getSQL(new StringWriter(sSQL.length()), getSQLSubstReader(new StringReader(sSQL), schema, table)); 4405 } 4406 4407 /** 4408 * Returns the expanded and formated SQL for creating a view from a specific SQLScript. 4409 * @param script The script to get the SQL template from. 4410 * @param schema The relational schema that the script is destined for. 4411 * @param table The default table used during script template expansion. Can be null. 4412 * @return The expanded and formated SQL for the specified SQLScript. 4413 */ 4414 protected String getViewSQL(SQLScript script, RelationalSchema schema, Table table) 4415 { 4416 return getExecSQL(script, schema, table); 4417 } 4418 4419 /** 4420 * Returns the expanded and formated SQL for a specific SQLScript. 4421 * @param script The script to get the SQL template from. 4422 * @param schema The relational schema that the script is destined for. 4423 * @param table The default table used during script template expansion. Can be null. 4424 * @return The expanded and formated SQL for the specified SQLScript. 4425 */ 4426 protected String getSQL(Writer writer, Reader reader) 4427 { 4428 4405 try 4429 4406 { 4407 IOUtil.copy(writer, getSQLSubstReader(new StringReader(sSQL), schema, table)); 4430 IOUtil.copy(writer, reader); 4431 4408 } /** 5768 * Reader expanding SQL macro variables. 5769 */ 5770 protected class SchemaManagerSQLSubstReader extends SQLSubstReader 5771 { src/nexj/core/persistence/sql/SQLSchemaManagerFactory.java » @@ -38,6 +38,10 @@ 38 38 { 39 39 return new PostgreSQLAdapter(); 40 40 } 41 else if (sDatabase.equals("SQLite")) 42 { 43 return new SQLiteAdapter(); 44 } 45 41 else 46 42 { 47 43 throw new PersistenceException("Unknown database product \"{0}\"", src/nexj/core/persistence/sql/SQLiteDataSourceWrapper.java » @@ -0,0 +1,200 @@ 1 package nexj.core.persistence.sql; 2 3 import java.io.PrintWriter; 4 import java.lang.reflect.Method; 5 import java.sql.Connection; 6 import java.sql.SQLException; 7 import java.sql.Statement; 8 9 import javax.sql.DataSource; 10 11 import nexj.core.persistence.sql.pseudoxa.PseudoXADataSourceWrapper; 12 13 public class SQLiteDataSourceWrapper extends PseudoXADataSourceWrapper 14 { src/nexj/core/persistence/sql/SQLiteSQLSchemaManager.java » @@ -0,0 +1,622 @@ 1 package nexj.core.persistence.sql; 2 3 import java.io.Reader; 4 5 import java.io.StringReader; 6 import java.io.StringWriter; 7 8 import nexj.core.meta.Primitive; 9 import nexj.core.meta.persistence.sql.Column; 10 import nexj.core.meta.persistence.sql.Index; 11 import nexj.core.meta.persistence.sql.RelationalSchema; 12 import nexj.core.meta.persistence.sql.SQLScript; 13 import nexj.core.meta.persistence.sql.SQLSubstReader; 14 import nexj.core.meta.persistence.sql.Table; 15 import nexj.core.persistence.SchemaVersion; 16 import nexj.core.util.StringUtil; 17 18 /** 19 * The SQLite schema manager. 20 */ 21 public class SQLiteSQLSchemaManager extends SQLSchemaManager ##################### junit tests ######################### test/nexj/core/persistence/sql/AllTests.java » @@ -2,7 +2,6 @@ 2 2 package nexj.core.persistence.sql; 3 3 4 4 import junit.framework.Test; 5 5 6 import nexj.test.junit.SQLTestSuite; 6 7 7 8 public class AllTests @@ -20,6 +19,7 @@ 19 20 suite.addSQLTests("nexj.core.persistence.sql.Oracle9iAdapterTest", "nexj.core.persistence.sql.Oracle9iSchemaManagerTest"); 20 21 suite.addSQLTests("nexj.core.persistence.sql.Oracle10gAdapterTest", "nexj.core.persistence.sql.Oracle10gSchemaManagerTest"); 21 22 suite.addSQLTests("nexj.core.persistence.sql.Oracle11gAdapterTest", "nexj.core.persistence.sql.Oracle11gSchemaManagerTest"); 22 suite.addSQLTests("nexj.core.persistence.sql.SQLiteAdapterTest", "nexj.core.persistence.sql.SQLiteSchemaManagerTest"); ** 23 23 suite.addSQLTests("nexj.core.persistence.sql.SybaseAdapterTest", "nexj.core.persistence.sql.SybaseSchemaManagerTest"); 24 24 suite.addSQLTests("nexj.core.persistence.sql.DB2v8AdapterTest", "nexj.core.persistence.sql.DB2v8SchemaManagerTest"); 25 25 suite.addSQLTests("nexj.core.persistence.sql.DB2AdapterTest", "nexj.core.persistence.sql.DB2SchemaManagerTest"); files test/nexj/core/persistence/sql/SQLiteAdapterTest.java » @@ -0,0 +1,49 @@ 1 package nexj.core.persistence.sql; 2 3 import nexj.core.meta.Metadata; 4 import nexj.core.util.Logger; 5 6 /** 7 * 8 */ 9 public class SQLiteAdapterTest extends SQLAdapterTest test/nexj/core/persistence/sql/SQLiteSchemaManagerTest.java » @@ -0,0 +1,40 @@ 1 package nexj.core.persistence.sql; 2 3 /** 4 * 5 */ 6 public class SQLiteSchemaManagerTest extends SQLSchemaManagerTest 7 { test/nexj/core/persistence/sql/script/sqlite_drop.sql » test/nexj/core/persistence/sql/script/sqlite_drop.sql » test/nexj/core/persistence/sql/script/sqlite_insert.sql » test/nexj/core/persistence/sql/script/sqlite_setup.sql » test/nexj/core/persistence/sql/script/sqlite_upd_addr.sql » test/nexj/core/persistence/sql/script/sqlite_upd_cont.sql » test/nexj/default.config » @@ -11,20 +11,21 @@ 11 11 test="true" 12 12 secureTransport="false" 13 13 app.user="jtest" 14 defaultrelationaldatabase.mysql.enabled="true" 15 defaultrelationaldatabase.postgresql.enabled="false"> 14 defaultrelationaldatabase.mysql.enabled="false" 15 defaultrelationaldatabase.postgresql.enabled="false" 16 defaultrelationaldatabase.sqlite.enabled="true"> 17 16 <DataSourceConnections> 18 17 <RelationalDatabaseConnection dataSource="DefaultRelationalDatabase" 18 adapter="MySQL" unicode="true" 19 adapter="SQLite" unicode="true" 20 19 database="test" 20 host="tor-sv-mysql" port="3306" 21 host="D:/NexjExpress/databases" 22 21 password="test" user="test"> 23 22 <SQLHook activation="context" description="Hook to count the number of reads" type="nexj.core.persistence.sql.ReadCountHook"/> 24 23 </RelationalDatabaseConnection> 25 24 <RelationalDatabaseConnection dataSource="ExternalRelationalDatabase" 25 adapter="MySQL" unicode="true" 26 adapter="SQLite" unicode="true" 27 26 database="test" 27 host="tor-sv-mysql" port="3306" 28 host="D:/NexjExpress/databases" 29 28 password="test" user="test"> 30 29 <SQLHook activation="context" description="Hook to count the number of reads" type="nexj.core.persistence.sql.ReadCountHook"/> 31 30 </RelationalDatabaseConnection> test/nexj/filestorage.connections » @@ -1,7 +1,7 @@ 1 1 <Connections description="MS SQL Server JUnit test environment"> 2 2 <DataSourceConnections> 3 <RelationalDatabaseConnection adapter="MySQL" dataSource="DefaultRelationalDatabase" database="test" host="tor-sv-mysql" password="test" port="3306" user="test"/> 4 <RelationalDatabaseConnection adapter="MySQL" dataSource="ExternalRelationalDatabase" database="test" host="tor-sv-mysql" password="test" port="3306" user="test"/> 3 <RelationalDatabaseConnection adapter="SQLite" dataSource="DefaultRelationalDatabase" database="test" host="D:/NexjExpress/databases" password="test" user="test"/> 4 <RelationalDatabaseConnection adapter="SQLite" dataSource="ExternalRelationalDatabase" database="test" host="D:/NexjExpress/databases" password="test" user="test"/> 5 5 <!--Parameters here are placeholders, to be modified by the unit test code--> 6 6 <FileStorageConnection adapter="Generic" dataSource="TestFilePersistenceDataSource" 7 7 description="File persistence adapter testing" test/nexj/filestoragefragment.connections » @@ -1,7 +1,7 @@ 1 1 <Connections description="MS SQL Server JUnit test environment"> 2 2 <DataSourceConnections> 3 <RelationalDatabaseConnection adapter="MySQL" dataSource="DefaultRelationalDatabase" database="test" host="tor-sv-mysql" password="test" port="3306" user="test"/> 4 <RelationalDatabaseConnection adapter="MySQL" dataSource="ExternalRelationalDatabase" database="test" host="tor-sv-mysql" password="test" port="3306" user="test"/> 3 <RelationalDatabaseConnection adapter="SQLite" dataSource="DefaultRelationalDatabase" database="test" host="D:/NexjExpress/databases" password="test" user="test"/> 4 <RelationalDatabaseConnection adapter="SQLite" dataSource="ExternalRelationalDatabase" database="test" host="D:/NexjExpress/databases" password="test" user="test"/> 5 5 <!--Parameters here are placeholders, to be modified by the unit test code--> 6 6 <FileStorageConnection adapter="Generic" dataSource="TestFilePersistenceDataSource" 7 7 description="File persistence adapter testing" test/nexj/sqlite.connections » @@ -0,0 +1,14 @@ 1 <Connections description="SQLite Server JUnit test environment"> 2 <DataSourceConnections> 3 <RelationalDatabaseConnection adapter="SQLite" dataSource="DefaultRelationalDatabase" database="test" host="D:/NexjExpress/databases" password="test" user="test"/> 4 <RelationalDatabaseConnection adapter="SQLite" dataSource="ExternalRelationalDatabase" database="test" host="D:/NexjExpress/databases" password="test" user="test"/> 5 </DataSourceConnections> 6 <ChannelConnections> 7 <MessageQueueConnection channel="ErrorQueue" password="mqpass" user="mq"/> 8 <MessageQueueConnection channel="InputQueue" password="mqpass" user="mq"/> 9 <MessageQueueConnection channel="OutputQueue" password="mqpass" user="mq"/> 10 <MessageQueueConnection channel="SystemQueue" password="mqpass" user="mq"/> 11 <MessageQueueConnection channel="SystemTopic" password="mqpass" user="mq"/> 12 <MailConnection channel="Mail" from="mailtest@nexjsystems.com" inHost="192.168.25.1" inProtocol="pop3" inEncryption="TLS" outHost="192.168.25.1" outProtocol="smtp" password="mail123pass" user="mailtest"/> 13 </ChannelConnections> 14 </Connections> 15 \ No newline at end of file