Beispiel #1
0
        internal void Export(List <string> tablesToExport, List <string> exportedViews,
                             SQLiteBackup manager)
        {
            if (_isProcessed || manager.stopProcess || _createTriggerSQL.Trim().Length == 0)
            {
                return;
            }

            foreach (var dependantTable in _tableDependancies)
            {
                // skip trigers that are dependant on skiped tables
                if (!tablesToExport.Contains(dependantTable))
                {
                    return;
                }
            }
            foreach (var dependantView in _viewsDependancies)
            {
                // skip trigers that are dependant on skiped views
                if (!exportedViews.Contains(dependantView))
                {
                    return;
                }
            }

            manager.Export_WriteLine(string.Format("DROP TRIGGER IF EXISTS `{0}`;", _name));
            manager.Export_WriteLine(_createTriggerSQL);
            manager.textWriter.WriteLine();

            _isProcessed = true;
        }
Beispiel #2
0
        void Export_RowsData_OnDuplicateKeyUpdate(SQLiteBackup manager)
        {
            bool allPrimaryField = true;

            foreach (var col in Columns)
            {
                if (!col.IsPrimaryKey)
                {
                    allPrimaryField = false;
                    break;
                }
            }

            manager.Command.CommandText = string.Format("SELECT * FROM `{0}`;", _name);
            SQLiteDataReader rdr = manager.Command.ExecuteReader();

            _insertStatementHeader = string.Empty;

            while (rdr.Read())
            {
                if (manager.stopProcess)
                {
                    return;
                }

                if (_insertStatementHeader == string.Empty)
                {
                    if (allPrimaryField)
                    {
                        _insertStatementHeader = Export_GetInsertStatementHeader(RowsDataExportMode.InsertIgnore, rdr);
                    }
                    else
                    {
                        _insertStatementHeader = Export_GetInsertStatementHeader(RowsDataExportMode.Insert, rdr);
                    }
                }

                StringBuilder sb = new StringBuilder();

                sb.Append(_insertStatementHeader);
                sb.Append(Export_GetValueString(rdr));

                if (!allPrimaryField)
                {
                    sb.Append(" ON CONFLICT DO UPDATE SET ");
                    Export_GetUpdateString(rdr, sb);
                }

                sb.Append(";");

                manager.Export_WriteLine(sb.ToString());
                manager.textWriter.Flush();
            }

            rdr.Close();
        }
Beispiel #3
0
        internal void Export(List <string> tablesToExport, SQLiteBackup manager)
        {
            if (manager.stopProcess || tablesToExport.Count < 1 ||
                !tablesToExport.Contains(_tableName.Trim().ToLower()))
            {
                return;
            }

            manager.Export_WriteLine(_createIndexSQL);
            manager.textWriter.WriteLine();
        }
        internal void Export(List <string> tablesToExport, SQLiteBackup manager)
        {
            if (manager.stopProcess || tablesToExport.Count < 1 ||
                !tablesToExport.Contains(_tableName.Trim().ToLower()))
            {
                return;
            }

            manager.Export_WriteLine(string.Format("INSERT INTO \"sqlite_sequence\" VALUES('{0}', {1});",
                                                   _tableName, _value.ToString()));
            manager.textWriter.WriteLine();
        }
Beispiel #5
0
        internal void Export(List <string> tablesToExport, SQLiteViewList allViews,
                             SQLiteBackup manager, List <string> exportedViews)
        {
            if (_isProcessed || manager.stopProcess)
            {
                return;
            }

            foreach (var dependantTable in _tableDependancies)
            {
                // skip views that are dependant on skiped tables
                if (!tablesToExport.Contains(dependantTable))
                {
                    return;
                }
            }
            foreach (var dependantView in _viewDependancies)
            {
                allViews[dependantView].Export(tablesToExport, allViews, manager, exportedViews);
            }


            _isProcessed = true;

            if (_createViewSQL.Trim().Length == 0)
            {
                return;
            }

            manager.Export_WriteLine(string.Format("DROP TABLE IF EXISTS `{0}`;", _name));
            manager.Export_WriteLine(string.Format("DROP VIEW IF EXISTS `{0}`;", _name));

            manager.Export_WriteLine(_createViewSQL);

            manager.textWriter.WriteLine();

            exportedViews.Add(_name);
        }
