Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
MaarchCourrier
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Redmine
Code
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Releases
Harbor Registry
Model registry
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Maarch
MaarchCourrier
Commits
a1341831
Commit
a1341831
authored
9 years ago
by
Florian Azizian
Browse files
Options
Downloads
Patches
Plain Diff
FEAT #2482 new method PDOselect
parent
f2533805
No related branches found
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
core/trunk/core/class/class_db_pdo.php
+44
-0
44 additions, 0 deletions
core/trunk/core/class/class_db_pdo.php
core/trunk/core/class/class_request.php
+143
-0
143 additions, 0 deletions
core/trunk/core/class/class_request.php
with
187 additions
and
0 deletions
core/trunk/core/class/class_db_pdo.php
+
44
−
0
View file @
a1341831
...
@@ -226,5 +226,49 @@ class Database
...
@@ -226,5 +226,49 @@ class Database
return
$this
->
stmt
;
return
$this
->
stmt
;
}
}
public
function
limit_select
(
$start
,
$count
,
$select_expr
,
$table_refs
,
$where_def
=
'1=1'
,
$other_clauses
=
''
,
$select_opts
=
''
)
{
// LIMIT
if
(
$count
||
$start
)
{
switch
(
$_SESSION
[
'config'
][
'databasetype'
])
{
case
'MYSQL'
:
$limit_clause
=
'LIMIT '
.
$start
.
','
.
$count
;
break
;
case
'POSTGRESQL'
:
$limit_clause
=
'OFFSET '
.
$start
.
' LIMIT '
.
$count
;
break
;
case
'SQLSERVER'
:
$select_opts
.
=
' TOP '
.
$count
;
break
;
case
'ORACLE'
:
if
(
$where_def
)
$where_def
.
=
' AND '
;
$where_def
.
=
' ROWNUM <= '
.
$count
;
break
;
default
:
break
;
}
}
if
(
empty
(
$where_def
))
$where_def
=
'1=1'
;
// CONSTRUCT QUERY
$query
=
'SELECT'
.
' '
.
$select_opts
.
' '
.
$select_expr
.
' FROM '
.
$table_refs
.
' WHERE '
.
$where_def
.
' '
.
$other_clauses
.
' '
.
$limit_clause
;
return
$query
;
}
}
}
This diff is collapsed.
Click to expand it.
core/trunk/core/class/class_request.php
+
143
−
0
View file @
a1341831
...
@@ -179,6 +179,149 @@ class request extends dbquery
...
@@ -179,6 +179,149 @@ class request extends dbquery
return
$result
;
return
$result
;
}
}
/**
* Constructs the select query and returns the results in an array
*
* @param $select array Query fields
* @param $where string Where clause of the query
* @param $parameters array An indexed or associative array of parameters
* @param $other string Query complement (order by, ...)
* @param $database_type string Type of the database
* @param $limit string Maximum numbers of results (500 by default)
* @param $left_join boolean Is the request is a left join ? (false by default)
* @param $first_join_table string Name of the first join table (empty by default)
* @param $second_join_table string Name of the second join table (empty by default)
* @param $join_key string Key of the join (empty by default)
* @param $add_security string Add the user security where clause or not (true by default)
* @param $distinct_argument Add the distinct parameters in the sql query (false by default)
* @return array Results of the built query
*/
public
function
PDOselect
(
$select
,
$where
,
$parameters
=
null
,
$other
,
$database_type
,
$limit
=
"default"
,
$left_join
=
false
,
$first_join_table
=
""
,
$second_join_table
=
""
,
$join_key
=
""
,
$add_security
=
true
,
$catch_error
=
false
,
$distinct_argument
=
false
)
{
$db
=
new
Database
();
if
(
$limit
==
0
||
$limit
==
"default"
)
{
$limit
=
$_SESSION
[
'config'
][
'databasesearchlimit'
];
}
//Extracts data in the first argument : $select.
$tab_field
=
array
();
$table
=
''
;
$table_string
=
''
;
$field_string
=
''
;
foreach
(
array_keys
(
$select
)
as
$value
)
{
$table
=
$value
;
$table_string
.
=
$table
.
","
;
foreach
(
$select
[
$value
]
as
$subvalue
)
{
$field
=
$subvalue
;
$field_string
.
=
$table
.
"."
.
$field
.
","
;
}
//Query fields and table names have been wrote in 2 strings
}
//Strings need to be cleaned
$table_string
=
substr
(
$table_string
,
0
,
-
1
);
$field_string
=
substr
(
$field_string
,
0
,
-
1
);
//Extracts data from the second argument : the where clause
if
(
trim
(
$where
)
<>
""
)
{
$where_string
=
$where
;
//$where_string = " where ".$where;
}
else
{
$where_string
=
""
;
}
$join
=
''
;
if
(
$left_join
)
{
//Reste table string
$table_string
=
""
;
//Add more table in join syntax
foreach
(
array_keys
(
$select
)
as
$value
)
{
if
(
$value
<>
$first_join_table
&&
$value
<>
$second_join_table
)
{
$table_string
=
$value
.
","
;
}
}
$join
=
" left join "
;
$table_string
.
=
$first_join_table
;
$join
.
=
$second_join_table
.
" on "
.
$second_join_table
.
"."
.
$join_key
.
" = "
.
$first_join_table
.
"."
.
$join_key
;
}
if
(
$add_security
)
{
foreach
(
array_keys
(
$_SESSION
[
'user'
][
'security'
])
as
$coll
)
{
if
(
isset
(
$_SESSION
[
'user'
][
'security'
][
$coll
][
'DOC'
][
'table'
]))
{
if
(
preg_match
(
'/'
.
$_SESSION
[
'user'
][
'security'
][
$coll
][
'DOC'
][
'table'
]
.
'/'
,
$table_string
)
||
preg_match
(
'/'
.
$_SESSION
[
'user'
][
'security'
][
$coll
][
'DOC'
][
'view'
]
.
'/'
,
$table_string
)
)
{
if
(
empty
(
$where_string
))
{
$where_string
=
"( "
.
$_SESSION
[
'user'
][
'security'
][
$coll
][
'DOC'
][
'where'
]
.
" ) "
;
//$where_string = " where ( ".$_SESSION['user']['security'][$coll]['DOC']['where']." ) ";
}
else
{
$where_string
=
''
.
$where_string
.
" and ( "
.
$_SESSION
[
'user'
][
'security'
][
$coll
][
'DOC'
][
'where'
]
.
" ) "
;
}
break
;
}
}
}
}
//Time to create the SQL Query
$query
=
""
;
$dist
=
''
;
if
(
$distinct_argument
==
true
)
{
$dist
=
" distinct "
;
}
$query
=
$db
->
limit_select
(
0
,
$limit
,
$field_string
,
$table_string
.
" "
.
$join
,
$where_string
,
$other
,
$dist
);
if
(
preg_match
(
'/_view/i'
,
$query
))
{
$_SESSION
[
'last_select_query'
]
=
$query
;
}
$res_query
=
$db
->
query
(
$query
,
$parameters
,
$catch_error
);
if
(
$catch_error
&&
!
$res_query
)
{
return
false
;
}
$result
=
array
();
while
(
$line
=
$res_query
->
fetch
(
PDO
::
FETCH_ASSOC
))
{
$temp
=
array
();
foreach
(
array_keys
(
$line
)
as
$resval
)
{
if
(
!
is_int
(
$resval
))
{
array_push
(
$temp
,
array
(
'column'
=>
$resval
,
'value'
=>
functions
::
xssafe
(
$line
[
$resval
]),
)
);
}
}
array_push
(
$result
,
$temp
);
}
if
(
count
(
$result
)
==
0
&&
$catch_error
)
{
return
true
;
}
return
$result
;
}
/**
/**
* Builds the insert query and sends it to the database
* Builds the insert query and sends it to the database
*
*
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment