4 #include <stringitem.h>
7 static char buf[2][100];
13 sprintf( buf[i], "\"%s\"", (char*)t );
19 void prtuple(char *pre, tuple *t) {
21 fprintf( stderr, "%s<%s, %s>\n", pre, val((*t)[0]), val((*t)[1]) );
23 // fprintf( stderr, "%s< >\n", pre );
27 void prdropout(const vector_index index,const void *t) {
28 prtuple( ".. ", (tuple*)t );
31 void add_relation(relation *r,char *p,char *c) {
32 tuple *t = tuple_create( 2, p, c);
33 prtuple( "Adding: ", t );
34 vector *dropped = relation_add( r, t );
36 fprintf( stderr, "Knockout %ld tuples\n", dropped->size );
37 vector_dump( dropped, prdropout );
38 vector_resize( dropped, 0, 0, 0 );
51 int main(int argc,char **argv) {
52 relation *rltn2 = relation_create(
54 2, tuple_create( 2, (void*) &stringitem, (void*) &stringitem ) ) );
55 relation_add_constraint( rltn2, 0, 1 );
56 add_relation( rltn2, "benton", "holly" );
57 add_relation( rltn2, "benton", "molly");
58 add_relation( rltn2, "gully", "holly");
59 add_relation( rltn2, "gully", "vanitha");
60 vector_index index = 0;
61 tuple2 q1 = {{ "benton", 0 }};
63 prtuple( "Simple query: ", &q1.tup );
64 for ( ; index < rltn2->content.table.size; index++ ) {
65 t = relation_next( rltn2, &index, &q1.tup );
69 fprintf( stderr, "Null query: (null)\n" );
70 for ( index = 0 ; index < rltn2->content.table.size; index++ ) {
71 t = relation_next( rltn2, &index, 0 );
75 q1 = (tuple2) {{ 0, 0 }};
76 prtuple( "Generic query: ", &q1.tup );
77 for ( index = 0 ; index < rltn2->content.table.size; index++ ) {
78 t = relation_next( rltn2, &index, &q1.tup );
82 q1 = (tuple2) {{ "gully", 0 }};
83 prtuple( "Deletion query: ", &q1.tup );
84 vector *deleted = relation_delete( rltn2, &q1.tup );
85 for ( index = 0 ; index < rltn2->content.table.size; index++ ) {
86 t = relation_next( rltn2, &index, 0 );
89 for ( index = 0 ; index < deleted->size; index++ ) {
90 tuple **p = (tuple**) vector_next_used( deleted, &index );
91 prtuple( "** ", p? *p : 0 );