Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**************************************************************************************
- This script relates to the following SQL Server Central forum thread:
- Simple CLR request ( http://www.sqlservercentral.com/Forums/Topic1795321-3412-1.aspx )
- Written by: Solomon Rutzky
- On: 2016-06-26
- This script is located at: http://pastebin.com/Rd4G7T3B
- ***************************************************************************************/
- using System; // Array, Object
- using System.Collections; // IEnumerable
- using System.Data.SqlTypes; // SqlChars, SqlInt32
- using Microsoft.SqlServer.Server; // SqlFacet
- public class NGrams
- {
- [Microsoft.SqlServer.Server.SqlFunction(FillRowMethodName = "NGramSolomon_FillRow",
- TableDefinition = "Position INT, Token NVARCHAR(4000)")]
- public static IEnumerable NGramSolomon([SqlFacet(MaxSize = 4000)] SqlChars InputString, SqlInt32 TokenSize)
- {
- if (InputString.IsNull || TokenSize.IsNull)
- {
- yield break;
- }
- int _Take = TokenSize.Value;
- int _Limit = ((int)InputString.Length - _Take);
- if (_Take < 1 || _Limit < 0)
- {
- yield break;
- }
- ResultRow _Result = new ResultRow();
- char[] _Chars = InputString.Value;
- char[] _Temp = new char[_Take];
- for (int _Index = 0; _Index <= _Limit; _Index++)
- {
- Array.Copy(_Chars, _Index, _Temp, 0, _Take);
- _Result.Position = (_Index + 1);
- _Result.Token = new SqlChars(_Temp);
- yield return _Result;
- }
- }
- public class ResultRow
- {
- public int Position;
- public SqlChars Token;
- }
- public static void NGramSolomon_FillRow(Object obj, out SqlInt32 position, out SqlChars token)
- {
- ResultRow _Item = (ResultRow)obj;
- position = new SqlInt32(_Item.Position);
- token = _Item.Token;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement