//idega 2000 - Tryggvi Larusson /* *Copyright 2000 idega.is All Rights Reserved. */ package com.idega.data; import java.sql.Connection; import java.sql.Statement; /** *@author <a href="mailto:tryggvi@idega.is">Tryggvi Larusson</a> *@version 1.0 */ public class DB2DatastoreInterface extends DatastoreInterface{ /*public String getSQLType(String javaClassName){ String theReturn; if (javaClassName.equals("java.lang.Integer")){ theReturn = "NUMBER"; } else if (javaClassName.equals("java.lang.String")){ theReturn = "VARCHAR2"; } else if (javaClassName.equals("java.lang.Boolean")){ theReturn = "CHAR"; } else if (javaClassName.equals("java.lang.Float")){ theReturn = "DOUBLE"; } else if (javaClassName.equals("java.lang.Double")){ theReturn = "DOUBLE"; } else if (javaClassName.equals("java.sql.Timestamp")){ theReturn = "DATE"; } else if (javaClassName.equals("java.sql.Date")){ theReturn = "DATE"; } else if (javaClassName.equals("java.sql.Blob")){ theReturn = "BLOB"; } else if (javaClassName.equals("java.sql.Time")){ theReturn = "TIME"; } else{ theReturn = ""; } return theReturn; }*/ public String getSQLType(String javaClassName,int maxlength){ String theReturn; if (javaClassName.equals("java.lang.Integer")){ theReturn = "NUMBER"; } else if (javaClassName.equals("java.lang.String")){ if (maxlength<0){ theReturn = "VARCHAR(255)"; } else if (maxlength<=30000){ theReturn = "VARCHAR("+maxlength+")"; } else{ theReturn = "LONG VARCHAR"; } } else if (javaClassName.equals("java.lang.Boolean")){ theReturn = "CHAR(1)"; } else if (javaClassName.equals("java.lang.Float")){ theReturn = "FLOAT"; } else if (javaClassName.equals("java.lang.Double")){ theReturn = "FLOAT(15)"; } else if (javaClassName.equals("java.sql.Timestamp")){ theReturn = "TIMESTAMP"; } else if (javaClassName.equals("java.sql.Date") || javaClassName.equals("java.util.Date")) { theReturn = "DATE"; } else if (javaClassName.equals("java.sql.Blob")){ theReturn = "BLOB"; } else if (javaClassName.equals("java.sql.Time")){ theReturn = "TIME"; } else if (javaClassName.equals("com.idega.util.Gender")) { theReturn = "VARCHAR(1)"; } else if (javaClassName.equals("com.idega.data.BlobWrapper")) { theReturn = "BLOB"; } else{ theReturn = ""; } return theReturn; } /** * Only creates the sequence, not the trigger * @todo implement trigger creation */ public void createTrigger(GenericEntity entity)throws Exception{ createSequence(entity); /* Connection conn= null; Statement Stmt= null; try{ conn = entity.getConnection(); Stmt = conn.createStatement(); int i = Stmt.executeUpdate("CREATE TRIGGER "+entity.getTableName()+"_trig BEFORE INSERT ON "+entity.getTableName()+" FOR EACH ROW WHEN (NEW."+entity.getIDColumnName()+" is null) DECLARE TEMP INTEGER; BEGIN SELECT "+entity.getTableName()+"_seq.NEXTVAL INTO TEMP FROM DUAL; :NEW."+entity.getIDColumnName()+":=TEMP;END;"); } finally{ if(Stmt != null){ Stmt.close(); } if (conn != null){ entity.freeConnection(conn); } } */ } public void createSequence(GenericEntity entity)throws Exception{ Connection conn= null; Statement Stmt= null; try{ conn = entity.getConnection(); Stmt = conn.createStatement(); Stmt.executeUpdate("create sequence "+entity.getTableName()+"_seq INCREMENT BY 1 START WITH 1 MAXVALUE 1.0E28 MINVALUE 1 NOCYCLE CACHE 20 NOORDER"); } finally{ if(Stmt != null){ Stmt.close(); } if (conn != null){ entity.freeConnection(conn); } } } public void deleteEntityRecord(GenericEntity entity)throws Exception{ super.deleteEntityRecord(entity); /** * @todo change */ //deleteTrigger(entity); deleteSequence(entity); } protected void deleteTrigger(GenericEntity entity)throws Exception{ Connection conn= null; Statement Stmt= null; try{ conn = entity.getConnection(); Stmt = conn.createStatement(); Stmt.executeUpdate("drop trigger "+entity.getTableName()+"_trig"); } finally{ if(Stmt != null){ Stmt.close(); } if (conn != null){ entity.freeConnection(conn); } } } protected void deleteSequence(GenericEntity entity)throws Exception{ Connection conn= null; Statement Stmt= null; try{ conn = entity.getConnection(); Stmt = conn.createStatement(); Stmt.executeUpdate("drop sequence "+entity.getTableName()+"_seq"); } finally{ if(Stmt != null){ Stmt.close(); } if (conn != null){ entity.freeConnection(conn); } } } /* public void createForeignKeys(IDOLegacyEntity entity)throws Exception{ Connection conn= null; Statement Stmt= null; try{ conn = entity.getConnection(); String[] names = entity.getColumnNames(); for (int i = 0; i < names.length; i++){ if (!entity.getRelationShipClassName(names[i]).equals("")){ Stmt = conn.createStatement(); String statement = "ALTER TABLE "+entity.getTableName()+" ADD FOREIGN KEY ("+names[i]+") REFERENCES "+((IDOLegacyEntity)Class.forName(entity.getRelationShipClassName(names[i])).newInstance()).getTableName()+" "; System.out.println(statement); int n = Stmt.executeUpdate(statement); if(Stmt != null){ Stmt.close(); } } } } finally{ if(Stmt != null){ Stmt.close(); } if (conn != null){ entity.freeConnection(conn); } } }*/ protected void executeBeforeInsert(GenericEntity entity)throws Exception{ if ( entity.isNull(entity.getIDColumnName()) ){ entity.setID(createUniqueID(entity)); } } /* protected void insertBlob(IDOLegacyEntity entity)throws Exception{ Connection Conn = null; oracle.sql.BLOB blob; try{ Conn = entity.getConnection(); if(Conn == null) return; //Conn.setAutoCommit(false); Statement stmt2 = Conn.createStatement(); String cmd = "SELECT "+entity.getLobColumnName()+" FROM "+entity.getEntityName()+" WHERE "+entity.getIDColumnName()+" ='"+entity.getID()+"' FOR UPDATE "; ResultSet RS2 = stmt2.executeQuery(cmd); RS2.next(); blob = ((OracleResultSet)RS2).getBLOB(1); // write the array of binary data to a BLOB OutputStream outstream = blob.getBinaryOutputStream(); int size = blob.getBufferSize(); byte[] buffer = new byte[size]; int length = -1; BlobWrapper wrapper = entity.getBlobColumnValue(entity.getLobColumnName()); if(wrapper!=null){ BufferedInputStream in = new BufferedInputStream( wrapper.getInputStreamForBlobWrite() ); while ((length = in.read(buffer)) != -1) outstream.write(buffer, 0, length ); in.close(); } outstream.flush(); outstream.close(); stmt2.close(); RS2.close(); //Conn.commit(); //Conn.setAutoCommit(true); } catch(SQLException ex){ex.printStackTrace(); System.err.println( "error saving to db");} catch(Exception ex){ex.printStackTrace();} finally{ if(Conn != null) entity.freeConnection(Conn); } } */ protected String getCreateUniqueIDQuery(GenericEntity entity){ return "SELECT "+getSequenceName(entity)+".nextval FROM dual"; } private static String getSequenceName(GenericEntity entity){ String entityName = entity.getTableName(); return entityName+"_seq"; /*if (entityName.endsWith("_")){ return entityName+"seq"; } else{ return entityName+"_seq"; }*/ } }