SIRXS Software Problem Reports
This listing shows software problem reports and enhancements ordered by the revision number and release date.

### Fixed/implemented in revision 20

Command lines length increased
Command lines can now be up to 510 characters (increased from 254).

Severity: Enhancement

GET VARS and PUT VARS new features
The two commands have been upgraded such that the features mirror each other. Both commands allow:
Use of "TO" to specify variable lists
Use of arrays as local variables
Specification of prefix or suffix for local variables
Use of name (not in quotes) as prefix or suffix

Severity: Enhancement

Changed processing of input on long running programs to keep 'Break' function enabled
If there was a long running SIR program and the user clicked the mouse or pressed any key other than "Break" then the SIR window title bar would say "Not responding" and any output scrolling would disappear for the duration of the program execution.
Note: This means that the program is not waiting as far as windows is concerned (it can process input) and so does not display a windows waiting sysmbol such as an hourglass or spinning circle.

Severity: Enhancement

Text in quotes can be split across command lines.
Text in quotes can be split across input lines. Trailing blanks are ignored but leading blanks on subsequent lines are treated as part of the string.

Severity: Enhancement

Length of labels increased
Maximum length of labels has been standardised to 254 characters. This applies to VALUE LABELS and VARIABLE LABELS.

Severity: Enhancement

New TRACE feature to trace control into/out of PQL subroutines for debugging.
Subroutine tracing displays the subroutine name when it is entered during a PQL execution and displays a message when control is returned to the calling program. Subroutine tracing is always turned off by default and is automatically turned off when the main program finishes execution.
On a main retrieval/program, specifying the TRACE option turns on subroutine tracing immediately for the subsequent execution. NOTRACE is the default and has no effect.This setting is not saved with any saved executable.
On a subroutine command, if TRACE or NOTRACE is not specified, tracing is controlled by the main program setting. If TRACE or NOTRACE is specified, the setting is saved with the subroutine and controls tracing when the subroutine is executed and for any further subrouines called below that subroutine. The main program setting is restored when the subroutine returns control. This enables a subset of subroutines to be traced for debugging purposes.
Note that tracing can also be turned on with an option on the PRINT BACK command.

Severity: Enhancement

New BUFEXIST function
num = BUFEXIST(buffer_name_expression)

Returns the buffer number of the specified buffer name. Returns zero if the buffer name does not exist.

Severity: Enhancement

New BUFLINES function
num = BUFLINES(buffer_name_expression)

Returns the number of lines in the specified buffer. Returns -1 if the buffer name does not exist. A zero return value indicates an existing, empty buffer.

Severity: Enhancement

Enhanced number of variables for functions with lists of variables
There are a number of functions such as CNT which can have lists of variables. The list limit was 128 variables and this has been increased to 512.

Severity: Enhancement

New EXISTSR function
num = EXISTSR (varname)

Returns 1 if any value of varname (real or string) found during a PROCESS REC or PROCESS ROWS loop is not undefined or defined as missing. Returns zero if all values are undefined or defined as missing.

Severity: Enhancement

Enhanced set of functions which include missing/excluded values
There are a number of functions such as CNT which process variables and exclude variables which are undefined or missing/excluded. The set of functions has been increased with versions that only exclude undefined values i.e. missing/excluded values are included. These functions have an "X" appended to the name of the corresponding function and are:
num = CNTRX (varname) Returns the number of values of varname (real or string) found during a PROCESS REC or PROCESS ROWS loop that are not undefined. Returns zero if all values are undefined.
num = CNTX (varname1, varname2, ..... varname512) Counts the number of values in the list that are not undefined. There may be up to 512 values in the list, separated by commas. They may be real or string variables but all must be of the same type.
num = EXISTSRX (varname) Returns 1 if any value of varname (real or string) found during a PROCESS REC or PROCESS ROWS loop is not undefined. Returns zero if all values are undefined.
num = EXISTSX (varname) Returns 1 if value of named variable is not undefined. Returns zero if value undefined.
num = NEXISTS (varname) Returns 1 if value of named variable is undefined. Returns zero if value is not undefined.

Severity: Enhancement

New NUMBRC function
num = NUMBERC (string)

Tests whether a string represents a valid number. The string can be a string constant, variable name or expression and should contain only numerical characters, at most one decimal point and a plus or minus sign or is in E+exponent format. The string may have blanks to start and all characters are processed. The function returns the following codes:
undefined if undefined
-1 if not a valid number string
0 if number is blank
If the string translates correctly to a real*8 number, it is then assigned to more restrictive formats starting with Integer*1. If the most restrictive format tests equal to the real*8 value, then the return value is set to to that.
1 Valid integer that could be stored in an Integer*1 variable
2 Valid integer that could be stored in an Integer*2 variable
4 Valid integer that could be stored in an Integer*4 variable
8 Valid floating point number that could be stored accurately in a REAL*4 variable
16 Valid floating point number that could only be stored in a REAL*8 number

Severity: Enhancement

New DBNUM function
num = DBNUM (database_name)

Returns the number (nth) of a connected database.

Severity: Enhancement

New DBATTR function
str = DBATTR (nth)

Returns the attribute name of the first file of the nth connected database.

Severity: Enhancement

New DBPRE function
str = DBPRE (nth)

Returns the prefix which is the fully qualified directory of the nth connected database.

Severity: Enhancement

Get Master functions did not check parameters properly.
The Master functions request information from master (e.g. name of nth database). If the parameter was negative or greater than nth, this was not properly checked for and reported as an error. Invalid data might be returned or Master might fail.

Severity: Moderate Status:Closed - Fixed

Example:

compute x = GETMDBN(0)


Workaround:
Use functions to get the number and only pass valid parameters > 0 and =< number.
compute x = system(69)
for i = 1,x
.  compute z = GETMDBN(i)
rof

DO REPEAT, INCLUDE and PRINT BACK were not operative within a PQLForm
PQLForms compilation is a two part process. The first part generates PQL and then the PQL is compiled in the normal manner. The text processing environment commands were ignored during the generation of PQL.

Severity: Moderate Status:Closed - Fixed
Workaround:
Cut and paste the required pieces of code physically into the form source.

PQLForms now allows text style fields that displays a multi-line text control and creates/displays a named buffer
The PQLForms FIELD command now allows a TYPE BUFFER n clause. This generates a text control n lines deep. Data is automatically passed between the control and a named buffer which has the same name as the field.
The PQLForms screen painter allows for this new control when a new local variable is defined. Specify the type as "Buffer" from the drop down list.
It is the developer's responsibility to populate the buffer when a record is read and to save the updated text when the record is written - typically using the READ and WRITE clauses on the SCREEN command.

Severity:Enhancement

PQLForms painter incorrectly processed user specified code for specific variables
The PQLForms painter allows users to specify PQL code to operate at particular points in the form. Under certain circumstances, this code was not in the correct place.

Severity: Moderate
Status:Closed - Fixed
Workaround:
Specify the code at a different point in the painter.

PQLForms painter prompt type did not enable EDIT control properly
The PQLForms painter allows users to specify a variable label by entering text. This was not enabled properly.

Severity: Moderate Status:Closed - Fixed
Workaround:
Specify the variable label in the schema.

CHECK ITEM function can be specified for a CHOICE control
A CHOICE control is a pull-down list and the CHECK ITEM function displays the list.

Severity: Enhancement

CLICK is a new gui command that simulates the user clicking on a control.
CLICK simulates the user choosing (CLICKing) the appropriate control. The program then continues as if a new message has been received. i.e no further commands are processed after the CLICK command and control returns to the appropriate message block.
CLICK does not alter the visual appearance of the dialog.

Severity: Enhancement

SET ITEM FONT allows values values in the SIZE parameter
The SET ITEM FONT command now operates by increasing or decreasing the font size n times as specified in the SIZE parameter, rather than having to repeat the command multiple times.

Severity: Enhancement

Double clicking the mouse on the spreadsheet record selection didn't work
Double clicking the mouse on the spreadsheet record is supposed to run the spreadsheet but didn't.

Severity: Minor Status:Closed - Fixed
Workaround:
Use the OK button.

Number of record types allowed was one less than specified in schema
Could not create the last record type of the specified number. e.g. If 30 was the maximum, only 29 could be created.

Severity: Minor Status:Closed - Fixed
Workaround:
Specify a higher maximum.

REDEFINE ARRAY set an error limit of zero
The REDEFINE ARRAY command accidently set an error limit of zero which suppressed subsequent error messages.

Severity: Minor Status:Closed - Fixed
Workaround:
Specify an error limit after this command.

Conflict between PQL compilation and some environment commands such as IFNOTMEMBER
The IFNOTMEMBER and related IFcond SKIP environment commands use internal constants. If these were specified in a set of PQL commands being compiled, errors were introduced.

Severity: Minor Status:Closed - Fixed
Workaround:
Avoid using these commands inside PQL compilations.

Any specified aliases on CIR variables were not unloaded properly and so the reload might fail.

Severity: Severe Status:Closed - Fixed
Workaround:
Avoid using ALIAS for CIR variables.

SQL Preset problem
If a single character had an SQL PRESET value, this was not stored properly.

Severity: Moderate Status:Closed - Fixed
Workaround:
Avoid using single character PRESET in SQL.

SQL Import problem
If the first character in an imported line was blank, this caused import problems.

