亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? sqlite3odbc.c

?? 定時(shí)器for timer for ic chip
?? C
?? 第 1 頁 / 共 5 頁
字號(hào):
    *resp = &tres.resarr[1];
    if (ncolp) {
	*ncolp = tres.ncol;
    }
    if (nrowp) {
	*nrowp = tres.nrow;
    }
    return rc;
}

/**
 * Set error message and SQL state on DBC
 * @param d database connection pointer
 * @param naterr native error code
 * @param msg error message
 * @param st SQL state
 */

#if defined(__GNUC__) && (__GNUC__ >= 2)
static void setstatd(DBC *, int, char *, char *, ...)
    __attribute__((format (printf, 3, 5)));
#endif

static void
setstatd(DBC *d, int naterr, char *msg, char *st, ...)
{
    va_list ap;

    if (!d) {
	return;
    }
    d->naterr = naterr;
    d->logmsg[0] = '\0';
    if (msg) {
	int count;

	va_start(ap, st);
	count = vsnprintf((char *) d->logmsg, sizeof (d->logmsg), msg, ap);
	va_end(ap);
	if (count < 0) {
	    d->logmsg[sizeof (d->logmsg) - 1] = '\0';
	}
    }
    if (!st) {
	st = "?????";
    }
    strncpy(d->sqlstate, st, 5);
    d->sqlstate[5] = '\0';
}

/**
 * Set error message and SQL state on statement
 * @param s statement pointer
 * @param naterr native error code
 * @param msg error message
 * @param st SQL state
 */

#if defined(__GNUC__) && (__GNUC__ >= 2)
static void setstat(STMT *, int, char *, char *, ...)
    __attribute__((format (printf, 3, 5)));
#endif

static void
setstat(STMT *s, int naterr, char *msg, char *st, ...)
{
    va_list ap;

    if (!s) {
	return;
    }
    s->naterr = naterr;
    s->logmsg[0] = '\0';
    if (msg) {
	int count;

	va_start(ap, st);
	count = vsnprintf((char *) s->logmsg, sizeof (s->logmsg), msg, ap);
	va_end(ap);
	if (count < 0) {
	    s->logmsg[sizeof (s->logmsg) - 1] = '\0';
	}
    }
    if (!st) {
	st = "?????";
    }
    strncpy(s->sqlstate, st, 5);
    s->sqlstate[5] = '\0';
}

/**
 * Report IM001 (not implemented) SQL error code for HDBC.
 * @param dbc database connection handle
 * @result ODBC error code
 */

static SQLRETURN
drvunimpldbc(HDBC dbc)
{
    DBC *d;

    if (dbc == SQL_NULL_HDBC) {
	return SQL_INVALID_HANDLE;
    }
    d = (DBC *) dbc;
    setstatd(d, -1, "not supported", "IM001");
    return SQL_ERROR;
}

/**
 * Report IM001 (not implemented) SQL error code for HSTMT.
 * @param stmt statement handle
 * @result ODBC error code
 */

static SQLRETURN
drvunimplstmt(HSTMT stmt)
{
    STMT *s;

    if (stmt == SQL_NULL_HSTMT) {
	return SQL_INVALID_HANDLE;
    }
    s = (STMT *) stmt;
    setstat(s, -1, "not supported", "IM001");
    return SQL_ERROR;
}

/**
 * Free memory given pointer to memory pointer.
 * @param x pointer to pointer to memory to be free'd
 */

static void
freep(void *x)
{
    if (x && ((char **) x)[0]) {
	xfree(((char **) x)[0]);
	((char **) x)[0] = NULL;
    }
}

/**
 * Report S1000 (out of memory) SQL error given STMT.
 * @param s statement pointer
 * @result ODBC error code
 */

static SQLRETURN
nomem(STMT *s)
{
    setstat(s, -1, "out of memory", (*s->ov3) ? "HY000" : "S1000");
    return SQL_ERROR;
}

/**
 * Report S1000 (not connected) SQL error given STMT.
 * @param s statement pointer
 * @result ODBC error code
 */

static SQLRETURN
noconn(STMT *s)
{
    setstat(s, -1, "not connected", (*s->ov3) ? "HY000" : "S1000");
    return SQL_ERROR;
}

/**
 * Internal locale neutral strtod function.
 * @param data pointer to string
 * @param endp pointer for ending character
 * @result double value
 */

