Пример #1
0
        public static void Execute()
        {
            NpgsqlConnectionInfo info = new NpgsqlConnectionInfo
            {
                ServerName   = _hostname,
                ServerPort   = _port,
                DatabaseName = _database,
                UserName     = _username
            };

            info.FillStoredPassword(false);
            using (IDbConnection conn = TryLogin(info))
            {
                if (conn == null)
                {
                    Console.Error.WriteLine("ログインできませんでした。終了します。");
                    Environment.Exit(1);
                }
            }
            ExportTable obj = new ExportTable
            {
                DataSet = new NpgsqlDataSet(info)
            };

            if (_exportDir == null)
            {
                _exportDir = Environment.CurrentDirectory;
            }
            Task t = null;

            switch (_mode)
            {
            case ExportMode.Export:
                t = obj.ExportAsync(obj.DataSet, _schemas, _excludeSchemas, _configFileName, _exportDir, _encoding);
                break;

            case ExportMode.GenerateConfig:
                t = obj.ExportConfigAsync(obj.DataSet, _schemas, _excludeSchemas, _configFileName, _ruleFileName, _encoding);
                break;

            case ExportMode.GenerateRule:
                File.WriteAllText(_ruleFileName, Properties.Resources.DBExpRule, _encoding);
                break;
            }
            if (t == null)
            {
                return;
            }
            while (!t.IsCompleted)
            {
                Thread.Sleep(100);
            }
            if (t.IsFaulted)
            {
                Console.Error.WriteLine(t.ToString());
                Console.Error.Flush();
                Environment.Exit(1);
            }
        }
Пример #2
0
        public static void SaveConnectionInfoToRegistry(ConnectionInfo info)
        {
            NpgsqlConnectionInfo obj = info as NpgsqlConnectionInfo;

            Registry.SetValue(0, "Connection", "ServerName", obj.ServerName ?? string.Empty);
            Registry.SetValue(0, "Connection", "ServerPort", obj.ServerPort);
            Registry.SetValue(0, "Connection", "DatabaseName", obj.DatabaseName ?? string.Empty);
            Registry.SetValue(0, "Connection", "UserName", obj.UserName ?? string.Empty);
            Registry.SetValue(0, "Connection", "SearchPath", obj.SearchPath ?? string.Empty);
        }
Пример #3
0
        private void window_Loaded(object sender, RoutedEventArgs e)
        {
            gridLoading.Visibility = Visibility.Collapsed;
            ConnectionInfo info = new NpgsqlConnectionInfo()
            {
                ServerName   = App.Hostname,
                ServerPort   = App.Port,
                DatabaseName = App.Database,
                UserName     = App.Username
            };

            if (App.HasConnectionInfo)
            {
                if (!info.FillStoredPassword(true))
                {
                    if (TryConnect(info))
                    {
                        return;
                    }
                }
            }
            else
            {
                info = NewConnectionInfoFromRegistry();
            }
            NewConnectionWindow win = new NewConnectionWindow();

            win.Owner  = this;
            win.Target = info;
            bool?ret = win.ShowDialog();

            if (!ret.HasValue || !ret.Value)
            {
                return;
            }
            info = win.Target;
            Connect(info);
            App.Connections.Merge(info);
            App.Connections.Save();
            menuItemPsql.IsEnabled   = !string.IsNullOrEmpty(GetExecutableFromPath(menuItemPsql.Tag.ToString()));
            menuItemPgdump.IsEnabled = !string.IsNullOrEmpty(GetExecutableFromPath(menuItemPgdump.Tag.ToString()));
            {
                CommandBinding cb;
                cb = new CommandBinding(DataGridCommands.CopyTable, CopyTableCommand_Executed, CopyTableCommand_CanExecute);
                CommandBindings.Add(cb);
                cb = new CommandBinding(DataGridCommands.CopyTableContent, CopyTableContentCommand_Executed, CopyTableCommand_CanExecute);
                CommandBindings.Add(cb);
                cb = new CommandBinding(DataGridCommands.CopyTableAsInsert, CopyTableAsInsertCommand_Executed, CopyTableCommand_CanExecute);
                CommandBindings.Add(cb);
                cb = new CommandBinding(DataGridCommands.CopyTableAsCopy, CopyTableAsCopyCommand_Executed, CopyTableCommand_CanExecute);
                CommandBindings.Add(cb);
            }
        }
Пример #4
0
        private void menuItemPsql_Click(object sender, RoutedEventArgs e)
        {
            string exe = GetExecutableFromPath((sender as MenuItem).Tag.ToString());

            if (string.IsNullOrEmpty(exe))
            {
                return;
            }
            NpgsqlConnectionInfo info = CurrentDataSet.ConnectionInfo as NpgsqlConnectionInfo;
            string arg = string.Format("-h {0} -p {1} -d {2} -U {3}", info.ServerName, info.ServerPort, info.DatabaseName, info.UserName);

            Process.Start(exe, arg);
        }
