50
* _0 q. E) K8 T% y: P# z51% a" @% _! B$ S$ o* d8 {+ f
52
+ m# L8 X# I0 c" N8 e1 T53
- ]2 ~+ [9 w* J* h54
, x% B9 g+ g( D7 V; I2 N- G, o" \" p55' d8 Z2 ~: q2 O7 b$ _% M
56/ d' ~9 y" o$ X. k# n( S" n
57
6 F4 ^% c0 g( o# r58$ T$ m+ a& }" s* e, r
59
, r* n/ ^' L/ x$ c& a60* w$ R [' \0 s3 d8 R
61
* W# M0 | w+ i" P. @7 L. z, Z62
" [% w5 { j( c0 M* A# ^63$ L. C# r) c8 P! @6 b# Y
64 i3 ~1 v* u: f! K0 ~+ }5 z( J
65
+ q; k0 j2 w. w2 V" w( ~( ~66
, d4 T9 u( ?( i0 [) ^+ {67
1 B. h4 O5 B( g68- c& i: l4 f' z: x5 y
69) b5 ^2 k# K1 O0 a% I* ?; h
70
) f/ L5 Z2 G( R9 n71
5 m, ~ F/ f) |. R# c, n72
! i' q3 M, n: l" z9 V' o% r# t73 R' `6 g8 S/ z H6 ~$ y% n; y
744 P6 V! q: {/ E2 R8 A9 J
75
5 J# ?% `) ^2 U* J4 ]+ e764 o- M7 S( L- w; S" |# p' J
772 x* d8 Q" k8 P
782 i; k% }% z9 E9 u0 P9 t6 V9 a
79$ E, |; o% z, Z3 R, z( f% @
80
0 M/ v$ E2 T( @( o7 n$ T2 s812 I; [& u) G" M. `- z) x
82
3 b7 S. l$ ~! y% r- R, B6 ?4 c% _; L835 L$ A! L: T; k( l* P2 z5 q
84/ `1 b, N' M1 R2 o/ E& {. N G( B; u
85
; {) R9 Z+ Y8 g86 h# O' H$ w9 E6 m. r; x2 `7 ]
87
+ N1 E$ `/ o1 O88
; e3 o7 W" q9 R2 m, [# y( D89
) } D% B) _; {/ @. R* p/ P3 V90. V1 O/ A, C- x8 j& Y
91
( j& d/ o* G. f92" J5 f# b, L8 E3 i' O
93/ {7 |# {# Y; J/ }8 k( h
941 M9 F* o e+ T# C2 A
95
( t1 Z: k. T# _96
4 ^1 O7 _3 X) K" p% {/ }% o978 ~& B& Q) r8 Z2 @- R
984 z: H+ F4 Y" i# Q
991 T& K6 B: T! i( s' m# A5 \
| function db_query($query) {
& f. H$ E0 n. {& i) v $args = func_get_args();$ w4 _; W# `+ s5 Q; \6 _
array_shift($args);! z$ {( N/ W# M
$query = db_prefix_tables($query);; f" k5 `+ Y8 Z
if (isset($args[0]) and is_array($args[0])) { // 'All arguments in one array' syntax
4 R6 X ]! j2 Y+ s# _* ]5 _ $args = $args[0];
" d) ~" }# v2 O; B) `) u9 y }
; r- p& T+ `2 s6 R- L _db_query_callback($args, TRUE);
7 B2 X. e% e# l+ ^ $query = preg_replace_callback(DB_QUERY_REGEXP, '_db_query_callback', $query);
& r0 D6 @$ ~" A' a4 H+ w. X! X
$ n4 v$ S/ P& x! p% m) Z# z /*# O/ }7 [( m4 _5 A Y
* Integrating multiple read/write databases
& [! ~1 b( r% R/ l */1 p/ A9 k0 F. U% N
if(!db_lock_master() && strpos(strtolower($query), "select") === 0 && strpos(strtolower($query), "last_insert_id") === FALSE){6 \. \, y3 P! H2 S
$commits = array('alter', 'insert', 'update', 'delete', 'flush', 'lock','create');4 z! I n9 n3 m3 \; i! M5 Q
$is_commit = false;1 m A: q# g) {+ v, c* N& ^
foreach($commits as $type) {
4 `9 t( r: w8 V( ^ H5 o if((strpos(strtolower($query), "$type "))){//[insert|update|create] xxxx, need a space, otherwise, some field which is like 'user_updated' will be filter as commits2 p" D% A: ]' h/ \; t
$is_commit = true;
5 F% x* S, Q5 n) E6 j9 G4 ` }
$ C# Q0 R& l8 C6 m( {, n4 Z" s }. G( `$ m% K8 D( T( n' o
5 L1 g, T$ B/ E0 s if($is_commit){4 X1 E# A4 |* `6 S8 q3 v7 F4 \
db_set_active('default');% Y' [' g5 H: t% P9 ]$ D
//drupal_set_message('default');
) M) u7 ~ |% b2 ~) ~0 M; V8 h4 S } else{
/ k3 J1 |, D9 i, V8 }2 l db_set_active('readonly');0 n, \: }# k. N/ t" `* \0 i
//drupal_set_message('readonly');
; `6 m, y; e4 T+ I* G2 s y: K- p8 m6 U }
. @4 v2 M% t2 T }% @/ `" y7 H3 y' g, J( T3 w* w
else {# u e2 [6 s: j$ W8 f
db_set_active('default');5 x3 }. H7 n. q
}
3 _/ i, c/ }- @& `* @1 j1 G /*& f! s, _5 d B# U, P2 r) R
* End read/write router
" d5 G e5 b/ C6 Y1 e */1 ]* X9 p0 X0 M6 a1 z2 e' r' ]
1 r9 P% a2 W' @1 q return _db_query($query);
& s: e. x6 }- s5 {1 A}
' ?5 J; k: K: C $ z9 ~: q% \8 B/ ~1 N
function db_lock_master($lock = null) {
) ~- k( B! G9 {# t: D3 M9 S; o static $lock_master = false;
7 R& y6 ]; b; ~3 S! G if (is_null($lock)) {4 K4 ~% f9 h9 F; u( B
return $lock_master;
* w# x3 y! M% v' A2 z6 W: c, k }1 w- O& h( J! T R
else {" B1 a3 J+ @: H9 Z- e( `( L9 A+ i
$lock_master = $lock;
" X+ K9 A7 K( t: U% u1 d h1 u return $lock_master;
. J* @ {2 f/ S' y( {" `' }& b, Z }
, q: h8 @; [: O: T& d; F' o# }6 e} |