001 // Copyright (c) 2001 Hursh Jain (http://www.mollypages.org)
002 // The Molly framework is freely distributable under the terms of an
003 // MIT-style license. For details, see the molly pages web site at:
004 // http://www.mollypages.org/. Use, modify, have fun !
005
006 package fc.jdbc.dbo;
007
008 import java.sql.*;
009 import java.util.*;
010 import java.io.*;
011
012 import fc.io.*;
013 import fc.util.*;
014 import fc.jdbc.*;
015
016 /**
017 Create a table containing all JDBC/SQL types we are interested in. The
018 table is created using the database and jdbc url in the specified
019 configuration file. The "-db" flag is optional, if specified that table
020 is created in that catalog/schema. (Note: postgresql doesn't currently
021 allow us to set a db catalog, the db catalog/schema must be specified as
022 part of the jdbc url itself).
023 */
024 public class CreateAllTypes
025 {
026 static DBName dbname ;
027 static String tablename;
028
029 public static void main(String args[]) throws Exception
030 {
031 String defaultTableName = "alltypes";
032
033 Args myargs = new Args(args);
034 myargs.setUsage("java CreateAllTypes -conf conf_file [-db db_schema] [-table table_name_to_create]");
035
036 String db = myargs.get("db");
037 String conf = myargs.getRequired("conf");
038 tablename = myargs.get("table", defaultTableName);
039
040 Log.getDefault().setLevel(SystemLog.DEBUG);
041 FilePropertyMgr fprops = new FilePropertyMgr(new File(conf));
042 ConnectionMgr cmgr = new SimpleConnectionMgr(fprops);
043
044 String url = fprops.get("jdbc.url");
045 if (url.indexOf("postgres") != -1)
046 dbname = DBName.postgres;
047 else if (url.indexOf("mysql") != -1)
048 dbname = DBName.mysql;
049 else if (url.indexOf("oracle") != -1)
050 dbname = DBName.oracle;
051 else
052 throw new Exception("I do not understand this database type. Only mysql/postgresql supported currently."); /*f$%# oracle*/
053
054 Connection con = cmgr.getConnection();
055 if (db != null)
056 con.setCatalog(db);
057
058 String sql = getSQL();
059 Statement stmt = con.createStatement();
060 System.out.println("Creating table..");
061 int result = stmt.executeUpdate(sql);
062 System.out.println("...done [success]");
063 con.close();
064 }
065
066 static String getSQL()
067 {
068 String create =
069 "create table " + tablename + " ( ";
070
071 create += (dbname == DBName.mysql) ?
072 "id int auto_increment, "
073 :
074 "id serial, ";
075
076 create +=
077 "smallint_val smallint, "
078 + "int_val int not null, "
079 + "bigint_val bigint, "
080 + "float_val float(24), "
081 + "double_val float(53), "
082 + "numeric_val numeric(5,2), "
083 + "char_val char(10), "
084 + "varchar_val varchar(10), "
085 + "longvarchar_val text, "
086 + "date_val date, "
087 + "time_val time, "
088 + "timestamp_val timestamp, "
089 + "bit_val bit, "
090 ;
091
092 create += (dbname == DBName.mysql) ?
093 ("boolean_val bool, "
094 + "varbinary_val blob, ")
095 :
096 ("boolean_val boolean, "
097 + "varbinary_val bytea, ");
098
099 if (dbname == DBName.mysql) {
100 create +=
101 "json_val json, ";
102 }
103 else if (dbname == DBName.postgres) {
104 create +=
105 "array_val varchar(10)[], "
106 + "json_val json, "
107 + "jsonb_val jsonb, ";
108 }
109
110 create += " PRIMARY KEY (id) )";
111
112 return create;
113 }
114
115 }