Severity: Moderate Status:Closed - Fixed
Workaround:
Avoid using SQL import and rebuild tabfiles in other ways.

### Fixed in revision 19

GUI Window gives Not Responding message and does not show updated output when interacting with the window while a PQL program is running
GUI Window gives Not Responding message and does not show updated output when interacting with the window while a PQL program is running

Severity: Minor Status: Closed - Fixed

Example:
Run a PQL program that takes several minutes to execute. While the program is running, click the window title bar a few times.
Workaround:
Do not try to interact with the window while the PQL program is running. If it does go Not Responding then wait for the program to finish

RELOAD created corrupt database if last index block exactly full
RELOAD created corrupt database if last index block exactly full

Severity: Serious Status: Closed - Fixed

Example:

Workaround:
1) Do not completely delete a database until successful unload / reload / verify. 2) If the subsequent verify shows corruptions then restore the old database, apply another update then unload / reload / verify again.

SPSS SAVE FILES with very long strings followed by variables with value labels
SPSS SAVE FILES with very long strings followed by variables with value labels

Severity: Moderate Status: Closed - Fixed

Example:

program
string*261 var1
integer var2
value labels var2 (1) "one"
perform procs
spss save file filename="test261.sav"
end program


Workaround:
Shorten the string or put the long strings at the end of the file.
ERROR LIMIT warning given erroneously
ERROR LIMIT warning given erroneously

Severity: Minor Status: Closed - Fixed

Example:

Workaround:

Temporary filename updated to include process id to avoid possible clashed with multiple instances of SIR/XS
Temporary filename updated to include process id to avoid possible clashed with multiple instances of SIR/XS

Severity: New Feature Status: Closed - Fixed

Example:
Edit a member and note the temporary filename used.
Workaround:

VALIDATE wrong results when referencing a constant
VALIDATE wrong results when referencing a constant

Severity: Moderate Status: Closed - Fixed

a database with a string variable has a VALIDATE using a constant value that should fit but gives a 7 (text truncated). If I use a variable with the same value then it returns 0. This doesn't happen with any string variable - it depends on VAR RANGES of another string variable.
Example:

PROGRAM
STRING TEST_VALUE
TEST_VALUE = '12'
WRITE [VALIDATE(1,"TESTVAR", '12' )]
WRITE [VALIDATE(1,"TESTVAR", TEST_VALUE)]
END PROGRAM

Start program translation
Start program execution
7
0
End program execution


Workaround:
Use a variable rather than a constant.
ODBC truncating column names to 32 characters
ODBC truncating column names to 32 characters

Severity: Moderate Status: Closed - Fixed

ODBC reads of an excel spreadsheet that has column names > 32 characters and these are being truncated in the COLNAME function.
Example:

Workaround:
Use COLVALS for "COLUMN_NAME" from the ODBCCOLS function.

Severity: New Feature Status: Closed - Fixed

Example:

program
integer array x (10)
set x * (1,2,3,4,5,6,7,8,9,10)
redefine array "X" (2,5)
for i = 1,2
for j = 1,5
write (stdout,noeol) x(i,j) ","
end for
write
end for
end program

Workaround:
Unknown stack command when MOVE VARS/PUT VARS referenced too many variables.
Unknown stack command when MOVE VARS/PUT VARS referenced too many variables.

Severity: Moderate Status: Closed - Fixed

Example:

Workaround:

Severity: New Feature Status: Closed - Fixed

Example:

Workaround:

Processing records in reverse through a secondary index stopped after first record
Processing records in reverse through a secondary index stopped after first record

Severity: Moderate Status: Closed - Fixed

Example:

retrieval noautocase
set start end ("AAA","BBB")
process record 1 indexed by STR with (start,end) reverse
write key str1 str2
end record
end retrieval


Workaround:
Issues with multiple PROCESS JOURNAL executions in a FOR LOOP
Issues with multiple PROCESS JOURNAL executions in a FOR LOOP

Severity: Moderate Status: Closed - Fixed

Example:

Workaround:

Master updates with secondary indexes gave problems
Master updates with secondary indexes gave problems

Severity: Serious Status: Closed - Fixed

Example:

Workaround:

File names (attributes) might not match between OPEN and READ when specified as text filenames
File names (attributes) might not match between OPEN and READ when specified as text filenames

Severity: Moderate Status: Closed - Fixed

Example:

open 'data.txt' lrecl=400 read


Workaround:
use OPEN attr DSN="data.txt" LRECL=400 READ

### Fixed in revision 18

PQLForms long strings (>255) truncated on input.
PQLForms long strings (>255) truncated on input.

Severity: Moderate Status: Closed - Fixed

Example:
Define a database string variable with length more than 255 then enter more than 255 characters through PQLForms.
Workaround:

SORT ARRAY BY behaviour for tied values in keys inconsistent.
SORT ARRAY BY behaviour for tied values in keys inconsistent.

Severity: Minor Status: Closed - Fixed

When two arrays are sorted using another array (BY ARRAY) then the sorted arrays should be sequenced the same way regradless of tied values. ALTERNATE keyword allows row then column rather than column,row.
Example:

program
. integer * 1 array SCORE# GAMES# RANK# SORTER# (5)
. string * 32 array NAME$(5) . NAME$(1) = 'Bruss';SCORE#(1) = 31;GAMES#(1) = 54
. NAME$(2) = 'Ben' ;SCORE#(2) = 33;GAMES#(2) = 15 . NAME$(3) = 'Ryan' ;SCORE#(3) = 34;GAMES#(3) = 32
. NAME$(4) = 'John' ;SCORE#(4) = 42;GAMES#(4) = 28 . NAME$(5) = 'Jake' ;SCORE#(5) = 33;GAMES#(5) = 6

. for x = 1,5
.  COMPUTE SORTER#(x) = X
. end for
. sort SORTER# by SCORE#
. for x = 1,5
. compute rank#(sorter#(x)) = x
. end for

. sort NAME$by RANK# . sort GAMES# by RANK# . sort SCORE# by RANK# . for x = 1,5 . write X NAME$(x) 17t SCORE#(x) 21t GAMES#(x)
. end for
end program


Workaround:
EXECUTE DBMS command problem when issued within database processing
EXECUTE DBMS command problem when issued within database processing

Severity: Moderate Status: Closed - Fixed

This can occur in a caseless database, when using EXECUTE DBMS with a subroutine
Example:

RETRIEVAL UPDATE
EXECUTE DBMS 'INCLUDE BUFFER "B"'
write "1"
EXECUTE SUBROUTINE SYSTEM.EMPLOYEE
write "4"
process record 1
write "5"
exit record
end record
END RETRIEVAL


Workaround:
In-use flag and VERIFY interaction updated to be more logical
In-use flag and VERIFY interaction updated to be more logical

Severity: New Feature Status: Closed - Fixed

Example:

Workaround:

REDEFINE ARRAY gave strange results when multiple arrays defined
REDEFINE ARRAY gave strange results when multiple arrays defined

Severity: Moderate Status: Closed - Fixed

Example:

retrieval noautocase
. integer * 1 WINS# LOSSES# YES NO P# ONE# TWO# MATCHES#
. integer * 1 T1W# T2W# T1G1# T1G2# T1G3# T2G1# T2G2# T2G3#
. integer * 2 FOR# AGAINST# T# TEAMS#
. string * 32 ONE$TWO$ T1P1$T1P2$ T2P1$T2P2$
. date DATE_ ('MM/DD/YYYY')
. real * 8 array SORT# (225)
. integer * 2 array SCORE# GAMES# (225)
. string * 32 array TEAM$WINS$ SCORE$(225) . string * 32 array N$ (14)
. string * 32 array TT$(14,14) . integer * 2 array TF# TA# TW# TL# TG# TS# TR# (14,14) . integer * 2 array F# A# W# L# G# S# R# V# (14) . TEAMS# = 16 . redefine array 'TEAM$' (TEAMS#)
end retrieval


Workaround:
SEPCHAR keyword allowed for csv format in batch file processing
SEPCHAR keyword allowed for csv format in batch file processing

Severity: New Feature Status: Closed - Fixed

Example:

SIR FILE DUMP RECTYPE=1 FILENAME="data.csv" CSV SEPCHAR="|"
SIR FILE DUMP RECTYPE=1 FILENAME="data.csv" CSV SEPCHAR=TAB


Workaround:
DESCENDING did not work when sorting arrays
DESCENDING did not work when sorting arrays

Severity: Moderate Status: Closed - Fixed

Example:

Workaround:

WRITE ALL erroneously included a dummy FOR loop control variable
WRITE ALL erroneously included a dummy FOR loop control variable

Severity: Minor Status: Closed - Fixed

Example:

PROGRAM
FOR I = 1,3
WRITE ALL
END FOR
END PROGRAM


Workaround:
Master could crash if data records packed and encrypted when length close to multiple of 32
Master could crash if data records packed and encrypted when length close to multiple of 32

Severity: Moderate Status: Closed - Fixed

Example:

Workaround:

Functions that returned names did not trim trailing blanks consistently.
Functions that returned names did not trim trailing blanks consistently. Also could return zero length rather than undefined.

Severity: Minor Status: Closed - Fixed

Example:

WRITE ['"'+dbname(0)+'"']
"COMPANY                         "


