velocity使ってCREATE文をつくりたい その1 2015/01/04

javaです。velocityです。
velocity使ってCREATE文をつくりたいです。
いろいろ模索中。以前、エクセルファイルから読み込んだ定義でDDLを作成するツールを作ったのですが、あまり納得いってなくて、また挑戦中。

import java.util.LinkedList; import java.util.List; public class Table { // テーブル基本 /** 和名 */ public String wname; /** 記号名 */ public String kname; public final List<Col> cols = new LinkedList<>(); }


public class Col { // テーブル詳細 public String kname; public String wamei; public String kata; public String size1; public String size2; public String notnull; public String defaultVal; public String pk; public String uq; public String index; }


CREATE TABLE IF NOT EXISTS ${table.kname} ( #foreach( $col in $cols ) #set( $size1 = ${col.size1} ) #set( $size2 = ${col.size2} ) #if( ${col.size1} && ${col.size2}) ${col.kname} ${col.kata} (${col.size1}, ${col.size2})#elseif( ${col.size1} && !${col.size2} ) ${col.kname} ${col.kata} (${col.size1})#else ${col.kname} ${col.kata} #end #if( ${col.defaultVal} ) DEFAULT ${col.defaultVal} #end #if( ${col.notnull} ) NOT NULL #end #if( $velocityHasNext ),#else #end #end #set( $out = true ) #foreach( $col in $cols )#if( $col.uq )#if( $out ), UNIQUE(#end#if( !$out ),#end${col.kname}#set( $out = false )#end#if( !$out && !$velocityHasNext )) #end#end #set( $out = true ) #foreach( $col in $cols )#if( $col.pk )#if( $out ), PRIMARY KEY(#end#if( !$out ),#end${col.kname}#set( $out = false )#end#if( !$out && !$velocityHasNext )) #end#end );

出来上がるのが以下のようなDDL文。
CREATE
TABLE IF NOT EXISTS TEST_TBL
(
    A DECIMAL (3, 2) NOT NULL ,
    B VARCHAR2 (10) NOT NULL ,
    C CHAR (10)
    , UNIQUE(B)
    , PRIMARY KEY(A,C)
);
それで、getter,setterなしのJavaでうまくいってるのは、前回作成した、
プログラマメモ2: velocityのいけていないところ - getter,setterはもういらない?
を使ったから。

とりあえず。

: