50# q8 h) x& Y7 o! s* K6 c
51
+ l% r% u d8 ? p% x; z52/ d: m3 u& p5 V7 h6 y) G
53
% i/ d9 f! V* t0 ]; ?- z6 q54
# h$ x5 L# e2 m0 |4 [8 R1 [" L3 {559 ?1 C3 Z* n7 M
56
+ K0 B, k# i: q. m+ K57
, G8 c2 X8 \% p58
$ v& n9 [& T5 _( Q( V, s3 m, s9 N8 {59
8 V4 H3 j7 ?+ {1 F- h7 }- }7 ^606 m6 y% d; K& r
61! z# r8 \; D: y4 B1 G0 M+ l
626 `( O' f" s# S' W$ ]
63
% G8 r3 R- H1 F8 L$ M+ }! {( |64
/ S: K3 a* ~6 p( ^, e4 w65- E0 l# d, y. D6 g v% S: O6 H' g
66# r" `2 c$ x0 |+ \! Z
67
: S3 Y8 U& c' i68
8 C2 \; y: M5 j. G9 h- w69
& x+ i! K K) R( M$ |. h70
* D6 T( l$ {/ c$ A" K' M71+ H: @) O' _+ `3 \( k
72
: u0 K1 Z) y) r, ~9 {73
. t2 T0 ]8 b# B: J2 K74+ h3 C3 I% U6 V1 m
75
3 `9 h3 b2 K1 y76
; h% Z1 L( o ]& j: R779 `. [' z" o( L0 b' @0 @* p. ]5 \
78% h! ^0 E* m% j8 n# m' e, B
79
9 q9 _) F7 p2 y! ^: A5 r80& P+ Y- f3 l L, ~
81
q* t2 [4 r+ s* e; y82
9 m! }; j) s. ^! q' Z% g; O83
( Z6 {4 `8 u; W; Y9 C' w5 h84
P1 w& ?) @; p* h# R85% ^9 i w4 M0 Y$ X4 E) ~
86
- D/ `$ F0 m5 d) p; K5 V87! O& }- k, x, P; o! _# C# H' l+ E
88, H$ y6 I( J% o
89
. B) p- a. J/ G. E, n9 M: t900 E( C7 W" I* T0 ?6 y; B
91$ N( P4 G1 Z D5 q* L! n2 y7 g4 x
92
3 `3 w0 v7 O& H, V! ~! A5 ^- `93
' X4 ]+ }) i- C) o" ]& ]! y947 a: i' n+ r) v$ n
95
' k3 N) P8 \8 u7 W4 m& P$ b96, p( t" e" I$ c
97
# e/ V8 A3 b5 p. o: N98
6 c6 B1 d( J- d+ S99( f% I' X4 i" \. P4 ^
| function db_query($query) {3 Z1 Z, S% A4 S" F# g* Z
$args = func_get_args();* [) u. Y( P" L$ {6 \3 e# F; ^
array_shift($args);! D& w; s7 \* n; r3 _
$query = db_prefix_tables($query);! ?3 L5 t0 i9 k. T! V2 @
if (isset($args[0]) and is_array($args[0])) { // 'All arguments in one array' syntax
' T" p( g5 J1 V5 D& x! M5 G7 K $args = $args[0];( g \1 e: s6 D {3 h& e8 t6 j
}
7 K9 _* C9 ^8 m5 N5 g, G _db_query_callback($args, TRUE);
# _0 t2 O; M' o/ X5 H5 i6 A2 A5 s $query = preg_replace_callback(DB_QUERY_REGEXP, '_db_query_callback', $query);* ]) l+ X0 a b# k
# r4 r0 {6 e, i. {
/*
, T- v" a# W# |% |' p4 J * Integrating multiple read/write databases
- n1 B* o6 U5 i6 J6 |' z+ h+ R, a */
* E/ D# h7 }7 C* _3 } if(!db_lock_master() && strpos(strtolower($query), "select") === 0 && strpos(strtolower($query), "last_insert_id") === FALSE){ ^6 a$ ^/ C! z( Q6 U% Z
$commits = array('alter', 'insert', 'update', 'delete', 'flush', 'lock','create');
# w4 e0 o. a4 g" I N7 ^ $is_commit = false;
9 U. i3 ^5 ?2 P6 W foreach($commits as $type) {- S( j' _+ D! }, J, n5 ], I
if((strpos(strtolower($query), "$type "))){//[insert|update|create] xxxx, need a space, otherwise, some field which is like 'user_updated' will be filter as commits8 [0 {" k, _/ k7 t
$is_commit = true;
; U. }9 B8 G5 X6 Y5 e1 w# ^: }1 c! E }
- Z& o3 V/ D' X% H: Y9 F. p }
* ^3 _ Y- n$ Z& Z; @
/ U8 N3 ]! r6 `' z4 @3 |& o if($is_commit){
5 p' m" _; ^ j9 ^5 e( F$ }( N db_set_active('default');7 W7 ~, q! u! l: P3 y
//drupal_set_message('default');
( ^& P0 f. u+ V( i } else{
1 i" }. Z: ?1 X4 \% x, i! b6 D db_set_active('readonly');/ A8 S. u* s& O# Z
//drupal_set_message('readonly');# [; A) Q, M' k) L9 N- j
}( Y( M1 _( n; H( t8 x7 `
}/ \9 T% [' t3 u; n% p+ D; P4 b
else {
! p- [8 z- x& `4 r( W+ f- E db_set_active('default'); ]/ a1 Z4 I9 F+ I' V
}0 A3 L4 S- l4 u) r I
/*
& J6 m, v1 f; |" i- U8 y2 Z, p: D * End read/write router
2 c! n6 f8 f4 J% X( b* y */& I9 z7 p6 o8 m* P1 Q; u
9 N7 g' D& U- H5 C, |/ M
return _db_query($query);
# b8 H9 v# v. `( U) f0 J1 d* R}
3 y$ U$ I$ Y+ d H4 U1 m) i
( G9 w! a2 u9 b( n. U( ~& ffunction db_lock_master($lock = null) {+ k9 X! g9 [# T: P% P" I5 _% |
static $lock_master = false;
+ n" v% k* M) X2 D if (is_null($lock)) {
\# G9 J% m+ G8 v3 Q return $lock_master;
; o, b' T' p: r0 j! T& A }5 K9 _% i: J) O( }) V" U+ R
else {
* d9 ]5 d. {: k$ l2 @# q0 I/ R $lock_master = $lock;+ z" S0 g" D+ |2 s E$ s
return $lock_master;( ?# o) O- B% H+ O; U' b
}9 p/ I$ l& l; X: I5 H
} |