Workaround:
WRITE ['"'+TRIM(dbname(0))+'"']
"COMPANY"

PQLForms problem with CALL VIA on caseless databases
PQLForms problem with CALL VIA on caseless databases

Severity: Moderate Status: Closed - Fixed

Example:

    . SCREEN MENU MAINMENU
NOBUTTON
.   CALL SCREEN REC_2
AT 4,1 WIDTH 13
PROMPT "REC_2"
VIA ("TWO")
.   FBUTTON EXIT


Workaround:
    . SCREEN MENU MAINMENU
NOBUTTON
.   CALL SCREEN REC_2
AT 4,1 WIDTH 13
PROMPT "REC_2"
VIA (1,"TWO")
.   FBUTTON EXIT

Problem with record counts on multiple journal restore
Problem with record counts on multiple journal restore

Severity: Moderate Status: Closed - Fixed

Example:

Workaround:

Problems on journal restore with secondary indexes
Problems on journal restore with secondary indexes

Severity: Moderate Status: Closed - Fixed

Example:

Workaround:

Treatment of padded string key fields made more consistent. NOTRIM keyword on EXPORT/IMPORT
Treatment of padded string key fields made more consistent. NOTRIM keyword on EXPORT/IMPORT

Severity: New Feature Status: Closed - Fixed

Example:
EXPORT FILENAME="TEST.exp" NOTRIM
Workaround:

VALID VALUES allows a TO specification
VALID VALUES allows a TO specification

Severity: New Feature Status: Closed - Fixed

Example:
VALID VALUES X (1 to 50, 98 99)
Workaround:
VALID VALUES X (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,98,99)

WRITE SCHEMA allows new RECTYPES of CIR, STANDARD and ALL.
WRITE SCHEMA allows new RECTYPES of CIR, STANDARD and ALL.

Severity: New Feature Status: Closed - Fixed

Example:
WRITE SCHEMA RECTYPE=CIR
Workaround:

Very long expressions crashed.
Very long expressions crashed.

Severity: Moderate Status: Closed - Fixed

Expressions now explicitly limited to about 820 components. Note evaluating very long expressions is slow and is thus not recommended. Multiple IF statements should be used instead.
Example:

IFTHEN (A EQ 1 OR A EQ 2 OR A EQ 3 ... OR A EQ 999)

ENDIF


Workaround:
SET TEST (0)
IF (A EQ 1) SET TEST (1)
IF (A EQ 2) SET TEST (1)
IF (A EQ 3) SET TEST (1)
...
IF (A EQ 999) SET TEST (1)
IFTHEN (TEST EQ 1)

ENDIF

SHOWMISS function returned wrong values with dates/times
SHOWMISS function returned wrong values with dates/times

Severity: Moderate Status: Closed - Fixed

dates (& times) with system missing as their value, showmiss will write out some constant from elsewhere in the program.
Example:

program showmiss
date x ("mmddyyyy")
write  x "!?"
if (0) write "you will never see this"
end program

Start program translation
Start program execution
you will never see this !?
End program execution


Workaround:
STANDARD SCHEMA not written export file after changing database settings
STANDARD SCHEMA not written export file after changing database settings

Severity: Moderate Status: Closed - Fixed

Example:

Workaround:

Old style FORMS didn't connect to tabfiles properly
Old style FORMS didn't connect to tabfiles properly

Severity: Moderate Status: Closed - Fixed

Example:

Workaround:

$SQLTYPE in ODBC gave error if not connected to a database$SQLTYPE in ODBC gave error if not connected to a database

Severity: Moderate Status: Closed - Fixed

Some ODBC clients (eg MS Query) use select * from $SQLTYPE to get information about variable types. This gives an error if you are not connected to a DATABASE but the information is generic and should not need any database (or tabfile) connected. Example: start sirSQL, don't connect to a database but do connect to a tabfile (or don't connect to anything)  Tabfile TF created on May 16, 2012 at 16:01:57 connected. select * from$SQLTYPE
No databases currently attached. $SQLTYPE Errors in processing FROM clause$SQLTYPE


Workaround:
DATA LIST command can be specified without columns or asterisk
New Feature DATA LIST command can be specified without columns or asterisk

Severity: New Feature Status: Closed - Fixed

Example:

DATA LIST
ID                                             (I2)
NAME                                           (A25)
GENDER                                         (I1)
MARSTAT                                        (I1)
SSN                                            (A11)
BIRTHDAY                                       (DATE'MMIDDIYY')
EDUC                                           (I1)
NDEPENDS                                       (I1)
CURRPOS                                        (I1)
SALARY                                         (I2)
CURRDATE                                       (DATE'MMIDDIYY')


Workaround:
SCHEMA WRITE new keyword NOINDEX stops write of indexes for any record types being written
New Feature SCHEMA WRITE new keyword NOINDEX stops write of indexes for any record types being written

Severity: New Feature Status: Closed - Fixed

Example:
WRITE SCHEMA NOINDEX
Workaround:

SCHEMA WRITE new keyword LOCK will write the LOCK on the schema for all the rectypes being written
New Feature SCHEMA WRITE new keyword LOCK will write the LOCK on the schema for all the rectypes being written

Severity: New Feature Status: Closed - Fixed

Example:
WRITE SCHEMA LOCK
Workaround:

SCHEMA WRITE new keyword NOCOLS will suppress all column references on the schema for all the rectypes being written whether these are currently specified or not
New Feature SCHEMA WRITE new keyword NOCOLS will suppress all column references on the schema for all the rectypes being written whether these are currently specified or not

Severity: New Feature Status: Closed - Fixed

Example:
WRITE SCHEMA NOCOLS
Workaround:

### Fixed in revision 17

Deleting record type then unload/reload gave CIR REC count mismatch errors on Verify
Deleting record type then unload/reload gave CIR REC count mismatch errors on Verify

Severity: Minore Status: Closed - Fixed

Example:

Workaround:
VERIFY FILE / PATCH

### Fixed in revision 16

Interactive READ crashes on unix platforms
210801 Interactive READ crashes on unix platforms

Severity: Minor Status: Closed - Fixed

The example program below will crash SIR when the user clicks OK or Cancel on the interactive READ in PQL.
Example:
program string*10 numb read "Enter a number" numb write numb end program
Workaround:
Use DISPLAY TEXTBOX

 program
string*10 numb
DISPLAY TEXTBOX "Enter a number" RESPONSE len, numb
write numb
end program


Severity: Minor Status: Closed - Fixed

The UNLOAD/PURGE/RELOAD procedure will fail at the DELETE/RENAME stage if someone else has the database connected. The .sr4 file does get deleted and needs to be restored from the UNLOAD step. This is fixed so that it will still fail but leave the database files in tact.
Example:

Workaround:
Reload the procedure file from the generated unload file. Make sure all users are disconnected from the database.

New Options Added To WRITE SCHEMA
210795 New Options Added To WRITE SCHEMA

Severity: New Feature Status: Closed - Feature

NOINDEX not write any indexes for any of the record types being written. LOCK will write the LOCK on the schema for all the rectypes being written. NOCOLS will suppress all column references on the schema for all the rectypes being written whether these are currently specified or not. SCHEMA definition to allow for no column specification in DATA LIST.
Example:
DATA LIST ID (I1) VAR1 (I4) VAR2 (D0) VAR2B (F0)
Workaround:

Generic toolbar bitmap displayed instead of error
210792 Generic toolbar bitmap displayed instead of error

Severity: New Feature Status: Closed - Feature

In a menu program, if you specify a bitmap that is not in the directory then you get Default.bmp instead of the error message.
Example:

Workaround:
Put the required bitmap file in the tbbb directory.

SPREADSHEET in LABELS mode shows blank if there is no label for a particular value
210789 SPREADSHEET in LABELS mode shows blank if there is no label for a particular value

Severity: Minor Status: Closed - Fixed

If a variable has labels for some values and not others (eg 99 "99 or more") then the spreadsheet /labels will only show data for those values with labels. Fixed to show the actual value when no label exists.
Example:

Workaround:

ALL keyword on variable lists will now mean "ALL not previously listed"
210786 ALL keyword on variable lists will now mean "ALL not previously listed"

Severity: New Feature Status: Closed - Feature

The ALL keyword can now be used at the end of a list of variables to mean ALL variables not previously in the list. This way you can specify the order of some of the variables then get the rest in their default ORDER
Example:
GET VARS GENDER MARSTAT ALL spss save file filename='PREDICT\DAILY\OUT\MULTI.SAV' variables=PREDICTN INTERVAL ALL program integer one two three string four five set one two three four five (1,2,3,"4","5") write five all end program 5 1 2 3 4
Workaround:
Specify all the variables in the required order

Clone a record in SIR Spreadsheet converts missing values to undefined.
210783 Clone a record in SIR Spreadsheet converts missing values to undefined.

Severity: Minor Status: Closed - Fixed

When you clone a record in SIR Spreadsheet, you lose user defined missing values (they get set to system missing).
Example:

Workaround:
Use a GET VARS / PUT VARS in a PQL program to duplicate a record.

It is not intuitive to set a field to undefined in PQLForms
210780 It is not intuitive to set a field to undefined in PQLForms

Severity: Minor Status: Closed - Fixed