Пример #5
0
        public static ConnectionInfo[] GetKnownConnectionInfos()
        {
            string path = GetPgPassConfPath();

            if (!File.Exists(path))
            {
                return(new ConnectionInfo[0]);
            }
            List <ConnectionInfo> list   = new List <ConnectionInfo>();
            FileStream            stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);

            using (StreamReader sr = new StreamReader(stream, Encoding.Default))
            {
                while (!sr.EndOfStream)
                {
                    string s = sr.ReadLine();
                    if (string.IsNullOrEmpty(s))
                    {
                        continue;
                    }
                    string[] prms = ExtractPgPassEntry(s);
                    foreach (string p in prms)
                    {
                        // ワイルドカードを使用しているエントリーは対象外
                        if (p == "*")
                        {
                            continue;
                        }
                    }
                    if (prms.Length < 5)
                    {
                        continue;
                    }
                    NpgsqlConnectionInfo info = new NpgsqlConnectionInfo();
                    try
                    {
                        info.ServerName       = prms[0];
                        info.ServerPort       = int.Parse(prms[1]);
                        info.DatabaseName     = prms[2];
                        info.UserName         = prms[3];
                        info.Password         = prms[4];
                        info.IsPasswordHidden = true;
                        info.Name             = info.GetDefaultName();
                        list.Add(info);
                    }
                    catch { }
                }
            }
            list.Sort(CompareByName);
            return(list.ToArray());
        }
Пример #6
0
        private ConnectionInfo NewConnectionInfoFromRegistry()
        {
            NpgsqlConnectionInfo info = new NpgsqlConnectionInfo()
            {
                ServerName   = App.Registry.GetString("Connection", "ServerName", App.Hostname),
                ServerPort   = App.Registry.GetInt32("Connection", "ServerPort", App.Port),
                DatabaseName = App.Registry.GetString("Connection", "DatabaseName", App.Database),
                UserName     = App.Registry.GetString("Connection", "UserName", App.Username),
                SearchPath   = App.Registry.GetString("Connection", "SearchPath", App.SearchPath),
            };

            info.FillStoredPassword(false);
            info = App.Connections.Find(info) as NpgsqlConnectionInfo;
            return(info);
        }
Пример #7
0
 private static IDbConnection TryLogin(NpgsqlConnectionInfo info)
 {
     for (int i = 0; i < 3; i++)
     {
         try
         {
             IDbConnection conn = info.NewConnection(true);
             return(conn);
         }
         catch
         {
             info.Password = ReadPassword();
         }
     }
     return(null);
 }
Пример #8
0
        private void MenuItemOpenDb_Click(object sender, RoutedEventArgs e)
        {
            MenuItem mi = sender as MenuItem;

            if (mi == null)
            {
                return;
            }
            ConnectionInfo info = mi.Tag as ConnectionInfo;

            if (CurrentDataSet != null)
            {
                string path = Assembly.GetExecutingAssembly().Location;
                NpgsqlConnectionInfo obj = info as NpgsqlConnectionInfo;
                if (obj != null)
                {
                    string args = string.Format("-h {0} -p {1} -d {2} -U {3}", obj.ServerName, obj.ServerPort, obj.DatabaseName, obj.UserName);
                    Process.Start(path, args);
                }
                else
                {
                    Process.Start(path);
                }
                return;
            }
            if (info == null)
            {
                info = NewConnectionInfoFromRegistry();
            }
            NewConnectionWindow win = new NewConnectionWindow();

            win.Owner  = this;
            win.Target = info;
            bool?ret = win.ShowDialog();

            if (!ret.HasValue || !ret.Value)
            {
                return;
            }
            info = win.Target;
            Connect(info);
            App.Connections.Merge(info);
            App.Connections.Save();
        }
Пример #9
0
        public static void Execute()
        {
            NpgsqlConnectionInfo info = new NpgsqlConnectionInfo
            {
                ServerName   = _hostname,
                ServerPort   = _port,
                DatabaseName = _database,
                UserName     = _username
            };

            info.FillStoredPassword(false);
            using (IDbConnection conn = TryLogin(info))
            {
                if (conn == null)
                {
                    Console.Error.WriteLine("ログインできませんでした。終了します。");
                    Environment.Exit(1);
                }
            }
            ExportSchema obj = new ExportSchema
            {
                DataSet = new NpgsqlDataSet(info)
                {
                    NewLineRule = _newLine
                }
            };

            if (_exportDir == null)
            {
                _exportDir = Environment.CurrentDirectory;
            }
            Task t = obj.ExportAsync(obj.DataSet, _schemas, _excludeSchemas, _exportDir, _encoding);

            while (!t.IsCompleted)
            {
                Thread.Sleep(100);
            }
            if (t.IsFaulted)
            {
                Console.Error.WriteLine(t.ToString());
                Console.Error.Flush();
                Environment.Exit(1);
            }
        }
