-- SPARQL PR#66 Comprehensive Test Suite -- Tests all 14 SPARQL/RDF functions added in the PR \echo '=========================================' \echo 'RuVector SPARQL/RDF Test Suite - PR #66' \echo '=========================================' \echo '' -- Verify extension is loaded SELECT ruvector_version() AS version; \echo '' \echo '=========================================' \echo 'Test 1: Create RDF Triple Store' \echo '=========================================' SELECT ruvector_create_rdf_store('test_knowledge_graph') AS store_created; \echo '' \echo '=========================================' \echo 'Test 2: Insert Individual Triples' \echo '=========================================' -- Insert person type SELECT ruvector_insert_triple( 'test_knowledge_graph', '', '', '' ) AS alice_type_id; -- Insert person name SELECT ruvector_insert_triple( 'test_knowledge_graph', '', '', '"Alice Smith"' ) AS alice_name_id; -- Insert another person SELECT ruvector_insert_triple( 'test_knowledge_graph', '', '', '' ) AS bob_type_id; SELECT ruvector_insert_triple( 'test_knowledge_graph', '', '', '"Bob Jones"' ) AS bob_name_id; -- Insert friendship relation SELECT ruvector_insert_triple( 'test_knowledge_graph', '', '', '' ) AS friendship_id; \echo '' \echo '=========================================' \echo 'Test 3: Bulk Load N-Triples' \echo '=========================================' SELECT ruvector_load_ntriples('test_knowledge_graph', ' . "Charlie Davis" . . "30" . "25" . ') AS triples_loaded; \echo '' \echo '=========================================' \echo 'Test 4: RDF Store Statistics' \echo '=========================================' SELECT ruvector_rdf_stats('test_knowledge_graph') AS store_stats; \echo '' \echo '=========================================' \echo 'Test 5: Query Triples by Pattern' \echo '=========================================' \echo 'Query: Get all triples about Alice' SELECT ruvector_query_triples( 'test_knowledge_graph', '', NULL, NULL ) AS alice_triples; \echo '' \echo 'Query: Get all name predicates' SELECT ruvector_query_triples( 'test_knowledge_graph', NULL, '', NULL ) AS all_names; \echo '' \echo '=========================================' \echo 'Test 6: SPARQL SELECT Queries' \echo '=========================================' \echo 'Query: Select all persons with their names' SELECT ruvector_sparql('test_knowledge_graph', ' PREFIX foaf: PREFIX ex: SELECT ?person ?name WHERE { ?person a ex:Person . ?person foaf:name ?name . } ORDER BY ?name ', 'json') AS select_persons; \echo '' \echo 'Query: Find who Alice knows' SELECT ruvector_sparql('test_knowledge_graph', ' PREFIX foaf: SELECT ?friend ?friendName WHERE { foaf:knows ?friend . ?friend foaf:name ?friendName . } ', 'json') AS alice_friends; \echo '' \echo 'Query: Get all triples (LIMIT 10)' SELECT ruvector_sparql('test_knowledge_graph', ' SELECT ?s ?p ?o WHERE { ?s ?p ?o . } LIMIT 10 ', 'json') AS all_triples; \echo '' \echo '=========================================' \echo 'Test 7: SPARQL ASK Queries' \echo '=========================================' \echo 'Query: Does Alice exist?' SELECT ruvector_sparql('test_knowledge_graph', ' ASK { ?p ?o } ', 'json') AS alice_exists; \echo '' \echo 'Query: Does Alice know Bob?' SELECT ruvector_sparql('test_knowledge_graph', ' PREFIX foaf: ASK { foaf:knows } ', 'json') AS alice_knows_bob; \echo '' \echo 'Query: Does Bob know Alice? (should be false)' SELECT ruvector_sparql('test_knowledge_graph', ' PREFIX foaf: ASK { foaf:knows } ', 'json') AS bob_knows_alice; \echo '' \echo '=========================================' \echo 'Test 8: SPARQL JSON Results' \echo '=========================================' SELECT ruvector_sparql_json('test_knowledge_graph', ' PREFIX foaf: SELECT ?name WHERE { ?person foaf:name ?name . } ') AS json_result; \echo '' \echo '=========================================' \echo 'Test 9: SPARQL UPDATE Operations' \echo '=========================================' SELECT ruvector_sparql_update('test_knowledge_graph', ' INSERT DATA { . "Diana Prince" . } ') AS update_result; \echo '' \echo 'Verify Diana was added:' SELECT ruvector_sparql('test_knowledge_graph', ' PREFIX foaf: SELECT ?name WHERE { foaf:name ?name . } ', 'json') AS diana_name; \echo '' \echo '=========================================' \echo 'Test 10: SPARQL with Different Formats' \echo '=========================================' \echo 'Format: CSV' SELECT ruvector_sparql('test_knowledge_graph', ' PREFIX foaf: SELECT ?name WHERE { ?person foaf:name ?name } LIMIT 3 ', 'csv') AS csv_format; \echo '' \echo 'Format: TSV' SELECT ruvector_sparql('test_knowledge_graph', ' PREFIX foaf: SELECT ?name WHERE { ?person foaf:name ?name } LIMIT 3 ', 'tsv') AS tsv_format; \echo '' \echo '=========================================' \echo 'Test 11: Complex SPARQL Query with FILTER' \echo '=========================================' SELECT ruvector_sparql('test_knowledge_graph', ' PREFIX foaf: PREFIX ex: SELECT ?person ?name WHERE { ?person a ex:Person . ?person foaf:name ?name . FILTER(REGEX(?name, "^[AB]", "i")) } ', 'json') AS filtered_names; \echo '' \echo '=========================================' \echo 'Test 12: DBpedia-style Knowledge Graph' \echo '=========================================' SELECT ruvector_create_rdf_store('dbpedia_scientists') AS dbpedia_created; SELECT ruvector_load_ntriples('dbpedia_scientists', ' . "Albert Einstein" . . . . "Marie Curie" . . ') AS dbpedia_loaded; \echo 'Query: Find all physicists' SELECT ruvector_sparql('dbpedia_scientists', ' PREFIX dbo: PREFIX dbr: PREFIX foaf: SELECT ?name WHERE { ?person a dbo:Scientist . ?person dbo:field dbr:Physics . ?person foaf:name ?name . } ', 'json') AS physicists; \echo '' \echo 'Query: Check if Einstein was a scientist' SELECT ruvector_sparql('dbpedia_scientists', ' PREFIX dbo: PREFIX dbr: ASK { dbr:Albert_Einstein a dbo:Scientist } ', 'json') AS einstein_is_scientist; \echo '' \echo '=========================================' \echo 'Test 13: List All RDF Stores' \echo '=========================================' SELECT ruvector_list_rdf_stores() AS all_stores; \echo '' \echo '=========================================' \echo 'Test 14: Store Management Operations' \echo '=========================================' \echo 'Get final statistics:' SELECT ruvector_rdf_stats('test_knowledge_graph') AS final_stats; \echo '' \echo 'Clear test store:' SELECT ruvector_clear_rdf_store('test_knowledge_graph') AS cleared; SELECT ruvector_rdf_stats('test_knowledge_graph') AS stats_after_clear; \echo '' \echo 'Delete stores:' SELECT ruvector_delete_rdf_store('test_knowledge_graph') AS test_deleted; SELECT ruvector_delete_rdf_store('dbpedia_scientists') AS dbpedia_deleted; \echo '' \echo 'Verify stores deleted:' SELECT ruvector_list_rdf_stores() AS remaining_stores; \echo '' \echo '=========================================' \echo 'All SPARQL/RDF Tests Completed!' \echo '========================================='