OSDN Git Service

init.jsでテーブルの定義を行うようにした
[webchat/WebChat.git] / init.js
1 var util = require("util");
2 var config = require("./configure.js");
3 var async = require("async");
4
5 var MySQLPool = new require("./mysql_pool.js");
6 var pool = new MySQLPool({
7                         host     : config.db_host,
8                         user     : config.db_user,
9                         password : config.db_password,
10                         port     : config.db_port,
11                         database : "webchat",
12                 });
13
14 async.waterfall([
15         function(next){
16                 var query = GetDropTableQuery("list"); 
17                 pool.query(query,null,next);
18         },
19         function(result,next){
20                 var query = GetCreateQuery(config.alias,"list"); 
21                 pool.query(query,null,next);
22         },
23         function(result,next){
24                 var query = GetDropTableQuery("ipbanlist"); 
25                 pool.query(query,null,next);
26         },
27         function(result,next){
28                 var def = {
29                         ip:{
30                                 type : "text",
31                                 length : 64,
32                                 primary : true,
33                         },
34                         type:{
35                                 type : "text",
36                                 length : 1,
37                                 primary : true,
38                         },
39                 };
40                 var query = GetCreateQuery(def,"ipbanlist"); 
41                 pool.query(query,null,next);
42         },
43         function(result,next){
44                 var query = GetDropTableQuery("rooms"); 
45                 pool.query(query,null,next);
46         },
47         function(result,next){
48                 var def = {
49                         number:
50                                 {
51                                         type : "unsignednumber",
52                                         length:2,
53                                         isnotempty : true,
54                                         primary : true,
55                                 },
56                         password:{
57                                 type : "text",
58                                 length : 16,
59                         },
60                         hiddenlog:{
61                                 type : "bool",
62                         },
63                 };
64                 var query = GetCreateQuery(def,"rooms"); 
65                 pool.query(query,null,next);
66         },
67 ],function(err){
68         console.log(err);
69         process.exit();
70 });
71
72
73 function GetDropTableQuery(tablename)
74 {
75         var result = util.format("DROP TABLE IF EXISTS %s;",tablename);
76
77         console.log(result);
78
79         return result;
80 }
81
82 function GetCreateQuery(def,tablename)
83 {
84         var result = "CREATE TABLE " + tablename + "(";
85         for(key in def)
86         {
87                 switch(def[key].type)
88                 {
89                         case "text":
90                                 result += util.format("%s VARCHAR(%d) ",key,def[key].length);
91                                 break;
92                         case "number":
93                                 result += util.format("%s %s ",key,GetIntType(def[key].length));
94                                 break;
95                         case "unsignednumber":
96                                 result += util.format("%s %s UNSIGNED ",key,GetIntType(def[key].length));
97                                 break;
98                         case "mail":
99                                 result += util.format("%s VARCHAR(%d) ",key,def[key].length);
100                                 break;
101                         case "password":
102                                 result += util.format("%s VARCHAR(%d) ",key,def[key].length);
103                                 break;
104                         case "textarea":
105                                 result += util.format("%s TEXT ",key);
106                                 break;
107                         case "bool":
108                                 result += util.format("%s BOOL ",key);
109                                 break
110                         case "datetime":
111                                 result +=  util.format("%s DATETIME ",key);
112                                 break;
113                         default:
114                                 throw util.format("invaild %s type:%s",key,def[key].type);
115                 }
116                 if(typeof(def[key].isnotempty) != "undefined" && def[key].isnotempty)
117                         result += " NOT NULL ";
118                 result += ",";
119         }
120
121         for(key in def)
122         {
123                 if(typeof(def[key].primary) != "undefined" && def[key].primary)
124                 {
125                         result += util.format("PRIMARY KEY(%s)",key);
126                         break;
127                 }
128         }
129         result += ");";
130
131         console.log(result);
132
133         return result;
134 }
135
136 function GetIntType(len)
137 {
138         switch(len)
139         {
140                 case 1:
141                         return "TINYINT";
142                 case 2:
143                         return "SMALLINT";
144                 case 4:
145                         return "INT";
146         }
147         console.log(len);
148         throw "Invaild Length";
149 }