void Fl_Query::disconnect() { if (m_database) { close(); free_stmt(); m_database->m_queryList.remove(this); m_database = NULL; } }
static void free_stmts(List *stmts) { ListCell *s; foreach(s, stmts) { free_stmt((PLpgSQL_stmt *) lfirst(s)); }
void unparse_program(Program * p, Unparser_Receiver r, void *data, int fully_parenthesize, int indent_lines, int f_index) { Stmt *stmt = decompile_program(p, f_index); prog = p; receiver = r; receiver_data = data; list_prg(stmt, fully_parenthesize, indent_lines); free_stmt(stmt); }
Fl_Query::~Fl_Query() { close(); free_stmt(); disconnect(); }
void Fl_Query::sql(const Fl_String& _sql) { // Looking up for SQL parameters Fl_String paramName; char delimitter[] = " "; char delimitters[] = "'\":'"; char *s = strdup(_sql.c_str()); char *paramStart = s; char *paramEnd; int paramNumber = 0; for (unsigned i = 0; i < m_params.count(); i++) { Fl_Param& param = m_params[i]; param.bind_clear(); } Fl_String odbcSQL = ""; bool endOfString; for (;;) { paramEnd = strpbrk(paramStart,delimitters); if ( !paramEnd ) { odbcSQL += paramStart; break; } *delimitter = *paramEnd; if (*paramEnd == ':') { if (paramEnd != s && isalnum(*(paramEnd-1)) ) { *paramEnd = char(0); odbcSQL += paramStart; odbcSQL += ":"; paramStart = paramEnd + 1; continue; } if (paramEnd[1] == ':') { paramEnd++; *paramEnd = char(0); odbcSQL += paramStart; paramStart = paramEnd + 1; continue; } } if ( *paramEnd == '\'' || *paramEnd == '"' ) { paramEnd = strpbrk(paramEnd + 1,delimitter); if ( !paramEnd ) { break; // Unmatched quotes } *paramEnd = char(0); odbcSQL += paramStart; odbcSQL += delimitter; paramStart = paramEnd + 1; continue; } *paramEnd = char(0); odbcSQL += paramStart; paramStart = paramEnd + 1; delimitter[0] = 0; char *ptr = paramStart; for (; *ptr; ptr++) { char c = *ptr; if ( c == '_' ) continue; if (!isalnum(c)) { delimitter[0] = c; break; } } paramEnd = ptr; endOfString = (*paramEnd == 0); *paramEnd = char(0); if (ptr != paramStart) { //Fl_Param *param; int index = m_params.param_index(paramStart); if ( index == -1 ) { theParam = new Fl_Param(paramStart); m_params.add(theParam); } else { theParam = &m_params[index]; } theParam->bind_add(paramNumber); paramNumber++; odbcSQL += "?"; odbcSQL += delimitter; } else { odbcSQL += ":"; } paramStart = paramEnd + 1; if (endOfString) break; } free(s); for (int p = m_params.count() - 1; p >= 0; p--) if (!m_params[p].bind_count()) m_params.remove(p); if (m_sql != odbcSQL) { m_sql = odbcSQL; if (m_database) { if ( active() ) close(); free_stmt(); } } }