40 $this->
id = intval(
$id );
47 global $wgHitcounterUpdateFreq;
51 if ( $wgHitcounterUpdateFreq <= 1 || $dbw->getType() ==
'sqlite' ) {
53 'page',
array(
'page_counter = page_counter + 1' ),
54 array(
'page_id' => $this->
id ),
61 # Not important enough to warrant an error page in case of failure
63 $dbw->insert(
'hitcounter',
array(
'hc_id' => $this->
id ), __METHOD__ );
64 $checkfreq = intval( $wgHitcounterUpdateFreq / 25 + 1 );
65 if ( rand() % $checkfreq == 0 && $dbw->lastErrno() == 0 ) {
73 global $wgHitcounterUpdateFreq;
77 $rown = $dbw->selectField(
'hitcounter',
'COUNT(*)',
array(), __METHOD__ );
79 if ( $rown < $wgHitcounterUpdateFreq ) {
84 $old_user_abort = ignore_user_abort(
true );
86 $dbw->lockTables(
array(),
array(
'hitcounter' ), __METHOD__,
false );
88 $dbType = $dbw->getType();
89 $tabletype = $dbType ==
'mysql' ?
"ENGINE=HEAP " :
'';
90 $hitcounterTable = $dbw->tableName(
'hitcounter' );
91 $acchitsTable = $dbw->tableName(
'acchits' );
92 $pageTable = $dbw->tableName(
'page' );
94 $dbw->query(
"CREATE TEMPORARY TABLE $acchitsTable $tabletype AS " .
95 "SELECT hc_id,COUNT(*) AS hc_n FROM $hitcounterTable " .
96 'GROUP BY hc_id', __METHOD__ );
97 $dbw->delete(
'hitcounter',
'*', __METHOD__ );
98 $dbw->unlockTables( __METHOD__ );
100 if ( $dbType ==
'mysql' ) {
101 $dbw->query(
"UPDATE $pageTable,$acchitsTable SET page_counter=page_counter + hc_n " .
102 'WHERE page_id = hc_id', __METHOD__ );
104 $dbw->query(
"UPDATE $pageTable SET page_counter=page_counter + hc_n " .
105 "FROM $acchitsTable WHERE page_id = hc_id", __METHOD__ );
107 $dbw->query(
"DROP TABLE $acchitsTable", __METHOD__ );
109 ignore_user_abort( $old_user_abort );