Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@ The goal of this package is to generate arbitrary SQL Server databases (in the f

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

# Usage

# Build instructions

## Linux
Expand Down Expand Up @@ -40,3 +38,10 @@ Assuming you're already building (if not see the instructions above) then
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.

Usage should be consistent, so going to the same URL should always generate the same value for testing purposes.

If you'd rather use a command line interface then

cabal build cli
./cli --help

Should produce the documentation. Seed and size are exactly as the webserver.
31 changes: 31 additions & 0 deletions cli/Main.hs
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
{-# LANGUAGE DeriveDataTypeable #-}
module Main where

import System.Console.CmdArgs

import Database.SqlServer.Types.Database

data Arguments = Arguments
{
seed :: Int
, size :: Int
} deriving (Show,Data,Typeable)

msg :: [String]
msg = ["More details on the github repo at " ++
" https://github.com/fffej/sql-server-gen"]

defaultArgs :: Arguments
defaultArgs = Arguments
{
seed = def &= help "Seed for random number generator" &= name "s"
, size = 100 &= help "Size of database (optional)" &= opt (500 :: Int) &= name "n"
} &= summary "SQL Server Schema Generator"
&= help "Generate arbitrary SQL Server databases"
&= details msg

main :: IO ()
main = do
a <- cmdArgs defaultArgs
print $ seededDatabase (seed a) (size a)
return ()
13 changes: 11 additions & 2 deletions sql-server-gen.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,15 @@ executable webserver
sql-server-gen,
scotty >= 0.10.1,
aeson >= 0.9.0.1,
QuickCheck >= 2.8.1,
pretty >= 1.1.2,
transformers >= 0.4.2.0

executable cli
ghc-options: -Wall
main-is: Main.hs
hs-source-dirs: cli
default-language: Haskell2010
build-depends: base >=4.8 && <4.9,
sql-server-gen,
transformers >= 0.4.2.0,
cmdargs >= 0.10.13

8 changes: 7 additions & 1 deletion src/Database/SqlServer/Types/Database.hs
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,12 @@ import Database.SqlServer.Types.Procedure
import Database.SqlServer.Types.Queue

import Test.QuickCheck
import Test.QuickCheck.Gen
import Test.QuickCheck.Random
import Control.Monad
import qualified Data.Set as S


import Text.PrettyPrint

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

instance Show DatabaseDefinition where
show = render . renderDatabaseDefinition
show = render . renderDatabaseDefinition

seededDatabase :: Int -> Int -> DatabaseDefinition
seededDatabase seed size = unGen arbitrary (mkQCGen seed) size
9 changes: 2 additions & 7 deletions web/Main.hs
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,6 @@ module Main where
import Web.Scotty
import Data.Aeson hiding (json)
import GHC.Generics
import Test.QuickCheck
import Test.QuickCheck.Gen
import Test.QuickCheck.Random
import Text.PrettyPrint (render)


import Database.SqlServer.Types.Database;

Expand All @@ -28,10 +23,10 @@ generateDB seed' size' = DatabaseAsJson
{
seed = seed'
, size = size'
, createStatement = (render . renderDatabaseDefinition) db
, createStatement = show db
}
where
db = unGen (arbitrary :: Gen DatabaseDefinition) (mkQCGen seed') size'
db = seededDatabase seed' size'

main :: IO ()
main = scotty 8888 $ do
Expand Down