* In src/tm.c is a tight coupling between core library and value types, storages and disclosure frameworks. These should eventually be plugins to be loaded at runtime. Instead of the fixed lookup tables in tm.c, there would then be code for loading the shared object libs (plugins). * We need a flush method on topic map (if persistent stores are used). For memstore there would be no effect. * propably return eror if no transaction open? need to check that very good or auto open one!!!!!!! * omnivore - parse position! * register scans with transaction, so they get closed on commit!!! this will make it easy to just return everywhere on error. * if scan would take vid as arg, we could speed up vstore merging. Now we fetch the value and that is pure overhead. * if desired, we could allow combi code for OPs too, only need to remove te if in first loop in fully_merge * need transaction pool in vscan, not store pool!! * alloc/delete issues with values. Some values copy some. Do we need to make that more consistent? * args to calls of value functions. combine_code must have pool as fixed argument. Propably make extra function in src.main/valuetype.c * force break of merge loop after N iterations to avoid hanging program!!!! --------------------------- OLD TODOS ---------------------- * hmm, we can propably have a single prop store, with links to all vstores....? * make store profiler (linebased) * Lazy property store creation (only when property is stored) * How to handle basenames with linebreaks in input? in output? * Nest view components somehow (hitlist/topic) * Wrong calculation of index size! * In src/base/topicmap.c IS13250 is loaded to create properties of assertion structure. Can we remove this hardcoded stuff? * Provide a way for error handling in value type functions, such as parsing from string (this propably requires a global handle to be present on most data structures such as value type, topic map, property etc. * Enable parsing of multiple elements in TextSet parsing from string. Also enable list format like this: ["text 1","text 2", "text \"3\""] Currently no commas are allowed in text! * Dynamically extending expat's char data buffer: "tm: src/base/omnivore.c:980: expat_char_data: Assertion `space_available > len' failed. Aborted (core dumped)" * improvove/cleanup Omnivore in general -> better performance * Remove checking code in _pstore_vput(). It does and immediate lookup of a VID after a new value has been inserted. * Beware that textsetstore relies on the disjointness of the sets. This was a simplification to save some time, but it needs to be fixed if the setstore is to be used with a non-sir-like property. * Add a flag to tm_topicmap_require_model() to control if the model is to be loaded or not. That way, this can be used for merely testing if a model is loaded. Is that a good idea? * Free objects on error return in tm app. * Keep track of models, proc models and the like on each handle and free on cleanup! * Index for HAS_PLAYER_PAIR in memstore/asidp.c * Stores for Integer, Date, etc. * add method to omnivore to retrieve parser's line and position that can be called by proc models. * make order of options in tm irrelevant! Currently, -t must be the first one to trace really everything! Future: * Propably pass transaction handle to each layer (from TM to storage) to control allocation (e.g. value_store_get_value()) and concurrency etc. Yes, that is a good idea. We can also use pooling etc. then. * New query language: SELECT OCCURRENCES WHERE SAM::BaseName INCLUDES "booboo" WITH OCCURRENCES AS DEFINE VIEW topic PARAM topic Topic Result: set of topics with properties (all equaly structured? REQUIRE http://.... REQUIRE http://.... REQUIRE http://.... START TRANSACTION; ADD SUBJECT { .... } AS class-instance ADD SUBJECT { .... } AS role-classe ADD SUBJECT { .... } AS role-instance ADD SUBJECT { http://purl.org/BaseNames => ['the name'] }.... ADD_SUBJECT { http://purl.org/BaseNames => ['Hamburg'] ADD SUBJECT { http://purl.org/BaseNames => ['the name'], http://foo/MyTMA/Birthplace => ADD SUBJECT { http://purl.org/BaseNames => 'Hamburg'} ) } ADD SUBJECT { http://purl.org/BaseNames => ['active'] } AS x_class; ADD SUBJECT { http://purl.org/BaseNames => ['passive'] } AS x_inst; ADD SUBJECT { a-sidp => ( class-instance, [(role-class,x_class),(role-instance,x_inst)]) }; x-op conferring rule: SELECT WHERE asidp != NULL MAP /asidp.memberships() topicSet EXTRACT AS { FULLPROP(t) } // wir sollten auch als table of strings extracten um so toll wie SQL zu sein. sorting? topicSet EXTRACT AS { FULLPROP(t) } ORDER BY propName // evtl. noch marking of groups to provide result // structire (structure laid over topic set)? topicSet = THEMAP RESTRICT cond .... topicSet = THEMAP RESTRICT cond MAP { tmPath }