public function toSql()
    {
        $table = $this->table();
        $values = $this->values();
        $quoteChar = $this->quoteChar();

        if(is_null($table)){
            throw new \Exception("Define table to insert.");
        }

        if (empty($this->values)) {
            throw new \Exception("No values to insert.");
        }

        // usuwam rzeczy zwiazane z przetwarzaniem zapytania
        $this->reset(true);

        // zliczam ilosc kolumn
        $count = count($this->columns);

        // tworze naglowek
        $scolumns = "";
        for ($i=0; $i < $count; $i++) {
            $column = $this->columns[$i];

            $scolumns .= "{$quoteChar}{$column}{$quoteChar}";

            if ($i != $count-1) {
                $scolumns .= ",";
            }
        }

        // values
        $svalues = "";
        $ccount = count($this->columns);
        $vcount = count($this->values);

        for ($i=0; $i < $vcount; $i++) {
            // pobieram wszystkie wartosci
            $values = $this->values[$i];

            // pobieram klucze
            $keys = array_keys($values);

            // zmienna przetrzymuje wartosci dla VALUES w insercie
            $svalues .= "(";

            for ($j=0; $j < $ccount; $j++) {
                // nazwa kolumny
                $column = $this->columns[$j];

                if (!in_array($column, $keys)) {
                    throw new \Exception("Incorrect values to insert.");
                }

                // pobieram wartosc kolumny
                $value = $values[$column];

                $direct = false;
                if (is_int($value)) {
                    $value = (int)$value;
                    $direct = true;
                }

                if (is_float($value)) {
                    $value = (float)$value;
                    $direct = true;
                }

                if (is_null($value)) {
                    $value = "null";
                    $direct = true;
                }

                if ($direct) {
                    $svalues .= "{$value}";
                }else{
                    $uId = \Labi\Database\Utility\Uid::uId();
                    $svalues .= ":$uId";
                    $this->param($uId, $value, true);
                }

                if ($j !== $ccount-1) {
                    $svalues .= ",";
                }
            }

            $svalues .= ")";

            if ($i !== $vcount-1) {
                $svalues .= ",";
            }
        }

        // budowanie insertu
        $sql = "insert into {$quoteChar}{$table}{$quoteChar} ({$scolumns}) VALUES {$svalues}";

        return $sql;
    }