Example #1
0
        public void EnsureAllWritesAreComplete()
        {
            if (itsWriteCache.Count == 0)
            {
                return;
            }

            ArrayList nodeList = new ArrayList();

            foreach (Statement statement in itsWriteCache)
            {
                nodeList.Add(statement.GetSubject());
                nodeList.Add(statement.GetPredicate());
                nodeList.Add(statement.GetObject());
            }


            IDictionary resourcesIndexedByNode = CreateAndGetResourcesDenotedBy(nodeList);



            StringBuilder insertNewStatements = new StringBuilder("INSERT IGNORE INTO Statements (subjectHash, predicateHash, objectHash, graphId) VALUES ");

            foreach (Statement statement in itsWriteCache)
            {
                insertNewStatements.Append("(");
                if (resourcesIndexedByNode.Contains(statement.GetSubject()))
                {
                    insertNewStatements.Append(resourcesIndexedByNode[statement.GetSubject()].GetHashCode());
                }
                else
                {
                    insertNewStatements.Append(itsStore.GetResourceDenotedBy(statement.GetSubject()).GetHashCode());
                }
                insertNewStatements.Append(",");

                if (resourcesIndexedByNode.Contains(statement.GetPredicate()))
                {
                    insertNewStatements.Append(resourcesIndexedByNode[statement.GetPredicate()].GetHashCode());
                }
                else
                {
                    insertNewStatements.Append(itsStore.GetResourceDenotedBy(statement.GetPredicate()).GetHashCode());
                }
                insertNewStatements.Append(",");

                if (resourcesIndexedByNode.Contains(statement.GetObject()))
                {
                    insertNewStatements.Append(resourcesIndexedByNode[statement.GetObject()].GetHashCode());
                }
                else
                {
                    insertNewStatements.Append(itsStore.GetResourceDenotedBy(statement.GetObject()).GetHashCode());
                }
                insertNewStatements.Append(",");
                insertNewStatements.Append(itsStore.GetHashCode());
                insertNewStatements.Append("),");
            }


            MySqlCommand cmd = new MySqlCommand(insertNewStatements.ToString(), itsConn);

            insertNewStatements.Remove(insertNewStatements.Length - 1, 1); // remove trailing comma
//~ Console.WriteLine(insertNewStatements);
            cmd.CommandText = insertNewStatements.ToString();
            cmd.ExecuteNonQuery();

            itsWriteCache.Clear();
        }