Skip to content

Instantly share code, notes, and snippets.

@shakdwipeea
Created July 5, 2017 12:32
Show Gist options
  • Save shakdwipeea/3e554d600bd9186761b33ac26572bebe to your computer and use it in GitHub Desktop.
Save shakdwipeea/3e554d600bd9186761b33ac26572bebe to your computer and use it in GitHub Desktop.
walk through the fs and get all references of table from a database
(ns flow.core
(:gen-class)
(:require [clojure.string :as str]))
(require '[me.raynes.fs :as fs])
;; (php? "akash.clj")
;;;;;;;;;;;;;;;;;;;;;;;;
;; identify php files ;;
;;;;;;;;;;;;;;;;;;;;;;;;
(defn php? [filename]
(= "php" (second (str/split filename #"\."))))
(defn filetree []
(fs/walk (fn [root dirs files]
{:name files
:root root})
"/home/akash/workspace/somedir"))
(defn php-files []
(filter #(php? (:name %))
(flatten (reduce (fn [acc {:keys [root name]}]
(conj acc (map (fn [filename]
{:name filename
:root root}) name)))
() (filetree)))))
(count (php-files))
;;;;;;;;;;;;;;;;;;;;
;; get all tables ;;
;;;;;;;;;;;;;;;;;;;;
(require '[korma.db :refer [defdb mysql]])
(require '[korma.core :as korma])
(defdb jvxdb (mysql {:db "somedb"
:user "root"
:password ""}))
(defn sql-tables []
(flatten
(map vals
(korma/exec-raw jvxdb ["SHOW TABLES"] :results))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; get tables and file relationship ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defn find-related-tables [filedesc]
(let [{:keys [root name]} filedesc
file (slurp (str root "/" name))]
(remove nil? (map (fn [table]
(when (.contains file table)
{:file (str root "/" name)
:table table})) (sql-tables)))))
(def rel
(flatten (map find-related-tables (php-files))))
(count (group-by :table rel))
(count (sql-tables))
(doseq [det (flatten (map find-related-tables (php-files)))]
(spit "graph" (str det "\n") :append true))
(defn -main
"I don't do a whole lot ... yet."
[& args]
(println (flatten (map find-related-tables (php-files)))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment