public SQLiteResultSet Execute(string query)
        {
            SQLiteResultSet set1 = new SQLiteResultSet();

            lock (typeof(SQLiteClient))
            {
                //Log.Info("dbs:{0} sql:{1}", databaseName,query);
                if (query == null)
                {
                    Log.Error("SQLiteClient: query==null");
                    return(set1);
                }
                if (query.Length == 0)
                {
                    Log.Error("SQLiteClient: query==''");
                    return(set1);
                }
                IntPtr errMsg;
                //string msg = "";

                SqliteError err;
                set1.LastCommand = query;

                try
                {
                    IntPtr pVm;
                    IntPtr pzTail;
                    err = sqlite3_prepare16(dbHandle, query, query.Length * 2, out pVm, out pzTail);
                    if (err == SqliteError.OK)
                    {
                        ReadpVm(query, set1, ref pVm);
                    }

                    if (pVm == IntPtr.Zero)
                    {
                        ThrowError("sqlite3_prepare16:pvm=null", query, err);
                    }
                    err = sqlite3_finalize(pVm, out errMsg);
                }
                finally {}
                if (err != SqliteError.OK)
                {
                    Log.Error("SQLiteClient: query returned {0} {1}", err.ToString(), query);
                    ThrowError("sqlite3_finalize", query, err);
                }
            }
            return(set1);
        }
    public bool AssignAllSongFieldsFromResultSet(ref Song aSong, SQLiteResultSet aResult, int aRow)
    {
      if (aSong == null || aResult == null || aResult.Rows.Count < 1)
      {
        return false;
      }

      aSong.Id = DatabaseUtility.GetAsInt(aResult, aRow, "tracks.idTrack");
      aSong.FileName = DatabaseUtility.Get(aResult, aRow, "tracks.strPath");
      aSong.Artist = DatabaseUtility.Get(aResult, aRow, "tracks.strArtist").Trim(trimChars);
      aSong.AlbumArtist = DatabaseUtility.Get(aResult, aRow, "tracks.strAlbumArtist").Trim(trimChars);
      aSong.Album = DatabaseUtility.Get(aResult, aRow, "tracks.strAlbum");
      aSong.Genre = DatabaseUtility.Get(aResult, aRow, "tracks.strGenre").Trim(trimChars);
      aSong.Title = DatabaseUtility.Get(aResult, aRow, "tracks.strTitle");
      aSong.Track = DatabaseUtility.GetAsInt(aResult, aRow, "tracks.iTrack");
      aSong.TrackTotal = DatabaseUtility.GetAsInt(aResult, aRow, "tracks.iNumTracks");
      aSong.Duration = DatabaseUtility.GetAsInt(aResult, aRow, "tracks.iDuration");
      aSong.Year = DatabaseUtility.GetAsInt(aResult, aRow, "tracks.iYear");
      aSong.TimesPlayed = DatabaseUtility.GetAsInt(aResult, aRow, "tracks.iTimesPlayed");
      aSong.Rating = DatabaseUtility.GetAsInt(aResult, aRow, "tracks.iRating");
      aSong.Favorite = DatabaseUtility.GetAsInt(aResult, aRow, "tracks.iFavorite") != 0;
      aSong.ResumeAt = DatabaseUtility.GetAsInt(aResult, aRow, "tracks.iResumeAt");
      aSong.DiscId = DatabaseUtility.GetAsInt(aResult, aRow, "tracks.iDisc");
      aSong.DiscTotal = DatabaseUtility.GetAsInt(aResult, aRow, "tracks.iNumDisc");
      aSong.Lyrics = DatabaseUtility.Get(aResult, aRow, "tracks.strLyrics");
      aSong.Composer = DatabaseUtility.Get(aResult, aRow, "tracks.strComposer").Trim(trimChars);
      aSong.Conductor = DatabaseUtility.Get(aResult, aRow, "tracks.strConductor").Trim(trimChars);
      aSong.Comment = DatabaseUtility.Get(aResult, aRow, "tracks.strComment").Trim(trimChars);
      aSong.FileType = DatabaseUtility.Get(aResult, aRow, "tracks.strFileType").Trim(trimChars);
      aSong.Codec = DatabaseUtility.Get(aResult, aRow, "tracks.strFullCodec").Trim(trimChars);
      aSong.BitRateMode = DatabaseUtility.Get(aResult, aRow, "tracks.strBitRateMode").Trim(trimChars);
      aSong.BPM = DatabaseUtility.GetAsInt(aResult, aRow, "tracks.iBPM");
      aSong.BitRate = DatabaseUtility.GetAsInt(aResult, aRow, "tracks.iBitRate");
      aSong.Channels = DatabaseUtility.GetAsInt(aResult, aRow, "tracks.iChannels");
      aSong.SampleRate = DatabaseUtility.GetAsInt(aResult, aRow, "tracks.iSampleRate");
      try
      {
        aSong.DateTimePlayed = DatabaseUtility.GetAsDateTime(aResult, aRow, "dateLastPlayed");
        aSong.DateTimeModified = DatabaseUtility.GetAsDateTime(aResult, aRow, "dateAdded");
      }
      catch (Exception ex)
      {
        Log.Warn("MusicDatabase Lookup: Exception parsing date fields: {0} stack: {1}", ex.Message, ex.StackTrace);
      }
      return true;
    }
 private string Get(SQLiteResultSet results, int iRecord, string strColum)
 {
   if (null == results)
   {
     return "";
   }
   if (results.Rows.Count < iRecord)
   {
     return "";
   }
   SQLiteResultSet.Row arr = results.Rows[iRecord];
   int iCol = 0;
   foreach (string columnName in results.ColumnNames)
   {
     if (strColum == columnName)
     {
       string strLine = arr.fields[iCol].Trim();
       strLine = strLine.Replace("''", "'");
       return strLine;
     }
     iCol++;
   }
   return "";
 }
 public DatabaseResultSetAdapter(SQLiteResultSet adaptee)
 {
     _adaptee = adaptee;
 }
        // Loads data into this object based on the given database record.
        public void LoadByRow(SQLiteResultSet.Row row)
        {
            RetrievalInProcess = true;
            ReadOnlyCollection<DBField> fieldList = DBField.GetFieldList(this.GetType());

            // load each field one at a time. they should have been retrieved in the
            // ordering in FieldList
            int i;
            for (i = 0; i < fieldList.Count; i++) {
                if (row.fields[i] == "")
                    fieldList[i].SetValue(this, null);
                else
                    fieldList[i].SetValue(this, row.fields[i]);
            }

            // id is always at the end, assign that too
            id = int.Parse(row.fields[i]);

            // all values are in sync with DB so no commit needed.
            commitNeeded = false;
            RetrievalInProcess = false;
        }
    private void SetMovieDetails(ref IMDBMovie details, int iRow, SQLiteResultSet results)
    {
      double rating = 0;
      Double.TryParse(DatabaseUtility.Get(results, iRow, "movieinfo.fRating"), out rating);
      details.Rating = (float)rating;

      if (details.Rating > 10.0f)
      {
        details.Rating /= 10.0f;
      }

      details.Director = DatabaseUtility.Get(results, iRow, "movieinfo.strDirector").Replace("''", "'");

      // Add directorID
      try
      {
        details.DirectorID = Int32.Parse(DatabaseUtility.Get(results, iRow, "movieinfo.idDirector"));
      }
      catch (Exception)
      {
        details.DirectorID = -1;
      }

      details.WritingCredits = DatabaseUtility.Get(results, iRow, "movieinfo.strCredits").Replace("''", "'");
      details.TagLine = DatabaseUtility.Get(results, iRow, "movieinfo.strTagLine").Replace("''", "'");
      details.PlotOutline = DatabaseUtility.Get(results, iRow, "movieinfo.strPlotOutline").Replace("''", "'");
      details.Plot = DatabaseUtility.Get(results, iRow, "movieinfo.strPlot").Replace("''", "'");
      // Added user review
      details.UserReview = DatabaseUtility.Get(results, iRow, "movieinfo.strUserReview").Replace("''", "'");
      details.Votes = DatabaseUtility.Get(results, iRow, "movieinfo.strVotes");
      details.Cast = DatabaseUtility.Get(results, iRow, "movieinfo.strCast").Replace("''", "'");
      details.Year = Int32.Parse(DatabaseUtility.Get(results, iRow, "movieinfo.iYear"));
      details.Genre = DatabaseUtility.Get(results, iRow, "movieinfo.strGenre").Trim();
      details.ThumbURL = DatabaseUtility.Get(results, iRow, "movieinfo.strPictureURL");
      // Fanart
      details.FanartURL = DatabaseUtility.Get(results, iRow, "movieinfo.strFanartURL");
      // Date Added
      details.DateAdded = DatabaseUtility.Get(results, iRow, "movieinfo.dateAdded");
      // Date Watched
      details.DateWatched = DatabaseUtility.Get(results, iRow, "movieinfo.dateWatched");
      details.Title = DatabaseUtility.Get(results, iRow, "movieinfo.strTitle").Replace("''", "'");
      details.Path = DatabaseUtility.Get(results, iRow, "path.strPath");
      details.DVDLabel = DatabaseUtility.Get(results, iRow, "movie.discid");
      details.IMDBNumber = DatabaseUtility.Get(results, iRow, "movieinfo.IMDBID");
      Int32 lMovieId = Int32.Parse(DatabaseUtility.Get(results, iRow, "movieinfo.idMovie"));
      details.SearchString = String.Format("{0}", details.Title);
      details.CDLabel = DatabaseUtility.Get(results, iRow, "path.cdlabel");
      details.MPARating = DatabaseUtility.Get(results, iRow, "movieinfo.mpaa");
      int runtime = 0;
      Int32.TryParse(DatabaseUtility.Get(results, iRow, "movieinfo.runtime"), out runtime);
      details.RunTime = runtime;
      int watched = 0;
      Int32.TryParse(DatabaseUtility.Get(results, iRow, "movieinfo.iswatched"), out watched);
      details.Watched = watched;
      details.ID = lMovieId;
      details.Studios = DatabaseUtility.Get(results, iRow, "movieinfo.studios");
      details.Country = DatabaseUtility.Get(results, iRow, "movieinfo.country");
      details.Language = DatabaseUtility.Get(results, iRow, "movieinfo.language");
      details.LastUpdate = DatabaseUtility.Get(results, iRow, "movieinfo.lastupdate");
    }
    public static string Get(SQLiteResultSet results, int iRecord, string strColum)
    {
      if (null == results)
      {
        return string.Empty;
      }
      if (results.Rows.Count == 0)
      {
        return string.Empty;
      }
      if (results.Rows.Count < iRecord)
      {
        return string.Empty;
      }
      SQLiteResultSet.Row arr = results.Rows[iRecord];
      int iCol = 0;
      if (results.ColumnIndices.ContainsKey(strColum))
      {
        iCol = (int)results.ColumnIndices[strColum];
        if (arr.fields[iCol] == null)
        {
          return string.Empty;
        }
        string strLine = (arr.fields[iCol]).Trim();
        //strLine = strLine.Replace("''","'");
        return strLine;
      }
      int pos = strColum.IndexOf(".");
      if (pos < 0)
      {
        return string.Empty;
      }
      strColum = strColum.Substring(pos + 1);
      if (results.ColumnIndices.ContainsKey(strColum))
      {
        iCol = (int)results.ColumnIndices[strColum];
        if (arr.fields[iCol] == null)
        {
          return string.Empty;
        }
        string strLine = (arr.fields[iCol]).Trim();
        //strLine = strLine.Replace("''","'");
        return strLine;
      }

      return string.Empty;
    }
 public static string Get(SQLiteResultSet results, int iRecord, int column)
 {
   if (null == results)
   {
     return string.Empty;
   }
   if (results.Rows.Count < iRecord)
   {
     return string.Empty;
   }
   if (column < 0 || column >= results.ColumnNames.Count)
   {
     return string.Empty;
   }
   SQLiteResultSet.Row arr = results.Rows[iRecord];
   if (arr.fields[column] == null)
   {
     return string.Empty;
   }
   string strLine = (arr.fields[column]).Trim();
   //strLine = strLine.Replace("''","'");
   return strLine;
   ;
 }
    internal void ReadpVm(string query, SQLiteResultSet set1, ref IntPtr pVm)
    {
      int pN;
      SqliteError res = SqliteError.ERROR;

      if (pVm == IntPtr.Zero)
      {
        ThrowError("SQLiteClient: pvm=null", query, res);
      }
      DateTime now = DateTime.Now;
      TimeSpan ts = now - DateTime.Now;
      while (true && ts.TotalSeconds > -15)
      {
        res = sqlite3_step(pVm);
        pN = sqlite3_column_count(pVm);
        /*
        if (res == SqliteError.ERROR)
        {
          ThrowError("sqlite3_step", query, res);
        }
        */
        if (res == SqliteError.DONE)
        {
          break;
        }


        // when resuming from hibernation or standby and where the db3 files are located on a network drive, we often end up in a neverending loop
        // while (true)...it never exits. and the app is hanging.
        // Lets handle it by disconnecting the DB, and then reconnect.
        if (res == SqliteError.BUSY || res == SqliteError.ERROR)
        {
          this.Close();

          dbHandle = IntPtr.Zero;

          // bool res2 = WaitForFile(this.DBName);

          SqliteError err = (SqliteError)sqlite3_open16(this.DBName, out dbHandle);

          if (err != SqliteError.OK)
          {
            throw new SQLiteException(string.Format("Failed to re-open database, SQLite said: {0} {1}", DBName,
                                                    err.ToString()));
          }
          else
          {
            IntPtr pzTail;
            err = sqlite3_prepare16(dbHandle, query, query.Length * 2, out pVm, out pzTail);

            res = sqlite3_step(pVm);
            pN = sqlite3_column_count(pVm);

            if (pVm == IntPtr.Zero)
            {
              ThrowError("sqlite3_prepare16:pvm=null", query, err);
            }
          }
        }

        // We have some data; lets read it
        if (set1.ColumnNames.Count == 0)
        {
          for (int i = 0; i < pN; i++)
          {
            string colName;
            IntPtr pName = sqlite3_column_name16(pVm, i);
            if (pName == IntPtr.Zero)
            {
              ThrowError(String.Format("SqlClient:sqlite3_column_name16() returned null {0}/{1}", i, pN), query, res);
            }
            colName = Marshal.PtrToStringUni(pName);
            set1.columnNames.Add(colName);
            set1.ColumnIndices[colName] = i;
          }
        }

        SQLiteResultSet.Row row = new SQLiteResultSet.Row();
        for (int i = 0; i < pN; i++)
        {
          string colData = "";
          IntPtr pName = sqlite3_column_text16(pVm, i);
          if (pName != IntPtr.Zero)
          {
            colData = Marshal.PtrToStringUni(pName);
          }
          row.fields.Add(colData);
        }
        set1.Rows.Add(row);

        ts = now - DateTime.Now;
      }

      if (res == SqliteError.BUSY || res == SqliteError.ERROR)
      {
        ThrowError("sqlite3_step", query, res);
      }
    }
        internal void ReadpVm(string query, SQLiteResultSet set1, ref IntPtr pVm)
        {
            int         pN;
            SqliteError res = SqliteError.ERROR;

            if (pVm == IntPtr.Zero)
            {
                ThrowError("SQLiteClient: pvm=null", query, res);
            }
            DateTime now = DateTime.Now;
            TimeSpan ts  = now - DateTime.Now;

            while (true && ts.TotalSeconds > -15)
            {
                for (int i = 0; i <= busyRetries; i++)
                {
                    res = sqlite3_step(pVm);
                    if (res == SqliteError.LOCKED || res == SqliteError.BUSY)
                    {
                        Thread.Sleep(busyRetryDelay);
                    }
                    else
                    {
                        if (i > 0)
                        {
                            Log.Debug("SqlClient: database was busy (Available after " + (i + 1) + " retries)");
                        }
                        break;
                    }
                }

                pN = sqlite3_column_count(pVm);

                /*
                 * if (res == SqliteError.ERROR)
                 * {
                 * ThrowError("sqlite3_step", query, res);
                 * }
                 */
                if (res == SqliteError.DONE)
                {
                    break;
                }


                // when resuming from hibernation or standby and where the db3 files are located on a network drive, we often end up in a neverending loop
                // while (true)...it never exits. and the app is hanging.
                // Lets handle it by disconnecting the DB, and then reconnect.
                if (res == SqliteError.BUSY || res == SqliteError.ERROR)
                {
                    this.Close();

                    dbHandle = IntPtr.Zero;

                    // bool res2 = WaitForFile(this.DBName);

                    SqliteError err = (SqliteError)sqlite3_open16(this.DBName, out dbHandle);

                    if (err != SqliteError.OK)
                    {
                        throw new SQLiteException(string.Format("Failed to re-open database, SQLite said: {0} {1}", DBName,
                                                                err.ToString()));
                    }
                    else
                    {
                        IntPtr pzTail;
                        err = sqlite3_prepare16(dbHandle, query, query.Length * 2, out pVm, out pzTail);

                        res = sqlite3_step(pVm);
                        pN  = sqlite3_column_count(pVm);

                        if (pVm == IntPtr.Zero)
                        {
                            ThrowError("sqlite3_prepare16:pvm=null", query, err);
                        }
                    }
                }

                // We have some data; lets read it
                if (set1.ColumnNames.Count == 0)
                {
                    for (int i = 0; i < pN; i++)
                    {
                        string colName;
                        IntPtr pName = sqlite3_column_name16(pVm, i);
                        if (pName == IntPtr.Zero)
                        {
                            ThrowError(String.Format("SqlClient:sqlite3_column_name16() returned null {0}/{1}", i, pN), query, res);
                        }
                        colName = Marshal.PtrToStringUni(pName);
                        set1.columnNames.Add(colName);
                        set1.ColumnIndices[colName] = i;
                    }
                }

                SQLiteResultSet.Row row = new SQLiteResultSet.Row();
                for (int i = 0; i < pN; i++)
                {
                    string colData = "";
                    IntPtr pName   = sqlite3_column_text16(pVm, i);
                    if (pName != IntPtr.Zero)
                    {
                        colData = Marshal.PtrToStringUni(pName);
                    }
                    row.fields.Add(colData);
                }
                set1.Rows.Add(row);

                ts = now - DateTime.Now;
            }

            if (res == SqliteError.BUSY || res == SqliteError.ERROR)
            {
                ThrowError("sqlite3_step", query, res);
            }
        }
 public static long GetAsInt64(SQLiteResultSet results, int iRecord, int column)
 {
   string result = Get(results, iRecord, column);
   try
   {
     long longValue = Int64.Parse(result);
     return longValue;
   }
   catch (Exception) {}
   return 0;
 }
 public static int GetAsInt(SQLiteResultSet results, int iRecord, int column)
 {
   string result = Get(results, iRecord, column);
   try
   {
     int intValue = Int32.Parse(result);
     return intValue;
   }
   catch (Exception) {}
   return 0;
 }
    public static int GetAsInt(SQLiteResultSet results, int iRecord, string strColum)
    {
      string result = Get(results, iRecord, strColum);
      if (result == null)
      {
        return 0;
      }
      if (result.Length == 0)
      {
        return 0;
      }
      int returnValue = -1;
      try
      {
        //Remove decimal from string
        try
        {
          if (result.Length > 1)
          {
            int slashPos = result.IndexOf(".", StringComparison.Ordinal);
            if (slashPos > 0)
            {
              result = result.Substring(0, result.IndexOf('.', 0));
            }
          }
        }
        catch (Exception)
        {
          // Can't convert or remove decimal from the string
        }

        int numValue;
        bool parsed = Int32.TryParse(result, out numValue);
        if (parsed)
        {
          returnValue = Int32.Parse(result);
        }
      }
      catch (Exception)
      {
        Log.Info("DatabaseUtility:GetAsInt() column:{0} record:{1} value:{2} is not an int",
                 strColum, iRecord, result);
      }
      return returnValue;
    }
