Difference between revisions of "PostgreSQL Adapter"
(→Phase 2: Connect to PostgreSQL) |
(→Phase 3: Test first design) |
||
Line 119: | Line 119: | ||
</source> | </source> | ||
+ | |} | ||
+ | {|class="collapsible collapsed" style="border-style:solid;border-width:thin;border-color:black" | ||
+ | !align="left" style="background-color:SteelBlue; font-weight:bold;border-style:solid;border-width:thin;padding: 2px 2px 2px 2px;"| '''Files to Configure''' | ||
+ | |- | ||
+ | | | ||
+ | :: [[ PostgreSQL_Adapter-nexj/Adapter | PostgreSQLAdapter.java ]] // Extends SQLAdapter.java - SQL Persistence adapter, responsible for regular data queries (insert, select, delete) | ||
+ | :: [[ PostgreSQL_Adapter-nexj/SchemaManger | PostgreSQLSchemaManager.java ]] // Extends SQLSchemaManager.java - class for reading, creating and upgrading the database schema | ||
+ | :: [[ PostgreSQL_Adapter-nexj/Upgrade | main.upgrade ]] | ||
+ | : test | ||
+ | :: [[ PostgreSQL_Adapter-nexj/AdapterTest | PostgreSQLAdapterTest.java ]]] // Extends SQLAdapterTest.java | ||
+ | :: [[ PostgreSQL_Adapter-nexj/SchemaMangerTest | PostgreSQLSchemaManagerTest.java ]] // Extends SQLSchemaManagerTest.java | ||
+ | : Script - scripts are being processed through SQLDataTest.java | ||
+ | :: postgresql_setup.sql | ||
+ | :: TO be cond' | ||
|} | |} | ||
Revision as of 09:51, 10 December 2010
PostgreSQL Adapter for NexJ
Contents
Project Goal
Develope an adapter to enable NexJ Express model to interact with PostgreSQL database
Current Status
Dec 2010 |
---|
|
Nov 2010 |
---|
|
Project Phases
Phase 1: Investigation
- Get requirements from NexJ (Meeting on Friday Nov 5th)
- Walk-through the code
- Familiarization with PostgreSQL
Phase 2: Connect to PostgreSQL
- Create Test Environment
- Files to Modify
- Files to configure for connection on PostgreSQL properties==
- src
- PostgreSQLAdapter.java // Extends SQLAdapter.java - SQL Persistence adapter, responsible for regular data queries (insert, select, delete)
- PostgreSQLSchemaManager.java // Extends SQLSchemaManager.java - class for reading, creating and upgrading the database schema
- system.dstype
- DatabaseTool.java // This file calles SQLSchemaMangerFactory.java and creates the connection
- RelationalDatabase.java // Sets the default properties for the supported drivers
- RelationalDatabaseFragment.java // Sets the custom fragment properties for the supported drivers
- Driver type and some other properties in JDBCInfo.java
- SQLSchemaManagerFactory.java // Sets the connection for the particular adapter type
- main.upgrade
- test
- AllTests.java
- PostgreSQLAdapterTest.java ] // Extends SQLAdapterTest.java
- PostgreSQLSchemaManagerTest.java // Extends SQLSchemaManagerTest.java
- default.config // System resources are being extracted from these 4 XML files
- postgresql.connection
- filestorage.connections
- filestoragefragment.connections
- Script - scripts are being processed through SQLDataTest.java
- postgresql_setup.sql
- TO be cond'
Phase 3: Test first design
- 1- Create a PostgreSQL database through some scripts
- Through the process in postgresql_setup.sql, the database was created, initialized and tested:
- A database called 'test is created in PostgreSQL :
CREATE DATABASE test
- To create a
user
along withpassword
:CREATE USER test WITH PASSWORD 'test';
- Login to the database 'test' with username 'test':
psql -U test test
- Create a
Schema
called 'test' inside the database 'test' with particular owner 'test':CREATE SCHEMA test AUTHORIZATION test;
- Create a
table
called 'Mutex' with primary key:CREATE TABLE test.Mutex(id INT PRIMARY KEY);
- Insert a value into the primary key:
INSERT INTO test.Mutex(id) VALUES (1);
- A database called 'test is created in PostgreSQL :
- 3- Working inside Schema 'test'
-
CREATE TABLE test.xxx
- data types are changed in
appendColumnType()
in PostgreSQLSchemaManager.java based on each jdbc type's equivalent in PostgreSQL. - The implementation in
crateTextTable
in file PostgreSQLSchemaManager.java is removed for now (base class's version is being called).
- data types are changed in
-
CREATE INDEX test.xxx
-
CREATE Trigger test.xxx // if it's needed for PostgreSQL as well as MySQL
- Modifications
Changes Done to MySQL adapter |
---|
/* MySQLAdapter.java */
public String getInitialSQL()
{
StringBuffer buf = new StringBuffer();
buf.append("set sql_mode = concat(@@sql_mode, ',ANSI_QUOTES')"); // allow using doublequote when quoting column names in "CREATE TABLE" statements
buf.append(";set optimizer_search_depth = 0"); // let DB automatically decide on how long it takes to examine plans, improves long planning sessions
buf.append(";set max_sort_length = ").append
(Math.max(MAX_VARCHAR_PRECISION, MAX_VARBINARY_PRECISION)); // set TEXT/BLOB minimum sorting length to be same as cutoff between varchar/text
return buf.toString();
}
/* nexj/core/persistence/sql/etc/postgresql_create.sql */
set sql_mode = concat(@@sql_mode, ',ANSI_QUOTES');
create table test.Account(
id binary(16) not null, contactId binary(16) not null, account Type varchar(16) character set utf8 not null, funds double null,
constraint Account_PK primary key(id)
)engine=innoDB; |
Files to Configure |
---|
|
Phase 4: Test properties specific to PostgreSQL
- Add test cases that are specific to PostgreSQL database
Phase 5: Optimization
- After implementation is done, optimizing the modified files.
Resources
- Intro
- Concept of Adapter [1]
- FOSSLC PostgreSQL