When a user accidentally enters something in a pqlforms field and that variable does not have missing as a valid value then it is not easy or intuitive to undo the entry. (there is ctrl+u to set the DB value to undefined). Now, after the fix, entering a BLANK into a field that does not have BLANK as a missing value will set the value to undefined. If blank is a valid missing value then it is stored correctly. If the field does not have blank as a valid value because it is required then that would need to be caught elsewhere.
Example:

Workaround:
Press Ctrl+u to set any edit field to undefined.

CASE IS / END CASE IS inside a PROCESS RECORD ... INDEXED BY gives an error
210777 CASE IS / END CASE IS inside a PROCESS RECORD ... INDEXED BY gives an error

Severity: Minor Status: Closed - Fixed

When you process a record using an index you are in a case at execution time so you can get to the CIR and process other records belonging to the current case. The program below will work without the red CASE IS block. With the case is, the compiler gets confused and complains that the process record occup is not inside a case block.
Example:
retrieval process record employee indexed by name from ("M") thru ("T") write name gender case is 1 end case is process record occup write 5x division end record end record end retrieval
Workaround:
Workarounds would be to include another case block or to put CASE into a subprocedure. retrieval process record employee indexed by name from ("M") thru ("T") write name gender get vars id case is 1 end case is case is id process record occup write 5x division end record end case end record end retrieval retrieval process record employee indexed by name from ("M") thru ("T") write name gender execute subprocedure caseis process record occup write 5x division end record end record subprocedure caseis case is 1 end case is end subprocedure end retrieval

New OPEN buttion in File attributes... dialog
210774 New OPEN buttion in File attributes... dialog

Severity: New Feature Status: Closed - Feature

The Open button in file attributes will attempt to "open" the selected file.
Example:

Workaround:
Open the file from the operating system

Microsoft Query hangs on connecting to a SIR ODBC data source.
210771 Microsoft Query hangs on connecting to a SIR ODBC data source.

Severity: Moderate Status: Closed - Fixed

Microsoft Query hangs when trying to display the SIR ODBC database connection dialog.
Example:

Workaround:
Export the data from SIR to CSV and import into Microsoft.

PQLForms: choosing a keyfields value from a choice list does not trigger record retrieval
210768 PQLForms: choosing a keyfields value from a choice list does not trigger record retrieval

Severity: Minor Status: Closed - Fixed

When the last key field on a PQLForm is modified then the record data should be retrieved. This does not happen if the key field is modified by selecting the value from a picklist.
Example:
In COMPANY OCCUP default PQLForm, type in case id 1 and select Laborer from the position drop down list. The record is not retrieved.
Workaround:
Type the value into the text area

Problems with CAT VARS as keys in spreadsheet
210765 Problems with CAT VARS as keys in spreadsheet

Severity: Moderate Status: Closed - Fixed

A caseless with a record type that has a cat var for a key may not show all records in the spreadsheet.
Example:
A caseless with one record type that has a cat var and an integer for keys. There are 9 records: aaa 1 aaa 2 aaa 3 bbb 1 bbb 2 bbb 3 ccc 1 ccc 2 ccc 3 But in the spreadsheet only 5 are visible: aaa 1 aaa 2 aaa 3 bbb 1 ccc 1
Workaround:
Use integer keys instead of cat vars

WRITE button in PQLForms sets focus to the first field
210762 WRITE button in PQLForms sets focus to the first field

Severity: Minor Status: Closed - Fixed

If you have a multipage form and want to save entry partway through then it won't stay on the current field. It returns to the first page. After this fix you can still press the RESET button to go to the first field.
Example:

Workaround:
User the page buttons to return to the page where you pressed Write.

BMDP SAVE FILE now creates TEXT output
210759 BMDP SAVE FILE now creates TEXT output

Severity: Minor Status: Closed - Fixed

In newer versions of BMDP software it is easier to execute a text file than to read a BMDP data file. The text can be modified to run one or more of the BMDP stats procedures.
Example:
RETRIEVAL . PROCESS CASES ALL . PROCESS RECORD EMPLOYEE . GET VARS ID GENDER MARSTAT BIRTHDAY EDUC NDEPENDS . PERFORM PROCS . END PROCESS RECORD . END PROCESS CASES BMDP SAVE FILE FILENAME = "D:\Development\SirXS\alpha\bmdp.dat" VARIABLES = ID GENDER MARSTAT BIRTHDAY EDUC NDEPENDS END RETRIEVAL /CONTROL COLUMN=80. /END /INPUT TITLE='SIR/XS BMDP Proc from database: COMPANY Apr 11, 2012 09:59:37'. VARIABLES=6. FORMAT=FREE. MCHAR='*'. /VARIABLE NAMES= 'ID','GENDER','MARSTAT','BIRTHDAY','EDUC','NDEPENDS'. MAXIMUM= (GENDER)2,(MARSTAT)2,(EDUC)6,(NDEPENDS)20. MINIMUM= (GENDER)1,(MARSTAT)1,(EDUC)1,(NDEPENDS)0. ...
Workaround:
Generate BMDP commands using PQL Write.

PROCESS ALL RECORD TYPES | PROCESS RECORD [expression]
210756 PROCESS ALL RECORD TYPES | PROCESS RECORD [expression]

Severity: New Feature Status: Closed - Feature

New record processing commands PROCESS DATA processes all record types in the case PROCESS DATA [RECTYPE=expression] A new function CURRREC(0) returns the record currently being processed. Note that due to compiler restrictions you cannot directly refer to a record variable while processing a record defined at execution time. Instead you need to use execution time functions such as VARGET / VARPUT to access record variables.
Example:
retrieval process case all process data COMPUTE RECNO = CURRREC(0) COMPUTE N = NVARS(RECNO) WRITE ID RECNO N FOR I = 1,N . COMPUTE VN = VARNAME(RECNO,I) . COMPUTE VVAL = VARGET (VN) . WRITE ' ' VN VVAL ROF end process data end process case end retrieval
Workaround:
generate a PQL retrieval using a pql program to process records at run time.

TO keyword now allowed in LOOKUP, GET VAR varlist
210753 TO keyword now allowed in LOOKUP, GET VAR varlist

Severity: New Feature Status: Closed - Feature

TO keyword now allowed in LOOKUP, GET VAR varlist [GET VARS { ALL| target_varlist (including 'TO' lists)| local_varlist = target_varlist}]
Example:
RETRIEVAL NOAUTOCASE LOOKUP RECORD COMPANY.EMPLOYEE GET VARS NAME TO EDUC USING 10 WRITE NAME TO EDUC END RETRIEVAL
Workaround:
List all variables required

Compilation of SUBROUTINES can hang if there are some GUI command errors
210750 Compilation of SUBROUTINES can hang if there are some GUI command errors

Severity: Minor Status: Closed - Fixed

Compilation of SUBROUTINES may hang if there are some types of compilation errors.
Example:
SUBROUTINE SYSTEM.DELETE NODATABASE REPLACE COMPUTE FRD1__ = 0 . SET ITEM 2,MISS(-1,"VAR1",MISNUM(VAR1)) . SET ITEM 2,MISS(-1,"VAR1",MISNUM(VAR1)) . SET ITEM 2,MISS(-1,"VAR1",MISNUM(VAR1)) END SUBROUTINE
Workaround:
Fix the compilation errors up displayed up to the hang.

SYSTEM GLOBAL Variable substitution can interfere with DO REPEAT substitution
210747 SYSTEM GLOBAL Variable substitution can interfere with DO REPEAT substitution

Severity: Minor Status: Closed - Fixed

