Beispiel #1
0
	int store_element (char * question, int module_id, int atom_id, int clause_id, PrologElement * head) {
		MYSQL_RES * result;
		MYSQL_ROW row;
		int ind, sub;
		switch (head -> type) {
		case 0: case 2: case 4: case 5: case 7: case 8: case 9:
			sprintf (question, "insert into elements (module_id, atom_id, clause_id, type, reference, value) values (%i, %i, %i, %i, %i, %f)", module_id, atom_id, clause_id, head -> type, (head -> type == 8 || head -> type == 2) ? head -> getInteger () : 0, head -> type == 9 ? head -> getDouble () : 0.0);
			if (mysql_query (connection, question) != 0) return -1;
			ind = last_insert_id ();
			return ind;
			break;
		case 1:
			ind = store_element (question, module_id, atom_id, clause_id, head -> getLeft ());
			sub = store_element (question, module_id, atom_id, clause_id, head -> getRight ());
			sprintf (question, "insert into elements (module_id, atom_id, clause_id, type, reference, reference_right) values (%i, %i, %i, %i, %i, %i)", module_id, atom_id, clause_id, head -> type, ind, sub);
			if (mysql_query (connection, question) != 0) return -1;
			return last_insert_id ();
			break;
		case 3:
			sprintf (question, "insert into elements (module_id, atom_id, clause_id, type, reference) values (%i, %i, %i, %i, %i)", module_id, atom_id, clause_id, head -> type, find_or_create_atom (question, head -> getAtom ()));
			if (mysql_query (connection, question) != 0) return -1;
			return last_insert_id ();
			break;
		case 6:
			sprintf (question, "insert into texts (module_id, atom_id, clause_id, text) values (%i, %i, %i, '%s')", module_id, atom_id, clause_id, head -> getText ());
			if (mysql_query (connection, question) != 0) return -1;
			sprintf (question, "insert into elements (module_id, atom_id, clause_id, type, reference) values (%i, %i, %i, %i, %i)", module_id, atom_id, clause_id, head -> type, last_insert_id ());
			if (mysql_query (connection, question) != 0) return -1;
			return last_insert_id ();
			break;
		default: break;
		}
		return -1;
	}
