コード例 #1
0
        private ArrayList DiscoverIndexes(SqlEntityElement sqlentity, SqlConnection connection)
        {
            ArrayList list = new ArrayList();

            DataTable table = new DataTable();

            String sql = "declare @objid int \n";

            sql += "set @objid = object_id('" + sqlentity.Name + "') \n";
            sql += "select INDEXPROPERTY(@objid, name, 'IsUnique') IsUnique, INDEXPROPERTY(@objid, name, 'IsClustered') IsClustered, name \n";
            sql += "from sysindexes \n";
            sql += "where id = @objid and indid > 0 and indid < 255 and (status & 64)=0 and name not in (select name from sysobjects) \n";
            sql += "order by indid \n";

            SqlDataAdapter adapter = new SqlDataAdapter(sql, connection);

            adapter.Fill(table);

            foreach (DataRow row in table.Rows)
            {
                IndexElement index = new IndexElement();
                index.Name      = row["NAME"].ToString();
                index.Clustered = !row["IsClustered"].ToString().Equals("0");
                index.Unique    = !row["IsUnique"].ToString().Equals("0");
                index.Columns   = DiscoverIndexColumns(sqlentity, index, connection);
                list.Add(index);
            }

            return(list);
        }
コード例 #2
0
        private static void Serialize(IndexNotation indexNotation, MathDocument document, int offset)
        {
            var element = new IndexElement();

            element.StartOffset = offset;

            if (!indexNotation.Main.IsEmpty())
            {
                element.Main = new MathDocument();
                Serialize(indexNotation.Main, element.Main);
            }

            if (!indexNotation.Upperscript.IsEmpty())
            {
                element.Upperscript = new MathDocument();
                Serialize(indexNotation.Upperscript, element.Upperscript);
            }

            if (!indexNotation.Underscript.IsEmpty())
            {
                element.Underscript = new MathDocument();
                Serialize(indexNotation.Underscript, element.Underscript);
            }

            document.MathElements.Add(element);
        }
コード例 #3
0
        public static void Run()
        {
            // ExStart:CreateStructureElements
            // The path to the documents directory.
            string dataDir = RunExamples.GetDataDir_AsposePdf_WorkingDocuments();

            // Create Pdf Document
            Document document = new Document();

            // Get Content for work with TaggedPdf
            ITaggedContent taggedContent = document.TaggedContent;

            // Set Title and Language for Documnet
            taggedContent.SetTitle("Tagged Pdf Document");
            taggedContent.SetLanguage("en-US");

            // Create Grouping Elements
            PartElement       partElement       = taggedContent.CreatePartElement();
            ArtElement        artElement        = taggedContent.CreateArtElement();
            SectElement       sectElement       = taggedContent.CreateSectElement();
            DivElement        divElement        = taggedContent.CreateDivElement();
            BlockQuoteElement blockQuoteElement = taggedContent.CreateBlockQuoteElement();
            CaptionElement    captionElement    = taggedContent.CreateCaptionElement();
            TOCElement        tocElement        = taggedContent.CreateTOCElement();
            TOCIElement       tociElement       = taggedContent.CreateTOCIElement();
            IndexElement      indexElement      = taggedContent.CreateIndexElement();
            NonStructElement  nonStructElement  = taggedContent.CreateNonStructElement();
            PrivateElement    privateElement    = taggedContent.CreatePrivateElement();

            // Create Text Block-Level Structure Elements
            ParagraphElement paragraphElement = taggedContent.CreateParagraphElement();
            HeaderElement    headerElement    = taggedContent.CreateHeaderElement();
            HeaderElement    h1Element        = taggedContent.CreateHeaderElement(1);

            // Create Text Inline-Level Structure Elements
            SpanElement  spanElement  = taggedContent.CreateSpanElement();
            QuoteElement quoteElement = taggedContent.CreateQuoteElement();
            NoteElement  noteElement  = taggedContent.CreateNoteElement();

            // Create Illustration Structure Elements
            FigureElement  figureElement  = taggedContent.CreateFigureElement();
            FormulaElement formulaElement = taggedContent.CreateFormulaElement();

            // Methods are under development
            ListElement      listElement      = taggedContent.CreateListElement();
            TableElement     tableElement     = taggedContent.CreateTableElement();
            ReferenceElement referenceElement = taggedContent.CreateReferenceElement();
            BibEntryElement  bibEntryElement  = taggedContent.CreateBibEntryElement();
            CodeElement      codeElement      = taggedContent.CreateCodeElement();
            LinkElement      linkElement      = taggedContent.CreateLinkElement();
            AnnotElement     annotElement     = taggedContent.CreateAnnotElement();
            RubyElement      rubyElement      = taggedContent.CreateRubyElement();
            WarichuElement   warichuElement   = taggedContent.CreateWarichuElement();
            FormElement      formElement      = taggedContent.CreateFormElement();

            // Save Tagged Pdf Document
            document.Save(dataDir + "StructureElements.pdf");
            // ExEnd:CreateStructureElements
        }