If there is a SYSTEM GLOBAL in the line after a DO REPEAT then the last repeat value is overwritten If it is a regular user global then all is ok.
Example:
do repeat NUM$= ONE TWO THREE c <DBNAME> remark 'NUM$' end repeat ONE TWO COMPANY do repeat NUM$= ONE TWO THREE c <DATE> remark 'NUM$' end repeat ONE TWO {09:03:35}
Workaround:
put a line between the do repeat command and the line with the global. do repeat NUM$= ONE TWO THREE c c <DATE> RENAME FAMILY does not move its MEMBERS 210744 RENAME FAMILY does not move its MEMBERS Severity: Moderate Status: Closed - Fixed if you rename a family then it doesn't keep the members. Eg in company, the DATA family has four members but after Example: RENAME FAMILY DATA TEST the TEST family is empty. Workaround: Create a new family and move members or export (PWRITE) family and edit the file changing the FAMILY name - then import (PREAD) UNLOAD/PURGE/RELOAD reloads to the directory given by the PREFIX attribute 210741 UNLOAD/PURGE/RELOAD reloads to the directory given by the PREFIX attribute Severity: Minor Status: Closed - Fixed If you connect to two databases and then make the first one the default, then the PREFIX attribute is set to the path of the last connected. The unload/reload dialog assumed this prefix attribute was for the default database. As this dialog currently gives you the option of either deleting or renaming the database files then the best place to put the new database is where the old one was. Example: Workaround: Only connect one database or change the PREFIX attribute through Settings/File Attributes... ### Fixed in revision 15 OPEN MEMBER APPEND overwrites existing contents 210738 OPEN MEMBER APPEND overwrites existing contents Severity: Minor Status: Closed - Fixed OPENing a member in append mode will overwrite the existing contents. Example: program open mem dsn="EXAMPLES.APPEND" member write write (mem) "hello" close mem end program program open mem dsn="EXAMPLES.APPEND" member append write (mem) "world" close mem end program Workaround: Use FWRITE to copy the member to a file, append to the file and FREAD it back: program execute dbms "FWRITE 'TEMP.TXT' EXAMPLES.HELLO" . OPEN MEM DSN="TEMP.TXT" APPEND IOSTAT=RC . WRITE (MEM) "c this appended added" . CLOSE MEM execute dbms "DELETE MEMBER EXAMPLES.HELLO /NOINFORM /OK" execute dbms "FREAD 'TEMP.TXT' EXAMPLES.HELLO" end program CSV SAVE FILE writes double quotes un escaped in string variables 210735 CSV SAVE FILE writes double quotes un escaped in string variables Severity: Minor Status: Closed - Fixed If a string variable contains a double quote then it is written to a csv save file as is. This will confuse any application trying to read the file Example: PROGRAM SET MESS ('Hello "World"') CSV SAVE FILE FILENAME = "quote.csv" END PROGRAM Workaround: Replace double quotes with double double quotes manually. Saving strings longer than 255 characters to SPSS SAVE FILE produces bad file 210732 Saving strings longer than 255 characters to SPSS SAVE FILE produces bad file Severity: Minor Status: Closed - Fixed Trying to save long strings to spss save file will produce a bad file. Example: PROGRAM STRING*507 STR507 SET STR507 ("") FOR STR = 1,51 COMPUTE VAL = FORMAT(STR) COMPUTE STR507 = STR507+PAD("....+...."," ",10-LEN(VAL),10-LEN(VAL))+VAL END FOR PERFORM PROCS SPSS SAVE FILE FILENAME = "sir507.sav" VARIABLES= STR507 END PROGRAM Workaround: Break long strings into segments of 255 characters or fewer Old SirForms under master fails to retrieve a record on initialise. 210729 Old SirForms under master fails to retrieve a record on initialise. Severity: Minor Status: Closed - Fixed Entering a record key into the keyfields and pressing enter may give an incorrect record not found or record locked error. Example: Workaround: go into the form record screen and do a "next record"* to retrieve the first record in the database then change the keys to the record you want to retrieve. PROCESS JOURNAL FILENAME=expression can cause odd behaviour 210726 PROCESS JOURNAL FILENAME=expression can cause odd behaviour Severity: Minor Status: Closed - Fixed PROCESS JOURNAL FILENAME=expression Can cause the processing to terminate after one iteration Example: PROCESS JOURNAL FILENAME=varname FROM=LEV THRU=LEV Workaround: Calculate the filename before compilation - by putting it in a global. New CSV option on export 210723 New CSV option on export Severity: New Feature Status: Closed - Feature The new CSV clause on EXPORT writes the data section as comma separated values: All strings are in double quotes; Lines do not have a final comma (not sure if this is standard csv); Dates and times are in a standard format (dd-Mmm-YYYY, HH:MM:SS); Categoricals are written as strings; System missing (undefined) is indicated by an asterisk * Numerics blank missing value is written as successive quotes; There is a special hex format used if strings contain special characters line feed, null or double quote. This consists of the letter H followed by the hex string in quotes e.g. ,H"0A0022" Example: EXPORT FILE FILENAME="MyExport.exp" CSV Workaround: New functions convert to and from hex characters 210720 New functions convert to and from hex characters Severity: New Feature Status: Closed - Feature CHARHEX hexstr = CHARHEX(str) Returns a hex representation of the input string. Each character is converted to its ASCII value then that is converted to hexadecimal. HEXCHAR str = HEXCHAR(hexstr) Converts the hexadecimal codes in the input string to their associated ASCII characters. Example: COMPUTE HEX1 = CHARHEX("Hello World") COMPUTE STR = HEXCHAR("48656C6C6F20576F726C64") Workaround: VALUE and VAR LABELS 79 characters long ae truncated to 78 without warning. 210717 VALUE and VAR LABELS 79 characters long ae truncated to 78 without warning. Severity: Minor Status: Closed - Fixed VALUE LABELS and VAR LABELS are limited to 78 characters - but you only get an error if you specify 80 characters or more; if the length is 79 then the labels are truncated without notice. This example, record 2 has 79 character value and var labels: Example: VAR LABEL VAR2 'A 79 character variable label.................................................X' VALUE LABELS VAR2 (1) 'A 79 character value label....................................................X' which become: VALUE LABELS VAR2 (1)'A 79 character value label......................................... VAR LABEL VAR2 'A 79 character variable label......................................... Workaround: String data containing special characters may not export / import properly. 210714 String data containing special characters may not export / import properly. Severity: Minor Status: Closed - Fixed String data containing line feed and null characters (eg PQL encrypt() data) will fail to import. Export now writes these characters in hex character notaion. Example: Workaround: ### Fixed in revision 14 PROCESS JOURNAL program compiled when the database is attached will not find master updates 210711 PROCESS JOURNAL program compiled when the database is attached will not find master updates Severity: Minor Status: Closed - Fixed Example: Workaround: Compile with the database attached TEXT File read with very long record length (> 10000 characters) will fail. 210708 TEXT File read with very long record length (> 10000 characters) will fail. Severity: Minor Status: Closed - Fixed This applies to batch data input where the number of input columns is greater that 10000 Example: Workaround: Make input columns shorter Families containing no text members are not recreated on export/import pwrite/pread. 210705 Families containing no text members are not recreated on export/import pwrite/pread. Severity: Minor Status: Closed - Fixed This can mean if you have a family containing only compiled procedures and you export import then this family will no longer exists. You need to create it before you can recompile these members. Example: Workaround: Some variables don't have their details displayed in the information section of the Select Record dialog. 210702 Some variables don't have their details displayed in the information section of the Select Record dialog. < Severity: Minor Status: Closed - Fixed Non-standard variable names don't have their details displayed in the information section of the Select Record dialog. Example: Workaround: Tabfile strings displayed incorrectly in spreadsheet 210699 Tabfile strings displayed incorrectly in spreadsheet Severity: Minor Status: Closed - Fixed in the spreadsheet you will see that the strings have their third and forth last characters repeated - so 12345 will display 1232345 If the string is shorter than four characters then the spreadsheet will crash. The program below writes out the strings correctly - only viewing them in speadsheet will show the problem. Example: create tabfile string c retrieval noautocase c string*1 S1 string*5 S5 string*6 S6 string*20 S20 c set s1 ('1') set s5 ('12345') set s6 ('123456') set s20 ('12345678901234567890') perform procs save table string.test end retrieval program process rows string.test get vars all write all end rows end program Workaround: PREAD does not report the correct number of members read. 210696 PREAD does not report the correct number of members read. Severity: Minor Status: Closed - Fixed The number of members read was one more than the reported count Example: Workaround: MERGE can crash on final warning message 210693 MERGE can crash on final warning message Severity: Minor Status: Closed - Fixed If SIR MERGE needed to display a warning message on finalising (eg max key size increased) then it would crash. Example: Workaround: VARPUT and null string inconsistancies 210690 VARPUT and null string inconsistancies Severity: Minor Status: Closed - Fixed If there are no missing values on a numeric variable then VARPUT(.."") stores undefined not zero - which is correct. If there are missing values 0 on a numeric variable then VARPUT(.."") stores the missing associated with zero - which is doesn't seem right. If there are missing values BLANK on a numeric variable then VARPUT(.."") stores the missing associated with BLANK- which is correct. If you have both BLANK and 0 as missing values then VARPUT(.."") stores the first of these missing values defined. Example: PROGRAM INTEGER X MISSING VALUES X (0) COMPUTE RC = VARPUT("X","") WRITE X [MISNUM(X)] END PROGRAM Incorrectly puts missing value #1 into X. Workaround: TMP files are not deleted when running through sirweb.cgi 210687 TMP files are not deleted when running through sirweb.cgi Severity: Minor Status: Closed - Fixed Every time a sirweb.cgi is executed it leaves tmp files behind after it ends. Example: Workaround: Delete these files manually VALLABSV and VALLABSP treat dates as string representations of the Julian integer. 210684 VALLABSV and VALLABSP treat dates as string representations of the Julian integer. Severity: Minor Status: Closed - Fixed The function VALLABSV returns a string. With dates and times it returns a string representation of the internal number, not the date or time as specified on the value labels command. Example: program date xx ('dd/mm/yyyy') time yy ('hh:mm:ss') missing values xx ('no date') missing values yy ('no time') value labels xx ('no date') 'missing value 1' ('10/07/2010') 'some date' yy ('no time') 'missing value 1' ('12:00:00') 'noon' write "DATE :" for i = 1,nvallab(-1,"XX") write i ") VALUE = " [VALLABSV(-1,"XX",i)] ", LABEL = " [VALLABSN(-1,"XX",i)] end for write / "TIME :" for i = 1,nvallab(-1,"YY") write i ") VALUE = " [VALLABSV(-1,"YY",i)] ", LABEL = " [VALLABSN(-1,"YY",i)] end for Workaround: Use the DATEMAP function to convert to a date string Secondary index file (sr6) grows quickly when updating through master 210681 Secondary index file (sr6) grows quickly when updating through master Severity: Minor Status: Closed - Fixed After many updates of an indexed variable the index file is much larger than it should be Example: Workaround: Unload / Reload regularly The RECDOC function returns a zero length string when the record label is exactly 32 characters long. 210678 The RECDOC function returns a zero length string when the record label is exactly 32 characters long. Severity: Minor Status: Closed - Fixed The RECDOC function returns a zero length string when the record label is exactly 32 characters long. Example: RECORD SCHEMA 1 REC_1 'thirty one characters of label!' RECORD SCHEMA 2 REC_2 'thirty two characters of label1!' RECORD SCHEMA 3 REC_3 'thirty three characters of label!' program write "rec 1 " [recdoc(1,0)] write "rec 2 " [recdoc(2,0)] write "rec 3 " [recdoc(3,0)] end program rec 1 thirty one characters of label! rec 2 rec 3 thirty three characters of label! Workaround: Add an extra character to the label SirForms does not give an audible warning on incorrect entry 210675 SirForms does not give an audible warning on incorrect entry Severity: Minor Status: Closed - Fixed There is no beep. Example: Workaround: Batch Data Input of blanks data into real variables gives an error message 210672 Batch Data Input of blanks data into real variables gives an error message Severity: Minor Status: Closed - Fixed When the batch data input is run, the REAL variable produces an error when that field is BLANK - this happens if BLANKUND is used and also if BLANK is a valid missing value for the REAL. I think you should only give the error if BLANKUND is not set AND BLANK is not a valid missing value. Example: Workaround: VALLABSC with third arg blank returns label for zero 210669 VALLABSC with third arg blank returns label for zero Severity: Minor Status: Closed - Fixed If the third argument for VALLABSC is a null string (or a blank) then it gets the value label for value 0. Fixed to get label for BLANK. Example: program integer x missing values x (BLANK) value labels x (-1) 'First' (0) 'Second' (1) 'Third' (BLANK) 'blank' write [vallabsc(-1,'X',' ')] end program Second Workaround: Inserting a new common variable corrupts record data 210666 Inserting a new common variable corrupts record data Severity: Moderate Status: Closed - Fixed These new functions return schema format and display width. int = VXLEN( rtnum , varname_str ) Returns the number of character required to print or display a variable. If you have some common variables and you add a new one somewhere in the middle then the record types that reference the common variables will get them confused. If a database has two common variables A and B, and a record type 1 where these variables are in the data list. Then when a new common var C is inserted between A and B, Then the CIR data will have the correct values for A and B. But the record will If you look in the record 1 will have B=undefined. Example: Workaround: New Schema Functions Added - Schema format & display width 210663 New Schema Functions Added - Schema format & display width Severity: New Feature Status: Closed - Feature These new functions return schema format and display width. int = VXLEN( rtnum , varname_str ) Returns the number of character required to print or display a variable. If the record number (rtnum) is negative, the function applies to a summary variable; if rtnum is one more than the maximum record count (i.e. NRECS(0)+1) then this applies to a standard variable. str = VSCHFMT( rtnum , varname_str ) Returns the variable format exactly as specified in the schema DATA LIST. This is different from VFORMAT in that VFORMAT returns an external print format whereas the formats in the DATA LIST are a mix of input formats (eg DATE'MM/DD/YYYY')) and internal formats (eg I2 a two byte integer). A negative rtnum will return a schema like format for a local variable. Example: LEN = VXLEN (1,'SALARY') SCHFMT = VSCHFMT (1,'BIRTHDAY') Workaround: ### Fixed in revision 13 Array elements fail to work as RECODE variables 210660 Array elements fail to work as RECODE variables Severity: Minor Status: Closed - Fixed An array element does not work as the recode variable. The example programs produce compile errors. Example: program integer*1 array A(2) compute A(1)=1 recode STR=A(1) (0='0') (1='1') write STR end program program integer*1 array A(2) compute A(1)=1 recode STR=A(1) (0='0') (1='1') write STR end program Workaround: Create a temporary variable to hold the value of the array element for the recode VARPUT does not work on the first COMMON variable in name order. 210657 VARPUT does not work on the first COMMON variable in name order. Severity: Minor Status: Closed - Fixed The VARPUT function fails when used on the first COMMON variable in name order. In the example schema, the variable CV1 is the first name alphabetically and the VARPUT function will return undefined and not change the value. Example: RECORD SCHEMA 0 CIR DATA LIST ID * (I2) CV2 * (I2) CV1 * (I2) CV3 * (I2) END SCHEMA ... COMPUTE RC= VARPUT('CV1','0') WRITE RC CV1 Workaround: Create a dummy common variable called "A" SPSS SAVE FILE will output junk at the end of variable labels 210654 SPSS SAVE FILE will output junk at the end of variable labels Severity: Minor Status: Closed - Fixed The example program will produce an SPSS file with variable labels like CURRDATE "Current Salary Date ID" Example: RETRIEVAL . PROCESS RECORD EMPLOYEE . GET VARS ID CURRDATE . PERFORM PROCS . END RECORD SPSS SAVE FILE FILENAME = "query_output.sav" END RETRIEVAL Workaround: Use the PORTABLE option Consecutive dates with different maps will be combined in TO lists if they have the same metadata 210651 Consecutive dates with different maps will be combined in TO lists if they have the same metadata Severity: Minor Status: Closed - Fixed Consecutive date or time variables with different date(or time) maps will be incorectly combined in TO lists if they have the same internal ranges, missing values, valid values or value label. When this code is executed it will produce an error. Example: DATA LIST DATE2 * (DATE'EMM/YYYY') DATE3 * (DATE'DD/MM/YYYY') VAR RANGES DATE2 ('01/2000' '12/2010') DATE3 ('01/01/2000' '01/12/2010') writes VAR RANGES DATE2 TO DATE3 ('01/01/2000' '01/12/2010') Workaround: Separate the variables or Change the values so they are a little different or use the NOTO option on EXPORT or WRITE SCHEMA PROMPT VARDOC added to PQLForms FIELD Command 210648 PROMPT VARDOC added to PQLForms FIELD Command Severity: New Feature Status: Closed - Feature VAR LABELS are limited to 78 characters and can be restrictive for PQLForms prompts. A new prompt option VARDOC will use up to 256 characters of VAR DOC information. Example: FIELD Q1 PROMPT VARDOC Workaround: Use a TEXT field to display VARDOCSN(recnum,varname,1) MERGE fails on caseless databases 210645 MERGE fails on caseless databases Severity: Moderate Status: Closed - Fixed Merging two caseless database will produce a corrupt database Example: **09/I** CIR REC count exceeded 0:0(0)/17974/5' messages from a VERIFY FILE Workaround: Combine databases using write schema and batch data input. PQLForms field edit clause may not trigger on leaving field 210642 PQLForms field edit clause may not trigger on leaving field Severity: Minor Status: Closed - Fixed An EDITIN clause on a field may not be triggered if it is the last field on the screen and the tab key is pressed, OR if an ALT_letter is used to "press" and action button. Example: Workaround: Press ENTER on each field. Record types with more than 99 data input lines won't export/import properly 210639 Record types with more than 99 data input lines won't export/import properly Severity: Minor Status: Closed - Fixed A data list with more than 99 input line will not export/import because the line number is not separated from the variable name. Example: DATA LIST (120) KEY 3 - 9 (I4) VAR1 10 - 29 (A20) 120 VAR120 10 - 29 (A20) but this is what it looks like on WRITE SCHEMA DATA LIST (120) KEY 3 - 9 (I4) VAR1 10 - 29 (A20) 120VAR120 10 - 29 (A20) Workaround: Edit the export to include a space on these lines, or fit the input onto fewer than 100 lines. Modifying a variable in STANDARD SCHEMA can effect another variable in that schema 210636 Modifying a variable in STANDARD SCHEMA can effect another variable in that schema Severity: Minor Status: Closed - Fixed Modifying a standard schema can effect references to that variable in later records. In the schema clip below, after VAR1 has its range changed then a write schema will alter the data type of VAR1 to A10. Example: STANDARD SCHEMA DATA LIST VAR1 * (I1) VAR2 * (I1) VAR3 * (A10) VAR RANGES VAR1 (0 1) END SCHEMA c c Modify standard schema c STANDARD SCHEMA /LOCK VAR RANGES VAR1 (0 2) END SCHEMA Workaround: PQL LOOKUP VIA will return the next record if there is no match with the supplied keys 210633 PQL LOOKUP VIA will return the next record if there is no match with the supplied keys Severity: Minor Status: Closed - Fixed If LOOKUP VIA fails to find an exact match then it will return the next records information. In the example data below, LOOKUP via (1,3) should return a negative result but instead it finds the next row (2,1). Example: KEY1 KEY2 DATA 1 1 "key1=1 and key2=1" 1 2 "key1=1 and key2=2" 2 1 "key1=2 and key2=1" 2 2 "key1=2 and key2=2" Workaround: Use a RECORD IS to lookup a record. Master can hang updating some record types with recnum > 127 210630 Master can hang updating some record types with recnum > 127 Severity: Minor Status: Closed - Fixed Master can hang updating a record type with a number > 127. An otherwise identical record numbered less than 128 will not hang. Example: RECORD SCHEMA 128 UPAHM2 KEY FIELDS KEY(A) MAX REC COUNT 123 DATA LIST ID * (I2) KEY * (I1) DATA * (I2) END SCHEMA retrieval update for i = 1,5 case is i record is 128 (i) compute DATA = i write "about to save" end record write "saved" end case end for end retrieval Workaround: SQL (SQLServer) can crash selecting columns from particular record types 210629 SQL (SQLServer) can crash selecting columns from particular record types Severity: Minor Status: Closed - Fixed SQL (and SQLServer during ODBC calls) can crash on selecting columns from some record types. Example: SELECT * FROM ABCDE Workaround: Auto I/O column assignment in schema dialogs can underestimate width 210627 Auto I/O column assignment in schema dialogs can underestimate width Severity: Minor Status: Closed - Fixed If an numeric variable has no ranges or valid values but does have missing values then the auto number option in the I/O columns dialog will assign a width based on the widest missing value. In the example a width of 1 would be assigned even though there are no restrictions on the value. Example: DATA LIST MYVAR * (I4) MISSING VALUES MYVAR (1) Workaround: Manually set the width for such columns. PQLForms data entry mixes up BLANK and undefined 210624 PQLForms data entry mixes up BLANK and undefined Severity: Minor Status: Closed - Fixed PQLForms displays blank and undefined values the same way; as an empty text box. When it comes to writing the record, all the empty fields are stored as blank - which means that some may end up as zero length strings, others as missing BLANK and some as system undefined - depending on the schema definition for each variable. This will happen even if the fields are untouched during data entry. This has been fixed so that the edit boxes will remember if the value is undefined and only change if there has been specific data entry in that field. This is now consistent with old SIRForms. There is also a setting in preferences so that you can specify what is displayed in an edit box if the value is undefined. The default is to display nothing. If you specify a different string then that will be shown (in light red) when the field is not in focus. You can set an edit item to undefined by pressing Ctrl+U when editing that field. Example: Workaround: Undefined and Missing are displayed the same way in spreadsheet 210621 Undefined and Missing are displayed the same way in spreadsheet Severity: Minor Status: Closed - Fixed Undefined (system missing), and valid missing values are all displayed as NULL in the spreadsheet. This has been fixed to show the actual missing value or keyword BLANK in grey or the word "undefined" in light red. You can set a variable to BLANK (if blank is a valid missing value) by entering a string containing zero or more blanks and no other character. You cn set a variable to undefined by pressing the Nullify button or Ctrl+U. Example: Workaround: Use PQL or Forms to see the missing values Large real numbers are displayed in the spreadsheet as *********** 210618 Large real numbers are displayed in the spreadsheet as *********** Severity: Minor Status: Closed - Fixed A double precision real number eg a D2 with a value 12345678 will display ok as 12345678.00 but the value 123456789 will show *********** (11 stars). Example: Workaround: Restructured Unload & Reload can delete records without warning. 210615 Restructured Unload & Reload can delete records without warning. Severity: New Feature Status: Closed - Feature If you make changes to the key variables of a record schema then unload and reload, some records may not be allowed under the new definition and be removed without any warning. The deletion is the correct behaviour as the records are not allowed in the database according to your new definition. A warning message however would be useful. The one-step Unload/Purge/Reload procedure in More Procedures... has been modified so that it will check and write a warning if there are lost records. The code below will also produce a warning. Example: c c Get a before record count c INTEGER ARRAY OLDCOUNT (30) COMPUTE NRECS = NRECS(0)+1 REDEFINE ARRAY "OLDCOUNT" (NRECS) FOR REC= 0,NRECS(0) COMPUTE OLDCOUNT(REC+1)=NUMRECS(REC) END FOR ... execute dbms unload... execute dbms purge... execute dbms reload... ... c c check after record count c FOR REC= 0,NRECS(0) IFTHEN (OLDCOUNT(REC+1) GT NUMRECS(REC)) SET ITEM FONT IDLAB4,0,0,0,0,"#A0A000" SET ITEM IDLAB4,"Reloading Database - Some records were removed" WRITE "*** " [OLDCOUNT(REC+1) - NUMRECS(REC)] [TRIM(RECNAME(REC))] "(" REC ") Records have been removed by the restructu ENDIF END FOR Workaround: Be aware that when tightening constraints on key fields that some existing data may not pass the new criteria. PQLForms local variables do not show value labels 210612 PQLForms local variables do not show value labels Severity: Minor Status: Closed - Fixed Local variables will show value labels in the form painter but not when the form is run. Example: . INTEGER LOCAL . VAR LABEL LOCAL "The Local Variable" . VALUE LABELS LOCAL (1) "One" (2) "Two" (3) "Three" ... . FIELD LOCAL DATA AT 5,25 WIDTH 13 LABELS AT 5,38 WIDTH 13 PROMPT VARDESC AT 5,6 WIDTH 18 TYPE INTEGER Workaround: Use FDISPLAY to show the value label . FDISPLAY TEXT ( vallab(LOCAL) ) AT 35,39 WIDTH 13 FONT (BGROUND=FFFFFF ) BLANKUND keyword on DBI now works on DATE and TIMEs 210609 BLANKUND keyword on DBI now works on DATE and TIMEs Severity: New Feature Status: Closed - Feature The BLANKUND keyword on BDI was introduced to optionally prevent blanks being converted to zero for numeric variables without BLANK as a missing value. If dates/times were blank a a BLANK missing value was not specified then these would produce an error. The BLANKUND keyword now will convert these to undefined without complaining. Example: Add Records INPUT = "file.dat" / BLANKUND / Workaround: Define missing value BLANK if you want to allow BLANKs on data input Create table with "special" name causes problems with drop table 210606 Create table with "special" name causes problems with drop table Severity: Minor Status: Closed - Fixed CREATE TABLE SpecialName will create a tabfile with a name delimited by curly braces {SpecialName} The delete tabfile dialog will include an extra set of braces and fail: Example: DROP TABFILE {{SpecialName}} Command complete but not at end of line. (Error 1) Workaround: Use the DROP TABFILE {SpecialName} command directly Subprocedure name from expression doesn't work using DEBUG 210603 Subprocedure name from expression doesn't work using DEBUG Severity: Minor Status: Closed - Fixed PQL gets confused during execution when debug is on and a subprocedure is executed by way of an expression for the subprocedure name. The example gives Missing subprocedure definition. (Error 730 - SP1) When run. Example: program debug c . execute subprocedure ["SP"+"1"] c subprocedure sp1 | sp1 . write "SP1" end subprocedure c end program Workaround: Remove the debug option or run using the gui debugger. It will also work if the subprocedure is within a subroutine. UNIX: "Cannot Position" errors using Spreadsheet on tabfile 210600 UNIX: "Cannot Position" errors using Spreadsheet on tabfile Severity: Minor Status: Closed - Fixed If you use the spreadsheet on a tabfile then you will get "Cannot Position" errors when you try to edit, print, export etc. Example: Workaround: Using spreadsheet on a Database after using it on a tabfile causes problems 210597 Using spreadsheet on a Database after using it on a tabfile causes problems Severity: Minor Status: Closed - Fixed If you use the spreadsheet on a tabfile, then later in the same session on a database then you will get "Cannot Position" errors when you try to edit, print, export etc. Example: Workaround: Restart SIR after using spreadsheet on tabfile. pql connect tabfile with no filename specified will crash. 210594 pql connect tabfile with no filename specified will crash. Severity: Minor Status: Closed - Fixed The PQL CONNECT TABFILE command will crash if the filename is not specified. Example: program pql connect tabfile 'ANYTAB' end program Workaround: The default filename is meant to be the tabfile name + ".tbf" so if you want the default value then specify this explicitly. program pql connect tabfile 'ANYTAB' filename 'ANYTAB.tbf' end program TABVRANG returns column name not range info 210591 TABVRANG returns column name not range info Severity: Minor Status: Closed - Fixed The TABVRANG function is meant to return column range (missing and valid) information but it is returning the column name instead. Example: Workaround: VALLABSV not returning the correct value for missing strings 210588 VALLABSV not returning the correct value for missing strings Severity: Minor Status: Closed - Fixed The VALLABSV does not return the correct value for missing strings. An effect of this is that a PQL form with a drop down choice for a string variable with missing values and labels, will not work. Example: program string test missing values test ("MISS") value labels test ("MISS") "Is Missing" WRITE [VALLABSV(-1,"TEST",1)] | this writes blank, not MISS WRITE [VALLABSN(-1,"TEST",1)] | This writes "Is Missing" correctly END PROGRAM Workaround: Seven (or more) schema VALUE LABEL commands can confuse compiler 210585 Seven (or more) schema VALUE LABEL commands can confuse compiler Severity: Minor Status: Closed - Fixed If a set of modify schema blocks containing seven or more VALUE LABEL commands, then the compiler can get confused when subsequent commands contain a number (eg STRING LENGTH 32) 4.30 STRING LENGTH 32 String length is invalid - 32 assumed. (Error 70) Example: RECORD SCHEMA 1 EMPLOYEE VALUE LABELS GENDER (1)'Male' VALUE LABELS GENDER (1)'Male' VALUE LABELS GENDER (1)'Male' VALUE LABELS GENDER (1)'Male' VALUE LABELS GENDER (1)'Male' VALUE LABELS GENDER (1)'Male' VALUE LABELS GENDER (1)'Male' END SCHEMA STRING LENGTH 32 Workaround: Reduce the number of VALUE LABEL commands , or don't run anything straight after a set of schema mods. SIRSQLS sends cat vars as strings but length of internal integer 210582 SIRSQLS sends cat vars as strings but length of internal integer Severity: Minor Status: Closed - Fixed If a CAT VAR is sent via SIR SQL server then it is sent as a string. The column info function returns the intenal integer length (1,2 or 4) and so the string is usually trunctated. Example: Workaround: Convert cat vars to string vars or integers with value labels. PATTERN function returns 0 or 1 when argument is missing 210579 PATTERN function returns 0 or 1 when argument is missing Severity: Minor Status: Closed - Fixed The PATTERN function returns 0 or 1 (not undefined as it should) when the first argument is a missing value. In this case the function is looking at some random memory which may or may not include the pattern to be matched. Example: program string x missing values x ("NA") set x ("NA") write [PATTERN(x,"TABLE")] [PATTERN(x,"CHAIR")] end program Workaround: Check if aguments are missing before using PATTERN FILL and COMMA functions crash when args are missing 210576 FILL and COMMA functions crash when args are missing Severity: Minor Status: Closed - Fixed FILL and COMMA functions crash if the string contains a missing value (not undefined). Example: program string x missing values x ("NA") set x ("NA") write [fill(x,".")] [comma(x)] end program Workaround: Check if aguments are missing before using FILL or COMMA Auto I/O columns in schema dialog does not work for standard vars 210573 Auto I/O columns in schema dialog does not work for standard vars Severity: Minor Status: Closed - Fixed Using RECORD SCHEMA , I/O Columns, de-number and auto-number does not work on variables from the standard schema. Example: Workaround: Write the schema and manually change the I/O columns. ### Fixed in revision 12 The MISS function did not work on local string variables 210570 The MISS function did not work on local string variables Severity: Minor Status: Closed - Fixed The MISS function did not work on local string variables. If no database was attached then sir would crash; if a database was connected then the function would return junk. Example: program string STR missing values STR (BLANK,"NONE","ZIP") write [miss(-1,"STR",3)] end program Workaround: DO REPEAT now allows leading zeros in TO list 210567 DO REPEAT now allows leading zeros in TO list Severity: New Feature Status: Closed - Feature DO REPEAT now allows generation of a sequence of numbers with leading zeros. In the past, the TO clause in do repeat only allowed sequences of either numbers (1 TO 10) or sir names with trailing numbers (VAR01 TO VAR10). You can now do leading zeros like this: Example: DO REPEAT X =$001$TO$100\$
Workaround:

