Need comment on WHERE clause

i want to know in what order conditions in where clause evaluates.
select * from table
where emp_id
and tran_year
and tran_mon
select * from table
where tran_mon
and tran_year
and emp_id
consider tran_year, tran_mon , emp_id are primary key and table having record month wise , and consider employees are 50,000, so for one month 50000 record will be there .
so i believe 2nd query will faster than 1st one , becse oracle read from bottom so it will first filter acording emp_id .Please tell me if i m wrong

user12108669 wrote:
thanx for reply
but in very simple case like this one , in which we have only primary key ,, and only one table ,, in that case also order will be ignored .?Yes especially for the simple cases the order is of no relevance.
If you join more then 10 tables the number of permutations for those tables (all combinations) will be quite big. There is a (undocumented) parameter that influences the CBO on how many tables/permutations it will try. This influences the parsing time of the query. But for simple queries such a thing has absolutly no consequence.
Sorry I was talking about having multiple tables in the FROM clause. Not about multiple condition in the where clause. The main thing still is identical. The order has no real relevance. CBO will choose an order mostly depending on index usage. There could be more complexe example where the order might get some importance again, but those are extremly special cases (I think jonathan lewis once showed such an example) Difficult to dig it up now.
Edited by: Sven W. on Dec 2, 2010 3:19 PM
Edited by: Sven W. on Dec 2, 2010 3:20 PM

