
#**
Special macro to add table column with default null
**#
#macro(addColumnNull $table $column $type)
#if ($db.DBTYPE == "ORACLE" || $db.DBTYPE == "MSSQL")
    alter table $table add $column $type default null;
#else
    alter table $table add column $column $type default null;
#end
#end


#**
Special macro to add table column with not-null restriction and default value
**#
#macro(addColumnNotNull $table $column $type $default)
#if($db.DBTYPE == "MYSQL" || $db.DBTYPE=="HSQDB")
    alter table $table add column $column $type default $default not null;  
#elseif ($db.DBTYPE == "POSTGRESQL")
    alter table $table add column $column $type;
    alter table $table alter $column set default $default;
    update $table set $column=$default;
    alter table $table alter $column set not null;
#elseif ($db.DBTYPE == "HSQLDB")
    alter table $table add column $column $type default $default not null; 
#elseif ($db.DBTYPE == "DERBY" || $db.DBTYPE == "DB2")
    alter table $table add column $column $type with default $default not null;
#elseif ($db.DBTYPE == "ORACLE" || $db.DBTYPE == "MSSQL")
    alter table $table add $column $type default $default not null;  
#end
#end


#**
Special macro to drop NOT NULL requirement from an 'id' column.
**#
#macro(dropNotNullFromTableId $table)
#if($db.DBTYPE == "MYSQL")
    alter table $table drop primary key;
    alter table $table modify id varchar(48) null;
#elseif ($db.DBTYPE == "POSTGRESQL")
    alter table $table drop constraint "${table}_pkey";
    alter table $table  alter column id drop not null;
#elseif ($db.DBTYPE == "HSQLDB")
    alter table $table alter column id varchar(48) null;
#elseif ($db.DBTYPE == "DERBY" || $db.DBTYPE == "DB2")
    alter table $table drop primary key;
    alter table $table alter column id null;
#elseif ($db.DBTYPE == "ORACLE")
    alter table $table drop primary key; 
#end
#end


#**
Special macro to drop NOT NULL requirement from a column.
**#
#macro(dropNotNullFromColumn $table $colname $coltype)
#if($db.DBTYPE == "MYSQL")
    alter table $table modify $colname $coltype null;
#elseif ($db.DBTYPE == "POSTGRESQL")
    alter table $table  alter column $colname drop not null;
#elseif ($db.DBTYPE == "HSQLDB" || $db.DBTYPE == "MSSQL")
    alter table $table alter column $colname $coltype null;
#elseif ($db.DBTYPE == "DERBY" || $db.DBTYPE == "DB2")
    alter table $table alter column $colname null;
#elseif ($db.DBTYPE == "ORACLE")
    alter table $table alter column $colname null; 
#end
#end


#**
Define non-null column with default value
**#
#macro(columnNotNullWithDefault $columnName $columnType $defaultValue)
#if($db.DBTYPE == "ORACLE" || $db.DBTYPE == "HSQLDB")
   $columnName      $columnType default '$defaultValue' not null
#else 
   $columnName      $columnType not null default '$defaultValue'
#end
#end

#**
Rename a table.
For Derby, will not work if there is a view or foreign key that references the table. (DERBY-6672)
**#
#macro(renameTable $oldTableName $newTableName)
#if ($db.DBTYPE == 'POSTGRESQL' || $db.DBTYPE == 'HSQLDB')
alter table $oldTableName rename to $newTableName;
#elseif ($db.DBTYPE == 'MSSQL')
sp_rename '$oldTableName', '$newTableName';
#else
rename table $oldTableName TO $newTableName;
#end
#end

#**
Macro to account for lack of comparable long varchar in MySQL
**#
#macro(longtext $size) #if($db.DBTYPE == "MYSQL") text #else varchar($size) #end #end


#macro(dropForeignKey $tableName $indexName)
#if ($db.DBTYPE == 'POSTGRESQL')
drop index $indexName;
#elseif ($db.DBTYPE == "DERBY" || $db.DBTYPE == "MYSQL")
alter table $tableName drop foreign key $indexName;
#else
drop index $indexName on $tableName;
#end
#end

#macro(dropIndex $tableName $indexName)
#if ($db.DBTYPE == 'POSTGRESQL')
drop index $indexName;
#elseif ($db.DBTYPE == "DERBY" || $db.DBTYPE == "MYSQL")
alter table $tableName drop index $indexName;
#else
drop index $indexName on $tableName;
#end
#end


#macro(dropColumn $tableName $columnName)
alter table $tableName drop column $columnName;
#end


#macro(dropTableIfExists $tableName) 
#if ($db.DBTYPE == "DERBY")
-- You should drop table $tableName if it exists
#else
drop table if exists $tableName;
#end
#end


#macro(concat $s1 $s2) 
#if ($db.DBTYPE == "MSSQL") 
	$s1 + $s2 
#elseif ($db.DBTYPE != "MYSQL")
	$s1 || $s2 
#else 
	concat($s1, $s2) 
#end 
#end


#macro(alterColumnType $tableName $columnName $columnType)
#if($db.DBTYPE == "MYSQL" || $db.DBTYPE == "ORACLE")
alter table $tableName modify $columnName $columnType;
#elseif ($db.DBTYPE == "POSTGRESQL")
alter table $tableName alter column $columnName type $columnType;
#elseif ($db.DBTYPE == "DB2")
alter table $tableName alter column $columnName set data type $columnType;
#elseif ($db.DBTYPE == "HSQLDB" || $db.DBTYPE == "MSSQL")
alter table $tableName alter column $columnName $columnType;
#else
-- You should alter type of column $columnName of table $tableName to $columnType
#end
#end