LIST STATS restructure summary table is misaligned
210564 LIST STATS restructure summary table is misaligned

Severity: Trivial Status: Closed - Fixed

The restructured records summary at the bottom of list stats does not contain all details and is miss-aligned
Example:

Workaround:

Some schema mods can corrupt CIR
210561 Some schema mods can corrupt CIR

Severity: Moderate Status: Closed - Fixed

A sequence of schema mods (including a CIR mod) without an unload/reload can cause corruptions in the CIR.
Example:

Workaround:

Details button in tabfile dialog can crash if there are no tables
210558 Details button in tabfile dialog can crash if there are no tables

Severity: Minor Status: Closed - Fixed

The "Details" button on the Tabfiles dialog will cause a crash if the selected tabfile has no tables.
Example:
Create a tabfile with NO tables. Click on "Details..." in the bottom left corner of the dialog. Since no table is highlighted, SIR complains and then exits all the way out of SIR.
Workaround:
Create a table on the tabfile.

Various problems with undefined strings in tabfiles
210555 Various problems with undefined strings in tabfiles

Severity: Minor Status: Closed - Fixed

Setting tabfile string variables to undefined does not appear to change the current value, or displays junk in the first character. The example program writes "The Old Value " (padded with blanks) not * (missing)
Example:
PROGRAM TUPDATE integer nmiss string smiss COMPUTE DATA = 'The Old Value' SET DATA (SMISSING) COMPUTE DATA = smiss COMPUTE NUM = 3 ROW IS JUNK.TAB1TAB INDEXED BY CASE ('1') write "Here the value of data is " ['"'+data+'"'] PUT VARS NUM PUT VARS DATA END ROW IS END PROGRAM PROGRAM PROCESS ROWS JUNK.TAB1TAB GET VARS ALL write "But here the value of data is " ['"'+data+'"'] WRITE ALL END ROW END PROGRAM
Workaround:
Set strings to "" rather than undefined.

