Advertisement
Guest User

Untitled

a guest
Dec 29th, 2017
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 1.16 KB | None | 0 0
  1. func GetChainBlocks(docID int, blockID int) ([]Block, error){
  2.     db, err := sql.Open("postgres", "user=roman password=1234512345" +
  3.         " dbname=docnota host=192.168.88.221 sslmode=disable")
  4.     if err != nil{
  5.         return nil, err
  6.     }
  7.  
  8.     query := "WITH RECURSIVE get_all_parents(id, parent_id, level, content, name) AS( " +
  9.     "SELECT block.id, db.parent_block, 0, block.content, block.name " +
  10.     "FROM block JOIN doc_block db ON block.id = db.block_id " +
  11.     "WHERE db.doc_id = $1 AND block.id = $2 " +
  12.     "UNION ALL " +
  13.     "SELECT block.id, db.parent_block, level+1, block.content, block.name " +
  14.     "FROM block JOIN doc_block db ON block.id = db.block_id " +
  15.     "JOIN get_all_parents gap ON gap.parent_id = db.block_id " +
  16.     ") SELECT name, content, parent_id FROM get_all_parents ORDER BY id "
  17.     rows, err := db.Query(query, docID, blockID)
  18.     if err != nil{
  19.         return nil, err
  20.     }
  21.     defer rows.Close()
  22.     blocks := make([]Block, 0)
  23.     for rows.Next(){
  24.         block := new(Block)
  25.         err = rows.Scan(&block.Name, &block.Text, &block.Parent)
  26.         if err != nil{
  27.             return nil, err
  28.         }
  29.         blocks = append(blocks, *block)
  30.     }
  31.     err = rows.Err()
  32.     if err != nil{
  33.         return nil, err
  34.     }
  35.     return blocks, nil
  36. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement