powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / SQLite [игнор отключен] [закрыт для гостей] / SQLite VS Gigabase
1 сообщений из 51, страница 3 из 3
SQLite VS Gigabase
    #35508011
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
PPA

"Ну кто так строит" (с). В рассылке эскулайта чуть не каждый день пользователи жалуются на глюки при работе с различными врапперами и в вижуал средах. Напишите встроенную в эскулайт функцию и вызывайте ее без всякого враппера, зачем вам т акой франкенштейн?
Вот как пример:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
/*
function may work with 64-bit integers

from, to, step, table name
create table testrange(rowid);
select intrange2table (1,10,1,'testrange');
select * from testrange;
1
2
3
4
5
6
7
8
9
10

select intrange2table (10000000000,100000000000,10000000000,'testrange');
select * from testrange;
1
2
3
4
5
6
7
8
9
10
10000000000
20000000000
30000000000
40000000000
50000000000
60000000000
70000000000
80000000000
90000000000
100000000000
*/
static void intrange2table4Func(
	sqlite3_context *context,
	int argc,
	sqlite3_value **argv
) {
	u_int64_t i;
	const unsigned char *zTable;
	sqlite3 *db;
	sqlite3_stmt *pStmt;        /* A statement */
	int rc;                     /* Result code */
	char *zSql;                 /* An SQL statement */

	if( sqlite3_value_type(argv[ 0 ]) == SQLITE_NULL || sqlite3_value_type(argv[ 1 ]) == SQLITE_NULL  || \
sqlite3_value_type(argv[ 2 ]) == SQLITE_NULL  || sqlite3_value_type(argv[ 3 ]) == SQLITE_NULL ){
		sqlite3_result_null(context);
		return;
	}
	zTable = sqlite3_value_text(argv[ 3 ]);
	db = (sqlite3*) sqlite3_context_db_handle(context);
	zSql = sqlite3_mprintf("INSERT INTO %Q (rowid) VALUES (?)", zTable);
   	rc = sqlite3_prepare(db, zSql, - 1 , &pStmt,  0 );
	sqlite3_free(zSql);
   	if( rc != SQLITE_OK ){
		sqlite3_result_error(context, sqlite3_errmsg(db), - 1 );
		return;
   	}
	for (i=sqlite3_value_int64(argv[ 0 ]);i<=sqlite3_value_int64(argv[ 1 ]);i=i+sqlite3_value_int64(argv[ 2 ])) {
		sqlite3_bind_int64(pStmt,  1 , i);
		sqlite3_step(pStmt);
		if( rc != SQLITE_OK ) {
			sqlite3_result_error(context, sqlite3_errmsg(db), - 1 );
			return;
		}
		rc = sqlite3_reset(pStmt);
	}
	sqlite3_finalize(pStmt);
	return;
}

Компилируется вот так:
Код: plaintext
gcc -fPIC -lm -shared tablefunc.c -o libsqlitetablefunc.so

Пишите набор встроенных функций под свою задачу и собираете расширение или напрямую вкомпиливаете их в эскулайт. Как видите, код простой получается. Например, полсотни функций, нужных для построения биллинга, пишутся примерно за неделю.

Под виндой есть компилятор mingw (порт gcc). Мегабайт 50 при установке занимает. Указанный выше код компилируется одной строчкой и легко переносится на любую платформу.
...
Рейтинг: 0 / 0
1 сообщений из 51, страница 3 из 3
Форумы / SQLite [игнор отключен] [закрыт для гостей] / SQLite VS Gigabase
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]