Severity: New Feature Status: Closed - Feature

New required fields dialog in forms painter (button on the screen properties dialog). This dialog generates code for the WRITE clause to ensure that selected fields are entered.
Example:

Workaround:

PQLFORMS, FAILSCR not allowing re-entry of bad data
210549 PQLFORMS, FAILSCR not allowing re-entry of bad data

Severity: Minor Status: Closed - Fixed

If a PQLForm sets the FAILSCR to non zero then an error message is displayed and the record is not saved. The trouble is that if you are moving away from the record then it will give you the error and move away without saving or giving you the opportunity to fix the problem.
Example:

Workaround:
Use the Save button before attempting to move away from a record.

New Exact time map format
210546 New Exact time map format

Severity: New Feature Status: Closed - Feature

There is now an exact time format. If the time format starts with E then any string input into that variable must match the format exactly (like the E Date format).
Example:
PROGRAM TIME EMAP ("EHH:MM") TIME NOEMAP ("HH:MM") COMPUTE EMAP = "21" COMPUTE NOEMAP = "21" WRITE EMAP NOEMAP COMPUTE EMAP = "21:01" COMPUTE NOEMAP = "21:01" WRITE EMAP NOEMAP END PROGRAM
Workaround:
Test times using string functions to ensure they are the right format

