OSDN Git Service

import
[luz/luz.git] / lacoder / src / com / lavans / lacoder / db / PostgresDialect.java
1 /* $Id: PostgresDialect.java 474 2011-08-21 10:48:48Z dobashi $\r
2  * create: 2004/12/28\r
3  * (c)2004 Lavans Networks Inc. All Rights Reserved.\r
4  */\r
5 package com.lavans.lacoder.db;\r
6 \r
7 import java.util.Properties;\r
8 \r
9 import com.lavans.lacoder.model.Attribute;\r
10 import com.lavans.luz2.commons.StringUtils;\r
11 \r
12 /**\r
13  * @author dobashi\r
14  * @version 1.00\r
15  */\r
16 public class PostgresDialect extends TypeManager {\r
17         private static Properties map = new Properties();\r
18         static{\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
32         }\r
33 \r
34         /**\r
35          * javaの型に対応したDBの型を取得。\r
36          * @return\r
37          */\r
38         @Override\r
39         public String getDbType(String javaType){\r
40                 return map.getProperty(javaType);\r
41         }\r
42 \r
43         /**\r
44          * javaの型に対応したDBの型を取得。\r
45          * @return\r
46          */\r
47         public String getDbType(Attribute attr) {\r
48                 String javaType = attr.getJavaType();\r
49                 // シーケンスの場合\r
50                 if(attr.isSequence()){\r
51                         javaType += "-sequence";\r
52                 }\r
53                 String dbType = map.getProperty(javaType);\r
54 \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
61                         }\r
62                         // scaleのみ指定の場合や指定無しの場合はnumericとだけ宣言する。\r
63                 }\r
64 \r
65                 return dbType;\r
66         }\r
67 \r
68 \r
69         /* (非 Javadoc)\r
70          * @see com.lavans.lacoder.main.TypeManager#getSequenceType()\r
71          */\r
72 //      public String getSequenceType() {\r
73 //              return "serial";        // number(10)?\r
74 //      }\r
75 \r
76         /* (非 Javadoc)\r
77          * @see com.lavans.lacoder.main.TypeManager#getSequenceSql(com.lavans.lacoder.main.Entity, com.lavans.lacoder.main.Attribute)\r
78          */\r
79         public String getSequenceSql(String entity) {\r
80                 // Postgresはserial指定にすると自動的にシーケンスを作成するので不要。\r
81                 /* CREATE SEQUENCE ENTITY_ATTR_SEQ\r
82                   INCREMENT BY 1\r
83                   START WITH 98080\r
84                   MAXVALUE 99999999\r
85                   MINVALUE 1\r
86                   CYCLE\r
87                   NOCACHE\r
88                 */\r
89 \r
90                 return "";\r
91         }\r
92 \r
93         /* (非 Javadoc)\r
94          * @see com.lavans.lacoder.main.TypeManager#getNextval(com.lavans.lacoder.main.Entity, com.lavans.lacoder.main.Attribute)\r
95          */\r
96         public String getNextval(Attribute attr) {\r
97                 return ("nextval('"+ StringUtils.toUnderscore(attr.getEntity().getName()) +"_"+ StringUtils.toUnderscore(attr.getName()) +"_seq')").toUpperCase();\r
98         }\r
99 \r
100         /**\r
101          * シーケンスの型を取得。バックアップテーブル用。\r
102          * @return\r
103          */\r
104         @Override\r
105         public String getSequenceType(){\r
106                 return "INT8";\r
107         }\r
108 \r
109 \r
110         /* (非 Javadoc)\r
111          * @see com.lavans.lacoder.main.TypeManager#getCurrentTime()\r
112          */\r
113         public String getCurrentTime() {\r
114                 return "now()";         // "sysdate"\r
115         }\r
116 }\r