All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.dellroad.stuff.spring.SpringSQLSchemaUpdate Maven / Gradle / Ivy

There is a newer version: 3.0.8
Show newest version

/*
 * Copyright (C) 2011 Archie L. Cobbs. All rights reserved.
 */

package org.dellroad.stuff.spring;

import java.sql.Connection;
import java.util.ArrayList;
import java.util.List;

import org.dellroad.stuff.schema.DatabaseAction;
import org.dellroad.stuff.schema.SQLCommandList;

/**
 * Spring-enabled SQL {@link org.dellroad.stuff.schema.SchemaUpdate}.
 *
 * 

* The {@link #setSQLCommandList sqlCommandList} property is required. * *

* Instances can be created succintly in Spring using the <dellroad-stuff:sql-update> custom XML element, * which works just like <dellroad-stuff:sql> except that it wraps the resulting {@link SQLCommandList} * as a delegate inside an instance of this class. * *

* For example: *

 *  <beans xmlns="http://www.springframework.org/schema/beans"
 *    xmlns:dellroad-stuff="http://dellroad-stuff.googlecode.com/schema/dellroad-stuff"
 *    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 *    xsi:schemaLocation="
 *      http://www.springframework.org/schema/beans
 *        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
 *      http://dellroad-stuff.googlecode.com/schema/dellroad-stuff
 *        http://dellroad-stuff.googlecode.com/svn/wiki/schemas/dellroad-stuff-1.0.xsd">
 *
 *      <!-- Schema update to add the 'phone' column to the 'User' table -->
 *      <dellroad-stuff:sql-update id="addPhone">ALTER TABLE User ADD phone VARCHAR(64)</dellroad-stuff:sql-update>
 *
 *      <!-- Schema update to run some complicated external SQL script -->
 *      <dellroad-stuff:sql-update id="majorChanges" depends-on="addPhone" resource="classpath:majorChanges.sql"/>
 *
 *      <!-- more beans... -->
 *
 *  </beans>
 * 
* *

* A multi-statement SQL script is normally treated as a set of individual updates. For example: *

 *      <dellroad-stuff:sql-update id="renameColumn">
 *          ALTER TABLE User ADD newName VARCHAR(64);
 *          ALTER TABLE User SET newName = oldName;
 *          ALTER TABLE User DROP oldName;
 *      </dellroad-stuff:sql-update>
 * 
* This will create three separate update beans named renameColumn-00001, renameColumn-00002, and * renameColumn-00003. You can disable this behavior by adding the attribute single-action="true", * in which case all three of the statements will be executed together in the same transaction and recorded under the name * renameColumn; this means that they must all complete successfully or you could end up with a partially * completed update. * *

* Note that if the nested SQL script only contains one SQL statement, any single-action attribute is * ignored and the bean's given name (e.g., renameColumn) is always used as the name of the single update. * * @see SQLCommandList */ public class SpringSQLSchemaUpdate extends AbstractSpringSchemaUpdate { private SQLCommandList sqlCommandList; @Override public void afterPropertiesSet() throws Exception { super.afterPropertiesSet(); if (this.sqlCommandList == null) throw new Exception("no SQLCommandList configured"); } /** * Configure the {@link SQLCommandList}. This is a required property. * * @param sqlCommandList list of SQL statements that perform this update * @see DatabaseAction */ public void setSQLCommandList(SQLCommandList sqlCommandList) { this.sqlCommandList = sqlCommandList; } public SQLCommandList getSQLCommandList() { return this.sqlCommandList; } @Override public List> getDatabaseActions() { return new ArrayList>(this.getSQLCommandList().split()); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy