int main(int argc, char* argv[]) { if(argc<3) { std::cout << "Usage: SQLGen [SQLite database filename] [cpp-file] ([Attached db name] [Attached db filename] ...)" << std::endl; return 1; } Server=new CServer; reinterpret_cast<CServer*>(Server)->setup(); std::string sqlite_db_str=argv[1]; std::string cppfile=argv[2]; std::string headerfile=getuntil(".cpp", cppfile)+".h"; if(!Server->openDatabase(sqlite_db_str, maindb)) { std::cout << "Could not open sqlite db \"" << sqlite_db_str << "\"" << std::endl; } for(int i=3;i+1<argc;i+=2) { if(!Server->attachToDatabase(argv[i+1], argv[i], maindb)) { std::cout << "Could not attach database \"" << argv[i+1] << "\"" << std::endl; } } std::string cppfile_data=getFile(cppfile); std::string headerfile_data=getFile(headerfile); writestring(cppfile_data, cppfile+".sqlgenbackup"); writestring(headerfile_data, headerfile+".sqlgenbackup"); try { sqlgen(Server->getDatabase(Server->getThreadID(), maindb), cppfile_data, headerfile_data); } catch (std::exception& e) { std::cout << "Error: " << e.what() << std::endl; return 1; } writestring(cppfile_data, cppfile); writestring(headerfile_data, headerfile); std::cout << "SQLGen: Ok." << std::endl; return 0; }
int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); qsrand(time(NULL)); QStringList args = QCoreApplication::arguments(); int subcmd = subCommands()->value(args.value(1), Invalid); switch (subcmd) { case Invalid: qCritical("invalid argument"); return 1; break; case Help: usage(); break; case New: // Creates new project if (!createNewApplication(args.value(2))) { return 1; } break; case ShowDrivers: printf("Available database drivers for Qt:\n"); for (QStringListIterator i(TableSchema::databaseDrivers()); i.hasNext(); ) { printf(" %s\n", qPrintable(i.next())); } break; case ShowDriverPath: { QString path = QLibraryInfo::location(QLibraryInfo::PluginsPath) + QDir::separator() + "sqldrivers"; QFileInfo fi(path); if (!fi.exists() || !fi.isDir()) { qCritical("Error: database driver's directory not found"); return 1; } printf("%s\n", qPrintable(fi.canonicalFilePath())); break; } case ShowTables: if (checkIniFile()) { QStringList tables = TableSchema::tables(); if (!tables.isEmpty()) { printf("-----------------\nAvailable tables:\n"); for (QStringListIterator i(tables); i.hasNext(); ) { printf(" %s\n", qPrintable(i.next())); } putchar('\n'); } } else { return 2; } break; case ShowCollections: if (checkIniFile()) { // MongoDB settings QString mongoini = appSettings.value("MongoDbSettingsFile").toString().trimmed(); QString mnginipath = QLatin1String("config") + QDir::separator() + mongoini; if (mongoini.isEmpty() || !QFile(mnginipath).exists()) { qCritical("MongoDB settings file not found"); return 2; } MongoCommand mongo(mnginipath); if (!mongo.open("dev")) { return 2; } QStringList colls = mongo.getCollectionNames(); printf("-----------------\nExisting collections:\n"); for (auto &col : colls) { printf(" %s\n", qPrintable(col)); } putchar('\n'); } break; default: { if (argc < 3) { qCritical("invalid argument"); return 1; } if (!checkIniFile()) { return 2; } // Sets codec QTextCodec *codec = QTextCodec::codecForName(appSettings.value("InternalEncoding").toByteArray().trimmed()); codec = (codec) ? codec : QTextCodec::codecForLocale(); QTextCodec::setCodecForLocale(codec); #if QT_VERSION < 0x050000 QTextCodec::setCodecForTr(codec); QTextCodec::setCodecForCStrings(codec); #endif // ERB or Otama templateSystem = devSettings.value("TemplateSystem").toString().toLower(); if (templateSystem.isEmpty()) { templateSystem = appSettings.value("TemplateSystem", "Erb").toString().toLower(); } switch (subcmd) { case Controller: { QString ctrl = args.value(2); ControllerGenerator crtlgen(ctrl, args.mid(3)); crtlgen.generate(D_CTRLS); // Create view directory QDir dir(D_VIEWS + ((ctrl.contains('_')) ? ctrl.toLower() : fieldNameToVariableName(ctrl).toLower())); mkpath(dir, "."); copy(dataDirPath + ".trim_mode", dir); break; } case Model: { ModelGenerator modelgen(ModelGenerator::Sql, args.value(3), args.value(2)); modelgen.generate(D_MODELS); break; } case Helper: { HelperGenerator helpergen(args.value(2)); helpergen.generate(D_HELPERS); break; } case UserModel: { ModelGenerator modelgen(ModelGenerator::Sql, args.value(5), args.value(2), args.mid(3, 2)); modelgen.generate(D_MODELS, true); break; } case SqlObject: { SqlObjGenerator sqlgen(args.value(3), args.value(2)); QString path = sqlgen.generate(D_MODELS); // Generates a project file ProjectFileGenerator progen(D_MODELS + "models.pro"); progen.add(QStringList(path)); break; } case MongoScaffold: { ModelGenerator modelgen(ModelGenerator::Mongo, args.value(2)); bool success = modelgen.generate(D_MODELS); ControllerGenerator crtlgen(modelgen.model(), modelgen.fieldList(), modelgen.primaryKeyIndex(), modelgen.lockRevisionIndex()); success &= crtlgen.generate(D_CTRLS); // Generates view files of the specified template system if (templateSystem == "otama") { OtamaGenerator viewgen(modelgen.model(), modelgen.fieldList(), modelgen.primaryKeyIndex(), modelgen.autoValueIndex()); viewgen.generate(D_VIEWS); } else if (templateSystem == "erb") { ErbGenerator viewgen(modelgen.model(), modelgen.fieldList(), modelgen.primaryKeyIndex(), modelgen.autoValueIndex()); viewgen.generate(D_VIEWS); } else { qCritical("Invalid template system specified: %s", qPrintable(templateSystem)); return 2; } if (success) { printSuccessMessage(modelgen.model()); } break; } case MongoModel: { ModelGenerator modelgen(ModelGenerator::Mongo, args.value(2)); modelgen.generate(D_MODELS); break; } case WebSocketEndpoint: { const QString appendpointfiles[] = { L("controllers") + SEP + "applicationendpoint.h", L("controllers") + SEP + "applicationendpoint.cpp" }; ProjectFileGenerator progen(D_CTRLS + "controllers.pro"); for (auto &dst : appendpointfiles) { if (!QFile::exists(dst)) { QString filename = QFileInfo(dst).fileName(); copy(dataDirPath + filename, dst); progen.add(QStringList(filename)); } } WebSocketGenerator wsgen(args.value(2)); wsgen.generate(D_CTRLS); break; } case Validator: { ValidatorGenerator validgen(args.value(2)); validgen.generate(D_HELPERS); break; } case Mailer: { MailerGenerator mailgen(args.value(2), args.mid(3)); mailgen.generate(D_CTRLS); copy(dataDirPath + "mail.erb", D_VIEWS + "mailer" + SEP +"mail.erb"); break; } case Scaffold: { ModelGenerator modelgen(ModelGenerator::Sql, args.value(3), args.value(2)); bool success = modelgen.generate(D_MODELS); if (!success) return 2; int pkidx = modelgen.primaryKeyIndex(); if (pkidx < 0) { qWarning("Primary key not found. [table name: %s]", qPrintable(args.value(2))); return 2; } ControllerGenerator crtlgen(modelgen.model(), modelgen.fieldList(), pkidx, modelgen.lockRevisionIndex()); success &= crtlgen.generate(D_CTRLS); // Generates view files of the specified template system if (templateSystem == "otama") { OtamaGenerator viewgen(modelgen.model(), modelgen.fieldList(), pkidx, modelgen.autoValueIndex()); viewgen.generate(D_VIEWS); } else if (templateSystem == "erb") { ErbGenerator viewgen(modelgen.model(), modelgen.fieldList(), pkidx, modelgen.autoValueIndex()); viewgen.generate(D_VIEWS); } else { qCritical("Invalid template system specified: %s", qPrintable(templateSystem)); return 2; } if (success) { printSuccessMessage(modelgen.model()); } break; } case Delete: { // Removes files int ret = deleteScaffold(args.value(2)); if (ret) { return ret; } break; } default: qCritical("internal error"); return 1; } break; } } return 0; }