コード例 #4
0
        private ArrayList DiscoverIndexColumns(SqlEntityElement sqlentity, IndexElement index, SqlConnection connection)
        {
            ArrayList list = new ArrayList();

            DataTable table = new DataTable();

            String sql = "DECLARE @indid smallint, \n";

            sql += "	@indname sysname,  \n";
            sql += "   	@indkey int,  \n";
            sql += "	@name varchar(30) \n";
            sql += " \n";
            sql += "SET NOCOUNT ON \n";
            sql += " \n";
            sql += "set @name='" + sqlentity.Name + "' \n";
            sql += "set @indname='" + index.Name + "' \n";
            sql += " \n";
            sql += "select @indid=indid from sysindexes where id=object_id(@name) and name=@indname \n";
            sql += "   \n";
            sql += "	create table #spindtab \n";
            sql += "	( \n";
            sql += "		TABLE_NAME			sysname	collate database_default NULL, \n";
            sql += "		INDEX_NAME			sysname	collate database_default NULL, \n";
            sql += "		COLUMN_NAME			sysname	collate database_default NULL, \n";
            sql += "		SORT_DIRECTION			varchar(50) NULL, \n";
            sql += "		ORDINAL_POSITION		int \n";
            sql += "	) \n";
            sql += " \n";
            sql += "     SET @indkey = 1 \n";
            sql += "     WHILE @indkey <= 16 and INDEX_COL(@name, @indid, @indkey) is not null \n";
            sql += "      BEGIN \n";
            sql += "	insert into #spindtab(table_name, index_name, column_name, ordinal_position, sort_direction) values(@name, @indname, INDEX_COL(@name, @indid, @indkey), @indkey, case when indexkey_property(object_id(@name), @indid, 1, 'isdescending')=1 then 'DESC' else '' end) \n";
            sql += "        SET @indkey = @indkey + 1 \n";
            sql += "      END \n";
            sql += " \n";
            sql += "select * from #spindtab order by ordinal_position \n";
            sql += " \n";
            sql += "drop table #spindtab \n";
            sql += " \n";
            sql += "SET NOCOUNT OFF \n";

            SqlDataAdapter adapter = new SqlDataAdapter(sql, connection);

            adapter.Fill(table);

            foreach (DataRow row in table.Rows)
            {
                ColumnElement column = new ColumnElement();
                column.Name          = row["COLUMN_NAME"].ToString();
                column.SortDirection = row["SORT_DIRECTION"].ToString();
                list.Add(column);
            }

            return(list);
        }
コード例 #5
0
        private static void Deserialize(IndexElement indexElement, FlowDocument flowDocument)
        {
            var indexNotation = new IndexNotation();

            Deserialize(indexElement.Main, indexNotation.Main);
            Deserialize(indexElement.Upperscript, indexNotation.Upperscript);
            Deserialize(indexElement.Underscript, indexNotation.Underscript);

            var insertionPosition = PrepareInsertPosition(flowDocument, indexElement.StartOffset);

            var container = new InlineUIContainer(indexNotation, insertionPosition);
        }
コード例 #6
0
        private static IndexElement[] BuildIndex(string[,] symbols)
        {
            IndexElement[] res   = new IndexElement[symbols.Length];
            int            index = 0;

            for (int i = 0; i < symbols.GetLength(0); i++)
            {
                for (int j = 0; j < symbols.GetLength(1); j++)
                {
                    res[index] = new IndexElement(symbols[i, j], i, j);
                    index++;
                }
            }
            Array.Sort(res);
            return(res);
        }
