Difference between revisions of "PostgreSQL Adapter"

From CDOT Wiki
Jump to: navigation, search
(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 22:01, 9 December 2010

PostgreSQL Adapter for NexJ

Project Goal

Develope an adapter to enable NexJ Express model to interact with PostgreSQL database

Current Status

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 with password: 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);
  • 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).
CREATE INDEX test.xxx
CREATE Trigger test.xxx // if it's needed for PostgreSQL as well as MySQL


- Modifications

Phase 2: Coding

  • List of Tasks
  1. implementation of PostgreSQLAdapter.java
  2. implementation of PostgreSQLAdapterTest.java
  3. implementation of PostgreSQLSchemaManager.java
  4. implementation of main.upgrade

Resources

  • Intro
Concept of Adapter [1]
FOSSLC PostgreSQL