Beispiel #6
0
        internal void Export(List <string> tablesToExport, SQLiteTableList allTables,
                             SQLiteBackup manager)
        {
            if (_isProcessed || manager.stopProcess || !tablesToExport.Contains(_name.Trim().ToLower()))
            {
                return;
            }

            if (manager.ExportInfo.ExportTableStructure)
            {
                if (_dependancies.Count > 0)
                {
                    foreach (var dependantTable in _dependancies)
                    {
                        if (!tablesToExport.Contains(dependantTable))
                        {
                            throw new Exception(string.Format("Table \"{0}\" depends on table \"{1}\" via foreign key. However the latter is not included within exported table list.",
                                                              _name, dependantTable));
                        }
                    }
                    foreach (var dependantTable in _dependancies)
                    {
                        allTables[dependantTable].Export(tablesToExport, allTables, manager);
                    }
                }

                manager._currentTableName        = _name;
                manager._currentTableIndex       = allTables.IndexOf(this);
                manager._totalRowsInCurrentTable = _totalRows;

                manager.Export_WriteComment("");
                manager.Export_WriteComment(string.Format("Definition of {0}", _name));
                manager.Export_WriteComment("");

                manager.textWriter.WriteLine();

                manager.Export_WriteLine(string.Format("DROP TABLE IF EXISTS `{0}`;", _name));

                manager.Export_WriteLine(_createTableSql);

                manager.textWriter.WriteLine();

                manager.textWriter.Flush();
            }

            if (manager.ExportInfo.ExportRows)
            {
                manager.Export_WriteComment("");
                manager.Export_WriteComment(string.Format("Dumping data for table {0}", _name));
                manager.Export_WriteComment("");
                manager.textWriter.WriteLine();

                manager._currentRowIndexInCurrentTable = 0L;

                if (manager.ExportInfo.RowsExportMode == RowsDataExportMode.Insert ||
                    manager.ExportInfo.RowsExportMode == RowsDataExportMode.InsertIgnore ||
                    manager.ExportInfo.RowsExportMode == RowsDataExportMode.Replace)
                {
                    Export_RowsData_Insert_Ignore_Replace(manager);
                }
                else if (manager.ExportInfo.RowsExportMode == RowsDataExportMode.OnDuplicateKeyUpdate)
                {
                    Export_RowsData_OnDuplicateKeyUpdate(manager);
                }
                else if (manager.ExportInfo.RowsExportMode == RowsDataExportMode.Update)
                {
                    Export_RowsData_Update(manager);
                }

                manager.textWriter.WriteLine();
                manager.textWriter.Flush();
            }

            _isProcessed = true;
        }
Beispiel #7
0
        void Export_RowsData_Update(SQLiteBackup manager)
        {
            bool allPrimaryField = true;

            foreach (var col in Columns)
            {
                if (!col.IsPrimaryKey)
                {
                    allPrimaryField = false;
                    break;
                }
            }

            if (allPrimaryField)
            {
                return;
            }

            bool allNonPrimaryField = true;

            foreach (var col in Columns)
            {
                if (col.IsPrimaryKey)
                {
                    allNonPrimaryField = false;
                    break;
                }
            }

            if (allNonPrimaryField)
            {
                return;
            }

            manager.Command.CommandText = string.Format("SELECT * FROM `{0}`;", _name);
            SQLiteDataReader rdr = manager.Command.ExecuteReader();

            while (rdr.Read())
            {
                if (manager.stopProcess)
                {
                    return;
                }

                StringBuilder sb = new StringBuilder();
                sb.Append("UPDATE `");
                sb.Append(_name);
                sb.Append("` SET ");

                Export_GetUpdateString(rdr, sb);

                sb.Append(" WHERE ");

                Export_GetConditionString(rdr, sb);

                sb.Append(";");

                manager.Export_WriteLine(sb.ToString());

                manager.textWriter.Flush();
            }

            rdr.Close();
        }
Beispiel #8
0
        void Export_RowsData_Insert_Ignore_Replace(SQLiteBackup manager)
        {
            manager.Command.CommandText = string.Format("SELECT * FROM `{0}`;", _name);
            SQLiteDataReader rdr = manager.Command.ExecuteReader();

            var sb = new StringBuilder((int)manager.ExportInfo.MaxSqlLength);

            manager._currentRowIndexInCurrentTable = 0;
            _insertStatementHeader = string.Empty;

            while (rdr.Read())
            {
                if (manager.stopProcess)
                {
                    return;
                }

                manager._currentRowIndexInAllTable     += 1;
                manager._currentRowIndexInCurrentTable += 1;

                if (_insertStatementHeader == string.Empty)
                {
                    _insertStatementHeader = Export_GetInsertStatementHeader(
                        manager.ExportInfo.RowsExportMode, rdr);
                }

                string sqlDataRow = Export_GetValueString(rdr);

                if (sb.Length == 0)
                {
                    sb.AppendLine(_insertStatementHeader);
                    sb.Append(sqlDataRow);
                }
                else if ((long)sb.Length + (long)sqlDataRow.Length < manager.ExportInfo.MaxSqlLength)
                {
                    sb.AppendLine(",");
                    sb.Append(sqlDataRow);
                }
                else
                {
                    sb.Append(";");

                    manager.Export_WriteLine(sb.ToString());
                    manager.textWriter.Flush();

                    sb = new StringBuilder((int)manager.ExportInfo.MaxSqlLength);
                    sb.AppendLine(_insertStatementHeader);
                    sb.Append(sqlDataRow);
                }
            }

            rdr.Close();

            if (sb.Length > 0)
            {
                sb.Append(";");
            }

            manager.Export_WriteLine(sb.ToString());
            manager.textWriter.Flush();

            sb = null;
        }