On Wed, Feb 25, 2015 at 1:08 PM, Cecil Westerhof <cldwester...@gmail.com>
wrote:

>
>
> 2015-02-25 18:14 GMT+01:00 Andy Fingerhut <andy.finger...@gmail.com>:
>
>> doseq does not have anything precisely like C/Java/Perl/etc.'s 'break' or
>> 'continue'.  The closest thing might be the :while keyword.  You can see
>> some one example of its use near the end of the examples on this page:
>> http://clojuredocs.org/clojure.core/doseq
>>
>> The best way I know to get such behavior is to use Clojure's loop, where
>> if/when/whatever-conditional-statements-you-wish can used to control
>> explicitly to do another loop iteration using recur, or not.
>>
>
> ​I made the following with loop:
>     (defn do-show-table
>       [table]
>       (loop [all-tables (show-tables db-spec)]
>         (let [this-table (get (first all-tables) :table_name)]
>           (if (= all-tables ())
>               (printf "Table not found: %s\n" table)
>             (if (= (lower-case table) (lower-case this-table))
>                 (let [format "%-20s %-30s %-5s %-5s %-20s\n"]
>                   (printf "Table %s:\n" table)
>                   (printf format "Field" "Type" "Null?" "Key" "Default")
>                   (doseq [{:keys [field type null key default]}
>                          (jdbc/query db-spec [(str "SHOW COLUMNS FROM "
> table)])]
>

Please don't get into the habit of doing db queries like this, you're one
"Little Bobby Tables" away from an sql injection. In this case you should
do (jdbc/query db-spec ["SHOW COLUMNS FROM ?" table]).

I think you would be well-served by a general clojure principle here of
trying to get the data you're are dealing within into "values" as quickly
as possible, and then working with those.

Rather than inter-mixing your querying and display as you're doing here, I
would design this as a query to fill some maps describing your tables, and
then use clojure.pprint/print-table to print out the resulting map when
desired.

--Aaron





>                          (printf format field type null key default))
>                   (println))
>               (recur (rest all-tables)))))))
>
> It solves both problems.
>
>
> On Wed, Feb 25, 2015 at 8:59 AM, Cecil Westerhof <cldwester...@gmail.com>
>> wrote:
>>
>>> At the moment I have the following function:
>>>     (defn do-show-table
>>>       [table]
>>>       (doseq [{:keys [table_name]} (show-tables db-spec)]
>>>              (when (= (lower-case table) (lower-case table_name))
>>>                (let [format "%-20s %-30s %-5s %-5s %-20s\n"]
>>>                  (printf format "Field" "Type" "Null?" "Key" "Default")
>>>                  (doseq [{:keys [field type null key default]}
>>>                           (jdbc/query db-spec [(str "SHOW COLUMNS FROM "
>>> table)])]
>>>                         (printf format field type null key default))))))
>>>
>>> In this case it is not very important, because the outer sequence will
>>> not be very big. But I would like to leave the doseq at the moment that the
>>> when is executed. It will be done 0 or 1 times, so after it is done, there
>>> is no use in continuing the sequence walk.
>>>
>>> The second part is that I would like to do an action if it is done 0
>>> times after the doseq. Is this possible?
>>>
>>
> --
> Cecil Westerhof
>
> --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with
> your first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en
> ---
> You received this message because you are subscribed to the Google Groups
> "Clojure" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to