コード例 #7
0
ファイル: GeneratorTest.cs プロジェクト: f14shm4n/f14.Sitemap
        public void SitemapIndex()
        {
            const int count = 10;
            var       items = new IndexElement[count];

            for (var i = 0; i < count; i++)
            {
                items[i] = new IndexElement
                {
                    Url      = "http://example.com/page" + (i + 1),
                    Modified = DateTime.Now.Add(TimeSpan.FromMinutes(i + 1))
                };
            }

            var xDoc = SitemapBuilder.BuildIndexMap(items);

            Assert.Equal(count, xDoc.Root.Descendants(SitemapConstants.NS + "sitemap").Count());

            xDoc.Save("sitemap_index.xml");
        }
コード例 #8
0
        private void FindIndexes(List <Index> indexes, string tableName)
        {
            DataTable dtIndexes = hdbConnection.GetSchema("Indexes");

            foreach (DataRow row in dtIndexes.Rows)
            {
                if (row["TABLE_NAME"].ToString() == tableName)
                {
                    Index index    = null;
                    bool  newIndex = true;

                    foreach (Index searchIndex in indexes)
                    {
                        if (searchIndex.Name == (string)row["INDEX_NAME"])
                        {
                            index    = searchIndex;
                            newIndex = false;
                        }
                    }

                    if (index == null)
                    {
                        index = new Index();
                    }
                    index.Name = (string)row["INDEX_NAME"];
                    IndexElement indexElement = new IndexElement();
                    indexElement.Column = (string)row["COLUMN_NAME"];
                    index.Unique        = (bool)row["UNIQUE"];
                    index.PrimaryKey    = (bool)row["PRIMARY_KEY"];
                    index.Columns.Add(indexElement);
                    if (newIndex)
                    {
                        indexes.Add(index);
                    }
                }
            }
        }
コード例 #9
0
        static void SaveIndex(string file)
        {
            // we dont want write almost same values
            // .html#.byDchar
            // .html#byDchar
            // so remember with dots and later ignore w/o dots
            var dots = new HashSet <string>();

            foreach (var k in Links.Select(e => e.Key))
            {
                if (k.Contains("#."))
                {
                    dots.Add(k.Replace("#.", "#").ToLower());
                }
            }

            using (var fout = new StreamWriter(file, false, Encoding.UTF8))
            {
                fout.WriteLine(IndexHeader);

                // sorted elements
                foreach (var p in Links.Select(e => (e.Value, e.Key)).OrderBy(e => e.Item1))
                {
                    if (dots.Contains(p.Item2.ToLower()))
                    {
                        continue;
                    }

                    fout.WriteLine(IndexElement
                                   .Replace("%NAME%", p.Item1)
                                   .Replace("%URL%", p.Item2));
                }

                fout.WriteLine(IndexFooter);
            }
        }
コード例 #10
0
 /// <inheritdoc />
 public override DialogElement InputDialogElement(List <DataSetArray> dataSets)
 {
     _indexEle = new IndexElement(this);
     return(_indexEle);
 }
コード例 #11
0
        /// <summary>
        /// 確認文件是否被搜尋到
        /// </summary>
        /// <param name="keywordTokens"></param>
        /// <param name="tokenSeq"></param>
        /// <param name="checkedIndex"></param>
        /// <param name="previosIndex"></param>
        /// <returns></returns>
        private bool CheckDocumentIsHitted(List <Pair <String, Int32> > keywordTokens, int tokenSeq, List <List <IndexElement> > checkedIndex, IndexElement previosIndex)
        {
            try
            {
                var currentTokenIndex = checkedIndex[tokenSeq].Where(t => t.DocId == previosIndex.DocId && t.ParaId == previosIndex.ParaId).ToList();
                foreach (var currentIndex in currentTokenIndex)
                {
                    // 如果索引已越界 (不是同一文件、同一段落),則不再往下檢查
                    if (currentIndex.DocId > previosIndex.DocId)
                    {
                        break;
                    }
                    else if (currentIndex.DocId == previosIndex.DocId && currentIndex.ParaId > previosIndex.ParaId)
                    {
                        break;
                    }
                    else if (currentIndex.DocId == previosIndex.DocId && currentIndex.ParaId < previosIndex.ParaId)
                    {
                        continue;
                    }
                    else if (currentIndex.DocId < previosIndex.DocId)
                    {
                        continue;
                    }

                    int offsetDiff = currentIndex.Offset - previosIndex.Offset;
                    if (offsetDiff <= 0)
                    {
                        continue;
                    }
                    else
                    {
                        int targetDfif = keywordTokens[tokenSeq].Second - keywordTokens[tokenSeq - 1].Second;

                        if (offsetDiff == targetDfif)
                        {
                            if (keywordTokens.Count == (tokenSeq + 1))
                            {
                                return(true);
                            }
                            else
                            {
                                return(CheckDocumentIsHitted(keywordTokens, tokenSeq + 1, checkedIndex, currentIndex));
                            }
                        }
                        else
                        {
                            continue;
                        }
                    }
                }
                return(false);
            }
            catch (Exception e)
            {
                return(false);
            }
        }
