50
/ ^9 Q5 \- ]% I3 O, b* c) c O514 z0 s2 I8 I0 P5 o: ], v
52
* Q* n! F; r$ \53- I7 d2 {& I6 t. g3 \& K
54
/ r/ `$ Y/ I" ~6 w; }" F55# P0 C: h$ \4 k6 R9 Z3 g! c. \$ E
56
, I, |: Z% y: t- d j9 X57$ C0 w# r) X7 A) \" d, D3 b
58( V% T; s! A$ A; v1 y* V5 v7 D$ ]
59
: S/ s' q2 d- n! Z) ~60
( I2 D3 y! K" {7 S61
2 ~# W5 Z) `' [" D+ E2 e62* P% I0 y' K0 O' B, K) @. t
63
% j3 B# Q) T N0 K3 ]64
2 M6 T/ G+ u2 C. l d) H% W/ i9 Y/ T65
9 f Z6 m! V1 Y668 ~) P/ n7 N* Y# S( k4 r
67! a' r8 @) t; t6 k4 E% {3 w. L$ F
68/ ?( b) a6 F5 g0 {
69
, @1 W! r4 g) r" t6 H702 K' r8 ^. f* ~7 U
71
( V; G7 \: f) c: e: C72
+ I9 t/ ?$ n/ c7 k4 F( i: r3 f3 o73
- V3 B) J, W9 K9 ?6 H74
! c1 O8 G, T( V9 {$ D75; N1 U( W% C& f: b2 x
76
. u- T# g3 U/ S77
, h4 x8 |- F6 l' e! B5 @# i$ L78
3 ^8 V2 \; k3 |79; p# [) J% T6 k; j' O8 a. _
80
. X q0 z! p; o3 c- }9 F81
: k+ k G" M- ?# u1 T82
% H- L1 e3 I. L$ G83
0 k5 a& K6 e9 d* Q. Q( @6 g841 {! }& `8 A( F; z8 Z1 K- g
852 J/ g9 N! K* Y8 c, F4 f
86" K" [7 |# {: o y5 S
87
5 d' C/ e) t; l! \* U% I884 e. L7 ~' v. I& e( m
890 p' P% i, h) |, T) p5 O& {! V
909 q/ c- J9 d2 I, m9 g! ^
911 C7 H7 T) ~2 a
926 {* y+ g3 l4 n9 a
935 o. T7 Q" @5 Y2 F5 r
94 {$ M* t! b( J3 H( N- l( A5 H7 v
95
2 b! _$ f* z' z) A# _$ G963 _, \$ P; e: I0 y- x: \
97
' m) ?# n) i1 H6 n98
' [9 o! g' d: M- X99' Y% n. B$ P x! ?$ t
| function db_query($query) {
1 y2 g. b* Q6 Y( O& r $args = func_get_args();
0 G& g; ?8 ~1 h9 s3 A array_shift($args);+ C! t' \- Y8 y0 M
$query = db_prefix_tables($query);
2 Y: K9 s& ^- a2 E# E# ` if (isset($args[0]) and is_array($args[0])) { // 'All arguments in one array' syntax) F: b+ ?$ [8 w
$args = $args[0];! `+ Z: e. v$ F3 |$ s
}0 h0 ^# V" N& v+ V* y$ i7 ?% B
_db_query_callback($args, TRUE);
! A J* ?4 m( O; f4 l+ r) s, V: }4 ? $query = preg_replace_callback(DB_QUERY_REGEXP, '_db_query_callback', $query);9 w4 o( L2 K4 a& h5 o1 X
+ o* q8 u1 }+ i& e4 ~8 s% \3 u
/*1 l' S" L' w9 w Q# C* ~5 Z5 j
* Integrating multiple read/write databases8 e5 ?% r% @" E
*/& t# u" j: a" j5 F3 W
if(!db_lock_master() && strpos(strtolower($query), "select") === 0 && strpos(strtolower($query), "last_insert_id") === FALSE){
0 e8 B4 t/ J( n: [- Z2 X $commits = array('alter', 'insert', 'update', 'delete', 'flush', 'lock','create');
# j0 G: S( Y: f. [. w$ F- n- v $is_commit = false;! i4 o* I) e2 E- W) U, Z' }+ I
foreach($commits as $type) {* n( i9 B- Q' L2 p" {/ 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 commits7 R0 `+ |9 h0 }% |" t
$is_commit = true;
6 a! R, f1 |# _1 R( [ }# n$ ^* ], H F
}
: W7 G6 A' c8 K$ s $ a9 y$ Q3 T$ i% r% t
if($is_commit){
& Q6 \; L+ F$ N& s; ?% H db_set_active('default');# n& G' @5 k& P( o6 n9 d* b
//drupal_set_message('default');
( ^/ O- n% `. {( j' D( f; L7 Q } else{
0 Q' b0 ]( a* }+ ? db_set_active('readonly');3 R5 d* c+ v8 Z3 y3 a: V
//drupal_set_message('readonly');( e" f# _1 r# u" Q
}# _$ a% ]0 f1 E2 `5 w
}
/ Q$ V! y6 q, @* q) ^ else {
& [# B }% `/ @% @8 B db_set_active('default');) N, `" a# c; ]0 |9 v1 r
}! k2 c; D$ j" ~ t+ b
/*
( ^ O% E, `& F8 W ` * End read/write router$ B4 x4 Z. s% {5 w2 s+ Y" I
*/
" s0 v% \, r: n) }' g. b
; D2 j: [$ q; Q, k! C return _db_query($query);
- t; A( ~/ U- v( g3 w}) t) O" ~/ n9 v5 ~+ }
# N, R2 s) a4 O0 L1 ]' H$ V/ m
function db_lock_master($lock = null) {& E v# u; c: ~9 v4 m& y
static $lock_master = false;
$ B+ J9 H6 z' `8 j! ? y if (is_null($lock)) {! V+ G; s1 A- T4 B2 u! x
return $lock_master;' @% Q) k1 Y+ @+ r
}
& E9 A+ m# ] f: K. b, [) e else {9 C# T( E: A V! [* t
$lock_master = $lock;1 ?- t- M8 O. Q# h/ i! Q$ t
return $lock_master;
3 I0 x" M3 ^5 Z6 i }1 K# @2 v# j7 l0 H( D
} |