public void addToShadowTable(SqlConnection conn, MangoIndex index, int id, int storage_id) { lock (_sync_object) { if (shadow_datatable == null) { _createDataTables(); } if (shadow_datatable.Rows.Count >= 10000) { _flushShadowTable(conn); } DataRow shadow_row = shadow_datatable.NewRow(); shadow_row["id"] = id; shadow_row["storage_id"] = storage_id; shadow_row["gross"] = index.gross; shadow_row["cmf"] = index.cmf; shadow_row["xyz"] = index.xyz; shadow_row["mass"] = index.mass; int fragments_count = 0; for (int i = 0; i < index.hash.elements.Count; i++) { fragments_count += index.hash.elements[i].count; } shadow_row["fragments"] = fragments_count; string[] counted = index.counted_elements_str.Split(','); for (int i = 0; i < MangoIndex.COUNTED_ELEMENTS_COUNT; i++) { shadow_row[BingoCore.mangoGetCountedElementName(i)] = Convert.ToInt32(counted[i + 1]); } shadow_datatable.Rows.Add(shadow_row); foreach (MoleculeHashElement elem in index.hash.elements) { DataRow comp_row = components_datatable.NewRow(); comp_row["id"] = id; comp_row["hash"] = elem.hash; comp_row["count"] = elem.count; components_datatable.Rows.Add(comp_row); } } }
public void addToShadowTable (SqlConnection conn, MangoIndex index, int id, int storage_id) { lock (_sync_object) { if (shadow_datatable == null) _createDataTables(); if (shadow_datatable.Rows.Count >= 10000) _flushShadowTable(conn); DataRow shadow_row = shadow_datatable.NewRow(); shadow_row["id"] = id; shadow_row["storage_id"] = storage_id; shadow_row["gross"] = index.gross; shadow_row["cmf"] = index.cmf; shadow_row["xyz"] = index.xyz; shadow_row["mass"] = index.mass; int fragments_count = 0; for (int i = 0; i < index.hash.elements.Count; i++) fragments_count += index.hash.elements[i].count; shadow_row["fragments"] = fragments_count; string[] counted = index.counted_elements_str.Split(','); for (int i = 0; i < MangoIndex.COUNTED_ELEMENTS_COUNT; i++) shadow_row[BingoCore.mangoGetCountedElementName(i)] = Convert.ToInt32(counted[i + 1]); shadow_datatable.Rows.Add(shadow_row); foreach (MoleculeHashElement elem in index.hash.elements) { DataRow comp_row = components_datatable.NewRow(); comp_row["id"] = id; comp_row["hash"] = elem.hash; comp_row["count"] = elem.count; components_datatable.Rows.Add(comp_row); } } }
private static bool _AddMoleculeToIndex (SqlConnection conn, BingoIndexData bingo_data) { MangoIndexData data = (MangoIndexData)bingo_data; MangoIndex index = new MangoIndex(); int id; if (!index.readPrepared(out id)) { string message = String.Format("Molecule with ID={0} wasn't added to the index: {1}", id, BingoCore.lib.bingoGetWarning()); SqlContext.Pipe.Send(message); BingoLog.logMessage(message); return false; } // 4 bytes for Id, 2 bytes for similarity fingerprints bits counts byte[] new_data = new byte[index.cmf.Length + 4 + 2]; index.cmf.CopyTo(new_data, 6); MemoryStream stream = new MemoryStream(new_data, 0, 6, true); BinaryWriter writer = new BinaryWriter(stream); writer.Write(id); writer.Write((short)index.sim_fp_bits_count); int storage_id = data.storage.add(new_data, conn); data.fingerprints.addFingerprint(conn, index.fingerprint, storage_id); data.addToShadowTable(conn, index, id, storage_id); return true; }