Example #1
0
        public IDictionary CreateAndGetResourcesDenotedBy(ICollection nodeList)
        {
            if (nodeList.Count == 0)
            {
                return(new Hashtable());
            }

            Hashtable    uniqueNodes = new Hashtable();
            const string YES         = "y";

            foreach (Node node in nodeList)
            {
                uniqueNodes[node] = YES;
            }


            IDictionary resourcesIndexedByNode = itsStore.GetResourcesDenotedBy(uniqueNodes.Keys);

            if (resourcesIndexedByNode.Keys.Count == uniqueNodes.Keys.Count)
            {
                return(resourcesIndexedByNode);
            }

            // Some new nodes
            StringBuilder insertNewResources     = new StringBuilder("INSERT IGNORE INTO Resources (graphId, resourceHash) VALUES ");
            StringBuilder insertNewUriRefs       = new StringBuilder("INSERT IGNORE INTO UriRefs (hash, uri) VALUES ");
            StringBuilder insertNewPlainLiterals = new StringBuilder("INSERT IGNORE INTO PlainLiterals (hash, languageHash, value) VALUES ");
            StringBuilder insertNewLanguages     = new StringBuilder("INSERT IGNORE INTO Languages (hash, value) VALUES ");
            StringBuilder insertNewTypedLiterals = new StringBuilder(" INSERT IGNORE INTO TypedLiterals (hash, datatypeHash, value) VALUES ");
            StringBuilder insertNewDataTypes     = new StringBuilder("INSERT IGNORE INTO Datatypes (hash, value) VALUES ");
            StringBuilder insertNewResourceNodes = new StringBuilder("INSERT IGNORE INTO ResourceNodes (graphId, resourceHash, nodeHash, nodeType) VALUES");

            bool hasNewUriRefs       = false;
            bool hasNewPlainLiterals = false;
            bool hasNewLanguages     = false;
            bool hasNewTypedLiterals = false;

            foreach (Node node in uniqueNodes.Keys)
            {
                if (resourcesIndexedByNode.Contains(node))
                {
                    continue;
                }

                Resource resource = new Resource();
                resourcesIndexedByNode[node] = resource;

                insertNewResources.Append("(").Append(itsStore.GetHashCode()).Append(",").Append(resource.GetHashCode()).Append("),");

                char nodeType = 'b';
                if (node is UriRef)
                {
                    insertNewUriRefs.Append("(").Append(node.GetHashCode()).Append(",'").Append(itsStore.EscapeString(node.GetLabel())).Append("'),");
                    hasNewUriRefs = true;
                    nodeType      = 'u';
                }
                else if (node is PlainLiteral)
                {
                    if (((PlainLiteral)node).GetLanguage() != null)
                    {
                        hasNewLanguages = true;
                        insertNewLanguages.Append("(").Append(((PlainLiteral)node).GetLanguage().GetHashCode()).Append(",'").Append(itsStore.EscapeString(((PlainLiteral)node).GetLanguage())).Append("'),");
                        insertNewPlainLiterals.Append("(").Append(node.GetHashCode()).Append(",").Append(((PlainLiteral)node).GetLanguage().GetHashCode()).Append(",'").Append(itsStore.EscapeString(node.GetLabel())).Append("'),");
                    }
                    else
                    {
                        insertNewPlainLiterals.Append("(").Append(node.GetHashCode()).Append(",null,'").Append(itsStore.EscapeString(node.GetLabel())).Append("'),");
                    }
                    hasNewPlainLiterals = true;
                    nodeType            = 'p';
                }
                else if (node is TypedLiteral)
                {
                    insertNewDataTypes.Append("(").Append(((TypedLiteral)node).GetDataType().GetHashCode()).Append(",'").Append(itsStore.EscapeString(((TypedLiteral)node).GetDataType())).Append("'),");
                    insertNewTypedLiterals.Append("(").Append(node.GetHashCode()).Append(",").Append(((TypedLiteral)node).GetDataType().GetHashCode()).Append(",'").Append(itsStore.EscapeString(node.GetLabel())).Append("'),");
                    hasNewTypedLiterals = true;
                    nodeType            = 't';
                }
                insertNewResourceNodes.Append("(").Append(itsStore.GetHashCode()).Append(",").Append(resource.GetHashCode()).Append(",").Append(node.GetHashCode()).Append(",'").Append(nodeType).Append("'),");
            }

            insertNewResources.Remove(insertNewResources.Length - 1, 1); // remove trailing comma
            if (Verbose)
            {
                Console.WriteLine("WOULD EXECUTE:");
            }
            if (Verbose)
            {
                Console.WriteLine(insertNewResources);
            }

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

            cmd.ExecuteNonQuery();

            if (hasNewUriRefs)
            {
                insertNewUriRefs.Remove(insertNewUriRefs.Length - 1, 1); // remove trailing comma
                if (Verbose)
                {
                    Console.WriteLine(insertNewUriRefs);
                }
                cmd.CommandText = insertNewUriRefs.ToString();
                cmd.ExecuteNonQuery();
            }

            if (hasNewLanguages)
            {
                insertNewLanguages.Remove(insertNewLanguages.Length - 1, 1); // remove trailing comma
                if (Verbose)
                {
                    Console.WriteLine(insertNewLanguages);
                }
                cmd.CommandText = insertNewLanguages.ToString();
                cmd.ExecuteNonQuery();
            }

            if (hasNewPlainLiterals)
            {
                insertNewPlainLiterals.Remove(insertNewPlainLiterals.Length - 1, 1); // remove trailing comma
                if (Verbose)
                {
                    Console.WriteLine(insertNewPlainLiterals);
                }
                cmd.CommandText = insertNewPlainLiterals.ToString();
                cmd.ExecuteNonQuery();
            }

            if (hasNewTypedLiterals)
            {
                insertNewDataTypes.Remove(insertNewDataTypes.Length - 1, 1); // remove trailing comma
                if (Verbose)
                {
                    Console.WriteLine(insertNewDataTypes);
                }
                cmd.CommandText = insertNewDataTypes.ToString();
                cmd.ExecuteNonQuery();

                insertNewTypedLiterals.Remove(insertNewTypedLiterals.Length - 1, 1); // remove trailing comma
                cmd.CommandText = insertNewTypedLiterals.ToString();
                cmd.ExecuteNonQuery();
            }


            insertNewResourceNodes.Remove(insertNewResourceNodes.Length - 1, 1); // remove trailing comma
            if (Verbose)
            {
                Console.WriteLine(insertNewResourceNodes);
            }
            if (Verbose)
            {
                Console.WriteLine("------------------");
            }
            cmd.CommandText = insertNewResourceNodes.ToString();
            cmd.ExecuteNonQuery();



            return(resourcesIndexedByNode);
        }