static double
ln_strtod(const char *data, char **endp)
{
#if defined(HAVE_LOCALECONV) || defined(_WIN32)
    struct lconv *lc;
    char buf[128], *p, *end;
    double value;

    lc = localeconv();
    if (lc && lc->decimal_point && lc->decimal_point[0] &&
	lc->decimal_point[0] != '.') {
	strncpy(buf, data, sizeof (buf) - 1);
	buf[sizeof (buf) - 1] = '\0';
	p = strchr(buf, '.');
	if (p) {
	    *p = lc->decimal_point[0];
	}
	p = buf;
    } else {
	p = (char *) data;
    }
    value = strtod(p, &end);
    end = (char *) data + (end - p);
    if (endp) {
	*endp = end;
    }
    return value;
#else
    return strtod(data, endp);
#endif
}

/**
 * Strip quotes from quoted string in-place.
 * @param str string
 */

static char *
unquote(char *str)
{
    if (str) {
	int len = strlen(str);

	if (len > 1) {
	    if ((str[0] == '\'' && str[len - 1] == '\'') ||
		(str[0] == '"' && str[len - 1] == '"') ||
		(str[0] == '[' && str[len - 1] == ']')) {
		str[len - 1] = '\0';
		strcpy(str, str + 1);
	    }
	}
    }
    return str;
}

/**
 * Unescape search pattern for e.g. table name in
 * catalog functions. Replacements in string are done in-place.
 * @param str string
 * @result number of pattern characters in string or 0
 */

static int
unescpat(char *str)
{
    char *p, *q;
    int count = 0;

    p = str;
    while ((q = strchr(p, '_')) != NULL) {
	if (q == str || q[-1] != '\\') {
	    count++;
	}
	p = q + 1;
    }
    p = str;
    while ((q = strchr(p, '%')) != NULL) {
	if (q == str || q[-1] != '\\') {
	    count++;
	}
	p = q + 1;
    }
    p = str;
    while ((q = strchr(p, '\\')) != NULL) {
	if (q[1] == '\\' || q[1] == '_' || q[1] == '%') {
	    strcpy(q, q + 1);
	}
	p = q + 1;
    }
    return count;
}

/**
 * SQL LIKE string match with optional backslash escape handling.
 * @param str string
 * @param pat pattern
 * @param esc when true, treat literally "\\" as "\", "\?" as "?", "\_" as "_"
 * @result true when pattern matched
 */

static int
namematch(char *str, char *pat, int esc)
{
    int cp, ch;

    while (1) {
	cp = TOLOWER(*pat);
	if (cp == '\0') {
	    if (*str != '\0') {
		goto nomatch;
	    }
	    break;
	}
	if (*str == '\0' && cp != '%') {
	    goto nomatch;
	}
	if (cp == '%') {
	    while (*pat == '%') {
		++pat;
	    }
	    cp = TOLOWER(*pat);
	    if (cp == '\0') {
		break;
	    }
	    while (1) {
		if (cp != '_' && cp != '\\') {
		    while (*str) {
			ch = TOLOWER(*str);
			if (ch == cp) {
			    break;
			}
			++str;
		    }
		}
		if (namematch(str, pat, esc)) {
		    goto match;
		}
		if (*str == '\0') {
		    goto nomatch;
		}
		ch = TOLOWER(*str);
		++str;
	    }
	}
	if (cp == '_') {
	    pat++;
	    str++;
	    continue;
	}
	if (esc && cp == '\\' &&
	    (pat[1] == '\\' || pat[1] == '%' || pat[1] == '_')) {
	    ++pat;
	    cp = TOLOWER(*pat);
	}
	ch = TOLOWER(*str++);
	++pat;
	if (ch != cp) {
	    goto nomatch;
	}
    }
match:
    return 1;
nomatch:
    return 0;
}

/**
 * Busy callback for SQLite.
 * @param udata user data, pointer to DBC
 * @param count count of subsequenct calls
 * @result true or false
 */

static int
busy_handler(void *udata, int count)
{
    DBC *d = (DBC *) udata;
    long t1;
    int ret = 0;
#ifndef _WIN32
    struct timeval tv;
#endif

    if (d->busyint) {
	d->busyint = 0;
	return ret;
    }
    if (d->timeout <= 0) {
	return ret;
    }
    if (count <= 1) {
#ifdef _WIN32
	d->t0 = GetTickCount();
#else
	gettimeofday(&tv, NULL);
	d->t0 = tv.tv_sec * 1000 + tv.tv_usec / 1000;
#endif
    }
#ifdef _WIN32
    t1 = GetTickCount();
#else
    gettimeofday(&tv, NULL);
    t1 = tv.tv_sec * 1000 + tv.tv_usec / 1000;
#endif
    if (t1 - d->t0 > d->timeout) {
	goto done;
    }
#ifdef _WIN32
    Sleep(10);
#else
#ifdef HAVE_USLEEP
    usleep(10000);
#else
    tv.tv_sec = 0;
    tv.tv_usec = 10000;
    select(0, NULL, NULL, NULL, &tv);
#endif
#endif
    ret = 1;
done:
    return ret;
}