コード例 #12
0
        unsafe public void Add(int docId, Payload payload)
        {
            if (_Lock.Enter(Lock.Mode.Mutex))
            {
                try
                {
                    if (payload.Data.Length == 0)
                    {
                        return;
                    }


                    if (_DocIdReplaceField != null)
                    {
                        if (_DocIdReplaceField.DataType == DataType.BigInt)
                        {
                            long value = (((long)payload.Data[_DocIdReplaceField.TabIndex]) << 32) +
                                         (uint)payload.Data[_DocIdReplaceField.TabIndex + 1];

                            if (!_ReplaceFieldValueToDocId.ContainsKey(value))
                            {
                                _ReplaceFieldValueToDocId.Add(value, docId);
                            }
                            else
                            {
                                _ReplaceFieldValueToDocId[value] = docId;
                            }
                        }
                        else
                        {
                            int value = payload.Data[_DocIdReplaceField.TabIndex];

                            if (!_ReplaceFieldValueToDocId.ContainsKey(value))
                            {
                                _ReplaceFieldValueToDocId.Add(value, docId);
                            }
                            else
                            {
                                _ReplaceFieldValueToDocId[value] = docId;
                            }
                        }
                    }

                    if (_PayloadSize == 0)
                    {
                        _PayloadSize = payload.Data.Length;
                    }

                    int realPayloadSize = (_PayloadSize + 1 + 1) * sizeof(int); //DocId + FileIndex + Payload

                    IndexElement ie;

                    if ((_Count % BufSize) == 0)
                    {
                        IndexBuf[_IndexCount++] = new IndexElement(docId, realPayloadSize);
                    }

                    ie = IndexBuf[_IndexCount - 1];
                    ie.MB.UsedCount++;
                    int *head = (int *)(IntPtr)ie.MB;

                    int *documentId  = (int *)((byte *)head + (ie.MB.UsedCount - 1) * realPayloadSize);
                    int *fileIndex   = documentId + 1;
                    int *payloadData = fileIndex + 1;

                    *documentId = docId;
                    *fileIndex  = payload.FileIndex;

                    for (int i = 0; i < payload.Data.Length; i++)
                    {
                        payloadData[i] = payload.Data[i];
                    }

                    if (_RankTab > 0)
                    {
                        int rank = *(payloadData + _RankTab);
                        if (rank < 0)
                        {
                            rank = 0;
                        }
                        else if (rank > 65535)
                        {
                            rank = 65535;
                        }

                        _DocIdToRank.Add(docId, (UInt16)rank);
                    }

                    _Count++;
                }
                finally
                {
                    _Lock.Leave(Lock.Mode.Mutex);
                }
            }
        }
