Skip to content

Commit

Permalink
initial postgres support
Browse files Browse the repository at this point in the history
  • Loading branch information
llsand committed May 17, 2019
1 parent f932a6b commit 725d4bf
Show file tree
Hide file tree
Showing 14 changed files with 1,345 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -32,4 +32,20 @@ public abstract class DatabaseHandler
public abstract boolean isRenameConstraint();

public abstract boolean isUpdateIdentity();

public final boolean isExpressionDifferent(String pExpression1, String pExpression2)
{
if( pExpression1==null && pExpression2==null ) {
return false;
}
if( pExpression1==null || pExpression2==null ) {
return true;
}
return isExpressionDifferentNotNull(pExpression1,pExpression2);
}

protected boolean isExpressionDifferentNotNull(String pExpression1, String pExpression2)
{
return !pExpression1.equals(pExpression2);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ public String getDefaultTablespace( CallableStatementProvider pCallableStatement
@Override
public DdlBuilder createDdlBuilder( Parameters pParameters )
{
return new DdlBuilderHsqlDb( pParameters );
return new DdlBuilderHsqlDb( pParameters, this );
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ public String getDefaultTablespace( CallableStatementProvider pCallableStatement
@Override
public DdlBuilder createDdlBuilder( Parameters pParameters )
{
return new DdlBuilderHsqlDb( pParameters );
return new DdlBuilderHsqlDb( pParameters, this );
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ public String getDefaultTablespace( CallableStatementProvider pCallableStatement
@Override
public DdlBuilder createDdlBuilder( Parameters pParameters )
{
return new DdlBuilderMySql( pParameters );
return new DdlBuilderMySql( pParameters, this );
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ public String getDefaultTablespace( CallableStatementProvider pCallableStatement
@Override
public DdlBuilder createDdlBuilder( Parameters pParameters )
{
return new DdlBuilderOracle( pParameters );
return new DdlBuilderOracle( pParameters, this );
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,168 @@
package de.opitzconsulting.orcas.diff;

import java.util.ArrayList;
import java.util.List;

import de.opitzconsulting.orcas.sql.CallableStatementProvider;
import de.opitzconsulting.orcas.sql.WrapperExecuteStatement;
import de.opitzconsulting.origOrcasDsl.CharType;

public class DatabaseHandlerPostgres extends DatabaseHandler {
@Override
public void createOrcasUpdatesTable(String pOrcasUpdatesTableName, CallableStatementProvider pOrcasCallableStatementProvider) {
String
lSql =
"create table "
+ pOrcasUpdatesTableName
+ " ( scup_id serial, scup_script_name varchar(4000) not null, scup_logname varchar(100) not null, scup_date date not null, scup_schema varchar(30) not null, primary key (scup_id))";
new WrapperExecuteStatement(lSql, pOrcasCallableStatementProvider).execute();
}

@Override
public void insertIntoOrcasUpdatesTable(
String pOrcasUpdatesTableName,
CallableStatementProvider pOrcasCallableStatementProvider,
String pFilePart,
String pLogname) {
String lSql = "" + //
" insert into " + pOrcasUpdatesTableName + "(" + //
" scup_script_name," + //
" scup_date," + //
" scup_schema," + //
" scup_logname" + //
" )" + //
" values (" + //
" ?," + //
" current_timestamp," + //
" user," + //
" ?" + //
" )" + //
"";
List<Object> lInsertParameters = new ArrayList<Object>();
lInsertParameters.add(pFilePart);
lInsertParameters.add(pLogname);
new WrapperExecuteStatement(lSql, pOrcasCallableStatementProvider, lInsertParameters).execute();
new WrapperExecuteStatement("commit", pOrcasCallableStatementProvider).execute();
}

@Override
public LoadIst createLoadIst(CallableStatementProvider pCallableStatementProvider, Parameters pParameters) {
return new LoadIstPostgres(pCallableStatementProvider, pParameters);
}

@Override
public CharType getDefaultCharType(CallableStatementProvider pCallableStatementProvider) {
return CharType.CHAR;
}

@Override
public String getDefaultTablespace(CallableStatementProvider pCallableStatementProvider) {
return null;
}

@Override
public DdlBuilder createDdlBuilder(Parameters pParameters) {
return new DdlBuilderPostgres(pParameters, this);
}

@Override
public void executeDiffResultStatement(String pStatementToExecute, CallableStatementProvider pCallableStatementProvider) {
new WrapperExecuteStatement(pStatementToExecute, pCallableStatementProvider).execute();
}

@Override
public boolean isRenamePrimaryKey() {
return true;
}

@Override
public boolean isRenameIndex() {
return true;
}

@Override
public boolean isRenameMView() {
return true;
}

@Override
public boolean isRenameForeignKey() {
return true;
}

@Override
public boolean isRenameUniqueKey() {
return true;
}

@Override
public boolean isRenameConstraint() {
return true;
}

@Override
public boolean isUpdateIdentity() {
return false;
}

private String cleanupSubExpression(String pExpression) {
String lReturn = pExpression;

lReturn = lReturn.trim();

if (lReturn.startsWith("(") && lReturn.endsWith(")")) {
lReturn = lReturn.substring(1, lReturn.length() - 1);
}

lReturn = lReturn.toLowerCase();

lReturn = lReturn.replace("current_timestamp", "now");



lReturn = lReturn.replace("(", "");
lReturn = lReturn.replace(")", "");
lReturn = lReturn.replace("[", "");
lReturn = lReturn.replace("]", "");
lReturn = lReturn.replace(" ", "");

lReturn = lReturn.replace("=anyarray", "in");
lReturn = lReturn.replace("::charactervarying", "");
lReturn = lReturn.replace("::text", "");

return lReturn;
}

private String cleanupExpression(String pExpression) {
String lReturn = "";

String[] lSplit = pExpression.split("'");
boolean lIsIn = false;
for (int i = 0; i < lSplit.length; i++) {
if (lIsIn) {
lReturn += lSplit[i];
} else {
lReturn += cleanupSubExpression(lSplit[i]);
}
lIsIn = !lIsIn;
if (i != lSplit.length - 1) {
lReturn += "'";
}
}

return lReturn;
}

@Override
protected boolean isExpressionDifferentNotNull(String pExpression1, String pExpression2) {
return super.isExpressionDifferentNotNull(cleanupExpression(pExpression1), cleanupExpression(pExpression2));
}

public static void main(String[] args) {
System.out.println(new DatabaseHandlerPostgres().cleanupExpression(
"((status)::text = ANY ((ARRAY['GENEHMIGT'::characteR varying, 'WARTEN_AUF_GENEHMIGUNG'::character varying])::text[]))"));
System.out.println(new DatabaseHandlerPostgres().cleanupExpression(
"STATUS in ('GENEHMIGT','WARTEN_AUF_GENEHMIGUNG')"));

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -59,10 +59,16 @@
public abstract class DdlBuilder
{
private Parameters parameters;
private DatabaseHandler databaseHandler;

public DdlBuilder( Parameters pParameters )
protected DatabaseHandler getDatabaseHandler() {
return databaseHandler;
}

public DdlBuilder( Parameters pParameters, DatabaseHandler pDatabaseHandler )
{
parameters = pParameters;
databaseHandler = pDatabaseHandler;
}

public boolean isAllColumnsNew( List<ColumnRefDiff> pColumns, TableDiff pTableDiff )
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@

public class DdlBuilderHsqlDb extends DdlBuilder
{
public DdlBuilderHsqlDb( Parameters pParameters )
public DdlBuilderHsqlDb( Parameters pParameters, DatabaseHandler pDatabaseHandler )
{
super( pParameters );
super( pParameters, pDatabaseHandler );
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@

public class DdlBuilderMySql extends DdlBuilder
{
public DdlBuilderMySql( Parameters pParameters )
public DdlBuilderMySql( Parameters pParameters, DatabaseHandler pDatabaseHandler )
{
super( pParameters );
super( pParameters, pDatabaseHandler );
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

public class DdlBuilderOracle extends DdlBuilder
{
public DdlBuilderOracle( Parameters pParameters )
public DdlBuilderOracle( Parameters pParameters, DatabaseHandler pDatabaseHandler )
{
super( pParameters );
super( pParameters, pDatabaseHandler );
}
}
Loading

0 comments on commit 725d4bf

Please sign in to comment.