/**
 * Set SQLite options (PRAGMAs) given SQLite handle.
 * @param x SQLite database handle
 * @param d DBC pointer
 * @result SQLite error code
 *
 * SQLite < 3.3.x and not shortnames DSN option:
 * "full_column_names" is always turned on and "short_column_names"
 * is always turned off, to get the table names in column labels.
 */

static int
setsqliteopts(sqlite3 *x, DBC *d)
{
    int count = 0, step = 0, max, rc = SQLITE_ERROR;

#if defined(HAVE_SQLITE3COLUMNTABLENAME) && (HAVE_SQLITE3COLUMNTABLENAME)
    max = d->longnames ? 3 : 1;
#else
    max = 3;
#endif
    if (d->shortnames) {
	max = 3;
    }
    while (step < max) {
	if (step < 1) {
	    rc = sqlite3_exec(x, "PRAGMA empty_result_callbacks = on;",
			      NULL, NULL, NULL);
	} else if (step < 2) {
	    rc = sqlite3_exec(x, d->shortnames ?
			      "PRAGMA full_column_names = off;" :
			      "PRAGMA full_column_names = on;",
			      NULL, NULL, NULL);
	} else if (step < 3) {
	    rc = sqlite3_exec(x, d->shortnames ?
			      "PRAGMA short_column_names = on;" :
			      "PRAGMA short_column_names = off;",
			      NULL, NULL, NULL);
	}
	if (rc != SQLITE_OK) {
	    if (rc != SQLITE_BUSY ||
		!busy_handler((void *) d, ++count)) {
		return rc;
	    }
	    continue;
	}
	count = 0;
	++step;
    }
    sqlite3_busy_handler(x, busy_handler, (void *) d);
    return SQLITE_OK;
}

/**
 * Free counted array of char pointers.
 * @param rowp pointer to char pointer array
 *
 * The -1-th element of the array holds the array size.
 * All non-NULL pointers of the array and then the array
 * itself are free'd.
 */

static void
freerows(char **rowp)
{
    PTRDIFF_T size, i;

    if (!rowp) {
	return;
    }
    --rowp;
    size = (PTRDIFF_T) rowp[0];
    for (i = 1; i <= size; i++) {
	freep(&rowp[i]);
    }
    freep(&rowp);
}

/**
 * Map SQL field type from string to ODBC integer type code.
 * @param typename field type string
 * @param nosign pointer to indicator for unsigned field or NULL
 * @param ov3 boolean, true for SQL_OV_ODBC3
 * @param nowchar boolean, for WINTERFACE don't use WCHAR
 * @result SQL data type
 */

