Beispiel #1
0
		void check_class(uint16_t id, string name, unsigned long hash)
		{
			DCClass* dcc = g_dcf->get_class(id);
			if(name != dcc->get_name())
			{
				// TODO: Try and update the database instead of exiting
				m_log->fatal() << "Class name '" << dcc->get_name() << "' from DCFile does not match"
				               " name '" << name << "' in database, for dc_id " << id << endl;
				m_log->fatal() << "Database must be rebuilt." << endl;
				exit(1);
			}

			HashGenerator gen;
			dcc->generate_hash(gen);
			if(hash != gen.get_hash())
			{
				// TODO: Try and update the database instead of exiting
				m_log->fatal() << "Class hash '" << gen.get_hash() << "' from DCFile does not match"
				               " hash '" << hash << "' in database, for dc_id " << id << endl;
				m_log->fatal() << "Database must be rebuilt." << endl;
				exit(1);
			}

			// TODO: Check class_fields table exists

		}
Beispiel #2
0
		void check_classes()
		{
			int dc_id;
			uint8_t storable;
			string dc_name;
			unsigned long dc_hash;

			// Prepare sql statements
			statement get_row_by_id = (m_sql.prepare << "SELECT hash, name FROM classes WHERE id=:id",
			                           into(dc_hash), into(dc_name), use(dc_id));
			statement insert_class = (m_sql.prepare << "INSERT INTO classes VALUES (:id,:hash,:name,:stored)",
			                          use(dc_id), use(dc_hash), use(dc_name), use(storable));

			// For each class, verify an entry exists and has the correct name and value
			for(dc_id = 0; dc_id < g_dcf->get_num_classes(); ++dc_id)
			{
				get_row_by_id.execute(true);
				if(m_sql.got_data())
				{
					check_class(dc_id, dc_name, dc_hash);
				}
				else
				{
					DCClass* dcc = g_dcf->get_class(dc_id);

					// Create fields table for the class
					storable = create_fields_table(dcc);

					// Create class row in classes table
					HashGenerator gen;
					dcc->generate_hash(gen);
					dc_hash = gen.get_hash();
					dc_name = dcc->get_name();
					insert_class.execute(true);
				}
			}
		}