From o2on-svn @ lists.sourceforge.jp Thu Apr 3 23:40:13 2008
From: o2on-svn @ lists.sourceforge.jp (o2on svn commit)
Date: Thu, 03 Apr 2008 23:40:13 +0900
Subject: [o2on-svn] =?utf-8?b?WzcwXSAgRmlyZWJpcmTlr77lv5wgOg==?=
Message-ID: <1207233613.645041.11319.nullmailer@users.sourceforge.jp>
Revision: 70
http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=o2on&view=rev&rev=70
Author: k-uehara
Date: 2008-04-03 23:40:13 +0900 (Thu, 03 Apr 2008)
Log Message:
-----------
Firebird絲上?:
free_xsqlda
bind
select, select_datcount, select_publishcount
update
remove
Modified Paths:
--------------
trunk/o2on/src.o2on/O2DatDB.cpp
trunk/o2on/src.o2on/O2DatDB.h
Modified: trunk/o2on/src.o2on/O2DatDB.cpp
===================================================================
--- trunk/o2on/src.o2on/O2DatDB.cpp 2008-03-31 12:40:31 UTC (rev 69)
+++ trunk/o2on/src.o2on/O2DatDB.cpp 2008-04-03 14:40:13 UTC (rev 70)
@@ -123,7 +123,65 @@
#ifdef O2_DB_FIREBIRD
+bool
+O2DatDB::
+bind(XSQLDA *sqlda, int index, const uint64 num)
+{
+ XSQLVAR *var = sqlda->sqlvar;
+ if (sqlda->sqln > index && (var[index].sqltype & ~1) == SQL_INT64) {
+ var[index].sqltype = SQL_INT64;
+ *(ISC_INT64*)var[index].sqldata = num;
+ return true;
+ } else
+ return false;
+}
+bool
+O2DatDB::
+bind(XSQLDA *sqlda, int index, const wchar_t *str)
+{
+ string tmpstr;
+ XSQLVAR *var = sqlda->sqlvar;
+ if (sqlda->sqln > index && (var[index].sqltype & ~1) == SQL_VARYING) {
+ FromUnicode(L"UTF-8", str, wcslen(str)*2, tmpstr);
+ var[index].sqltype = SQL_TEXT;
+ strcpy_s(var[index].sqldata, var[index].sqllen, tmpstr.c_str());
+ //tmpstr.copy(var[index].sqldata, tmpstr.length(), 0);
+ var[index].sqllen = wcslen(str);
+ return true;
+ } else
+ return false;
+}
+
+bool
+O2DatDB::
+bind(XSQLDA *sqlda, int index, const wstring &str)
+{
+ string tmpstr;
+ XSQLVAR *var = sqlda->sqlvar;
+ if (sqlda->sqln > index && (var[index].sqltype & ~1 )== SQL_VARYING) {
+ FromUnicode(L"UTF-8", str, tmpstr);
+ var[index].sqltype = SQL_TEXT;
+ strcpy_s(var[index].sqldata, var[index].sqllen, tmpstr.c_str());
+ //tmpstr.copy(var[index].sqldata, tmpstr.length(), 0);
+ var[index].sqllen = strlen(tmpstr.c_str());
+ return true;
+ } else
+ return false;
+}
+
+bool
+O2DatDB::
+bind(XSQLDA *sqlda, int index, const hashT &hash)
+{
+ XSQLVAR *var = sqlda->sqlvar;
+ if (sqlda->sqln > index && var[index].sqllen == 20 && (var[index].sqltype & ~1)== SQL_TEXT) {
+ memcpy(var[index].sqldata, hash.data(), hash.size());
+ return true;
+ } else
+ return false;
+}
+
void
O2DatDB::
get_columns(XSQLDA *sqlda, O2DatRec &rec)
@@ -131,13 +189,13 @@
XSQLVAR *var = sqlda->sqlvar;
rec.hash.assign((byte*)var->sqldata, HASHSIZE); var++;
- ascii2unicode(var->sqldata+2, var->sqllen, rec.domain); var++;
- ascii2unicode(var->sqldata+2, var->sqllen, rec.bbsname); var++;
- ascii2unicode(var->sqldata+2, var->sqllen, rec.datname); var++;
+ ascii2unicode(var->sqldata+2, *(ISC_SHORT*)var->sqldata, rec.domain); var++;
+ ascii2unicode(var->sqldata+2, *(ISC_SHORT*)var->sqldata, rec.bbsname); var++;
+ ascii2unicode(var->sqldata+2, *(ISC_SHORT*)var->sqldata, rec.datname); var++;
rec.size = *(long*)(var->sqldata); var++;
rec.disksize = *(long*)var->sqldata; var++;
- ascii2unicode(var->sqldata+2, var->sqllen, rec.url); var++;
- ToUnicode(L"UTF8", var->sqldata+2, var->sqllen, rec.title); var++;
+ ascii2unicode(var->sqldata+2, *(ISC_SHORT*)var->sqldata, rec.url); var++;
+ ToUnicode(L"UTF-8", var->sqldata+2, *(ISC_SHORT*)var->sqldata, rec.title); var++;
rec.res = 0; var++; // always 0
rec.lastupdate = *(long*)var->sqldata; var++;
rec.lastpublish = *(long*)var->sqldata;
@@ -145,69 +203,87 @@
void
O2DatDB::
-get_columns(isc_stmt_handle stmt, XSQLDA* sqlda, wstrarray &cols)
+get_columns(XSQLDA* sqlda, wstrarray &cols)
{
int i;
- long fetch_stat;
wstring tmpstr;
wchar_t tmp[1024];
XSQLVAR *var;
- ISC_STATUS_ARRAY status;
- while ((fetch_stat = isc_dsql_fetch(status, &stmt, 1, sqlda)) == 0) {
- for (i = 0, var = sqlda->sqlvar; i < sqlda->sqld; i++, var++) {
- switch (var->sqltype & ~1) {
- case SQL_VARYING:
- if ((var->sqltype & 1) && (*(var->sqlind) == -1)) {
- cols.push_back(L"error");
+ for (i = 0, var = sqlda->sqlvar; i < sqlda->sqld; i++, var++) {
+ tmpstr.clear();
+ switch (var->sqltype & ~1) {
+ case SQL_VARYING:
+ if ((var->sqltype & 1) && (*(var->sqlind) == -1)) {
+ cols.push_back(L"[NULL]");
+ } else {
+ if (var->sqlsubtype == SQL_CHAR_OCTETS){
+ byte2whex((const byte *)var->sqldata+2, *(ISC_SHORT*)var->sqldata, tmpstr);
+ cols.push_back(tmpstr);
} else {
- if (var->sqltype == SQL_CHAR_OCTETS){
- byte2whex((const byte *)var->sqldata+2, var->sqllen, tmpstr);
- cols.push_back(tmpstr);
- } else {
- ToUnicode(L"UTF8", var->sqldata+2, var->sqllen, tmpstr);
- //ascii2unicode(var->sqldata+2, var->sqllen, tmpstr);
- cols.push_back(tmpstr);
- }
- }
- break;
- case SQL_TEXT:
- if ((var->sqltype & 1) && (*(var->sqlind) == -1)) {
- cols.push_back(L"error");
- } else {
- ascii2unicode(var->sqldata, var->sqllen, tmpstr);
+ ToUnicode(L"UTF-8", var->sqldata+2, *(ISC_SHORT*)var->sqldata, tmpstr);
+ //ascii2unicode(var->sqldata+2, var->sqllen, tmpstr);
cols.push_back(tmpstr);
}
- break;
- case SQL_LONG:
- if ((var->sqltype & 1) && (*(var->sqlind) == -1)) {
- cols.push_back(L"error");
- } else {
- swprintf_s(tmp, 1024, L"%d", *(long*)var->sqldata);
- cols.push_back(tmp);
- }
- break;
- case SQL_SHORT:
- if ((var->sqltype & 1) && (*(var->sqlind) == -1)) {
- cols.push_back(L"error");
- } else {
- swprintf_s(tmp, 1024, L"%d", *(short*)var->sqldata);
- }
- break;
- case SQL_FLOAT:
- if ((var->sqltype & 1) && (*(var->sqlind) == -1)) {
- cols.push_back(L"error");
- } else {
- swprintf_s(tmp, 1024, L"%f", *(float*)var->sqldata);
- }
- break;
- case SQL_ARRAY:
- case SQL_BLOB:
- case SQL_DOUBLE:
- default:
- cols.push_back(L"error");
- break;
}
+ break;
+ case SQL_TEXT:
+ if ((var->sqltype & 1) && (*(var->sqlind) == -1)) {
+ cols.push_back(L"[NULL]");
+ } else if (var->sqlsubtype == SQL_CHAR_OCTETS){
+ byte2whex((const byte *)var->sqldata, var->sqllen, tmpstr);
+ cols.push_back(tmpstr);
+ } else {
+ ToUnicode(L"UTF-8", var->sqldata, var->sqllen, tmpstr);
+ //ascii2unicode(var->sqldata, *(ISC_SHORT*)var->sqldata, tmpstr);
+ cols.push_back(tmpstr);
+ }
+ break;
+ case SQL_LONG:
+ if ((var->sqltype & 1) && (*(var->sqlind) == -1)) {
+ cols.push_back(L"[NULL]");
+ } else {
+ swprintf_s(tmp, 1024, L"%d", *(ISC_LONG*)var->sqldata);
+ cols.push_back(tmp);
+ }
+ break;
+ case SQL_SHORT:
+ if ((var->sqltype & 1) && (*(var->sqlind) == -1)) {
+ cols.push_back(L"[NULL]");
+ } else {
+ swprintf_s(tmp, 1024, L"%d", *(ISC_SHORT*)var->sqldata);
+ cols.push_back(tmp);
+ }
+ break;
+ case SQL_FLOAT:
+ if ((var->sqltype & 1) && (*(var->sqlind) == -1)) {
+ cols.push_back(L"[NULL]");
+ } else {
+ swprintf_s(tmp, 1024, L"%lf", *(float*)var->sqldata);
+ cols.push_back(tmp);
+ }
+ break;
+ case SQL_DOUBLE:
+ if ((var->sqltype & 1) && (*(var->sqlind) == -1)) {
+ cols.push_back(L"[NULL]");
+ } else {
+ swprintf_s(tmp, 1024, L"%lf", *(double*)var->sqldata);
+ cols.push_back(tmp);
+ }
+ break;
+ case SQL_INT64:
+ if ((var->sqltype & 1) && (*(var->sqlind) == -1)) {
+ cols.push_back(L"[NULL]");
+ } else {
+ swprintf_s(tmp, 1024, L"%I64d", *(ISC_INT64*)var->sqldata);
+ cols.push_back(tmp);
+ }
+ break;
+ case SQL_ARRAY:
+ case SQL_BLOB:
+ default:
+ cols.push_back(L"[unsupported data type]");
+ break;
}
}
}
@@ -234,9 +310,9 @@
outda->version = SQLDA_VERSION1;
outda->sqln = 1;
if (bind) {
- if (isc_dsql_describe_bind(status, &stmt, 1, outda)) goto error;
+ if (isc_dsql_describe_bind(status, &stmt, 3, outda)) goto error;
} else {
- if (isc_dsql_describe(status, &stmt, 1, outda)) goto error;
+ if (isc_dsql_describe(status, &stmt, 3, outda)) goto error;
}
if (outda->sqld > outda->sqln) {
int n = outda->sqld;
@@ -245,9 +321,9 @@
outda->version = SQLDA_VERSION1;
outda->sqln = n;
if (bind)
- isc_dsql_describe_bind(status, &stmt, 1, outda);
+ isc_dsql_describe_bind(status, &stmt, 3, outda);
else
- isc_dsql_describe(status, &stmt, 1, outda);
+ isc_dsql_describe(status, &stmt, 3, outda);
}
int i;
for (var = outda->sqlvar, i=0; i < outda->sqld; i++, var++) {
@@ -259,7 +335,7 @@
var->sqldata = (char *)new char[var->sqllen];
break;
}
- if (var->sqltype & 1) {
+ if (!bind && (var->sqltype & 1)) {
var->sqlind = (short *)new short;
}
}
@@ -269,6 +345,28 @@
log(status);
return NULL;
}
+
+void
+O2DatDB::
+free_xsqlda(XSQLDA* &sqlda)
+{
+ if (sqlda == NULL)
+ return;
+ XSQLVAR* var = sqlda->sqlvar;
+ for (int i=0; i < sqlda->sqln; i++,var++){
+ if ((var->sqltype & ~1) != SQL_VARYING) {
+ if (var->sqldata) delete(var->sqldata);
+ } else {
+ delete(var->sqldata);
+ }
+ if (var->sqltype & 1) {
+ delete(var->sqlind);
+ }
+ }
+ delete(sqlda);
+ sqlda = NULL;
+ return;
+}
#else
bool
O2DatDB::
@@ -391,7 +489,7 @@
char create_db[512];
sprintf_s(create_db, 512, "CREATE DATABASE '%s' USER 'SYSDBA' PASSWORD 'masterkey';", dbfilenameA.c_str());
- if (!isc_dsql_execute_immediate(status, &db, &tr, 0, create_db, 1, NULL))
+ if (!isc_dsql_execute_immediate(status, &db, &tr, 0, create_db, 3, NULL))
isc_detach_database(status, &db);
if (isc_attach_database(status, 0, dbfilenameA.c_str(), &db, dpblen, dpb_buff))
@@ -402,34 +500,34 @@
"if (not exists(select 1 from rdb$relations where rdb$relation_name = 'DAT')) then "
"execute statement 'create table DAT ("
" hash CHAR(20) CHARACTER SET OCTETS NOT NULL PRIMARY KEY,"//length is HASHSIZE in sha.h
- " domainname VARCHAR(10) CHARACTER SET ASCII,"
- " bbsname VARCHAR(10) CHARACTER SET ASCII,"
- " datname VARCHAR(20) CHARACTER SET ASCII,"
- " filesize INTEGER,"
- " disksize INTEGER,"
- " url VARCHAR(128) CHARACTER SET ASCII,"
- " title VARCHAR(256) CHARACTER SET UTF8,"
- " res INTEGER,"
- " lastupdate INTEGER,"
- " lastpublish INTEGER"
+ " domainname VARCHAR(16) CHARACTER SET ASCII,"
+ " bbsname VARCHAR(32) CHARACTER SET ASCII,"
+ " datname VARCHAR(32) CHARACTER SET ASCII,"
+ " filesize BIGINT,"
+ " disksize BIGINT,"
+ " url VARCHAR(256) CHARACTER SET ASCII,"
+ " title VARCHAR(512) CHARACTER SET UTF8,"
+ " res BIGINT,"
+ " lastupdate BIGINT,"
+ " lastpublish BIGINT"
");';"
"END";
if (isc_start_transaction(status, &tr, 1, &db, 0, NULL))
goto error;
- if (isc_dsql_execute_immediate(status, &db, &tr, 0, sql, 1, NULL))
+ if (isc_dsql_execute_immediate(status, &db, &tr, 0, sql, 3, NULL))
goto error;
if (isc_commit_transaction(status, &tr))
goto error;
if (isc_detach_database(status, &db))
goto error;
- return true;
+ return (true);
error:
log(status);
if (tr) isc_rollback_transaction(status, &tr);
if (db) isc_detach_database(status, &db);
- return false;
+ return (false);
#else
sqlite3 *db = NULL;
int err = sqlite3_open16(dbfilename.c_str(), &db);
@@ -520,18 +618,90 @@
if (isc_detach_database(status, &db))
goto error;
- return true;
+ return (true);
error:
log(status);
if (tr) isc_rollback_transaction(status, &tr);
if (db) isc_detach_database(status, &db);
- return false;
+ return (false);
}
+size_t
+O2DatDB::
+select(const wchar_t *sql, SQLResultList &out)
+{
+#if TRACE_SQL_EXEC_TIME
+ stopwatch sw("select");
+#endif
+
+ isc_db_handle db = NULL;
+ isc_tr_handle tr = NULL;
+ ISC_STATUS_ARRAY status;
+ isc_stmt_handle stmt = NULL;
+ XSQLDA *outda = NULL;
+ string w_str, sqlstr;
+ wstrarray cols;
+ long fetch;
+ size_t ct = 0;
+
+ if (isc_attach_database(status, 0, dbfilenameA.c_str(), &db, dpblen, dpb_buff))
+ goto error;
+
+ FromUnicode(L"UTF-8", sql, sqlstr);
+
+ if (isc_dsql_allocate_statement(status, &db, &stmt))
+ goto error;
+ if (isc_start_transaction(status, &tr, 1, &db, 0, NULL))
+ goto error;
+ if (isc_dsql_prepare(status, &tr, &stmt, 0, sqlstr.c_str(), 3, NULL))
+ goto error;
+ XSQLDA *sqlda = prepare_xsqlda(stmt, false);
+
+ if (isc_dsql_execute(status, &tr, &stmt, 3, NULL))
+ goto error;
+ if (isc_dsql_fetch(status, &stmt, 3, sqlda))
+ goto error;
+
+ if (out.empty()) {
+ //???
+ cols.clear();
+ get_column_names(sqlda, cols);
+ out.push_back(cols);
+ cols.clear();
+ get_columns(sqlda, cols);
+ out.push_back(cols);
+ ct++;
+ }
+ while (fetch = isc_dsql_fetch(status, &stmt, 3, sqlda) == 0){
+ //2????
+ cols.clear();
+ get_columns(sqlda, cols);
+ out.push_back(cols);
+ ct++;
+ }
+
+ if (isc_commit_transaction(status, &tr))
+ goto error;
+ if (stmt) isc_dsql_free_statement(status, &stmt, DSQL_drop);
+ if (db) isc_detach_database(status, &db);
+ free_xsqlda(sqlda);
+ return (ct);
+
+error:
+ log(status);
+ if (tr) isc_rollback_transaction(status, &tr);
+ if (stmt) isc_dsql_free_statement(status, &stmt, DSQL_drop);
+ if (db) isc_detach_database(status, &db);
+ free_xsqlda(sqlda);
+ return (0);
+}
+
+
+
bool
O2DatDB::
select(O2DatRec &out)
@@ -551,15 +721,16 @@
if (isc_attach_database(status, 0, dbfilenameA.c_str(), &db, dpblen, dpb_buff))
goto error;
- char sql[256];
- sprintf_s(sql, 256, "select first 1 %s from dat order by (lastpublish + %d)*4294967291-((filesize + %d)*4294967291/49157)*49157",
- COLUMNSA, rand(), rand());
+ char *sql =
+ "select first 1 "
+ COLUMNSA
+ " from dat order by rand();";
if (isc_dsql_allocate_statement(status, &db, &stmt))
goto error;
if (isc_start_transaction(status, &tr, 1, &db, 0, NULL))
goto error;
- if (isc_dsql_prepare(status, &tr, &stmt, 0, sql, 1, NULL))
+ if (isc_dsql_prepare(status, &tr, &stmt, 0, sql, 3, outda))
goto error;
XSQLDA *sqlda = prepare_xsqlda(stmt, false);
@@ -571,21 +742,23 @@
if (isc_commit_transaction(status, &tr))
goto error;
- if (stmt) isc_dsql_free_statement(status, &stmt, 0);
+ if (stmt) isc_dsql_free_statement(status, &stmt, DSQL_drop);
if (db) isc_detach_database(status, &db);
- delete sqlda;
- return true;
+ free_xsqlda(sqlda);
+ return (true);
+
error:
log(status);
if (tr) isc_rollback_transaction(status, &tr);
- if (stmt) isc_dsql_free_statement(status, &stmt, 0);
+ if (stmt) isc_dsql_free_statement(status, &stmt, DSQL_drop);
if (db) isc_detach_database(status, &db);
- if (sqlda) delete sqlda;
- return false;
+ free_xsqlda(sqlda);
+ return (false);
}
-
-
+
+
+
bool
O2DatDB::
select(O2DatRec &out, hashT hash)
@@ -598,11 +771,7 @@
isc_tr_handle tr = NULL;
ISC_STATUS_ARRAY status;
isc_stmt_handle stmt = NULL;
- O2DatRec rec;
XSQLDA *outda = NULL, *inda = NULL;
- string w_str;
- int w_row = 0;
- XSQLVAR *var;
bool ret = false;
if (isc_attach_database(status, 0, dbfilenameA.c_str(), &db, dpblen, dpb_buff))
@@ -618,36 +787,37 @@
goto error;
if (isc_start_transaction(status, &tr, 1, &db, 0, NULL))
goto error;
- if (isc_dsql_prepare(status, &tr, &stmt, 0, sql, 1, outda))
+ if (isc_dsql_prepare(status, &tr, &stmt, 0, sql, 3, NULL))
goto error;
outda = prepare_xsqlda(stmt, false);
inda = prepare_xsqlda(stmt, true);
- inda->sqlvar->sqldata = (char*) hash.block;
+ //inda->sqlvar->sqldata = (char*) hash.block;
+ memcpy(inda->sqlvar->sqldata, hash.data(), hash.size());
- if (isc_dsql_execute2(status, &tr, &stmt, 1, inda, outda)) {
- //error
- }
- if (isc_dsql_fetch(status,&stmt, 1, outda) == 0) {
- get_columns(outda, rec);
+ long st = isc_dsql_execute2(status, &tr, &stmt, 3, inda, outda);
+ if (st == 0) {
+ get_columns(outda, out);
ret = true;
- }
+ } else if (isc_sqlcode(status) != 100L)
+ goto error;
+
if (isc_commit_transaction(status, &tr))
goto error;
- if (stmt) isc_dsql_free_statement(status, &stmt, 0);
+ if (stmt) isc_dsql_free_statement(status, &stmt, DSQL_drop);
if (db) isc_detach_database(status, &db);
- if (inda) delete inda;
- if (outda) delete outda;
- return ret;
+ free_xsqlda(inda);
+ free_xsqlda(outda);
+ return (ret);
error:
log(status);
if (tr) isc_rollback_transaction(status, &tr);
- if (stmt) isc_dsql_free_statement(status, &stmt, 0);
+ if (stmt) isc_dsql_free_statement(status, &stmt, DSQL_drop);
if (db) isc_detach_database(status, &db);
- if (inda) delete inda;
- if (outda) delete outda;
- return false;
+ free_xsqlda(inda);
+ free_xsqlda(outda);
+ return (false);
}
@@ -684,10 +854,10 @@
goto error;
if (isc_start_transaction(status, &tr, 1, &db, 0, NULL))
goto error;
- if (isc_dsql_prepare(status, &tr, &stmt, 0, sql, 1, NULL))
+ if (isc_dsql_prepare(status, &tr, &stmt, 0, sql, 3, NULL))
goto error;
outda = prepare_xsqlda(stmt, false);
- if (isc_dsql_execute(status, &tr, &stmt, 1, NULL))
+ if (isc_dsql_execute(status, &tr, &stmt, 3, NULL))
goto error;
while ((fetch_stat = isc_dsql_fetch(status, &stmt, 1, outda)) == 0) {
@@ -697,28 +867,171 @@
if (isc_commit_transaction(status, &tr))
goto error;
-
- if (isc_dsql_free_statement(status, &stmt, 0))
+ if (isc_dsql_free_statement(status, &stmt, DSQL_drop))
goto error;
- stmt = NULL;
if (isc_detach_database(status, &db))
goto error;
- delete outda;
+ free_xsqlda(outda);
return true;
error:
log(status);
- if (outda) delete outda;
if (tr) isc_rollback_transaction(status, &tr);
- if (stmt) isc_dsql_free_statement(status, &stmt, 0);
+ if (stmt) isc_dsql_free_statement(status, &stmt, DSQL_drop);
if (db) isc_detach_database(status, &db);
+ free_xsqlda(outda);
return false;
}
+bool
+O2DatDB::
+select(O2DatRecList &out, const wchar_t *domain, const wchar_t *bbsname)
+{
+#if TRACE_SQL_EXEC_TIME
+ stopwatch sw("select domain bbsname order by datname");
+#endif
+
+ isc_db_handle db = NULL;
+ isc_tr_handle tr = NULL;
+ ISC_STATUS_ARRAY status;
+ isc_stmt_handle stmt = NULL;
+ XSQLDA *outda = NULL, *inda = NULL;
+ O2DatRec rec;
+ long fetch;
+
+ if (isc_attach_database(status, 0, dbfilenameA.c_str(), &db, dpblen, dpb_buff))
+ goto error;
+
+ char *sql =
+ "select"
+ COLUMNSA
+ " from dat"
+ " where domainname = ?"
+ " and bbsname = ?"
+ " order by datname;";
+
+ if (isc_dsql_allocate_statement(status, &db, &stmt))
+ goto error;
+ if (isc_start_transaction(status, &tr, 1, &db, 0, NULL))
+ goto error;
+ XSQLDA tmpda;
+ tmpda.version = SQLDA_VERSION1;
+ tmpda.sqln = 1;
+ if (isc_dsql_prepare(status, &tr, &stmt, 0, sql, 3, NULL))
+ goto error;
+ outda = prepare_xsqlda(stmt, false);
+ inda = prepare_xsqlda(stmt, true);
+
+ if (!bind(inda, 0, domain))
+ goto error;
+ if (!bind(inda, 1, bbsname))
+ goto error;
+ if (isc_dsql_execute(status, &tr, &stmt, 3, inda))
+ goto error;
+
+ while ((fetch = isc_dsql_fetch(status, &stmt, 3, outda)) == 0) {
+ get_columns(outda, rec);
+ out.push_back(rec);
+ }
+ if (fetch != 100L)
+ goto error;
+
+ if (isc_commit_transaction(status, &tr))
+ goto error;
+ if (stmt) isc_dsql_free_statement(status, &stmt, DSQL_drop);
+ if (db) isc_detach_database(status, &db);
+ free_xsqlda(inda);
+ free_xsqlda(outda);
+ return (true);
+
+error:
+ log(status);
+ if (tr) isc_rollback_transaction(status, &tr);
+ if (stmt) isc_dsql_free_statement(status, &stmt, DSQL_drop);
+ if (db) isc_detach_database(status, &db);
+ free_xsqlda(inda);
+ free_xsqlda(outda);
+ return (false);
+}
+
+
+
+
+bool
+O2DatDB::
+select(O2DatRecList &out, time_t publish_tt, size_t limit)
+{
+#if TRACE_SQL_EXEC_TIME
+ stopwatch sw("select lastpublish");
+#endif
+ isc_db_handle db = NULL;
+ isc_tr_handle tr = NULL;
+ ISC_STATUS_ARRAY status;
+ isc_stmt_handle stmt = NULL;
+ XSQLDA *outda = NULL, *inda = NULL;
+ O2DatRec rec;
+ bool ret = false;
+
+ if (isc_attach_database(status, 0, dbfilenameA.c_str(), &db, dpblen, dpb_buff))
+ goto error;
+
+ char *sql =
+ "select first ? "
+ COLUMNSA
+ " from dat"
+ " where lastpublish < ?"
+ " order by lastpublish"
+ "";
+
+ if (isc_dsql_allocate_statement(status, &db, &stmt))
+ goto error;
+ if (isc_start_transaction(status, &tr, 1, &db, 0, NULL))
+ goto error;
+ if (isc_dsql_prepare(status, &tr, &stmt, 0, sql, 3, NULL))
+ goto error;
+ outda = prepare_xsqlda(stmt, false);
+ inda = prepare_xsqlda(stmt, true);
+
+ if (!bind(inda, 0, limit))
+ goto error;
+ if (!bind(inda, 1, time(NULL)-publish_tt))
+ goto error;
+
+ if (isc_dsql_execute(status, &tr, &stmt, 3, inda))
+ goto error;
+ long st;
+ while ((st = isc_dsql_fetch(status, &stmt, 3, outda)) == 0) {
+ get_columns(outda, rec);
+ out.push_back(rec);
+ }
+ if (st != 100L)
+ goto error;
+
+ if (isc_commit_transaction(status, &tr))
+ goto error;
+ if (stmt) isc_dsql_free_statement(status, &stmt, DSQL_drop);
+ if (db) isc_detach_database(status, &db);
+ free_xsqlda(inda);
+ free_xsqlda(outda);
+ return (true);
+
+error:
+ log(status);
+ if (tr) isc_rollback_transaction(status, &tr);
+ if (stmt) isc_dsql_free_statement(status, &stmt, DSQL_drop);
+ if (db) isc_detach_database(status, &db);
+ free_xsqlda(inda);
+ free_xsqlda(outda);
+ return (false);
+}
+
+
+
+
uint64
O2DatDB::
select_datcount(void)
@@ -749,25 +1062,395 @@
goto error;
if (isc_dsql_fetch(status, &stmt, 1, sqlda))
goto error;
- uint64 count = 0;
- count = *(long *)sqlda->sqlvar[0].sqldata + count;
+ uint64 count = *(long *)sqlda->sqlvar[0].sqldata;
if (isc_commit_transaction(status, &tr))
goto error;
- delete sqlda;
- if (stmt) isc_dsql_free_statement(status, &stmt, 0);
+ free_xsqlda(sqlda);
+ if (stmt) isc_dsql_free_statement(status, &stmt, DSQL_drop);
if (db) isc_detach_database(status, &db);
return (count);
error:
log(status);
- if (sqlda) delete sqlda;
if (tr) isc_rollback_transaction(status, &tr);
- if (stmt) isc_dsql_free_statement(status, &stmt, 0);
+ if (stmt) isc_dsql_free_statement(status, &stmt, DSQL_drop);
if (db) isc_detach_database(status, &db);
+ free_xsqlda(sqlda);
return (0);
}
+
+
+
+
+uint64
+O2DatDB::
+select_datcount(wstrnummap &out)
+{
+#if TRACE_SQL_EXEC_TIME
+ stopwatch sw("select datcount group by domain bbsname");
+#endif
+
+ isc_db_handle db = NULL;
+ ISC_STATUS_ARRAY status;
+ isc_stmt_handle stmt = NULL;
+ isc_tr_handle tr = NULL;
+ wstring domain_bbsname, tmpstr;
+ uint64 total = 0;
+ long num;
+ long fetch;
+
+ if (isc_attach_database(status, 0, dbfilenameA.c_str(), &db, dpblen, dpb_buff))
+ goto error;
+
+ char *sql =
+ "select domainname, bbsname, count(*) from dat group by domainname, bbsname;";
+
+ if (isc_dsql_allocate_statement(status, &db, &stmt))
+ goto error;
+ if (isc_start_transaction(status, &tr, 1, &db, 0, NULL))
+ goto error;
+ if (isc_dsql_prepare(status, &tr, &stmt, 0, sql, 3, NULL))
+ goto error;
+ XSQLDA *sqlda = prepare_xsqlda(stmt, false);
+
+ if (isc_dsql_execute(status, &tr, &stmt, 3, NULL))
+ goto error;
+ XSQLVAR *var;
+ while ((fetch = isc_dsql_fetch(status, &stmt, 3, sqlda)) == 0) {
+ var = sqlda->sqlvar;
+ ascii2unicode(var->sqldata+2, *(ISC_SHORT*)var->sqldata, tmpstr);
+ domain_bbsname = tmpstr;
+ domain_bbsname += L":";
+ var++;
+ ascii2unicode(var->sqldata+2, *(ISC_SHORT*)var->sqldata, tmpstr);
+ domain_bbsname += tmpstr;
+ var++;
+ num = *(long*)var->sqldata;
+
+ out.insert(wstrnummap::value_type(domain_bbsname, num));
+ total += num;
+
+ }
+ if (fetch != 100L)
+ goto error;
+
+ if (isc_commit_transaction(status, &tr))
+ goto error;
+ free_xsqlda(sqlda);
+ if (stmt) isc_dsql_free_statement(status, &stmt, DSQL_drop);
+ if (db) isc_detach_database(status, &db);
+ return (total);
+
+error:
+ log(status);
+ if (tr) isc_rollback_transaction(status, &tr);
+ if (stmt) isc_dsql_free_statement(status, &stmt, DSQL_drop);
+ if (db) isc_detach_database(status, &db);
+ free_xsqlda(sqlda);
+ return (0);
+}
+
+
+
+
+uint64
+O2DatDB::
+select_totaldisksize(void)
+{
+#if TRACE_SQL_EXEC_TIME
+ stopwatch sw("select totakdisksize");
+#endif
+ isc_db_handle db = NULL;
+ ISC_STATUS_ARRAY status;
+ isc_stmt_handle stmt = NULL;
+ isc_tr_handle tr = NULL;
+
+ if (isc_attach_database(status, 0, dbfilenameA.c_str(), &db, dpblen, dpb_buff))
+ goto error;
+
+ char *sql = "select sum(disksize) from dat;";
+
+ if (isc_dsql_allocate_statement(status, &db, &stmt))
+ goto error;
+ if (isc_start_transaction(status, &tr, 1, &db, 0, NULL))
+ goto error;
+ if (isc_dsql_prepare(status, &tr, &stmt, 0, sql, 3, NULL))
+ goto error;
+ XSQLDA *sqlda = prepare_xsqlda(stmt, false);
+
+ if (isc_dsql_execute(status, &tr, &stmt, 3, NULL))
+ goto error;
+ if (isc_dsql_fetch(status, &stmt, 1, sqlda))
+ goto error;
+ uint64 totalsize = *(uint64 *)sqlda->sqlvar[0].sqldata;//over flow?
+
+ if (isc_commit_transaction(status, &tr))
+ goto error;
+ free_xsqlda(sqlda);
+ if (stmt) isc_dsql_free_statement(status, &stmt, DSQL_drop);
+ if (db) isc_detach_database(status, &db);
+ return (totalsize);
+
+error:
+ log(status);
+ if (tr) isc_rollback_transaction(status, &tr);
+ if (stmt) isc_dsql_free_statement(status, &stmt, DSQL_drop);
+ if (db) isc_detach_database(status, &db);
+ free_xsqlda(sqlda);
+ return (0);
+}
+
+
+
+
+uint64
+O2DatDB::
+select_publishcount(time_t publish_tt)
+{
+#if TRACE_SQL_EXEC_TIME
+ stopwatch sw("select datcount by lastpublish");
+#endif
+ isc_db_handle db = NULL;
+ isc_tr_handle tr = NULL;
+ ISC_STATUS_ARRAY status;
+ isc_stmt_handle stmt = NULL;
+ XSQLDA *outda = NULL, *inda = NULL;
+
+ if (isc_attach_database(status, 0, dbfilenameA.c_str(), &db, dpblen, dpb_buff))
+ goto error;
+
+ char *sql = "select count(*) from dat where lastpublish > ?;";
+
+ if (isc_dsql_allocate_statement(status, &db, &stmt))
+ goto error;
+ if (isc_start_transaction(status, &tr, 1, &db, 0, NULL))
+ goto error;
+ if (isc_dsql_prepare(status, &tr, &stmt, 0, sql, 3, NULL))
+ goto error;
+ outda = prepare_xsqlda(stmt, false);
+ inda = prepare_xsqlda(stmt, true);
+
+ inda->sqlvar->sqltype = SQL_INT64;
+ *(ISC_INT64*)inda->sqlvar->sqldata = publish_tt;
+
+ if (!isc_dsql_execute2(status, &tr, &stmt, 3, inda, outda))
+ if (isc_sqlcode(status) == 100L)
+ goto error;
+
+ uint64 ret = *(ISC_INT64*)outda->sqlvar->sqldata;
+
+ if (isc_commit_transaction(status, &tr))
+ goto error;
+ if (stmt) isc_dsql_free_statement(status, &stmt, DSQL_drop);
+ if (db) isc_detach_database(status, &db);
+ free_xsqlda(inda);
+ free_xsqlda(outda);
+ return (ret);
+
+error:
+ log(status);
+ if (tr) isc_rollback_transaction(status, &tr);
+ if (stmt) isc_dsql_free_statement(status, &stmt, DSQL_drop);
+ if (db) isc_detach_database(status, &db);
+ free_xsqlda(inda);
+ free_xsqlda(outda);
+ return (0);
+}
+
+
+
+
+void
+O2DatDB::
+update(O2DatRecList &in)
+{
+#if TRACE_SQL_EXEC_TIME
+ stopwatch sw("update by reclist");
+#endif
+ isc_db_handle db = NULL;
+ isc_tr_handle tr = NULL;
+ ISC_STATUS_ARRAY status;
+ isc_stmt_handle stmt_insert = NULL;
+ isc_stmt_handle stmt_update = NULL;
+ isc_stmt_handle stmt_updatepublish = NULL;
+ XSQLDA *da_insert=NULL, *da_update=NULL, *da_updatepublish=NULL;
+ O2DatRec org;
+
+ if (isc_attach_database(status, 0, dbfilenameA.c_str(), &db, dpblen, dpb_buff))
+ goto error;
+ if (isc_start_transaction(status, &tr, 1, &db, 0, NULL))
+ goto error;
+
+ char *sql_insert =
+ "insert into dat ("
+ COLUMNSA
+ ") values ("
+ "?,?,?,?,?,?,?,?,?,?,?"
+ ");";
+ if (isc_dsql_allocate_statement(status, &db, &stmt_insert))
+ goto error;
+ if (isc_dsql_prepare(status, &tr, &stmt_insert, 0, sql_insert, 3, NULL))
+ goto error;
+
+ char *sql_update =
+ "update dat"
+ " set filesize = ?"
+ " , disksize = ?"
+ " , url = ?"
+ " , res = ?"
+ " , lastupdate = ?"
+// " , lastpublish = 0"
+ " where hash = ?;";
+ if (isc_dsql_allocate_statement(status, &db, &stmt_update))
+ goto error;
+ if (isc_dsql_prepare(status, &tr, &stmt_update, 0, sql_update, 3, NULL))
+ goto error;
+
+ char *sql_updatepublish =
+ "update dat"
+ " set lastpublish = ?"
+ " where hash = ?;";
+ if (isc_dsql_allocate_statement(status, &db, &stmt_updatepublish))
+ goto error;
+ if (isc_dsql_prepare(status, &tr, &stmt_updatepublish, 0, sql_updatepublish, 3, NULL))
+ goto error;
+
+ for (O2DatRecListIt it = in.begin(); it != in.end(); it++) {
+ if (!select(org, it->hash)) {
+ da_insert = prepare_xsqlda(stmt_insert, true);
+ if (!bind(da_insert, 0, it->hash))
+ goto error;
+ if (!bind(da_insert, 1, it->domain))
+ goto error;
+ if (!bind(da_insert, 2, it->bbsname))
+ goto error;
+ if (!bind(da_insert, 3, it->datname))
+ goto error;
+ if (!bind(da_insert, 4, it->size))
+ goto error;
+ if (!bind(da_insert, 5, it->disksize))
+ goto error;
+ if (!bind(da_insert, 6, it->url))
+ goto error;
+ if (!bind(da_insert, 7, it->title))
+ goto error;
+ if (!bind(da_insert, 8, it->res))
+ goto error;
+ if (!bind(da_insert, 9, time(NULL)))
+ goto error;
+ if (!bind(da_insert, 10, (uint64)0))
+ goto error;
+ if (isc_dsql_execute(status, &tr, &stmt_insert, 3, da_insert))
+ goto error;
+ free_xsqlda(da_insert);
+ } else if (it->userdata = 0) {
+ da_update = prepare_xsqlda(stmt_update, true);
+ if (!bind(da_update, 0, it->size))
+ goto error;
+ if (!bind(da_update, 1, it->disksize))
+ goto error;
+ if (!bind(da_update, 2, (wcsstr(org.url.c_str(), L"xxx") == 0 ? it->url : org.url)))
+ goto error;
+ if (!bind(da_update, 3, it->res))
+ goto error;
+ if (!bind(da_update, 4, time(NULL)))
+ goto error;
+ if (!bind(da_update, 5, it->hash))
+ goto error;
+// if (!bind(da_update, 5, (uint64)0))
+// goto error;
+
+ if (isc_dsql_execute(status, &tr, &stmt_update, 3, da_update))
+ goto error;
+ free_xsqlda(da_update);
+ } else {
+ da_updatepublish = prepare_xsqlda(stmt_updatepublish, true);
+ if (!bind(da_updatepublish, 0, time(NULL)))
+ goto error;
+ if (!bind(da_updatepublish, 1, it->hash))
+ goto error;
+ if (isc_dsql_execute(status, &tr, &stmt_updatepublish, 3, da_updatepublish))
+ goto error;
+ free_xsqlda(da_updatepublish);
+ }
+ }
+
+ if (isc_commit_transaction(status, &tr))
+ goto error;
+ if (stmt_insert) isc_dsql_free_statement(status, &stmt_insert, DSQL_drop);
+ if (stmt_update) isc_dsql_free_statement(status, &stmt_update, DSQL_drop);
+ if (stmt_updatepublish) isc_dsql_free_statement(status, &stmt_updatepublish, DSQL_drop);
+ if (db) isc_detach_database(status, &db);
+ return ;
+
+error:
+ log(status);
+ if (tr) isc_rollback_transaction(status, &tr);
+ if (stmt_insert) isc_dsql_free_statement(status, &stmt_insert, DSQL_drop);
+ if (stmt_update) isc_dsql_free_statement(status, &stmt_update, DSQL_drop);
+ if (stmt_updatepublish) isc_dsql_free_statement(status, &stmt_updatepublish, DSQL_drop);
+ if (db) isc_detach_database(status, &db);
+ free_xsqlda(da_insert);
+ free_xsqlda(da_update);
+ free_xsqlda(da_updatepublish);
+ return;
+}
+
+
+
+bool
+O2DatDB::
+remove(const hashT &hash)
+{
+#if TRACE_SQL_EXEC_TIME
+ stopwatch sw("remove");
+#endif
+
+ isc_db_handle db = NULL;
+ isc_tr_handle tr = NULL;
+ ISC_STATUS_ARRAY status;
+ isc_stmt_handle stmt = NULL;
+ bool ret = false;
+
+ if (isc_attach_database(status, 0, dbfilenameA.c_str(), &db, dpblen, dpb_buff))
+ goto error;
+
+ char *sql =
+ "delete from dat where hash = ?;";
+
+ if (isc_dsql_allocate_statement(status, &db, &stmt))
+ goto error;
+ if (isc_start_transaction(status, &tr, 1, &db, 0, NULL))
+ goto error;
+ if (isc_dsql_prepare(status, &tr, &stmt, 0, sql, 3, NULL))
+ goto error;
+ XSQLDA* inda = prepare_xsqlda(stmt, true);
+
+ if (bind(inda, 0, hash))
+ goto error;
+
+ if (isc_dsql_execute(status, &tr, &stmt, 3, NULL)) {
+ ret = true;
+ } else
+ ret = false;
+
+ if (isc_commit_transaction(status, &tr))
+ goto error;
+ if (stmt) isc_dsql_free_statement(status, &stmt, DSQL_drop);
+ if (db) isc_detach_database(status, &db);
+ free_xsqlda(inda);
+ return (ret);
+
+error:
+ log(status);
+ if (tr) isc_rollback_transaction(status, &tr);
+ if (stmt) isc_dsql_free_statement(status, &stmt, DSQL_drop);
+ if (db) isc_detach_database(status, &db);
+ free_xsqlda(inda);
+ return (false);
+}
#else
bool
Modified: trunk/o2on/src.o2on/O2DatDB.h
===================================================================
--- trunk/o2on/src.o2on/O2DatDB.h 2008-03-31 12:40:31 UTC (rev 69)
+++ trunk/o2on/src.o2on/O2DatDB.h 2008-04-03 14:40:13 UTC (rev 70)
@@ -74,14 +74,15 @@
protected:
#ifdef O2_DB_FIREBIRD
void log(ISC_STATUS_ARRAY &status);
- bool bind(sqlite3 *db, sqlite3_stmt* stmt, int index, const uint64 num);
- bool bind(sqlite3 *db, sqlite3_stmt* stmt, int index, const wchar_t *str);
- bool bind(sqlite3 *db, sqlite3_stmt* stmt, int index, const wstring &str);
- bool bind(sqlite3 *db, sqlite3_stmt* stmt, int index, const hashT &hash);
+ bool bind(XSQLDA *sqlda, int index, const uint64 num);
+ bool bind(XSQLDA *sqlda, int index, const wchar_t *str);
+ bool bind(XSQLDA *sqlda, int index, const wstring &str);
+ bool bind(XSQLDA *sqlda, int index, const hashT &hash);
void get_columns(XSQLDA *sqlda, O2DatRec &rec);
- void get_columns(isc_stmt_handle stmt, XSQLDA *sqlda, wstrarray &cols);
+ void get_columns(XSQLDA *sqlda, wstrarray &cols);
void get_column_names(XSQLDA *sqlda, wstrarray &cols);
XSQLDA* prepare_xsqlda(isc_stmt_handle stmt, bool bind);
+ void free_xsqlda(XSQLDA* &sqlda);
#else
void log(sqlite3 *db);
bool bind(sqlite3 *db, sqlite3_stmt* stmt, int index, const uint64 num);
@@ -101,24 +102,24 @@
bool create_table(void);
bool reindex(const char *target);
- //size_t select(const wchar_t *sql, SQLResultList &out);
+ size_t select(const wchar_t *sql, SQLResultList &out);
bool select(O2DatRec &out);
bool select(O2DatRec &out, const hashT hash);
//bool select(O2DatRec &out, const wchar_t *domain, const wchar_t *bbsname);
bool select(O2DatRecList &out);
- //bool select(O2DatRecList &out, const wchar_t *domain, const wchar_t *bbsname);
+ bool select(O2DatRecList &out, const wchar_t *domain, const wchar_t *bbsname);
//bool select(O2DatRec &out, const wchar_t *domain, const wchar_t *bbsname, const wchar_t *datname);
- //bool select(O2DatRecList &out, time_t publish_tt, size_t limit);
+ bool select(O2DatRecList &out, time_t publish_tt, size_t limit);
uint64 select_datcount(void);
- //uint64 select_datcount(wstrnummap &out);
- //uint64 select_totaldisksize(void);
- //uint64 select_publishcount(time_t publish_tt);
+ uint64 select_datcount(wstrnummap &out);
+ uint64 select_totaldisksize(void);
+ uint64 select_publishcount(time_t publish_tt);
// bool update(O2DatRec &in, bool is_origurl);
- //void update(O2DatRecList &in);
+ void update(O2DatRecList &in);
// bool update_lastpublish(const hashT &hash);
- //bool remove(const hashT &hash);
+ bool remove(const hashT &hash);
#else
bool create_table(void);
bool reindex(const char *target);
From o2on-svn @ lists.sourceforge.jp Mon Apr 7 00:02:33 2008
From: o2on-svn @ lists.sourceforge.jp (o2on svn commit)
Date: Mon, 07 Apr 2008 00:02:33 +0900
Subject: [o2on-svn] =?utf-8?b?WzcxXSAgZkZpcmViaXJk5a++5b+cIDo=?=
Message-ID: <1207494153.475587.2109.nullmailer@users.sourceforge.jp>
Revision: 71
http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=o2on&view=rev&rev=71
Author: k-uehara
Date: 2008-04-07 00:02:33 +0900 (Mon, 07 Apr 2008)
Log Message:
-----------
fFirebird絲上?:
select 菴遵?
???????????
Modified Paths:
--------------
trunk/o2on/src.o2on/O2DatDB.cpp
trunk/o2on/src.o2on/O2DatDB.h
Modified: trunk/o2on/src.o2on/O2DatDB.cpp
===================================================================
--- trunk/o2on/src.o2on/O2DatDB.cpp 2008-04-03 14:40:13 UTC (rev 70)
+++ trunk/o2on/src.o2on/O2DatDB.cpp 2008-04-06 15:02:33 UTC (rev 71)
@@ -108,7 +108,7 @@
errmsg += msg;
errmsg += " ";
}
- Logger->AddLog(O2LT_ERROR, L"Firebird", 0, 0, "%s", errmsg);
+ Logger->AddLog(O2LT_ERROR, L"Firebird", 0, 0, "%s", errmsg.c_str());
}
#else
void
@@ -324,6 +324,9 @@
isc_dsql_describe_bind(status, &stmt, 3, outda);
else
isc_dsql_describe(status, &stmt, 3, outda);
+ } else if (outda->sqld ==0) {
+ delete(outda);
+ return NULL;
}
int i;
for (var = outda->sqlvar, i=0; i < outda->sqld; i++, var++) {
@@ -354,11 +357,7 @@
return;
XSQLVAR* var = sqlda->sqlvar;
for (int i=0; i < sqlda->sqln; i++,var++){
- if ((var->sqltype & ~1) != SQL_VARYING) {
- if (var->sqldata) delete(var->sqldata);
- } else {
- delete(var->sqldata);
- }
+ delete(var->sqldata);
if (var->sqltype & 1) {
delete(var->sqlind);
}
@@ -495,7 +494,7 @@
if (isc_attach_database(status, 0, dbfilenameA.c_str(), &db, dpblen, dpb_buff))
goto error;
- char *sql =
+ char *sql0 =
"EXECUTE BLOCK AS BEGIN "
"if (not exists(select 1 from rdb$relations where rdb$relation_name = 'DAT')) then "
"execute statement 'create table DAT ("
@@ -513,10 +512,26 @@
");';"
"END";
+ char *sql1 =
+ "EXECUTE BLOCK AS BEGIN "
+ "if (not exists(select 1 from RDB$INDICES where RDB$INDEX_NAME = 'IDX_DAT_LASTPUBLISH')) then "
+ "execute statement 'create index idx_dat_lastpublish on dat (lastpublish);';"
+ "END";
+
+ char *sql2 =
+ "EXECUTE BLOCK AS BEGIN "
+ "if (not exists(select 1 from RDB$INDICES where RDB$INDEX_NAME = 'IDX_DAT_DOMAIN_BBSNAME_DATNAME')) then "
+ "execute statement 'create index idx_dat_domain_bbsname_datname on dat (bbsname, domainname, datname);';"
+ "END";
+
if (isc_start_transaction(status, &tr, 1, &db, 0, NULL))
goto error;
- if (isc_dsql_execute_immediate(status, &db, &tr, 0, sql, 3, NULL))
+ if (isc_dsql_execute_immediate(status, &db, &tr, 0, sql0, 3, NULL))
goto error;
+ if (isc_dsql_execute_immediate(status, &db, &tr, 0, sql1, 3, NULL))
+ goto error;
+ if (isc_dsql_execute_immediate(status, &db, &tr, 0, sql2, 3, NULL))
+ goto error;
if (isc_commit_transaction(status, &tr))
goto error;
if (isc_detach_database(status, &db))
@@ -659,44 +674,54 @@
goto error;
if (isc_dsql_prepare(status, &tr, &stmt, 0, sqlstr.c_str(), 3, NULL))
goto error;
- XSQLDA *sqlda = prepare_xsqlda(stmt, false);
+ outda = prepare_xsqlda(stmt, false);
- if (isc_dsql_execute(status, &tr, &stmt, 3, NULL))
+ //if (outda == NULL) {
+ // if(isc_dsql_execute(status, &tr, &stmt,3, NULL))
+ // goto error;
+ // goto fin;
+ //} else if (isc_dsql_execute2(status, &tr, &stmt, 3, outda))
+ // goto error;
+ fetch = isc_dsql_execute2(status, &tr, &stmt, 3, NULL, outda);
+ if(fetch !=0 &&isc_sqlcode(status) != 100L)
goto error;
- if (isc_dsql_fetch(status, &stmt, 3, sqlda))
- goto error;
if (out.empty()) {
//???
cols.clear();
- get_column_names(sqlda, cols);
+ get_column_names(outda, cols);
out.push_back(cols);
cols.clear();
- get_columns(sqlda, cols);
+ get_columns(outda, cols);
out.push_back(cols);
ct++;
}
- while (fetch = isc_dsql_fetch(status, &stmt, 3, sqlda) == 0){
+ while (fetch = isc_dsql_fetch(status, &stmt, 3, outda) == 0){
//2????
cols.clear();
- get_columns(sqlda, cols);
+ get_columns(outda, cols);
out.push_back(cols);
ct++;
}
+fin:
if (isc_commit_transaction(status, &tr))
goto error;
if (stmt) isc_dsql_free_statement(status, &stmt, DSQL_drop);
if (db) isc_detach_database(status, &db);
- free_xsqlda(sqlda);
+ free_xsqlda(outda);
return (ct);
error:
+ out.clear();
+ cols.clear();
+ cols.push_back(L"SQL error");
+ out.push_back(cols);
log(status);
if (tr) isc_rollback_transaction(status, &tr);
if (stmt) isc_dsql_free_statement(status, &stmt, DSQL_drop);
if (db) isc_detach_database(status, &db);
- free_xsqlda(sqlda);
+ free_xsqlda(outda);
return (0);
}
@@ -792,11 +817,10 @@
outda = prepare_xsqlda(stmt, false);
inda = prepare_xsqlda(stmt, true);
- //inda->sqlvar->sqldata = (char*) hash.block;
- memcpy(inda->sqlvar->sqldata, hash.data(), hash.size());
+ if(!bind(inda, 0, hash))
+ goto error;
- long st = isc_dsql_execute2(status, &tr, &stmt, 3, inda, outda);
- if (st == 0) {
+ if (!isc_dsql_execute2(status, &tr, &stmt, 3, inda, outda)) {
get_columns(outda, out);
ret = true;
} else if (isc_sqlcode(status) != 100L)
@@ -820,12 +844,164 @@
return (false);
}
+bool
+O2DatDB::
+select(O2DatRec &out, const wchar_t *domain, const wchar_t *bbsname)
+{
+#if TRACE_SQL_EXEC_TIME
+ stopwatch sw("select by domain bbsname");
+#endif
+ isc_db_handle db = NULL;
+ isc_tr_handle tr = NULL;
+ ISC_STATUS_ARRAY status;
+ isc_stmt_handle stmt = NULL;
+ XSQLDA *outda = NULL, *inda = NULL;
+ bool ret = false;
+ if (isc_attach_database(status, 0, dbfilenameA.c_str(), &db, dpblen, dpb_buff))
+ goto error;
+ char *sql =
+ "select first 1"
+ COLUMNSA
+ " from dat"
+ " where domainname = ?"
+ " and bbsname = ?"
+ " order by rand();";
+ if (isc_dsql_allocate_statement(status, &db, &stmt))
+ goto error;
+ if (isc_start_transaction(status, &tr, 1, &db, 0, NULL))
+ goto error;
+ if (isc_dsql_prepare(status, &tr, &stmt, 0, sql, 3, NULL))
+ goto error;
+ outda = prepare_xsqlda(stmt, false);
+ inda = prepare_xsqlda(stmt, true);
+
+ if (!bind(inda, 0, domain))
+ goto error;
+ if (!bind(inda, 1, bbsname))
+ goto error;
+
+ if (!isc_dsql_execute2(status, &tr, &stmt, 3, inda, outda)) {
+ get_columns(outda, out);
+ ret = true;
+ } else if (isc_sqlcode(status) != 100L)
+ goto error;
+
+ if (isc_commit_transaction(status, &tr))
+ goto error;
+ if (stmt) isc_dsql_free_statement(status, &stmt, DSQL_drop);
+ if (db) isc_detach_database(status, &db);
+ free_xsqlda(inda);
+ free_xsqlda(outda);
+ return (ret);
+
+error:
+ log(status);
+ if (tr) isc_rollback_transaction(status, &tr);
+ if (stmt) isc_dsql_free_statement(status, &stmt, DSQL_drop);
+ if (db) isc_detach_database(status, &db);
+ free_xsqlda(inda);
+ free_xsqlda(outda);
+ return (false);
+/*
+
+ wchar_t *sql =
+ L"select"
+ COLUMNS
+ L" from dat"
+ L" where domain = ?"
+ L" and bbsname = ?"
+ L" order by random() limit 1;";
+
+*/
+}
+
+
+
+
bool
O2DatDB::
+select(O2DatRec &out, const wchar_t *domain, const wchar_t *bbsname, const wchar_t *datname)
+{
+#if TRACE_SQL_EXEC_TIME
+ stopwatch sw("select by domain bbsname datname");
+#endif
+
+ isc_db_handle db = NULL;
+ isc_tr_handle tr = NULL;
+ ISC_STATUS_ARRAY status;
+ isc_stmt_handle stmt = NULL;
+ XSQLDA *outda = NULL, *inda = NULL;
+ bool ret = false;
+
+ if (isc_attach_database(status, 0, dbfilenameA.c_str(), &db, dpblen, dpb_buff))
+ goto error;
+
+ char *sql =
+ "select"
+ COLUMNSA
+ " from dat"
+ " where domainname = ?"
+ " and bbsname = ?"
+ " and datname = ?;";
+ if (isc_dsql_allocate_statement(status, &db, &stmt))
+ goto error;
+ if (isc_start_transaction(status, &tr, 1, &db, 0, NULL))
+ goto error;
+ if (isc_dsql_prepare(status, &tr, &stmt, 0, sql, 3, NULL))
+ goto error;
+ outda = prepare_xsqlda(stmt, false);
+ inda = prepare_xsqlda(stmt, true);
+
+ if (!bind(inda, 0, domain))
+ goto error;
+ if (!bind(inda, 1, bbsname))
+ goto error;
+ if (!bind(inda, 2, datname))
+ goto error;
+
+ if (!isc_dsql_execute2(status, &tr, &stmt, 3, inda, outda)) {
+ get_columns(outda, out);
+ ret = true;
+ } else if (isc_sqlcode(status) != 100L)
+ goto error;
+
+ if (isc_commit_transaction(status, &tr))
+ goto error;
+ if (stmt) isc_dsql_free_statement(status, &stmt, DSQL_drop);
+ if (db) isc_detach_database(status, &db);
+ free_xsqlda(inda);
+ free_xsqlda(outda);
+ return (ret);
+
+error:
+ log(status);
+ if (tr) isc_rollback_transaction(status, &tr);
+ if (stmt) isc_dsql_free_statement(status, &stmt, DSQL_drop);
+ if (db) isc_detach_database(status, &db);
+ free_xsqlda(inda);
+ free_xsqlda(outda);
+ return (false);
+/*
+
+ wchar_t *sql =
+ L"select"
+ COLUMNS
+ L" from dat"
+ L" where domain = ?"
+ L" and bbsname = ?"
+ L" and datname = ?;";
+*/
+}
+
+
+
+
+bool
+O2DatDB::
select(O2DatRecList &out)
{
#if TRACE_SQL_EXEC_TIME
@@ -1044,6 +1220,7 @@
ISC_STATUS_ARRAY status;
isc_stmt_handle stmt = NULL;
isc_tr_handle tr = NULL;
+ XSQLDA *sqlda = NULL;
if (isc_attach_database(status, 0, dbfilenameA.c_str(), &db, dpblen, dpb_buff))
goto error;
@@ -1054,9 +1231,9 @@
goto error;
if (isc_start_transaction(status, &tr, 1, &db, 0, NULL))
goto error;
- if (isc_dsql_prepare(status, &tr, &stmt, 0, sql, 1, NULL))
+ if (isc_dsql_prepare(status, &tr, &stmt, 0, sql, 3, NULL))
goto error;
- XSQLDA *sqlda = prepare_xsqlda(stmt, false);
+ sqlda = prepare_xsqlda(stmt, false);
if (isc_dsql_execute(status, &tr, &stmt, 1, NULL))
goto error;
@@ -1066,9 +1243,9 @@
if (isc_commit_transaction(status, &tr))
goto error;
- free_xsqlda(sqlda);
if (stmt) isc_dsql_free_statement(status, &stmt, DSQL_drop);
if (db) isc_detach_database(status, &db);
+ free_xsqlda(sqlda);
return (count);
@@ -1100,6 +1277,7 @@
uint64 total = 0;
long num;
long fetch;
+ XSQLDA *sqlda = NULL;
if (isc_attach_database(status, 0, dbfilenameA.c_str(), &db, dpblen, dpb_buff))
goto error;
@@ -1113,7 +1291,7 @@
goto error;
if (isc_dsql_prepare(status, &tr, &stmt, 0, sql, 3, NULL))
goto error;
- XSQLDA *sqlda = prepare_xsqlda(stmt, false);
+ sqlda = prepare_xsqlda(stmt, false);
if (isc_dsql_execute(status, &tr, &stmt, 3, NULL))
goto error;
@@ -1166,6 +1344,7 @@
ISC_STATUS_ARRAY status;
isc_stmt_handle stmt = NULL;
isc_tr_handle tr = NULL;
+ XSQLDA *sqlda = NULL;
if (isc_attach_database(status, 0, dbfilenameA.c_str(), &db, dpblen, dpb_buff))
goto error;
@@ -1178,13 +1357,13 @@
goto error;
if (isc_dsql_prepare(status, &tr, &stmt, 0, sql, 3, NULL))
goto error;
- XSQLDA *sqlda = prepare_xsqlda(stmt, false);
+ sqlda = prepare_xsqlda(stmt, false);
if (isc_dsql_execute(status, &tr, &stmt, 3, NULL))
goto error;
if (isc_dsql_fetch(status, &stmt, 1, sqlda))
goto error;
- uint64 totalsize = *(uint64 *)sqlda->sqlvar[0].sqldata;//over flow?
+ uint64 totalsize = *(long *)sqlda->sqlvar[0].sqldata;//over flow?
if (isc_commit_transaction(status, &tr))
goto error;
@@ -1231,15 +1410,14 @@
goto error;
outda = prepare_xsqlda(stmt, false);
inda = prepare_xsqlda(stmt, true);
+ if (!bind(inda, 0, time(NULL)-publish_tt))
+ goto error;
- inda->sqlvar->sqltype = SQL_INT64;
- *(ISC_INT64*)inda->sqlvar->sqldata = publish_tt;
-
if (!isc_dsql_execute2(status, &tr, &stmt, 3, inda, outda))
if (isc_sqlcode(status) == 100L)
goto error;
- uint64 ret = *(ISC_INT64*)outda->sqlvar->sqldata;
+ uint64 ret = *(long*)outda->sqlvar->sqldata;
if (isc_commit_transaction(status, &tr))
goto error;
@@ -1262,6 +1440,16 @@
+#if 0
+bool
+O2DatDB::
+update(O2DatRec &in, bool is_origurl)
+{
+}
+#endif
+
+
+
void
O2DatDB::
update(O2DatRecList &in)
@@ -1343,7 +1531,7 @@
if (!bind(da_insert, 10, (uint64)0))
goto error;
if (isc_dsql_execute(status, &tr, &stmt_insert, 3, da_insert))
- goto error;
+ ;//goto error;
free_xsqlda(da_insert);
} else if (it->userdata = 0) {
da_update = prepare_xsqlda(stmt_update, true);
@@ -1386,7 +1574,7 @@
return ;
error:
- log(status);
+ log(status);
if (tr) isc_rollback_transaction(status, &tr);
if (stmt_insert) isc_dsql_free_statement(status, &stmt_insert, DSQL_drop);
if (stmt_update) isc_dsql_free_statement(status, &stmt_update, DSQL_drop);
@@ -1400,8 +1588,21 @@
+
+#if 0
bool
O2DatDB::
+update_lastpublish(const hashT &hash)
+{
+
+}
+#endif
+
+
+
+
+bool
+O2DatDB::
remove(const hashT &hash)
{
#if TRACE_SQL_EXEC_TIME
Modified: trunk/o2on/src.o2on/O2DatDB.h
===================================================================
--- trunk/o2on/src.o2on/O2DatDB.h 2008-04-03 14:40:13 UTC (rev 70)
+++ trunk/o2on/src.o2on/O2DatDB.h 2008-04-06 15:02:33 UTC (rev 71)
@@ -98,29 +98,7 @@
O2DatDB(O2Logger *lgr, const wchar_t *filename);
~O2DatDB();
-#ifdef O2_DB_FIREBIRD
- bool create_table(void);
- bool reindex(const char *target);
- size_t select(const wchar_t *sql, SQLResultList &out);
- bool select(O2DatRec &out);
- bool select(O2DatRec &out, const hashT hash);
- //bool select(O2DatRec &out, const wchar_t *domain, const wchar_t *bbsname);
- bool select(O2DatRecList &out);
- bool select(O2DatRecList &out, const wchar_t *domain, const wchar_t *bbsname);
- //bool select(O2DatRec &out, const wchar_t *domain, const wchar_t *bbsname, const wchar_t *datname);
- bool select(O2DatRecList &out, time_t publish_tt, size_t limit);
- uint64 select_datcount(void);
- uint64 select_datcount(wstrnummap &out);
- uint64 select_totaldisksize(void);
- uint64 select_publishcount(time_t publish_tt);
-
-// bool update(O2DatRec &in, bool is_origurl);
- void update(O2DatRecList &in);
-// bool update_lastpublish(const hashT &hash);
-
- bool remove(const hashT &hash);
-#else
bool create_table(void);
bool reindex(const char *target);
@@ -142,7 +120,6 @@
// bool update_lastpublish(const hashT &hash);
bool remove(const hashT &hash);
-#endif
void AddUpdateQueue(O2DatRec &in);
void AddUpdateQueue(const hashT &hash);
From o2on-svn @ lists.sourceforge.jp Fri Apr 18 14:42:26 2008
From: o2on-svn @ lists.sourceforge.jp (o2on svn commit)
Date: Fri, 18 Apr 2008 14:42:26 +0900
Subject: [o2on-svn] =?utf-8?b?WzcyXSBGSVg6ICBFVUMtSlDjgapkYXTjgavmnKrlr74=?=
=?utf-8?b?5b+c?=
Message-ID: <1208497346.901570.31572.nullmailer@users.sourceforge.jp>
Revision: 72
http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=o2on&view=rev&rev=72
Author: electrolysis
Date: 2008-04-18 14:42:26 +0900 (Fri, 18 Apr 2008)
Log Message:
-----------
FIX: EUC-JP??at???絲上?
荅括完: Be?帥???UC-JP??at???????????????篏帥???hift_JIS??UC-JP????ゅ???????????????????
Modified Paths:
--------------
branches/BRANCH_0043/o2on/src.o2on/O2DatIO.cpp
branches/BRANCH_0043/o2on/src.o2on/O2DatIO.h
branches/BRANCH_0043/o2on/src.o2on/O2DatPath.h
branches/BRANCH_0043/o2on/src.o2on/O2Server_HTTP_Admin.h
branches/BRANCH_0043/o2on/src.o2on/dataconv.cpp
branches/BRANCH_0043/o2on/src.o2on/dataconv.h
branches/BRANCH_0043/o2on/src.o2on/o2on.vcproj
Modified: branches/BRANCH_0043/o2on/src.o2on/O2DatIO.cpp
===================================================================
--- branches/BRANCH_0043/o2on/src.o2on/O2DatIO.cpp 2008-04-06 15:02:33 UTC (rev 71)
+++ branches/BRANCH_0043/o2on/src.o2on/O2DatIO.cpp 2008-04-18 05:42:26 UTC (rev 72)
@@ -285,8 +285,15 @@
uint pos_title = pos_gt+1;
string tmp(&p[pos_title], &p[pos_lf]);
+
+ wstring encoding;
+ if (datpath.is_be())
+ sjis_or_euc(tmp, encoding);
+ if (encoding.empty())
+ encoding = L"shift_jis";
+
wstring title;
- ToUnicode(L"shift_jis", tmp, title);
+ ToUnicode(encoding.c_str(), tmp, title);
//ASCII???????????????????????
//0x00 - 0x1f, 0x7f
@@ -686,7 +693,7 @@
bool
O2DatIO::
-Dat2HTML(const hashT &hash, string &out)
+Dat2HTML(const hashT &hash, string &out, string &encoding)
{
char tmp[32];
@@ -695,6 +702,18 @@
if (!Load(hash, 0, dat, datpath))
return false;
+ if (datpath.is_be())
+ sjis_or_euc(dat, encoding);
+ if (encoding.empty())
+ encoding = "shift_jis";
+
+ string colon = "?";
+ string broken = "?????";
+ if (encoding == "euc-jp"){
+ sjis2euc(colon);
+ sjis2euc(broken);
+ }
+
string url;
datpath.geturl(url);
@@ -713,7 +732,9 @@
if (!firstres && token.size() == 5) {
out += "\r\n";
out += "
\r\n";
- out += "\r\n";
+ out += "\r\n";
out += "";
out += token[4];
out += "\r\n";
@@ -731,7 +752,7 @@
}
out += "";
- sprintf_s(tmp, 32, "%d ?", n);
+ sprintf_s(tmp, 32, "%d %s", n, colon.c_str());
out += tmp;
if (token.size() >= 4) {
@@ -747,7 +768,7 @@
out += token[0];
out += "";
}
- out += "?";
+ out += colon;
out += token[2];
out += "";
@@ -755,7 +776,7 @@
out += "
\r\n";
}
else {
- out += "?????";
+ out += broken;
out += "";
out += line;
out += "
\r\n";
Modified: branches/BRANCH_0043/o2on/src.o2on/O2DatIO.h
===================================================================
--- branches/BRANCH_0043/o2on/src.o2on/O2DatIO.h 2008-04-06 15:02:33 UTC (rev 71)
+++ branches/BRANCH_0043/o2on/src.o2on/O2DatIO.h 2008-04-18 05:42:26 UTC (rev 72)
@@ -71,7 +71,7 @@
uint64 Put(O2DatPath &datpath, const char *dat, uint64 len, uint64 startpos);
bool ExportToXML(const wchar_t *domain, const wchar_t *bbsname, string &out);
- bool Dat2HTML(const hashT &hash, string &out);
+ bool Dat2HTML(const hashT &hash, string &out, string &encoding);
size_t GetLocalFileKeys(O2KeyList &keylist, time_t publish_tt, size_t limit);
Modified: branches/BRANCH_0043/o2on/src.o2on/O2DatPath.h
===================================================================
--- branches/BRANCH_0043/o2on/src.o2on/O2DatPath.h 2008-04-06 15:02:33 UTC (rev 71)
+++ branches/BRANCH_0043/o2on/src.o2on/O2DatPath.h 2008-04-18 05:42:26 UTC (rev 72)
@@ -318,7 +318,12 @@
title = titleW;
}
+ bool is_be(void) const
+ {
+ return bbsnameA == "be";
+ }
+
private:
bool check(const char *dom, const char *bbs, const char *dat)
{
Modified: branches/BRANCH_0043/o2on/src.o2on/O2Server_HTTP_Admin.h
===================================================================
--- branches/BRANCH_0043/o2on/src.o2on/O2Server_HTTP_Admin.h 2008-04-06 15:02:33 UTC (rev 71)
+++ branches/BRANCH_0043/o2on/src.o2on/O2Server_HTTP_Admin.h 2008-04-18 05:42:26 UTC (rev 72)
@@ -1114,12 +1114,13 @@
{
hashT hash;
string html;
+ string encoding;
strmap::iterator it = hdr->queries.find("hash");
if (it != hdr->queries.end()) {
hash.assign(it->second.c_str(), it->second.size());
- DatIO->Dat2HTML(hash, html);
+ DatIO->Dat2HTML(hash, html, encoding);
}
if (html.empty())
@@ -1129,7 +1130,7 @@
HTTPHeader header(HTTPHEADERTYPE_RESPONSE);
header.status = 200;
AddResponseHeaderFields(header, Profile);
- AddContentFields(header, html.size(), "text/html", "shift_jis");
+ AddContentFields(header, html.size(), "text/html", encoding.c_str());
ss->Lock();
header.Make(ss->sbuff);
Modified: branches/BRANCH_0043/o2on/src.o2on/dataconv.cpp
===================================================================
--- branches/BRANCH_0043/o2on/src.o2on/dataconv.cpp 2008-04-06 15:02:33 UTC (rev 71)
+++ branches/BRANCH_0043/o2on/src.o2on/dataconv.cpp 2008-04-18 05:42:26 UTC (rev 72)
@@ -20,6 +20,7 @@
#include
#include
#include
+#include
const char *hex = "0123456789abcdef";
const wchar_t *whex = L"0123456789abcdef";
@@ -770,6 +771,44 @@
}
// ---------------------------------------------------------------------------
+// sjis_or_euc
+// sjis2euc
+// ---------------------------------------------------------------------------
+
+bool sjis_or_euc(const string &in, string &encoding)
+{
+ babel::init_babel();
+ switch (babel::analyze_base_encoding(in)) {
+ case babel::base_encoding::sjis:
+ encoding = "shift_jis";
+ return true;
+ case babel::base_encoding::euc:
+ encoding = "euc-jp";
+ return true;
+ }
+ return false;
+}
+bool sjis_or_euc(const string &in, wstring &encoding)
+{
+ babel::init_babel();
+ switch (babel::analyze_base_encoding(in)) {
+ case babel::base_encoding::sjis:
+ encoding = L"shift_jis";
+ return true;
+ case babel::base_encoding::euc:
+ encoding = L"euc-jp";
+ return true;
+ }
+ return false;
+}
+void sjis2euc(string &inout)
+{
+ babel::init_babel();
+ inout = babel::sjis_to_euc(inout);
+}
+
+
+// ---------------------------------------------------------------------------
// convertGTLT
//
// ---------------------------------------------------------------------------
Modified: branches/BRANCH_0043/o2on/src.o2on/dataconv.h
===================================================================
--- branches/BRANCH_0043/o2on/src.o2on/dataconv.h 2008-04-06 15:02:33 UTC (rev 71)
+++ branches/BRANCH_0043/o2on/src.o2on/dataconv.h 2008-04-18 05:42:26 UTC (rev 72)
@@ -72,6 +72,10 @@
void unicode2ascii(const wchar_t *w, size_t len, string &a);
void unicode2ascii(const wstring &w, string &a);
+extern bool sjis_or_euc(const string &in, string &encoding);
+extern bool sjis_or_euc(const string &in, wstring &encoding);
+extern void sjis2euc(string &inout);
+
void convertGTLT(const string &in, string &out);
void convertGTLT(const wstring &in, wstring &out);
Modified: branches/BRANCH_0043/o2on/src.o2on/o2on.vcproj
===================================================================
--- branches/BRANCH_0043/o2on/src.o2on/o2on.vcproj 2008-04-06 15:02:33 UTC (rev 71)
+++ branches/BRANCH_0043/o2on/src.o2on/o2on.vcproj 2008-04-18 05:42:26 UTC (rev 72)
@@ -60,7 +60,7 @@
FavorSizeOrSpeed="1"
OmitFramePointers="true"
WholeProgramOptimization="true"
- AdditionalIncludeDirectories="..\..\sqlite;..\..\zlib"
+ AdditionalIncludeDirectories="..\..\sqlite;..\..\zlib;..\..\babel"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;PROJ_SAX2;XML_LIBRARY"
StringPooling="false"
RuntimeLibrary="0"
@@ -3427,6 +3427,14 @@
>
+
+
+
+
From o2on-svn @ lists.sourceforge.jp Fri Apr 18 14:52:59 2008
From: o2on-svn @ lists.sourceforge.jp (o2on svn commit)
Date: Fri, 18 Apr 2008 14:52:59 +0900
Subject: [o2on-svn] =?utf-8?b?WzczXSAg44OQ44OZ44Or44KS6L+95Yqg?=
Message-ID: <1208497979.761520.6439.nullmailer@users.sourceforge.jp>
Revision: 73
http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=o2on&view=rev&rev=73
Author: electrolysis
Date: 2008-04-18 14:52:59 +0900 (Fri, 18 Apr 2008)
Log Message:
-----------
??????菴遵?
Modified Paths:
--------------
branches/BRANCH_0043/o2on/doc/build.txt
Modified: branches/BRANCH_0043/o2on/doc/build.txt
===================================================================
--- branches/BRANCH_0043/o2on/doc/build.txt 2008-04-18 05:42:26 UTC (rev 72)
+++ branches/BRANCH_0043/o2on/doc/build.txt 2008-04-18 05:52:59 UTC (rev 73)
@@ -9,6 +9,7 @@
?SQLite 3.5.6
?UPX 3.02
?MiniZip Ver0.02c
+????
@@ -178,4 +179,20 @@
+-zlib
+-sqlite
+-upx.exe
- +-mzp.exe
\ No newline at end of file
+ +-mzp.exe
+
+------------------------------------------------------------------------------
+ ???
+------------------------------------------------------------------------------
+http://www.trick-palace.net/cxx/ex/babel/
+babel.zip???????
+
+???????????
+??????????babel?????o2on????????
+ +-o2on
+ +-cryptopp
+ +-zlib
+ +-sqlite
+ +-upx.exe
+ +-mzp.exe
+ +-babel
From o2on-svn @ lists.sourceforge.jp Sat Apr 19 15:24:47 2008
From: o2on-svn @ lists.sourceforge.jp (o2on svn commit)
Date: Sat, 19 Apr 2008 15:24:47 +0900
Subject: [o2on-svn] =?utf-8?b?Wzc0XSAg44OQ44OZ44Or6L+95Yqg5ryP44KM?=
Message-ID: <1208586287.607851.23147.nullmailer@users.sourceforge.jp>
Revision: 74
http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=o2on&view=rev&rev=74
Author: electrolysis
Date: 2008-04-19 15:24:47 +0900 (Sat, 19 Apr 2008)
Log Message:
-----------
バベル追加漏れ
Modified Paths:
--------------
branches/BRANCH_0043/o2on/src.o2on/o2on.vcproj
Modified: branches/BRANCH_0043/o2on/src.o2on/o2on.vcproj
===================================================================
--- branches/BRANCH_0043/o2on/src.o2on/o2on.vcproj 2008-04-18 05:52:59 UTC (rev 73)
+++ branches/BRANCH_0043/o2on/src.o2on/o2on.vcproj 2008-04-19 06:24:47 UTC (rev 74)
@@ -166,7 +166,7 @@
Revision: 75
http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=o2on&view=rev&rev=75
Author: electrolysis
Date: 2008-04-19 16:01:24 +0900 (Sat, 19 Apr 2008)
Log Message:
-----------
FIX: SQL文によっては不正なXMLが生成される
Modified Paths:
--------------
branches/BRANCH_0043/o2on/src.o2on/O2Server_HTTP_Admin.h
branches/BRANCH_0043/o2on/src.o2on/dataconv.cpp
branches/BRANCH_0043/o2on/src.o2on/dataconv.h
Modified: branches/BRANCH_0043/o2on/src.o2on/O2Server_HTTP_Admin.h
===================================================================
--- branches/BRANCH_0043/o2on/src.o2on/O2Server_HTTP_Admin.h 2008-04-19 06:24:47 UTC (rev 74)
+++ branches/BRANCH_0043/o2on/src.o2on/O2Server_HTTP_Admin.h 2008-04-19 07:01:24 UTC (rev 75)
@@ -1635,11 +1635,13 @@
void GET_xml_sql(O2SocketSession *ss)
{
wstring str;
+ wstring escaped;
str += L"";
str += L"";
- str += L""+sql+L"";
+ escapeCDATA(sql, escaped);
+ str += L"";
if (!sqlresult.empty()) {
wchar_t tmp[16];
swprintf_s(tmp, 16, L"%u", sqlresult.size()-1);
@@ -1650,10 +1652,11 @@
for (size_t i = 0; i < sqlresult.size(); i++) {
str += L"";
for (size_t j = 0; j < sqlresult[i].size(); j++) {
+ escapeCDATA(sqlresult[i][j], escaped);
if (i == 0)
- str += L"" + sqlresult[i][j] + L"";
+ str += L"";
else
- str += L"" + sqlresult[i][j] + L"";
+ str += L"";
}
str += L"
";
}
Modified: branches/BRANCH_0043/o2on/src.o2on/dataconv.cpp
===================================================================
--- branches/BRANCH_0043/o2on/src.o2on/dataconv.cpp 2008-04-19 06:24:47 UTC (rev 74)
+++ branches/BRANCH_0043/o2on/src.o2on/dataconv.cpp 2008-04-19 07:01:24 UTC (rev 75)
@@ -810,7 +810,7 @@
// ---------------------------------------------------------------------------
// convertGTLT
-//
+// escapeCDATA
// ---------------------------------------------------------------------------
void convertGTLT(const string &in, string &out)
{
@@ -838,10 +838,30 @@
out = t.str();
}
+void escapeCDATA(const string &in, string &out)
+{
+ out = string(in);
+ string from = "]]>";
+ string to = "]]]]>";
+ for (size_t pos = 0; (pos = out.find(from, pos)) != string::npos; pos += to.size())
+ out.replace(pos, from.size(), to);
+}
+void escapeCDATA(const wstring &in, wstring &out)
+{
+ out = wstring(in);
+ wstring from = L"]]>";
+ wstring to = L"]]]]>";
+ for (size_t pos = 0; (pos = out.find(from, pos)) != string::npos; pos += to.size())
+ out.replace(pos, from.size(), to);
+}
+
+
+
+
// ---------------------------------------------------------------------------
// xml_AddElement
//
Modified: branches/BRANCH_0043/o2on/src.o2on/dataconv.h
===================================================================
--- branches/BRANCH_0043/o2on/src.o2on/dataconv.h 2008-04-19 06:24:47 UTC (rev 74)
+++ branches/BRANCH_0043/o2on/src.o2on/dataconv.h 2008-04-19 07:01:24 UTC (rev 75)
@@ -78,6 +78,8 @@
void convertGTLT(const string &in, string &out);
void convertGTLT(const wstring &in, wstring &out);
+extern void escapeCDATA(const string &in, string &out);
+extern void escapeCDATA(const wstring &in, wstring &out);
extern void xml_AddElement(wstring &xml, const wchar_t *tag, const wchar_t *attr, const wchar_t *val, bool escape = false);
extern void xml_AddElement(wstring &xml, const wchar_t *tag, const wchar_t *attr, int val);
From o2on-svn @ lists.sourceforge.jp Mon Apr 21 12:38:42 2008
From: o2on-svn @ lists.sourceforge.jp (o2on svn commit)
Date: Mon, 21 Apr 2008 12:38:42 +0900
Subject: [o2on-svn] =?utf-8?b?Wzc2XSBGSVg6ICAjMTIxMzAgU1FM57WQ5p6c5Lu25pWw?=
=?utf-8?b?44Gu6Kqk6KGo56S6?=
Message-ID: <1208749122.592293.23508.nullmailer@users.sourceforge.jp>
Revision: 76
http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=o2on&view=rev&rev=76
Author: electrolysis
Date: 2008-04-21 12:38:42 +0900 (Mon, 21 Apr 2008)
Log Message:
-----------
FIX: #12130 SQL腟??篁倶????茵?ず
Ticket Links:
:-----------
http://sourceforge.jp/projects/o2on/tracker/detail/12130
Modified Paths:
--------------
branches/BRANCH_0043/o2on/src.o2on/O2DatDB.cpp
Modified: branches/BRANCH_0043/o2on/src.o2on/O2DatDB.cpp
===================================================================
--- branches/BRANCH_0043/o2on/src.o2on/O2DatDB.cpp 2008-04-19 07:01:24 UTC (rev 75)
+++ branches/BRANCH_0043/o2on/src.o2on/O2DatDB.cpp 2008-04-21 03:38:42 UTC (rev 76)
@@ -298,16 +298,11 @@
goto error;
if (out.empty()) {
- //???
cols.clear();
get_column_names(stmt, cols);
out.push_back(cols);
- cols.clear();
- get_columns(stmt, cols);
- out.push_back(cols);
}
- while (sqlite3_step(stmt) == SQLITE_ROW) {
- //2????
+ for ( ; err == SQLITE_ROW; err = sqlite3_step(stmt)) {
cols.clear();
get_columns(stmt, cols);
out.push_back(cols);
From o2on-svn @ lists.sourceforge.jp Mon Apr 21 22:31:04 2008
From: o2on-svn @ lists.sourceforge.jp (o2on svn commit)
Date: Mon, 21 Apr 2008 22:31:04 +0900
Subject: [o2on-svn] =?utf-8?b?Wzc3XSAgQ0xFQVJfV09SS1NFVCDjgpLnhKHlirnljJY=?=
Message-ID: <1208784664.542679.28448.nullmailer@users.sourceforge.jp>
Revision: 77
http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=o2on&view=rev&rev=77
Author: k-uehara
Date: 2008-04-21 22:31:04 +0900 (Mon, 21 Apr 2008)
Log Message:
-----------
CLEAR_WORKSET を無効化
Modified Paths:
--------------
branches/BRANCH_0043/o2on/src.o2on/O2Define.h
Modified: branches/BRANCH_0043/o2on/src.o2on/O2Define.h
===================================================================
--- branches/BRANCH_0043/o2on/src.o2on/O2Define.h 2008-04-21 03:38:42 UTC (rev 76)
+++ branches/BRANCH_0043/o2on/src.o2on/O2Define.h 2008-04-21 13:31:04 UTC (rev 77)
@@ -60,7 +60,7 @@
#endif
/* */
-#if O2DEBUG
+#if 1 //O2DEBUG
#define CLEAR_WORKSET NULL
#else
#define CLEAR_WORKSET (SetProcessWorkingSetSize(GetCurrentProcess(), 0xffffffff, 0xffffffff))
From o2on-svn @ lists.sourceforge.jp Tue Apr 22 12:38:02 2008
From: o2on-svn @ lists.sourceforge.jp (o2on svn commit)
Date: Tue, 22 Apr 2008 12:38:02 +0900
Subject: [o2on-svn] =?utf-8?b?Wzc4XSBGSVg6ICDjgIzlj5blvpflpLHmlZfjgI3mmYI=?=
=?utf-8?b?44Gr44Ko44Oz44Kz44O844OH44Kj44Oz44Kw44GM5pyq5oyH5a6a?=
Message-ID: <1208835482.324358.5051.nullmailer@users.sourceforge.jp>
Revision: 78
http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=o2on&view=rev&rev=78
Author: electrolysis
Date: 2008-04-22 12:38:02 +0900 (Tue, 22 Apr 2008)
Log Message:
-----------
FIX: 「取得失敗」時にエンコーディングが未指定
Modified Paths:
--------------
branches/BRANCH_0043/o2on/src.o2on/O2DatIO.cpp
Modified: branches/BRANCH_0043/o2on/src.o2on/O2DatIO.cpp
===================================================================
--- branches/BRANCH_0043/o2on/src.o2on/O2DatIO.cpp 2008-04-21 13:31:04 UTC (rev 77)
+++ branches/BRANCH_0043/o2on/src.o2on/O2DatIO.cpp 2008-04-22 03:38:02 UTC (rev 78)
@@ -699,8 +699,10 @@
O2DatPath datpath;
string dat;
- if (!Load(hash, 0, dat, datpath))
+ if (!Load(hash, 0, dat, datpath)) {
+ encoding = "shift_jis";
return false;
+ }
if (datpath.is_be())
sjis_or_euc(dat, encoding);
From o2on-svn @ lists.sourceforge.jp Wed Apr 23 11:36:37 2008
From: o2on-svn @ lists.sourceforge.jp (o2on svn commit)
Date: Wed, 23 Apr 2008 11:36:37 +0900
Subject: [o2on-svn] =?utf-8?b?Wzc5XSBGSVg6ICBFVUMtSlDjgapkYXTjgavmnKrlr74=?=
=?utf-8?b?5b+c?=
Message-ID: <1208918197.851512.14903.nullmailer@users.sourceforge.jp>
Revision: 79
http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=o2on&view=rev&rev=79
Author: electrolysis
Date: 2008-04-23 11:36:37 +0900 (Wed, 23 Apr 2008)
Log Message:
-----------
FIX: EUC-JP??at???絲上?
Modified Paths:
--------------
branches/BRANCH_0043/o2on/src.o2on/O2DatIO.cpp
branches/BRANCH_0043/o2on/src.o2on/O2DatIO.h
Modified: branches/BRANCH_0043/o2on/src.o2on/O2DatIO.cpp
===================================================================
--- branches/BRANCH_0043/o2on/src.o2on/O2DatIO.cpp 2008-04-22 03:38:02 UTC (rev 78)
+++ branches/BRANCH_0043/o2on/src.o2on/O2DatIO.cpp 2008-04-23 02:36:37 UTC (rev 79)
@@ -154,12 +154,12 @@
if (p == NULL)
return false;
- return (KakoHantei(p, mf.size()));
+ return (KakoHantei(p, mf.size(), datpath.is_be()));
}
bool
O2DatIO::
-KakoHantei(const char *dat, uint64 len)
+KakoHantei(const char *dat, uint64 len, bool is_be)
{
int lf = 0;
const char *p[2] = {NULL};
@@ -175,25 +175,40 @@
p[1]++;
size_t linelen = p[0] - p[1];
+ string encoding;
+ if (is_be)
+ sjis_or_euc(string(dat), encoding);
+ if (encoding.empty())
+ encoding = "shift_jis";
+
+ string over1000 = "????<><>Over 1000 Thread";
+ string stop = "<>??????";
+ string rula = "<>??";
+ if (encoding == "euc-jp"){
+ sjis2euc(over1000);
+ sjis2euc(stop);
+ sjis2euc(rula);
+ }
+
// -----------------------------------------------------------------------
// 1000: ?????Over 1000 Thread?
// ex) ????<><>Over 1000 Thread<>??????????????????
????????A???????????????????? <>
// -----------------------------------------------------------------------
- if (linelen >= 28 && strncmp(p[1], "????<><>Over 1000 Thread", 28) == 0)
+ if (linelen >= 28 && strncmp(p[1], over1000.c_str(), 28) == 0)
return true;
// -----------------------------------------------------------------------
// ????: ????<>???????
// ex) ?????????<>??<>??<>??????????????(???)瀞惆<>??????
// -----------------------------------------------------------------------
- if (linelen >= 14 && strncmp(p[0]-14, "<>??????", 14) == 0)
+ if (linelen >= 14 && strncmp(p[0]-14, stop.c_str(), 14) == 0)
return true;
// -----------------------------------------------------------------------
// ???: ????<>???
// ex) ?????? ?<>sage<>?????<>
?????? ? ??????????(???)瀞惆
BE ???? = 4780 ?? 20 ??????B
<>??
// -----------------------------------------------------------------------
- if (linelen >= 6 && strncmp(p[0]-6, "<>??", 6) == 0)
+ if (linelen >= 6 && strncmp(p[0]-6, rula.c_str(), 6) == 0)
return true;
return false;
Modified: branches/BRANCH_0043/o2on/src.o2on/O2DatIO.h
===================================================================
--- branches/BRANCH_0043/o2on/src.o2on/O2DatIO.h 2008-04-22 03:38:02 UTC (rev 78)
+++ branches/BRANCH_0043/o2on/src.o2on/O2DatIO.h 2008-04-23 02:36:37 UTC (rev 79)
@@ -58,7 +58,7 @@
void SetEmergencyHaltCallbackMsg(HWND hwnd, UINT msg);
bool KakoHantei(const O2DatPath &datpath);
- bool KakoHantei(const char *dat, uint64 len);
+ bool KakoHantei(const char *dat, uint64 len, bool is_be);
bool CheckDat(const char *in, uint64 inlen);
bool GetTitle(O2DatPath &datpath);
uint64 GetSize(const O2DatPath &datpath);
From o2on-svn @ lists.sourceforge.jp Wed Apr 23 12:10:57 2008
From: o2on-svn @ lists.sourceforge.jp (o2on svn commit)
Date: Wed, 23 Apr 2008 12:10:57 +0900
Subject: [o2on-svn] =?utf-8?b?WzgwXSBGSVg6ICDoo5zlrozmmYLjga7jg5Djg6vjg7w=?=
=?utf-8?b?44Oz44KST0ZG44Gr44GX44Gm44KC44OQ44Or44O844Oz44GM6KGo56S644GV?=
=?utf-8?b?44KM44KL?=
Message-ID: <1208920257.561518.8517.nullmailer@users.sourceforge.jp>
Revision: 80
http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=o2on&view=rev&rev=80
Author: electrolysis
Date: 2008-04-23 12:10:57 +0900 (Wed, 23 Apr 2008)
Log Message:
-----------
FIX: 茖?????????若???FF??????????若???;腓冴????
Modified Paths:
--------------
branches/BRANCH_0043/o2on/src.o2on/O2Job_DatCollector.h
branches/BRANCH_0043/o2on/src.o2on/O2Job_QueryDat.h
branches/BRANCH_0043/o2on/src.o2on/O2Protocol_Dat.h
branches/BRANCH_0043/o2on/src.o2on/O2Server_HTTP_P2P.h
Modified: branches/BRANCH_0043/o2on/src.o2on/O2Job_DatCollector.h
===================================================================
--- branches/BRANCH_0043/o2on/src.o2on/O2Job_DatCollector.h 2008-04-23 02:36:37 UTC (rev 79)
+++ branches/BRANCH_0043/o2on/src.o2on/O2Job_DatCollector.h 2008-04-23 03:10:57 UTC (rev 80)
@@ -112,7 +112,7 @@
// ???dat????
const char *rawdata = &ss.rbuff[header->length];
uint64 datsize = ss.rbuff.size() - header->length;
- imported = ImportDat(DatIO, Boards, *header, rawdata, datsize,
+ imported = ImportDat(DatIO, Profile, Boards, *header, rawdata, datsize,
Logger, ss.ip, ss.port, QueryDB, hwndBaloonCallback, msgBaloonCallback);
//1????????? }
Modified: branches/BRANCH_0043/o2on/src.o2on/O2Job_QueryDat.h
===================================================================
--- branches/BRANCH_0043/o2on/src.o2on/O2Job_QueryDat.h 2008-04-23 02:36:37 UTC (rev 79)
+++ branches/BRANCH_0043/o2on/src.o2on/O2Job_QueryDat.h 2008-04-23 03:10:57 UTC (rev 80)
@@ -130,7 +130,7 @@
const char *rawdata = &ss.rbuff[header->length];
uint64 datsize = ss.rbuff.size() - header->length;
- ImportDat(DatIO, NULL, *header, rawdata, datsize,
+ ImportDat(DatIO, Profile, NULL, *header, rawdata, datsize,
Logger, ss.ip, ss.port, QueryDB, hwndBaloonCallback, msgBaloonCallback);
}
Modified: branches/BRANCH_0043/o2on/src.o2on/O2Protocol_Dat.h
===================================================================
--- branches/BRANCH_0043/o2on/src.o2on/O2Protocol_Dat.h 2008-04-23 02:36:37 UTC (rev 79)
+++ branches/BRANCH_0043/o2on/src.o2on/O2Protocol_Dat.h 2008-04-23 03:10:57 UTC (rev 80)
@@ -160,6 +160,7 @@
// ImportDat
// -----------------------------------------------------------------------
bool ImportDat(O2DatIO *datio
+ , const O2Profile *profile
, O2Boards *boards
, const HTTPHeader &header
, const char *rawdata
@@ -230,7 +231,7 @@
datpath.gethash(hash);
wstring title;
datpath.gettitle(title);
- if (QueryDB->SetNote(hash, title.c_str(), size)) {
+ if (QueryDB->SetNote(hash, title.c_str(), size) && hwndBaloonCallback && profile->IsBaloon_Hokan()) {
wchar_t msg[256];
swprintf_s(msg, 256, L"%s\n????????", title.c_str());
SendMessage(
Modified: branches/BRANCH_0043/o2on/src.o2on/O2Server_HTTP_P2P.h
===================================================================
--- branches/BRANCH_0043/o2on/src.o2on/O2Server_HTTP_P2P.h 2008-04-23 02:36:37 UTC (rev 79)
+++ branches/BRANCH_0043/o2on/src.o2on/O2Server_HTTP_P2P.h 2008-04-23 03:10:57 UTC (rev 80)
@@ -337,7 +337,7 @@
if (hdr->contentlength) {
dat = &ss->rbuff[hdr->length];
datsize = ss->rbuff.size() - hdr->length;
- bool imported = ImportDat(DatIO, Boards, *hdr, dat, datsize,
+ bool imported = ImportDat(DatIO, Profile, Boards, *hdr, dat, datsize,
Logger, node.ip, node.port, QueryDB, hwndBaloonCallback, msgBaloonCallback);
if (!imported) {
ss->Lock();
From o2on-svn @ lists.sourceforge.jp Sun Apr 27 23:36:55 2008
From: o2on-svn @ lists.sourceforge.jp (o2on svn commit)
Date: Sun, 27 Apr 2008 23:36:55 +0900
Subject: [o2on-svn] =?utf-8?b?WzgxXSBNRVJHRTogIHRydW5r44KI44KKIHJldjQ4ICwg?=
=?utf-8?q?rev61?=
Message-ID: <1209307015.234468.2737.nullmailer@users.sourceforge.jp>
Revision: 81
http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=o2on&view=rev&rev=81
Author: k-uehara
Date: 2008-04-27 23:36:55 +0900 (Sun, 27 Apr 2008)
Log Message:
-----------
MERGE: trunkより rev48, rev61
Revision Links:
--------------
http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=o2on&view=rev&rev=48
http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=o2on&view=rev&rev=61
Modified Paths:
--------------
branches/BRANCH_0043/o2on/src.o2on/main.cpp
branches/BRANCH_0043/o2on/src.o2on/upnp_description.h
Modified: branches/BRANCH_0043/o2on/src.o2on/main.cpp
===================================================================
--- branches/BRANCH_0043/o2on/src.o2on/main.cpp 2008-04-23 03:10:57 UTC (rev 80)
+++ branches/BRANCH_0043/o2on/src.o2on/main.cpp 2008-04-27 14:36:55 UTC (rev 81)
@@ -254,7 +254,7 @@
//bench();
//return (0);
- if (FindWindow(_T(CLASS_NAME), NULL))
+ if (!O2DEBUG && FindWindow(_T(CLASS_NAME), NULL))
return (0);
instance = inst;
Modified: branches/BRANCH_0043/o2on/src.o2on/upnp_description.h
===================================================================
--- branches/BRANCH_0043/o2on/src.o2on/upnp_description.h 2008-04-23 03:10:57 UTC (rev 80)
+++ branches/BRANCH_0043/o2on/src.o2on/upnp_description.h 2008-04-27 14:36:55 UTC (rev 81)
@@ -684,6 +684,12 @@
if (cur_argument && cur_argument->direction != "out")
cur_argument = NULL;
}
+ else if(wcsncmp(qname, L"NewExternalIPAddress",20) == 0){
+ cur_action = service->getAction("GetExternalIPAddress");
+ if(cur_action)
+ cur_argument = cur_action->getArgument("NewExternalIPAddress");
+ cur_action = NULL;
+ }
}
void endElement(const XMLCh* const uri
From o2on-svn @ lists.sourceforge.jp Thu May 1 14:33:57 2008
From: o2on-svn @ lists.sourceforge.jp (o2on svn commit)
Date: Thu, 01 May 2008 14:33:57 +0900
Subject: [o2on-svn] =?utf-8?b?WzgyXSBGSVg6ICDjg5bjg63jg7zjg4njgq3jg6Pjgrk=?=
=?utf-8?b?44OI44Oh44OD44K744O844K444Gu44Or44O844OX44Gu5pqr5a6a5L+u5q2j?=
=?utf-8?b?44Gr44KI44KLSU3jgbjjga7lia/kvZznlKg=?=
Message-ID: <1209620037.866098.15076.nullmailer@users.sourceforge.jp>
Revision: 82
http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=o2on&view=rev&rev=82
Author: electrolysis
Date: 2008-05-01 14:33:57 +0900 (Thu, 01 May 2008)
Log Message:
-----------
FIX: ????若?????鴻??<??祉??吾??????????篆???????M?吾??????
Modified Paths:
--------------
branches/BRANCH_0043/o2on/src.o2on/O2IMDB.h
branches/BRANCH_0043/o2on/src.o2on/O2Server_HTTP_Admin.h
branches/BRANCH_0043/o2on/src.o2on/O2Server_HTTP_P2P.h
Modified: branches/BRANCH_0043/o2on/src.o2on/O2IMDB.h
===================================================================
--- branches/BRANCH_0043/o2on/src.o2on/O2IMDB.h 2008-04-27 14:36:55 UTC (rev 81)
+++ branches/BRANCH_0043/o2on/src.o2on/O2IMDB.h 2008-05-01 05:33:57 UTC (rev 82)
@@ -36,28 +36,26 @@
hashT key;
bool mine;
hashListT paths;
+ bool broadcast;
O2IMessage(void)
: ip(0)
, port(0)
, date(0)
, mine(false)
+ , broadcast(false)
{
}
bool operator==(const O2IMessage &src)
{
- //???????????????- //return (key == src.key ? true : false);
-
- //note:????????????????????
- // ??????IMDB???????????
- // ???????b??????????????
- // ???????(IP/PORT/?????)??????????????
- if(ip == src.ip && port == src.port && msg == src.msg)
- return true;
- else
- return false;
+ if (broadcast == src.broadcast) {
+ if (broadcast)
+ return (ip == src.ip && port == src.port && msg == src.msg ? true : false);
+ else
+ return (key == src.key ? true : false);
+ }
+ return false;
}
};
typedef std::list O2IMessages;
Modified: branches/BRANCH_0043/o2on/src.o2on/O2Server_HTTP_Admin.h
===================================================================
--- branches/BRANCH_0043/o2on/src.o2on/O2Server_HTTP_Admin.h 2008-04-27 14:36:55 UTC (rev 81)
+++ branches/BRANCH_0043/o2on/src.o2on/O2Server_HTTP_Admin.h 2008-05-01 05:33:57 UTC (rev 82)
@@ -1333,6 +1333,7 @@
im.date = time(NULL);
im.key.random();
im.mine = true;
+ im.broadcast = true;
if (Job_Broadcast->Add(im))
BroadcastDB->AddMessage(im);
}
Modified: branches/BRANCH_0043/o2on/src.o2on/O2Server_HTTP_P2P.h
===================================================================
--- branches/BRANCH_0043/o2on/src.o2on/O2Server_HTTP_P2P.h 2008-04-27 14:36:55 UTC (rev 81)
+++ branches/BRANCH_0043/o2on/src.o2on/O2Server_HTTP_P2P.h 2008-05-01 05:33:57 UTC (rev 82)
@@ -423,6 +423,7 @@
tmpdb.GetMessages(msg);
for (O2IMessagesIt it = msg.begin(); it != msg.end(); it++) {
+ it->broadcast = true;
if (Job_Broadcast->Add(*it)) {
it->paths.clear();
BroadcastDB->AddMessage(*it);
From o2on-svn @ lists.sourceforge.jp Mon May 12 12:02:08 2008
From: o2on-svn @ lists.sourceforge.jp (o2on svn commit)
Date: Mon, 12 May 2008 12:02:08 +0900
Subject: [o2on-svn] =?utf-8?b?WzgzXSBGSVg6ICBJTeOCkuWFqOS7tuWJiumZpOOBmQ==?=
=?utf-8?b?44KL44GoSU0gLiB4bWzjgavlj43mmKDjgZXjgozjgarjgYQ=?=
Message-ID: <1210561328.241578.24588.nullmailer@users.sourceforge.jp>
Revision: 83
http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=o2on&view=rev&rev=83
Author: electrolysis
Date: 2008-05-12 12:02:07 +0900 (Mon, 12 May 2008)
Log Message:
-----------
FIX: IMを全件削除するとIM.xmlに反映されない
Modified Paths:
--------------
branches/BRANCH_0043/o2on/src.o2on/O2IMDB.cpp
Modified: branches/BRANCH_0043/o2on/src.o2on/O2IMDB.cpp
===================================================================
--- branches/BRANCH_0043/o2on/src.o2on/O2IMDB.cpp 2008-05-01 05:33:57 UTC (rev 82)
+++ branches/BRANCH_0043/o2on/src.o2on/O2IMDB.cpp 2008-05-12 03:02:07 UTC (rev 83)
@@ -366,9 +366,6 @@
O2IMDB::
Save(const wchar_t *filename, bool clear)
{
- if (Messages.empty())
- return false;
-
O2IMSelectCondition cond(IM_XMLELM_ALL);
string out;
ExportToXML(cond, out);
From o2on-svn @ lists.sourceforge.jp Mon May 12 12:24:18 2008
From: o2on-svn @ lists.sourceforge.jp (o2on svn commit)
Date: Mon, 12 May 2008 12:24:18 +0900
Subject: [o2on-svn] =?utf-8?b?Wzg0XSAg44Ko44Oz44Kz44O844OH44Kj44Oz44Kw5Yik?=
=?utf-8?b?5a6a44Gu57K+5bqm44KS5ZCR5LiK?=
Message-ID: <1210562658.494503.7427.nullmailer@users.sourceforge.jp>
Revision: 84
http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=o2on&view=rev&rev=84
Author: electrolysis
Date: 2008-05-12 12:24:18 +0900 (Mon, 12 May 2008)
Log Message:
-----------
エンコーディング判定の精度を向上
Modified Paths:
--------------
branches/BRANCH_0043/o2on/src.o2on/O2DatIO.cpp
Modified: branches/BRANCH_0043/o2on/src.o2on/O2DatIO.cpp
===================================================================
--- branches/BRANCH_0043/o2on/src.o2on/O2DatIO.cpp 2008-05-12 03:02:07 UTC (rev 83)
+++ branches/BRANCH_0043/o2on/src.o2on/O2DatIO.cpp 2008-05-12 03:24:18 UTC (rev 84)
@@ -303,7 +303,7 @@
wstring encoding;
if (datpath.is_be())
- sjis_or_euc(tmp, encoding);
+ sjis_or_euc(string(p, end), encoding);
if (encoding.empty())
encoding = L"shift_jis";
From o2on-svn @ lists.sourceforge.jp Sat May 17 21:09:23 2008
From: o2on-svn @ lists.sourceforge.jp (o2on svn commit)
Date: Sat, 17 May 2008 21:09:23 +0900
Subject: [o2on-svn] =?utf-8?b?Wzg1XSAgRkZpcmViaXJk5a++5b+cIDogIOOCs+ODvA==?=
=?utf-8?b?44OJ5pW055CG?=
Message-ID: <1211026163.712542.13940.nullmailer@users.sourceforge.jp>
Revision: 85
http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=o2on&view=rev&rev=85
Author: k-uehara
Date: 2008-05-17 21:09:23 +0900 (Sat, 17 May 2008)
Log Message:
-----------
FFirebird絲上?: ?潟??????
Modified Paths:
--------------
trunk/o2on/src.o2on/O2DatDB.cpp
Modified: trunk/o2on/src.o2on/O2DatDB.cpp
===================================================================
--- trunk/o2on/src.o2on/O2DatDB.cpp 2008-05-12 03:24:18 UTC (rev 84)
+++ trunk/o2on/src.o2on/O2DatDB.cpp 2008-05-17 12:09:23 UTC (rev 85)
@@ -24,18 +24,6 @@
#define TRACE_SQL_EXEC_TIME 0
#endif
-#define COLUMNSA " hash" \
- ", domainname" \
- ", bbsname" \
- ", datname" \
- ", filesize" \
- ", disksize" \
- ", url" \
- ", title" \
- ", res" \
- ", lastupdate" \
- ", lastpublish" \
- " "
#define COLUMNS L" hash" \
L", domain" \
L", bbsname" \
@@ -48,6 +36,7 @@
L", lastupdate" \
L", lastpublish" \
L" "
+
#ifdef O2_DB_FIREBIRD
#define SQL_CHAR_NONE 0
#define SQL_CHAR_OCTETS 1
@@ -56,6 +45,19 @@
#define SQL_CHAR_UTF8 4
#define SQL_CHAR_SJIS 5
#define SQL_CHAR_EUCJ 6
+
+#define COLUMNSA " hash" \
+ ", domainname" \
+ ", bbsname" \
+ ", datname" \
+ ", filesize" \
+ ", disksize" \
+ ", url" \
+ ", title" \
+ ", res" \
+ ", lastupdate" \
+ ", lastpublish" \
+ " "
#endif
@@ -96,9 +98,1229 @@
}
-#ifdef O2_DB_FIREBIRD
+
+#ifndef O2_DB_FIREBIRD
void
O2DatDB::
+log(sqlite3 *db)
+{
+ Logger->AddLog(O2LT_ERROR, L"SQLite", 0, 0, sqlite3_errmsg(db));
+}
+
+
+
+
+bool
+O2DatDB::
+bind(sqlite3 *db, sqlite3_stmt* stmt, int index, const uint64 num)
+{
+ int err = sqlite3_bind_int64(stmt, index, num);
+ return (err == SQLITE_OK ? true : false);
+}
+
+bool
+O2DatDB::
+bind(sqlite3 *db, sqlite3_stmt* stmt, int index, const wchar_t *str)
+{
+ int err = sqlite3_bind_text16(
+ stmt, index, str, wcslen(str)*sizeof(wchar_t), SQLITE_STATIC);
+ return (err == SQLITE_OK ? true : false);
+}
+
+bool
+O2DatDB::
+bind(sqlite3 *db, sqlite3_stmt* stmt, int index, const wstring &str)
+{
+ int err = sqlite3_bind_text16(
+ stmt, index, str.c_str(), str.size()*sizeof(wchar_t), SQLITE_STATIC);
+ return (err == SQLITE_OK ? true : false);
+}
+
+bool
+O2DatDB::
+bind(sqlite3 *db, sqlite3_stmt* stmt, int index, const hashT &hash)
+{
+ int err = sqlite3_bind_blob(
+ stmt, index, hash.data(), hash.size(), SQLITE_STATIC);
+ return (err == SQLITE_OK ? true : false);
+}
+
+void
+O2DatDB::
+get_columns(sqlite3_stmt* stmt, O2DatRec &rec)
+{
+ rec.hash.assign((byte*)sqlite3_column_blob(stmt, 0), HASHSIZE);
+ rec.domain = (wchar_t*)sqlite3_column_text16(stmt, 1);
+ rec.bbsname = (wchar_t*)sqlite3_column_text16(stmt, 2);
+ rec.datname = (wchar_t*)sqlite3_column_text16(stmt, 3);
+ rec.size = sqlite3_column_int64 (stmt, 4);
+ rec.disksize = sqlite3_column_int64 (stmt, 5);
+ rec.url = (wchar_t*)sqlite3_column_text16(stmt, 6);
+ rec.title = (wchar_t*)sqlite3_column_text16(stmt, 7);
+ rec.res = sqlite3_column_int64 (stmt, 8);
+ rec.lastupdate = sqlite3_column_int64 (stmt, 9);
+ rec.lastpublish = sqlite3_column_int64 (stmt, 10);
+}
+
+void
+O2DatDB::
+get_columns(sqlite3_stmt* stmt, wstrarray &cols)
+{
+ __int64 t_int;
+ double t_float;
+ wstring t_text;
+ byte *t_byte;
+ int size;
+ wchar_t tmp[1024];
+
+ int column_count = sqlite3_column_count(stmt);
+ for (int i = 0; i < column_count; i++) {
+ switch (sqlite3_column_type(stmt, i)) {
+ case SQLITE_INTEGER:
+ t_int = sqlite3_column_int64 (stmt, i);
+ swprintf_s(tmp, 1024, L"%I64u", t_int);
+ cols.push_back(tmp);
+ break;
+ case SQLITE_FLOAT:
+ t_float = sqlite3_column_double(stmt, i);
+ swprintf_s(tmp, 1024, L"%lf", t_float);
+ cols.push_back(tmp);
+ break;
+ case SQLITE_TEXT:
+ t_text = (wchar_t*)sqlite3_column_text16(stmt, i);
+ cols.push_back(t_text);
+ break;
+ case SQLITE_BLOB:
+ size = sqlite3_column_bytes(stmt, i);
+ t_byte = new byte[size];
+ memcpy(t_byte, (byte*)sqlite3_column_blob(stmt, i), size);
+ byte2whex(t_byte, size, t_text);
+ cols.push_back(t_text);
+ delete [] t_byte;
+ break;
+ }
+ }
+}
+
+void
+O2DatDB::
+get_column_names(sqlite3_stmt* stmt, wstrarray &cols)
+{
+ int column_count = sqlite3_column_count(stmt);
+ for (int i = 0; i < column_count; i++) {
+ cols.push_back((wchar_t*)sqlite3_column_name16(stmt, i));
+ }
+}
+
+
+
+
+bool
+O2DatDB::
+create_table(void)
+{
+#if TRACE_SQL_EXEC_TIME
+ stopwatch sw("create table/index and analyze");
+#endif
+
+ sqlite3 *db = NULL;
+ int err = sqlite3_open16(dbfilename.c_str(), &db);
+ if (err != SQLITE_OK)
+ goto error;
+
+ char *sql =
+ "create table if not exists dat ("
+ " hash BLOB,"
+ " domain TEXT,"
+ " bbsname TEXT,"
+ " datname TEXT,"
+ " size INTEGER,"
+ " disksize INTEGER,"
+ " url TEXT,"
+ " title TEXT,"
+ " res INTEGER,"
+ " lastupdate INTEGER,"
+ " lastpublish INTEGER,"
+// " flags INTEGER,"
+// " matchbytes INTEGER,"
+// " matchbytes1 INTEGER,"
+// " matchbytes2 INTEGER,"
+ " PRIMARY KEY (hash)"
+ ");"
+ "drop index if exists idx_dat_domain;"
+ "drop index if exists idx_dat_bbsname;"
+ "drop index if exists idx_dat_datname;"
+ "create index if not exists idx_dat_domain_bbsname_datname on dat (domain, bbsname, datname);"
+ "create index if not exists idx_dat_lastpublish on dat (lastpublish);"
+ "analyze;";
+ err = sqlite3_exec(db, sql, NULL, 0, 0);
+ if (err != SQLITE_OK)
+ goto error;
+/*
+ sql =
+ "alter table dat add column flags INTEGER;"
+ "alter table dat add column matchbytes INTEGER;"
+ "alter table dat add column matchbytes1 INTEGER;"
+ "alter table dat add column matchbytes2 INTEGER;";
+ err = sqlite3_exec(db, sql, NULL, 0, 0);
+ //if (err != SQLITE_OK)
+ // goto error;
+*/
+ err = sqlite3_close(db);
+ if (err != SQLITE_OK)
+ goto error;
+ return true;
+
+error:
+ log(db);
+ if (db) sqlite3_close(db);
+ return false;
+}
+
+
+
+
+bool
+O2DatDB::
+reindex(const char *target)
+{
+#if TRACE_SQL_EXEC_TIME
+ stopwatch sw("reindex");
+#endif
+
+ sqlite3 *db = NULL;
+ int err = sqlite3_open16(dbfilename.c_str(), &db);
+ if (err != SQLITE_OK)
+ goto error;
+
+ char sql[64];
+ sprintf_s(sql, 64, "reindex %s;", target);
+
+ err = sqlite3_exec(db, sql, NULL, 0, 0);
+ if (err != SQLITE_OK)
+ goto error;
+
+ err = sqlite3_close(db);
+ if (err != SQLITE_OK)
+ goto error;
+ return true;
+
+error:
+ log(db);
+ if (db) sqlite3_close(db);
+ return false;
+}
+
+
+
+
+size_t
+O2DatDB::
+select(const wchar_t *sql, SQLResultList &out)
+{
+#if TRACE_SQL_EXEC_TIME
+ stopwatch sw("select");
+#endif
+ wstrarray cols;
+
+ sqlite3 *db = NULL;
+ int err = sqlite3_open16(dbfilename.c_str(), &db);
+ if (err != SQLITE_OK)
+ goto error;
+ sqlite3_busy_timeout(db, 5000);
+
+ sqlite3_stmt *stmt = NULL;
+ err = sqlite3_prepare16_v2(db, sql, wcslen(sql)*2, &stmt, NULL);
+ if (err != SQLITE_OK)
+ goto error;
+ sqlite3_reset(stmt);
+
+ err = sqlite3_step(stmt);
+ if (err != SQLITE_ROW && err != SQLITE_DONE)
+ goto error;
+
+ if (out.empty()) {
+ //???
+ cols.clear();
+ get_column_names(stmt, cols);
+ out.push_back(cols);
+ cols.clear();
+ get_columns(stmt, cols);
+ out.push_back(cols);
+ }
+ while (sqlite3_step(stmt) == SQLITE_ROW) {
+ //2????
+ cols.clear();
+ get_columns(stmt, cols);
+ out.push_back(cols);
+ }
+
+ sqlite3_finalize(stmt);
+ stmt = NULL;
+
+ err = sqlite3_close(db);
+ if (err != SQLITE_OK)
+ goto error;
+
+ return (out.size());
+
+error:
+ log(db);
+ if (stmt) sqlite3_finalize(stmt);
+ if (db) sqlite3_close(db);
+ return (0);
+}
+
+
+
+bool
+O2DatDB::
+select(O2DatRec &out)
+{
+#if TRACE_SQL_EXEC_TIME
+ stopwatch sw("select random 1");
+#endif
+
+ bool ret = true;
+ sqlite3 *db = NULL;
+ int err = sqlite3_open16(dbfilename.c_str(), &db);
+ if (err != SQLITE_OK)
+ goto error;
+ sqlite3_busy_timeout(db, 5000);
+
+ wchar_t *sql =
+ L"select"
+ COLUMNS
+ L" from dat"
+ L" order by random() limit 1;";
+
+ sqlite3_stmt *stmt = NULL;
+ err = sqlite3_prepare16_v2(db, sql, wcslen(sql)*2, &stmt, NULL);
+ if (err != SQLITE_OK)
+ goto error;
+ sqlite3_reset(stmt);
+
+ err = sqlite3_step(stmt);
+ if (err != SQLITE_ROW && err != SQLITE_DONE)
+ goto error;
+
+ if (err == SQLITE_DONE)
+ ret = false;
+ if (err == SQLITE_ROW)
+ get_columns(stmt, out);
+
+ sqlite3_finalize(stmt);
+ stmt = NULL;
+
+ err = sqlite3_close(db);
+ if (err != SQLITE_OK)
+ goto error;
+
+ return (ret);
+
+error:
+ log(db);
+ if (stmt) sqlite3_finalize(stmt);
+ if (db) sqlite3_close(db);
+ return false;
+}
+
+
+
+bool
+O2DatDB::
+select(O2DatRec &out, hashT hash)
+{
+#if TRACE_SQL_EXEC_TIME
+ stopwatch sw("select by hash");
+#endif
+
+ bool ret = true;
+ sqlite3 *db = NULL;
+ int err = sqlite3_open16(dbfilename.c_str(), &db);
+ if (err != SQLITE_OK)
+ goto error;
+ sqlite3_busy_timeout(db, 5000);
+
+ wchar_t *sql =
+ L"select"
+ COLUMNS
+ L" from dat"
+ L" where hash = ?;";
+
+ sqlite3_stmt *stmt = NULL;
+ err = sqlite3_prepare16_v2(db, sql, wcslen(sql)*2, &stmt, NULL);
+ if (err != SQLITE_OK)
+ goto error;
+
+ if (!bind(db, stmt, 1, hash))
+ goto error;
+
+ err = sqlite3_step(stmt);
+ if (err != SQLITE_ROW && err != SQLITE_DONE)
+ goto error;
+ if (err == SQLITE_DONE)
+ ret = false;
+ if (err == SQLITE_ROW)
+ get_columns(stmt, out);
+
+ sqlite3_finalize(stmt);
+ stmt = NULL;
+
+ err = sqlite3_close(db);
+ if (err != SQLITE_OK)
+ goto error;
+
+ return (ret);
+
+error:
+ log(db);
+ if (stmt) sqlite3_finalize(stmt);
+ if (db) sqlite3_close(db);
+ return false;
+}
+
+bool
+O2DatDB::
+select(O2DatRec &out, const wchar_t *domain, const wchar_t *bbsname)
+{
+#if TRACE_SQL_EXEC_TIME
+ stopwatch sw("select by domain bbsname");
+#endif
+
+ bool ret = true;
+ sqlite3 *db = NULL;
+ int err = sqlite3_open16(dbfilename.c_str(), &db);
+ if (err != SQLITE_OK)
+ goto error;
+ sqlite3_busy_timeout(db, 5000);
+
+ wchar_t *sql =
+ L"select"
+ COLUMNS
+ L" from dat"
+ L" where domain = ?"
+ L" and bbsname = ?"
+ L" order by random() limit 1;";
+
+ sqlite3_stmt *stmt = NULL;
+ err = sqlite3_prepare16_v2(db, sql, wcslen(sql)*2, &stmt, NULL);
+ if (err != SQLITE_OK)
+ goto error;
+
+ if (!bind(db, stmt, 1, domain))
+ goto error;
+ if (!bind(db, stmt, 2, bbsname))
+ goto error;
+
+ err = sqlite3_step(stmt);
+ if (err != SQLITE_ROW && err != SQLITE_DONE)
+ goto error;
+
+ if (err == SQLITE_DONE)
+ ret = false;
+ if (err == SQLITE_ROW)
+ get_columns(stmt, out);
+
+ sqlite3_finalize(stmt);
+ stmt = NULL;
+
+ err = sqlite3_close(db);
+ if (err != SQLITE_OK)
+ goto error;
+
+ return (ret);
+
+error:
+ log(db);
+ if (stmt) sqlite3_finalize(stmt);
+ if (db) sqlite3_close(db);
+ return false;
+}
+
+
+
+
+bool
+O2DatDB::
+select(O2DatRec &out, const wchar_t *domain, const wchar_t *bbsname, const wchar_t *datname)
+{
+#if TRACE_SQL_EXEC_TIME
+ stopwatch sw("select by domain bbsname datname");
+#endif
+
+ bool ret = true;
+ sqlite3 *db = NULL;
+ int err = sqlite3_open16(dbfilename.c_str(), &db);
+ if (err != SQLITE_OK)
+ goto error;
+ sqlite3_busy_timeout(db, 5000);
+
+ wchar_t *sql =
+ L"select"
+ COLUMNS
+ L" from dat"
+ L" where domain = ?"
+ L" and bbsname = ?"
+ L" and datname = ?;";
+
+ sqlite3_stmt *stmt = NULL;
+ err = sqlite3_prepare16_v2(db, sql, wcslen(sql)*2, &stmt, NULL);
+ if (err != SQLITE_OK)
+ goto error;
+
+ if (!bind(db, stmt, 1, domain))
+ goto error;
+ if (!bind(db, stmt, 2, bbsname))
+ goto error;
+ if (!bind(db, stmt, 3, datname))
+ goto error;
+
+ err = sqlite3_step(stmt);
+ if (err != SQLITE_ROW && err != SQLITE_DONE)
+ goto error;
+
+ if (err == SQLITE_DONE)
+ ret = false;
+ if (err == SQLITE_ROW)
+ get_columns(stmt, out);
+
+ sqlite3_finalize(stmt);
+ stmt = NULL;
+
+ err = sqlite3_close(db);
+ if (err != SQLITE_OK)
+ goto error;
+
+ return (ret);
+
+error:
+ log(db);
+ if (stmt) sqlite3_finalize(stmt);
+ if (db) sqlite3_close(db);
+ return false;
+}
+
+
+
+
+bool
+O2DatDB::
+select(O2DatRecList &out)
+{
+#if TRACE_SQL_EXEC_TIME
+ stopwatch sw("select all");
+#endif
+
+ sqlite3 *db = NULL;
+ sqlite3_stmt *stmt = NULL;
+ O2DatRec rec;
+
+ int err = sqlite3_open16(dbfilename.c_str(), &db);
+ if (err != SQLITE_OK)
+ goto error;
+ sqlite3_busy_timeout(db, 5000);
+
+ wchar_t *sql =
+ L"select"
+ COLUMNS
+ L" from dat;";
+
+ err = sqlite3_prepare16_v2(db, sql, wcslen(sql)*2, &stmt, NULL);
+ if (err != SQLITE_OK)
+ goto error;
+
+ while (sqlite3_step(stmt) == SQLITE_ROW) {
+ get_columns(stmt, rec);
+ out.push_back(rec);
+ }
+
+ sqlite3_finalize(stmt);
+ stmt = NULL;
+
+ err = sqlite3_close(db);
+ if (err != SQLITE_OK)
+ goto error;
+ return true;
+
+error:
+ log(db);
+ if (stmt) sqlite3_finalize(stmt);
+ if (db) sqlite3_close(db);
+ return false;
+}
+
+
+
+
+bool
+O2DatDB::
+select(O2DatRecList &out, const wchar_t *domain, const wchar_t *bbsname)
+{
+#if TRACE_SQL_EXEC_TIME
+ stopwatch sw("select domain bbsname order by datname");
+#endif
+
+ sqlite3 *db = NULL;
+ sqlite3_stmt *stmt = NULL;
+ O2DatRec rec;
+
+ int err = sqlite3_open16(dbfilename.c_str(), &db);
+ if (err != SQLITE_OK)
+ goto error;
+ sqlite3_busy_timeout(db, 5000);
+
+ wchar_t *sql =
+ L"select"
+ COLUMNS
+ L" from dat"
+ L" where domain = ?"
+ L" and bbsname = ?"
+ L" order by datname;";
+
+ err = sqlite3_prepare16_v2(db, sql, wcslen(sql)*2, &stmt, NULL);
+ if (err != SQLITE_OK)
+ goto error;
+
+ if (!bind(db, stmt, 1, domain))
+ goto error;
+ if (!bind(db, stmt, 2, bbsname))
+ goto error;
+
+ while (sqlite3_step(stmt) == SQLITE_ROW) {
+ get_columns(stmt, rec);
+ out.push_back(rec);
+ }
+
+ sqlite3_finalize(stmt);
+ stmt = NULL;
+
+ err = sqlite3_close(db);
+ if (err != SQLITE_OK)
+ goto error;
+ return true;
+
+error:
+ log(db);
+ if (stmt) sqlite3_finalize(stmt);
+ if (db) sqlite3_close(db);
+ return false;
+}
+
+
+
+
+bool
+O2DatDB::
+select(O2DatRecList &out, time_t publish_tt, size_t limit)
+{
+#if TRACE_SQL_EXEC_TIME
+ stopwatch sw("select lastpublish");
+#endif
+
+ sqlite3 *db = NULL;
+ sqlite3_stmt *stmt = NULL;
+ O2DatRec rec;
+
+ int err = sqlite3_open16(dbfilename.c_str(), &db);
+ if (err != SQLITE_OK)
+ goto error;
+ sqlite3_busy_timeout(db, 5000);
+
+ wchar_t *sql =
+ L"select"
+ COLUMNS
+ L" from dat"
+ L" where lastpublish < ?"
+ L" order by lastpublish"
+ L" limit ?;";
+
+ err = sqlite3_prepare16_v2(db, sql, wcslen(sql)*2, &stmt, NULL);
+ if (err != SQLITE_OK)
+ goto error;
+
+ if (!bind(db, stmt, 1, time(NULL)-publish_tt))
+ goto error;
+ if (!bind(db, stmt, 2, limit))
+ goto error;
+
+ while (sqlite3_step(stmt) == SQLITE_ROW) {
+ get_columns(stmt, rec);
+ out.push_back(rec);
+ }
+
+ sqlite3_finalize(stmt);
+ stmt = NULL;
+
+ err = sqlite3_close(db);
+ if (err != SQLITE_OK)
+ goto error;
+
+ return true;
+
+error:
+ log(db);
+ if (stmt) sqlite3_finalize(stmt);
+ if (db) sqlite3_close(db);
+ return false;
+}
+
+
+
+
+uint64
+O2DatDB::
+select_datcount(void)
+{
+#if TRACE_SQL_EXEC_TIME
+ stopwatch sw("select datcount");
+#endif
+
+ sqlite3 *db = NULL;
+ sqlite3_stmt *stmt = NULL;
+
+ int err = sqlite3_open16(dbfilename.c_str(), &db);
+ if (err != SQLITE_OK)
+ goto error;
+
+ sqlite3_busy_timeout(db, 5000);
+
+ wchar_t *sql = L"select count(*) from dat;";
+
+ err = sqlite3_prepare16_v2(db, sql, wcslen(sql)*2, &stmt, NULL);
+ if (err != SQLITE_OK)
+ goto error;
+
+ err = sqlite3_step(stmt);
+ if (err != SQLITE_ROW && err != SQLITE_DONE)
+ goto error;
+
+ uint64 count = sqlite3_column_int64(stmt,0);
+
+ sqlite3_finalize(stmt);
+ stmt = NULL;
+
+ err = sqlite3_close(db);
+ if (err != SQLITE_OK)
+ goto error;
+
+ return (count);
+
+error:
+ log(db);
+ if (stmt) sqlite3_finalize(stmt);
+ if (db) sqlite3_close(db);
+ return (0);
+}
+
+
+
+
+uint64
+O2DatDB::
+select_datcount(wstrnummap &out)
+{
+#if TRACE_SQL_EXEC_TIME
+ stopwatch sw("select datcount group by domain bbsname");
+#endif
+
+ sqlite3 *db = NULL;
+ sqlite3_stmt *stmt = NULL;
+ wstring domain_bbsname;
+ uint64 total = 0;
+ uint64 num;
+
+ int err = sqlite3_open16(dbfilename.c_str(), &db);
+ if (err != SQLITE_OK)
+ goto error;
+ sqlite3_busy_timeout(db, 5000);
+
+ wchar_t *sql =
+ L"select domain, bbsname, count(*) from dat group by domain, bbsname;";
+
+ err = sqlite3_prepare16_v2(db, sql, wcslen(sql)*2, &stmt, NULL);
+ if (err != SQLITE_OK)
+ goto error;
+
+ while (sqlite3_step(stmt) == SQLITE_ROW) {
+ domain_bbsname = (wchar_t*)sqlite3_column_text16(stmt, 0);
+ domain_bbsname += L":";
+ domain_bbsname += (wchar_t*)sqlite3_column_text16(stmt, 1);
+ num = sqlite3_column_int64(stmt, 2);
+
+ out.insert(wstrnummap::value_type(domain_bbsname, num));
+ total += num;
+ }
+
+ sqlite3_finalize(stmt);
+ stmt = NULL;
+
+ err = sqlite3_close(db);
+ if (err != SQLITE_OK)
+ goto error;
+ return (total);
+
+error:
+ log(db);
+ if (stmt) sqlite3_finalize(stmt);
+ if (db) sqlite3_close(db);
+ return false;
+}
+
+
+
+
+uint64
+O2DatDB::
+select_totaldisksize(void)
+{
+#if TRACE_SQL_EXEC_TIME
+ stopwatch sw("select totakdisksize");
+#endif
+
+ sqlite3 *db = NULL;
+ sqlite3_stmt *stmt = NULL;
+
+ int err = sqlite3_open16(dbfilename.c_str(), &db);
+ if (err != SQLITE_OK)
+ goto error;
+ sqlite3_busy_timeout(db, 5000);
+
+ wchar_t *sql = L"select sum(disksize) from dat;";
+
+ err = sqlite3_prepare16_v2(db, sql, wcslen(sql)*2, &stmt, NULL);
+ if (err != SQLITE_OK)
+ goto error;
+
+ err = sqlite3_step(stmt);
+ if (err != SQLITE_ROW && err != SQLITE_DONE)
+ goto error;
+
+ uint64 totalsize = sqlite3_column_int64(stmt,0);
+
+ sqlite3_finalize(stmt);
+ stmt = NULL;
+
+ err = sqlite3_close(db);
+ if (err != SQLITE_OK)
+ goto error;
+
+ return (totalsize);
+
+error:
+ log(db);
+ if (stmt) sqlite3_finalize(stmt);
+ if (db) sqlite3_close(db);
+ return (0);
+}
+
+
+
+
+uint64
+O2DatDB::
+select_publishcount(time_t publish_tt)
+{
+#if TRACE_SQL_EXEC_TIME
+ stopwatch sw("select datcount by lastpublish");
+#endif
+
+ sqlite3 *db = NULL;
+ sqlite3_stmt *stmt = NULL;
+
+ int err = sqlite3_open16(dbfilename.c_str(), &db);
+ if (err != SQLITE_OK)
+ goto error;
+ sqlite3_busy_timeout(db, 5000);
+
+ wchar_t *sql = L"select count(*) from dat where lastpublish > ?;";
+
+ err = sqlite3_prepare16_v2(db, sql, wcslen(sql)*2, &stmt, NULL);
+ if (err != SQLITE_OK)
+ goto error;
+
+ if (!bind(db, stmt, 1, time(NULL)-publish_tt))
+ goto error;
+
+ err = sqlite3_step(stmt);
+ if (err != SQLITE_ROW && err != SQLITE_DONE)
+ goto error;
+
+ uint64 count = sqlite3_column_int64(stmt,0);
+
+ sqlite3_finalize(stmt);
+ stmt = NULL;
+
+ err = sqlite3_close(db);
+ if (err != SQLITE_OK)
+ goto error;
+
+ return (count);
+
+error:
+ log(db);
+ if (stmt) sqlite3_finalize(stmt);
+ if (db) sqlite3_close(db);
+ return (0);
+}
+
+
+
+
+#if 0
+bool
+O2DatDB::
+update(O2DatRec &in, bool is_origurl)
+{
+ sqlite3 *db = NULL;
+ sqlite3_stmt* stmt;
+ O2DatRec org;
+
+ int err = sqlite3_open16(dbfilename.c_str(), &db);
+ if (err != SQLITE_OK)
+ goto error;
+ sqlite3_busy_timeout(db, 5000);
+
+ if (select(org, in.hash)) {
+ wchar_t *sql =
+ L"update or replace dat"
+ L" set size = ?"
+ L" , disksize = ?"
+ L" , url = ?"
+ L" , res = ?"
+ L" , lastupdate = ?"
+ L" , lastpublish = 0"
+ L" where hash = ?;";
+
+ err = sqlite3_prepare16_v2(db, sql, wcslen(sql)*2, &stmt, NULL);
+ if (err != SQLITE_OK)
+ goto error;
+
+ if (!is_origurl)
+ in.url = org.url;
+ if (!bind(db, stmt, 1, in.size))
+ goto error;
+ if (!bind(db, stmt, 2, in.disksize))
+ goto error;
+ if (!bind(db, stmt, 3, in.url))
+ goto error;
+ if (!bind(db, stmt, 4, in.res))
+ goto error;
+ if (!bind(db, stmt, 5, time(NULL)))
+ goto error;
+ if (!bind(db, stmt, 6, in.hash))
+ goto error;
+
+ err = sqlite3_step(stmt);
+ if (err != SQLITE_ROW && err != SQLITE_DONE)
+ goto error;
+ sqlite3_finalize(stmt);
+ stmt = NULL;
+ }
+ else {
+ wchar_t *sql =
+ L"insert or replace into dat ("
+ COLUMNS
+ L") values ("
+ L"?,?,?,?,?,?,?,?,?,?,?"
+ L");";
+
+ err = sqlite3_prepare16_v2(db, sql, wcslen(sql)*2, &stmt, NULL);
+ if (err != SQLITE_OK)
+ goto error;
+
+ if (!bind(db, stmt, 1, in.hash))
+ goto error;
+ if (!bind(db, stmt, 2, in.domain))
+ goto error;
+ if (!bind(db, stmt, 3, in.bbsname))
+ goto error;
+ if (!bind(db, stmt, 4, in.datname))
+ goto error;
+ if (!bind(db, stmt, 5, in.size))
+ goto error;
+ if (!bind(db, stmt, 6, in.disksize))
+ goto error;
+ if (!bind(db, stmt, 7, in.url))
+ goto error;
+ if (!bind(db, stmt, 8, in.title))
+ goto error;
+ if (!bind(db, stmt, 9, in.res))
+ goto error;
+ if (!bind(db, stmt, 10, time(NULL)))
+ goto error;
+ if (!bind(db, stmt, 11, (uint64)0))
+ goto error;
+
+ err = sqlite3_step(stmt);
+ if (err != SQLITE_ROW && err != SQLITE_DONE)
+ goto error;
+ sqlite3_finalize(stmt);
+ stmt = NULL;
+ }
+
+ err = sqlite3_close(db);
+ if (err != SQLITE_OK)
+ goto error;
+
+ return true;
+
+error:
+ log(db);
+ if (stmt) sqlite3_finalize(stmt);
+ if (db) sqlite3_close(db);
+ return false;
+}
+#endif
+
+
+
+void
+O2DatDB::
+update(O2DatRecList &in)
+{
+#if TRACE_SQL_EXEC_TIME
+ stopwatch sw("update by reclist");
+#endif
+
+ sqlite3 *db = NULL;
+ sqlite3_stmt *stmt_insert = NULL;
+ sqlite3_stmt *stmt_update = NULL;
+ sqlite3_stmt *stmt_updatepublish = NULL;
+ O2DatRec org;
+
+ int err = sqlite3_open16(dbfilename.c_str(), &db);
+ if (err != SQLITE_OK)
+ goto error;
+ sqlite3_busy_timeout(db, 5000);
+
+ wchar_t *sql_insert =
+ L"insert or replace into dat ("
+ COLUMNS
+ L") values ("
+ L"?,?,?,?,?,?,?,?,?,?,?"
+ L");";
+ err = sqlite3_prepare16_v2(db, sql_insert, wcslen(sql_insert)*2, &stmt_insert, NULL);
+ if (err != SQLITE_OK)
+ goto error;
+
+ wchar_t *sql_update =
+ L"update or replace dat"
+ L" set size = ?"
+ L" , disksize = ?"
+ L" , url = ?"
+ L" , res = ?"
+ L" , lastupdate = ?"
+// L" , lastpublish = 0"
+ L" where hash = ?;";
+
+ err = sqlite3_prepare16_v2(db, sql_update, wcslen(sql_update)*2, &stmt_update, NULL);
+ if (err != SQLITE_OK)
+ goto error;
+
+ wchar_t *sql_updatepublish =
+ L"update or replace dat"
+ L" set lastpublish = ?"
+ L" where hash = ?;";
+
+ err = sqlite3_prepare16_v2(db, sql_updatepublish, wcslen(sql_updatepublish)*2, &stmt_updatepublish, NULL);
+ if (err != SQLITE_OK)
+ goto error;
+
+ //
+ // Loop
+ //
+ sqlite3_exec(db, "begin;", NULL, NULL, NULL);
+ for (O2DatRecListIt it = in.begin(); it != in.end(); it++) {
+ if (!select(org, it->hash)) {
+ sqlite3_reset(stmt_insert);
+ if (!bind(db, stmt_insert, 1, it->hash))
+ goto error;
+ if (!bind(db, stmt_insert, 2, it->domain))
+ goto error;
+ if (!bind(db, stmt_insert, 3, it->bbsname))
+ goto error;
+ if (!bind(db, stmt_insert, 4, it->datname))
+ goto error;
+ if (!bind(db, stmt_insert, 5, it->size))
+ goto error;
+ if (!bind(db, stmt_insert, 6, it->disksize))
+ goto error;
+ if (!bind(db, stmt_insert, 7, it->url))
+ goto error;
+ if (!bind(db, stmt_insert, 8, it->title))
+ goto error;
+ if (!bind(db, stmt_insert, 9, it->res))
+ goto error;
+ if (!bind(db, stmt_insert, 10, time(NULL)))
+ goto error;
+ if (!bind(db, stmt_insert, 11, (uint64)0))
+ goto error;
+
+ err = sqlite3_step(stmt_insert);
+ if (err != SQLITE_ROW && err != SQLITE_DONE)
+ goto error;
+ }
+ else if (it->userdata == 0) {
+ sqlite3_reset(stmt_update);
+ if (!bind(db, stmt_update, 1, it->size))
+ goto error;
+ if (!bind(db, stmt_update, 2, it->disksize))
+ goto error;
+ if (!bind(db, stmt_update, 3, (wcsstr(org.url.c_str(), L"xxx") == 0 ? it->url : org.url)))
+ goto error;
+ if (!bind(db, stmt_update, 4, it->res))
+ goto error;
+ if (!bind(db, stmt_update, 5, time(NULL)))
+ goto error;
+// if (!bind(db, stmt_update, 6, (uint64)0))
+// goto error;
+
+ err = sqlite3_step(stmt_update);
+ if (err != SQLITE_ROW && err != SQLITE_DONE)
+ goto error;
+ }
+ else {
+ sqlite3_reset(stmt_updatepublish);
+ if (!bind(db, stmt_updatepublish, 1, time(NULL)))
+ goto error;
+ if (!bind(db, stmt_updatepublish, 2, it->hash))
+ goto error;
+
+ err = sqlite3_step(stmt_updatepublish);
+ if (err != SQLITE_ROW && err != SQLITE_DONE)
+ goto error;
+ }
+ Sleep(1);
+ }
+ sqlite3_exec(db, "commit;", NULL, NULL, NULL);
+
+ sqlite3_finalize(stmt_insert);
+ sqlite3_finalize(stmt_update);
+ sqlite3_finalize(stmt_updatepublish);
+ stmt_insert = NULL;
+ stmt_update = NULL;
+ stmt_updatepublish = NULL;
+
+ err = sqlite3_close(db);
+ if (err != SQLITE_OK)
+ goto error;
+
+ return;
+
+error:
+ log(db);
+ if (stmt_insert) sqlite3_finalize(stmt_insert);
+ if (stmt_update) sqlite3_finalize(stmt_update);
+ if (stmt_updatepublish) sqlite3_finalize(stmt_updatepublish);
+ if (db) sqlite3_close(db);
+ return;
+}
+
+
+
+
+#if 0
+bool
+O2DatDB::
+update_lastpublish(const hashT &hash)
+{
+ sqlite3 *db = NULL;
+ int err = sqlite3_open16(dbfilename.c_str(), &db);
+ if (err != SQLITE_OK)
+ goto error;
+ sqlite3_busy_timeout(db, 5000);
+
+ wchar_t *sql =
+ L"update or replace dat"
+ L" set lastpublish = ?"
+ L" where hash = ?;";
+
+ sqlite3_stmt *stmt = NULL;
+ err = sqlite3_prepare16_v2(db, sql, wcslen(sql)*2, &stmt, NULL);
+ if (err != SQLITE_OK)
+ goto error;
+
+ if (!bind(db, stmt, 1, time(NULL)))
+ goto error;
+ if (!bind(db, stmt, 2, hash))
+ goto error;
+
+ err = sqlite3_step(stmt);
+ if (err != SQLITE_ROW && err != SQLITE_DONE)
+ goto error;
+
+ sqlite3_finalize(stmt);
+ stmt = NULL;
+
+ err = sqlite3_close(db);
+ if (err != SQLITE_OK)
+ goto error;
+
+ return true;
+
+error:
+ log(db);
+ if (stmt) sqlite3_finalize(stmt);
+ if (db) sqlite3_close(db);
+ return false;
+}
+#endif
+
+
+
+
+bool
+O2DatDB::
+remove(const hashT &hash)
+{
+#if TRACE_SQL_EXEC_TIME
+ stopwatch sw("remove");
+#endif
+
+ sqlite3 *db = NULL;
+ int err = sqlite3_open16(dbfilename.c_str(), &db);
+ if (err != SQLITE_OK)
+ goto error;
+ sqlite3_busy_timeout(db, 5000);
+
+ wchar_t *sql =
+ L"delete from dat where hash = ?;";
+
+ sqlite3_stmt *stmt = NULL;
+ err = sqlite3_prepare16_v2(db, sql, wcslen(sql)*2, &stmt, NULL);
+ if (err != SQLITE_OK)
+ goto error;
+
+ if (!bind(db, stmt, 1, hash))
+ goto error;
+
+ err = sqlite3_step(stmt);
+ if (err != SQLITE_ROW && err != SQLITE_DONE)
+ goto error;
+
+ sqlite3_finalize(stmt);
+ stmt = NULL;
+
+ err = sqlite3_close(db);
+ if (err != SQLITE_OK)
+ goto error;
+
+ return true;
+
+error:
+ log(db);
+ if (stmt) sqlite3_finalize(stmt);
+ if (db) sqlite3_close(db);
+ return false;
+}
+
+
+
+
+#else
+void
+O2DatDB::
log(ISC_STATUS_ARRAY &status)
{
string errmsg;
@@ -110,19 +1332,11 @@
}
Logger->AddLog(O2LT_ERROR, L"Firebird", 0, 0, "%s", errmsg.c_str());
}
-#else
-void
-O2DatDB::
-log(sqlite3 *db)
-{
- Logger->AddLog(O2LT_ERROR, L"SQLite", 0, 0, sqlite3_errmsg(db));
-}
-#endif
-#ifdef O2_DB_FIREBIRD
+
bool
O2DatDB::
bind(XSQLDA *sqlda, int index, const uint64 num)
@@ -366,121 +1580,17 @@
sqlda = NULL;
return;
}
-#else
-bool
-O2DatDB::
-bind(sqlite3 *db, sqlite3_stmt* stmt, int index, const uint64 num)
-{
- int err = sqlite3_bind_int64(stmt, index, num);
- return (err == SQLITE_OK ? true : false);
-}
-bool
-O2DatDB::
-bind(sqlite3 *db, sqlite3_stmt* stmt, int index, const wchar_t *str)
-{
- int err = sqlite3_bind_text16(
- stmt, index, str, wcslen(str)*sizeof(wchar_t), SQLITE_STATIC);
- return (err == SQLITE_OK ? true : false);
-}
-bool
-O2DatDB::
-bind(sqlite3 *db, sqlite3_stmt* stmt, int index, const wstring &str)
-{
- int err = sqlite3_bind_text16(
- stmt, index, str.c_str(), str.size()*sizeof(wchar_t), SQLITE_STATIC);
- return (err == SQLITE_OK ? true : false);
-}
bool
O2DatDB::
-bind(sqlite3 *db, sqlite3_stmt* stmt, int index, const hashT &hash)
-{
- int err = sqlite3_bind_blob(
- stmt, index, hash.data(), hash.size(), SQLITE_STATIC);
- return (err == SQLITE_OK ? true : false);
-}
-
-void
-O2DatDB::
-get_columns(sqlite3_stmt* stmt, O2DatRec &rec)
-{
- rec.hash.assign((byte*)sqlite3_column_blob(stmt, 0), HASHSIZE);
- rec.domain = (wchar_t*)sqlite3_column_text16(stmt, 1);
- rec.bbsname = (wchar_t*)sqlite3_column_text16(stmt, 2);
- rec.datname = (wchar_t*)sqlite3_column_text16(stmt, 3);
- rec.size = sqlite3_column_int64 (stmt, 4);
- rec.disksize = sqlite3_column_int64 (stmt, 5);
- rec.url = (wchar_t*)sqlite3_column_text16(stmt, 6);
- rec.title = (wchar_t*)sqlite3_column_text16(stmt, 7);
- rec.res = sqlite3_column_int64 (stmt, 8);
- rec.lastupdate = sqlite3_column_int64 (stmt, 9);
- rec.lastpublish = sqlite3_column_int64 (stmt, 10);
-}
-
-void
-O2DatDB::
-get_columns(sqlite3_stmt* stmt, wstrarray &cols)
-{
- __int64 t_int;
- double t_float;
- wstring t_text;
- byte *t_byte;
- int size;
- wchar_t tmp[1024];
-
- int column_count = sqlite3_column_count(stmt);
- for (int i = 0; i < column_count; i++) {
- switch (sqlite3_column_type(stmt, i)) {
- case SQLITE_INTEGER:
- t_int = sqlite3_column_int64 (stmt, i);
- swprintf_s(tmp, 1024, L"%I64u", t_int);
- cols.push_back(tmp);
- break;
- case SQLITE_FLOAT:
- t_float = sqlite3_column_double(stmt, i);
- swprintf_s(tmp, 1024, L"%lf", t_float);
- cols.push_back(tmp);
- break;
- case SQLITE_TEXT:
- t_text = (wchar_t*)sqlite3_column_text16(stmt, i);
- cols.push_back(t_text);
- break;
- case SQLITE_BLOB:
- size = sqlite3_column_bytes(stmt, i);
- t_byte = new byte[size];
- memcpy(t_byte, (byte*)sqlite3_column_blob(stmt, i), size);
- byte2whex(t_byte, size, t_text);
- cols.push_back(t_text);
- delete [] t_byte;
- break;
- }
- }
-}
-
-void
-O2DatDB::
-get_column_names(sqlite3_stmt* stmt, wstrarray &cols)
-{
- int column_count = sqlite3_column_count(stmt);
- for (int i = 0; i < column_count; i++) {
- cols.push_back((wchar_t*)sqlite3_column_name16(stmt, i));
- }
-}
-#endif
-
-
-
-
-bool
-O2DatDB::
create_table(void)
{
#if TRACE_SQL_EXEC_TIME
stopwatch sw("create table/index and analyze");
#endif
-#ifdef O2_DB_FIREBIRD
+
isc_db_handle db = NULL;
isc_tr_handle tr = NULL;
isc_stmt_handle stmt = NULL;
@@ -543,66 +1653,8 @@
if (tr) isc_rollback_transaction(status, &tr);
if (db) isc_detach_database(status, &db);
return (false);
-#else
- sqlite3 *db = NULL;
- int err = sqlite3_open16(dbfilename.c_str(), &db);
- if (err != SQLITE_OK)
- goto error;
-
- char *sql =
- "create table if not exists dat ("
- " hash BLOB,"
- " domain TEXT,"
- " bbsname TEXT,"
- " datname TEXT,"
- " size INTEGER,"
- " disksize INTEGER,"
- " url TEXT,"
- " title TEXT,"
- " res INTEGER,"
- " lastupdate INTEGER,"
- " lastpublish INTEGER,"
-// " flags INTEGER,"
-// " matchbytes INTEGER,"
-// " matchbytes1 INTEGER,"
-// " matchbytes2 INTEGER,"
- " PRIMARY KEY (hash)"
- ");"
- "drop index if exists idx_dat_domain;"
- "drop index if exists idx_dat_bbsname;"
- "drop index if exists idx_dat_datname;"
- "create index if not exists idx_dat_domain_bbsname_datname on dat (domain, bbsname, datname);"
- "create index if not exists idx_dat_lastpublish on dat (lastpublish);"
- "analyze;";
- err = sqlite3_exec(db, sql, NULL, 0, 0);
- if (err != SQLITE_OK)
- goto error;
-/*
- sql =
- "alter table dat add column flags INTEGER;"
- "alter table dat add column matchbytes INTEGER;"
- "alter table dat add column matchbytes1 INTEGER;"
- "alter table dat add column matchbytes2 INTEGER;";
- err = sqlite3_exec(db, sql, NULL, 0, 0);
- //if (err != SQLITE_OK)
- // goto error;
-*/
- err = sqlite3_close(db);
- if (err != SQLITE_OK)
- goto error;
- return true;
-
-error:
- log(db);
- if (db) sqlite3_close(db);
- return false;
-#endif
}
-
-
-
-#ifdef O2_DB_FIREBIRD
bool
O2DatDB::
reindex(const char *target)
@@ -1652,1049 +2704,14 @@
free_xsqlda(inda);
return (false);
}
-#else
-bool
-O2DatDB::
-reindex(const char *target)
-{
-#if TRACE_SQL_EXEC_TIME
- stopwatch sw("reindex");
#endif
- sqlite3 *db = NULL;
- int err = sqlite3_open16(dbfilename.c_str(), &db);
- if (err != SQLITE_OK)
- goto error;
- char sql[64];
- sprintf_s(sql, 64, "reindex %s;", target);
- err = sqlite3_exec(db, sql, NULL, 0, 0);
- if (err != SQLITE_OK)
- goto error;
- err = sqlite3_close(db);
- if (err != SQLITE_OK)
- goto error;
- return true;
-
-error:
- log(db);
- if (db) sqlite3_close(db);
- return false;
-}
-
-
-
-
-size_t
-O2DatDB::
-select(const wchar_t *sql, SQLResultList &out)
-{
-#if TRACE_SQL_EXEC_TIME
- stopwatch sw("select");
-#endif
- wstrarray cols;
-
- sqlite3 *db = NULL;
- int err = sqlite3_open16(dbfilename.c_str(), &db);
- if (err != SQLITE_OK)
- goto error;
- sqlite3_busy_timeout(db, 5000);
-
- sqlite3_stmt *stmt = NULL;
- err = sqlite3_prepare16_v2(db, sql, wcslen(sql)*2, &stmt, NULL);
- if (err != SQLITE_OK)
- goto error;
- sqlite3_reset(stmt);
-
- err = sqlite3_step(stmt);
- if (err != SQLITE_ROW && err != SQLITE_DONE)
- goto error;
-
- if (out.empty()) {
- //???
- cols.clear();
- get_column_names(stmt, cols);
- out.push_back(cols);
- cols.clear();
- get_columns(stmt, cols);
- out.push_back(cols);
- }
- while (sqlite3_step(stmt) == SQLITE_ROW) {
- //2????
- cols.clear();
- get_columns(stmt, cols);
- out.push_back(cols);
- }
-
- sqlite3_finalize(stmt);
- stmt = NULL;
-
- err = sqlite3_close(db);
- if (err != SQLITE_OK)
- goto error;
-
- return (out.size());
-
-error:
- log(db);
- if (stmt) sqlite3_finalize(stmt);
- if (db) sqlite3_close(db);
- return (0);
-}
-
-
-
-bool
-O2DatDB::
-select(O2DatRec &out)
-{
-#if TRACE_SQL_EXEC_TIME
- stopwatch sw("select random 1");
-#endif
-
- bool ret = true;
- sqlite3 *db = NULL;
- int err = sqlite3_open16(dbfilename.c_str(), &db);
- if (err != SQLITE_OK)
- goto error;
- sqlite3_busy_timeout(db, 5000);
-
- wchar_t *sql =
- L"select"
- COLUMNS
- L" from dat"
- L" order by random() limit 1;";
-
- sqlite3_stmt *stmt = NULL;
- err = sqlite3_prepare16_v2(db, sql, wcslen(sql)*2, &stmt, NULL);
- if (err != SQLITE_OK)
- goto error;
- sqlite3_reset(stmt);
-
- err = sqlite3_step(stmt);
- if (err != SQLITE_ROW && err != SQLITE_DONE)
- goto error;
-
- if (err == SQLITE_DONE)
- ret = false;
- if (err == SQLITE_ROW)
- get_columns(stmt, out);
-
- sqlite3_finalize(stmt);
- stmt = NULL;
-
- err = sqlite3_close(db);
- if (err != SQLITE_OK)
- goto error;
-
- return (ret);
-
-error:
- log(db);
- if (stmt) sqlite3_finalize(stmt);
- if (db) sqlite3_close(db);
- return false;
-}
-
-
-
-bool
-O2DatDB::
-select(O2DatRec &out, hashT hash)
-{
-#if TRACE_SQL_EXEC_TIME
- stopwatch sw("select by hash");
-#endif
-
- bool ret = true;
- sqlite3 *db = NULL;
- int err = sqlite3_open16(dbfilename.c_str(), &db);
- if (err != SQLITE_OK)
- goto error;
- sqlite3_busy_timeout(db, 5000);
-
- wchar_t *sql =
- L"select"
- COLUMNS
- L" from dat"
- L" where hash = ?;";
-
- sqlite3_stmt *stmt = NULL;
- err = sqlite3_prepare16_v2(db, sql, wcslen(sql)*2, &stmt, NULL);
- if (err != SQLITE_OK)
- goto error;
-
- if (!bind(db, stmt, 1, hash))
- goto error;
-
- err = sqlite3_step(stmt);
- if (err != SQLITE_ROW && err != SQLITE_DONE)
- goto error;
- if (err == SQLITE_DONE)
- ret = false;
- if (err == SQLITE_ROW)
- get_columns(stmt, out);
-
- sqlite3_finalize(stmt);
- stmt = NULL;
-
- err = sqlite3_close(db);
- if (err != SQLITE_OK)
- goto error;
-
- return (ret);
-
-error:
- log(db);
- if (stmt) sqlite3_finalize(stmt);
- if (db) sqlite3_close(db);
- return false;
-}
-
-bool
-O2DatDB::
-select(O2DatRec &out, const wchar_t *domain, const wchar_t *bbsname)
-{
-#if TRACE_SQL_EXEC_TIME
- stopwatch sw("select by domain bbsname");
-#endif
-
- bool ret = true;
- sqlite3 *db = NULL;
- int err = sqlite3_open16(dbfilename.c_str(), &db);
- if (err != SQLITE_OK)
- goto error;
- sqlite3_busy_timeout(db, 5000);
-
- wchar_t *sql =
- L"select"
- COLUMNS
- L" from dat"
- L" where domain = ?"
- L" and bbsname = ?"
- L" order by random() limit 1;";
-
- sqlite3_stmt *stmt = NULL;
- err = sqlite3_prepare16_v2(db, sql, wcslen(sql)*2, &stmt, NULL);
- if (err != SQLITE_OK)
- goto error;
-
- if (!bind(db, stmt, 1, domain))
- goto error;
- if (!bind(db, stmt, 2, bbsname))
- goto error;
-
- err = sqlite3_step(stmt);
- if (err != SQLITE_ROW && err != SQLITE_DONE)
- goto error;
-
- if (err == SQLITE_DONE)
- ret = false;
- if (err == SQLITE_ROW)
- get_columns(stmt, out);
-
- sqlite3_finalize(stmt);
- stmt = NULL;
-
- err = sqlite3_close(db);
- if (err != SQLITE_OK)
- goto error;
-
- return (ret);
-
-error:
- log(db);
- if (stmt) sqlite3_finalize(stmt);
- if (db) sqlite3_close(db);
- return false;
-}
-
-
-
-
-bool
-O2DatDB::
-select(O2DatRec &out, const wchar_t *domain, const wchar_t *bbsname, const wchar_t *datname)
-{
-#if TRACE_SQL_EXEC_TIME
- stopwatch sw("select by domain bbsname datname");
-#endif
-
- bool ret = true;
- sqlite3 *db = NULL;
- int err = sqlite3_open16(dbfilename.c_str(), &db);
- if (err != SQLITE_OK)
- goto error;
- sqlite3_busy_timeout(db, 5000);
-
- wchar_t *sql =
- L"select"
- COLUMNS
- L" from dat"
- L" where domain = ?"
- L" and bbsname = ?"
- L" and datname = ?;";
-
- sqlite3_stmt *stmt = NULL;
- err = sqlite3_prepare16_v2(db, sql, wcslen(sql)*2, &stmt, NULL);
- if (err != SQLITE_OK)
- goto error;
-
- if (!bind(db, stmt, 1, domain))
- goto error;
- if (!bind(db, stmt, 2, bbsname))
- goto error;
- if (!bind(db, stmt, 3, datname))
- goto error;
-
- err = sqlite3_step(stmt);
- if (err != SQLITE_ROW && err != SQLITE_DONE)
- goto error;
-
- if (err == SQLITE_DONE)
- ret = false;
- if (err == SQLITE_ROW)
- get_columns(stmt, out);
-
- sqlite3_finalize(stmt);
- stmt = NULL;
-
- err = sqlite3_close(db);
- if (err != SQLITE_OK)
- goto error;
-
- return (ret);
-
-error:
- log(db);
- if (stmt) sqlite3_finalize(stmt);
- if (db) sqlite3_close(db);
- return false;
-}
-
-
-
-
-bool
-O2DatDB::
-select(O2DatRecList &out)
-{
-#if TRACE_SQL_EXEC_TIME
- stopwatch sw("select all");
-#endif
-
- sqlite3 *db = NULL;
- sqlite3_stmt *stmt = NULL;
- O2DatRec rec;
-
- int err = sqlite3_open16(dbfilename.c_str(), &db);
- if (err != SQLITE_OK)
- goto error;
- sqlite3_busy_timeout(db, 5000);
-
- wchar_t *sql =
- L"select"
- COLUMNS
- L" from dat;";
-
- err = sqlite3_prepare16_v2(db, sql, wcslen(sql)*2, &stmt, NULL);
- if (err != SQLITE_OK)
- goto error;
-
- while (sqlite3_step(stmt) == SQLITE_ROW) {
- get_columns(stmt, rec);
- out.push_back(rec);
- }
-
- sqlite3_finalize(stmt);
- stmt = NULL;
-
- err = sqlite3_close(db);
- if (err != SQLITE_OK)
- goto error;
- return true;
-
-error:
- log(db);
- if (stmt) sqlite3_finalize(stmt);
- if (db) sqlite3_close(db);
- return false;
-}
-
-
-
-
-bool
-O2DatDB::
-select(O2DatRecList &out, const wchar_t *domain, const wchar_t *bbsname)
-{
-#if TRACE_SQL_EXEC_TIME
- stopwatch sw("select domain bbsname order by datname");
-#endif
-
- sqlite3 *db = NULL;
- sqlite3_stmt *stmt = NULL;
- O2DatRec rec;
-
- int err = sqlite3_open16(dbfilename.c_str(), &db);
- if (err != SQLITE_OK)
- goto error;
- sqlite3_busy_timeout(db, 5000);
-
- wchar_t *sql =
- L"select"
- COLUMNS
- L" from dat"
- L" where domain = ?"
- L" and bbsname = ?"
- L" order by datname;";
-
- err = sqlite3_prepare16_v2(db, sql, wcslen(sql)*2, &stmt, NULL);
- if (err != SQLITE_OK)
- goto error;
-
- if (!bind(db, stmt, 1, domain))
- goto error;
- if (!bind(db, stmt, 2, bbsname))
- goto error;
-
- while (sqlite3_step(stmt) == SQLITE_ROW) {
- get_columns(stmt, rec);
- out.push_back(rec);
- }
-
- sqlite3_finalize(stmt);
- stmt = NULL;
-
- err = sqlite3_close(db);
- if (err != SQLITE_OK)
- goto error;
- return true;
-
-error:
- log(db);
- if (stmt) sqlite3_finalize(stmt);
- if (db) sqlite3_close(db);
- return false;
-}
-
-
-
-
-bool
-O2DatDB::
-select(O2DatRecList &out, time_t publish_tt, size_t limit)
-{
-#if TRACE_SQL_EXEC_TIME
- stopwatch sw("select lastpublish");
-#endif
-
- sqlite3 *db = NULL;
- sqlite3_stmt *stmt = NULL;
- O2DatRec rec;
-
- int err = sqlite3_open16(dbfilename.c_str(), &db);
- if (err != SQLITE_OK)
- goto error;
- sqlite3_busy_timeout(db, 5000);
-
- wchar_t *sql =
- L"select"
- COLUMNS
- L" from dat"
- L" where lastpublish < ?"
- L" order by lastpublish"
- L" limit ?;";
-
- err = sqlite3_prepare16_v2(db, sql, wcslen(sql)*2, &stmt, NULL);
- if (err != SQLITE_OK)
- goto error;
-
- if (!bind(db, stmt, 1, time(NULL)-publish_tt))
- goto error;
- if (!bind(db, stmt, 2, limit))
- goto error;
-
- while (sqlite3_step(stmt) == SQLITE_ROW) {
- get_columns(stmt, rec);
- out.push_back(rec);
- }
-
- sqlite3_finalize(stmt);
- stmt = NULL;
-
- err = sqlite3_close(db);
- if (err != SQLITE_OK)
- goto error;
-
- return true;
-
-error:
- log(db);
- if (stmt) sqlite3_finalize(stmt);
- if (db) sqlite3_close(db);
- return false;
-}
-
-
-
-
-uint64
-O2DatDB::
-select_datcount(void)
-{
-#if TRACE_SQL_EXEC_TIME
- stopwatch sw("select datcount");
-#endif
-
- sqlite3 *db = NULL;
- sqlite3_stmt *stmt = NULL;
-
- int err = sqlite3_open16(dbfilename.c_str(), &db);
- if (err != SQLITE_OK)
- goto error;
-
- sqlite3_busy_timeout(db, 5000);
-
- wchar_t *sql = L"select count(*) from dat;";
-
- err = sqlite3_prepare16_v2(db, sql, wcslen(sql)*2, &stmt, NULL);
- if (err != SQLITE_OK)
- goto error;
-
- err = sqlite3_step(stmt);
- if (err != SQLITE_ROW && err != SQLITE_DONE)
- goto error;
-
- uint64 count = sqlite3_column_int64(stmt,0);
-
- sqlite3_finalize(stmt);
- stmt = NULL;
-
- err = sqlite3_close(db);
- if (err != SQLITE_OK)
- goto error;
-
- return (count);
-
-error:
- log(db);
- if (stmt) sqlite3_finalize(stmt);
- if (db) sqlite3_close(db);
- return (0);
-}
-
-
-
-
-uint64
-O2DatDB::
-select_datcount(wstrnummap &out)
-{
-#if TRACE_SQL_EXEC_TIME
- stopwatch sw("select datcount group by domain bbsname");
-#endif
-
- sqlite3 *db = NULL;
- sqlite3_stmt *stmt = NULL;
- wstring domain_bbsname;
- uint64 total = 0;
- uint64 num;
-
- int err = sqlite3_open16(dbfilename.c_str(), &db);
- if (err != SQLITE_OK)
- goto error;
- sqlite3_busy_timeout(db, 5000);
-
- wchar_t *sql =
- L"select domain, bbsname, count(*) from dat group by domain, bbsname;";
-
- err = sqlite3_prepare16_v2(db, sql, wcslen(sql)*2, &stmt, NULL);
- if (err != SQLITE_OK)
- goto error;
-
- while (sqlite3_step(stmt) == SQLITE_ROW) {
- domain_bbsname = (wchar_t*)sqlite3_column_text16(stmt, 0);
- domain_bbsname += L":";
- domain_bbsname += (wchar_t*)sqlite3_column_text16(stmt, 1);
- num = sqlite3_column_int64(stmt, 2);
-
- out.insert(wstrnummap::value_type(domain_bbsname, num));
- total += num;
- }
-
- sqlite3_finalize(stmt);
- stmt = NULL;
-
- err = sqlite3_close(db);
- if (err != SQLITE_OK)
- goto error;
- return (total);
-
-error:
- log(db);
- if (stmt) sqlite3_finalize(stmt);
- if (db) sqlite3_close(db);
- return false;
-}
-
-
-
-
-uint64
-O2DatDB::
-select_totaldisksize(void)
-{
-#if TRACE_SQL_EXEC_TIME
- stopwatch sw("select totakdisksize");
-#endif
-
- sqlite3 *db = NULL;
- sqlite3_stmt *stmt = NULL;
-
- int err = sqlite3_open16(dbfilename.c_str(), &db);
- if (err != SQLITE_OK)
- goto error;
- sqlite3_busy_timeout(db, 5000);
-
- wchar_t *sql = L"select sum(disksize) from dat;";
-
- err = sqlite3_prepare16_v2(db, sql, wcslen(sql)*2, &stmt, NULL);
- if (err != SQLITE_OK)
- goto error;
-
- err = sqlite3_step(stmt);
- if (err != SQLITE_ROW && err != SQLITE_DONE)
- goto error;
-
- uint64 totalsize = sqlite3_column_int64(stmt,0);
-
- sqlite3_finalize(stmt);
- stmt = NULL;
-
- err = sqlite3_close(db);
- if (err != SQLITE_OK)
- goto error;
-
- return (totalsize);
-
-error:
- log(db);
- if (stmt) sqlite3_finalize(stmt);
- if (db) sqlite3_close(db);
- return (0);
-}
-
-
-
-
-uint64
-O2DatDB::
-select_publishcount(time_t publish_tt)
-{
-#if TRACE_SQL_EXEC_TIME
- stopwatch sw("select datcount by lastpublish");
-#endif
-
- sqlite3 *db = NULL;
- sqlite3_stmt *stmt = NULL;
-
- int err = sqlite3_open16(dbfilename.c_str(), &db);
- if (err != SQLITE_OK)
- goto error;
- sqlite3_busy_timeout(db, 5000);
-
- wchar_t *sql = L"select count(*) from dat where lastpublish > ?;";
-
- err = sqlite3_prepare16_v2(db, sql, wcslen(sql)*2, &stmt, NULL);
- if (err != SQLITE_OK)
- goto error;
-
- if (!bind(db, stmt, 1, time(NULL)-publish_tt))
- goto error;
-
- err = sqlite3_step(stmt);
- if (err != SQLITE_ROW && err != SQLITE_DONE)
- goto error;
-
- uint64 count = sqlite3_column_int64(stmt,0);
-
- sqlite3_finalize(stmt);
- stmt = NULL;
-
- err = sqlite3_close(db);
- if (err != SQLITE_OK)
- goto error;
-
- return (count);
-
-error:
- log(db);
- if (stmt) sqlite3_finalize(stmt);
- if (db) sqlite3_close(db);
- return (0);
-}
-
-
-
-
-#if 0
-bool
-O2DatDB::
-update(O2DatRec &in, bool is_origurl)
-{
- sqlite3 *db = NULL;
- sqlite3_stmt* stmt;
- O2DatRec org;
-
- int err = sqlite3_open16(dbfilename.c_str(), &db);
- if (err != SQLITE_OK)
- goto error;
- sqlite3_busy_timeout(db, 5000);
-
- if (select(org, in.hash)) {
- wchar_t *sql =
- L"update or replace dat"
- L" set size = ?"
- L" , disksize = ?"
- L" , url = ?"
- L" , res = ?"
- L" , lastupdate = ?"
- L" , lastpublish = 0"
- L" where hash = ?;";
-
- err = sqlite3_prepare16_v2(db, sql, wcslen(sql)*2, &stmt, NULL);
- if (err != SQLITE_OK)
- goto error;
-
- if (!is_origurl)
- in.url = org.url;
- if (!bind(db, stmt, 1, in.size))
- goto error;
- if (!bind(db, stmt, 2, in.disksize))
- goto error;
- if (!bind(db, stmt, 3, in.url))
- goto error;
- if (!bind(db, stmt, 4, in.res))
- goto error;
- if (!bind(db, stmt, 5, time(NULL)))
- goto error;
- if (!bind(db, stmt, 6, in.hash))
- goto error;
-
- err = sqlite3_step(stmt);
- if (err != SQLITE_ROW && err != SQLITE_DONE)
- goto error;
- sqlite3_finalize(stmt);
- stmt = NULL;
- }
- else {
- wchar_t *sql =
- L"insert or replace into dat ("
- COLUMNS
- L") values ("
- L"?,?,?,?,?,?,?,?,?,?,?"
- L");";
-
- err = sqlite3_prepare16_v2(db, sql, wcslen(sql)*2, &stmt, NULL);
- if (err != SQLITE_OK)
- goto error;
-
- if (!bind(db, stmt, 1, in.hash))
- goto error;
- if (!bind(db, stmt, 2, in.domain))
- goto error;
- if (!bind(db, stmt, 3, in.bbsname))
- goto error;
- if (!bind(db, stmt, 4, in.datname))
- goto error;
- if (!bind(db, stmt, 5, in.size))
- goto error;
- if (!bind(db, stmt, 6, in.disksize))
- goto error;
- if (!bind(db, stmt, 7, in.url))
- goto error;
- if (!bind(db, stmt, 8, in.title))
- goto error;
- if (!bind(db, stmt, 9, in.res))
- goto error;
- if (!bind(db, stmt, 10, time(NULL)))
- goto error;
- if (!bind(db, stmt, 11, (uint64)0))
- goto error;
-
- err = sqlite3_step(stmt);
- if (err != SQLITE_ROW && err != SQLITE_DONE)
- goto error;
- sqlite3_finalize(stmt);
- stmt = NULL;
- }
-
- err = sqlite3_close(db);
- if (err != SQLITE_OK)
- goto error;
-
- return true;
-
-error:
- log(db);
- if (stmt) sqlite3_finalize(stmt);
- if (db) sqlite3_close(db);
- return false;
-}
-#endif
-
-
-
void
O2DatDB::
-update(O2DatRecList &in)
-{
-#if TRACE_SQL_EXEC_TIME
- stopwatch sw("update by reclist");
-#endif
-
- sqlite3 *db = NULL;
- sqlite3_stmt *stmt_insert = NULL;
- sqlite3_stmt *stmt_update = NULL;
- sqlite3_stmt *stmt_updatepublish = NULL;
- O2DatRec org;
-
- int err = sqlite3_open16(dbfilename.c_str(), &db);
- if (err != SQLITE_OK)
- goto error;
- sqlite3_busy_timeout(db, 5000);
-
- wchar_t *sql_insert =
- L"insert or replace into dat ("
- COLUMNS
- L") values ("
- L"?,?,?,?,?,?,?,?,?,?,?"
- L");";
- err = sqlite3_prepare16_v2(db, sql_insert, wcslen(sql_insert)*2, &stmt_insert, NULL);
- if (err != SQLITE_OK)
- goto error;
-
- wchar_t *sql_update =
- L"update or replace dat"
- L" set size = ?"
- L" , disksize = ?"
- L" , url = ?"
- L" , res = ?"
- L" , lastupdate = ?"
-// L" , lastpublish = 0"
- L" where hash = ?;";
-
- err = sqlite3_prepare16_v2(db, sql_update, wcslen(sql_update)*2, &stmt_update, NULL);
- if (err != SQLITE_OK)
- goto error;
-
- wchar_t *sql_updatepublish =
- L"update or replace dat"
- L" set lastpublish = ?"
- L" where hash = ?;";
-
- err = sqlite3_prepare16_v2(db, sql_updatepublish, wcslen(sql_updatepublish)*2, &stmt_updatepublish, NULL);
- if (err != SQLITE_OK)
- goto error;
-
- //
- // Loop
- //
- sqlite3_exec(db, "begin;", NULL, NULL, NULL);
- for (O2DatRecListIt it = in.begin(); it != in.end(); it++) {
- if (!select(org, it->hash)) {
- sqlite3_reset(stmt_insert);
- if (!bind(db, stmt_insert, 1, it->hash))
- goto error;
- if (!bind(db, stmt_insert, 2, it->domain))
- goto error;
- if (!bind(db, stmt_insert, 3, it->bbsname))
- goto error;
- if (!bind(db, stmt_insert, 4, it->datname))
- goto error;
- if (!bind(db, stmt_insert, 5, it->size))
- goto error;
- if (!bind(db, stmt_insert, 6, it->disksize))
- goto error;
- if (!bind(db, stmt_insert, 7, it->url))
- goto error;
- if (!bind(db, stmt_insert, 8, it->title))
- goto error;
- if (!bind(db, stmt_insert, 9, it->res))
- goto error;
- if (!bind(db, stmt_insert, 10, time(NULL)))
- goto error;
- if (!bind(db, stmt_insert, 11, (uint64)0))
- goto error;
-
- err = sqlite3_step(stmt_insert);
- if (err != SQLITE_ROW && err != SQLITE_DONE)
- goto error;
- }
- else if (it->userdata == 0) {
- sqlite3_reset(stmt_update);
- if (!bind(db, stmt_update, 1, it->size))
- goto error;
- if (!bind(db, stmt_update, 2, it->disksize))
- goto error;
- if (!bind(db, stmt_update, 3, (wcsstr(org.url.c_str(), L"xxx") == 0 ? it->url : org.url)))
- goto error;
- if (!bind(db, stmt_update, 4, it->res))
- goto error;
- if (!bind(db, stmt_update, 5, time(NULL)))
- goto error;
-// if (!bind(db, stmt_update, 6, (uint64)0))
-// goto error;
-
- err = sqlite3_step(stmt_update);
- if (err != SQLITE_ROW && err != SQLITE_DONE)
- goto error;
- }
- else {
- sqlite3_reset(stmt_updatepublish);
- if (!bind(db, stmt_updatepublish, 1, time(NULL)))
- goto error;
- if (!bind(db, stmt_updatepublish, 2, it->hash))
- goto error;
-
- err = sqlite3_step(stmt_updatepublish);
- if (err != SQLITE_ROW && err != SQLITE_DONE)
- goto error;
- }
- Sleep(1);
- }
- sqlite3_exec(db, "commit;", NULL, NULL, NULL);
-
- sqlite3_finalize(stmt_insert);
- sqlite3_finalize(stmt_update);
- sqlite3_finalize(stmt_updatepublish);
- stmt_insert = NULL;
- stmt_update = NULL;
- stmt_updatepublish = NULL;
-
- err = sqlite3_close(db);
- if (err != SQLITE_OK)
- goto error;
-
- return;
-
-error:
- log(db);
- if (stmt_insert) sqlite3_finalize(stmt_insert);
- if (stmt_update) sqlite3_finalize(stmt_update);
- if (stmt_updatepublish) sqlite3_finalize(stmt_updatepublish);
- if (db) sqlite3_close(db);
- return;
-}
-
-
-
-
-#if 0
-bool
-O2DatDB::
-update_lastpublish(const hashT &hash)
-{
- sqlite3 *db = NULL;
- int err = sqlite3_open16(dbfilename.c_str(), &db);
- if (err != SQLITE_OK)
- goto error;
- sqlite3_busy_timeout(db, 5000);
-
- wchar_t *sql =
- L"update or replace dat"
- L" set lastpublish = ?"
- L" where hash = ?;";
-
- sqlite3_stmt *stmt = NULL;
- err = sqlite3_prepare16_v2(db, sql, wcslen(sql)*2, &stmt, NULL);
- if (err != SQLITE_OK)
- goto error;
-
- if (!bind(db, stmt, 1, time(NULL)))
- goto error;
- if (!bind(db, stmt, 2, hash))
- goto error;
-
- err = sqlite3_step(stmt);
- if (err != SQLITE_ROW && err != SQLITE_DONE)
- goto error;
-
- sqlite3_finalize(stmt);
- stmt = NULL;
-
- err = sqlite3_close(db);
- if (err != SQLITE_OK)
- goto error;
-
- return true;
-
-error:
- log(db);
- if (stmt) sqlite3_finalize(stmt);
- if (db) sqlite3_close(db);
- return false;
-}
-#endif
-
-
-
-
-bool
-O2DatDB::
-remove(const hashT &hash)
-{
-#if TRACE_SQL_EXEC_TIME
- stopwatch sw("remove");
-#endif
-
- sqlite3 *db = NULL;
- int err = sqlite3_open16(dbfilename.c_str(), &db);
- if (err != SQLITE_OK)
- goto error;
- sqlite3_busy_timeout(db, 5000);
-
- wchar_t *sql =
- L"delete from dat where hash = ?;";
-
- sqlite3_stmt *stmt = NULL;
- err = sqlite3_prepare16_v2(db, sql, wcslen(sql)*2, &stmt, NULL);
- if (err != SQLITE_OK)
- goto error;
-
- if (!bind(db, stmt, 1, hash))
- goto error;
-
- err = sqlite3_step(stmt);
- if (err != SQLITE_ROW && err != SQLITE_DONE)
- goto error;
-
- sqlite3_finalize(stmt);
- stmt = NULL;
-
- err = sqlite3_close(db);
- if (err != SQLITE_OK)
- goto error;
-
- return true;
-
-error:
- log(db);
- if (stmt) sqlite3_finalize(stmt);
- if (db) sqlite3_close(db);
- return false;
-}
-#endif
-
-
-
-
-void
-O2DatDB::
AddUpdateQueue(O2DatRec &in)
{
UpdateQueueLock.Lock();
From o2on-svn @ lists.sourceforge.jp Wed May 21 19:42:52 2008
From: o2on-svn @ lists.sourceforge.jp (o2on svn commit)
Date: Wed, 21 May 2008 19:42:52 +0900
Subject: [o2on-svn] =?utf-8?b?Wzg2XSAgZGF0bmFtZeOBruOCpOODs+ODh+ODg+OCrw==?=
=?utf-8?b?44K544KS5L2c5oiQ?=
Message-ID: <1211366572.176212.16232.nullmailer@users.sourceforge.jp>
Revision: 86
http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=o2on&view=rev&rev=86
Author: k-uehara
Date: 2008-05-21 19:42:51 +0900 (Wed, 21 May 2008)
Log Message:
-----------
datnameのインデックスを作成
dat一覧画面でのパフォーマンスアップ
Modified Paths:
--------------
branches/BRANCH_0043/o2on/src.o2on/O2DatDB.cpp
Modified: branches/BRANCH_0043/o2on/src.o2on/O2DatDB.cpp
===================================================================
--- branches/BRANCH_0043/o2on/src.o2on/O2DatDB.cpp 2008-05-17 12:09:23 UTC (rev 85)
+++ branches/BRANCH_0043/o2on/src.o2on/O2DatDB.cpp 2008-05-21 10:42:51 UTC (rev 86)
@@ -207,9 +207,10 @@
");"
"drop index if exists idx_dat_domain;"
"drop index if exists idx_dat_bbsname;"
- "drop index if exists idx_dat_datname;"
+// "drop index if exists idx_dat_datname;"
"create index if not exists idx_dat_domain_bbsname_datname on dat (domain, bbsname, datname);"
"create index if not exists idx_dat_lastpublish on dat (lastpublish);"
+ "create index if not exists idx_dat_datname on dat (datname);";
"analyze;";
err = sqlite3_exec(db, sql, NULL, 0, 0);
if (err != SQLITE_OK)
From o2on-svn @ lists.sourceforge.jp Wed May 21 20:01:56 2008
From: o2on-svn @ lists.sourceforge.jp (o2on svn commit)
Date: Wed, 21 May 2008 20:01:56 +0900
Subject: [o2on-svn] =?utf-8?b?Wzg3XSBGSVg6IGRhdG5hbWXjga7jgqTjg7Pjg4fjg4M=?=
=?utf-8?b?44Kv44K544KS5L2c5oiQIOS4gOmDqOabtOaWsOW/mOOCjA==?=
Message-ID: <1211367716.776402.31172.nullmailer@users.sourceforge.jp>
Revision: 87
http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=o2on&view=rev&rev=87
Author: k-uehara
Date: 2008-05-21 20:01:56 +0900 (Wed, 21 May 2008)
Log Message:
-----------
FIX:datnameのインデックスを作成 一部更新忘れ
Modified Paths:
--------------
branches/BRANCH_0043/o2on/src.o2on/O2DatIO.cpp
Modified: branches/BRANCH_0043/o2on/src.o2on/O2DatIO.cpp
===================================================================
--- branches/BRANCH_0043/o2on/src.o2on/O2DatIO.cpp 2008-05-21 10:42:51 UTC (rev 86)
+++ branches/BRANCH_0043/o2on/src.o2on/O2DatIO.cpp 2008-05-21 11:01:56 UTC (rev 87)
@@ -1120,15 +1120,15 @@
O2DatIO::
StaticReindexThread(void *data)
{
- static char *targets[] = {"dat","idx_dat_domain_bbsname_datname","idx_dat_lastpublish"};
+ static char *targets[] = {"dat","idx_dat_domain_bbsname_datname","idx_dat_lastpublish","idx_dat_datname"};
O2DatIO *me = (O2DatIO*)data;
me->ProgressInfo->Reset(true, false);
me->ProgressInfo->SetMessage(L"reindex...");
- me->ProgressInfo->AddMax(3);
+ me->ProgressInfo->AddMax(4);
- for (size_t i = 0; i < 3; i++) {
+ for (size_t i = 0; i < 4; i++) {
wstring tmp;
ascii2unicode(targets[i], strlen(targets[i]), tmp);
tmp.insert(0, L"reindex ");
From o2on-svn @ lists.sourceforge.jp Wed May 21 23:22:30 2008
From: o2on-svn @ lists.sourceforge.jp (o2on svn commit)
Date: Wed, 21 May 2008 23:22:30 +0900
Subject: [o2on-svn] =?utf-8?b?Wzg4XSBGSVg6ICBSZWluZGV444Gn44Gu44Ko44Op44O8?=
=?utf-8?b?5pmC44Gr6JC944Gh44KL44OQ44Kw5L+u5q2j?=
Message-ID: <1211379750.542414.20216.nullmailer@users.sourceforge.jp>
Revision: 88
http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=o2on&view=rev&rev=88
Author: k-uehara
Date: 2008-05-21 23:22:30 +0900 (Wed, 21 May 2008)
Log Message:
-----------
FIX: Reindexでのエラー時に落ちるバグ修正
Modified Paths:
--------------
branches/BRANCH_0043/o2on/src.o2on/O2DatIO.cpp
Modified: branches/BRANCH_0043/o2on/src.o2on/O2DatIO.cpp
===================================================================
--- branches/BRANCH_0043/o2on/src.o2on/O2DatIO.cpp 2008-05-21 11:01:56 UTC (rev 87)
+++ branches/BRANCH_0043/o2on/src.o2on/O2DatIO.cpp 2008-05-21 14:22:30 UTC (rev 88)
@@ -1124,6 +1124,7 @@
O2DatIO *me = (O2DatIO*)data;
+ CoInitialize(NULL);
me->ProgressInfo->Reset(true, false);
me->ProgressInfo->SetMessage(L"reindex...");
me->ProgressInfo->AddMax(4);
@@ -1139,6 +1140,7 @@
}
me->ProgressInfo->Reset(false, false);
+ CoUninitialize();
CloseHandle(me->ReindexThreadHandle);
me->ReindexThreadHandle = NULL;
From o2on-svn @ lists.sourceforge.jp Fri May 23 20:04:08 2008
From: o2on-svn @ lists.sourceforge.jp (o2on svn commit)
Date: Fri, 23 May 2008 20:04:08 +0900
Subject: [o2on-svn] =?utf-8?b?Wzg5XSBGSVg6ICAjMTIyODkg44K344Oj44OD44OI44OA?=
=?utf-8?b?44Km44Oz5pmC44Gu5YSq5YWI5bqm44KS5aSJ5pu0?=
Message-ID: <1211540648.557286.14736.nullmailer@users.sourceforge.jp>
Revision: 89
http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=o2on&view=rev&rev=89
Author: k-uehara
Date: 2008-05-23 20:04:08 +0900 (Fri, 23 May 2008)
Log Message:
-----------
FIX: #12289 シャットダウン時の優先度を変更
Ticket Links:
:-----------
http://sourceforge.jp/projects/o2on/tracker/detail/12289
Modified Paths:
--------------
branches/BRANCH_0043/o2on/src.o2on/main.cpp
Modified: branches/BRANCH_0043/o2on/src.o2on/main.cpp
===================================================================
--- branches/BRANCH_0043/o2on/src.o2on/main.cpp 2008-05-21 14:22:30 UTC (rev 88)
+++ branches/BRANCH_0043/o2on/src.o2on/main.cpp 2008-05-23 11:04:08 UTC (rev 89)
@@ -281,6 +281,8 @@
static bool
InitializeApp(TCHAR *cmdline, int cmdshow)
{
+ SetProcessShutdownParameters(0x3FF, 0);
+
wchar_t msg[1024];
INITCOMMONCONTROLSEX icex;
From o2on-svn @ lists.sourceforge.jp Sat May 24 12:14:36 2008
From: o2on-svn @ lists.sourceforge.jp (o2on svn commit)
Date: Sat, 24 May 2008 12:14:36 +0900
Subject: [o2on-svn] =?utf-8?b?WzkwXSBGSVg6ICBEQuOCquODvOODl+ODs+WkseaVlw==?=
=?utf-8?b?5pmC44Gr6JC944Gh44KL5ZWP6aGM?=
Message-ID: <1211598876.428764.2346.nullmailer@users.sourceforge.jp>
Revision: 90
http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=o2on&view=rev&rev=90
Author: k-uehara
Date: 2008-05-24 12:14:36 +0900 (Sat, 24 May 2008)
Log Message:
-----------
FIX: DBオープン失敗時に落ちる問題
stmtの初期化を最初に行うように変更
Modified Paths:
--------------
branches/BRANCH_0043/o2on/src.o2on/O2DatDB.cpp
Modified: branches/BRANCH_0043/o2on/src.o2on/O2DatDB.cpp
===================================================================
--- branches/BRANCH_0043/o2on/src.o2on/O2DatDB.cpp 2008-05-23 11:04:08 UTC (rev 89)
+++ branches/BRANCH_0043/o2on/src.o2on/O2DatDB.cpp 2008-05-24 03:14:36 UTC (rev 90)
@@ -281,14 +281,14 @@
stopwatch sw("select");
#endif
wstrarray cols;
+ sqlite3 *db = NULL;
+ sqlite3_stmt *stmt = NULL;
- sqlite3 *db = NULL;
int err = sqlite3_open16(dbfilename.c_str(), &db);
if (err != SQLITE_OK)
goto error;
sqlite3_busy_timeout(db, 5000);
- sqlite3_stmt *stmt = NULL;
err = sqlite3_prepare16_v2(db, sql, wcslen(sql)*2, &stmt, NULL);
if (err != SQLITE_OK)
goto error;
@@ -337,6 +337,8 @@
bool ret = true;
sqlite3 *db = NULL;
+ sqlite3_stmt *stmt = NULL;
+
int err = sqlite3_open16(dbfilename.c_str(), &db);
if (err != SQLITE_OK)
goto error;
@@ -348,7 +350,6 @@
L" from dat"
L" order by random() limit 1;";
- sqlite3_stmt *stmt = NULL;
err = sqlite3_prepare16_v2(db, sql, wcslen(sql)*2, &stmt, NULL);
if (err != SQLITE_OK)
goto error;
@@ -391,6 +392,8 @@
bool ret = true;
sqlite3 *db = NULL;
+ sqlite3_stmt *stmt = NULL;
+
int err = sqlite3_open16(dbfilename.c_str(), &db);
if (err != SQLITE_OK)
goto error;
@@ -402,7 +405,6 @@
L" from dat"
L" where hash = ?;";
- sqlite3_stmt *stmt = NULL;
err = sqlite3_prepare16_v2(db, sql, wcslen(sql)*2, &stmt, NULL);
if (err != SQLITE_OK)
goto error;
@@ -444,6 +446,8 @@
bool ret = true;
sqlite3 *db = NULL;
+ sqlite3_stmt *stmt = NULL;
+
int err = sqlite3_open16(dbfilename.c_str(), &db);
if (err != SQLITE_OK)
goto error;
@@ -457,7 +461,6 @@
L" and bbsname = ?"
L" order by random() limit 1;";
- sqlite3_stmt *stmt = NULL;
err = sqlite3_prepare16_v2(db, sql, wcslen(sql)*2, &stmt, NULL);
if (err != SQLITE_OK)
goto error;
@@ -505,6 +508,8 @@
bool ret = true;
sqlite3 *db = NULL;
+ sqlite3_stmt *stmt = NULL;
+
int err = sqlite3_open16(dbfilename.c_str(), &db);
if (err != SQLITE_OK)
goto error;
@@ -518,7 +523,6 @@
L" and bbsname = ?"
L" and datname = ?;";
- sqlite3_stmt *stmt = NULL;
err = sqlite3_prepare16_v2(db, sql, wcslen(sql)*2, &stmt, NULL);
if (err != SQLITE_OK)
goto error;
@@ -1233,6 +1237,8 @@
#endif
sqlite3 *db = NULL;
+ sqlite3_stmt *stmt = NULL;
+
int err = sqlite3_open16(dbfilename.c_str(), &db);
if (err != SQLITE_OK)
goto error;
@@ -1241,7 +1247,6 @@
wchar_t *sql =
L"delete from dat where hash = ?;";
- sqlite3_stmt *stmt = NULL;
err = sqlite3_prepare16_v2(db, sql, wcslen(sql)*2, &stmt, NULL);
if (err != SQLITE_OK)
goto error;
From o2on-svn @ lists.sourceforge.jp Sat May 24 19:39:43 2008
From: o2on-svn @ lists.sourceforge.jp (o2on svn commit)
Date: Sat, 24 May 2008 19:39:43 +0900
Subject: [o2on-svn] =?utf-8?b?WzkxXSBGSVg6ICDjgrnjg6znlarlj7fjgYzplbfjgZk=?=
=?utf-8?b?44GO44KL44Go6JC944Gh44KL?=
Message-ID: <1211625583.660812.17969.nullmailer@users.sourceforge.jp>
Revision: 91
http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=o2on&view=rev&rev=91
Author: k-uehara
Date: 2008-05-24 19:39:43 +0900 (Sat, 24 May 2008)
Log Message:
-----------
FIX: スレ番号が長すぎると落ちる
http://pc11.2ch.net/test/read.cgi/tech/1180440415/856
Modified Paths:
--------------
branches/BRANCH_0043/o2on/src.o2on/O2DatPath.h
Modified: branches/BRANCH_0043/o2on/src.o2on/O2DatPath.h
===================================================================
--- branches/BRANCH_0043/o2on/src.o2on/O2DatPath.h 2008-05-24 03:14:36 UTC (rev 90)
+++ branches/BRANCH_0043/o2on/src.o2on/O2DatPath.h 2008-05-24 10:39:43 UTC (rev 91)
@@ -336,7 +336,7 @@
bool checkdatname(const char *dat)
{
- if (strlen(dat) < 13)
+ if (strlen(dat) < 13 || strlen(dat) > 15)
return false;
char *endptr;
From o2on-svn @ lists.sourceforge.jp Sat May 24 22:51:45 2008
From: o2on-svn @ lists.sourceforge.jp (o2on svn commit)
Date: Sat, 24 May 2008 22:51:45 +0900
Subject: [o2on-svn] [92] ADD: O2DatDB::analyze()
Message-ID: <1211637105.458446.1001.nullmailer@users.sourceforge.jp>
Revision: 92
http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=o2on&view=rev&rev=92
Author: k-uehara
Date: 2008-05-24 22:51:45 +0900 (Sat, 24 May 2008)
Log Message:
-----------
ADD: O2DatDB::analyze()
Modified Paths:
--------------
branches/BRANCH_0043/o2on/src.o2on/O2DatDB.cpp
branches/BRANCH_0043/o2on/src.o2on/O2DatDB.h
Modified: branches/BRANCH_0043/o2on/src.o2on/O2DatDB.cpp
===================================================================
--- branches/BRANCH_0043/o2on/src.o2on/O2DatDB.cpp 2008-05-24 10:39:43 UTC (rev 91)
+++ branches/BRANCH_0043/o2on/src.o2on/O2DatDB.cpp 2008-05-24 13:51:45 UTC (rev 92)
@@ -273,6 +273,39 @@
+bool
+O2DatDB::
+analyze(void)
+{
+#if TRACE_SQL_EXEC_TIME
+ stopwatch sw("analyze/vacuum");
+#endif
+
+ sqlite3 *db = NULL;
+ int err = sqlite3_open16(dbfilename.c_str(), &db);
+ if (err != SQLITE_OK)
+ goto error;
+
+ char sql[] = "analyze; vacuum dat;";
+
+ err = sqlite3_exec(db, sql, NULL, 0, 0);
+ if (err != SQLITE_OK)
+ goto error;
+
+ err = sqlite3_close(db);
+ if (err != SQLITE_OK)
+ goto error;
+ return true;
+
+error:
+ log(db);
+ if (db) sqlite3_close(db);
+ return false;
+}
+
+
+
+
size_t
O2DatDB::
select(const wchar_t *sql, SQLResultList &out)
Modified: branches/BRANCH_0043/o2on/src.o2on/O2DatDB.h
===================================================================
--- branches/BRANCH_0043/o2on/src.o2on/O2DatDB.h 2008-05-24 10:39:43 UTC (rev 91)
+++ branches/BRANCH_0043/o2on/src.o2on/O2DatDB.h 2008-05-24 13:51:45 UTC (rev 92)
@@ -79,6 +79,7 @@
bool create_table(void);
bool reindex(const char *target);
+ bool analyze(void);
size_t select(const wchar_t *sql, SQLResultList &out);
bool select(O2DatRec &out);
From o2on-svn @ lists.sourceforge.jp Tue May 27 21:48:10 2008
From: o2on-svn @ lists.sourceforge.jp (o2on svn commit)
Date: Tue, 27 May 2008 21:48:10 +0900
Subject: [o2on-svn] =?utf-8?b?WzkzXSAgSU11bHRpTGFuZ3VhZ2Uy44Gr5aSJ5pu0?=
Message-ID: <1211892490.881786.32224.nullmailer@users.sourceforge.jp>
Revision: 93
http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=o2on&view=rev&rev=93
Author: k-uehara
Date: 2008-05-27 21:48:10 +0900 (Tue, 27 May 2008)
Log Message:
-----------
IMultiLanguage2?????
Modified Paths:
--------------
branches/BRANCH_0043/o2on/src.o2on/dataconv.cpp
Modified: branches/BRANCH_0043/o2on/src.o2on/dataconv.cpp
===================================================================
--- branches/BRANCH_0043/o2on/src.o2on/dataconv.cpp 2008-05-24 13:51:45 UTC (rev 92)
+++ branches/BRANCH_0043/o2on/src.o2on/dataconv.cpp 2008-05-27 12:48:10 UTC (rev 93)
@@ -644,9 +644,9 @@
bool ToUnicode(const wchar_t *charset, const char *in, const uint len, wstring &out)
{
//IMultiLanguage??
- IMultiLanguage *lang = NULL;
+ IMultiLanguage2 *lang = NULL;
HRESULT hr = CoCreateInstance(CLSID_CMultiLanguage, NULL,
- CLSCTX_ALL, IID_IMultiLanguage, (LPVOID*)&lang);
+ CLSCTX_ALL, IID_IMultiLanguage2, (LPVOID*)&lang);
assert(SUCCEEDED(hr));
//Charset????@@ -684,9 +684,9 @@
bool FromUnicode(const wchar_t *charset, const wchar_t *in, uint len, string &out)
{
//IMultiLanguage??
- IMultiLanguage *lang = NULL;
+ IMultiLanguage2 *lang = NULL;
HRESULT hr = CoCreateInstance(CLSID_CMultiLanguage, NULL,
- CLSCTX_ALL, IID_IMultiLanguage, (LPVOID*)&lang);
+ CLSCTX_ALL, IID_IMultiLanguage2, (LPVOID*)&lang);
assert(SUCCEEDED(hr));
//Charset????
From o2on-svn @ lists.sourceforge.jp Tue May 27 22:28:54 2008
From: o2on-svn @ lists.sourceforge.jp (o2on svn commit)
Date: Tue, 27 May 2008 22:28:54 +0900
Subject: [o2on-svn] =?utf-8?b?Wzk0XSBBREQ6ICDjg6Hjg4vjg6Xjg7zjgYvjgonjga5h?=
=?utf-8?q?nalyze?=
Message-ID: <1211894934.588878.31767.nullmailer@users.sourceforge.jp>
Revision: 94
http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=o2on&view=rev&rev=94
Author: k-uehara
Date: 2008-05-27 22:28:54 +0900 (Tue, 27 May 2008)
Log Message:
-----------
ADD: ?<??ャ??????nalyze
Modified Paths:
--------------
branches/BRANCH_0043/o2on/src.o2on/O2DatIO.cpp
branches/BRANCH_0043/o2on/src.o2on/O2DatIO.h
branches/BRANCH_0043/o2on/src.o2on/main.cpp
branches/BRANCH_0043/o2on/src.o2on/resource.h
branches/BRANCH_0043/o2on/src.o2on/resource.rc
Modified: branches/BRANCH_0043/o2on/src.o2on/O2DatIO.cpp
===================================================================
--- branches/BRANCH_0043/o2on/src.o2on/O2DatIO.cpp 2008-05-27 12:48:10 UTC (rev 93)
+++ branches/BRANCH_0043/o2on/src.o2on/O2DatIO.cpp 2008-05-27 13:28:54 UTC (rev 94)
@@ -44,6 +44,7 @@
, ReindexThreadHandle(NULL)
, LoopRebuildDB(false)
, EnumDatThreadNum(0)
+ , AnalyzeThreadHandle(0)
{
DWORD BytesPerSector;
@@ -878,6 +879,7 @@
CoInitialize(NULL);
me->RebuildDBThread(me->Profile->GetCacheRootW(), 0);
+ me->DatDB->analyze();
CoUninitialize();
CloseHandle(me->RebuildDBThreadHandle);
@@ -1148,3 +1150,34 @@
//_endthreadex(0);
return (0);
}
+
+void
+O2DatIO::
+Analyze(void)
+{
+ if (AnalyzeThreadHandle)
+ return;
+ AnalyzeThreadHandle = (HANDLE)_beginthreadex(
+ NULL, 0, StaticAnalyzeThread, (void*)this, 0, NULL);
+}
+
+uint WINAPI
+O2DatIO::
+StaticAnalyzeThread(void *data)
+{
+ O2DatIO *me = (O2DatIO*)data;
+
+ CoInitialize(NULL);
+ me->ProgressInfo->Reset(true, false);
+ me->ProgressInfo->SetMessage(L"analyze...");
+ me->ProgressInfo->AddMax(2);
+ me->ProgressInfo->pos = 1;
+ me->DatDB->analyze();
+ me->ProgressInfo->Reset(false, false);
+ CoUninitialize();
+
+ CloseHandle(me->AnalyzeThreadHandle);
+ me->AnalyzeThreadHandle = NULL;
+
+ return (0);
+}
\ No newline at end of file
Modified: branches/BRANCH_0043/o2on/src.o2on/O2DatIO.h
===================================================================
--- branches/BRANCH_0043/o2on/src.o2on/O2DatIO.h 2008-05-27 12:48:10 UTC (rev 93)
+++ branches/BRANCH_0043/o2on/src.o2on/O2DatIO.h 2008-05-27 13:28:54 UTC (rev 94)
@@ -36,6 +36,7 @@
HANDLE RebuildDBThreadHandle;
HANDLE ReindexThreadHandle;
+ HANDLE AnalyzeThreadHandle;
bool LoopRebuildDB;
uint EnumDatThreadNum;
Mutex EnumDatThreadNumLock;
@@ -83,4 +84,6 @@
void Reindex(void);
static uint WINAPI StaticReindexThread(void *data);
+ void Analyze(void);
+ static uint WINAPI StaticAnalyzeThread(void *data);
};
Modified: branches/BRANCH_0043/o2on/src.o2on/main.cpp
===================================================================
--- branches/BRANCH_0043/o2on/src.o2on/main.cpp 2008-05-27 12:48:10 UTC (rev 93)
+++ branches/BRANCH_0043/o2on/src.o2on/main.cpp 2008-05-27 13:28:54 UTC (rev 94)
@@ -1070,6 +1070,12 @@
DatIO->Reindex();
}
break;
+ case ID_ANALYZE:
+ if (!Active && !hwndProgressDlg) {
+ CreateProgressDialog(_T("analyze..."));
+ DatIO->Analyze();
+ }
+ break;
case ID_OPENWEBADMIN: {
wstring type = Profile->GetAdminBrowserType();
wstring path = Profile->GetAdminBrowserPath();
Modified: branches/BRANCH_0043/o2on/src.o2on/resource.h
===================================================================
--- branches/BRANCH_0043/o2on/src.o2on/resource.h 2008-05-27 12:48:10 UTC (rev 93)
+++ branches/BRANCH_0043/o2on/src.o2on/resource.h 2008-05-27 13:28:54 UTC (rev 94)
@@ -79,6 +79,7 @@
#define ID_REBUILDDB 40010
#define ID_DB40013 40013
#define ID_REINDEX 40014
+#define ID_ANALYZE 40016
// Next default values for new objects
//
Modified: branches/BRANCH_0043/o2on/src.o2on/resource.rc
===================================================================
--- branches/BRANCH_0043/o2on/src.o2on/resource.rc 2008-05-27 12:48:10 UTC (rev 93)
+++ branches/BRANCH_0043/o2on/src.o2on/resource.rc 2008-05-27 13:28:54 UTC (rev 94)
@@ -66,6 +66,7 @@
BEGIN
MENUITEM "???(&B)", ID_REBUILDDB
MENUITEM "reindex(&I)", ID_REINDEX
+ MENUITEM "analyze(&L)", ID_ANALYZE
END
MENUITEM SEPARATOR
MENUITEM "???????&A)...", ID_ABOUT
From o2on-svn @ lists.sourceforge.jp Wed May 28 19:01:18 2008
From: o2on-svn @ lists.sourceforge.jp (o2on svn commit)
Date: Wed, 28 May 2008 19:01:18 +0900
Subject: [o2on-svn] =?utf-8?b?Wzk1XSAg5Yid5pyf44OO44O844OJ6L+95Yqg5omL6aCG?=
=?utf-8?b?44Gu5aSJ5pu0?=
Message-ID: <1211968878.448127.9737.nullmailer@users.sourceforge.jp>
Revision: 95
http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=o2on&view=rev&rev=95
Author: k-uehara
Date: 2008-05-28 19:01:18 +0900 (Wed, 28 May 2008)
Log Message:
-----------
初期ノード追加手順の変更
Modified Paths:
--------------
branches/BRANCH_0043/o2on/doc/readme.txt
Modified: branches/BRANCH_0043/o2on/doc/readme.txt
===================================================================
--- branches/BRANCH_0043/o2on/doc/readme.txt 2008-05-27 13:28:54 UTC (rev 94)
+++ branches/BRANCH_0043/o2on/doc/readme.txt 2008-05-28 10:01:18 UTC (rev 95)
@@ -27,8 +27,8 @@
4. トレイアイコンから「P2P起動」
5. トレイアイコンから「管理画面」
-6. ノード画面の「初期ノード追加」を押す
-7. 初期ノード文字列をコピペして「OK」
+6. ノード画面の「URLから追加」を押す
+7. そのまま「OK」
5. 専ブラ起動
6. 専ブラの読み込みプロキシを「127.0.0.1:プロキシポート番号(デフォルト8000)」に設定
From o2on-svn @ lists.sourceforge.jp Thu May 29 12:38:14 2008
From: o2on-svn @ lists.sourceforge.jp (o2on svn commit)
Date: Thu, 29 May 2008 12:38:14 +0900
Subject: [o2on-svn] =?utf-8?b?Wzk2XSBGSVg6ICBEQuWGjeani+evieOBpyAiIGRhdGFi?=
=?utf-8?b?YXNlIGlzIGxvY2tlZCIg44Ko44Op44O844GM6aC755m644GZ44KL44GT44Go?=
=?utf-8?b?44GM44GC44KL?=
Message-ID: <1212032294.928718.18795.nullmailer@users.sourceforge.jp>
Revision: 96
http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=o2on&view=rev&rev=96
Author: electrolysis
Date: 2008-05-29 12:38:14 +0900 (Thu, 29 May 2008)
Log Message:
-----------
FIX: DB再構築で"database is locked"エラーが頻発することがある
詳細: 一回のトランザクションで処理する件数を最大で1000に制限して小分けし、個々のトランザクションに要する時間を短縮する
Modified Paths:
--------------
branches/BRANCH_0043/o2on/src.o2on/O2DatDB.cpp
branches/BRANCH_0043/o2on/src.o2on/O2DatDB.h
Modified: branches/BRANCH_0043/o2on/src.o2on/O2DatDB.cpp
===================================================================
--- branches/BRANCH_0043/o2on/src.o2on/O2DatDB.cpp 2008-05-28 10:01:18 UTC (rev 95)
+++ branches/BRANCH_0043/o2on/src.o2on/O2DatDB.cpp 2008-05-29 03:38:14 UTC (rev 96)
@@ -17,6 +17,7 @@
#include
#define UPDATE_THREAD_INTERVAL_S 15
+#define MAX_UPDATE_QUEUE_SIZE 1000
#if defined(_DEBUG)
#define TRACE_SQL_EXEC_TIME 1
@@ -1261,6 +1262,31 @@
+void
+O2DatDB::
+divide_update(O2DatRecList &in)
+{
+ if (in.size() > MAX_UPDATE_QUEUE_SIZE) {
+ O2DatRecListIt begin = in.begin();
+ O2DatRecListIt end = in.begin();
+ while (end != in.end()) {
+ begin = end;
+ if (std::distance(end, in.end()) < MAX_UPDATE_QUEUE_SIZE)
+ end = in.end();
+ else
+ std::advance(end, MAX_UPDATE_QUEUE_SIZE);
+
+ O2DatRecList tmp(begin, end);
+ update(tmp);
+ }
+ }
+ else
+ update(in);
+}
+
+
+
+
bool
O2DatDB::
remove(const hashT &hash)
@@ -1364,7 +1390,7 @@
UpdateQueueLock.Lock();
if (!UpdateQueue.empty()) {
- update(UpdateQueue);
+ divide_update(UpdateQueue);
UpdateQueue.clear();
}
UpdateQueueLock.Unlock();
@@ -1398,7 +1424,7 @@
UpdateQueueLock.Unlock();
if (!reclist.empty())
- update(reclist);
+ divide_update(reclist);
t = time(NULL);
CLEAR_WORKSET;
//TRACEA("+++++ UPDATE +++++\n");
Modified: branches/BRANCH_0043/o2on/src.o2on/O2DatDB.h
===================================================================
--- branches/BRANCH_0043/o2on/src.o2on/O2DatDB.h 2008-05-28 10:01:18 UTC (rev 95)
+++ branches/BRANCH_0043/o2on/src.o2on/O2DatDB.h 2008-05-29 03:38:14 UTC (rev 96)
@@ -97,6 +97,7 @@
// bool update(O2DatRec &in, bool is_origurl);
void update(O2DatRecList &in);
// bool update_lastpublish(const hashT &hash);
+ void divide_update(O2DatRecList &in);
bool remove(const hashT &hash);
From o2on-svn @ lists.sourceforge.jp Thu May 29 13:52:17 2008
From: o2on-svn @ lists.sourceforge.jp (o2on svn commit)
Date: Thu, 29 May 2008 13:52:17 +0900
Subject: [o2on-svn] =?utf-8?b?Wzk3XSBGSVg6ICAjMTI1NTMgVVBuUOOBjOOBhuOBvg==?=
=?utf-8?b?44GP5YuV44GL44Gq44GE44Or44O844K/44GM44GC44KL?=
Message-ID: <1212036737.859830.12936.nullmailer@users.sourceforge.jp>
Revision: 97
http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=o2on&view=rev&rev=97
Author: electrolysis
Date: 2008-05-29 13:52:17 +0900 (Thu, 29 May 2008)
Log Message:
-----------
FIX: #12553 UPnPがうまく動かないルータがある
詳細: 1. URLBaseがあれば使用する
2. Hostヘッダにポート番号を付ける(デフォルトポート除く)
Ticket Links:
:-----------
http://sourceforge.jp/projects/o2on/tracker/detail/12553
Modified Paths:
--------------
branches/BRANCH_0043/o2on/src.o2on/O2Protocol.h
branches/BRANCH_0043/o2on/src.o2on/simplehttpsocket.h
branches/BRANCH_0043/o2on/src.o2on/upnp_description.h
Modified: branches/BRANCH_0043/o2on/src.o2on/O2Protocol.h
===================================================================
--- branches/BRANCH_0043/o2on/src.o2on/O2Protocol.h 2008-05-29 03:38:14 UTC (rev 96)
+++ branches/BRANCH_0043/o2on/src.o2on/O2Protocol.h 2008-05-29 04:52:17 UTC (rev 97)
@@ -92,7 +92,7 @@
profile->GetFlags(flags);
header.AddFieldString("Connection", "close");
- header.AddFieldString("Host", header.hostname.c_str());
+ header.AddFieldString("Host", header.host.c_str());
header.AddFieldString("User-Agent", profile->GetUserAgentA());
header.AddFieldString(X_O2_NODE_ID, hashstr.c_str());
header.AddFieldString(X_O2_RSAPUBLICKEY, pubkey.c_str());
Modified: branches/BRANCH_0043/o2on/src.o2on/simplehttpsocket.h
===================================================================
--- branches/BRANCH_0043/o2on/src.o2on/simplehttpsocket.h 2008-05-29 03:38:14 UTC (rev 96)
+++ branches/BRANCH_0043/o2on/src.o2on/simplehttpsocket.h 2008-05-29 04:52:17 UTC (rev 97)
@@ -71,7 +71,7 @@
hdr.method = "GET";
hdr.url = url;
hdr.AddFieldString("Connection", "close");
- hdr.AddFieldString("Host", hdr.hostname.c_str());
+ hdr.AddFieldString("Host", hdr.host.c_str());
if (!useragent.empty())
hdr.AddFieldString("User-Agent", useragent.c_str());
if (body && bodylen)
@@ -101,7 +101,7 @@
hdr.url = url;
hdr.AddFieldString("Connection", "close", false);
- hdr.AddFieldString("Host", hdr.hostname.c_str(), false);
+ hdr.AddFieldString("Host", hdr.host.c_str(), false);
if (!useragent.empty())
hdr.AddFieldString("User-Agent", useragent.c_str(), false);
if (body && bodylen)
Modified: branches/BRANCH_0043/o2on/src.o2on/upnp_description.h
===================================================================
--- branches/BRANCH_0043/o2on/src.o2on/upnp_description.h 2008-05-29 03:38:14 UTC (rev 96)
+++ branches/BRANCH_0043/o2on/src.o2on/upnp_description.h 2008-05-29 04:52:17 UTC (rev 97)
@@ -334,7 +334,12 @@
string str;
unicode2ascii(chars, length, str);
- if (wcsstr(cur_element.c_str(), L"URL")) {
+ if (wcsstr(cur_element.c_str(), L"URLBase")) {
+ if (str[str.size()-1] == '/')
+ str.erase(str.size()-1);
+ base_url = str;
+ }
+ else if (wcsstr(cur_element.c_str(), L"URL")) {
if (strncmp(str.c_str(), "http://", 7) != 0)
str = base_url + (str[0] == '/' ? "" : "/") + str;
}
From o2on-svn @ lists.sourceforge.jp Sat May 31 13:44:57 2008
From: o2on-svn @ lists.sourceforge.jp (o2on svn commit)
Date: Sat, 31 May 2008 13:44:57 +0900
Subject: [o2on-svn] =?utf-8?b?Wzk4XSBvMm9uLiBleGXjga5VUFjlnKfnuK7jgpLlu4M=?=
=?utf-8?b?5q2i?=
Message-ID: <1212209097.226617.9069.nullmailer@users.sourceforge.jp>
Revision: 98
http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=o2on&view=rev&rev=98
Author: k-uehara
Date: 2008-05-31 13:44:57 +0900 (Sat, 31 May 2008)
Log Message:
-----------
o2on.exe??PX?х軒???罩?
Modified Paths:
--------------
branches/BRANCH_0043/o2on/doc/build.txt
branches/BRANCH_0043/o2on/src.o2on/o2on.vcproj
Modified: branches/BRANCH_0043/o2on/doc/build.txt
===================================================================
--- branches/BRANCH_0043/o2on/doc/build.txt 2008-05-29 04:52:17 UTC (rev 97)
+++ branches/BRANCH_0043/o2on/doc/build.txt 2008-05-31 04:44:57 UTC (rev 98)
@@ -7,7 +7,7 @@
?zlib 1.2.3
?Xerces-C++ 2.8.0
?SQLite 3.5.6
-?UPX 3.02
+?UPX 3.03
?MiniZip Ver0.02c
????
@@ -155,12 +155,13 @@
+-sqlite
------------------------------------------------------------------------------
- UPX 3.02
+ UPX 3.03
------------------------------------------------------------------------------
+?: UPX???g?????????
http://upx.sourceforge.net/#download
-upx302w.zip????????
+upx303w.zip????????
-?upx302w.zip??upx.exe?o2on????????
+?upx303w.zip??upx.exe?o2on????????
+-o2on
+-cryptopp
+-zlib
Modified: branches/BRANCH_0043/o2on/src.o2on/o2on.vcproj
===================================================================
--- branches/BRANCH_0043/o2on/src.o2on/o2on.vcproj 2008-05-29 04:52:17 UTC (rev 97)
+++ branches/BRANCH_0043/o2on/src.o2on/o2on.vcproj 2008-05-31 04:44:57 UTC (rev 98)
@@ -33,7 +33,7 @@
/>
From o2on-svn @ lists.sourceforge.jp Sat May 31 14:37:00 2008
From: o2on-svn @ lists.sourceforge.jp (o2on svn commit)
Date: Sat, 31 May 2008 14:37:00 +0900
Subject: [o2on-svn] =?utf-8?b?Wzk5XSAgYnVpbGQgMDA0NCDjg6rjg6rjg7zjgrk=?=
Message-ID: <1212212220.137923.13179.nullmailer@users.sourceforge.jp>
Revision: 99
http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=o2on&view=rev&rev=99
Author: k-uehara
Date: 2008-05-31 14:37:00 +0900 (Sat, 31 May 2008)
Log Message:
-----------
build 0044 ????若?
Modified Paths:
--------------
branches/BRANCH_0043/o2on/doc/history.txt
branches/BRANCH_0043/o2on/src.o2on/O2Version.h
Modified: branches/BRANCH_0043/o2on/doc/history.txt
===================================================================
--- branches/BRANCH_0043/o2on/doc/history.txt 2008-05-31 04:44:57 UTC (rev 98)
+++ branches/BRANCH_0043/o2on/doc/history.txt 2008-05-31 05:37:00 UTC (rev 99)
@@ -1,3 +1,22 @@
+v0.02? (build 0044) 2008/05/31
+?analyze???????????
+?datname??????????
+??????Z?2???)
+?????????????
+?UPnP????
+????????????????
+???????IMultiLanguage2???
+?UPX????
+* ???????
+?DB????ク??????
+?DB????"database is locked"?????????????
+?Reindex??????????
+??????????????
+?SQL???????(2?)
+?IM??(2?)
+????????OFF???????????
+?EUC-JP?dat???
+
v0.02? (build 0043) 2008/03/17
??????????I????????
????????????????
Modified: branches/BRANCH_0043/o2on/src.o2on/O2Version.h
===================================================================
--- branches/BRANCH_0043/o2on/src.o2on/O2Version.h 2008-05-31 04:44:57 UTC (rev 98)
+++ branches/BRANCH_0043/o2on/src.o2on/O2Version.h 2008-05-31 05:37:00 UTC (rev 99)
@@ -4,7 +4,7 @@
#define APP_NAME "o2on"
#define APP_VER_MAJOR 0
#define APP_VER_MINOR 2
-#define APP_BUILDNO 43
+#define APP_BUILDNO 44
#define APP_VER_PREFIX "alpha"
#define APP_VER_FORMAT "%s %1d.%02d %s (build %04d)"
#define USERAGENT_FORMAT "%s/%.1f (%s/%1d.%02d.%04d; %s)"
\ No newline at end of file
From o2on-svn @ lists.sourceforge.jp Sat May 31 15:51:40 2008
From: o2on-svn @ lists.sourceforge.jp (o2on svn commit)
Date: Sat, 31 May 2008 15:51:40 +0900
Subject: [o2on-svn] =?utf-8?b?WzEwMF0gIOODu2FuYWx5emXjgpLmiYvli5XjgafooYw=?=
=?utf-8?b?44GG44KI44GG44Gr44GX44Gf?=
Message-ID: <1212216700.149521.663.nullmailer@users.sourceforge.jp>
Revision: 100
http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=o2on&view=rev&rev=100
Author: k-uehara
Date: 2008-05-31 15:51:40 +0900 (Sat, 31 May 2008)
Log Message:
-----------
・analyzeを手動で行うようにした
・datnameのインデックスを作成
・終了時間の短縮(2秒程度)
・強制スワップアウトを廃止
・UPnP対応強化
・シャットダウン時の優先度を変更
・コード変換をIMultiLanguage2に変更
・UPXをやめた
* バグフィックス
・DBオープン失敗時に落ちる
・DB再構築で"database is locked"エラーが頻発することがある
・Reindexでのエラー時に落ちる
・スレ番号が長すぎると落ちる
・SQL発行画面のバグ(2件)
・IM関係(2件)
・補完時バルーンOFFの設定が動作していない
・EUC-JPのdatに対応
Added Paths:
-----------
tags/build0044/
Copied: tags/build0044 (from rev 99, branches/BRANCH_0043)
From o2on-svn @ lists.sourceforge.jp Wed Jun 18 00:11:07 2008
From: o2on-svn @ lists.sourceforge.jp (o2on svn commit)
Date: Wed, 18 Jun 2008 00:11:07 +0900
Subject: [o2on-svn] =?utf-8?b?WzEwMV0gIOODqeOCpOODluODqeODquOCouODg+ODlw==?=
=?utf-8?b?44OH44O844OIIDogQm9vc3QgMS4zNS4wIC8gIFNRTGl0ZSAzLjUuOQ==?=
Message-ID: <1213715467.054926.17036.nullmailer@users.sourceforge.jp>
Revision: 101
http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=o2on&view=rev&rev=101
Author: k-uehara
Date: 2008-06-18 00:11:06 +0900 (Wed, 18 Jun 2008)
Log Message:
-----------
????????????????? Boost 1.35.0 / SQLite 3.5.9
????ャ??潟??贋?: x64???菴違????
Modified Paths:
--------------
branches/BRANCH_0043/o2on/doc/build.txt
branches/BRANCH_0043/o2on/src.o2on/o2on.vcproj
Modified: branches/BRANCH_0043/o2on/doc/build.txt
===================================================================
--- branches/BRANCH_0043/o2on/doc/build.txt 2008-05-31 06:51:40 UTC (rev 100)
+++ branches/BRANCH_0043/o2on/doc/build.txt 2008-06-17 15:11:06 UTC (rev 101)
@@ -2,24 +2,25 @@
?Visual C++ 2005
?Platform SDK 2003 Server R2
-?Boost 1.34.1
+?Boost 1.35.0
?Crypto++ Library 5.5.2
-?zlib 1.2.3
?Xerces-C++ 2.8.0
-?SQLite 3.5.6
-?UPX 3.03
-?MiniZip Ver0.02c
+?zlib 1.2.3
+?SQLite 3.5.9
????
+?MiniZip Ver0.02c
+?UPX 3.03
+
??????F
------------------------------------------------------------------------------
Visual C++ 2005 Express Edition
------------------------------------------------------------------------------
Visual Studio 2005????????????????Express????????
-???Expres????????????????Win32 Release????????????
+???Express????????????????Win32 Release????????????
http://www.microsoft.com/japan/msdn/vstudio/express/past/2005/
http://www.microsoft.com/japan/msdn/vstudio/express/maninstall/ (ISO????)
@@ -53,31 +54,43 @@
------------------------------------------------------------------------------
- Boost 1.34.1
+ Boost 1.35.0
------------------------------------------------------------------------------
http://sourceforge.net/project/showfiles.php?group_id=7586
-boost_1_34_1?boost-jam-3.1.16-1-ntx86.zip???????
+boost_1_35_0?boost-jam-3.1.16-1-ntx86.zip???????
-?boost_1_34_1?????????i??D:\project\boost_1_34_1?
-?boost-jam-3.1.16-1-ntx86.zip??bjam.exe?boost_1_34_1???????
+?boost_1_35_0?????????i??D:\project\boost_1_35_0?
+?boost-jam-3.1.16-1-ntx86.zip??bjam.exe?boost_1_35_0???????
?bjam????
+ Platform SDK????????????Set Windows XP 32-bit Build Environment (Retail)?
+ > C:\Program Files\Microsoft Visual Studio 8\VC\vcvarsall.bat
> D:
- > cd D:\project\boost_1_34_1
- > bjam "-sTOOLS=vc-8_0" stage
+ > cd D:\project\boost_1_35_0
+ > bjam --toolset=msvc link=static runtime-link=static threading=multi release debug stage
?Visual Studio????????????
- D:\project\boost_1_34_1 ? ?????????????
- D:\project\boost_1_34_1\stage\lib ? ????????????
+ D:\project\boost_1_35_0 ? ?????????????
+ D:\project\boost_1_35_0\stage\lib ? ????????????
-[x64]
- ?????????????????????????
- > D:
- > cd D:\project\boost_1_34_1_x64
- > bjam "-sTOOLS=vc-8_0-amd64" stage
- D:\project\boost_1_34_1_x64 ? x64??????????????
- D:\project\boost_1_34_1_x64\stage\lib ? x64?????????????
+------------------------------------------------------------------------------
+ Xerces-C++ 2.8.0
+------------------------------------------------------------------------------
+http://xerces.apache.org/xerces-c/download.cgi
+xerces-c-src_2_8_0.zip
+?xerces-c-src2_8_0\Projects\Win32\VC8\xerces-all\xerces-all.sln ???
+
+????????????????????????????
+ XercesLib Static Debug Win32 Static Debug|Win32
+ XercesLib Static Release Win32 Static Release|Win32
+
+?Visual Studio????????????
+ xerces-c-src_2_8_0\src ? ?????????????
+ xerces-c-src_2_8_0\Build\Win32\VC8\StaticDebug ? ????????????
+ xerces-c-src_2_8_0\Build\Win32\VC8\StaticRelease ? ????????????
+
+
------------------------------------------------------------------------------
Crypto++ Library 5.5.2
------------------------------------------------------------------------------
@@ -89,15 +102,10 @@
?cryptest.sln???
?????????????????????????
- [x86]
cryptlib Debug Win32 Debug|Win32
cryptlib Release Win32 Release|Win32
- [x64]
- cryptlib Debug Win32 Debug|x64
- cryptlib Release Win32 Release|x64
-
------------------------------------------------------------------------------
zlib 1.2.3
------------------------------------------------------------------------------
@@ -111,63 +119,32 @@
------------------------------------------------------------------------------
- Xerces-C++ 2.8.0
+ SQLite 3.5.9
------------------------------------------------------------------------------
-http://xml.apache.org/xerces-c/download.cgi
-xerces-c-src_2_8_0.zip
-
-?xerces-c-src2_8_0\Projects\Win32\VC8\xerces-all\xerces-all.sln ???
-
-????????????????????????????
- XercesLib Static Debug Win32 Static Debug|Win32
- XercesLib Static Release Win32 Static Release|Win32
-
-?Visual Studio????????????
- xerces-c-src_2_8_0\src ? ?????????????
- xerces-c-src_2_8_0\Build\Win32\VC8\StaticDebug ? ????????????
- xerces-c-src_2_8_0\Build\Win32\VC8\StaticRelease ? ????????????
-
-[x64]
- ????????????????????
- ??????? ??????? ????????????????...?
- ?????????????x64???OK
- ???????? ????????XercesLib???????????????
- ??????????x64??????????
- ????Static Debug??Static Release??????????????Win32?
- ?????????64??????B???????????XERCES_NO_ASM????
- ????????????????????????????
- XercesLib Static Debug x64 Static Debug|x64
- XercesLib Static Release x64 Static Release|x64
- ?Visual Studio????????????
- xerces-c-src_2_8_0\src ? ?????????????
- xerces-c-src_2_8_0\Build\x64\VC8\StaticDebug ? ????????????
- xerces-c-src_2_8_0\Build\x64\VC8\StaticRelease ? ????????????
-
-------------------------------------------------------------------------------
- SQLite 3.5.6
-------------------------------------------------------------------------------
-http://www.sqlite.org/index.html
-?sqlite-3_5_6.zip ????????????
+http://www.sqlite.org/
+?sqlite-3_5_9.zip ????????????
??????????sqlite?????o2on????????
+-o2on
+-cryptopp
+-zlib
+-sqlite
+
------------------------------------------------------------------------------
- UPX 3.03
+ ???
------------------------------------------------------------------------------
-?: UPX???g?????????
-http://upx.sourceforge.net/#download
-upx303w.zip????????
+http://www.trick-palace.net/cxx/ex/babel/
+babel.zip???????
-?upx303w.zip??upx.exe?o2on????????
+???????????
+??????????babel?????o2on????????
+-o2on
+-cryptopp
+-zlib
+-sqlite
- +-upx.exe
+ +-babel
+
------------------------------------------------------------------------------
MiniZip Ver0.02c
------------------------------------------------------------------------------
@@ -179,21 +156,21 @@
+-cryptopp
+-zlib
+-sqlite
- +-upx.exe
+ +-babel
+-mzp.exe
+
------------------------------------------------------------------------------
- ???
+ UPX 3.03
------------------------------------------------------------------------------
-http://www.trick-palace.net/cxx/ex/babel/
-babel.zip???????
+?: UPX???g?????????
+http://upx.sourceforge.net/#download
+upx303w.zip????????
-???????????
-??????????babel?????o2on????????
+?upx303w.zip??upx.exe?o2on????????
+-o2on
+-cryptopp
+-zlib
+-sqlite
- +-upx.exe
+-mzp.exe
- +-babel
+ +-upx.exe
Modified: branches/BRANCH_0043/o2on/src.o2on/o2on.vcproj
===================================================================
--- branches/BRANCH_0043/o2on/src.o2on/o2on.vcproj 2008-05-31 06:51:40 UTC (rev 100)
+++ branches/BRANCH_0043/o2on/src.o2on/o2on.vcproj 2008-06-17 15:11:06 UTC (rev 101)
@@ -1731,6 +1731,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Revision: 102
http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=o2on&view=rev&rev=102
Author: k-uehara
Date: 2008-06-25 17:54:46 +0900 (Wed, 25 Jun 2008)
Log Message:
-----------
FIX: コンパイラの警告が出ないようにキャスト
Modified Paths:
--------------
branches/BRANCH_0043/o2on/src.o2on/O2IPFilter.cpp
Modified: branches/BRANCH_0043/o2on/src.o2on/O2IPFilter.cpp
===================================================================
--- branches/BRANCH_0043/o2on/src.o2on/O2IPFilter.cpp 2008-06-17 15:11:06 UTC (rev 101)
+++ branches/BRANCH_0043/o2on/src.o2on/O2IPFilter.cpp 2008-06-25 08:54:46 UTC (rev 102)
@@ -61,7 +61,7 @@
O2IPFilter::
getdefault(void)
{
- return (DefaultFlag);
+ return ((bool)DefaultFlag);
}
From o2on-svn @ lists.sourceforge.jp Thu Jun 26 20:53:50 2008
From: o2on-svn @ lists.sourceforge.jp (o2on svn commit)
Date: Thu, 26 Jun 2008 20:53:50 +0900
Subject: [o2on-svn] [103] FIX: for rev102
Message-ID: <1214481230.187416.13445.nullmailer@users.sourceforge.jp>
Revision: 103
http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=o2on&view=rev&rev=103
Author: k-uehara
Date: 2008-06-26 20:53:50 +0900 (Thu, 26 Jun 2008)
Log Message:
-----------
FIX: for rev102
キャストでは不十分だったのできちんと対応
Revision Links:
--------------
http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=o2on&view=rev&rev=102
Modified Paths:
--------------
branches/BRANCH_0043/o2on/src.o2on/O2IPFilter.cpp
Modified: branches/BRANCH_0043/o2on/src.o2on/O2IPFilter.cpp
===================================================================
--- branches/BRANCH_0043/o2on/src.o2on/O2IPFilter.cpp 2008-06-25 08:54:46 UTC (rev 102)
+++ branches/BRANCH_0043/o2on/src.o2on/O2IPFilter.cpp 2008-06-26 11:53:50 UTC (rev 103)
@@ -61,7 +61,7 @@
O2IPFilter::
getdefault(void)
{
- return ((bool)DefaultFlag);
+ return (DefaultFlag != 0);
}