コード例 #1
0
ファイル: SQLite3.cs プロジェクト: tohosnet/Mono.Data.Sqlite
 internal override void ReturnBlob(SqliteContextHandle context, byte[] value)
 {
     UnsafeNativeMethods.sqlite3_result_blob(context, value, value.Length, null);
 }
コード例 #2
0
ファイル: SQLite3.cs プロジェクト: tohosnet/Mono.Data.Sqlite
 internal override int ContextCollateCompare(CollationEncodingEnum enc, SqliteContextHandle context, char[] c1,
                                             char[] c2)
 {
     throw new NotImplementedException();
 }
コード例 #3
0
ファイル: SQLite3.cs プロジェクト: tohosnet/Mono.Data.Sqlite
 internal override CollationSequence GetCollationSequence(SqliteFunction func, SqliteContextHandle context)
 {
     throw new NotImplementedException();
 }
コード例 #4
0
 internal abstract int ContextCollateCompare(CollationEncodingEnum enc, SqliteContextHandle context, string s1,
                                             string s2);
コード例 #5
0
    /// <summary>
    /// An internal aggregate Final function callback, which wraps the context pointer and calls the virtual Final() method.
    /// </summary>
    /// <param name="context">A raw context pointer</param>
    internal void FinalCallback(SqliteContextHandle context)
    {
      SqliteValueHandle n = (SqliteValueHandle)_base.AggregateContext(context);
      object obj = null;

      if (_contextDataList.ContainsKey(n))
      {
        obj = _contextDataList[n]._data;
        _contextDataList.Remove(n);
      }

      _context = context;
      SetReturnValue(context, Final(obj));

      IDisposable disp = obj as IDisposable;
      if (disp != null) disp.Dispose();
    }
コード例 #6
0
ファイル: SQLite3.cs プロジェクト: tohosnet/Mono.Data.Sqlite
 internal override void ReturnInt64(SqliteContextHandle context, long value)
 {
     UnsafeNativeMethods.sqlite3_result_int64(context, value);
 }
コード例 #7
0
ファイル: SQLite3.cs プロジェクト: tohosnet/Mono.Data.Sqlite
 internal override void ReturnText(SqliteContextHandle context, string value)
 {
     UnsafeNativeMethods.sqlite3_result_text(context, value, value.Length, null);
 }
コード例 #8
0
 internal abstract void ReturnNull(SqliteContextHandle context);
コード例 #9
0
 internal abstract void ReturnText(SqliteContextHandle context, string value);
コード例 #10
0
 internal abstract void ReturnDouble(SqliteContextHandle context, double value);
コード例 #11
0
 internal abstract void ReturnInt64(SqliteContextHandle context, Int64 value);
コード例 #12
0
 internal abstract void ReturnBlob(SqliteContextHandle context, byte[] value);
コード例 #13
0
 internal abstract SqliteValueHandle AggregateContext(SqliteContextHandle context);
コード例 #14
0
 internal abstract int ContextCollateCompare(CollationEncodingEnum enc, SqliteContextHandle context, char[] c1,
                                             char[] c2);
コード例 #15
0
ファイル: SQLite3.cs プロジェクト: tohosnet/Mono.Data.Sqlite
 internal override void ReturnDouble(SqliteContextHandle context, double value)
 {
     UnsafeNativeMethods.sqlite3_result_double(context, value);
 }
コード例 #16
0
    /// <summary>
    /// Takes the return value from Invoke() and Final() and figures out how to return it to SQLite's context.
    /// </summary>
    /// <param name="context">The context the return value applies to</param>
    /// <param name="returnValue">The parameter to return to SQLite</param>
    void SetReturnValue(SqliteContextHandle context, object returnValue)
    {
      if (returnValue == null || returnValue == DBNull.Value)
      {
        _base.ReturnNull(context);
        return;
      }

      Type t = returnValue.GetType();
      if (t == typeof(DateTime))
      {
        _base.ReturnText(context, _base.ToString((DateTime)returnValue));
        return;
      }
      else
      {
        Exception r = returnValue as Exception;

        if (r != null)
        {
          _base.ReturnError(context, r.Message);
          return;
        }
      }

      switch (SqliteConvert.TypeToAffinity(t))
      {
        case TypeAffinity.Null:
          _base.ReturnNull(context);
          return;
        case TypeAffinity.Int64:
          _base.ReturnInt64(context, Convert.ToInt64(returnValue, CultureInfo.CurrentCulture));
          return;
        case TypeAffinity.Double:
          _base.ReturnDouble(context, Convert.ToDouble(returnValue, CultureInfo.CurrentCulture));
          return;
        case TypeAffinity.Text:
          _base.ReturnText(context, returnValue.ToString());
          return;
        case TypeAffinity.Blob:
          _base.ReturnBlob(context, (byte[])returnValue);
          return;
      }
    }
コード例 #17
0
ファイル: SQLite3.cs プロジェクト: tohosnet/Mono.Data.Sqlite
 internal override void ReturnError(SqliteContextHandle context, string value)
 {
     UnsafeNativeMethods.sqlite3_result_error(context, ToUTF8(value), value.Length);
 }
コード例 #18
0
 /// <summary>
 /// Internal scalar callback function, which wraps the raw context pointer and calls the virtual Invoke() method.
 /// </summary>
 /// <param name="context">A raw context pointer</param>
 /// <param name="nArgs">Number of arguments passed in</param>
 /// <param name="argsptr">A pointer to the array of arguments</param>
 internal void ScalarCallback(SqliteContextHandle context, int nArgs, SqliteValueHandle[] argsptr)
 {
   _context = context;
   SetReturnValue(context, Invoke(ConvertParams(nArgs, argsptr)));
 }
コード例 #19
0
ファイル: SQLite3.cs プロジェクト: tohosnet/Mono.Data.Sqlite
 internal override void ReturnNull(SqliteContextHandle context)
 {
     UnsafeNativeMethods.sqlite3_result_null(context);
 }
コード例 #20
0
    /// <summary>
    /// The internal aggregate Step function callback, which wraps the raw context pointer and calls the virtual Step() method.
    /// </summary>
    /// <remarks>
    /// This function takes care of doing the lookups and getting the important information put together to call the Step() function.
    /// That includes pulling out the user's contextData and updating it after the call is made.  We use a sorted list for this so
    /// binary searches can be done to find the data.
    /// </remarks>
    /// <param name="context">A raw context pointer</param>
    /// <param name="nArgs">Number of arguments passed in</param>
    /// <param name="argsptr">A pointer to the array of arguments</param>
    internal void StepCallback(SqliteContextHandle context, int nArgs, SqliteValueHandle[] argsptr)
    {
      SqliteValueHandle nAux;
      AggregateData data;

      nAux = (SqliteValueHandle)_base.AggregateContext(context);
      if (_contextDataList.TryGetValue(nAux, out data) == false)
      {
        data = new AggregateData();
        _contextDataList[nAux] = data;
      }

      try
      {
        _context = context;
        Step(ConvertParams(nArgs, argsptr), data._count, ref data._data);
      }
      finally
      {
        data._count++;
      }
    }
コード例 #21
0
ファイル: SQLite3.cs プロジェクト: tohosnet/Mono.Data.Sqlite
 internal override SqliteValueHandle AggregateContext(SqliteContextHandle context)
 {
     return UnsafeNativeMethods.sqlite3_aggregate_context(context, 1);
 }
コード例 #22
0
 internal abstract CollationSequence GetCollationSequence(SqliteFunction func, SqliteContextHandle context);