1 /* $Id: PostgresDialect.java 474 2011-08-21 10:48:48Z dobashi $
\r
3 * (c)2004 Lavans Networks Inc. All Rights Reserved.
\r
5 package com.lavans.lacoder.db;
\r
7 import java.util.Properties;
\r
9 import com.lavans.lacoder.model.Attribute;
\r
10 import com.lavans.luz2.commons.StringUtils;
\r
16 public class PostgresDialect extends TypeManager {
\r
17 private static Properties map = new Properties();
\r
19 map.put("int", "int4");
\r
20 map.put("Integer", "int4");
\r
21 map.put("long", "int8");
\r
22 map.put("Long", "int8");
\r
23 map.put("int-sequence", "serial4");
\r
24 map.put("Integer-sequence","serial4");
\r
25 map.put("long-sequence", "serial8");
\r
26 map.put("Long-sequence", "serial8");
\r
27 map.put("BigDecimal","numeric");
\r
28 map.put("String", "text");
\r
29 map.put("Date", "timestamp");
\r
30 map.put("boolean", "boolean");
\r
31 map.put("byte[]", "bytea");
\r
35 * javaの型に対応したDBの型を取得。
\r
39 public String getDbType(String javaType){
\r
40 return map.getProperty(javaType);
\r
44 * javaの型に対応したDBの型を取得。
\r
47 public String getDbType(Attribute attr) {
\r
48 String javaType = attr.getJavaType();
\r
50 if(attr.isSequence()){
\r
51 javaType += "-sequence";
\r
53 String dbType = map.getProperty(javaType);
\r
55 // BigDecimalでprecisionとscaleの指定がある場合
\r
56 if(javaType.equals("BigDecimal")){
\r
57 if(attr.getPrecision()!=null && attr.getScale()!=null){
\r
58 dbType +="("+attr.getPrecision()+","+attr.getScale()+")";
\r
59 }else if(attr.getPrecision()!=null && attr.getScale()==null){
\r
60 dbType +="("+attr.getPrecision()+")";
\r
62 // scaleのみ指定の場合や指定無しの場合はnumericとだけ宣言する。
\r
70 * @see com.lavans.lacoder.main.TypeManager#getSequenceType()
\r
72 // public String getSequenceType() {
\r
73 // return "serial"; // number(10)?
\r
77 * @see com.lavans.lacoder.main.TypeManager#getSequenceSql(com.lavans.lacoder.main.Entity, com.lavans.lacoder.main.Attribute)
\r
79 public String getSequenceSql(String entity) {
\r
80 // Postgresはserial指定にすると自動的にシーケンスを作成するので不要。
\r
81 /* CREATE SEQUENCE ENTITY_ATTR_SEQ
\r
94 * @see com.lavans.lacoder.main.TypeManager#getNextval(com.lavans.lacoder.main.Entity, com.lavans.lacoder.main.Attribute)
\r
96 public String getNextval(Attribute attr) {
\r
97 return ("nextval('"+ StringUtils.toUnderscore(attr.getEntity().getName()) +"_"+ StringUtils.toUnderscore(attr.getName()) +"_seq')").toUpperCase();
\r
101 * シーケンスの型を取得。バックアップテーブル用。
\r
105 public String getSequenceType(){
\r
111 * @see com.lavans.lacoder.main.TypeManager#getCurrentTime()
\r
113 public String getCurrentTime() {
\r
114 return "now()"; // "sysdate"
\r