Ah yes... welcome to the Universe query processor.  Just try working with
exploded sorts with PICK type dictionaires- then you will start to cry...

Chris is this in a BASIC program that this select is happening?
Is it using User Input?

If so, you can save yourself a TON of trouble, by just doing your case
insensitive stuff in BASIC and forgetting about using dictionaries to do it
:)
ala OCONV(), or UPCASE()

On Tue, Jul 26, 2011 at 2:44 PM, Ed Clark <u...@edclark.net> wrote:

> universe is doing something fundamentally weird with this. The select works
> differently if you use a wildcard or have an index.
>
> Create a file with some multi-case data:
> 0001 EXECUTE 'CREATE-FILE TESTFILE 1 1'
> 0002 OPEN 'TESTFILE' TO FP ELSE ABORT
> 0003 CLEARFILE FP
> 0004 OPEN 'DICT','TESTFILE' TO DFP ELSE ABORT
> 0005 WRITE 'D':@AM:1:@AM:@AM:'D1':@AM:'10L' ON DFP,'D1'
> 0006 WRITE 'D':@AM:1:@AM:'MCU':@AM:'D1MCU':@AM:'10L' ON DFP,'D1MCU'
> 0007 WRITE 'AB' ON FP,1
> 0008 WRITE 'ab' ON FP,2
> 0009 WRITE 'Ab' ON FP,3
> 0010 WRITE 'aB' ON FP,4
> 0011 EXECUTE 'LIST TESTFILE D1 D1MCU'
>
> Now try some queries:
> LIST TESTFILE WITH D1 = "AB" D1 D1MCU 08:03:14pm  25 Aug 2010  PAGE    1
> TESTFILE.. D1........ D1MCU.....
>
> 1          AB         AB
>
> 1 records listed.
>
> LIST TESTFILE WITH D1 = "AB]" D1 D1MCU 08:03:47pm  25 Aug 2010  PAGE    1
> TESTFILE.. D1........ D1MCU.....
>
> 1          AB         AB
>
> 1 records listed.
>
> LIST TESTFILE WITH D1MCU = "AB" D1 D1MCU 08:04:19pm  25 Aug 2010  PAGE    1
> TESTFILE.. D1........ D1MCU.....
>
> 1          AB         AB
>
> 1 records listed.
>
>
> The above all make sense. But not try D1MCU with a wildcard:
>
> LIST TESTFILE WITH D1MCU = "AB]" D1 D1MCU 08:05:43pm  25 Aug 2010  PAGE
>  1
> TESTFILE.. D1........ D1MCU.....
>
> 1          AB         AB
> 2          ab         AB
> 3          Ab         AB
> 4          aB         AB
>
> 4 records listed.
>
> If you use both the MCU conversion AND a wildcard, universe is using
> different rules for selection.
>
> BUT... it gets even weirder with an index. After building an index on
> either D1 or D1MCU:
>
> LIST TESTFILE WITH D1MCU = "AB]" D1 D1MCU 08:07:39pm  25 Aug 2010  PAGE
>  1
> TESTFILE.. D1........ D1MCU.....
>
> 1          AB         AB
> 3          Ab         AB
>
> 2 records listed.
>
> WTF? If you throw on the NO.INDEX keyword, the index is ignored and
> universe goes back to selecting all the items.
>
> So essentially universe is doing some hack so that it can deal with
> wildcards on converted data, but the result is inconsistent queries.
> Bottom line, if you want to do case-insensitive selects, you need to either
> move to D3, or use a calculated attribute. For example:
>
>     A1
> 0001 A
> 0002 1
> 0003 A1
> 0004
> 0005
> 0006
> 0007
> 0008 MCU
> 0009 L
> 0010 10
>
> The MCU in the correlative position (line 7) makes sure that your query is
> always seeing the upcased data.
>
> On Jul 26, 2011, at 2:09 PM, Ed Clark wrote:
>
> > universe or unidata? what flavor?
> >
> > I don't see how this would have worked in the first place? When you use a
> query with literal comparisons, the literal is compared against the
> pre-converted value. If the attribute has a reversible conversion then your
> literal will be reverse-converted first, for example:
> >  SELECT INVOICE-FILE WITH INVOICE.DATE = "12/31/2010"
> > if INVOICE.DATE has a date conversion then "12/31/2010" will be converted
> to an internal value before comparison. But in your example MCU is not
> reversible. So you will only find what you ask for literally.
> >
> > Is it possible that you were using a different attribute that does a
> computation? A virtual attribute on unidata or a correlative on universe
> with does the upcasing? In that case then your literal in the query would be
> compared against the calculated value. An index would also be built on the
> calculated value
> >
> > On Jul 26, 2011, at 1:37 PM, Chris Austin wrote:
> >
> >>
> >> I changed the DICT entry for field NAME on the CLIENT table to the
> following:
> >>
> >>    NAME
> >> 0001 D
> >> 0002 5
> >> 0003 MCU
> >> 0004 Name
> >> 0005 25L
> >> 0006 S
> >> 0007
> >> 0008 CHARACTER,25
> >>
> >> But it still doesn't seem to work in regards to the case-sensitive.
> >>
> >> Chris
> >>
> >>
> >>
> >>> From: bl...@shaklee.com
> >>> To: u2-users@listserver.u2ug.org
> >>> Date: Tue, 26 Jul 2011 09:44:35 -0700
> >>> Subject: Re: [U2] CONV MCU on indexed field?
> >>>
> >>> We are using Unidata and this is a dict for Country:
> >>>
> >>> CNTRY:
> >>>
> >>> D
> >>>
> >>> 4
> >>>
> >>> MCU
> >>>
> >>> Cntry
> >>>
> >>> 6L
> >>>
> >>> M
> >>>
> >>>
> >>> You could do the same change to the NAME definition but I was
> suggesting
> >>> that if you didn't want to or couldn't do that then another definition
> could
> >>> be created that forced the name to be upper-case.
> >>>
> >>> -----Original Message-----
> >>> From: u2-users-boun...@listserver.u2ug.org
> >>> [mailto:u2-users-boun...@listserver.u2ug.org] On Behalf Of Chris
> Austin
> >>> Sent: Tuesday, July 26, 2011 9:36 AM
> >>> To: u2-users@listserver.u2ug.org
> >>> Subject: Re: [U2] CONV MCU on indexed field?
> >>>
> >>>
> >>>
> >>> I'm not exactly following you. Would this dict item called NAME.UPCASE,
> >>> would that be a new field to test this or woudl that be a specific
> field
> >>> used to do the conversion? What would the dictionary look like.
> >>>
> >>> Chris
> >>>
> >>>
> >>>> From: bl...@shaklee.com
> >>>> To: u2-users@listserver.u2ug.org
> >>>> Date: Tue, 26 Jul 2011 09:32:48 -0700
> >>>> Subject: Re: [U2] CONV MCU on indexed field?
> >>>>
> >>>> Could you create another dict item called NAME.UPCASE and put the MCU
> >>>> in that definition?
> >>>>
> >>>> -----Original Message-----
> >>>> From: u2-users-boun...@listserver.u2ug.org
> >>>> [mailto:u2-users-boun...@listserver.u2ug.org] On Behalf Of Chris
> >>>> Austin
> >>>> Sent: Tuesday, July 26, 2011 9:25 AM
> >>>> To: u2-users@listserver.u2ug.org
> >>>> Subject: [U2] CONV MCU on indexed field?
> >>>>
> >>>>
> >>>>
> >>>> We've been using the following command to select a name regardless of
> >>>> how it's capitalized:
> >>>>
> >>>> SELECT CLIENT WITH NAME CONV MCU = "BRUCE]"
> >>>>
> >>>> However, after I indexed the field NAME on the CLIENT table the same
> >>>> command only returns the values that match the case-sensitive. In
> >>>> other words after we indexed the field name it doesn't seem that we
> >>>> can use CONV MCU, is there a work around to this?
> >>>>
> >>>> Thanks,
> >>>>
> >>>> Chris
> >>>>
> >>>>
> >>>> _______________________________________________
> >>>> U2-Users mailing list
> >>>> U2-Users@listserver.u2ug.org
> >>>> http://listserver.u2ug.org/mailman/listinfo/u2-users
> >>>> _______________________________________________
> >>>> U2-Users mailing list
> >>>> U2-Users@listserver.u2ug.org
> >>>> http://listserver.u2ug.org/mailman/listinfo/u2-users
> >>>
> >>> _______________________________________________
> >>> U2-Users mailing list
> >>> U2-Users@listserver.u2ug.org
> >>> http://listserver.u2ug.org/mailman/listinfo/u2-users
> >>> _______________________________________________
> >>> U2-Users mailing list
> >>> U2-Users@listserver.u2ug.org
> >>> http://listserver.u2ug.org/mailman/listinfo/u2-users
> >>
> >> _______________________________________________
> >> U2-Users mailing list
> >> U2-Users@listserver.u2ug.org
> >> http://listserver.u2ug.org/mailman/listinfo/u2-users
> >
> > _______________________________________________
> > U2-Users mailing list
> > U2-Users@listserver.u2ug.org
> > http://listserver.u2ug.org/mailman/listinfo/u2-users
>
> _______________________________________________
> U2-Users mailing list
> U2-Users@listserver.u2ug.org
> http://listserver.u2ug.org/mailman/listinfo/u2-users
>



-- 
John Thompson
_______________________________________________
U2-Users mailing list
U2-Users@listserver.u2ug.org
http://listserver.u2ug.org/mailman/listinfo/u2-users

Reply via email to