-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfoxrefsearch_index.prg
115 lines (90 loc) · 2.27 KB
/
foxrefsearch_index.prg
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
* Abstract...:
* Search / Replace functionality for an index (currently CDX only)
*
* Changes....:
*
#include "foxref.h"
#include "foxpro.h"
DEFINE CLASS RefSearchIndex AS RefSearch OF FoxRefSearch.prg
Name = "RefSearchIndex"
NoRefresh = .F.
BackupExtensions = ''
* if table is in a database, save the name of it
* so we can close it later
cDBCName = ''
FUNCTION OpenFile(lReadWrite)
LOCAL cTableName
LOCAL oError
m.oError = .NULL.
IF USED(TABLEFIND_ALIAS)
USE IN (TABLEFIND_ALIAS)
ENDIF
m.cTableName = FORCEEXT(THIS.Filename, "DBF")
TRY
IF m.lReadWrite
USE (m.cTableName) ALIAS TABLEFIND_ALIAS IN 0 SHARED AGAIN
ELSE
USE (m.cTableName) ALIAS TABLEFIND_ALIAS IN 0 SHARED AGAIN NOUPDATE
ENDIF
CATCH TO oError
ENDTRY
IF ISNULL(m.oError) AND USED(TABLEFIND_ALIAS)
SELECT TABLEFIND_ALIAS
THIS.cDBCName = JUSTSTEM(CURSORGETPROP("Database"))
IF !EMPTY(THIS.cDBCName)
TRY
SET DATABASE TO (THIS.cDBCName)
CATCH TO oError
THIS.cDBCName = ''
ENDTRY
ENDIF
ENDIF
RETURN m.oError
ENDFUNC
FUNCTION CloseFile()
IF EMPTY(THIS.cDBCName)
IF USED(TABLEFIND_ALIAS)
USE IN (TABLEFIND_ALIAS)
ENDIF
ELSE
TRY
SET DATABASE TO (THIS.cDBCName)
CLOSE DATABASES
CATCH
ENDTRY
THIS.cDBCName = ''
ENDIF
RETURN .T.
ENDFUNC
FUNCTION DoSearch()
LOCAL nSelect
LOCAL i
LOCAL nCnt
LOCAL lSuccess
LOCAL ARRAY aTagList[1]
m.nSelect = SELECT()
m.lSuccess = .T.
* search CDX
m.nCnt = ATAGINFO(m.aTagList, '', TABLEFIND_ALIAS)
FOR m.i = 1 TO m.nCnt
* tag name
IF !THIS.CodeOnly
m.lSuccess = THIS.FindInLine(aTagList[m.i, 1], FINDTYPE_OTHER, DBF_TAGNAME_LOC, '', SEARCHTYPE_EXPR, '', "TAGNAME", .T.)
ENDIF
* index expression
IF m.lSuccess
m.lSuccess = THIS.FindInLine(aTagList[m.i, 3], FINDTYPE_EXPR, aTagList[m.i, 1], DBF_TAGEXPR_LOC, SEARCHTYPE_EXPR, '', "TAGEXPR", .T.)
ENDIF
* index filter
IF m.lSuccess
m.lSuccess = THIS.FindInLine(aTagList[m.i, 4], FINDTYPE_EXPR, aTagList[m.i, 1], DBF_TAGFILTER_LOC, SEARCHTYPE_EXPR, '', "TAGFILTER", .T.)
ENDIF
ENDFOR
SELECT (m.nSelect)
RETURN m.lSuccess
ENDFUNC
FUNCTION DoReplace(cReplaceText, oFoxRefRecord)
* no replacements allowed for an index
RETURN .NULL.
ENDFUNC
ENDDEFINE