diff --git a/README.md b/README.md
index c25239b0d..0e585742d 100644
--- a/README.md
+++ b/README.md
@@ -49,6 +49,7 @@ contributors agree that all code is released under this license.
In addition to the many folks who submit bug reports, a big thanks to the following for their help extending the script:
+- [Daragh Courtney](https://github.com/daraghc) - [Data Generator Vagrant repo](https://github.com/benkeen/generatedata-vagrant)
- [Zhao Yang](https://github.com/jptiancai) - Chinese language file (3.1.4)
- [Anton Nizhegorodov](https://github.com/an1zhegorodov) - Batch size SQL export option (3.1.3)
- Zeeshan Shaikh - PAN, PIN, CVV, Track 1 and 2 Data Types (3.1.1)
diff --git a/plugins/exportTypes/SQL/README.md b/plugins/exportTypes/SQL/README.md
index cccb6f728..cd46f2468 100644
--- a/plugins/exportTypes/SQL/README.md
+++ b/plugins/exportTypes/SQL/README.md
@@ -9,17 +9,26 @@ Using the Data Generator interface you can just select whatever options you want
but if you're using the API, these are the settings you'll be interested in.
- `tableName`: the string name of the database table to insert/update the data. *required*
-- `databaseType`: a string. One of: `MySQL`, `Postgres`, `SQLite`, `Oracle`, `MSSQL`
-- `createTable`: a boolean. If this is set to true, the generated output will contain a `CREATE TABLE` query at the start.
-- `dropTable`: a boolean. If this is set to true, the first generated query will be a safe DROP TABLE to ensure the
-table doesn't already exist prior to the INSERT queries.
-- `encloseWithBackquotes`: a boolean. Whether column and table names will be enclosed in backquotes.
+- `databaseType`: a string. One of: `MySQL`, `Postgres`, `SQLite`, `Oracle`, `MSSQL`. *required*
+- `createTable`: a boolean, defaults to `true`. If this is set to true, the generated output will contain a
+`CREATE TABLE` query at the start.
+- `dropTable`: a boolean, defaults to `false`. If this is set to true, the first generated query will be a safe
+DROP TABLE to ensure the table doesn't already exist prior to the INSERT queries.
+- `encloseWithBackquotes`: a boolean, defaults to `false`. Whether column and table names will be enclosed in backquotes.
- `statementType`: a string, one of: `insert`, `insertignore`, `update`. This governs the type of query that'll be
-generated. By and large you'll want this to be set to `insert`.
+generated. By and large you'll want this to be set to `insert`, the default value.
- `insertBatchSize`: an integer. This allows you to reduce the number of queries by grouping them, e.g. a single
-INSERT statement to insert 10 rows at once.
-- `addPrimaryKey`: a boolean. This lets you choose to add a Primary Key field to your SQL statements.
+INSERT statement to insert 10 rows at once. Defaults to 1.
+- `addPrimaryKey`: a boolean, defaults to `false`. This lets you choose to add a Primary Key field to your SQL
+statements.
+#### Conditional settings
+
+Some settings are database specific.
+
+- Postgres will ignore the `encloseWithBackquotes` setting.
+- Postgres, SQLite, Oracle and MSSQL won't accept the `insertignore` as a value for the `statementType` setting. That
+only works with MySQL.
### Example API Usage
@@ -48,9 +57,11 @@ Post the following JSON content to the following API path:
],
"export": {
"type": "SQL",
- "settings" {
+ "settings": {
"tableName": "myTable",
- "databaseType": "MySQL"
+ "databaseType": "MySQL",
+ "encloseWithBackquotes": true,
+ "createTable": true
}
}
}
diff --git a/plugins/exportTypes/SQL/SQL.class.php b/plugins/exportTypes/SQL/SQL.class.php
index b2a8aac1e..f4c3c7250 100644
--- a/plugins/exportTypes/SQL/SQL.class.php
+++ b/plugins/exportTypes/SQL/SQL.class.php
@@ -19,12 +19,15 @@ class SQL extends ExportTypePlugin {
protected $exportTypeName = "SQL";
protected $jsModules = array("SQL.js");
protected $codeMirrorModes = array("sql");
+ protected $contentTypeHeader = "application/octet-stream";
+
public $L = array();
// stores various info about the current generation set
+ private $genEnvironment; // "API" or "POST"
private $template;
private $numericFields;
- private $postData;
+ private $userSettings;
private $exportTarget;
private $isFirstBatch;
private $isLastBatch;
@@ -39,23 +42,22 @@ class SQL extends ExportTypePlugin {
function generate($generator) {
+ $this->genEnvironment = $generator->genEnvironment;
$this->template = $generator->getTemplateByDisplayOrder();
- $this->postData = $generator->getUserSettings();
+ $this->userSettings = $generator->getUserSettings();
$this->exportTarget = $generator->getExportTarget();
+
+ if ($this->genEnvironment == GEN_ENVIRONMENT_API) {
+ $this->exportTarget = "promptDownload";
+ }
+
$this->isFirstBatch = $generator->isFirstBatch();
$this->isLastBatch = $generator->isLastBatch();
$this->data = $generator->generateExportData();
$this->currentBatchFirstRow = $generator->getCurrentBatchFirstRow();
// grab whatever settings where chosen by the user
- $this->includeDropTable = isset($this->postData["etSQL_dropTable"]);
- $this->createTable = isset($this->postData["etSQL_createTable"]);
- $this->databaseType = $this->postData["etSQL_databaseType"];
- $this->tableName = $this->postData["etSQL_tableName"];
- $this->backquote = isset($this->postData["etSQL_encloseWithBackquotes"]) ? "`" : "";
- $this->sqlStatementType = isset($this->postData["etSQL_statementType"]) ? $this->postData["etSQL_statementType"] : "insert";
- $this->primaryKey = (isset($this->postData["etSQL_primaryKey"])) ? $this->postData["etSQL_primaryKey"] : "default";
- $this->insertBatchSize = ($this->isBatchSizeValid($this->postData["etSQL_insertBatchSize"])) ? $this->postData["etSQL_insertBatchSize"] : 1;
+ $this->extractSettings();
foreach ($this->template as $item) {
$this->numericFields[] = isset($item["columnMetadata"]["type"]) && $item["columnMetadata"]["type"] == "numeric";
@@ -212,7 +214,6 @@ private function generateCreateTableSQL_MySQL() {
$endLineChar = ($this->exportTarget == "newTab") ? "
\n" : "\n";
$prefix = ($this->exportTarget == "newTab") ? " " : " ";
-
if ($this->isFirstBatch) {
if ($this->includeDropTable) {
$dropTableEndLine = ($this->exportTarget == "newTab") ? "