home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / euphoria / database.bas < prev    next >
BASIC Source File  |  1994-03-09  |  4KB  |  155 lines

  1. DECLARE SUB purge ()
  2. '$DYNAMIC
  3.  
  4. DEFINT A-Z
  5.  
  6. CONST BATCH = 200
  7. CONST BENCHTIME = 15
  8.  
  9. TYPE rd
  10.   pname AS STRING * 20
  11.   amount AS DOUBLE
  12.   code AS INTEGER
  13. END TYPE
  14.  
  15. TYPE dbrec
  16.   pname AS STRING * 20
  17.   amount AS DOUBLE
  18. END TYPE
  19.  
  20. DECLARE SUB dump ()
  21. DECLARE SUB xupdate (datastream() AS rd)
  22.  
  23. DIM SHARED database(0) as dbrec
  24. 'backup array needed because REDIM wipes out your data
  25. DIM SHARED database2(0) as dbrec
  26.  
  27. CONST INPUTSIZE = 30
  28.  
  29. REM update commands
  30. CONST NEW = 1      ' add a new account
  31. CONST UPDATE = 2   ' add/substract from their account
  32. CONST DELETE = 3   ' delete someone's account
  33.  
  34. DIM SHARED rawdata(INPUTSIZE) AS rd
  35. DATA "George Bush", 1000, 1
  36. DATA "Bill Clinton", 2000, 1
  37. DATA "Brian Mulroney", 500, 1
  38. DATA "Ross Perot", 10000, 1
  39. DATA "Ross Perot", 0, 3
  40. DATA "George Bush", -30.55, 2
  41. DATA "Madonna", 2500, 1
  42. DATA "Boris Yeltsin", 100, 1
  43. DATA "Michael Jackson", 50, 1
  44. DATA "Peter Mansbridge", 1200, 1
  45. DATA "Bill Clinton", +500, 2
  46. DATA "Rod Stewart", 3000, 1
  47. DATA "Boris Yeltsin", 0, 3
  48. DATA "Sharon Stone", 1500, 1
  49. DATA "Clint Eastwood", 1900, 1
  50. DATA "Madonna", 0, 3
  51. DATA "Sally Jessy Raphael", 750, 1
  52. DATA "Brian Mulroney", -400, 3
  53. DATA "Richard Gere", 299, 1
  54. DATA "Rod Stewart", 0, 3
  55. DATA "Demi Moore", 350, 1
  56. DATA "Bruce Willis", 480, 1
  57. DATA "Sharon Stone", +900.50, 2
  58. DATA "Arsenio Hall", 300, 1
  59. DATA "David Letterman", 450, 1
  60. DATA "Whoopi Goldberg", 1050, 1
  61. DATA "Clint Eastwood", +2500, 2
  62. DATA "Michael Jackson", -50, 2
  63. DATA "Clint Eastwood", 0, 3
  64. DATA "Jack Nicholson", 3000, 1
  65.  
  66. DIM SHARED size
  67. size = 0  'current database size
  68.  
  69. FOR i = 0 TO INPUTSIZE - 1
  70.     READ rawdata(i).pname
  71.     READ rawdata(i).amount
  72.     READ rawdata(i).code
  73. NEXT i
  74.  
  75. PRINT "database benchmark ..."
  76. cycles& = 0
  77. t# = TIMER
  78. WHILE TIMER < t# + BENCHTIME
  79.     FOR b = 1 TO BATCH
  80.         purge
  81.         CALL xupdate(rawdata())
  82.     NEXT b
  83.     cycles& = cycles& + BATCH * INPUTSIZE
  84. WEND
  85. t# = TIMER - t#
  86. PRINT USING "##### transactions per second"; cycles& / t#
  87. dump
  88.  
  89.  
  90. SUB dump
  91. REM used to verify that program works correctly
  92. REM not part of timing loop
  93.     FOR i = 0 TO size - 1
  94.     PRINT database(i).pname, database(i).amount
  95.     NEXT i
  96. END SUB
  97.  
  98. SUB purge
  99. REM empty the database - free all storage
  100.     size = 0
  101.     REDIM database(0)
  102.     REDIM database2(0)
  103. END SUB
  104.  
  105. SUB xupdate (datastream() AS rd)
  106.     FOR i = 0 TO INPUTSIZE - 1
  107.     transactioncode = datastream(i).code
  108.     
  109.     IF transactioncode = NEW THEN
  110.         FOR j = 0 TO size - 1 
  111.             database2(j) = database(j)
  112.         NEXT j
  113.         size = size + 1
  114.         REDIM database(size)
  115.         FOR j = 0 TO size - 2
  116.         database(j) = database2(j)
  117.         NEXT j
  118.         database(size - 1).pname = datastream(i).pname
  119.         database(size - 1).amount = datastream(i).amount
  120.         REDIM database2(size)
  121.  
  122.     ELSE
  123.         REM look up name
  124.         pname$ = datastream(i).pname
  125.         FOR accountno = 0 TO size - 1
  126.         IF pname$ = database(accountno).pname THEN
  127.             EXIT FOR
  128.         END IF
  129.         NEXT accountno
  130.  
  131.         IF transactioncode = UPDATE THEN
  132.             database(accountno).amount = database(accountno).amount + datastream(i).amount
  133.  
  134.         ELSE  'DELETE
  135.             FOR j = 0 TO size - 1 
  136.                 database2(j) = database(j)
  137.             NEXT j
  138.             size = size - 1
  139.             REDIM database(size)
  140.             j = 0
  141.             FOR k = 0 TO accountno - 1
  142.             database(j) = database2(k)
  143.             j = j + 1
  144.             NEXT k
  145.             FOR k = accountno + 1 TO size
  146.             database(j) = database2(k)
  147.             j = j + 1
  148.             NEXT k
  149.             REDIM database2(size)
  150.         END IF
  151.     END IF
  152.     NEXT i
  153. END SUB
  154.  
  155.