Skip to content

Commit 9ea18e5

Browse files
committed
Adding possiblity to directly create a request from the UI
1 parent 5247ca0 commit 9ea18e5

File tree

4 files changed

+79
-11
lines changed

4 files changed

+79
-11
lines changed

src/Mouf/Database/QueryWriter/Controllers/SelectController.php

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -50,21 +50,15 @@ public function defaultAction($name, $selfedit="false") {
5050
}
5151

5252
/**
53-
* This action generates the DAOs and Beans for the TDBM service passed in parameter.
53+
* This action generates the objects from the SQL query and applies it to the existing SELECT object.
5454
*
5555
* @Action
56+
* @param string $name
5657
* @param string $sql
5758
* @param string $selfedit
5859
*/
5960
public function parse($name, $sql,$selfedit="false") {
6061
$this->initController($name, $selfedit);
61-
62-
//require_once __DIR__.'/../../../../php-sql-parser/php-sql-parser.php';
63-
64-
/*$parser = new \PHPSQLParser();
65-
$parsed = $parser->parse($sql);
66-
print_r($parsed);
67-
exit;*/
6862

6963
$parser = new SQLParser();
7064
$parsed = $parser->parse($sql);
@@ -79,8 +73,37 @@ public function parse($name, $sql,$selfedit="false") {
7973
$select->overwriteInstanceDescriptor($name, $moufManager);
8074
$moufManager->rewriteMouf();
8175

82-
// TODO: better: we should redirect to a screen that list the number of DAOs generated, etc...
8376
header("Location: ".ROOT_URL."ajaxinstance/?name=".urlencode($name)."&selfedit=".$selfedit);
8477
}
8578

79+
/**
80+
* Admin page used to create a new SQL query.
81+
*
82+
* @Action
83+
*/
84+
public function createQuery($selfedit="false") {
85+
$this->content->addFile(dirname(__FILE__)."/../../../../views/createQuery.php", $this);
86+
$this->template->toHtml();
87+
}
88+
89+
/**
90+
* This action generates the objects from the SQL query and creates a new SELECT instance.
91+
*
92+
* @Action
93+
* @param string $name
94+
* @param string $sql
95+
* @param string $selfedit
96+
*/
97+
public function doCreateQuery($name, $sql,$selfedit="false") {
98+
$parser = new SQLParser();
99+
$parsed = $parser->parse($sql);
100+
$select = StatementFactory::toObject($parsed);
101+
102+
$moufManager = MoufManager::getMoufManagerHiddenInstance();
103+
$instanceDescriptor = $select->toInstanceDescriptor($moufManager);
104+
$instanceDescriptor->setName($name);
105+
$moufManager->rewriteMouf();
106+
107+
header("Location: ".ROOT_URL."ajaxinstance/?name=".urlencode($name)."&selfedit=".$selfedit);
108+
}
86109
}

src/Mouf/Database/QueryWriter/QueryResult.php

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
<?php
22
namespace Mouf\Database\QueryWriter;
33

4+
use Mouf\Utils\Value\ValueUtils;
5+
46
use SQLParser\Query\Select;
57

68
use Mouf\Utils\Common\PaginableInterface;
@@ -30,6 +32,13 @@ class QueryResult implements ArrayValueInterface, PaginableInterface {
3032
*/
3133
private $connection;
3234

35+
/**
36+
* The list of parameters to apply to the SQL request.
37+
*
38+
* @var array<string, string>|ArrayValueInterface
39+
*/
40+
private $parameters = array();
41+
3342
private $limit;
3443
private $offset;
3544

@@ -43,13 +52,22 @@ public function __construct(Select $select, ConnectionInterface $connection) {
4352
$this->connection = $connection;
4453
}
4554

55+
/**
56+
* The list of parameters to apply to the SQL request.
57+
*
58+
* @param array<string, string>|ArrayValueInterface $parameters
59+
*/
60+
public function setParameters($parameters) {
61+
$this->parameters = $parameters;
62+
}
63+
4664
/**
4765
* (non-PHPdoc)
4866
* @see \Mouf\Utils\Value\ArrayValueInterface::val()
4967
*/
5068
public function val() {
51-
// FIXME: add support for params!
52-
$pdoStatement = $this->connection->query($this->select->toSql($this->connection), $this->offset, $this->limit);
69+
$parameters = ValueUtils::val($this->parameters);
70+
$pdoStatement = $this->connection->query($this->select->toSql($this->connection, $parameters), $this->offset, $this->limit);
5371
return new ResultSet($pdoStatement);
5472
}
5573

src/QueryWriterAdmin.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22
use Mouf\MoufManager;
33
use Mouf\MoufUtils;
44

5+
MoufUtils::registerMainMenu('dbMainMenu', 'DB', null, 'mainMenu', 70);
6+
MoufUtils::registerMenuItem('dbQueryWriterAdminSubMenu', 'SQL queries', null, 'dbMainMenu', 80);
7+
MoufUtils::registerMenuItem('dbQueryWriterCreateQueryAdminSubMenu', 'Create SQL query', 'parseselect/createQuery', 'dbQueryWriterAdminSubMenu', 0);
8+
59

610
// Controller declaration
711
$moufManager = MoufManager::getMoufManager();

src/views/createQuery.php

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php
2+
/* @var $this Mouf\Database\QueryWriter\Controllers\SelectController */
3+
?>
4+
<h1>Create a new SQL query</h1>
5+
6+
<form action="doCreateQuery" method="post">
7+
<div class="control-group">
8+
<label class="control-label">Instance name:</label>
9+
<div class="controls">
10+
<input type="text" name="name" value="<?php echo plainstring_to_htmlprotected($this->instanceName) ?>" />
11+
</div>
12+
</div>
13+
14+
15+
<label class="control-label">SQL query:</label>
16+
<textarea rows=10 name="sql" class="span10"><?php echo plainstring_to_htmlprotected($this->sql) ?></textarea>
17+
<div class="control-group">
18+
<div class="controls">
19+
<button name="action" value="parse" type="submit" class="btn btn-danger">Create SQL query object</button>
20+
</div>
21+
</div>
22+
23+
</form>

0 commit comments

Comments
 (0)