Cdbcachedependency Behavior In Use Cache

Hi,

I know when pagination is false, CActiveDataProvider use from single query.

So I write this code:


$dependency = new CDbCacheDependency('SELECT MAX(id) FROM user');

$dataProvider = new CActiveDataProvider(User::model()->cache(20, $dependency), array('pagination'=>false));

When data was cached, This single query executed:


SELECT MAX(id) FROM user

After 20 sec, cache was refreshed and so have this queries:


SELECT * FROM `user` `t`

SELECT MAX(id) FROM user

Also if I insert one record in User table, because it is in dependency, this queries executed:


SELECT * FROM `user` `t`

SELECT MAX(id) FROM user

All here seem ok, and no problem.

Now I try another test with this sample query:


$dependency = new CDbCacheDependency('SELECT MAX(id) FROM user');

$dataProvider = new CActiveDataProvider(User::model()->cache(20, $dependency, 2));

I know in the above code CActiveDataProvider use from two queries.

When data was cached, executed these queries:


SELECT MAX(id) FROM user

SELECT MAX(id) FROM user

It’s strange! (Why?!)

And after 20 sec, cache was refreshed and I see executed these queries:


SELECT COUNT(*) FROM `user` `t`

SELECT MAX(id) FROM user

SELECT * FROM `user` `t` LIMIT 10

SELECT MAX(id) FROM user

Now, I have 4 queries here!!!

Finally I insert one record in table and because dependency must refresh cache, But I see 6 queries here (and not 4 queries) !!!


SELECT MAX(id) FROM user

SELECT COUNT(*) FROM `user` `t`

SELECT MAX(id) FROM user

SELECT MAX(id) FROM user

SELECT * FROM `user` `t` LIMIT 10

SELECT MAX(id) FROM user

This behavior is very strange! (Why?!)

I thinks it’s a bug.

Thanks

Nabi

Salam hamvatan,

I have this problem and very searched about. I understand if which of $duration or $dependency will be expired, cache expired too.

My code example:




$dependency->sql = 'SELECT MAX(create_date),MAX(update_date),count(id) FROM game where status=:NOT_DONE';

$dependency->params = array(':NOT_DONE'=>Game::NOT_DONE);	

$games = new CActiveDataProvider(Game::model()->cache(3600*24*30,$dependency,1));



This statement help me, thanks. I was searching for this.

http://www.yiiframework.com/doc/api/1.1/CDbConnection#queryCachingDuration-detail