using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace FbConsole {
    public partial class FSamples : Form {
        
        bool start=true;

        public FSamples() {
            InitializeComponent();
        }

        private void FSamples_Load(object sender, EventArgs e) {
            editor.Dock = DockStyle.Fill;
            setGUI();
        }

        private void setGUI() {
          start = true;
          cbSelect.Items.Clear();
          cbSelect.Items.Add("SQL-Syntax");
          cbSelect.Items.Add("Select-Anweisungen");
          cbSelect.Items.Add("Select mit Funktionen");
          cbSelect.Items.Add("Subselect");
          cbSelect.Items.Add("Join");
          cbSelect.Items.Add("Group-Select");
          cbSelect.Items.Add("insert");
          cbSelect.Items.Add("update");
          cbSelect.Items.Add("delete");
          start = false;
          cbSelect.SelectedIndex = -1;
        }

        private void cbSelect_SelectedIndexChanged(object sender, EventArgs e) {
          if (!start) {
              switch (cbSelect.SelectedIndex) {
                case 0: RSyntaxClick();
                        break;
                case 1: RSelectClick();
                      break;
                case 2: RFunktionen();
                      break;
                case 3: RSubSelectClick();
                      break;
                case 4: RJoinClick();
                      break;
                case 5: RGroupClick();
                      break;
                case 6: InsertClick();
                      break;
                case 7: UpdateClick();
                      break;
                case 8: DeletepClick();
                      break;
              }
          }
        }  // cbSelect_index_change

        private const String NL = "\r\n";

        private void add(String value) {
            editor.AppendText(value + NL);
        }


        private void RSelectClick() {
          editor.Text="";
          add("SELECT  [DISTINCT|ALL] {*, column [alias], expr …}"+NL+
		        "FROM  table, …"+NL+
                        "[WHERE  condition(s)]"+NL+
                        "[GROUP BY  expr [, expr] …]"+NL+
                        "[HAVING  condition(s)]"+NL+
                        "[ORDER BY  {column, expr, alias} [ASC|DESC]];");

          add( "");
          add( "SELECT * FROM employee;");
          add( "SELECT * FROM employee WHERE emp_no=14;");
          add( "SELECT * FROM employee WHERE emp_no>14;");
          add( "SELECT emp_no, last_name, first_name FROM employee WHERE emp_no IN (1,5,8,11);");
          add( "SELECT TOP 6 * FROM employee  WHERE emp_no>4;");
          add( "SELECT TOP 25 PERCENT * FROM employee WHERE emp_no>4;");
          add( "SELECT * FROM employee WHERE Salary>1980 ");
          add( "SELECT emp_no, last_name, first_name, salary FROM employee WHERE Salary BETWEEN 100000 AND 200000");

          add( "");
          add( "SELECT emp_no, last_name, first_name, salary FROM employee WHERE last_Name LIKE '%on' ");
          add( "SELECT emp_no, last_name, first_name, salary FROM employee WHERE last_Name LIKE 'L%' ");
          add( "SELECT emp_no, last_name, first_name, salary FROM employee WHERE last_Name LIKE '%ee%' ");

          add( "");
          add( "SELECT * FROM Tablename");
          add( "SELECT * FROM Tablename ORDER BY Attribut DESC");
          add( "SELECT * FROM Tablename ORDER BY Attribut ASC");
          add( "SELECT Feld1, Feld2 FROM Tablename WHERE Feld3=22");
        }

        private void RSyntaxClick() {
          editor.Text="";
          add( "SELECT");
          add( "AS");
          add( "DISTINCT");
          add( "FROM");
          add( "WHERE");
          add( "BETWEEN");
          add( "IN");
          add( "Feld LIKE 'A%'");
          add( "");

          add( "ASC");
          add( "DESC");
          add( "GROUP BY");
          add( "HAVING");
          add( "AVG");
          add( "SUM");
          add( "COUNT(*)");
          add( "MAX");
          add( "MIN");
          add( "STDDEV");
          add( "VARIANCE");
          add( "");
          add( "LEFT(Feld,n)");
          add( "RIGHT(Feld,n)");
          add( "LEN");
          add( "MID( Feld, Start, Länge)");
          add( "LTrim(Feld)");
          add( "RTrim(Feld)");
          add( "LCase(Feld)");
          add( "LCase(Feld)");
          add( "String(n, Zeichen)");
          add( "String(n, Zeichen)");
          add( "InStr(Feld, Teilstring)");

          add( "");
          add( "AND");
          add( "OR");
          add( "XOR");
          add( "NOT");
          add( "BAND");
          add( "BOR");
          add( "BXOR");

          add( "");
          add( "DATE()");
          add( "NOW()");
          add( "TIME()");
          add( "Year(Feld)");
          add( "Month(Feld)");
          add( "Day(Feld)");
          add( "Hour(Feld)");
          add( "Minute(Feld)");
          add( "Second(Feld)");
          add( "WeekDay(Feld)");
          add( "DateSerial(Y,M,D)");
          add( "DateDiff(intervall, Datum1, Datum2)");
          add( "DatePart('q', Feld)");
          add( "Datevalue('1.11.2004')");
          add( "");
          add( "Abs");
          add( "Cos");
          add( "Fix");
          add( "Log");
          add( "Round");
          add( "Sin");
          add( "Sqr");
          add( "Tan");
        }


        private void RSubSelectClick() {
          editor.Text="";
          add( "/* Das Beispiel funktioniert nicht mit dieser Datenbank */"+NL+
                           "SELECT ISBN"+NL+
                           "FROM bestellung"+NL+
                           "WHERE KNR = (SELECT KNR"+NL+
                           "               FROM kunde"+NL+
                           "               WHERE Name=\"Müller\""+NL+
                           "		);");
          add("");

          add( "/* Das Beispiel funktioniert nicht mit dieser Datenbank */"+NL+
                           "SELECT ISBN"+NL+
                           "FROM bestellung"+NL+
                           "WHERE KNR IN (   SELECT KNR"+NL+
                           "                 FROM kunde"+NL+
                           "                 WHERE (Name=\"Müller\") OR (Name=\"Schmidt\")"+NL+
                           "             );"
                          );
          add("");
          add("SELECT Last_Name, ( SELECT d.DEPARTMENT" + NL +
                           "                    FROM department d"+NL+
                           "                    WHERE e.dept_no = d.dept_no"+NL+
                           "                  ) Abteilung"+NL+
                           "FROM employee e;"
                         );
        }

        private void RJoinClick()   {
            editor.Text="";
            add("/* Das Beispiel funktioniert nicht mit dieser Datenbank */"+NL+
                             "SELECT table1.column, table2.column"+NL+
                             "FROM  table1"+NL+
                             "[CROSS JOIN table2] |"+NL+
                             "[NATURAL JOIN table2] |"+NL+
                             "[JOIN table2 USING (column_name)] |"+NL+
                             "[JOIN table2"+NL+
                             "  ON(table1.column_name = table2.column_name)] |"+NL+
                             "   [LEFT|RIGHT|FULL OUTER JOIN table2"+NL+
                             "  ON (table1.column_name = table2.column_name)];"
                             );
            add("");


            add( "SELECT Last_Name Nachname, d.DEPARTMENT Abteilung"+NL+
                           "FROM Employee e, department d"+NL+
                           "WHERE e.dept_no = d.dept_no;"
                          );
            add("");
            add("SELECT e.emp_no empno, e.last_name Mitarbeiter, NEW_SALARY Neues_Gehalt" + NL +
                             "FROM EMPLOYEE e"+NL+
                             "    LEFT OUTER JOIN SALARY_HISTORY s"+NL+
                             "     ON e.emp_no = s.emp_no;"
                            );


            add("");
            add("/* Syntaxbeispiel: Das Beispiel funktioniert nicht mit dieser Datenbank */" + NL +
                          "SELECT field1, field2, field3"+NL+
                          "FROM first_table"+NL+
                          "LEFT JOIN second_table"+NL+
                          "    ON first_table.keyfield = second_table.foreign_keyfield;"
                          );
            add("");
            add("SELECT Last_Name, ( SELECT d.DEPARTMENT" + NL +
                           "                    FROM department d"+NL+
                           "                    WHERE e.dept_no = d.dept_no"+NL+
                           "                  ) Abtlg"+NL+
                           "FROM Employee e;"
                         );
        }



        private void RFunktionen() {
          editor.Text="";
          add("SELECT ABS(-1.23) , ABS(-1.23) , ABS(0.0)" + NL +
                             "FROM Employee;");

          add("");
          add("SELECT ACOS(0.0)  , ACOS(3.141592653)AS , ACOS(1.570796326794)  " + NL +
                             "FROM Employee;");

          add("");
          add("SELECT ASIN(0.0)  , ASIN(3.141592653)  , ASIN(1.570796326794)  " + NL +
                             "FROM Employee;");

          add("");
          add("SELECT ATAN(0.0) , ATAN(3.141592653), ATAN(1.570796326794)  " + NL +
                             "FROM Employee;");

          add("");
          add("SELECT ATAN2(0.0) , ATAN2(3.141592653), ATAN2(1.570796326794)  " + NL +
                             "FROM Employee;");
          add("");
          add("SELECT TAN(0.0) , TAN(3.141592653), TAN(1.570796326794)  " + NL +
                             "FROM Employee;");
          add("");
          add("SELECT TANH(0.0) , TANH(3.141592653), TANH(1.570796326794)  " + NL +
                             "FROM Employee;");
          add("");
          add("SELECT SIN(0.0)  , SIN(3.141592653)  , SIN(1.570796326794)  " + NL +
                             "FROM Employee;");
          add("");
          add("SELECT SINH(0.0)  , SINH(3.141592653)  , SINH(1.570796326794)  " + NL +
                             "FROM Employee;");
          add("");
          add("SELECT COS(0.0)  , COS(3.141592653)  , COS(1.570796326794)  " + NL +
                             "FROM Employee;");
          add("");
          add("SELECT COSH(0.0)  , COSH(3.141592653)  , COSH(1.570796326794)  " + NL +
                             "FROM Employee;");
          add("");
          add("SELECT COT(0.0)  , COT(3.141592653)  , COT(1.570796326794)  " + NL +
                             "FROM Employee;");
            add( "SELECT PI()  "+NL+
                             "FROM Employee;");
            add( "SELECT RAND()  "+NL+
                             "FROM Employee;");

            add("");
            add("");
            add("SELECT CEILING(1.45)  , CEILING(3.87)  , CEILING(-3.76)  , CEILING(-3.24)  " + NL +
                             "FROM Employee;");
            add("");
            add("SELECT FLOOR(1.45)  , FLOOR(3.87)  , FLOOR(-3.76)  , FLOOR(-3.24)  " + NL +
                             "FROM Employee;");
            add( "SELECT DIV(11,3) "+NL+
                             "FROM Employee;");
            add("");
            add("SELECT SIGN(-3.45)  , SIGN(0.0),  SIGN(+3.45) " + NL +
                             "FROM Employee;");

            add("");
            add("SELECT LOG(100)  , LOG(10) , LOG(2)  " + NL +
                             "FROM Employee;");
            add("");
            add("SELECT LN(100)  , LN(10) , LN(2.728)  " + NL +
                             "FROM Employee;");

            add("");
            add("SELECT SQRT(16)  , SQRT(2) , SQRT(144)" + NL +
                             "FROM Employee;");

        }


        private void RGroupClick() {
          editor.Text="";
            add( "SELECT MAX(Gew_ID) Maximale_Gew_ID"+NL+
                             "FROM Gewaesser;");

            add("");
            add("SELECT LEFT(OWKNR,3)  OWK, COUNT(Gew_ID)  Anzahl" + NL +
                             "FROM Gewaesser"+NL+
                             "GROUP BY LEFT(OWKNR,3)  "+NL+
                             "ORDER BY LEFT(OWKNR,3)  "+NL+

                             ";");

            add("");
            add("SELECT LEFT(OWKNR,3)  OWK, SUM(Gew_ID)  Summe" + NL +
                             "FROM Gewaesser"+NL+
                             "GROUP BY LEFT(OWKNR,3)  "+NL+
                             "ORDER BY LEFT(OWKNR,3)  "+NL+

                             ";");

            add("");
            add("SELECT STDEV(salary)  STDEV_Salary" + NL +
                             "FROM Employee"+NL+
                             ";");
            add("");
            add("SELECT STDEVP(salary)  STDEVP_Salary" + NL +
                             "FROM Employee"+NL+
                             ";");

            add("");
            add("SELECT VAR(salary)  VAR_Salary" + NL +
                             "FROM Employee"+NL+
                             ";");
            add("");
            add("SELECT VARP(salary)  VARP_Salary" + NL +
                             "FROM Employee"+NL+
                             ";");
          
        }

      private void InsertClick() {
            editor.Text = "";
            add("INSERT INTO kunde(name, kundennr)" + NL +
                "VALUES (\"Müller\", 12345);");
            add("");
        }
      private void UpdateClick() {
          editor.Text = "";
          add("UPDATE  kunde" + NL +
              "SET name=\"Meier\""+ NL +
              "WHERE mnr=12345;");

          add("");
      }
      private void DeletepClick() {
          editor.Text = "";
          add("DELETE FROM kunde" + NL +
              "WHERE mnr=12345;");

          add("");
      }

    }
}
