RENAME VARIABLES: Make parentheses optional for single variables.
authorBen Pfaff <blp@cs.stanford.edu>
Fri, 6 Mar 2015 05:27:56 +0000 (21:27 -0800)
committerBen Pfaff <blp@cs.stanford.edu>
Fri, 6 Mar 2015 05:28:05 +0000 (21:28 -0800)
This matches SPSS documented behavior.

Reported by Tom Smekens.

doc/variables.texi
src/language/dictionary/rename-variables.c
tests/language/dictionary/rename-variables.at

index 1db8f034a66fc79c5334addb348e6baed606d92f..00a02be61341bb3047b4bf8431cff278c8508808 100644 (file)
@@ -434,6 +434,8 @@ variable names, separated by an equals sign (@samp{=}), within
 parentheses.  There must be the same number of old and new variable
 names.  Each old variable is renamed to the corresponding new variable
 name.  Multiple parenthesized groups of variables may be specified.
+When the old and new variable names contain only a single variable name,
+the parentheses are optional.
 
 @cmd{RENAME VARIABLES} takes effect immediately.  It does not cause the data
 to be read.
index f7cd9c1a613ad3f7a4ccc1078dea9a37ff034ee7..7c3f8bdf996059397fa798938b6f53ccfe038907 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 1997-9, 2000, 2010, 2011 Free Software Foundation, Inc.
+   Copyright (C) 1997-9, 2000, 2010, 2011, 2015 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -52,32 +52,32 @@ cmd_rename_variables (struct lexer *lexer, struct dataset *ds)
     {
       size_t prev_nv_1 = rename_cnt;
       size_t prev_nv_2 = rename_cnt;
+      int opts = PV_APPEND | PV_NO_DUPLICATE;
 
-      if (!lex_force_match (lexer, T_LPAREN))
+      if (!lex_match (lexer, T_LPAREN))
+        opts |= PV_SINGLE;
+      if (!parse_variables (lexer, dataset_dict (ds),
+                            &rename_vars, &rename_cnt, opts))
         goto lossage;
-      if (!parse_variables (lexer, dataset_dict (ds), &rename_vars, &rename_cnt,
-                           PV_APPEND | PV_NO_DUPLICATE))
-       goto lossage;
       if (!lex_force_match (lexer, T_EQUALS))
         goto lossage;
       if (!parse_DATA_LIST_vars (lexer, dataset_dict (ds),
-                                 &rename_new_names, &prev_nv_1,
-                                 PV_APPEND | PV_NO_DUPLICATE))
-       goto lossage;
+                                 &rename_new_names, &prev_nv_1, opts))
+        goto lossage;
       if (prev_nv_1 != rename_cnt)
-       {
+        {
           size_t i;
 
-         msg (SE, _("Differing number of variables in old name list "
+          msg (SE, _("Differing number of variables in old name list "
                      "(%zu) and in new name list (%zu)."),
-              rename_cnt - prev_nv_2, prev_nv_1 - prev_nv_2);
-         for (i = 0; i < prev_nv_1; i++)
-           free (rename_new_names[i]);
-         free (rename_new_names);
-         rename_new_names = NULL;
-         goto lossage;
-       }
-      if (!lex_force_match (lexer, T_RPAREN))
+               rename_cnt - prev_nv_2, prev_nv_1 - prev_nv_2);
+          for (i = 0; i < prev_nv_1; i++)
+            free (rename_new_names[i]);
+          free (rename_new_names);
+          rename_new_names = NULL;
+          goto lossage;
+        }
+      if (!(opts & PV_SINGLE) && !lex_force_match (lexer, T_RPAREN))
         goto lossage;
     }
   while (lex_token (lexer) != T_ENDCMD);
index d0f7632c54efcdead7b98509cfcd241340b22b96..f528dcb04692ef36c05c774584fc9decd41be0f9 100644 (file)
@@ -2,17 +2,18 @@ AT_BANNER([RENAME VARIABLES])
 
 AT_SETUP([RENAME VARIABLES])
 AT_DATA([rename-variables.sps], [dnl
-DATA LIST LIST /brakeFluid * y * .
+DATA LIST LIST /brakeFluid y auxiliary warp (F2.0).
 BEGIN DATA.
-1 3
-2 3
-3 3
-4 3
+1 3 5 9
+2 3 6 10
+3 3 7 11
+4 3 8 11
 END DATA.
 
 LIST.
 
-RENAME VARIABLES (brakeFluid=applecarts).
+RENAME VARIABLES brakeFluid=applecarts y=bananamobiles.
+RENAME VARIABLES (warp auxiliary=foobar xyzzy).
 
 LIST.
 
@@ -22,22 +23,44 @@ AT_CHECK([pspp -o pspp.csv rename-variables.sps])
 AT_CHECK([cat pspp.csv], [0], [dnl
 Table: Reading free-form data from INLINE.
 Variable,Format
-brakeFluid,F8.0
-y,F8.0
+brakeFluid,F2.0
+y,F2.0
+auxiliary,F2.0
+warp,F2.0
 
 Table: Data List
-brakeFluid,y
-1.00,3.00
-2.00,3.00
-3.00,3.00
-4.00,3.00
+brakeFluid,y,auxiliary,warp
+1,3,5,9
+2,3,6,10
+3,3,7,11
+4,3,8,11
 
 Table: Data List
-applecarts,y
-1.00,3.00
-2.00,3.00
-3.00,3.00
-4.00,3.00
+applecarts,bananamobiles,xyzzy,foobar
+1,3,5,9
+2,3,6,10
+3,3,7,11
+4,3,8,11
 ])
 AT_CHECK([grep '[bB][rR][aA][kK][eE]' rename.sav], [1], [ignore-nolog])
 AT_CLEANUP
+
+AT_SETUP([RENAME VARIABLES -- invalid syntax 1])
+AT_DATA([rename-variables.sps], [dnl
+DATA LIST LIST /brakeFluid y auxiliary warp (F2.0).
+RENAME VARIABLES warp auxiliary=foobar xyzzy.
+])
+AT_CHECK([pspp -o pspp.csv rename-variables.sps], [1], [dnl
+rename-variables.sps:2.23-2.31: error: RENAME VARIABLES: Syntax error at `auxiliary': expecting `='.
+])
+AT_CLEANUP
+
+AT_SETUP([RENAME VARIABLES -- invalid syntax 2])
+AT_DATA([rename-variables.sps], [dnl
+DATA LIST LIST /brakeFluid y auxiliary warp (F2.0).
+RENAME VARIABLES (brakeFluid=applecarts y=bananamobiles).
+])
+AT_CHECK([pspp -o pspp.csv rename-variables.sps], [1], [dnl
+rename-variables.sps:2: error: RENAME VARIABLES: Differing number of variables in old name list (1) and in new name list (2).
+])
+AT_CLEANUP