Difference between revisions of "PostgreSQL Adapter"
(→Project Phases) |
(→Phase 3: Test first design) |
||
Line 58: | Line 58: | ||
+ | ===- Modifications=== | ||
+ | {|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;"| '''Changes Done to MySQL adapter''' | ||
+ | |- | ||
+ | | | ||
+ | : When a connection is first established, this initial SQL statement should execute in MySQL, which is not the case for PostgreSQL, so it was commented out: | ||
+ | :: | ||
+ | <source lang=java> | ||
+ | /* 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(); | ||
+ | } | ||
+ | </source> | ||
+ | : Also the same line should be commented out in postgresql_create.sql script, which is being used to create tables in the database 'test': | ||
+ | :: | ||
+ | <source lang=java> | ||
+ | /* nexj/core/persistence/sql/etc/postgresql_create.sql */ | ||
+ | set sql_mode = concat(@@sql_mode, ',ANSI_QUOTES'); | ||
+ | </source> | ||
+ | : After activating the connection, the database is locked. | ||
+ | : In MySQL, the storage engine is set to a transactional safe engine such as [http://www.wikivs.com/wiki/MySQL_vs_PostgreSQL#MySQL:InnoDB InnoDB], whereas PostgreSQL has a single built in engine. So, changes needed to be done to this script: | ||
+ | :: | ||
+ | <source lang=java> | ||
+ | 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; | ||
+ | </source> | ||
+ | |} | ||
===Phase 2: Coding === | ===Phase 2: Coding === |
Revision as of 21:01, 9 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
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; |
Phase 2: Coding
- List of Tasks
- implementation of PostgreSQLAdapter.java
- implementation of PostgreSQLAdapterTest.java
- implementation of PostgreSQLSchemaManager.java
- implementation of main.upgrade
Resources
- Intro
- Concept of Adapter [1]
- FOSSLC PostgreSQL