Beispiel #2
0
int insert_model(void* model, const char* stmt) {
  struct model* m = model;
  
  if(query(stmt) == 0) {
    m->id_ul = last_insert_id();
    sprintf(m->id, "%lu", m->id_ul);
    return 0;
  }
  else {
    return -1;
  }
}
Beispiel #3
0
	virtual bool code (PrologElement * parameters, PrologResolution * resolution) {
		if (parameters -> isEarth ()) {
			delete this;
			return true;
		}
		if (! parameters -> isPair ()) return false;
		PrologElement * a = parameters -> getLeft ();
		if (! a -> isAtom ()) return false;
		parameters = parameters -> getRight ();
		PrologAtom * control_atom = a -> getAtom ();
		AREA question;
		if (control_atom == sql_atom) {
			if (! parameters -> isPair ()) return false;
			PrologElement * q = parameters -> getLeft ();
			if (! q -> isText ()) return false;
			parameters = parameters -> getRight ();
			if (mysql_query (connection, q -> getText ()) != 0) return false;
			MYSQL_RES * result = mysql_use_result (connection);
			if (result == NULL) return true;
			MYSQL_ROW row;
			int num_fields = mysql_num_fields (result);
			parameters -> setEarth ();
			while ((row = mysql_fetch_row (result)) != 0) {
				parameters -> setPair ();
				PrologElement * head = parameters -> getLeft ();
				for (int ind = 0; ind < num_fields; ind++) {
					head -> setPair ();
					if (row [ind] != NULL) {
						head -> getLeft () -> setText (row [ind]);
					}
					head = head -> getRight ();
				}
				parameters = parameters -> getRight ();
			}
			mysql_free_result (result);
			return true;
		}
		if (control_atom == dbcl_atom) {
			if (! parameters -> isPair ()) return false;
			PrologElement * e = parameters -> getLeft ();
			parameters = parameters -> getRight ();
			if (e -> isText ()) {
				if (! parameters -> isPair ()) return false;
				PrologElement * atom = parameters -> getLeft ();
				if (! atom -> isText ()) return false;
				parameters = parameters -> getRight ();
				if (parameters -> isVar ()) return read_number_of_clauses (parameters, e -> getText (), atom -> getText ());
				if (! parameters -> isPair ()) return false;
				PrologElement * ordering = parameters -> getLeft ();
				if (ordering -> isVar ()) return read_number_of_clauses (ordering, e -> getText (), atom -> getText ());
				if (! ordering -> isInteger ()) return false;
				parameters = parameters -> getRight ();
				if (parameters -> isEarth ()) return read_number_of_clauses (ordering, e -> getText (), atom -> getText ());
				return read_clause (parameters, e -> getText (), atom -> getText (), ordering -> getInteger ());
			}
			if (e -> isAtom ()) {
				PrologDirectory * dir = find_atoms_module (e -> getAtom ());
				if (dir == NULL) return false;
				if (parameters -> isVar ()) return read_number_of_clauses (parameters, dir -> name (), e -> getAtom () -> name ());
				if (! parameters -> isPair ()) return false;
				PrologElement * ordering = parameters -> getLeft ();
				if (ordering -> isVar ()) return read_number_of_clauses (ordering, dir -> name (), e -> getAtom () -> name ());
				if (! ordering -> isInteger ()) return false;
				parameters = parameters -> getRight ();
				if (parameters -> isEarth ()) return read_number_of_clauses (ordering, dir -> name (), e -> getAtom () -> name ());
				return read_clause (parameters, dir -> name (), e -> getAtom () -> name (), ordering -> getInteger ());
			}
			return false;
		}
		if (control_atom == adbcl_atom || control_atom == adbcl0_atom) {
			if (! parameters -> isPair ()) return false;
			parameters = parameters -> getLeft ();
			AREA drop;
			if (fast) root -> getValue (parameters, drop, 0);
			if (! parameters -> isPair ()) return false;
			PrologElement * head = parameters -> getLeft ();
			if (! head -> isPair ()) return false;
			PrologElement * atom = head -> getLeft ();
			if (! atom -> isAtom ()) return false;
			MYSQL_RES * result;
			MYSQL_ROW row;
			PrologDirectory * dir = find_atoms_module (atom -> getAtom ());
			// get the module_id and atom_id
			int module_id = find_or_create_module (question, dir -> name ());
			int atom_id = find_or_create_atom (question, atom -> getAtom ());
			// now get the clause ordering
			int ordering = 0;
			if (control_atom == adbcl_atom) {
				if (fast) sprintf (question, "select max(ordering) + 1 from text_clauses where module_id = %i and atom_id = %i", module_id, atom_id);
				else sprintf (question, "select max(ordering) + 1 from clauses where module_id = %i and atom_id = %i", module_id, atom_id);
				if (mysql_query (connection, question) != 0) return false;
				result = mysql_use_result (connection);
				if (result == NULL) return false;
				if (mysql_num_fields (result) < 1) FAIL
				if ((row = mysql_fetch_row (result)) == 0) FAIL
				if (row [0] != NULL) ordering = atoi (row [0]);
				mysql_free_result (result);
			} else {
				if (fast) sprintf (question, "update text_clauses set ordering = ordering + 1 where atom_id = %i", atom_id);
				else sprintf (question, "update clauses set ordering = ordering + 1 where atom_id = %i", atom_id);
				if (mysql_query (connection, question) != 0) return false;
			}
			// insert clause and get clause id
			if (fast) {
				sprintf (question, "insert into text_clauses (module_id, atom_id, ordering, text) values (%i, %i, %i, '%s')", module_id, atom_id, ordering, drop);
				if (mysql_query (connection, question) != 0) {printf ("failed at text clause\n");}
				return true;
			}
			sprintf (question, "insert into clauses (module_id, atom_id, ordering, parameters_id, body_id) values (%i, %i, %i, 0, 0)", module_id, atom_id, ordering);
			if (mysql_query (connection, question) != 0) return false;
			int clause_id = last_insert_id();
			// now insert elements
			int head_id = store_element (question, module_id, atom_id, clause_id, head -> getRight ());
			int body_id = store_element (question, module_id, atom_id, clause_id, parameters -> getRight ());
			sprintf (question, "update clauses set parameters_id = %i, body_id = %i where id = %i", head_id, body_id, clause_id);
			if (mysql_query (connection, question) != 0) return false;
			return true;
		}
Beispiel #4
0
	int create_atom (char * question, int module_id, char * atom_name) {
		sprintf (question, "insert into atoms (module_id, atom) values (%i, '%s')", module_id, atom_name);
		if (mysql_query (connection, question) != 0) return -1;
		return last_insert_id ();
	}
Beispiel #5
0
	int create_module (char * question, char * module_name) {
		sprintf (question, "insert into modules (module) values ('%s')", module_name);
		if (mysql_query (connection, question) != 0) return -1;
		return last_insert_id ();
	}
		size_t connection::run_prepared_insert_impl(prepared_statement_t& prepared_statement) {
			execute_statement(prepared_statement.native_handle());
			return last_insert_id();
		}
		size_t connection::insert_impl(const std::string& statement) {
			auto prepared = prepare_statement(*_handle, statement);
			execute_statement(prepared->stmt);
			
			return last_insert_id();
		}