Skip to content

Commit 131fb08

Browse files
committed
Merge pull request #13 from fffej/command-line
Command line
2 parents a67b8a6 + b588e3c commit 131fb08

5 files changed

Lines changed: 58 additions & 12 deletions

File tree

README.md

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@ The goal of this package is to generate arbitrary SQL Server databases (in the f
44

55
Contributers more than welcome (especially if you know enough Haskell to help me simplify the code!).
66

7-
# Usage
8-
97
# Build instructions
108

119
## Linux
@@ -40,3 +38,10 @@ Assuming you're already building (if not see the instructions above) then
4038
Should spin up a web server on port 8888. Fire up your web browser and try, for example, http://localhost/database/235235235?size=1 to generate a tiny example database. Play with the size parameter with caution, the whole response is in memory first so big numbers (say > 1000) are probably a bad idea.
4139

4240
Usage should be consistent, so going to the same URL should always generate the same value for testing purposes.
41+
42+
If you'd rather use a command line interface then
43+
44+
cabal build cli
45+
./cli --help
46+
47+
Should produce the documentation. Seed and size are exactly as the webserver.

cli/Main.hs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
{-# LANGUAGE DeriveDataTypeable #-}
2+
module Main where
3+
4+
import System.Console.CmdArgs
5+
6+
import Database.SqlServer.Types.Database
7+
8+
data Arguments = Arguments
9+
{
10+
seed :: Int
11+
, size :: Int
12+
} deriving (Show,Data,Typeable)
13+
14+
msg :: [String]
15+
msg = ["More details on the github repo at " ++
16+
" https://github.com/fffej/sql-server-gen"]
17+
18+
defaultArgs :: Arguments
19+
defaultArgs = Arguments
20+
{
21+
seed = def &= help "Seed for random number generator" &= name "s"
22+
, size = 100 &= help "Size of database (optional)" &= opt (500 :: Int) &= name "n"
23+
} &= summary "SQL Server Schema Generator"
24+
&= help "Generate arbitrary SQL Server databases"
25+
&= details msg
26+
27+
main :: IO ()
28+
main = do
29+
a <- cmdArgs defaultArgs
30+
print $ seededDatabase (seed a) (size a)
31+
return ()

sql-server-gen.cabal

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,15 @@ executable webserver
103103
sql-server-gen,
104104
scotty >= 0.10.1,
105105
aeson >= 0.9.0.1,
106-
QuickCheck >= 2.8.1,
107-
pretty >= 1.1.2,
108106
transformers >= 0.4.2.0
107+
108+
executable cli
109+
ghc-options: -Wall
110+
main-is: Main.hs
111+
hs-source-dirs: cli
112+
default-language: Haskell2010
113+
build-depends: base >=4.8 && <4.9,
114+
sql-server-gen,
115+
transformers >= 0.4.2.0,
116+
cmdargs >= 0.10.13
117+

src/Database/SqlServer/Types/Database.hs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,12 @@ import Database.SqlServer.Types.Procedure
88
import Database.SqlServer.Types.Queue
99

1010
import Test.QuickCheck
11+
import Test.QuickCheck.Gen
12+
import Test.QuickCheck.Random
1113
import Control.Monad
1214
import qualified Data.Set as S
1315

16+
1417
import Text.PrettyPrint
1518

1619
newtype TableDefinitions = TableDefinitions (S.Set TableDefinition)
@@ -111,4 +114,7 @@ dumpExamples m p = do
111114
writeFile p (unlines $ map (render . renderDatabaseDefinition) x)
112115

113116
instance Show DatabaseDefinition where
114-
show = render . renderDatabaseDefinition
117+
show = render . renderDatabaseDefinition
118+
119+
seededDatabase :: Int -> Int -> DatabaseDefinition
120+
seededDatabase seed size = unGen arbitrary (mkQCGen seed) size

web/Main.hs

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,6 @@ module Main where
66
import Web.Scotty
77
import Data.Aeson hiding (json)
88
import GHC.Generics
9-
import Test.QuickCheck
10-
import Test.QuickCheck.Gen
11-
import Test.QuickCheck.Random
12-
import Text.PrettyPrint (render)
13-
149

1510
import Database.SqlServer.Types.Database;
1611

@@ -28,10 +23,10 @@ generateDB seed' size' = DatabaseAsJson
2823
{
2924
seed = seed'
3025
, size = size'
31-
, createStatement = (render . renderDatabaseDefinition) db
26+
, createStatement = show db
3227
}
3328
where
34-
db = unGen (arbitrary :: Gen DatabaseDefinition) (mkQCGen seed') size'
29+
db = seededDatabase seed' size'
3530

3631
main :: IO ()
3732
main = scotty 8888 $ do

0 commit comments

Comments
 (0)