Updated Release Archive. Fixed Mage-killer prereqs. Removed old LETO & ConvoCC related files. Added organized spell scroll store. Fixed Gloura spellbook. Various TLK fixes. Reorganized Repo. Removed invalid user folders. Added DocGen back in.
266 lines
11 KiB
Java
266 lines
11 KiB
Java
package prc.utils;
|
|
|
|
import prc.autodoc.*;
|
|
|
|
import java.io.BufferedWriter;
|
|
import java.io.File;
|
|
import java.io.FileOutputStream;
|
|
import java.io.OutputStreamWriter;
|
|
|
|
import static prc.Main.spinner;
|
|
import static prc.Main.verbose;
|
|
|
|
public final class SQLMaker {
|
|
private SQLMaker() {
|
|
}
|
|
|
|
private static BufferedWriter sql;
|
|
private static String q = "";
|
|
private static boolean mysql = false;
|
|
private static boolean sqlite = true;
|
|
|
|
/**
|
|
* The main method, as usual.
|
|
*
|
|
* @param args do I really need to explain this?
|
|
* @throws Exception this is a simple tool, just let all failures blow up
|
|
*/
|
|
public static void main(String[] args) throws Exception {
|
|
if (args.length == 0 || args[0].equals("--help") || args[0].equals("-?"))
|
|
readMe();
|
|
|
|
String dir = args[0];
|
|
if (args.length >= 1 && args[1].equalsIgnoreCase("MySQL")) {
|
|
q = "`";
|
|
mysql = true;
|
|
sqlite = false;
|
|
}
|
|
|
|
// Create the output stream
|
|
File target = new File("out.sql");
|
|
// Clean up old version if necessary
|
|
if (target.exists()) {
|
|
if (verbose) System.out.println("Deleting previous version of " + target.getName());
|
|
target.delete();
|
|
}
|
|
target.createNewFile();
|
|
|
|
// Allocate output buffer of 1Mb
|
|
sql = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(target)), 0xFFFFF);
|
|
|
|
|
|
//setup the transaction
|
|
if (sqlite)
|
|
sql.append("BEGIN IMMEDIATE;\n");
|
|
//optimize for windows
|
|
if (sqlite)
|
|
sql.append("PRAGMA page_size=4096;\n");
|
|
//delete any preexsiting tables
|
|
sql.append("DROP TABLE IF EXISTS " + q + "prc_cached2da" + q + ";\n" +
|
|
"DROP TABLE IF EXISTS " + q + "prc_cached2da_appearance" + q + ";\n" +
|
|
"DROP TABLE IF EXISTS " + q + "prc_cached2da_classes" + q + ";\n" +
|
|
"DROP TABLE IF EXISTS " + q + "prc_cached2da_cls_feat" + q + ";\n" +
|
|
"DROP TABLE IF EXISTS " + q + "prc_cached2da_feat" + q + ";\n" +
|
|
"DROP TABLE IF EXISTS " + q + "prc_cached2da_ireq" + q + ";\n" +
|
|
"DROP TABLE IF EXISTS " + q + "prc_cached2da_item_to_ireq" + q + ";\n" +
|
|
"DROP TABLE IF EXISTS " + q + "prc_cached2da_portraits" + q + ";\n" +
|
|
"DROP TABLE IF EXISTS " + q + "prc_cached2da_racialtypes" + q + ";\n" +
|
|
"DROP TABLE IF EXISTS " + q + "prc_cached2da_soundset" + q + ";\n" +
|
|
"DROP TABLE IF EXISTS " + q + "prc_cached2da_spells" + q + ";\n"
|
|
);
|
|
//create a few tables
|
|
sql.append(
|
|
/*
|
|
"CREATE TABLE "+q+"prc_cached2da_ireq"+q+" (" +
|
|
""+q+"rowid"+q+" integer DEFAULT -1, " +
|
|
""+q+"file"+q+" varchar(20) DEFAULT '_', " +
|
|
""+q+"LABEL"+q+" varchar(255) DEFAULT '_', " +
|
|
""+q+"ReqType"+q+" varchar(255) DEFAULT '_', " +
|
|
""+q+"ReqParam1"+q+" varchar(255) DEFAULT '_', " +
|
|
""+q+"ReqParam2"+q+" varchar(255) DEFAULT '_');\n" +
|
|
*/
|
|
"CREATE TABLE " + q + "prc_cached2da_cls_feat" + q + " (" +
|
|
"" + q + "rowid" + q + " integer DEFAULT -1, " +
|
|
"" + q + "file" + q + " varchar(20) DEFAULT '_', " +
|
|
"" + q + "FeatLabel" + q + " varchar(255) DEFAULT '_', " +
|
|
"" + q + "FeatIndex" + q + " varchar(255) DEFAULT '_', " +
|
|
"" + q + "List" + q + " varchar(255) DEFAULT '_', " +
|
|
"" + q + "GrantedOnLevel" + q + " varchar(255) DEFAULT '_', " +
|
|
"" + q + "OnMenu" + q + " varchar(255) DEFAULT '_');\n" +
|
|
|
|
"CREATE TABLE " + q + "prc_cached2da" + q + " (" +
|
|
"" + q + "file" + q + " varchar(20) DEFAULT '_', " +
|
|
"" + q + "columnid" + q + " varchar(255) DEFAULT '_', " +
|
|
"" + q + "rowid" + q + " integer DEFAULT -1, " +
|
|
"" + q + "data" + q + " varchar(255) DEFAULT '_');\n"
|
|
);
|
|
|
|
File[] files = new File(dir).listFiles();
|
|
for (int i = 0; i < files.length; i++)
|
|
addFileToSQL(files[i]);
|
|
|
|
//create some indexs
|
|
sql.append("CREATE UNIQUE INDEX " + q + "spellsrowindex" + q + " ON " + q + "prc_cached2da_spells" + q + " (" + q + "rowid" + q + ");\n" +
|
|
"CREATE UNIQUE INDEX " + q + "featrowindex" + q + " ON " + q + "prc_cached2da_feat" + q + " (" + q + "rowid" + q + ");\n" +
|
|
"CREATE INDEX " + q + "clsfeatindex" + q + " ON " + q + "prc_cached2da_cls_feat" + q + " (" + q + "file" + q + ", " + q + "FeatIndex" + q + ");\n" +
|
|
"CREATE UNIQUE INDEX " + q + "appearrowindex" + q + " ON " + q + "prc_cached2da_appearance" + q + " (" + q + "rowid" + q + ");\n" +
|
|
"CREATE UNIQUE INDEX " + q + "portrrowindex" + q + " ON " + q + "prc_cached2da_portraits" + q + " (" + q + "rowid" + q + ");\n" +
|
|
"CREATE UNIQUE INDEX " + q + "soundsrowindex" + q + " ON " + q + "prc_cached2da_soundset" + q + " (" + q + "rowid" + q + ");\n" +
|
|
//"CREATE UNIQUE INDEX "+q+"datanameindex"+q+" ON "+q+"prc_data"+q+" ("+q+"name"+q+");\n" +
|
|
"CREATE UNIQUE INDEX " + q + "cachedindex" + q + " ON " + q + "prc_cached2da" + q + " (" + q + "file" + q + ", " + q + "columnid" + q + ", " + q + "rowid" + q + ");\n"
|
|
//"CREATE INDEX "+q+"ireqfileindex"+q+" ON "+q+"prc_cached2da_ireq"+q+" ("+q+"file"+q+");\n" +
|
|
//"CREATE UNIQUE INDEX "+q+"refrindex"+q+" ON "+q+"prc_cached2da_item_to_ireq"+q+" ("+q+"L_RESREF"+q+", "+q+"rowid"+q+");\n"
|
|
);
|
|
//complete the transaction
|
|
if (sqlite)
|
|
sql.append("COMMIT;\n");
|
|
|
|
sql.flush();
|
|
sql.close();
|
|
}
|
|
|
|
private static void readMe() {
|
|
System.out.println("Usage:\n" +
|
|
"\tjava 2datosql precacher2das\n" +
|
|
"\n" +
|
|
"This application is designed to take all the 2DA\n" +
|
|
"files in the directory and output a SQL\n" +
|
|
"file for them"
|
|
);
|
|
|
|
System.exit(0);
|
|
}
|
|
|
|
private static void addFileToSQL(File file) throws Exception {
|
|
String filename = file.getAbsolutePath();
|
|
Data_2da data = Data_2da.load2da(filename, true);
|
|
//remove path and extension from filename
|
|
filename = file.getName();
|
|
filename = filename.substring(0, filename.length() - 4);
|
|
//tell the user what were doing
|
|
if (verbose) System.out.print("Making SQL from " + filename + " ");
|
|
//specific files get their own tables
|
|
if (filename.matches("feat")
|
|
|| filename.matches("spells")
|
|
|| filename.matches("portraits")
|
|
|| filename.matches("soundset")
|
|
|| filename.matches("appearance")
|
|
|| filename.matches("portraits")
|
|
|| filename.matches("classes")
|
|
|| filename.matches("racialtypes"))
|
|
//|| filename.matches("item_to_ireq"))
|
|
{
|
|
|
|
//output the table creation
|
|
addSQLForSingleTable(data, filename);
|
|
}
|
|
//some groups get specific matches
|
|
else if (filename.matches("cls_feat_[^ ]*")) {
|
|
addSQLForGroupedTable(data, filename, "cls_feat");
|
|
}
|
|
/*
|
|
else if(filename.matches("ireq_[^ ]*")){
|
|
addSQLForGroupedTable(data, filename, "ireq");
|
|
}
|
|
*/
|
|
//everything else goes in the same table
|
|
else {
|
|
addSQLForGeneralTable(data, filename);
|
|
}
|
|
//tell user finished that table
|
|
if (verbose) System.out.println("- Done");
|
|
|
|
// Force garbage collection
|
|
System.gc();
|
|
}
|
|
|
|
/*
|
|
* Below are the three functions that produce SQL for adding
|
|
* to each of the 3 table types.
|
|
*/
|
|
|
|
|
|
private static void addSQLForSingleTable(Data_2da data, String filename) throws Exception {
|
|
|
|
StringBuilder entry;
|
|
entry = new StringBuilder("CREATE TABLE " + q + "prc_cached2da_" + filename + q + " (" + q + "rowid" + q + " integer");
|
|
String[] labels = data.getLabels();
|
|
for (int i = 0; i < labels.length; i++) {
|
|
entry.append(", " + q + labels[i] + q + " varchar(255) DEFAULT '_'");
|
|
}
|
|
entry.append(");");
|
|
|
|
sql.append(entry + "\n");
|
|
//put the data in
|
|
for (int row = 0; row < data.getEntryCount(); row++) {
|
|
entry = new StringBuilder("INSERT INTO " + q + "prc_cached2da_" + filename + q);
|
|
//entry +=" (rowid";
|
|
//for(int i = 0 ; i < labels.length ; i++){
|
|
// entry += ", "+labels[i];
|
|
//}
|
|
//entry += ")"
|
|
entry.append(" VALUES (" + row);
|
|
for (int column = 0; column < labels.length; column++) {
|
|
entry.append(", ");
|
|
|
|
String value = data.getEntry(labels[column], row);
|
|
|
|
if (value == "****")
|
|
value = "";
|
|
entry.append("'" + value + "'");
|
|
|
|
if (verbose) spinner.spin();
|
|
}
|
|
entry.append(");");
|
|
sql.append(entry + "\n");
|
|
}
|
|
}
|
|
|
|
private static void addSQLForGroupedTable(Data_2da data, String filename, String tablename) throws Exception {
|
|
String[] labels = data.getLabels();
|
|
StringBuilder entry;
|
|
for (int row = 0; row < data.getEntryCount(); row++) {
|
|
entry = new StringBuilder("INSERT INTO " + q + "prc_cached2da_" + tablename + q);
|
|
//entry +="(rowid";
|
|
//for(int i = 0 ; i < labels.length ; i++){
|
|
// entry += ", "+labels[i];
|
|
//}
|
|
//entry += ", file)";
|
|
entry.append(" VALUES (" + row);
|
|
entry.append(", '" + filename + "'");
|
|
for (int column = 0; column < labels.length; column++) {
|
|
entry.append(", ");
|
|
|
|
String value = data.getEntry(labels[column], row);
|
|
|
|
if (value == "****")
|
|
value = "";
|
|
entry.append("'" + value + "'");
|
|
|
|
if (verbose) spinner.spin();
|
|
}
|
|
entry.append(");");
|
|
sql.append(entry + "\n");
|
|
}
|
|
}
|
|
|
|
private static void addSQLForGeneralTable(Data_2da data, String filename) throws Exception {
|
|
String[] labels = data.getLabels();
|
|
StringBuilder entry;
|
|
for (int row = 0; row < data.getEntryCount(); row++) {
|
|
for (int column = 0; column < labels.length; column++) {
|
|
entry = new StringBuilder("INSERT INTO " + q + "prc_cached2da" + q + " VALUES ('" + filename + "', '" + labels[column] + "', " + row + ", ");
|
|
|
|
String value = data.getEntry(labels[column], row);
|
|
|
|
if (value == "****")
|
|
value = "";
|
|
entry.append("'" + value + "'");
|
|
entry.append(");");
|
|
sql.append(entry + "\n");
|
|
|
|
if (verbose) spinner.spin();
|
|
}
|
|
}
|
|
}
|
|
} |