1 21 22 package org.opensubsystems.blog.persist.db.oracle; 23 24 import java.sql.Connection ; 25 import java.sql.SQLException ; 26 import java.sql.Statement ; 27 import java.util.logging.Level ; 28 import java.util.logging.Logger ; 29 30 import org.opensubsystems.blog.data.Blog; 31 import org.opensubsystems.blog.data.Entry; 32 import org.opensubsystems.blog.persist.db.BlogDatabaseSchema; 33 import org.opensubsystems.core.error.OSSException; 34 import org.opensubsystems.core.persist.db.DatabaseImpl; 35 import org.opensubsystems.core.util.DatabaseUtils; 36 import org.opensubsystems.core.util.Log; 37 38 47 public class OracleBlogDatabaseSchema extends BlogDatabaseSchema 48 { 49 187 188 190 194 public static final int BLOG_COMMENTS_MAXLENGTH_ORACLE = 4000; 195 196 200 public static final int BLOGENTRY_COMMENTS_MAXLENGTH_ORACLE = 4000; 201 202 204 207 private static Logger s_logger = Log.getInstance(OracleBlogDatabaseSchema.class); 208 209 211 214 static 215 { 216 Blog.setCommentsMaxLength(BLOG_COMMENTS_MAXLENGTH_ORACLE); 218 Entry.setCommentsMaxLength(BLOGENTRY_COMMENTS_MAXLENGTH_ORACLE); 219 } 220 221 226 public OracleBlogDatabaseSchema( 227 ) throws OSSException 228 { 229 super(); 230 } 231 232 234 237 public void create( 238 Connection cntDBConnection, 239 String strUserName 240 ) throws SQLException 241 { 242 Statement stmQuery = null; 243 try 244 { 245 stmQuery = cntDBConnection.createStatement(); 246 247 if (stmQuery.execute("CREATE SEQUENCE BLOG_ID_SEQ " + 248 "INCREMENT BY 1 START WITH 1 NOCYCLE")) 249 { 250 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 252 } 253 s_logger.log(Level.FINEST, "Sequence BLOG_ID_SEQ created."); 254 255 if (stmQuery.execute( 256 "create table BF_BLOG" + NL + 257 "(" + NL + 258 " ID INTEGER NOT NULL," + NL + 259 " DOMAIN_ID INTEGER NOT NULL," + NL + 260 " FOLDER VARCHAR(" + BLOG_FOLDER_MAXLENGTH + ") NOT NULL," + NL + 261 " CAPTION VARCHAR(" + BLOG_CAPTION_MAXLENGTH + ") NOT NULL," + NL + 262 " COMMENTS VARCHAR(" + BLOG_COMMENTS_MAXLENGTH_ORACLE + ") NOT NULL," + NL + 263 " CREATION_DATE TIMESTAMP(9) NOT NULL," + NL + 264 " MODIFICATION_DATE TIMESTAMP(9) NOT NULL," + NL + 265 " CONSTRAINT BF_BLOG_PK PRIMARY KEY (ID)," + NL + 266 " CONSTRAINT BF_BLOG_FLDR_UQ UNIQUE (FOLDER)" + NL + 269 ")")) 270 { 271 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 273 } 274 s_logger.log(Level.FINEST, "Table BF_BLOG created."); 275 276 278 if (stmQuery.execute( 279 "CREATE OR REPLACE PROCEDURE INSERT_BF_BLOG " + NL + 280 "( " + NL + 281 " IN_DOMAIN_ID IN INTEGER, " + NL + 282 " IN_FOLDER IN VARCHAR, " + NL + 283 " IN_CAPTION IN VARCHAR, " + NL + 284 " IN_COMMENTS IN VARCHAR, " + NL + 285 " OUT_KEY OUT INTEGER, " + NL + 286 " OUT_TIMESTAMP OUT TIMESTAMP " + NL + 287 ") " + NL + 288 "IS " + NL + 289 " NEW_OUT_KEY INTEGER; " + NL + 290 " NEW_OUT_TIMESTAMP TIMESTAMP(9); " + NL + 291 "BEGIN " + NL + 292 " SELECT BLOG_ID_SEQ.NEXTVAL INTO NEW_OUT_KEY FROM DUAL;" + NL + 293 " OUT_KEY := NEW_OUT_KEY;" + NL + 294 " SELECT SYSDATE INTO NEW_OUT_TIMESTAMP FROM DUAL;" + NL + 295 " OUT_TIMESTAMP := NEW_OUT_TIMESTAMP;" + NL + 296 " INSERT INTO " + strUserName + ".BF_BLOG(ID, DOMAIN_ID, FOLDER, " + NL + 297 " CAPTION, COMMENTS, CREATION_DATE, MODIFICATION_DATE) " + NL + 298 " VALUES (OUT_KEY, IN_DOMAIN_ID, IN_FOLDER, IN_CAPTION, " + NL + 299 " IN_COMMENTS, OUT_TIMESTAMP, OUT_TIMESTAMP); " + NL + 300 "END;")) 301 { 302 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 304 } 305 s_logger.log(Level.FINEST, "Procedure INSERT_BF_BLOG created."); 306 307 309 if (stmQuery.execute( 310 "CREATE OR REPLACE PROCEDURE UPDATE_BF_BLOG " + NL + 311 "( " + NL + 312 " IN_FOLDER IN VARCHAR, " + NL + 313 " IN_CAPTION IN VARCHAR, " + NL + 314 " IN_COMMENTS IN VARCHAR, " + NL + 315 " IN_BLOG_ID IN INTEGER, " + NL + 316 " IN_DOMAIN_ID IN INTEGER, " + NL + 317 " IN_MODIFICATION_DATE IN TIMESTAMP, " + NL + 318 " OUT_TIMESTAMP OUT TIMESTAMP " + NL + 319 ") " + NL + 320 "IS " + NL + 321 " NEW_OUT_TIMESTAMP TIMESTAMP(9); " + NL + 322 "BEGIN " + NL + 323 " SELECT SYSDATE INTO NEW_OUT_TIMESTAMP FROM DUAL; " + 324 " OUT_TIMESTAMP := NEW_OUT_TIMESTAMP; " + NL + 325 " UPDATE " + strUserName + ".BF_BLOG SET FOLDER = IN_FOLDER, " + NL + 326 " CAPTION = IN_CAPTION, COMMENTS = IN_COMMENTS, " + NL + 327 " MODIFICATION_DATE = OUT_TIMESTAMP WHERE ID = IN_BLOG_ID " + NL + 328 " AND DOMAIN_ID = IN_DOMAIN_ID " + NL + 329 " AND MODIFICATION_DATE = IN_MODIFICATION_DATE; " + NL + 330 "END;")) 331 { 332 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 334 } 335 s_logger.log(Level.FINEST, "Procedure UPDATE_BF_BLOG created."); 336 337 339 if (stmQuery.execute("CREATE SEQUENCE BLOGENTRY_ID_SEQ " + 340 "INCREMENT BY 1 START WITH 1 NOCYCLE")) 341 { 342 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 344 } 345 s_logger.log(Level.FINEST, "Sequence BLOGENTRY_ID_SEQ created."); 346 347 348 if (stmQuery.execute( 349 "create table BF_BLOG_ENTRY" + NL + 350 "(" + NL + 351 " ID INTEGER NOT NULL," + NL + 352 " DOMAIN_ID INTEGER NOT NULL," + NL + 353 " BLOG_ID INTEGER NOT NULL," + NL + 354 " CAPTION VARCHAR(" + BLOGENTRY_CAPTION_MAXLENGTH + ") NOT NULL," + NL + 355 " COMMENTS VARCHAR(" + BLOGENTRY_COMMENTS_MAXLENGTH_ORACLE + ") NOT NULL," + NL + 356 " IMAGEURL VARCHAR(" + BLOGENTRY_IMAGEURL_MAXLENGTH + ") NOT NULL," + NL + 357 " TARGETURL VARCHAR(" + BLOGENTRY_TARGETURL_MAXLENGTH + ") NOT NULL," + NL + 358 " CREATION_DATE TIMESTAMP(9) NOT NULL," + NL + 359 " MODIFICATION_DATE TIMESTAMP(9) NOT NULL," + NL + 360 " CONSTRAINT BF_BLOGENTR_PK PRIMARY KEY (ID)," + NL + 361 " CONSTRAINT BF_BLOGENTR_FK FOREIGN KEY (BLOG_ID)" + NL + 364 " REFERENCES BF_BLOG (ID) ON DELETE CASCADE" + NL + 365 ")")) 366 { 367 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 369 } 370 s_logger.log(Level.FINEST, "Table BF_BLOG_ENTRY created."); 371 372 374 if (stmQuery.execute( 375 "CREATE OR REPLACE PROCEDURE INSERT_BF_BLOGENTR" + NL + 376 "(" + NL + 377 " IN_DOMAIN_ID IN INTEGER," + NL + 378 " IN_BLOG_ID IN INTEGER," + NL + 379 " IN_CAPTION IN VARCHAR," + NL + 380 " IN_COMMENTS IN VARCHAR," + NL + 381 " IN_IMAGEURL IN VARCHAR," + NL + 382 " IN_TARGETURL IN VARCHAR," + NL + 383 " OUT_KEY OUT INTEGER," + NL + 384 " OUT_TIMESTAMP OUT TIMESTAMP" + NL + 385 ") " + NL + 386 "IS " + NL + 387 " NEW_OUT_KEY INTEGER; " + NL + 388 " NEW_OUT_TIMESTAMP TIMESTAMP(9); " + NL + 389 "BEGIN " + NL + 390 " SELECT BLOGENTRY_ID_SEQ.NEXTVAL INTO NEW_OUT_KEY FROM DUAL;" + NL + 391 " OUT_KEY := NEW_OUT_KEY;" + NL + 392 " SELECT SYSDATE INTO NEW_OUT_TIMESTAMP FROM DUAL;" + NL + 393 " OUT_TIMESTAMP := NEW_OUT_TIMESTAMP;" + NL + 394 " INSERT INTO " + strUserName + ".BF_BLOG_ENTRY(ID, DOMAIN_ID, BLOG_ID, " + NL + 395 " CAPTION, COMMENTS, IMAGEURL, TARGETURL, CREATION_DATE, MODIFICATION_DATE)" + NL + 396 " VALUES (OUT_KEY, IN_DOMAIN_ID, IN_BLOG_ID, IN_CAPTION, " + NL + 397 " IN_COMMENTS, IN_IMAGEURL, IN_TARGETURL, OUT_TIMESTAMP, OUT_TIMESTAMP);" + NL + 398 "END;")) 399 { 400 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 402 } 403 s_logger.log(Level.FINEST, "Table INSERT_BF_BLOGENTR created."); 404 405 407 if (stmQuery.execute( 408 "CREATE OR REPLACE PROCEDURE UPDATE_BF_BLOGENTR" + NL + 409 "(" + NL + 410 " IN_CAPTION IN VARCHAR," + NL + 411 " IN_COMMENTS IN VARCHAR," + NL + 412 " IN_IMAGEURL IN VARCHAR," + NL + 413 " IN_TARGETURL IN VARCHAR," + NL + 414 " IN_ENTRY_ID IN INTEGER," + NL + 415 " IN_DOMAIN_ID IN INTEGER," + NL + 416 " IN_MODIFICATION_DATE IN TIMESTAMP," + NL + 417 " OUT_TIMESTAMP OUT TIMESTAMP" + NL + 418 ") " + NL + 419 "IS " + NL + 420 " NEW_OUT_TIMESTAMP TIMESTAMP(9); " + NL + 421 "BEGIN " + NL + 422 " SELECT SYSDATE INTO NEW_OUT_TIMESTAMP FROM DUAL; " + 423 " OUT_TIMESTAMP := NEW_OUT_TIMESTAMP; " + NL + 424 " UPDATE " + strUserName + ".BF_BLOG_ENTRY SET CAPTION = IN_CAPTION," + NL + 425 " COMMENTS = IN_COMMENTS, IMAGEURL = IN_IMAGEURL, TARGETURL= IN_TARGETURL," + NL + 426 " MODIFICATION_DATE = OUT_TIMESTAMP WHERE ID = IN_ENTRY_ID " + 427 " AND DOMAIN_ID = IN_DOMAIN_ID " + NL + 428 " AND MODIFICATION_DATE = IN_MODIFICATION_DATE;" + NL + 429 "END;")) 430 { 431 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 433 } 434 s_logger.log(Level.FINEST, "Table UPDATE_BF_BLOGENTR created."); 435 } 436 catch (SQLException sqleExc) 437 { 438 s_logger.log(Level.WARNING, 439 "Failed to create schema " + BLOG_SCHEMA_NAME, sqleExc); 440 throw sqleExc; 441 } 442 finally 443 { 444 DatabaseUtils.closeStatement(stmQuery); 445 } 446 } 447 448 451 public String getInsertBlogAndFetchGeneratedValues( 452 ) throws OSSException 453 { 454 return "{call INSERT_BF_BLOG (?, ?, ?, ?, ?, ?)}"; 455 } 456 457 460 public String getUpdateBlogAndFetchGeneratedValues( 461 ) throws OSSException 462 { 463 return "{call UPDATE_BF_BLOG (?, ?, ?, ?, ?, ?, ?)}"; 464 } 465 466 469 public String getInsertBlog( 470 ) throws OSSException 471 { 472 StringBuffer buffer = new StringBuffer (); 473 474 buffer.append("INSERT INTO BF_BLOG("); 476 buffer.append(BLOG_COLUMNS); 477 buffer.append(") VALUES (BLOG_ID_SEQ.NEXTVAL, ?, ?, ?, ?, "); 478 buffer.append(DatabaseImpl.getInstance().getCurrentTimestampFunctionCall()); 479 buffer.append(","); 480 buffer.append(DatabaseImpl.getInstance().getCurrentTimestampFunctionCall()); 481 buffer.append(")"); 482 483 return buffer.toString(); 484 } 485 486 489 public String getInsertEntryAndFetchGeneratedValues( 490 ) throws OSSException 491 { 492 return "{call INSERT_BF_BLOGENTR (?, ?, ?, ?, ?, ?, ?, ?)}"; 493 } 494 495 498 public String getUpdateEntryAndFetchGeneratedValues( 499 ) throws OSSException 500 { 501 return "{call UPDATE_BF_BLOGENTR (?, ?, ?, ?, ?, ?, ?, ?)}"; 502 } 503 504 507 public String getInsertEntry( 508 ) throws OSSException 509 { 510 StringBuffer buffer = new StringBuffer (); 511 512 buffer.append("INSERT INTO BF_BLOG_ENTRY("); 514 buffer.append(ENTRY_COLUMNS); 515 buffer.append(") VALUES (BLOGENTRY_ID_SEQ.NEXTVAL, ?, ?, ?, ?, ?, ?, "); 516 buffer.append(DatabaseImpl.getInstance().getCurrentTimestampFunctionCall()); 517 buffer.append(","); 518 buffer.append(DatabaseImpl.getInstance().getCurrentTimestampFunctionCall()); 519 buffer.append(")"); 520 521 return buffer.toString(); 522 } 523 } 524 | Popular Tags |