50
0 X( l3 B* q6 l, C' ?# u# o1 N51
& _! G1 [+ Z2 ]6 {52
: R% Y4 l% G1 J+ X# r" F2 ?3 W53* G' O$ |+ k7 a) D
54
" `5 a6 l2 T: q; E9 V0 R55
0 v; {/ @/ W) H& F" u, Y56
* d# u7 q3 u* u5 y% d0 D57
* \0 y2 V1 e6 P58
9 b4 P {( j& y$ ?8 e \; ]: M0 R59' w. m3 E# S- Q3 L
60# g5 J3 F4 C! B! p0 Q
61
0 N2 f9 B6 K( p6 B6 G2 b5 X# p629 |% G" Z4 }; s% m5 B
63
" k! Z+ \1 e3 [& l64$ p# ^2 y" u' S: L
65
( x" C# j6 t8 x9 v" U660 T* L8 `" k3 `2 X& \
671 I% F; N- {6 X" f4 c
68
& L M% o# f# V& c# h e. j690 h+ Z7 S, o4 [+ l7 u6 {
702 S5 P d7 S8 f6 n" @
71- u; j7 f q/ ~6 o# ^& d1 \2 p
72' d7 V2 h K X% M
73
5 E6 Y* `0 l* D8 | U3 M7 Q/ Q$ b74
" a! E T" I# |! C2 W75
1 m) j2 U( U8 G3 b3 J76
4 P f) Z L, Z! S, p77
+ B1 S! Z3 \5 d, J% H- K6 g78. Y$ S* Z3 L7 L) E' [: _
79: A: ]! J( e0 y( r
80
7 Z4 [$ o4 A; e# `" C4 n! O. E81
; P& Y W6 f8 \5 g* }% r82
+ n D4 R' m, z6 F% t! s* {83
8 a0 e5 K7 t: f$ w, w* s, y0 [844 F" H5 c. `+ l, ?; m1 n" W# n2 D
85
" m0 O; e" Z, d' T, C# e7 I2 i86: q# {$ U! E W2 E& K `) Y
87- \) h! o* f9 D) d7 |3 r
88* n; b3 A! D2 {, E+ D: S% n8 m) ?
89
: u; k" s* u2 E90
. M" P* a( U. ]0 q- _91
. v' L- a7 ~1 I# Y$ `6 N92
$ _. H0 }" d; U4 ?& u: O2 s93
7 y" }% R/ u6 M/ i3 [3 w94
% j! C5 F1 B% `2 Q4 C3 H3 T95! |: ?$ D$ m0 Y6 v
96- }7 R; {8 N2 y$ y4 X3 K
97
5 g9 O2 o! J) Z J0 k U& k* n98% V/ `8 j, |" @) P
99
: `1 h" n4 w( o; M, R- l( u4 V" o | function db_query($query) {
) S1 | `5 ?% N $args = func_get_args();: A% `1 `) X- E, P, m* F6 b
array_shift($args);$ S% ]; e/ C+ C7 I* r
$query = db_prefix_tables($query);' t+ i$ [* ~% J9 O# |
if (isset($args[0]) and is_array($args[0])) { // 'All arguments in one array' syntax1 o4 X, Z# ~3 D; J$ M2 C
$args = $args[0];+ s* f5 c; t' X, {
}
! Y2 D/ X# q$ k- V! J3 { _db_query_callback($args, TRUE);
y2 `! X) m' a0 v* Q3 n8 b $query = preg_replace_callback(DB_QUERY_REGEXP, '_db_query_callback', $query);1 r' c( w, [) i) I
6 L' R4 a N& W" S( s9 q
/*" q3 }! U8 X& x7 T/ w& c
* Integrating multiple read/write databases
% F/ u* o* |8 |! H" {! m/ b */
/ J# v6 q6 p" k# W$ ?% P) ]. L7 x if(!db_lock_master() && strpos(strtolower($query), "select") === 0 && strpos(strtolower($query), "last_insert_id") === FALSE){
: T7 _$ c, @( _: \0 y% A $commits = array('alter', 'insert', 'update', 'delete', 'flush', 'lock','create');
( z$ N: r# e9 V2 r/ @ $is_commit = false;
K2 j7 ]+ D) r& i* R# |) U& A foreach($commits as $type) {
' E4 c F! c# t if((strpos(strtolower($query), "$type "))){//[insert|update|create] xxxx, need a space, otherwise, some field which is like 'user_updated' will be filter as commits- k: z2 \. r2 [! k6 u# b# k% h
$is_commit = true;
* T/ \) H' E& G' q5 o) {% J }
% Q% F; {# g% i! J }
1 L- o6 v' M( k4 B& h- B % J4 X. R: A: N2 L3 c
if($is_commit){) v4 f! Z: [; J$ q) {" e0 N
db_set_active('default');
" j& N0 }/ d; l( [, {' ]( c+ R //drupal_set_message('default');
, T2 I$ C2 w% F* K( a3 M$ n } else{1 ]6 {1 `7 Q8 Z. z9 ]; v! L
db_set_active('readonly');: I3 n: ]# u1 }5 X+ O+ i
//drupal_set_message('readonly');
- Z+ P ?4 E& u } [# f' G6 }- G: j
}/ d& ^* f u6 K; H5 D& Q
else {
/ c6 v, d- t$ q) e) X2 ^ db_set_active('default');
) y3 W( |4 X; D1 [$ h7 h6 U! Q- i9 @ }+ n; T) ]/ q+ p
/*& t' c! X& q) R" v( _; a/ n
* End read/write router
5 B; f( ? W' A! Y) S* B# Z */$ _1 w+ \. W3 @4 ]" M" ?; t5 g% i! }" J
) Y" e3 m- C# n; O6 \1 V
return _db_query($query);! R, B2 b/ n. Z3 w% t6 O
}, o5 n; ~ p! \# C' B* E9 F
& B9 n/ S: U* v |& X; cfunction db_lock_master($lock = null) {
" n" b- p$ k0 v+ Y: O static $lock_master = false;
; c- P& T" Y0 p1 S if (is_null($lock)) {% b& S4 v# G; k! s
return $lock_master;8 Q4 o, l- x+ V3 Y q
}
+ z& l# f6 K2 s* @ X% g else {
% u4 P& w: g. m1 x $lock_master = $lock;
. r, N* w* t4 B# r& U5 ` return $lock_master;
% Y( v4 ^; P" V1 e }
; x2 _& \" _7 _& M. D/ p9 q y} |