50
. T% s: a3 W1 }' q/ Y51
9 m* z/ [" O, d$ \& Z1 m524 ]" q* }9 h: o- `
53! [& b- r" Z: N! a' a
54; ?! ]+ \6 f8 ?. s! U
559 q" E5 [ \! T4 S& ?
56( j" ^. q6 j X& b/ O4 \7 v
57& l5 m8 {7 P- f6 v& | F
58- Z3 r3 G3 N8 E0 C! X( Z* V! n: b1 z
596 T m& q* Y u* V( m+ @% A
60- X6 v! V! r+ Y; _2 ?
615 S0 ]: j8 x7 a! L- j q/ F
62
! I* m k' i( J! p2 \63
: J+ j1 r, S. Z1 t1 J5 t64
& a+ d5 M. ~. H* K65
8 E: L" \- S P" @. P% j! c66
' S: a9 a# l* y! C& `67' J' c' R9 C9 w1 b% y1 p# ^6 T
68
" B6 w# t' |% {" ~- M0 }% @69
, D* A) r" Y8 d) L/ k70/ w4 ]3 S+ w" o
717 P3 O3 G; J" c$ n: }, K* u& S/ y
72" w# u# |9 i# b2 X3 w6 I5 a5 b
73
( u- g* Y6 a+ k# I' G- q6 R74& E2 o( v% x4 U7 z3 t$ g
75
/ k# n( ]: @3 S8 n) z5 ^6 K, z6 k76
+ l1 V+ A! Y2 n: `4 t77. V& R, |- |# J6 r
78" D$ A0 b. n- A9 v
79
3 ?8 R$ _/ `; G+ Z$ m80
. d9 w1 w% F4 ^8 c& |+ ~( Z& C( c% G814 E$ |9 \5 D! t J3 A/ j: u1 U: D
82
' ?( @! a$ `9 v; V9 k9 g83% ^4 z. n- v3 |
84" @- B+ G9 i4 M) y0 o
85; T( n1 N, x! ^
862 r( ~' }5 i6 {8 O% B
87
$ b5 Z4 X: ?) N/ c885 `: D8 q5 q1 |1 Y8 }& [* F4 W
89
3 R* y' D0 Z0 h Q" l. A1 H n4 i90- c T$ T+ J6 g' U/ F( _
91) i+ S2 u. g; o: x9 }
92' r2 T7 b9 C# E( O. D! O @
93/ I/ U. u! k4 q% {
940 Z: p: j# H+ k- h, `5 \6 s( @+ K* K
95* F, W3 O0 K! D+ E T
96. O4 t* _, S) g6 {
97
$ {& R, p; s# P98
: e% `2 g8 c# ^6 D! X: T2 n99
/ |* h; {+ T- q! c# A | function db_query($query) {
2 B$ E- W1 r$ }+ X1 G' z $args = func_get_args();
, B) h# e# b3 L& _ array_shift($args);
. v3 N) ?+ F2 F& ~* S6 R $query = db_prefix_tables($query);) q* ?1 w9 I( c" V K8 j
if (isset($args[0]) and is_array($args[0])) { // 'All arguments in one array' syntax2 s0 e( N! d5 E W
$args = $args[0];- k' i4 H. h% z" f
}0 T1 {+ }6 ^5 z5 ^6 a
_db_query_callback($args, TRUE);
7 L. }4 v7 z( c$ x2 ` $query = preg_replace_callback(DB_QUERY_REGEXP, '_db_query_callback', $query);
( G9 V" i" g6 {5 [' ?* ^ , N" [! Z4 E# r; j; l) Z$ v
/*
/ R I- Y ?7 e: J) A * Integrating multiple read/write databases8 i3 f6 p) i" p! U, d
*/
% T! F& f6 |9 a% }- a if(!db_lock_master() && strpos(strtolower($query), "select") === 0 && strpos(strtolower($query), "last_insert_id") === FALSE){
* o' W5 n4 t( m; l $commits = array('alter', 'insert', 'update', 'delete', 'flush', 'lock','create'); T$ I3 ]+ t# P. P
$is_commit = false;
. p; [0 P Y+ h# e+ a foreach($commits as $type) {4 t( s1 e% I; I3 e3 }0 Y
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
% g' W. R5 A9 C+ q0 | $is_commit = true;. v8 {) q( O. Z& N$ b
}
' E' o! S0 T0 S/ J }
! I7 z, C! n* Z' S0 u 6 L+ I% @7 r1 }6 M' d, D5 W& i0 m
if($is_commit){
' J# d* L4 @- ]/ R5 } db_set_active('default');4 i$ c: T3 U' b# m9 D& R, E+ x
//drupal_set_message('default');2 r& z+ e+ k% C8 M, {0 C
} else{
9 g. a1 A% P: K, B; p db_set_active('readonly');8 A7 A0 J+ _6 R1 \" h8 \
//drupal_set_message('readonly');/ l) P- Y9 ~, T4 q7 c. B
}0 I u& D0 H3 T* V0 o
}$ \- r8 I' f* A5 J. s; N
else {% N5 a+ |; n( g4 I
db_set_active('default');
& G2 d# X& P* ]2 ^ }
9 B$ N) W. U: B8 g5 \ /*
+ y& P4 z4 Q, [: B- [ E * End read/write router, L) {8 ^% i+ g1 |# A
*/* Z) a- D7 R | s
' i8 h/ E8 k6 s* X4 x0 c return _db_query($query);
( F; c4 o- y6 t S) Y}% o2 m8 x# ?2 H8 _
2 `. z! i0 L+ R' j2 f% l* kfunction db_lock_master($lock = null) {7 ?8 Z0 M4 F9 ~+ C# N
static $lock_master = false;
6 L z0 e" Q$ W. L( g; p) T) A if (is_null($lock)) {
6 w; w0 m" j( s1 t# R6 _ return $lock_master;, \1 O. P9 O( z* m- E' s5 K' i
}7 ?* b& f: U. O ~4 d# c
else {
3 W; V( x8 p6 g $lock_master = $lock;4 g( _6 H0 `- J. M1 t
return $lock_master;
' d; p9 f. W( l }
; L3 O; g( y) j2 x} |