Difference between revisions of "PostgreSQL Adapter-nexj/schema-test"

From CDOT Wiki
Jump to: navigation, search
(Initializing the SQL environment)
(Initializing the SQL environment)
Line 24: Line 24:
 
</source>
 
</source>
 
: After activating the connection, the database is locked.
 
: 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:
+
: 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, implementation of <code> appendTableSuffix() </code> in PostgreSQLManager.java was removed
 
::
 
::
 
<source lang=java>
 
<source lang=java>
 
create table test.Account(
 
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,
+
     id binary(16) not null, contactId binary(16) not null, constraint Account_PK primary key(id)
    constraint Account_PK primary key(id)
+
  )ENGINE=InnoDB CHARACTER SET=utf8;
  )ENGINE=InnoDB CHARACTER SET=utf8;
 
 
</source>
 
</source>
 +
 +
=== Working with Data Types ===
 
: <code> CREATE TABLE test.xxx </code>
 
: <code> CREATE TABLE test.xxx </code>
 
:: data types are changed in <code> appendColumnType() </code> in ''PostgreSQLSchemaManager.java'' based on each jdbc type's equivalent in PostgreSQL.
 
:: data types are changed in <code> appendColumnType() </code> in ''PostgreSQLSchemaManager.java'' based on each jdbc type's equivalent in PostgreSQL.

Revision as of 10:43, 10 December 2010

Working Inside Schema 'test'

Initializing the SQL environment

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:
/* 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();
   }
Also the same line should be commented out in postgresql_create.sql script, which is being used to create tables in the database 'test':
/* nexj/core/persistence/sql/etc/postgresql_create.sql */
set sql_mode = concat(@@sql_mode, ',ANSI_QUOTES');
After activating the connection, the database is locked.
In MySQL, the storage engine is set to a transactional safe engine such as InnoDB, whereas PostgreSQL has a single built in engine. So, implementation of appendTableSuffix() in PostgreSQLManager.java was removed
create table test.Account(
    id binary(16) not null, contactId binary(16) not null, constraint Account_PK primary key(id)
 )ENGINE=InnoDB CHARACTER SET=utf8;

Working with Data Types

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