コード例 #13
0
        /// <summary>
        /// this function is called in first time loading.
        /// </summary>
        /// <param name="fs">file stream that position is already set to end of the header</param>
        /// <param name="storeLength">record length that stored in file</param>
        unsafe internal int LoadFromFile(System.IO.FileStream fs, int storeLength, int rankTab)
        {
            Clear();

            _RankTab = rankTab;

            _Count = (int)((fs.Length - fs.Position) / storeLength);

            byte[] block = new byte[storeLength * BufSize];

            int realPayloadSize = storeLength + 4; //add fileindex 4 bytes

            _PayloadSize = storeLength / 4 - 1;    //subtract docid length (4 bytes); _PayloadSize is count of int

            int readCount = block.Length;

            Hubble.Framework.IO.Stream.ReadToBuf(fs, block, 0, ref readCount);
            int firstFileIndex = 0;
            int recordsInBlock = readCount / storeLength;
            int docId          = -1;
            int lastDocId      = -1;

            while (readCount > 0)
            {
                int          fstDocid     = BitConverter.ToInt32(block, 0);
                IndexElement indexElement = new IndexElement(fstDocid, realPayloadSize);
                IndexBuf[_IndexCount++]   = indexElement;
                indexElement.MB.UsedCount = recordsInBlock;

                int *head = (int *)(IntPtr)indexElement.MB;

                int payloadIntLength = storeLength / 4 - 1; //how may int of payload data

                fixed(byte *pHead = &block[0])
                {
                    byte *pb = pHead;

                    for (int i = 0; i < recordsInBlock; i++)
                    {
                        int *pInt = (int *)pb;

                        *head = *pInt; //docid
                        docId = *head;

                        if (docId < lastDocId)
                        {
                            throw new Data.DataException(string.Format("docid = {0} < last docid ={1}", docId, lastDocId));
                        }

                        lastDocId = docId;

                        head++; //fileindex address
                        pInt++;

                        if (_DocIdReplaceField != null)
                        {
                            if (_DocIdReplaceField.DataType == DataType.BigInt)
                            {
                                long value = (((long)pInt[_DocIdReplaceField.TabIndex]) << 32) +
                                             (uint)pInt[_DocIdReplaceField.TabIndex + 1];

                                if (!_ReplaceFieldValueToDocId.ContainsKey(value))
                                {
                                    _ReplaceFieldValueToDocId.Add(value, docId);
                                }
                                else
                                {
                                    _ReplaceFieldValueToDocId[value] = docId;
                                }
                            }
                            else
                            {
                                int value = pInt[_DocIdReplaceField.TabIndex];

                                _ReplaceFieldValueToDocId.AddOrUpdate(value, docId);

                                //if (!_ReplaceFieldValueToDocId.ContainsKey(value))
                                //{
                                //    _ReplaceFieldValueToDocId.Add(value, docId);
                                //}
                                //else
                                //{
                                //    _ReplaceFieldValueToDocId[value] = docId;
                                //}
                            }
                        }

                        *head = firstFileIndex + i;

                        head++; //Payload Data first byte address

                        if (_RankTab > 0)
                        {
                            int rank = *(pInt + _RankTab);
                            if (rank < 0)
                            {
                                rank = 0;
                            }
                            else if (rank > 65535)
                            {
                                rank = 65535;
                            }

                            _DocIdToRank.Add(docId, (UInt16)rank);
                        }

                        for (int j = 0; j < payloadIntLength; j++)
                        {
                            *head = *pInt;
                            head++;
                            pInt++;
                        }

                        pb += storeLength;
                    }
                }

                firstFileIndex += recordsInBlock;
                readCount       = block.Length;
                Hubble.Framework.IO.Stream.ReadToBuf(fs, block, 0, ref readCount);
                recordsInBlock = readCount / storeLength;
            }

            return(docId);
        }
コード例 #14
0
        unsafe private bool InnerTryGetValue(int docId, out int *pFileIndex)
        {
            //IntPtr p;
            //if (_DocIdToFileIndex.TryGetValue(docId, out p))
            //{
            //    pFileIndex = (int*)p;
            //    return true;
            //}
            //else
            //{
            //    pFileIndex = null;
            //    return false;
            //}

            pFileIndex = null;

            if (_Count == 0)
            {
                return(false);
            }

            int scanTimes = 0;

            IndexElement indexElement = null;

            int index = (docId - IndexBuf[0].StartDocId) / BufSize;

            if (index >= _IndexCount)
            {
                index = _IndexCount - 1;
            }

            while (scanTimes < _IndexCount)
            {
                if (docId >= IndexBuf[index].StartDocId)
                {
                    if (index == _IndexCount - 1)
                    {
                        //last index element
                        indexElement = IndexBuf[index];
                        break;
                    }
                    else if (docId < IndexBuf[index + 1].StartDocId)
                    {
                        indexElement = IndexBuf[index];
                        break;
                    }
                    else
                    {
                        index++;
                    }
                }
                else
                {
                    index--;

                    if (index < 0)
                    {
                        //less than first docid
                        index        = 0;
                        indexElement = null;
                        break;
                    }

                    if (docId >= IndexBuf[index].StartDocId)
                    {
                        indexElement = IndexBuf[index];
                        break;
                    }
                }

                scanTimes++;
            }

            if (indexElement == null)
            {
                return(false);
            }
            else
            {
                int *docPtr = indexElement.MB.Find(docId);

                if (docPtr == null)
                {
                    return(false);
                }

                docPtr++;

                pFileIndex = docPtr;

                return(true);
            }
        }