@toxplanet/pegasus-sdk 1.1.15 → 1.1.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/chemicals.js +44 -9
- package/package.json +1 -1
package/lib/chemicals.js
CHANGED
|
@@ -75,30 +75,64 @@ class ChemicalsService {
|
|
|
75
75
|
_buildChemicalUpsertSql(chemical) {
|
|
76
76
|
const sql = [
|
|
77
77
|
'INSERT INTO chemicals (source_id, chemical_name, chemical_meta, chemical_identifiers, chemical_synonyms, chemical_categories, created_at, updated_at)',
|
|
78
|
-
'VALUES (@source_id, @chemical_name, @chemical_meta, @chemical_identifiers, @chemical_synonyms, @chemical_categories, @created_at, @updated_at)',
|
|
78
|
+
'VALUES (@source_id, @chemical_name, @chemical_meta::jsonb, @chemical_identifiers::jsonb, @chemical_synonyms, @chemical_categories, @created_at, @updated_at)',
|
|
79
79
|
'ON CONFLICT (source_id) DO UPDATE SET',
|
|
80
80
|
' chemical_name = @chemical_name,',
|
|
81
|
-
' chemical_meta = @chemical_meta,',
|
|
82
|
-
' chemical_identifiers = @chemical_identifiers,',
|
|
81
|
+
' chemical_meta = @chemical_meta::jsonb,',
|
|
82
|
+
' chemical_identifiers = @chemical_identifiers::jsonb,',
|
|
83
83
|
' chemical_synonyms = @chemical_synonyms,',
|
|
84
84
|
' chemical_categories = @chemical_categories,',
|
|
85
85
|
' updated_at = @updated_at'
|
|
86
86
|
].join('\n');
|
|
87
87
|
|
|
88
|
+
const serializeDate = (d) => d instanceof Date ? d.toISOString() : d;
|
|
89
|
+
|
|
88
90
|
const parameters = {
|
|
89
91
|
'@source_id': chemical.sourceId,
|
|
90
92
|
'@chemical_name': chemical.chemicalName,
|
|
91
|
-
'@chemical_meta': chemical.chemicalMeta,
|
|
92
|
-
'@chemical_identifiers': chemical.chemicalIdentifiers,
|
|
93
|
-
'@chemical_synonyms': chemical.chemicalSynonyms,
|
|
94
|
-
'@chemical_categories': chemical.chemicalCategories,
|
|
95
|
-
'@created_at': chemical.createdAt
|
|
96
|
-
'@updated_at': chemical.updatedAt
|
|
93
|
+
'@chemical_meta': JSON.stringify(chemical.chemicalMeta ?? {}),
|
|
94
|
+
'@chemical_identifiers': JSON.stringify(chemical.chemicalIdentifiers ?? {}),
|
|
95
|
+
'@chemical_synonyms': JSON.stringify(chemical.chemicalSynonyms ?? []),
|
|
96
|
+
'@chemical_categories': JSON.stringify(chemical.chemicalCategories ?? []),
|
|
97
|
+
'@created_at': serializeDate(chemical.createdAt),
|
|
98
|
+
'@updated_at': serializeDate(chemical.updatedAt)
|
|
97
99
|
};
|
|
98
100
|
|
|
99
101
|
return { sql, parameters };
|
|
100
102
|
}
|
|
101
103
|
|
|
104
|
+
_buildDebugSql(chemical) {
|
|
105
|
+
const esc = (s) => `'${String(s ?? '').replace(/'/g, "''")}'`;
|
|
106
|
+
const escJson = (v) => `'${JSON.stringify(v ?? {}).replace(/'/g, "''")}'`;
|
|
107
|
+
const escArr = (arr) => {
|
|
108
|
+
if (!Array.isArray(arr) || arr.length === 0) return `ARRAY[]::text[]`;
|
|
109
|
+
return `ARRAY[${arr.map(s => esc(s)).join(', ')}]`;
|
|
110
|
+
};
|
|
111
|
+
const escDate = (d) => esc(d instanceof Date ? d.toISOString() : (d ?? new Date().toISOString()));
|
|
112
|
+
|
|
113
|
+
return [
|
|
114
|
+
`INSERT INTO chemicals`,
|
|
115
|
+
` (source_id, chemical_name, chemical_meta, chemical_identifiers, chemical_synonyms, chemical_categories, created_at, updated_at)`,
|
|
116
|
+
`VALUES (`,
|
|
117
|
+
` ${esc(chemical.sourceId)},`,
|
|
118
|
+
` ${esc(chemical.chemicalName)},`,
|
|
119
|
+
` ${escJson(chemical.chemicalMeta)}::jsonb,`,
|
|
120
|
+
` ${escJson(chemical.chemicalIdentifiers)}::jsonb,`,
|
|
121
|
+
` ${escArr(chemical.chemicalSynonyms)},`,
|
|
122
|
+
` ${escArr(chemical.chemicalCategories)},`,
|
|
123
|
+
` ${escDate(chemical.createdAt)},`,
|
|
124
|
+
` ${escDate(chemical.updatedAt)}`,
|
|
125
|
+
`)`,
|
|
126
|
+
`ON CONFLICT (source_id) DO UPDATE SET`,
|
|
127
|
+
` chemical_name = ${esc(chemical.chemicalName)},`,
|
|
128
|
+
` chemical_meta = ${escJson(chemical.chemicalMeta)}::jsonb,`,
|
|
129
|
+
` chemical_identifiers = ${escJson(chemical.chemicalIdentifiers)}::jsonb,`,
|
|
130
|
+
` chemical_synonyms = ${escArr(chemical.chemicalSynonyms)},`,
|
|
131
|
+
` chemical_categories = ${escArr(chemical.chemicalCategories)},`,
|
|
132
|
+
` updated_at = NOW();`
|
|
133
|
+
].join('\n');
|
|
134
|
+
}
|
|
135
|
+
|
|
102
136
|
async bulkIndexFielded(documents) {
|
|
103
137
|
try {
|
|
104
138
|
logInfo('pegasus-sdk', `[bulkIndexFielded] Starting bulk index with ${documents?.length || 0} documents`);
|
|
@@ -139,6 +173,7 @@ class ChemicalsService {
|
|
|
139
173
|
};
|
|
140
174
|
|
|
141
175
|
logInfo('pegasus-sdk', `[bulkIndexFielded] Prepared chemical object: sourceId=${chemical.sourceId}, chemicalName=${chemical.chemicalName}`);
|
|
176
|
+
logInfo('pegasus-sdk', `[bulkIndexFielded] DEBUG SQL for document ${i}:\n${this._buildDebugSql(chemical)}`);
|
|
142
177
|
|
|
143
178
|
const isConnectionError = (err) =>
|
|
144
179
|
err.message?.toLowerCase().includes('timeout') ||
|
package/package.json
CHANGED