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
1 change: 1 addition & 0 deletions cmd/go-tpc/tpcc.go
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ func registerTpcc(root *cobra.Command) {
},
}
cmdPrepare.PersistentFlags().BoolVar(&tpccConfig.NoCheck, "no-check", false, "TPCC prepare check, default false")
cmdPrepare.PersistentFlags().BoolVar(&tpccConfig.UseFK, "use-fk", false, "TPCC using foreign key, default false")
cmdPrepare.PersistentFlags().StringVar(&tpccConfig.OutputType, "output-type", "", "Output file type."+
" If empty, then load data to db. Current only support csv")
cmdPrepare.PersistentFlags().StringVar(&tpccConfig.OutputDir, "output-dir", "", "Output directory for generating file if specified")
Expand Down
169 changes: 167 additions & 2 deletions tpcc/ddl.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,15 @@ func (w *ddlManager) createIndexDDL(ctx context.Context, query string, indexName
return nil
}

func (w *ddlManager) createForeignKeyDDL(ctx context.Context, query string, indexName string) error {
s := getTPCCState(ctx)
fmt.Printf("creating foreign key %s\n", indexName)
if _, err := s.Conn.ExecContext(ctx, query); err != nil {
return err
}
return nil
}

func (w *ddlManager) appendPartition(query string, partKeys string) string {
if w.parts <= 1 {
return query
Expand Down Expand Up @@ -307,7 +316,85 @@ CREATE TABLE IF NOT EXISTS item (
}

if w.useFK {
// TODO: Add foreign key constraint
query = `
alter table district add constraint d_warehouse_fkey
foreign key (d_w_id)
references warehouse (w_id)`
if err := w.createIndexDDL(ctx, query, "d_warehouse_fkey"); err != nil {
return err
}

query = `
alter table customer add constraint c_district_fkey
foreign key (c_w_id, c_d_id)
references district (d_w_id, d_id)`
if err := w.createIndexDDL(ctx, query, "c_district_fkey"); err != nil {
return err
}

query = `
alter table history add constraint h_customer_fkey
foreign key (h_c_w_id, h_c_d_id, h_c_id)
references customer (c_w_id, c_d_id, c_id)`
if err := w.createIndexDDL(ctx, query, "h_customer_fkey"); err != nil {
return err
}

query = `
alter table history add constraint h_district_fkey
foreign key (h_w_id, h_d_id)
references district (d_w_id, d_id)`
if err := w.createIndexDDL(ctx, query, "h_district_fkey"); err != nil {
return err
}

query = `
alter table new_order add constraint no_order_fkey
foreign key (no_w_id, no_d_id, no_o_id)
references orders (o_w_id, o_d_id, o_id)`
if err := w.createIndexDDL(ctx, query, "no_order_fkey"); err != nil {
return err
}

query = `
alter table orders add constraint o_customer_fkey
foreign key (o_w_id, o_d_id, o_c_id)
references customer (c_w_id, c_d_id, c_id)`
if err := w.createIndexDDL(ctx, query, "o_customer_fkey"); err != nil {
return err
}

query = `
alter table order_line add constraint ol_order_fkey
foreign key (ol_w_id, ol_d_id, ol_o_id)
references orders (o_w_id, o_d_id, o_id)`
if err := w.createIndexDDL(ctx, query, "ol_order_fkey"); err != nil {
return err
}

query = `
alter table order_line add constraint ol_stock_fkey
foreign key (ol_supply_w_id, ol_i_id)
references stock (s_w_id, s_i_id)`
if err := w.createIndexDDL(ctx, query, "ol_stock_fkey"); err != nil {
return err
}

query = `
alter table stock add constraint s_warehouse_fkey
foreign key (s_w_id)
references warehouse (w_id)`
if err := w.createIndexDDL(ctx, query, "s_warehouse_fkey"); err != nil {
return err
}

query = `
alter table stock add constraint s_item_fkey
foreign key (s_i_id)
references item (i_id)`
if err := w.createIndexDDL(ctx, query, "s_item_fkey"); err != nil {
return err
}
}

if w.parts > 1 {
Expand Down Expand Up @@ -505,7 +592,85 @@ CREATE TABLE IF NOT EXISTS item (
}

if w.useFK {
// TODO: Add foreign key constraint
query = `
alter table district add constraint d_warehouse_fkey
foreign key (d_w_id)
references warehouse (w_id)`
if err := w.createIndexDDL(ctx, query, "d_warehouse_fkey"); err != nil {
return err
}

query = `
alter table customer add constraint c_district_fkey
foreign key (c_w_id, c_d_id)
references district (d_w_id, d_id)`
if err := w.createIndexDDL(ctx, query, "c_district_fkey"); err != nil {
return err
}

query = `
alter table history add constraint h_customer_fkey
foreign key (h_c_w_id, h_c_d_id, h_c_id)
references customer (c_w_id, c_d_id, c_id)`
if err := w.createIndexDDL(ctx, query, "h_customer_fkey"); err != nil {
return err
}

query = `
alter table history add constraint h_district_fkey
foreign key (h_w_id, h_d_id)
references district (d_w_id, d_id)`
if err := w.createIndexDDL(ctx, query, "h_district_fkey"); err != nil {
return err
}

query = `
alter table new_order add constraint no_order_fkey
foreign key (no_w_id, no_d_id, no_o_id)
references orders (o_w_id, o_d_id, o_id)`
if err := w.createIndexDDL(ctx, query, "no_order_fkey"); err != nil {
return err
}

query = `
alter table orders add constraint o_customer_fkey
foreign key (o_w_id, o_d_id, o_c_id)
references customer (c_w_id, c_d_id, c_id)`
if err := w.createIndexDDL(ctx, query, "o_customer_fkey"); err != nil {
return err
}

query = `
alter table order_line add constraint ol_order_fkey
foreign key (ol_w_id, ol_d_id, ol_o_id)
references orders (o_w_id, o_d_id, o_id)`
if err := w.createIndexDDL(ctx, query, "ol_order_fkey"); err != nil {
return err
}

query = `
alter table order_line add constraint ol_stock_fkey
foreign key (ol_supply_w_id, ol_i_id)
references stock (s_w_id, s_i_id)`
if err := w.createIndexDDL(ctx, query, "ol_stock_fkey"); err != nil {
return err
}

query = `
alter table stock add constraint s_warehouse_fkey
foreign key (s_w_id)
references warehouse (w_id)`
if err := w.createIndexDDL(ctx, query, "s_warehouse_fkey"); err != nil {
return err
}

query = `
alter table stock add constraint s_item_fkey
foreign key (s_i_id)
references item (i_id)`
if err := w.createIndexDDL(ctx, query, "s_item_fkey"); err != nil {
return err
}
}

if w.parts > 1 {
Expand Down