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); }
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); }
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 }
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); }
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); }
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); }
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"); }
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); } } } }
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); } }
/// <inheritdoc /> public override DialogElement InputDialogElement(List <DataSetArray> dataSets) { _indexEle = new IndexElement(this); return(_indexEle); }
/// <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); } }
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); } } }
/// <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); }
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); } }