extern char *whoami, *strsave();
+extern int ingres_errno, sms_errcode;
/* Specialized Access Routines */
/* check new login name */
## repeat retrieve (flag = any(u.#login where u.#login = @login))
- if (flag)
- return(SMS_IN_USE);
+ if (ingres_errno) return(sms_errcode);
+ if (flag) return(SMS_IN_USE);
## repeat retrieve (flag = any(l.#name where l.#name = @login))
- if (flag)
- return(SMS_IN_USE);
+ if (ingres_errno) return(sms_errcode);
+ if (flag) return(SMS_IN_USE);
## repeat retrieve (flag = any(filesys.#label where filesys.#label = @login))
- if (flag)
- return(SMS_IN_USE);
+ if (ingres_errno) return(sms_errcode);
+ if (flag) return(SMS_IN_USE);
com_err(whoami, 0, "new login name OK");
/* choose place for pobox, put in mid */
/* look for the record */
## range of rvar is table
## retrieve (rowcount = count(rvar.name where qual))
+ if (ingres_errno) return(sms_errcode);
if (rowcount == 0) return(SMS_NO_MATCH);
if (rowcount > 1) return(SMS_NOT_UNIQUE);
return(SMS_EXISTS);
status = SMS_EXISTS;
break;
+ case V_LOCK:
+ status = lock_table(vo);
+ break;
}
if (status != SMS_EXISTS) return(status);
idfield = vo->idfield;
if (!strcmp(namefield, "uid")) {
## retrieve (id = table.idfield) where table.namefield = int4(name)
+ if (ingres_errno) return(sms_errcode);
## inquire_equel (rowcount = "rowcount")
} else {
## retrieve (id = table.idfield) where table.namefield = name
+ if (ingres_errno) return(sms_errcode);
## inquire_equel (rowcount = "rowcount")
}
if (rowcount != 1) return(vo->error);
}
## retrieve (rowcount = countu(table.namefield
## where table.namefield = name))
+ if (ingres_errno) return(sms_errcode);
return ((rowcount == 1) ? SMS_EXISTS : vo->error);
##}
if (!strcmp(argv[vo->index], argv[vo->index - 1]))
return(SMS_EXISTS);
## retrieve (id = any(table.namefield where table.namefield = name))
+ if (ingres_errno) return(sms_errcode);
if (id)
return(vo->error);
else
return(SMS_EXISTS);
}
## retrieve (id = table.idfield) where table.namefield = name
+ if (ingres_errno) return(sms_errcode);
if (id == -1 || id == *(int *)argv[vo->index - 1])
return(SMS_EXISTS);
else
## repeat retrieve (exists = any(a.trans where a.name = @typename and
## a.type = "TYPE" and
## a.trans = @value))
+ if (ingres_errno) return(sms_errcode);
return (exists ? SMS_EXISTS : vo->error);
##}
/* get corresponding data type associated with field type name */
## repeat retrieve (data_type = alias.trans)
## where alias.#name = @field_type and alias.type = "TYPEDATA"
+ if (ingres_errno) return(sms_errcode);
## inquire_equel (rowcount = "rowcount")
if (rowcount != 1) return(SMS_TYPE);
##}
+/* Lock the table named by the validation object */
+
+lock_table(vo)
+struct valobj *vo;
+##{
+## char *table, *idfield;
+## int rowcount;
+
+ table = vo->table;
+ idfield = vo->idfield;
+## replace table (modtime = "now") where table.idfield = 0
+ if (ingres_errno) return(sms_errcode);
+## inquire_equel (rowcount = "rowcount")
+ if (rowcount != 1)
+ return(vo->error);
+ else
+ return(SMS_EXISTS);
+##}
+
+
/* This looks up a login name and returns the SMS internal ID. It is used
* by authenticate to put the users_id in the client structure.
*/