SPSS Portable files do not open in PSPP
210543 SPSS Portable files do not open in PSPP

Severity: Minor Status: Closed - Fixed

SPSS portable files would not open under PSPP (which is meant to read SPSS files). The SPSS specification says the text lines in the portable file are 80 characters long but SIR wrote lines that were 80 characters *or less* and SPSS had no problem with this. PSPP wanted the the lines to be exactly 80 characters (ie padded with blanks). PSPP has fixed this and we also have fixed so we are compatible with old versions.
Example:

Workaround:
Edit the portable file and pad the first three lines with blanks to 80 columns.

Negativley Scaled variables are truncated in SPSS SAVE FILE
210540 Negativley Scaled variables are truncated in SPSS SAVE FILE

Severity: Minor Status: Closed - Fixed

Negatively scaled variables in SPSS save file are written correctly in the data section but are given integer formats with zero decimals in the dictionary section - fixed to specify correct number of decimals.
Example:

Workaround:
Use unscaled integers or real numbers.

Compare Procfiles dialog improved
210537 Compare Procfiles dialog improved

Severity: New Feature Status: Closed - Feature

Compare Procfiles (Program Menu) improved to allow copying from one procfile to other and to produce a differences report.
Example:

Workaround:

VARPOSIT function has changed
210534 VARPOSIT function has changed

Severity: New Feature Status: Closed - Feature

VARPOSIT used to return the internal position in the data record for the start of the variable data. This should be meaningless to the pql programmer. The function now returns the variable's ordinal in the record definition.
Example:
program write [VARPOSIT(1,"GENDER")] end program
Workaround:

REGREP can not return a null string result
210531 REGREP can not return a null string result

Severity: Minor Status: Closed - Fixed

If the result of using the REGREP (replace regular expression) function should be a null string ("") then the function will return the original string instead.
Example:
write [regrep('aaaaa','a+','',1,2)]
Workaround:

VERIFY FILE with RECKEY or RECDATA crashes.
210528 VERIFY FILE with RECKEY or RECDATA crashes.

Severity: Moderate Status: Closed - Fixed

VERIFY FILE using the RECKEY or RECDATA options would crash after processing a few records.
Example:
VERIFY FILE /RECKEY /RECDATA
Workaround:
Avoid using these options

Memory leak in processing records with standard variables
210525 Memory leak in processing records with standard variables

Severity: Moderate Status: Closed - Fixed

Similar leak with processing records containing standard variables.
Example:

Workaround:

Slow memory leak associated with switching databases
210522 Slow memory leak associated with switching databases

Severity: Moderate Status: Closed - Fixed

This was a minor leak but if you switch databases a lot it would become a problem.
Example:

Workaround:

Spreadsheet can crash on searching for a case id
210519 Spreadsheet can crash on searching for a case id

Severity: Moderate Status: Closed - Fixed

If you have a database with a string case is and a case exists but has no records of a particular record type, then if you open that record type in the spreassheet and search for that case, then sir will crash.
Example:

Workaround:
Use PQL to find records and cases.

EVALUATE and SPSS SAVE FILE in the same program gives bad strings
210516 EVALUATE and SPSS SAVE FILE in the same program gives bad strings

Severity: Minor Status: Closed - Fixed

An EVALUATE command in the same program as SPSS SAVE FILE (system) would corrupt string variables in that file. RETRIEVAL
Example:
RETRIEVAL . PROCESS CASES ALL . GET VARS ID . PROCESS RECORD EMPLOYEE . GET VARS NAME GENDER . EVALUATE z = "1+1" . PERFORM PROCS . END PROCESS RECORD . END PROCESS CASES SPSS SAVE FILE FILENAME = "testspss.sav" VARIABLES = ID NAME GENDER END RETRIEVAL
Workaround:
Avoid evaluate or use PORTABLE option on spss