cvs: pear /PECL/session_pgsql README session_pgsql.c session_pgsql.h
| From: | Yasuo Ohgaki | Date: | Tue, 15 Jan 2002 03:21:04 +0000 |
| Subject: | cvs: pear /PECL/session_pgsql README session_pgsql.c session_pgsql.h | ||
| Groups: | php.pear.cvs | ||
| Request: | Send a blank email to pear-cvs+get-1940@lists.php.net to get a copy of this message | ||
yohgaki Mon Jan 14 22:21:04 2002 EDT
Modified files:
/pear/PECL/session_pgsql README session_pgsql.c session_pgsql.h
Log:
Added session access counter
# The reason why I add these are I would like to query
# with SQL.
# BTW, I just did simple bench against equiv. user save
# handler. This module is 2 times faster than user save
# handler version :)
Index: pear/PECL/session_pgsql/README
diff -u pear/PECL/session_pgsql/README:1.5 pear/PECL/session_pgsql/README:1.6
--- pear/PECL/session_pgsql/README:1.5 Mon Jan 14 09:50:17 2002
+++ pear/PECL/session_pgsql/README Mon Jan 14 22:21:04 2002
@@ -23,8 +23,8 @@
sess_warning integer,
sess_notice integer,
sess_err_message text,
- sess_reserved7 integer,
- sess_reserved8 integer
+ sess_counter integer,
+ sess_reserved integer
);
CREATE INDEX php_session_idx ON php_session USING BTREE (sess_id);
@@ -56,9 +56,13 @@
barbage collection is performed. This module is much more efficient
than user handlers written in PHP.
-How fast it is
+How fast pgsql session save handler is
-It is as fast as files session save handler on my test system.
+Here is summary of simple benchmark tests. This module is as fast as
+files session save handler on my test system. I also compared with
+equivalent user save handler with PostgreSQL database. This module is
+2 times faster than PHP script version. msession handler is about 30%
+faster than pgsql save handler. mm handler does not work for me :(
How to customize
@@ -68,9 +72,8 @@
fields. User fields are must be defined after mod_pgsql fields.
Known Problem
- - Nothing. Please report if you find one.
+ - Many.
ToDo
- Simpile fail over
- Load balancing
- - Automatic session table creation
Index: pear/PECL/session_pgsql/session_pgsql.c
diff -u pear/PECL/session_pgsql/session_pgsql.c:1.11 pear/PECL/session_pgsql/session_pgsql.c:1.12
--- pear/PECL/session_pgsql/session_pgsql.c:1.11 Mon Jan 14 09:50:17 2002
+++ pear/PECL/session_pgsql/session_pgsql.c Mon Jan 14 22:21:04 2002
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: session_pgsql.c,v 1.11 2002/01/14 14:50:17 yohgaki Exp $ */
+/* $Id: session_pgsql.c,v 1.12 2002/01/15 03:21:04 yohgaki Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -131,8 +131,8 @@
"sess_warning integer, "
"sess_notice integer, "
"sess_err_message text, "
- "sess_reserved1 integer, "
- "sess_reserved2 integer); "
+ "sess_counter integer, "
+ "sess_reserved integer); "
"CREATE INDEX php_session_idx ON php_session USING BTREE (sess_id);";
int ret = SUCCESS;
@@ -344,7 +344,7 @@
PGconn *pg_link;
PGresult *pg_result;
char query[QUERY_BUF_SIZE+1];
- char *query_tpl = "SELECT sess_expire, sess_data FROM php_session WHERE sess_id =
'%s';";
+ char *query_tpl = "SELECT sess_expire, sess_counter, sess_data FROM php_session WHERE sess_id
= '%s';";
int ret = FAILURE;
ExecStatusType status;
@@ -403,8 +403,9 @@
PS_PGSQL(sess_del) = 1;
}
else {
+ PS_PGSQL(sess_cnt) = (int)atoi(PQgetvalue(pg_result, 0, 1));
/* PQgetvalue reuturns "" for NULL */
- *val = PQgetvalue(pg_result, 0, 1);
+ *val = PQgetvalue(pg_result, 0, 2);
if (*val) {
*vallen = strlen(*val);
*val = safe_estrndup(*val, *vallen);
@@ -440,12 +441,12 @@
char *query_delete =
"DELETE FROM php_session WHERE sess_id = '%s';";
char *query_insert =
- "INSERT INTO php_session (sess_id, sess_created, sess_modified, sess_expire, sess_data)
"
- "VALUES ('%s', %d, %d, %d, '%s');";
+ "INSERT INTO php_session (sess_id, sess_created, sess_modified, sess_expire, sess_counter,
sess_data) "
+ "VALUES ('%s', %d, %d, %d, 1, '%s');";
char *query_update =
"UPDATE php_session SET sess_data = '%s', sess_modified = %d , sess_expire = %d
"
"WHERE sess_id = '%s';";
- int ret = FAILURE;
+ int len, ret = FAILURE;
ELOG("WRITE Called");
pg_link = php_ps_pgsql_get_link(key);
@@ -463,6 +464,7 @@
now = time(NULL);
exp = now + PS(gc_maxlifetime);
+ val = php_addslashes(val, strlen(val), &len, 0 TSRMLS_CC);
if (PS_PGSQL(sess_new)) {
/* INSERT */
query_len = strlen(query_insert)+vallen+strlen(key)+120;
@@ -478,7 +480,8 @@
PQsendQuery(pg_link, query);
}
efree(query);
- PQsendQuery(pg_link, "END;");
+/* PQsendQuery(pg_link, "END;"); */
+ PQexec(pg_link, "END;");
return SUCCESS;
}
Index: pear/PECL/session_pgsql/session_pgsql.h
diff -u pear/PECL/session_pgsql/session_pgsql.h:1.5 pear/PECL/session_pgsql/session_pgsql.h:1.6
--- pear/PECL/session_pgsql/session_pgsql.h:1.5 Mon Jan 14 09:50:17 2002
+++ pear/PECL/session_pgsql/session_pgsql.h Mon Jan 14 22:21:04 2002
@@ -50,6 +50,7 @@
int servers;
int sess_new;
int sess_del;
+ int sess_cnt;
int gc_interval;
time_t last_gc;
int maxlifetime;