static int
mapsqltype(const char *typename, int *nosign, int ov3, int nowchar)
{
    char *p, *q;
    int testsign = 0, result;

#ifdef WINTERFACE
    result = nowchar ? SQL_VARCHAR : SQL_WVARCHAR;
#else
    result = SQL_VARCHAR;
#endif
    if (!typename) {
	return result;
    }
    q = p = xmalloc(strlen(typename) + 1);
    if (!p) {
	return result;
    }
    strcpy(p, typename);
    while (*q) {
	*q = TOLOWER(*q);
	++q;
    }
    if (strncmp(p, "inter", 5) == 0) {
    } else if (strncmp(p, "int", 3) == 0 ||
	strncmp(p, "mediumint", 9) == 0) {
	testsign = 1;
	result = SQL_INTEGER;
    } else if (strncmp(p, "numeric", 7) == 0) {
	result = SQL_DOUBLE;
    } else if (strncmp(p, "tinyint", 7) == 0) {
	testsign = 1;
	result = SQL_TINYINT;
    } else if (strncmp(p, "smallint", 8) == 0) {
	testsign = 1;
	result = SQL_SMALLINT;
    } else if (strncmp(p, "float", 5) == 0) {
	result = SQL_DOUBLE;
    } else if (strncmp(p, "double", 6) == 0 ||
	strncmp(p, "real", 4) == 0) {
	result = SQL_DOUBLE;
    } else if (strncmp(p, "timestamp", 9) == 0) {
#ifdef SQL_TYPE_TIMESTAMP
	result = ov3 ? SQL_TYPE_TIMESTAMP : SQL_TIMESTAMP;
#else
	result = SQL_TIMESTAMP;
#endif
    } else if (strncmp(p, "datetime", 8) == 0) {
#ifdef SQL_TYPE_TIMESTAMP
	result = ov3 ? SQL_TYPE_TIMESTAMP : SQL_TIMESTAMP;
#else
	result = SQL_TIMESTAMP;
#endif
    } else if (strncmp(p, "time", 4) == 0) {
#ifdef SQL_TYPE_TIME
	result = ov3 ? SQL_TYPE_TIME : SQL_TIME;
#else
	result = SQL_TIME;
#endif
    } else if (strncmp(p, "date", 4) == 0) {
#ifdef SQL_TYPE_DATE
	result = ov3 ? SQL_TYPE_DATE : SQL_DATE;
#else
	result = SQL_DATE;
#endif
#ifdef SQL_LONGVARCHAR
    } else if (strncmp(p, "text", 4) == 0 ||
	       strncmp(p, "memo", 4) == 0) {
#ifdef WINTERFACE
	result = nowchar ? SQL_LONGVARCHAR : SQL_WLONGVARCHAR;
#else
	result = SQL_LONGVARCHAR;
#endif
#ifdef WINTERFACE
    } else if (strncmp(p, "wtext", 5) == 0 ||
	       strncmp(p, "wvarchar", 8) == 0 ||
	       strncmp(p, "longwvarchar", 12) == 0) {
	result = SQL_WLONGVARCHAR;
#endif
#endif
#ifdef SQL_BIT
    } else if (strncmp(p, "bool", 4) == 0 ||
	       strncmp(p, "bit", 3) == 0) {
	result = SQL_BIT;
#endif
#ifdef SQL_BIGINT
    } else if (strncmp(p, "bigint", 6) == 0) {
	result = SQL_BIGINT;
#endif
    } else if (strncmp(p, "blob", 4) == 0) {
	result = SQL_BINARY;
    } else if (strncmp(p, "varbinary", 9) == 0) {
	result = SQL_VARBINARY;
    } else if (strncmp(p, "longvarbinary", 13) == 0) {
	result = SQL_LONGVARBINARY;
    }
    if (nosign) {
	if (testsign) {
	    *nosign = strstr(p, "unsigned") != NULL;
	} else {
	    *nosign = 1;
	}
    }
    xfree(p);
    return result;
}

