552331b42c93f88781b16183d733f9f48d07802f kent Fri Sep 6 14:05:56 2019 -0700 dealing with change of project_role to be a foreign key into contributorType. Removing contact from lab until I figure out how to do it right. Fixed a lab_contributor mixup. diff --git src/hca/hcat/hcatTabUpdate/hcatTabUpdate.c src/hca/hcat/hcatTabUpdate/hcatTabUpdate.c index 94ee53b..86325d9 100644 --- src/hca/hcat/hcatTabUpdate/hcatTabUpdate.c +++ src/hca/hcat/hcatTabUpdate/hcatTabUpdate.c @@ -123,31 +123,31 @@ // required field, and also we need to decorate it's name contactFields[0] = "?name"; contactIx[0] = fieldedTableMustFindFieldIx(inProject, "contact_name"); int realFieldCount = 1; // The rest of the contact pieces are added just conditionally addIfReal(contact_email, oldFields, contactFields, contactIx, maxContacts, &realFieldCount); addIfReal(contact_phone, oldFields, contactFields, contactIx, maxContacts, &realFieldCount); addIfReal(contact_department, oldFields, contactFields, contactIx, maxContacts, &realFieldCount); addIfReal(contact_institute, oldFields, contactFields, contactIx, maxContacts, &realFieldCount); addIfReal(contact_address, oldFields, contactFields, contactIx, maxContacts, &realFieldCount); addIfReal(contact_city, oldFields, contactFields, contactIx, maxContacts, &realFieldCount); addIfReal(contact_country, oldFields, contactFields, contactIx, maxContacts, &realFieldCount); addIfReal(contact_zip_postal_code, oldFields, contactFields, contactIx, maxContacts, &realFieldCount); -contactFields[realFieldCount] = "project_role"; +contactFields[realFieldCount] = "@type_id@hcat_contributortype@short_name@id"; realFieldCount += 1; /* Make contributor output table. The first row of it will be seeded with the contact. * We can fill out names, but not other info on the other contributors, who will make * up the rest of the rows. */ struct fieldedTable *contributors = fieldedTableNew("contributor", contactFields, realFieldCount); contributors->startsSharp = inProject->startsSharp; /* Make up first row from contacts */ char *outVals[realFieldCount]; int outIx; struct dyString *scratch = dyStringNew(0); for (outIx=0; outIx<realFieldCount-1; ++outIx) { @@ -349,37 +349,44 @@ /* Output all the ones we haven't dealt with already or will deal with later */ if (!startsWith("contact_", inName) && !sameString("contributors", inName)) { outFields[outFieldCount] = inName; outRow[outFieldCount] = inVal; ++outFieldCount; } } /* Add in contributors as a multi to multi field */ outFields[outFieldCount] = "@@contributors@id@hcat_project_contributors@project_id@contributor_id@hcat_contributor@name@id"; outRow[outFieldCount] = fieldedTableLookupNamedFieldInRow(inProject, "contributors", inRow); outFieldCount += 1; +/* Add in contacts as a multi to multi field too */ +outFields[outFieldCount] = "@@contacts@id@hcat_project_contacts@project_id@contributor_id@hcat_contributor@name@id"; +outRow[outFieldCount] = fieldedTableLookupNamedFieldInRow(inProject, "contact_name", inRow); +outFieldCount += 1; + /* Add the fields we scan and merge from sample at end */ projectVocabField(inProject, inSample, "organ", outDir, outFields, outRow, outFieldMax, &outFieldCount); projectVocabField(inProject, inSample, "organ_part", outDir, outFields, outRow, outFieldMax, &outFieldCount); projectVocabField(inProject, inSample, "assay_type", outDir, outFields, outRow, outFieldMax, &outFieldCount); +projectVocabField(inProject, inSample, "assay_tech", outDir, + outFields, outRow, outFieldMax, &outFieldCount); projectVocabField(inProject, inSample, "disease", outDir, outFields, outRow, outFieldMax, &outFieldCount); uglyf("making project table with %d fields\n", outFieldCount); struct fieldedTable *outTable = fieldedTableNew("project", outFields, outFieldCount); outTable->startsSharp = inProject->startsSharp; fieldedTableAdd(outTable, outRow, outFieldCount, 2); dyStringFree(&scratch); return outTable; } struct fieldedTable *makePublication(struct fieldedTable *inProject) /* If there's a publication field we make a publication table and seed it with the pmid * and stuff. */ @@ -407,45 +414,44 @@ dyStringFree(&csvScratch); return pubTable; } else return NULL; } struct fieldedTable *makeLab(struct fieldedTable *inProject) /* If there's a lab field we make a lab table and seed it with the contacts. */ { int labIx = fieldedTableFindFieldIx(inProject, "lab"); if (labIx >= 0) { char **inRow = inProject->rowList->row; char *short_name = inRow[labIx]; - char *contact = fieldedTableLookupNamedFieldInRow(inProject, "contact_name", inRow); char *contributors = fieldedTableLookupNamedFieldInRow(inProject, "contributors", inRow); char *institute = fieldedTableLookupNamedFieldInRow(inProject, "contact_institute", inRow); char labName[256]; if (strlen(short_name) < 20) // Unlikely to be unique, may cause trouble safef(labName, sizeof(labName), "%s %s", short_name, emptyForNull(institute)); else safef(labName, sizeof(labName), "%s", short_name); labName[50] = 0; // not too long inRow[labIx] = cloneString(labName); /* Other people need to know about this too. */ - char *outFields[4] = {"?short_name", "institution", "@contact_id@hcat_contributor@name@id", + char *outFields[3] = {"?short_name", "institution", "@@contributors@id@hcat_lab_contributors@lab_id@contributor_id@hcat_contributor@name@id"}; struct fieldedTable *labTable = fieldedTableNew("lab", outFields, ArraySize(outFields)); - char *outRow[4] = {labName, institute, contact, contributors}; + char *outRow[3] = {labName, institute, contributors}; fieldedTableAdd(labTable, outRow, ArraySize(outRow), 1); return labTable; } else return NULL; } void hcatTabUpdate(char *inDir, char *outDir) /* hcatTabUpdate - take the tabToTabDir result of the geo/sra import. * Put results in an output dir in a format sqlUpdateRelated understands. */ { // We are actually just looking for specific files in inDir. */ /* Load up input projects table */ char *projectFile = "hcat_project.tsv";