Similar Messages

  • Need Help on where clause condition

    Hello All,
    Thanks in advance::
    I have below SQL query which is returning 1500 records when i dont use any condition in where clause(Please see the query below);
    SELECT POS_TYPE,
    POS_ID,
    SUB_ACNT_ID,
    CHRG,
    DOC,
    NULL,
    ACNT_RLN,
    ACCOUNT_FLODERS_VER,
    DM_LSTUPDDT,
    DM_BTNUMBER,
    DM_USERID,
    DM_WSID,
    STAT_FLG,
    SERVICES_FLG,
    SERVICES,
    INTRST_COND,
    PST_INSTRN
    FROM &&SRC.ACCOUNT_FOLDERS,
    &&SRC.DB;
    Output: 15 rows retured
    And when i validate the data by putting some conditions in where clause , it is giving 1499 records ( Please see the query below with condition )
    SELECT POS_TYPE,
    POS_ID,
    SUB_ACNT_ID,
    CHRG,
    DOC,
    NULL,
    ACNT_RLN,
    ACCOUNT_FLODERS_VER,
    DM_LSTUPDDT,
    DM_BTNUMBER,
    DM_USERID,
    DM_WSID,
    STAT_FLG,
    SERVICES_FLG,
    SERVICES,
    INTRST_COND,
    PST_INSTRN
    FROM &&SRC.ACCOUNT_FOLDERS,
    &&SRC.DB
    WHERE (POS_TYPE,
    POS_ID,
    SUB_ACNT_ID) IN (SELECT POS_TYPE,
    POS_ID,
    SUB_ACNT_ID FROM ACCOUNT
    WHERE DM_LSTUPDDT > 1_LAST_RUN_DATE OR 1_FIRST_RUN_FLAG=1);
    Now, I wanted to know that missing record(1st SQL is giving 1500 rows without any condition & 1nd SQL is giving 1499 rows with condition in where clause)
    I am worried and confused to find out the missing record. Tried with different conditions like Not In... nothing worked perfectly.
    Could some one please have a look and provide me the correct SQL , Performance wise also it should be good, SQL should not cause any performance issues.
    Please help me on it..
    Thanks,
    MKR

    Do a minus
    SELECT POS_TYPE,
           POS_ID,
           SUB_ACNT_ID,
           CHRG,
           DOC,
           NULL,
           ACNT_RLN,
           ACCOUNT_FLODERS_VER,
           DM_LSTUPDDT,
           DM_BTNUMBER,
           DM_USERID,
           DM_WSID,
           STAT_FLG,
           SERVICES_FLG,
           SERVICES,
           INTRST_COND,
           PST_INSTRN
      FROM &&SRC.ACCOUNT_FOLDERS, &&SRC.DB;
    MINUS
    SELECT POS_TYPE,
           POS_ID,
           SUB_ACNT_ID,
           CHRG,
           DOC,
           NULL,
           ACNT_RLN,
           ACCOUNT_FLODERS_VER,
           DM_LSTUPDDT,
           DM_BTNUMBER,
           DM_USERID,
           DM_WSID,
           STAT_FLG,
           SERVICES_FLG,
           SERVICES,
           INTRST_COND,
           PST_INSTRN
      FROM &&SRC.ACCOUNT_FOLDERS, &&SRC.DB
    WHERE (POS_TYPE, POS_ID, SUB_ACNT_ID) IN (SELECT POS_TYPE, POS_ID, SUB_ACNT_ID
                                                 FROM ACCOUNT
                                                WHERE DM_LSTUPDDT > 1_LAST_RUN_DATE
                                                   OR  1_FIRST_RUN_FLAG = 1);  G.

  • Need help decifering where clause

    What do these excerpts from where statements do?
    1) and a_id = b_id + 0
    also
    2) and a_position = b.position || ''
    More importantly where does this kind of stuff show up in the Oracle documentation (joins?)
    Thanks
    Holly

    Functionally, those clauses are identical to
    and a_id = b_idand
    and a_position = b.positionThe difference is that adding 0 or concatenating a NULL prevents Oracle from using an index on b_id of b.position. That may have been intentional on the part of a previous developer, particularly if the application was originally written using the rule-based optimizer.
    Justin
    Frank beat me to it.
    Message was edited by:
    Justin Cave

  • Need logic for WHERE-clause

    Hi,
    I have a selet statement where i need to write below logic .
    SELECT bldat xblnr kunnr rstgr xref1 xref2
               bukrs belnr blart wrbtr waers shkzg
               buzei zfbdt dmbe2 sgtxt augbl augdt
               zbd1t zbd2t
          FROM  bsid
          INTO CORRESPONDING FIELDS OF TABLE int_output
          WHERE bldat IN so_bldat AND
                   shkzg IN so_shkzg AND
                    wrbtr IN so_wrbtr.      
    Range needs to be  entered where from value (for wrbtr field) is -ve negative and to value is +ve positive e.g., -1000 to +200 -:in this case go to BSID with value from 0 to 1000 with debit/credit indicator H and again 0 to 200 with debit/credit indicator S..
    can somebody tell me how to set range for the above requirement.
    Really need help.
    Edited by: Thomas Zloch on May 25, 2011 3:27 PM

    change:
    AND
    shkzg IN so_shkzg AND
    wrbtr IN so_wrbtr.
    to
    and  ( (SHKZG eq 'H' and wrbtr le 1000 ) or
              (SHKZG eq 'S' and wrbtr le 200 ) ).  ??

  • Dynamic Where Clause in a Loop ??

    I need a dynamich where-clause in a Loop-Statement, like this:
    LOOP AT gt_outtab INTO gs_outtab
      WHERE ( delta IS INITIAL AND <f_per> IS INITIAL ).
        gs_outtab-delta = gs_outtab-per01.
        MODIFY gt_outtab FROM gs_outtab.
    ENDLOOP.
    First I tried this:
    LOOP AT gt_outtab INTO gs_outtab
      WHERE ( delta IS INITIAL AND (ls_per) IS INITIAL ).
        gs_outtab-delta = gs_outtab-per01.
        MODIFY gt_outtab FROM gs_outtab.
    ENDLOOP.
    but with both I get a syntax error.
    Do you have an idea, how can I use the component I need dynamically?
    thanks.
    Samir

    HI
    GOOD
    Dynamic Conditions
    To specify a condition dynamically, use:
    SELECT ... WHERE (<itab>) ...
    where <itab> is an internal table with line type C and maximum length 72 characters. All of the conditions listed above except for selection tables, can be written into the lines of <itab>. However, you may only use literals, and not the names of data objects. The internal table can also be left empty.
    If you only want to specify a part of the condition dynamically, use:
    SELECT ... WHERE <cond> AND (<itab>) ...
    You cannot link a static and a dynamic condition using OR.
    You may only use dynamic conditions in the WHERE clause of the SELECT statement.
    ===============================
    DATA: TAB_SPFLI   TYPE TABLE OF SPFLI,
          TAB_SFLIGHT TYPE SORTED TABLE OF SFLIGHT
                           WITH UNIQUE KEY TABLE LINE,
          WA LIKE LINE OF TAB_SFLIGHT.
    SELECT CARRID CONNID
    INTO   CORRESPONDING FIELDS OF TABLE TAB_SPFLI
    FROM   SPFLI
    WHERE  CITYFROM  = 'NEW YORK'.
    SELECT CARRID CONNID FLDATE
    INTO   CORRESPONDING FIELDS OF TABLE TAB_SFLIGHT
    FROM   SFLIGHT
    FOR ALL ENTRIES IN TAB_SPFLI
    WHERE  CARRID = TAB_SPFLI-CARRID AND
           CONNID = TAB_SPFLI-CONNID.
    LOOP AT TAB_SFLIGHT INTO WA.
      AT NEW CONNID.
        WRITE: / WA-CARRID, WA-CONNID.
      ENDAT.
      WRITE: / WA-FLDATE.
    ENDLOOP.
    THANKS
    MRUTYUN

  • Using Filter and where clause in GoldenGate

    Hi,
    I need to use where clause in extract process.
    The condition i need to use is :- where (CODE LIKE '10%' OR CODE LIKE '0%')
    how to use LIKE operation along with OR in extract.
    I have multiple where conditions these are straight i.e = and <> which are working fine. But LIKE is not working.
    Please do assist for the same.
    Thanks.

    GoldenGate uses FILTER and SQLPREDICATE (and COMPUTE is a variation that can work, depending on how you are trying to manipulate the data).
    To filter data, you can use:
    ● A FILTER or WHERE clause in a TABLE statement (Extract) or in a MAP statement (Replicat).
    ● A SQL query or procedure
    ● User exits
    FILTER comparison operators include:
    Comparison operators:
    > (greater than)
    >= (greater than or equal)
    < (less than)
    <= (less than or equal)
    = (equal)
    <> (not equal)
    WHERE clause permissible operators:
    Column names PRODUCT_AMT
    Numeric values -123, 5500.123
    Literal strings "AUTO", "Ca"
    Built-in column tests @NULL, @PRESENT, @ABSENT (column is null, present or absent in the row). These tests are built into Oracle GoldenGate. See “Considerations for selecting rows with FILTER and WHERE” on page 155.
    Comparison operators =, <>, >, <, >=, <=
    Conjunctive operators AND, OR
    Grouping parentheses Use open and close parentheses ( ) for logical grouping of multiple elements.
    You could try using a GoldenGate string function. You know what the leading one or two characters (0 and 10) are.
    Use the @STREXT function to extract a portion of a string and do a comparison there. Or take care of it using SQLEXEC on replicat (call a function to be able to use LIKE).

  • Where clause in Detail VO - Jdev 10.1.3.2

    Hi..
    I have two VO and one VL join them.
    I need to set where clause in Detail view but when I load the page no one record from detail vo shows up.
    Master VO - companyView
    companyId,
    companyName
    Detail VO - EmployeeView
    EmpId
    EmpName
    CompanyId,
    DeptId...
    What I need is to set a clause like this
    Select EmpId, EmpName,CompanyId,DeptId from Employee where DeptId = 3
    if I set the value 3 in my detail VO is ok.
    but if I chage for a Bind Variable and define the variable using setNamedWhereClauseParam("myVariabel",3); in Prepare session it doesn´t work
    Someone knows How can I fix this problem?
    Thanks
    Willian

    Hello Maxi
    ViewCreteria really works fine.
    However, it only works only if I run the view object detail itself.
    If I run a Linked Master/Detail Queries
    it ignores my criteria.
    Would you know how could I set a criteria the works in a linked master/detail query?
    Thanks
    Willian

  • Dynamic itab with Dynamic Where clause

    Hi, Dear All,
    Can someone provide a code extract for Dynamic where clause, i had already done with dynamic itab for a given set of fields, and i need to add where clause dynamically for a given field for a given range of values.
    select (i_fields) into table <dyn_table>
                      from (p_table)
                     where (v_where).
    In the above except the where clause, everything is done. Please help me.
    with best regards
    Mahesh

    Hi,
    here is the code extract for your reference.Pl. correct me.
    with regards
    REPORT  Z_DYN_ITAB                              .
    TYPE-POOLS: SLIS.
    DATA:NAME(100) TYPE C.
    TYPES: BEGIN OF ITAB_TYPE,
            WORD(20),
          END   OF ITAB_TYPE.
    DATA: ITAB TYPE STANDARD TABLE OF ITAB_TYPE WITH HEADER LINE.
    DATA: vg_fields(255) TYPE c,
          i_fields LIKE TABLE OF vg_fields.
    DATA: it_fcat TYPE slis_t_fieldcat_alv,
          is_fcat LIKE LINE OF it_fcat,
          ls_layout TYPE slis_layout_alv.
    DATA: it_fieldcat TYPE lvc_t_fcat,
          is_fieldcat LIKE LINE OF it_fieldcat.
    field-symbols: <dyn_table> type standard table,
                   <dyn_wa>,
                   <dyn_field>.
    data: dy_table type ref to data.
    data: dy_line type ref to data,
          xfc type lvc_s_fcat.
    DATA: v_where TYPE string, " Variable for storing where clause.
          v_dynamic(18) TYPE c, "variable to store select option datatype
          o_field TYPE REF TO cx_root," object to catch exception
          text TYPE string. "string variable to store exception text.
    CONSTANTS: c_var(15) TYPE c VALUE ' IN S_RANGE'.
    selection-screen begin of block b1 with frame.
    parameters: p_table(30) type c default 'T001',
                p_name(100) type c,
                p_field(10) TYPE c. " Parameter to capture field name.
    SELECT-OPTIONS: s_range FOR v_dynamic. " Select-option for range.
    selection-screen end of block b1.
    start-of-selection.
    NAME = p_name.
    SPLIT NAME AT ',' INTO TABLE ITAB.
    LOOP AT ITAB.
    is_fcat-fieldname = itab-word.
    is_fcat-tabname = p_table.
    APPEND is_fcat to it_fcat.
    ENDLOOP.
    LOOP AT it_fcat INTO is_fcat.
      is_fieldcat-fieldname = is_fcat-fieldname.
      is_fieldcat-tabname = is_fcat-tabname.
      APPEND is_fieldcat TO it_fieldcat.
      CONCATENATE is_fieldcat-tabname is_fieldcat-fieldname INTO
            vg_fields SEPARATED BY '~'.
      APPEND vg_fields TO i_fields.
    ENDLOOP.
    perform create_dynamic_itab.
    perform get_data.
    Create dynamic internal table and assign to FS
    form create_dynamic_itab.
    call method cl_alv_table_create=>create_dynamic_table
    exporting
    it_fieldcatalog = it_fieldcat
    importing
    ep_table = dy_table.
    assign dy_table->* to <dyn_table>.
    Create dynamic work area and assign to FS
    create data dy_line like line of <dyn_table>.
    assign dy_line->* to <dyn_wa>.
    endform.
    form get_data.
    Select Data from table.
    CONCATENATE p_field c_var INTO v_where.
    TRY.
    select (i_fields) into table <dyn_table>
                      from (p_table)
                     where (v_where).
    if sy-dbcnt = 0.
    write : text-t02.
    endif.
    *Write out data from table.
    Loop at <dyn_table> into <dyn_wa>.
    do.
    assign component sy-index of structure <dyn_wa> to <dyn_field>.
    if sy-subrc <> 0.
      exit.
    endif.
    if sy-index = 1.
      write:/ <dyn_field>.
    else.
      write: <dyn_field>.
    endif.
    enddo.
    endloop.
    Exception Catching.
    CATCH cx_root INTO o_field.
    text = o_field->get_text( ).
    Calling Function to give information message regarding Exception
    CALL FUNCTION 'POPUP_TO_INFORM'
    EXPORTING
    titel = text-t03
    txt1 = text
    txt2 = text-t04.
    TXT3 = ' '
    TXT4 = ' '
    LEAVE TO LIST-PROCESSING.
    ENDTRY.
    endform.

  • Bc4j: set where clause at runtime for view objcet ?

    how to set where clause for a view object that is not put in a subselect at runtime ?
    select a.para_id, b.para_para_id
    from table1 a, table2 b
    need to set at runtime either:
    where a.para_id = b.para_para_id
    or:
    where a.para_id = b.para_para_id(+)
    problem is that bc4j is useing it as followed:
    select * from (
    select a.para_id, b.para_para_id
    from table1 a, table2 b
    ) where (a.para_id = b.para_para_id(+))
    cant use outer join like this
    any suggestions

    If you do not want to issue the framework built query, you may want to set the query for a VO yourself instead of setting just the where clause by using setQuery() api. TO revert back to framework built query, call setQuery(null).
    This way, when you need the xtra where-clause and not the "innerSQL stuff", you can build a custom sql with whereclause etc, and call setQuery(), execute that SQL, perform your tricks with the VO and then when the VO is usage is done, reset the VO query to original by calling setQuery(null).

  • REP 300 error when using dynamic where clause

    Hi,
    I am developing a report and I need a dynamic where clause.The code I have written in the where clause is as below
    function where_clauseFormula return VARCHAR2 is
    begin
    if :P_PO_REQD = 'No' then
    return ('and pha.segment1 is null');
    elsif :P_PO_REQD = 'Yes' then
         return('and pha.segment1 between NVL(:p_po_num_from,1) and NVL(:p_po_num_to,99999999999999999)');
    else return NULL;
    end if;
    end;
    Now if i directly use either of the conditions in my report query it works fine.But if the parameter is No then the where clause does not work.I have also tried different statements in the if clause of the 'No' part and they work.For example the following code works when :P_PO_REQD is 'No' :
    function where_clauseFormula return VARCHAR2 is
    begin
    if :P_PO_REQD = 'No' then
    return ('and pha.segment1 between NVL(:p_po_num_from,1) and NVL(:p_po_num_to,99999999999999999)');
    elsif :P_PO_REQD = 'Yes' then
         return('and pha.segment1 between NVL(:p_po_num_from,1) and NVL(:p_po_num_to,99999999999999999)');
    else return NULL;
    end if;
    end;
    I don't know why this is happening.I really need a solution or a workaround urgently
    Thanks
    Mukund

    You may use Lexical Reference for the dynamic where. In After Parameter Form Trigger, code....
    if :P_PO_REQD = 'No' then
    :P_where := :P_where || 'and pha.segment1 is null';
    elsif :P_PO_REQD = 'Yes' then
    :P_where := :P_where || 'and pha.segment1 between NVL(:p_po_num_from,1) and NVL(:p_po_num_to,99999999999999999)';
    end if;
    ..........

  • Additional where-clause for LOV in 9i needs table-alias

    We have upgraded from 6.0 to 9i. All our Forms had been generated for 100% using Headstart. Now we try to generate them all again and encounter a problem with the list of values. It appears that the Additional restriction in the List of Values Properties always needs the table-alias to work properly when references are made to an item in the form.
    For example:
    We have item ORG_CODE in block ORG and have a lov showing all others organisations. The default-where coded in 6.0 looked like this:
    org_code <> :org.org_code
    In 6.0 this worked perfectly. However, in 9i the where-clause is being translated into
    :org.org_code <> :org.org_code
    Offcourse the lov now always gives the message that it contains no entries!
    We have found a solution for this problem - rewrite the where-clause to
    lov_alias.org_code <> :org.org_code
    However, this solution means that we have to check tens, hundreds of lov's, because we never used to put an alias in the where-clause.
    Because of this problem 95% of our Forms can not be generated anymore.
    Anyone has a easy solution for this problem?

    I mean:
    select * from T-A, T-B
    where T-A.id = T-B.id (+)
    and T-B.number (+) = 570
    to get the null record you'll have to do:
    select * from T-A, T-B
    where T-A.id = T-B.id (+)
    and nvl(T-B.number,0) (+) not in (0,570)
    or
    select * from T-A, T-B
    where T-A.id = T-B.id (+)
    and (T-B.number (+) <> 570
    or T-B.number (+) is null)
    hope that works (untested)
    null

  • Need a FM to convert into dynamic where clause

    Hi all
    I had a requirement in BI Extractor i need a  FM to convert RSELECT into dynamic where clause query
    Please help me
    Regards
    Hitesh

    Hi Dolly
    code like this
    day = date + 0(2)
    month = date + 3(2)
    year date + 6(4).
    case month.
    when '01'.
    mon = 'january'.
    when '02'.
    mon= 'february'.
    etc....
    endcase.
    concatenate day 'th' ' ' mon ' ' year into output.
    write:/ output.
    reward points to all helpful answers
    kiran.M

  • Column Security - Users can't see it, but need to use it in the query WHERE Clause

    I am looking at possible solutions (if any) on column security. We need to be able to restrict users from seeing certain columns, however, they will need these columns in the WHERE clause of queries.
    I thought about creating views, however, it would be a poor database design. Is there any way that this can be done on the database level. I know about Fine Granular Access Method, however, this just excludes the column completely. Which means that they can not be used in the WHERE clause.
    Any help would be greatly appreciated.
    Philip

    I too added 2nd apple ID when I tried to get Free app from apple store just to get to NONE on the credit card needed. It said it sent confirmation email to my new apple ID email that I have to confirm. Problem is I can not get to the new apple ID email account.  On my ipad it logs into my original email account and I see no where to log into another email account.  If I go to my laptop, the new apple ID I created does not let me log into email where apple said it was sent to.  It did not send to back up email account either.
    Can I log into 2 email accounts on my ipad where it says mail at bottom?
    Can I have 2 apple ids?
    If I created a 2nd apple id to get to NONE on credit card needed, can't I log into it also on another laptop in gmail?
    (won't let me)
    If I used my original apple id I created when I got my new ipad, it will not let me get free app without credit card, there is no where it says NONE needed. I am too new to apple to start with credit cards etc until I get use to it.

  • MDX query - need to run different query (where clause) on mondays

    The below query works OK and uses the substitution variable CurrentWeek in the WHERE clause, but I have one shortcoming that I need your help for:
    The query works fine for all days but mondays. On Mondays I need the query to fetch numbers from last week (as opposed to current week) as the query returns null as the cubes have no data for current week on mondays. Hence I need to change the where clause to use substitution variable LastWeek, or in some other way run a different query on mondays. I have another substitution variable called WeekDay which I can use to test which day of the week it is, but I am not sure of the syntax I need to use to test for day of week and then have the query use different substitution variables as a result of this test.
    Please help.
    Henning Strand
    SELECT NON EMPTY {[Measures].[meas_sg]} ON COLUMNS,
    NON EMPTY {[Kunde],[Kunde].[KU01],[Kunde].[KU02],[Kunde].[KU03],[Kunde].[KU04]} ON ROWS
    FROM MIFS.MIFS
    WHERE ([Marked].[Dagligvare],[Tid].[&CurrentWeek])

    Or to go off of Sean's suggestion, programmatically change the value of the substitution variable, and leave the code alone.
    Other thoughts -- have a load process to a single cell (sorry, my BSO roots are showing, but the concept is the same, load a single number) and then do a boolean test off its value -- 0 = Monday, 1 = the rest of the week.
    Regards,
    Cameron Lackpour

  • Need help in clearing string buffer during dynamic VO where clause in oaf

    Hi All,
    I am dynamically setting where clause in OAF using string buffer, but the issue is when i am executing the vo multiple times so the old data in the string buffer it is not clearing .so every time my where clause adding to the query and it is erroring out, please help me how to clear string buffer class in oaf.
    Thnaks

    Hi,
    Could you please share the code segment for reference. Then we can tell the solution.
    Regards,
    Tarun

Maybe you are looking for

  • Number Range for PO based on company code and document type

    Dear All, I've a requirement to assign a separate purchase order Number Range for a company code for the following document types. ZNB         Standard PO    ZRB         Return PO ZUB         Stock transport ord.  ZLPA       Scheduling agreement  ZLU

  • Previous versions of drivers; Screensaver Install; Active Protection Icon

    Hello, I'm having a few issues and was wondering if someone could offer some assistance. I have a X200 which is running Vista 64-bit OS. I just completed a clean install of Vista-64. Issue #1 (old *.scr file) - Is it posible to run my old Lenovo scre

  • Grep bombs out with malloc erros

    running grep -R mystring * bombs out with: grep(524) malloc: * mmap(size=1195270144) failed (error code=12) * error: can't allocate region * set a breakpoint in mallocerrorbreak to debug grep: memory exhausted The system I'm having problems with is a

  • My external HDD doesn't works on Macbook Pro ML

    Hi, my external HDD works on Windows and Macbook SL, doesn't with Macbook Pro ML. I can't see it in Disk Utility. Can someone help me or suggest what I have to do? Thanks daniele IT

  • Working with Multiple Projects

    I recently started working for a company that has multiple webhelp projects created in robohelp v6. The projects are linked together under a shell merge so the TOC will display correctly. We have upgraded to v7 and will be converting all the projects