Beispiel #14
0
 public bool Read(SQLiteResultSet.Row row, System.Collections.Hashtable ColumnIndices)
 {
     if (row == null || row.fields.Count == 0) return false;
     string res = null;
     int iCol = 0;
     foreach (KeyValuePair<string, DBField> field in m_fields)
     {
         object o = null;
         if (((o = ColumnIndices[field.Key]) != null)
             || ((o = ColumnIndices[m_tableName + "." + field.Key]) != null)
             || ((o = ColumnIndices[m_tableName + field.Key]) != null)) // because of order bug in sqlite
         {
             iCol = (int)o;
             res = row.fields[iCol];
             field.Value.Value = res == null ? string.Empty : res;
         }
         else
             // we have a column in mfields that is not in the database result (or null), as such it is to be empty
             field.Value.Value = string.Empty;
     }
     m_CommitNeeded = false;
     return true;
 }
Beispiel #15
0
 public bool Read(ref SQLiteResultSet records, int index)
 {
     if (records.Rows.Count > 0 || records.Rows.Count < index)
     {
         SQLiteResultSet.Row row = records.Rows[index];
         return Read(row, records.ColumnIndices);
     }
     return false;
 }
    private void SetMovieDetails(ref IMDBMovie details, int iRow, SQLiteResultSet results)
    {
      if (details == null || iRow < 0 || results == null)
      {
        return;
      }

      double rating = 0;
      Double.TryParse(DatabaseUtility.Get(results, iRow, "movieinfo.fRating"), out rating);
      details.Rating = (float)rating;

      if (details.Rating > 10.0f)
      {
        details.Rating /= 10.0f;
      }

      details.Director = DatabaseUtility.Get(results, iRow, "movieinfo.strDirector").Replace("''", "'");

      // Add directorID
      try
      {
        details.DirectorID = Int32.Parse(DatabaseUtility.Get(results, iRow, "movieinfo.idDirector"));
      }
      catch (Exception)
      {
        details.DirectorID = -1;
      }
      
      details.WritingCredits = DatabaseUtility.Get(results, iRow, "movieinfo.strCredits").Replace("''", "'");
      details.TagLine = DatabaseUtility.Get(results, iRow, "movieinfo.strTagLine").Replace("''", "'");
      details.PlotOutline = DatabaseUtility.Get(results, iRow, "movieinfo.strPlotOutline").Replace("''", "'");
      details.Plot = DatabaseUtility.Get(results, iRow, "movieinfo.strPlot").Replace("''", "'");
      // Added user review
      details.UserReview = DatabaseUtility.Get(results, iRow, "movieinfo.strUserReview").Replace("''", "'");
      details.Votes = DatabaseUtility.Get(results, iRow, "movieinfo.strVotes");
      details.Cast = DatabaseUtility.Get(results, iRow, "movieinfo.strCast").Replace("''", "'");
      details.Year = Int32.Parse(DatabaseUtility.Get(results, iRow, "movieinfo.iYear"));
      details.Genre = DatabaseUtility.Get(results, iRow, "movieinfo.strGenre").Trim();
      details.ThumbURL = DatabaseUtility.Get(results, iRow, "movieinfo.strPictureURL");
      // Fanart
      details.FanartURL = DatabaseUtility.Get(results, iRow, "movieinfo.strFanartURL");
      // Date Added
      details.DateAdded = DatabaseUtility.Get(results, iRow, "movieinfo.dateAdded");
      // Date Watched
      details.DateWatched = DatabaseUtility.Get(results, iRow, "movieinfo.dateWatched");
      details.Title = DatabaseUtility.Get(results, iRow, "movieinfo.strTitle").Replace("''", "'");
      details.Path = DatabaseUtility.Get(results, iRow, "path.strPath");
      details.DVDLabel = DatabaseUtility.Get(results, iRow, "movie.discid");
      details.IMDBNumber = DatabaseUtility.Get(results, iRow, "movieinfo.IMDBID");
      Int32 lMovieId = Int32.Parse(DatabaseUtility.Get(results, iRow, "movieinfo.idMovie"));
      details.SearchString = String.Format("{0}", details.Title);
      details.CDLabel = DatabaseUtility.Get(results, iRow, "path.cdlabel");
      details.MPARating = DatabaseUtility.Get(results, iRow, "movieinfo.mpaa");
      int runtime = 0;
      Int32.TryParse(DatabaseUtility.Get(results, iRow, "movieinfo.runtime"), out runtime);
      details.RunTime = runtime;
      int watched = 0;
      Int32.TryParse(DatabaseUtility.Get(results, iRow, "movieinfo.iswatched"), out watched);
      details.Watched = watched;
      details.ID = lMovieId;
      details.Studios = DatabaseUtility.Get(results, iRow, "movieinfo.studios");
      details.Country = DatabaseUtility.Get(results, iRow, "movieinfo.country");
      details.Language = DatabaseUtility.Get(results, iRow, "movieinfo.language");
      details.LastUpdate = DatabaseUtility.Get(results, iRow, "movieinfo.lastupdate");
      details.SortTitle = DatabaseUtility.Get(results, iRow, "movieinfo.strSortTitle").Replace("''", "'");

      if (string.IsNullOrEmpty(details.Path) && details.ID > 0)
      {
        string strSQL = String.Format(
          "SELECT path.strPath FROM movie,path WHERE path.idpath=movie.idpath AND movie.idMovie = {0}", details.ID);
        results = m_db.Execute(strSQL);
        details.Path = DatabaseUtility.Get(results, 0, "path.strPath");
      }

      if (details.ID > 0)
      {
        int percent = 0;
        int watchedCount = 0;
        GetMovieWatchedStatus(details.ID, out percent, out watchedCount);
        details.WatchedPercent = percent;
        details.WatchedCount = watchedCount;

        string movieFilename = string.Empty;
        ArrayList files = new ArrayList();
        GetFilesForMovie(details.ID, ref files);

        int duration = GetMovieDuration(details.ID);
        details.Duration = duration;

        if (files.Count > 0)
        {
          movieFilename = (string) files[0];
        }

        details.VideoFileName = movieFilename;
        details.VideoFilePath = details.Path;

        VideoFilesMediaInfo mInfo = new VideoFilesMediaInfo();
        GetVideoFilesMediaInfo(movieFilename, ref mInfo, false);
        details.MediaInfo = mInfo;
      }

    }
 public static long GetAsInt64(SQLiteResultSet results, int iRecord, string strColum)
 {
   string result = Get(results, iRecord, strColum);
   if (result == null)
   {
     return 0;
   }
   if (result.Length == 0)
   {
     return 0;
   }
   long returnValue = -1;
   try
   {
     returnValue = Int64.Parse(result);
   }
   catch (Exception)
   {
     Log.Info("DatabaseUtility:GetAsInt64() column:{0} record:{1} value:{2} is not an Int64",
              strColum, iRecord, result);
   }
   return returnValue;
 }
    public static DateTime GetAsDateTime(SQLiteResultSet results, int iRecord, string aTimestampColum)
    {
      DateTime finalResult = DateTime.MinValue;
      if (results == null || string.IsNullOrEmpty(aTimestampColum) || results.Rows.Count < 1 ||
          results.Rows.Count < iRecord)
      {
        return finalResult;
      }

      try
      {
        SQLiteResultSet.Row arr = results.Rows[iRecord];
        int iCol = 0;
        if (results.ColumnIndices.ContainsKey(aTimestampColum))
        {
          iCol = (int)results.ColumnIndices[aTimestampColum];
          if (arr.fields[iCol] != null)
          {
            finalResult = Convert.ToDateTime((arr.fields[iCol]));
          }
        }
      }
      catch (Exception) {}

      return finalResult;
    }
        public ArrayList GetColumn(string query, int column)
        {
            SQLiteResultSet set1 = Execute(query);

            return(set1.GetColumn(column));
        }
    public SQLiteResultSet Execute(string query)
    {
      SQLiteResultSet set1 = new SQLiteResultSet();
      lock (typeof (SQLiteClient))
      {
        //Log.Info("dbs:{0} sql:{1}", databaseName,query);
        if (query == null)
        {
          Log.Error("SQLiteClient: query==null");
          return set1;
        }
        if (query.Length == 0)
        {
          Log.Error("SQLiteClient: query==''");
          return set1;
        }
        IntPtr errMsg;
        //string msg = "";

        SqliteError err;
        set1.LastCommand = query;

        try
        {
          IntPtr pVm;
          IntPtr pzTail;
          err = sqlite3_prepare16(dbHandle, query, query.Length * 2, out pVm, out pzTail);
          if (err == SqliteError.OK)
          {
            ReadpVm(query, set1, ref pVm);
          }

          if (pVm == IntPtr.Zero)
          {
            ThrowError("sqlite3_prepare16:pvm=null", query, err);
          }
          err = sqlite3_finalize(pVm, out errMsg);
        }
        finally {}
        if (err != SqliteError.OK)
        {
          Log.Error("SQLiteClient: query returned {0} {1}", err.ToString(), query);
          ThrowError("sqlite3_finalize", query, err);
        }
      }
      return set1;
    }