/**

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本三级韩国三级欧美三级| 国产在线精品一区二区三区不卡| 日韩一区二区三区四区五区六区| 久草热8精品视频在线观看| 亚洲色图在线视频| 欧美精品一区二区三区蜜桃视频| 91麻豆6部合集magnet| 久久aⅴ国产欧美74aaa| 一区二区三区国产精品| 国产欧美一区二区精品秋霞影院| 欧美精品在线观看播放| 91网站最新地址| 国产精品一区免费在线观看| 图片区日韩欧美亚洲| 最好看的中文字幕久久| 久久夜色精品国产欧美乱极品| 欧美性极品少妇| 99精品热视频| 国产成+人+日韩+欧美+亚洲| 日韩中文字幕不卡| 亚洲综合视频在线观看| 中文字幕一区二区三中文字幕| 精品福利视频一区二区三区| 欧美日韩国产成人在线免费| 色呦呦日韩精品| 99精品视频在线观看| 粉嫩蜜臀av国产精品网站| 精品一区二区影视| 久久精品国产精品亚洲精品| 日韩av中文字幕一区二区三区 | av成人动漫在线观看| 狠狠网亚洲精品| 极品美女销魂一区二区三区| 日韩av高清在线观看| 日韩主播视频在线| 丝袜亚洲另类欧美综合| 午夜av电影一区| 亚洲成人精品一区| 亚洲高清三级视频| 亚洲五码中文字幕| 亚洲午夜电影在线| 亚洲成a人v欧美综合天堂 | 中文字幕av不卡| 久久久久9999亚洲精品| 国产亚洲欧洲997久久综合 | 亚洲午夜视频在线观看| 亚洲一区二区四区蜜桃| 亚洲综合丁香婷婷六月香| 亚洲免费高清视频在线| 一区二区久久久久久| 亚洲一区二区视频| 日韩国产欧美三级| 久久99精品久久久久久| 国产精品综合视频| 丁香婷婷综合网| 91麻豆精品在线观看| 91成人在线免费观看| 欧美午夜精品一区| 欧美日韩极品在线观看一区| 欧美日韩国产区一| 91精品国产免费| 久久蜜桃香蕉精品一区二区三区| 久久久久国色av免费看影院| 国产精品成人免费在线| 亚洲国产精品尤物yw在线观看| 亚洲不卡在线观看| 久久精品72免费观看| 成人亚洲一区二区一| 91免费在线视频观看| 欧美日本一区二区三区| 精品美女一区二区| 国产精品免费av| 亚洲一区二区三区影院| 免费人成黄页网站在线一区二区| 久久av资源站| 91色视频在线| 91精品国产一区二区三区| 久久精品在线免费观看| 一区二区三区在线视频观看58| 日本系列欧美系列| av爱爱亚洲一区| 欧美一级精品大片| 国产精品你懂的| 五月天久久比比资源色| 国产一二精品视频| 欧美色精品天天在线观看视频| 日韩免费在线观看| 亚洲三级在线观看| 麻豆精品国产91久久久久久| av在线综合网| 欧美一级高清片在线观看| 18涩涩午夜精品.www| 免费高清不卡av| 在线中文字幕不卡| 久久久九九九九| 亚洲成av人片观看| 不卡的av网站| 日韩午夜在线影院| 亚洲精品国产无套在线观| 国产精品一区在线观看乱码| 欧美色电影在线| 日本一区二区视频在线| 蜜臀精品一区二区三区在线观看 | 欧美一卡二卡在线| 亚洲人成7777| 国v精品久久久网| 日韩一区二区麻豆国产| 亚洲精品乱码久久久久久黑人| 国产精品一二三四五| 337p亚洲精品色噜噜狠狠| 中文字幕日韩欧美一区二区三区| 极品销魂美女一区二区三区| 9191成人精品久久| 亚洲一区二区在线观看视频| 波多野结衣在线一区| 久久综合中文字幕| 日本特黄久久久高潮| 欧美中文字幕一区| 中文字幕中文字幕中文字幕亚洲无线| 激情综合五月婷婷| 精品久久久久久无| 日本不卡在线视频| 8x8x8国产精品| 性久久久久久久久久久久| 色一区在线观看| 亚洲欧美日韩国产一区二区三区| 处破女av一区二区| 国产三级一区二区| 国产美女视频91| xfplay精品久久| 久久精品国内一区二区三区| 欧美军同video69gay| 亚洲成人激情社区| 欧美调教femdomvk| 午夜一区二区三区在线观看| 在线亚洲免费视频| 一区二区三区在线不卡| 色乱码一区二区三区88| 亚洲综合男人的天堂| 色噜噜久久综合| 亚洲一区电影777| 欧美三级欧美一级| 日韩成人午夜精品| 日韩一级二级三级| 久久69国产一区二区蜜臀| 精品欧美乱码久久久久久1区2区 | 婷婷一区二区三区| 欧美日韩久久不卡| 日韩1区2区3区| 欧美va亚洲va国产综合| 国产一区二区三区综合| 国产欧美一区视频| gogo大胆日本视频一区| 亚洲人妖av一区二区| 精品视频1区2区| 美国三级日本三级久久99| 久久奇米777| 91网站视频在线观看| 午夜欧美视频在线观看| 日韩美女视频一区二区在线观看| 国产精品一区二区三区乱码| 中文字幕日本不卡| 欧美日韩一区二区在线观看视频| 日本中文字幕一区二区有限公司| 精品乱码亚洲一区二区不卡| 国产成人免费网站| 亚洲综合久久久| 欧美一区二区二区| 成人午夜在线免费| 亚洲成人av一区二区三区| 欧美va亚洲va在线观看蝴蝶网| 懂色中文一区二区在线播放| 亚洲综合色噜噜狠狠| 日韩一级片在线观看| 成人午夜激情影院| 亚洲成人第一页| 国产性天天综合网| 欧美在线观看视频在线| 久久国产福利国产秒拍| 亚洲欧美乱综合| 欧美成人性福生活免费看| 99久精品国产| 久久精品国产精品亚洲精品| 综合久久综合久久| 日韩免费观看2025年上映的电影| 高清shemale亚洲人妖| 亚洲一区在线观看免费| 久久精品男人的天堂| 在线亚洲高清视频| 国产精品1区2区3区| 亚洲成人一区在线| 国产精品三级电影| 在线不卡中文字幕播放| www.亚洲色图.com| 久久精品国产77777蜜臀| 亚洲综合免费观看高清在线观看| 久久久久久久久蜜桃| 欧美日韩国产色站一区二区三区| 成人网男人的天堂| 久久99精品久久久久久国产越南 |