Пример #10
0
        private void OpenDatabase(Database database)
        {
            if (database == null)
            {
                throw new ArgumentNullException("database");
            }
            if (CurrentDataSet == null)
            {
                return;
            }
            NpgsqlConnectionInfo obj = CurrentDataSet.ConnectionInfo as NpgsqlConnectionInfo;

            if (obj == null)
            {
                return;
            }
            string path = Assembly.GetExecutingAssembly().Location;
            string args = string.Format("-h {0} -p {1} -d {2} -U {3}", obj.ServerName, obj.ServerPort, database.Name, obj.UserName);

            Process.Start(path, args);
        }
Пример #11
0
        public override int ContentCompareTo(ConnectionInfo obj)
        {
            NpgsqlConnectionInfo o = obj as NpgsqlConnectionInfo;
            int ret = base.ContentCompareTo(o);

            if (ret != 0)
            {
                return(ret);
            }
            ret = ServerPort - o.ServerPort;
            if (ret != 0)
            {
                return(ret);
            }
            ret = string.Compare(DatabaseName, o.DatabaseName);
            if (ret != 0)
            {
                return(ret);
            }
            return(0);
        }
Пример #12
0
 public NpgsqlDataSet(NpgsqlConnectionInfo info) : base(info)
 {
 }
Пример #13
0
        private string GetCommandLineArgs()
        {
            StringBuilder        buf  = new StringBuilder();
            NpgsqlConnectionInfo info = DataSet.ConnectionInfo as NpgsqlConnectionInfo;

            buf.AppendFormat("-h {0} -p {1} -d {2} -U {3}", info.ServerName, info.ServerPort, info.DatabaseName, info.UserName);
            string s = comboBoxEncoding.SelectedValue.ToString();

            if (!string.IsNullOrEmpty(s))
            {
                buf.Append(" -E ");
                buf.Append(s);
            }
            if (!string.IsNullOrEmpty(_exportFile))
            {
                buf.Append(" -f ");
                buf.Append(GetEscapedFileName(_exportFile));
            }
            if (IsChecked(radioButtonExportSchema))
            {
                buf.Append(" -s");
            }
            else if (IsChecked(radioButtonExportData))
            {
                buf.Append(" -a");
            }
            string fmt = comboBoxFormat.SelectedValue.ToString();

            if (!string.IsNullOrEmpty(fmt))
            {
                buf.Append(" -F");
                buf.Append(fmt);
            }
            if (checkBoxCompress.IsEnabled && IsChecked(checkBoxCompress))
            {
                buf.Append(" -Z ");
                buf.Append(comboBoxCompressLevel.Text);
            }
            if (IsChecked(checkBoxBlobs))
            {
                buf.Append(" -b");
            }
            if (IsChecked(checkBoxClean))
            {
                buf.Append(" -c");
            }
            if (IsChecked(checkBoxCreate))
            {
                buf.Append(" -C");
            }
            if (IsChecked(radioButtonSchema))
            {
                foreach (CheckBox cb in wrapPanelSchemas.Children)
                {
                    if (IsChecked(cb))
                    {
                        buf.Append(" -n ");
                        TextBlock tb = cb.Content as TextBlock;
                        buf.Append(tb.Text);
                    }
                }
            }
            if (IsChecked(radioButtonTable))
            {
                foreach (string tbl in SplitByWhiteSpace(textBoxTables.Text))
                {
                    buf.Append(" -t ");
                    buf.Append(tbl);
                }
            }
            if (IsChecked(radioButtonExcludeTable))
            {
                foreach (string tbl in SplitByWhiteSpace(textBoxExcludeTables.Text))
                {
                    buf.Append(" -T ");
                    buf.Append(tbl);
                }
            }
            if (IsChecked(radioButtonExcludeTableData))
            {
                foreach (string tbl in SplitByWhiteSpace(textBoxExcludeTables.Text))
                {
                    buf.Append(" --exclude-table-data=");
                    buf.Append(tbl);
                }
            }
            if (IsChecked(checkBoxUseJob))
            {
                int nJob;
                if (!int.TryParse(textBoxNumJobs.Text, out nJob))
                {
                    textBoxLog.AppendText("並列ジョブ数が不正です");
                }
                else
                {
                    buf.Append(" -j ");
                    buf.Append(nJob);
                }
            }
            if (IsChecked(checkBoxLockTimeout))
            {
                int timeout;
                if (!int.TryParse(textBoxLockTimeout.Text, out timeout))
                {
                    textBoxLog.AppendText("テーブルがロックされていた場合の待ち時間が不正です");
                }
                else
                {
                    buf.Append(" --lock-wait-timeout=");
                    buf.Append(timeout);
                }
            }
            if (IsChecked(checkBoxExportOid))
            {
                buf.Append(" -o");
            }
            return(buf.ToString());
        }