22 #include <Common/Compat.h>
29 #include <Common/Error.h>
31 #include <Hypertable/Lib/ApacheLogParser.h>
32 #include <Hypertable/Lib/Client.h>
33 #include <Hypertable/Lib/KeySpec.h>
39 #include <opencog/server/CogServer.h>
44 using namespace opencog;
45 using namespace Hypertable;
52 <AccessGroup name=\"default\">\n\
55 <deleted>false</deleted>\n\
59 <deleted>false</deleted>\n\
63 <deleted>false</deleted>\n\
66 <Name>incoming</Name>\n\
67 <deleted>false</deleted>\n\
70 <Name>outgoing</Name>\n\
71 <deleted>false</deleted>\n\
75 <deleted>false</deleted>\n\
79 <deleted>false</deleted>\n\
83 <deleted>false</deleted>\n\
90 <AccessGroup name=\"default\">\n\
92 <Name>handle</Name>\n\
93 <deleted>false</deleted>\n\
99 #ifdef HYPERTABLE_INSTALL_DIR
103 c =
new Client(HYPERTABLE_INSTALL_DIR, HYPERTABLE_CONFIG_FILE,
TIMEOUT);
105 catch (Hypertable::Exception& e) {
106 if (e.code() == Error::REQUEST_TIMEOUT) {
107 throw NetworkException(TRACE_INFO,
"Timeout connecting to hyperspace."
108 " Confirm Hypertable servers are running and try again.");
116 std::cerr <<
"To use hypertable functionality, define"
117 <<
" HYPERTABLE_INSTALL_DIR and HYPERTABLE_CONFIG_FILE"
118 <<
" in opencog/hypertable/AtomspaceHTabler.h" << std::endl;
125 std::vector<String> tables;
126 c->get_tables(tables);
127 if (find(tables.begin(), tables.end(),
"Atomtable") == tables.end()) {
130 if (find(tables.begin(), tables.end(),
"Nametable") == tables.end()) {
133 if (find(tables.begin(), tables.end(),
"Outsettable") == tables.end()) {
136 m_handle_table = c->open_table(
"Atomtable");
137 m_handle_mutator = m_handle_table->create_mutator();
138 m_name_table = c->open_table(
"Nametable");
139 m_name_mutator = m_name_table->create_mutator();
140 m_outset_table = c->open_table(
"Outsettable");
141 m_outset_mutator = m_outset_table->create_mutator();
146 c->drop_table(
"Atomtable",
true);
147 c->drop_table(
"Nametable",
true);
148 c->drop_table(
"Outsettable",
true);
158 TableScannerPtr scanner_ptr;
161 std::stringstream row;
163 ssb.add_column(
"handle");
165 std::vector<Handle>::const_iterator iter;
166 for (iter = handles.begin(); iter != handles.end(); ++iter)
169 UUID uuid = (*iter).value();
172 ssb.add_row(row.str().c_str());
173 ssb.set_max_versions(1);
175 scanner_ptr = m_outset_table->create_scanner(ssb.get());
176 if (scanner_ptr->next(cell))
178 std::string handle_str((
char *)cell.value, cell.value_len);
179 UUID uuid = strtoul(handle_str.c_str(), NULL, 10);
181 return dynamic_cast<Link *
>(getAtom(h));
194 TableScannerPtr scanner_ptr;
198 ssb.add_column(
"handle");
199 std::stringstream row;
200 row << name <<
',' << (
unsigned long) t;
201 ssb.add_row(row.str().c_str());
202 ssb.set_max_versions(1);
204 scanner_ptr = m_name_table->create_scanner(ssb.get());
205 if (scanner_ptr->next(cell))
207 std::string handle_str((
char *)cell.value, cell.value_len);
208 UUID uuid = strtoul(handle_str.c_str(), NULL, 10);
210 return dynamic_cast<Node *
>(getAtom(h));
225 std::cout <<
"storeAtom() called\n";
226 AtomSpace *as = cogserver().getAtomSpace();
230 if (!as->isValidHandle(h)) {
231 std::cerr <<
"storeAtom(): Bad handle\n";
236 memset(&key, 0,
sizeof(key));
242 key.row_len = snprintf(row,
BUFF_SIZE,
"%lu", uuid);
246 if (as->isNode(as->getType(h)))
249 key.column_family =
"name";
250 m_handle_mutator->set(key, as->getName(h).c_str(), as->getName(h).length());
254 memset(&name_key, 0,
sizeof(name_key));
257 int len = snprintf(r,
BUFF_SIZE,
"%hu", as->getType(h));
259 std::string name_index = as->getName(h) +
',' + std::string(r,len);
260 name_key.row = name_index.c_str();
261 name_key.row_len = name_index.length();
262 name_key.column_family =
"handle";
264 m_name_mutator->set(name_key, key.row, key.row_len);
265 m_name_mutator->flush();
271 int arity = as->getArity(h);
272 const std::vector<Handle> &out = as->getOutgoing(h);
273 std::stringstream ss;
274 for (
int i = 0; i < arity; ++i)
283 key.column_family =
"outgoing";
284 m_handle_mutator->set(key, ss.str().c_str(), ss.str().length());
288 memset(&outset_key, 0,
sizeof(outset_key));
291 int len = snprintf(r,
BUFF_SIZE,
"%hu", as->getType(h));
293 std::vector<Handle>::const_iterator iter;
294 for (iter = as->getOutgoing(h).begin();
295 iter != as->getOutgoing(h).end(); ++iter)
297 UUID uuid = (*iter).value();
299 len += snprintf(r+len,
BUFF_SIZE-len,
"%lu", uuid);
302 outset_key.row_len = len;
304 outset_key.column_family =
"handle";
305 m_outset_mutator->set(outset_key, key.row, key.row_len);
306 m_outset_mutator->flush();
313 Type t = as->getType(h);
314 val_len = snprintf(val,
BUFF_SIZE,
"%d", t);
315 key.column_family =
"type";
316 m_handle_mutator->set(key, val, val_len);
322 unsigned short vlti = av.
getVLTI();
324 val_len = snprintf(val,
BUFF_SIZE,
"%hd", sti);
325 key.column_family =
"sti";
326 m_handle_mutator->set(key, val, val_len);
328 val_len = snprintf(val,
BUFF_SIZE,
"%hd", lti);
329 key.column_family =
"lti";
330 m_handle_mutator->set(key, val, val_len);
332 val_len = snprintf(val,
BUFF_SIZE,
"%hu", vlti);
333 key.column_family =
"vlti";
334 m_handle_mutator->set(key, val, val_len);
341 std::cerr <<
"Non-simple truth values are not handled\n";
344 val_len = snprintf(val,
BUFF_SIZE,
"(%f, %f)",
346 key.column_family =
"stv";
347 m_handle_mutator->set(key, val, val_len);
350 #ifdef THERE_IS_NO_NEED_TO_STORE_INCOMING_SET
353 std::stringstream ss;
354 for (
Handle handle : hs) {
358 key.column_family =
"incoming";
359 m_handle_mutator->set(key, ss.str().c_str(), ss.str().length());
363 m_handle_mutator->flush();
374 TableScannerPtr scanner_ptr;
377 std::vector<Handle> handles;
379 ssb.add_column(
"incoming");
382 ssb.add_row(rowbuff);
383 ssb.set_max_versions(1);
385 scanner_ptr = m_handle_table->create_scanner(ssb.get());
387 while (scanner_ptr->next(cell)) {
388 char *end = (
char *)cell.value + cell.value_len;
389 char *comma = (
char *)cell.value;
390 while (comma != end) {
392 handles.push_back(h);
405 std::cout <<
"getAtom() called" << std::endl;
406 TableScannerPtr scanner_ptr;
410 ssb.add_column(
"type");
411 ssb.add_column(
"name");
412 ssb.add_column(
"stv");
413 ssb.add_column(
"outgoing");
414 ssb.add_column(
"sti");
415 ssb.add_column(
"lti");
416 ssb.add_column(
"vlti");
420 snprintf(rowbuff,
BUFF_SIZE,
"%lu", uuid);
421 ssb.add_row(rowbuff);
422 ssb.set_max_versions(1);
427 scanner_ptr = m_handle_table->create_scanner(ssb.get());
428 }
catch (Exception &e) {
429 std::cerr << e << std::endl;
437 std::vector<Handle> handles;
444 std::cout<<
"getAtom(): scanning and processing data..." <<std::endl;
449 while (scanner_ptr->next(cell))
452 if (!strcmp(
"type", cell.column_family))
454 std::cout <<
"getAtom(): processing type..." <<std::endl;
455 type = atoi(std::string((
char *)cell.value, cell.value_len).c_str());
457 else if (!strcmp(
"name", cell.column_family))
459 std::cout <<
"getAtom(): processing name..." <<std::endl;
460 name = std::string((
char *)cell.value, cell.value_len);
462 else if (!strcmp(
"stv", cell.column_family))
464 std::cout <<
"getAtom(): processing stv..." <<std::endl;
465 std::cout <<
"getAtom(): stv length: " << cell.value_len << std::endl;
466 stv = std::string((
char *)cell.value, cell.value_len).c_str();
467 stv_str = std::string((
char *)cell.value, cell.value_len);
468 std::cout <<
"getAtom(): cell data is at: " << &(cell.value) <<
", stv is at: " << &stv << std::endl;
470 else if (!strcmp(
"outgoing", cell.column_family))
472 std::cout <<
"getAtom(): processing outgoing..." <<std::endl;
473 char *end = (
char *)cell.value + cell.value_len;
474 char *comma = (
char *)cell.value;
475 while (comma != end) {
477 handles.push_back(h);
481 else if (!strcmp(
"sti", cell.column_family))
483 std::cout <<
"getAtom(): processing sti..." <<std::endl;
485 std::string((
char *)cell.value, cell.value_len).c_str());
487 else if (!strcmp(
"lti", cell.column_family))
489 std::cout <<
"getAtom(): processing lti..." <<std::endl;
491 std::string((
char *)cell.value, cell.value_len).c_str());
493 else if (!strcmp(
"vlti", cell.column_family))
495 std::cout <<
"getAtom(): processing vlti..." <<std::endl;
497 std::string((
char *)cell.value, cell.value_len).c_str());
499 std::cout <<
"getAtom(): item processed" <<std::endl;
500 if (stv) std::cout <<
"getAtom(): stv char*: " << stv << std::endl;
501 std::cout <<
"getAtom(): stv string: " << stv_str << std::endl;
503 std::cout<<
"getAtom(): Processing complete. Creating atom." <<std::endl;
504 std::stringstream mystrstr;
506 if (mystrstr.str().empty())
508 std::cout <<
"no further than this" << std::endl;
510 std::cout <<
"em effing stop" << std::endl;
512 std::cout <<
"getAtom(): stv char*: " << stv <<std::endl;
513 std::cout <<
"getAtom(): stv string: " << stv_str << std::endl;
515 if (!found)
return NULL;
519 atom_ptr =
new Node(type, name);
520 std::cout <<
"getAtom(): Node created" <<std::endl;
521 std::cout <<
"getAtom(): stv char*: " << stv <<std::endl;
522 std::cout <<
"getAtom(): stv string: " << stv_str << std::endl;
526 atom_ptr =
new Link(type, handles);
527 std::cout <<
"getAtom(): Link created" <<std::endl;
528 std::cout <<
"getAtom(): stv char*: " << stv <<std::endl;
529 std::cout <<
"getAtom(): stv string: " << stv_str << std::endl;
535 std::cout<<
"getAtom(): importance restored" <<std::endl;
538 std::cout <<
"getAtom(): stv char*: " << stv <<std::endl;
539 std::cout <<
"getAtom(): stv string: " << stv_str << std::endl;
540 double mean = atof(stv + 1);
541 std::cout <<
"getAtom(): stv mean value: " << mean <<std::endl;
542 char *comma = strchr(stv + 2,
',');
543 std::cout <<
"getAtom(): stv comma:" << comma <<std::endl;
544 double count = atof(comma + 1);
545 std::cout <<
"getAtom(): stv count OK" <<std::endl;
548 std::cout <<
"getAtom(): truth value restored" <<std::endl;
virtual count_t getCount() const =0
a TruthValue that stores a mean and the number of observations (strength and confidence) ...
std::vector< Handle > HandleSeq
a list of handles
lti_t getLTI() const
return LTI property value
void setTruthValue(TruthValuePtr)
Sets the TruthValue object of the atom.
ClassServer & classserver(ClassServerFactory *=ClassServer::createInstance)
void setAttentionValue(AttentionValuePtr)
Sets the AttentionValue object of the atom.
virtual void storeAtom(Handle)
unsigned long UUID
UUID == Universally Unique Identifier.
const String handle_schema
virtual Node * getNode(Type, const char *) const
const String attribute_schema
virtual Atom * getAtom(Handle) const
vlti_t getVLTI() const
return VLTI property value
unsigned short Type
type of Atoms, represented as short integer (16 bits)
virtual Link * getLink(Type, const std::vector< Handle > &) const
virtual strength_t getMean() const =0
sti_t getSTI() const
return STI property value
virtual std::vector< Handle > getIncomingSet(Handle) const