@@ -434,8 +434,9 @@ static string gri_refseq_ddl(const string &schema) {
434434 }
435435 ostringstream out;
436436 out << " CREATE TABLE IF NOT EXISTS " << schema_prefix << " __gri_refseq"
437- << " (gri_rid INTEGER NOT NULL PRIMARY KEY, gri_refseq_name TEXT NOT NULL, gri_assembly TEXT,"
438- << " gri_refget_id TEXT UNIQUE, gri_refseq_length INTEGER NOT NULL, UNIQUE(gri_assembly,gri_refseq_name))"
437+ << " (_gri_rid INTEGER NOT NULL PRIMARY KEY, gri_refseq_name TEXT NOT NULL, gri_assembly TEXT,"
438+ << " gri_refget_id TEXT UNIQUE, gri_refseq_length INTEGER NOT NULL, gri_refseq_meta_json TEXT NOT NULL DEFAULT '{}', "
439+ << " UNIQUE(gri_assembly,gri_refseq_name))"
439440 << " ;\n CREATE INDEX IF NOT EXISTS " << schema_prefix << " __gri_refseq_name ON "
440441 << schema_prefix << " __gri_refseq(gri_refseq_name)" ;
441442 return out.str ();
@@ -663,7 +664,8 @@ static void sqlfn_genomic_range_rowids_safe_sql(sqlite3_context *ctx, int argc,
663664
664665string PutGenomicReferenceSequenceSQL (const string &name, sqlite3_int64 length,
665666 const string &assembly, const string &refget_id,
666- sqlite3_int64 rid, const string &schema, bool with_ddl) {
667+ const string &meta_json, sqlite3_int64 rid,
668+ const string &schema, bool with_ddl) {
667669 string schema_prefix;
668670 if (!schema.empty ()) {
669671 schema_prefix = schema + " ." ;
@@ -673,40 +675,45 @@ string PutGenomicReferenceSequenceSQL(const string &name, sqlite3_int64 length,
673675 out << gri_refseq_ddl (schema) << " ;\n " ;
674676 }
675677 out << " INSERT INTO " << schema_prefix
676- << " __gri_refseq(gri_rid ,gri_refseq_name,gri_assembly,gri_refget_id,gri_refseq_length) VALUES("
678+ << " __gri_refseq(_gri_rid ,gri_refseq_name,gri_assembly,gri_refget_id,gri_refseq_length,gri_refseq_meta_json ) VALUES("
677679 << (rid >= 0 ? std::to_string (rid) : " NULL" ) << " ," << sqlquote (name) << " ,"
678680 << (assembly.empty () ? " NULL" : sqlquote (assembly)) << " ,"
679681 << (refget_id.empty () ? " NULL" : sqlquote (refget_id)) << " ," << std::to_string (length)
680- << " )" ;
682+ << " , " << sqlquote (meta_json. empty () ? string ( " {} " ) : meta_json) << " )" ;
681683 return out.str ();
682684}
683685
684686string PutGenomicReferenceSequenceSQL (const string &name, sqlite3_int64 length,
685687 const string &assembly, const string &refget_id,
686- sqlite3_int64 rid, const string &schema) {
687- return PutGenomicReferenceSequenceSQL (name, length, assembly, refget_id, rid, schema, true );
688+ const string &meta_json, sqlite3_int64 rid,
689+ const string &schema) {
690+ return PutGenomicReferenceSequenceSQL (name, length, assembly, refget_id, meta_json, rid, schema,
691+ true );
688692}
689693
690694extern " C" char *put_genomic_reference_sequence_sql (const char *name, sqlite3_int64 length,
691695 const char *assembly, const char *refget_id,
692- sqlite3_int64 rid, const char *schema) {
693- C_WRAPPER (PutGenomicReferenceSequenceSQL (name, length, assembly ? assembly : " " ,
694- refget_id ? refget_id : " " , rid, schema ? schema : " " ,
695- true ));
696+ const char *meta_json, sqlite3_int64 rid,
697+ const char *schema) {
698+ C_WRAPPER (PutGenomicReferenceSequenceSQL (
699+ name, length, assembly ? assembly : " " , refget_id ? refget_id : " " ,
700+ meta_json ? meta_json : " {}" , rid, schema ? schema : " " , true ));
696701}
697702
698703static void sqlfn_put_genomic_reference_sequence_sql (sqlite3_context *ctx, int argc,
699704 sqlite3_value **argv) {
700- string name, assembly, refget_id, schema;
705+ string name, assembly, refget_id, meta_json = " {} " , schema;
701706 sqlite3_int64 length, rid = -1 ;
702- assert (argc >= 2 && argc <= 6 );
707+ assert (argc >= 2 && argc <= 7 );
703708 ARG_TEXT (name, 0 )
704709 ARG (length, 1 , SQLITE_INTEGER, int64)
705710 ARG_TEXT_OPTIONAL (assembly, 2 )
706711 ARG_TEXT_OPTIONAL (refget_id, 3 )
707- ARG_OPTIONAL (rid, 4 , SQLITE_INTEGER, int64)
708- ARG_TEXT_OPTIONAL (schema, 5 );
709- SQL_WRAPPER (PutGenomicReferenceSequenceSQL (name, length, assembly, refget_id, rid, schema))
712+ ARG_TEXT_OPTIONAL (meta_json, 4 )
713+ ARG_OPTIONAL (rid, 5 , SQLITE_INTEGER, int64)
714+ ARG_TEXT_OPTIONAL (schema, 6 );
715+ SQL_WRAPPER (
716+ PutGenomicReferenceSequenceSQL (name, length, assembly, refget_id, meta_json, rid, schema))
710717}
711718
712719struct hardcoded_refseq_t {
@@ -939,7 +946,7 @@ string PutGenomicReferenceAssemblySQL(const string &assembly, const string &sche
939946 const hardcoded_refseq_t &hcrs = hardcoded_refseqs[i];
940947 out << PutGenomicReferenceSequenceSQL (string (hcrs.name ), hcrs.length , assembly,
941948 hcrs.refget_id ? string (hcrs.refget_id ) : string (),
942- -1 , schema, i == 0 );
949+ string ( " {} " ), -1 , schema, i == 0 );
943950 }
944951 return out.str ();
945952}
@@ -963,7 +970,7 @@ GetGenomicReferenceSequencesByRid(sqlite3 *dbconn, const string &assembly, const
963970 string schema_prefix = schema.empty () ? " " : (schema + " ." );
964971
965972 string query =
966- " SELECT gri_rid , gri_refseq_name, gri_refseq_length, gri_assembly, gri_refget_id FROM " +
973+ " SELECT _gri_rid , gri_refseq_name, gri_refseq_length, gri_assembly, gri_refget_id FROM " +
967974 schema_prefix + " __gri_refseq" ;
968975 if (!assembly.empty ()) {
969976 query += " WHERE gri_assembly = ?" ;
@@ -1054,6 +1061,7 @@ static int register_genomicsqlite_functions(sqlite3 *db, const char **pzErrMsg,
10541061 {FPNM (put_genomic_reference_sequence_sql), 4 , 0 },
10551062 {FPNM (put_genomic_reference_sequence_sql), 5 , 0 },
10561063 {FPNM (put_genomic_reference_sequence_sql), 6 , 0 },
1064+ {FPNM (put_genomic_reference_sequence_sql), 7 , 0 },
10571065 {FPNM (put_genomic_reference_assembly_sql), 1 , 0 },
10581066 {FPNM (put_genomic_reference_assembly_sql), 2 , 0 }};
10591067
0 commit comments